diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..92514c6 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,133 @@ +[*.cs] + +# CS8618: Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable. +dotnet_diagnostic.CS8618.severity = suggestion +csharp_indent_labels = one_less_than_current +csharp_space_around_binary_operators = before_and_after +csharp_using_directive_placement = outside_namespace:silent +csharp_prefer_simple_using_statement = true:suggestion +csharp_prefer_braces = true:silent +csharp_style_namespace_declarations = block_scoped:silent +csharp_style_prefer_method_group_conversion = true:silent +csharp_style_prefer_top_level_statements = true:silent +csharp_style_expression_bodied_methods = false:silent +csharp_style_expression_bodied_constructors = false:silent +csharp_style_expression_bodied_operators = false:silent +csharp_style_expression_bodied_properties = true:silent +csharp_style_expression_bodied_indexers = true:silent +csharp_style_expression_bodied_accessors = true:silent +csharp_style_expression_bodied_lambdas = true:silent +csharp_style_expression_bodied_local_functions = false:silent +csharp_style_throw_expression = true:suggestion +csharp_prefer_simple_default_expression = true:suggestion +csharp_style_prefer_null_check_over_type_check = true:suggestion +csharp_style_prefer_index_operator = true:suggestion +csharp_style_prefer_local_over_anonymous_function = true:suggestion +csharp_style_prefer_range_operator = true:suggestion +csharp_style_implicit_object_creation_when_type_is_apparent = true:suggestion +csharp_style_prefer_tuple_swap = true:suggestion +csharp_style_prefer_utf8_string_literals = true:suggestion +csharp_style_inlined_variable_declaration = true:suggestion +csharp_style_deconstructed_variable_declaration = true:suggestion +csharp_style_unused_value_assignment_preference = discard_variable:suggestion +csharp_style_unused_value_expression_statement_preference = discard_variable:silent +csharp_prefer_static_local_function = true:suggestion +csharp_style_prefer_readonly_struct = true:suggestion +csharp_style_allow_blank_lines_between_consecutive_braces_experimental = true:silent +csharp_style_allow_embedded_statements_on_same_line_experimental = true:silent +csharp_style_allow_blank_line_after_colon_in_constructor_initializer_experimental = true:silent +csharp_style_allow_blank_line_after_token_in_conditional_expression_experimental = true:silent +csharp_style_allow_blank_line_after_token_in_arrow_expression_clause_experimental = true:silent +csharp_style_conditional_delegate_call = true:suggestion +csharp_style_prefer_switch_expression = true:suggestion +csharp_style_prefer_pattern_matching = true:silent +csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion +csharp_style_pattern_matching_over_as_with_null_check = true:suggestion +csharp_style_prefer_not_pattern = true:suggestion +csharp_style_prefer_extended_property_pattern = true:suggestion +csharp_style_var_for_built_in_types = false:silent +csharp_style_var_when_type_is_apparent = false:silent +csharp_style_var_elsewhere = false:silent + +[*.{cs,vb}] +dotnet_style_operator_placement_when_wrapping = beginning_of_line +tab_width = 4 +indent_size = 4 +end_of_line = crlf +dotnet_style_coalesce_expression = true:suggestion +dotnet_style_null_propagation = true:suggestion +dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion +dotnet_style_prefer_auto_properties = true:silent +dotnet_style_object_initializer = true:suggestion +[*.{cs,vb}] +#### Naming styles #### + +# Naming rules + +dotnet_naming_rule.interface_should_be_begins_with_i.severity = suggestion +dotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface +dotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i + +dotnet_naming_rule.types_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.types_should_be_pascal_case.symbols = types +dotnet_naming_rule.types_should_be_pascal_case.style = pascal_case + +dotnet_naming_rule.non_field_members_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members +dotnet_naming_rule.non_field_members_should_be_pascal_case.style = pascal_case + +# Symbol specifications + +dotnet_naming_symbols.interface.applicable_kinds = interface +dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.interface.required_modifiers = + +dotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum +dotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.types.required_modifiers = + +dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method +dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.non_field_members.required_modifiers = + +# Naming styles + +dotnet_naming_style.begins_with_i.required_prefix = I +dotnet_naming_style.begins_with_i.required_suffix = +dotnet_naming_style.begins_with_i.word_separator = +dotnet_naming_style.begins_with_i.capitalization = pascal_case + +dotnet_naming_style.pascal_case.required_prefix = +dotnet_naming_style.pascal_case.required_suffix = +dotnet_naming_style.pascal_case.word_separator = +dotnet_naming_style.pascal_case.capitalization = pascal_case + +dotnet_naming_style.pascal_case.required_prefix = +dotnet_naming_style.pascal_case.required_suffix = +dotnet_naming_style.pascal_case.word_separator = +dotnet_naming_style.pascal_case.capitalization = pascal_case +dotnet_style_collection_initializer = true:suggestion +dotnet_style_prefer_simplified_boolean_expressions = true:suggestion +dotnet_style_prefer_conditional_expression_over_assignment = true:silent +dotnet_style_explicit_tuple_names = true:suggestion +dotnet_style_prefer_conditional_expression_over_return = true:silent +dotnet_style_prefer_inferred_tuple_names = true:suggestion +dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion +dotnet_style_prefer_simplified_interpolation = true:suggestion +dotnet_style_prefer_compound_assignment = true:suggestion +dotnet_style_namespace_match_folder = true:suggestion +dotnet_style_readonly_field = true:suggestion +dotnet_style_predefined_type_for_locals_parameters_members = true:silent +dotnet_style_predefined_type_for_member_access = true:silent +dotnet_style_require_accessibility_modifiers = for_non_interface_members:silent +dotnet_style_allow_statement_immediately_after_block_experimental = true:silent +dotnet_style_allow_multiple_blank_lines_experimental = true:silent +dotnet_code_quality_unused_parameters = all:suggestion +dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:silent +dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:silent +dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:silent +dotnet_style_parentheses_in_other_operators = never_if_unnecessary:silent +dotnet_style_qualification_for_field = false:silent +dotnet_style_qualification_for_property = false:silent +dotnet_style_qualification_for_method = false:silent +dotnet_style_qualification_for_event = false:silent diff --git a/AutoPatcherAdmin/AMain.Designer.cs b/AutoPatcherAdmin/AMain.Designer.cs new file mode 100644 index 0000000..2c01a28 --- /dev/null +++ b/AutoPatcherAdmin/AMain.Designer.cs @@ -0,0 +1,322 @@ +namespace AutoPatcherAdmin +{ + partial class AMain + { + /// + /// 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.ClientTextBox = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.HostTextBox = new System.Windows.Forms.TextBox(); + this.label3 = new System.Windows.Forms.Label(); + this.LoginTextBox = new System.Windows.Forms.TextBox(); + this.label4 = new System.Windows.Forms.Label(); + this.PasswordTextBox = new System.Windows.Forms.TextBox(); + this.ProcessButton = new System.Windows.Forms.Button(); + this.progressBar1 = new System.Windows.Forms.ProgressBar(); + this.ActionLabel = new System.Windows.Forms.Label(); + this.label5 = new System.Windows.Forms.Label(); + this.progressBar2 = new System.Windows.Forms.ProgressBar(); + this.SpeedLabel = new System.Windows.Forms.Label(); + this.label7 = new System.Windows.Forms.Label(); + this.FileLabel = new System.Windows.Forms.Label(); + this.label8 = new System.Windows.Forms.Label(); + this.ListButton = new System.Windows.Forms.Button(); + this.AllowCleanCheckBox = new System.Windows.Forms.CheckBox(); + this.DownloadExistingButton = new System.Windows.Forms.Button(); + this.btnFixGZ = new System.Windows.Forms.Button(); + this.ProtocolDropDown = new System.Windows.Forms.ComboBox(); + this.label6 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // ClientTextBox + // + this.ClientTextBox.Location = new System.Drawing.Point(99, 12); + this.ClientTextBox.Name = "ClientTextBox"; + this.ClientTextBox.Size = new System.Drawing.Size(254, 20); + this.ClientTextBox.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(81, 13); + this.label1.TabIndex = 1; + this.label1.Text = "Client Directory:"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(20, 41); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(73, 13); + this.label2.TabIndex = 4; + this.label2.Text = "Host Address:"; + // + // HostTextBox + // + this.HostTextBox.Location = new System.Drawing.Point(99, 38); + this.HostTextBox.Name = "HostTextBox"; + this.HostTextBox.Size = new System.Drawing.Size(254, 20); + this.HostTextBox.TabIndex = 3; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(57, 67); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(36, 13); + this.label3.TabIndex = 6; + this.label3.Text = "Login:"; + // + // LoginTextBox + // + this.LoginTextBox.Location = new System.Drawing.Point(99, 64); + this.LoginTextBox.Name = "LoginTextBox"; + this.LoginTextBox.Size = new System.Drawing.Size(254, 20); + this.LoginTextBox.TabIndex = 5; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(37, 93); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(56, 13); + this.label4.TabIndex = 8; + this.label4.Text = "Password:"; + // + // PasswordTextBox + // + this.PasswordTextBox.Location = new System.Drawing.Point(99, 90); + this.PasswordTextBox.Name = "PasswordTextBox"; + this.PasswordTextBox.Size = new System.Drawing.Size(254, 20); + this.PasswordTextBox.TabIndex = 7; + // + // ProcessButton + // + this.ProcessButton.Location = new System.Drawing.Point(12, 139); + this.ProcessButton.Name = "ProcessButton"; + this.ProcessButton.Size = new System.Drawing.Size(75, 23); + this.ProcessButton.TabIndex = 9; + this.ProcessButton.Text = "Process"; + this.ProcessButton.UseVisualStyleBackColor = true; + this.ProcessButton.Click += new System.EventHandler(this.ProcessButton_Click); + // + // progressBar1 + // + this.progressBar1.Location = new System.Drawing.Point(12, 182); + this.progressBar1.Name = "progressBar1"; + this.progressBar1.Size = new System.Drawing.Size(372, 16); + this.progressBar1.TabIndex = 12; + // + // ActionLabel + // + this.ActionLabel.AutoSize = true; + this.ActionLabel.Location = new System.Drawing.Point(59, 166); + this.ActionLabel.Name = "ActionLabel"; + this.ActionLabel.Size = new System.Drawing.Size(24, 13); + this.ActionLabel.TabIndex = 11; + this.ActionLabel.Text = "Idle"; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(13, 166); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(40, 13); + this.label5.TabIndex = 10; + this.label5.Text = "Action:"; + // + // progressBar2 + // + this.progressBar2.Location = new System.Drawing.Point(12, 238); + this.progressBar2.Name = "progressBar2"; + this.progressBar2.Size = new System.Drawing.Size(372, 10); + this.progressBar2.TabIndex = 13; + // + // SpeedLabel + // + this.SpeedLabel.AutoSize = true; + this.SpeedLabel.Location = new System.Drawing.Point(59, 222); + this.SpeedLabel.Name = "SpeedLabel"; + this.SpeedLabel.Size = new System.Drawing.Size(24, 13); + this.SpeedLabel.TabIndex = 15; + this.SpeedLabel.Text = "Idle"; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(12, 222); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(41, 13); + this.label7.TabIndex = 14; + this.label7.Text = "Speed:"; + // + // FileLabel + // + this.FileLabel.AutoSize = true; + this.FileLabel.Location = new System.Drawing.Point(59, 209); + this.FileLabel.Name = "FileLabel"; + this.FileLabel.Size = new System.Drawing.Size(24, 13); + this.FileLabel.TabIndex = 17; + this.FileLabel.Text = "Idle"; + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(27, 209); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(26, 13); + this.label8.TabIndex = 16; + this.label8.Text = "File:"; + // + // ListButton + // + this.ListButton.Location = new System.Drawing.Point(309, 139); + this.ListButton.Name = "ListButton"; + this.ListButton.Size = new System.Drawing.Size(75, 23); + this.ListButton.TabIndex = 20; + this.ListButton.Text = "Create List"; + this.ListButton.UseVisualStyleBackColor = true; + this.ListButton.Click += new System.EventHandler(this.ListButton_Click); + // + // AllowCleanCheckBox + // + this.AllowCleanCheckBox.AutoSize = true; + this.AllowCleanCheckBox.Location = new System.Drawing.Point(99, 116); + this.AllowCleanCheckBox.Name = "AllowCleanCheckBox"; + this.AllowCleanCheckBox.Size = new System.Drawing.Size(98, 17); + this.AllowCleanCheckBox.TabIndex = 22; + this.AllowCleanCheckBox.Text = "Allow Clean Up"; + this.AllowCleanCheckBox.UseVisualStyleBackColor = true; + // + // DownloadExistingButton + // + this.DownloadExistingButton.Location = new System.Drawing.Point(169, 139); + this.DownloadExistingButton.Name = "DownloadExistingButton"; + this.DownloadExistingButton.Size = new System.Drawing.Size(134, 23); + this.DownloadExistingButton.TabIndex = 23; + this.DownloadExistingButton.Text = "Download Existing Data"; + this.DownloadExistingButton.UseVisualStyleBackColor = true; + this.DownloadExistingButton.Click += new System.EventHandler(this.DownloadExistingButton_Click); + // + // btnFixGZ + // + this.btnFixGZ.Location = new System.Drawing.Point(93, 139); + this.btnFixGZ.Name = "btnFixGZ"; + this.btnFixGZ.Size = new System.Drawing.Size(75, 23); + this.btnFixGZ.TabIndex = 24; + this.btnFixGZ.Text = "Fix *.gz"; + this.btnFixGZ.UseVisualStyleBackColor = true; + this.btnFixGZ.Click += new System.EventHandler(this.btnFixGZ_Click); + // + // ProtocolDropDown + // + this.ProtocolDropDown.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.ProtocolDropDown.FormattingEnabled = true; + this.ProtocolDropDown.Items.AddRange(new object[] { + "Ftp", + "SFtp"}); + this.ProtocolDropDown.Location = new System.Drawing.Point(262, 114); + this.ProtocolDropDown.Name = "ProtocolDropDown"; + this.ProtocolDropDown.Size = new System.Drawing.Size(91, 21); + this.ProtocolDropDown.TabIndex = 25; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(207, 117); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(49, 13); + this.label6.TabIndex = 26; + this.label6.Text = "Protocol:"; + // + // AMain + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(392, 257); + this.Controls.Add(this.label6); + this.Controls.Add(this.ProtocolDropDown); + this.Controls.Add(this.btnFixGZ); + this.Controls.Add(this.DownloadExistingButton); + this.Controls.Add(this.AllowCleanCheckBox); + this.Controls.Add(this.ListButton); + this.Controls.Add(this.FileLabel); + this.Controls.Add(this.label8); + this.Controls.Add(this.SpeedLabel); + this.Controls.Add(this.label7); + this.Controls.Add(this.progressBar2); + this.Controls.Add(this.progressBar1); + this.Controls.Add(this.ActionLabel); + this.Controls.Add(this.label5); + this.Controls.Add(this.ProcessButton); + this.Controls.Add(this.label4); + this.Controls.Add(this.PasswordTextBox); + this.Controls.Add(this.label3); + this.Controls.Add(this.LoginTextBox); + this.Controls.Add(this.label2); + this.Controls.Add(this.HostTextBox); + this.Controls.Add(this.label1); + this.Controls.Add(this.ClientTextBox); + this.Name = "AMain"; + this.Text = "Auto Patcher Admin"; + this.Load += new System.EventHandler(this.AMain_Load); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TextBox ClientTextBox; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox HostTextBox; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TextBox LoginTextBox; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.TextBox PasswordTextBox; + private System.Windows.Forms.Button ProcessButton; + private System.Windows.Forms.ProgressBar progressBar1; + private System.Windows.Forms.Label ActionLabel; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.ProgressBar progressBar2; + private System.Windows.Forms.Label SpeedLabel; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Label FileLabel; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.Button ListButton; + private System.Windows.Forms.CheckBox AllowCleanCheckBox; + private System.Windows.Forms.Button DownloadExistingButton; + private System.Windows.Forms.Button btnFixGZ; + private System.Windows.Forms.ComboBox ProtocolDropDown; + private System.Windows.Forms.Label label6; + } +} + diff --git a/AutoPatcherAdmin/AMain.cs b/AutoPatcherAdmin/AMain.cs new file mode 100644 index 0000000..eb29431 --- /dev/null +++ b/AutoPatcherAdmin/AMain.cs @@ -0,0 +1,747 @@ +using System.IO.Compression; +using WinSCP; + +namespace AutoPatcherAdmin +{ + public partial class AMain : Form + { + public const string PatchFileName = @"PList.gz"; + public const string TempUploadDirectory = "Out"; + public const string TempDownloadDirectory = "In"; + + public string[] ExcludeList = new string[] { "Thumbs.db" }; + + public List OldList, NewList; + public Queue UploadList; + + public bool Completed; + + public AMain() + { + InitializeComponent(); + + ClientTextBox.Text = Settings.Client; + HostTextBox.Text = Settings.Host; + LoginTextBox.Text = Settings.Login; + PasswordTextBox.Text = Settings.Password; + AllowCleanCheckBox.Checked = Settings.AllowCleanUp; + ProtocolDropDown.SelectedIndex = ProtocolDropDown.FindString(Settings.Protocol); + + DeleteDirectory(TempDownloadDirectory); + DeleteDirectory(TempUploadDirectory); + } + + private void CompleteDownload() + { + FileLabel.Text = "Complete..."; + SpeedLabel.Text = "Complete..."; + ActionLabel.Text = "Complete..."; + + progressBar1.Value = 100; + progressBar2.Value = 100; + + DownloadExistingButton.Enabled = true; + + Completed = true; + } + + private void CompleteUpload() + { + FileLabel.Text = "Complete..."; + SpeedLabel.Text = "Complete..."; + ActionLabel.Text = "Complete..."; + + progressBar1.Value = 100; + progressBar2.Value = 100; + + ProcessButton.Enabled = true; + ListButton.Enabled = true; + btnFixGZ.Enabled = true; + + Completed = true; + } + + private void CleanUp() + { + if (!Settings.AllowCleanUp) return; + + var rootPath = (new Uri(Settings.Host)).AbsolutePath; + + using Session session = new(); + OpenSession(session); + + for (int i = 0; i < OldList.Count; i++) + { + if (NeedFile(OldList[i].FileName)) continue; + + var compressed = OldList[i].Length != OldList[i].Compressed; + + try + { + var filename = OldList[i].FileName + (compressed ? ".gz" : ""); + + var filePath = Path.Combine(rootPath, filename).Replace(@"\", "/"); + + if (session.FileExists(filePath)) + { + session.RemoveFile(filePath); + } + } + catch + { + + } + } + } + + private bool NeedFile(string fileName) + { + for (int i = 0; i < NewList.Count; i++) + { + if (fileName.EndsWith(NewList[i].FileName) && !InExcludeList(NewList[i].FileName)) + return true; + } + + return false; + } + + private void GetOldFileList() + { + OldList = new List(); + + byte[] data = DownloadFile(PatchFileName); + + if (data != null) + { + using MemoryStream stream = new MemoryStream(data); + using BinaryReader reader = new BinaryReader(stream); + + int count = reader.ReadInt32(); + + for (int i = 0; i < count; i++) + { + OldList.Add(new FileInformation(reader)); + } + } + } + + private byte[] CreateNewList() + { + using MemoryStream stream = new MemoryStream(); + using BinaryWriter writer = new BinaryWriter(stream); + + writer.Write(NewList.Count); + for (int i = 0; i < NewList.Count; i++) + { + NewList[i].Save(writer); + } + + return stream.ToArray(); + } + + private void GetNewFileList() + { + NewList = new List(); + + string[] files = Directory.GetFiles(Settings.Client, "*.*" ,SearchOption.AllDirectories); + + for (int i = 0; i < files.Length; i++) + { + NewList.Add(GetFileInformation(files[i])); + } + } + + private bool InExcludeList(string fileName) + { + foreach (var item in ExcludeList) + { + if (fileName.EndsWith(item)) return true; + } + + return false; + } + + private void FixFilenameExtensions() + { + var rootPath = (new Uri(Settings.Host)).AbsolutePath; + + using Session session = new Session(); + OpenSession(session); + + for (int i = 0; i < OldList.Count; i++) + { + FileInformation old = OldList[i]; + + try + { + ActionLabel.Text = old.FileName; + Refresh(); + + if (old.Compressed == old.Length) + { + //exists, but not compressed, lets rename it + + var compressedFilename = OldList[i].FileName + ".gz"; + var compressedFilePath = Path.Combine(rootPath, compressedFilename).Replace(@"\", "/"); + + var uncompressedFilename = OldList[i].FileName; + var uncompressedFilePath = Path.Combine(rootPath, compressedFilename).Replace(@"\", "/"); + + if (session.FileExists(compressedFilePath)) + { + session.MoveFile(compressedFilePath, uncompressedFilename); + } + } + else + { + //exists, but its compressed and ends with .gz, so its correct + } + } + catch + { + + } + } + } + + private bool NeedUpdate(FileInformation info) + { + for (int i = 0; i < OldList.Count; i++) + { + FileInformation old = OldList[i]; + if (old.FileName != info.FileName) continue; + + if (old.Length != info.Length) return true; + if (old.Creation != info.Creation) return true; + + return false; + } + return true; + } + + private FileInformation? GetFileInformation(string fileName) + { + if (!File.Exists(fileName)) + { + return null; + } + + FileInfo info = new(fileName); + + FileInformation file = new() + { + FileName = fileName.Remove(0, Settings.Client.Length).TrimStart('\\'), + Length = (int)info.Length, + Creation = info.LastWriteTime + }; + + return file; + } + + private void OpenSession(Session session) + { + if (session.Opened) return; + + Uri uri = null; + + if (!string.IsNullOrEmpty(Settings.Host)) + { + uri = new Uri(Settings.Host); + } + + if (!Protocol.TryParse(Settings.Protocol, true, out Protocol protocol)) + { + protocol = Protocol.Ftp; + } + + SessionOptions sessionOptions = new SessionOptions + { + Protocol = protocol, + HostName = uri.Host, + UserName = Settings.Login, + Password = Settings.Password + }; + + if (sessionOptions.Protocol == Protocol.Sftp) + { + var fingerprint = session.ScanFingerprint(sessionOptions, "SHA-256"); + + sessionOptions.SshHostKeyFingerprint = fingerprint; + } + + session.Open(sessionOptions); + } + + + private void BeginUpload() + { + if (UploadList == null) return; + + progressBar1.Value = 0; + progressBar2.Value = 0; + + int uploadCount = UploadList.Count; + + while (UploadList.Count > 0) + { + FileInformation info = UploadList.Dequeue(); + + CreateTempUploadFiles(info, File.ReadAllBytes(Settings.Client + (info.FileName))); + } + + CleanUp(); + + CreateTempUploadFiles(new FileInformation { FileName = PatchFileName }, CreateNewList()); + UploadFiles(++uploadCount); + + UploadList = null; + } + private void CreateTempUploadFiles(FileInformation info, byte[] raw) + { + string fileName = info.FileName.Replace(@"\", "/"); + + byte[] data = (!Settings.CompressFiles || fileName == "PList.gz") ? raw : Compress(raw); + info.Compressed = data.Length; + + if (fileName != "PList.gz" && Settings.CompressFiles) + { + fileName += ".gz"; + } + + var sourceDir = Path.GetDirectoryName(fileName); + var tempSourceDir = Path.Combine(TempUploadDirectory, sourceDir); + + var tempFilePath = Path.Combine(TempUploadDirectory, fileName).Replace(@"\", "/"); + + if (!Directory.Exists(tempSourceDir)) + { + Directory.CreateDirectory(tempSourceDir); + } + + File.WriteAllBytes(tempFilePath, data); + File.SetLastWriteTime(tempFilePath, info.Creation); + } + + private void UploadFiles(int uploadCount = 0) + { + var rootPath = (new Uri(Settings.Host)).AbsolutePath; + + using Session session = new Session(); + + session.FileTransferProgress += (o, e) => + { + int value = (int)(e.OverallProgress * 100); + progressBar1.Value = value > progressBar1.Maximum ? progressBar1.Maximum : value; + + int value2 = (int)(e.FileProgress * 100); + progressBar2.Value = value2 > progressBar2.Maximum ? progressBar2.Maximum : value2; + + FileLabel.Text = e.FileName.TrimStart(TempUploadDirectory.ToCharArray()).TrimStart('\\'); + SpeedLabel.Text = ((double)e.CPS / 1024).ToString("0.##") + " KB/s"; + + ActionLabel.Text = string.Format("Uploading... Files: {0}", uploadCount); + }; + + session.FileTransferred += (o, e) => + { + uploadCount--; + + if (uploadCount <= 0) + { + uploadCount = 0; + CompleteUpload(); + } + }; + + OpenSession(session); + + TransferOptions transferOptions = new TransferOptions + { + TransferMode = TransferMode.Binary, + OverwriteMode = OverwriteMode.Overwrite + }; + + if (!session.FileExists(rootPath)) + { + session.CreateDirectory(rootPath); + } + + var result = session.PutFilesToDirectory(TempUploadDirectory, rootPath, options: transferOptions); + result.Check(); + + DeleteDirectory(TempUploadDirectory); + } + + + + + private byte[] DownloadFile(string fileName) + { + using Session session = new Session(); + OpenSession(session); + + try + { + if (!Directory.Exists(TempDownloadDirectory)) + { + Directory.CreateDirectory(TempDownloadDirectory); + } + + TransferOptions transferOptions = new TransferOptions + { + TransferMode = TransferMode.Binary, + OverwriteMode = OverwriteMode.Overwrite + }; + + var rootPath = (new Uri(Settings.Host)).AbsolutePath; + + var result = session.GetFiles(Path.Combine(rootPath, fileName), Path.Combine(TempDownloadDirectory, fileName), options: transferOptions); + result.Check(); + + MemoryStream ms = new MemoryStream(); + using (FileStream fs = new FileStream(Path.Combine(TempDownloadDirectory, fileName), FileMode.Open, FileAccess.Read)) + fs.CopyTo(ms); + + DeleteDirectory(TempDownloadDirectory); + + return ms.ToArray(); + } + catch + { + return null; + } + } + + private void DownloadFiles() + { + var rootPath = (new Uri(Settings.Host)).AbsolutePath; + + using Session session = new Session(); + + session.FileTransferProgress += (o, e) => + { + int value = (int)(e.OverallProgress * 100); + progressBar1.Value = value > progressBar1.Maximum ? progressBar1.Maximum : value; + + int value2 = (int)(e.FileProgress * 100); + progressBar2.Value = value2 > progressBar2.Maximum ? progressBar2.Maximum : value2; + + FileLabel.Text = e.FileName.Replace(rootPath, ""); + SpeedLabel.Text = ((double)e.CPS / 1024).ToString("0.##") + " KB/s"; + + ActionLabel.Text = "Downloading... Files"; + }; + + session.FileTransferred += (o, e) => + { + + }; + + OpenSession(session); + + TransferOptions transferOptions = new TransferOptions + { + TransferMode = TransferMode.Binary, + OverwriteMode = OverwriteMode.Overwrite + }; + + if (!Directory.Exists(TempDownloadDirectory)) + { + Directory.CreateDirectory(TempDownloadDirectory); + } + + var result = session.GetFilesToDirectory(rootPath, TempDownloadDirectory, options: transferOptions); + result.Check(); + + CompleteDownload(); + } + + private void MoveTempDownloadedFiles() + { + for (int i = 0; i < OldList.Count; i++) + { + var info = OldList[i]; + var compressed = OldList[i].Length != OldList[i].Compressed; + var filename = OldList[i].FileName + (compressed ? ".gz" : ""); + + var currentPath = Path.Combine(TempDownloadDirectory, filename); + + var relativeDestDir = Path.GetDirectoryName(info.FileName); + var destDir = Path.Combine(Settings.Client, relativeDestDir); + var destFilename = Path.Combine(Settings.Client, info.FileName); + + if (!Directory.Exists(destDir)) + { + Directory.CreateDirectory(destDir); + } + + if (File.Exists(destFilename)) + { + File.Delete(destFilename); + } + + if (compressed) + { + byte[] raw = File.ReadAllBytes(currentPath); + + File.WriteAllBytes(destFilename, Decompress(raw)); + } + else + { + File.Move(currentPath, destFilename); + } + + File.SetLastWriteTime(destFilename, info.Creation); + } + + DeleteDirectory(TempDownloadDirectory); + } + + + + + private void ListButton_Click(object sender, EventArgs e) + { + try + { + ListButton.Enabled = false; + Settings.Client = ClientTextBox.Text; + Settings.Host = HostTextBox.Text; + Settings.Login = LoginTextBox.Text; + Settings.Password = PasswordTextBox.Text; + Settings.Protocol = (string)ProtocolDropDown.SelectedItem; + + GetOldFileList(); + GetNewFileList(); + + for (int i = 0; i < NewList.Count; i++) + { + FileInformation info = NewList[i]; + for (int o = 0; o < OldList.Count; o++) + { + if (OldList[o].FileName != info.FileName) continue; + + NewList[i].Compressed = OldList[o].Compressed; + break; + } + + if (info.Compressed == 0) + { + //We've uploaded a new file which is unknown to the existing PList (or no PList available). Assume this file was uploaded uncompressed and set to file length. + info.Compressed = info.Length; + } + } + + CreateTempUploadFiles(new FileInformation { FileName = PatchFileName }, CreateNewList()); + UploadFiles(1); + } + catch (Exception ex) + { + ListButton.Enabled = true; + MessageBox.Show(ex.ToString()); + ActionLabel.Text = "Error..."; + } + } + + private void ProcessButton_Click(object sender, EventArgs e) + { + try + { + ProcessButton.Enabled = false; + Settings.Client = ClientTextBox.Text; + Settings.Host = HostTextBox.Text; + Settings.Login = LoginTextBox.Text; + Settings.Password = PasswordTextBox.Text; + Settings.AllowCleanUp = AllowCleanCheckBox.Checked; + Settings.Protocol = (string)ProtocolDropDown.SelectedItem; + + UploadList = new Queue(); + + GetOldFileList(); + + ActionLabel.Text = "Checking Files..."; + Refresh(); + + GetNewFileList(); + + for (int i = 0; i < NewList.Count; i++) + { + FileInformation info = NewList[i]; + + if (InExcludeList(info.FileName)) continue; + + if (NeedUpdate(info)) + { + UploadList.Enqueue(info); + } + else + { + for (int o = 0; o < OldList.Count; o++) + { + if (OldList[o].FileName != info.FileName) continue; + NewList[i] = OldList[o]; + break; + } + } + } + + BeginUpload(); + + } + catch (Exception ex) + { + ProcessButton.Enabled = true; + MessageBox.Show(ex.ToString()); + ActionLabel.Text = "Error..."; + } + } + + private void btnFixGZ_Click(object sender, EventArgs e) + { + try + { + btnFixGZ.Enabled = false; + + Settings.Client = ClientTextBox.Text; + Settings.Host = HostTextBox.Text; + Settings.Login = LoginTextBox.Text; + Settings.Password = PasswordTextBox.Text; + Settings.Protocol = (string)ProtocolDropDown.SelectedItem; + + GetOldFileList(); + GetNewFileList(); + + for (int i = 0; i < NewList.Count; i++) + { + FileInformation info = NewList[i]; + for (int o = 0; o < OldList.Count; o++) + { + if (OldList[o].FileName != info.FileName) continue; + NewList[i].Compressed = OldList[o].Length; + break; + } + } + + CreateTempUploadFiles(new FileInformation { FileName = PatchFileName }, CreateNewList()); + UploadFiles(1); + + FixFilenameExtensions(); + } + catch(Exception ex) + { + btnFixGZ.Enabled = true; + MessageBox.Show(ex.ToString(), "Error"); + ActionLabel.Text = "Error..."; + } + } + + private void DownloadExistingButton_Click(object sender, EventArgs e) + { + try + { + DownloadExistingButton.Enabled = false; + Settings.Client = ClientTextBox.Text; + Settings.Host = HostTextBox.Text; + Settings.Login = LoginTextBox.Text; + Settings.Password = PasswordTextBox.Text; + Settings.AllowCleanUp = AllowCleanCheckBox.Checked; + Settings.Protocol = (string)ProtocolDropDown.SelectedItem; + + GetOldFileList(); + DownloadFiles(); + MoveTempDownloadedFiles(); + } + catch (Exception ex) + { + DownloadExistingButton.Enabled = true; + MessageBox.Show(ex.ToString(), "Error"); + ActionLabel.Text = "Error..."; + } + } + + private void AMain_Load(object sender, EventArgs e) + { + + } + + + private void DeleteDirectory(string target_dir) + { + if (!Directory.Exists(target_dir)) return; + + string[] files = Directory.GetFiles(target_dir); + string[] dirs = Directory.GetDirectories(target_dir); + + foreach (string file in files) + { + File.SetAttributes(file, FileAttributes.Normal); + File.Delete(file); + } + + foreach (string dir in dirs) + { + DeleteDirectory(dir); + } + + Directory.Delete(target_dir, false); + } + + private byte[] Decompress(byte[] raw) + { + using (GZipStream gStream = new GZipStream(new MemoryStream(raw), CompressionMode.Decompress)) + { + const int size = 4096; //4kb + byte[] buffer = new byte[size]; + using (MemoryStream mStream = new MemoryStream()) + { + int count; + do + { + count = gStream.Read(buffer, 0, size); + if (count > 0) + { + mStream.Write(buffer, 0, count); + } + } while (count > 0); + return mStream.ToArray(); + } + } + } + + private byte[] Compress(byte[] raw) + { + using (MemoryStream mStream = new MemoryStream()) + { + using (GZipStream gStream = new GZipStream(mStream, CompressionMode.Compress, true)) + gStream.Write(raw, 0, raw.Length); + return mStream.ToArray(); + } + } + } + + public class FileInformation + { + public string FileName; //Relative. + public int Length, Compressed; + public DateTime Creation; + + public FileInformation() + { + Creation = DateTime.Now; + } + public FileInformation(BinaryReader reader) + { + FileName = reader.ReadString(); + Length = reader.ReadInt32(); + Compressed = reader.ReadInt32(); + Creation = DateTime.FromBinary(reader.ReadInt64()); + } + public void Save(BinaryWriter writer) + { + writer.Write(FileName); + writer.Write(Length); + writer.Write(Compressed); + writer.Write(Creation.ToBinary()); + } + } +} diff --git a/AutoPatcherAdmin/AMain.resx b/AutoPatcherAdmin/AMain.resx new file mode 100644 index 0000000..3ae1f55 --- /dev/null +++ b/AutoPatcherAdmin/AMain.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + \ No newline at end of file diff --git a/AutoPatcherAdmin/AutoPatcherAdmin.csproj b/AutoPatcherAdmin/AutoPatcherAdmin.csproj new file mode 100644 index 0000000..0a60670 --- /dev/null +++ b/AutoPatcherAdmin/AutoPatcherAdmin.csproj @@ -0,0 +1,20 @@ + + + + WinExe + net8.0-windows7.0 + enable + true + enable + + + + false + false + + + + + + + \ No newline at end of file diff --git a/AutoPatcherAdmin/InIReader.cs b/AutoPatcherAdmin/InIReader.cs new file mode 100644 index 0000000..50cd9ae --- /dev/null +++ b/AutoPatcherAdmin/InIReader.cs @@ -0,0 +1,420 @@ +namespace AutoPatcherAdmin +{ + public class InIReader + { + #region Fields + private readonly List _contents; + private readonly string _fileName; + #endregion + + #region Constructor + public InIReader(string fileName) + { + _fileName = fileName; + + _contents = new List(); + try + { + if (File.Exists(_fileName)) + _contents.AddRange(File.ReadAllLines(_fileName)); + } + catch + { + } + } + #endregion + + #region Functions + private string FindValue(string section, string key) + { + for (int a = 0; a < _contents.Count; a++) + if (String.CompareOrdinal(_contents[a], "[" + section + "]") == 0) + for (int b = a + 1; b < _contents.Count; b++) + if (String.CompareOrdinal(_contents[b].Split('=')[0], key) == 0) + return _contents[b].Split('=')[1]; + else if (_contents[b].StartsWith("[") && _contents[b].EndsWith("]")) + return null; + return null; + } + + private int FindIndex(string section, string key) + { + for (int a = 0; a < _contents.Count; a++) + if (String.CompareOrdinal(_contents[a], "[" + section + "]") == 0) + for (int b = a + 1; b < _contents.Count; b++) + if (String.CompareOrdinal(_contents[b].Split('=')[0], key) == 0) + return b; + else if (_contents[b].StartsWith("[") && _contents[b].EndsWith("]")) + { + _contents.Insert(b - 1, key + "="); + return b - 1; + } + else if (_contents.Count - 1 == b) + { + _contents.Add(key + "="); + return _contents.Count - 1; + } + if (_contents.Count > 0) + _contents.Add(""); + + _contents.Add("[" + section + "]"); + _contents.Add(key + "="); + return _contents.Count - 1; + } + + public void Save() + { + try + { + File.WriteAllLines(_fileName, _contents.ToArray()); + } + catch + { + } + } + #endregion + + #region Read + public bool ReadBoolean(string section, string key, bool Default) + { + bool result; + + if (!bool.TryParse(FindValue(section, key), out result)) + { + result = Default; + Write(section, key, Default); + } + + return result; + } + + public byte ReadByte(string section, string key, byte Default) + { + byte result; + + if (!byte.TryParse(FindValue(section, key), out result)) + { + result = Default; + Write(section, key, Default); + } + + + return result; + } + + public sbyte ReadSByte(string section, string key, sbyte Default) + { + sbyte result; + + if (!sbyte.TryParse(FindValue(section, key), out result)) + { + result = Default; + Write(section, key, Default); + } + + + return result; + } + + public ushort ReadUInt16(string section, string key, ushort Default) + { + ushort result; + + if (!ushort.TryParse(FindValue(section, key), out result)) + { + result = Default; + Write(section, key, Default); + } + + + return result; + } + + public short ReadInt16(string section, string key, short Default) + { + short result; + + if (!short.TryParse(FindValue(section, key), out result)) + { + result = Default; + Write(section, key, Default); + } + + + return result; + } + + public uint ReadUInt32(string section, string key, uint Default) + { + uint result; + + if (!uint.TryParse(FindValue(section, key), out result)) + { + result = Default; + Write(section, key, Default); + } + + return result; + } + + public int ReadInt32(string section, string key, int Default) + { + int result; + + if (!int.TryParse(FindValue(section, key), out result)) + { + result = Default; + Write(section, key, Default); + } + + return result; + } + + public ulong ReadUInt64(string section, string key, ulong Default) + { + ulong result; + + if (!ulong.TryParse(FindValue(section, key), out result)) + { + result = Default; + Write(section, key, Default); + } + + return result; + } + + public long ReadInt64(string section, string key, long Default) + { + long result; + + if (!long.TryParse(FindValue(section, key), out result)) + { + result = Default; + Write(section, key, Default); + } + + + return result; + } + + public float ReadSingle(string section, string key, float Default) + { + float result; + + if (!float.TryParse(FindValue(section, key), out result)) + { + result = Default; + Write(section, key, Default); + } + + return result; + } + + public double ReadDouble(string section, string key, double Default) + { + double result; + + if (!double.TryParse(FindValue(section, key), out result)) + { + result = Default; + Write(section, key, Default); + } + + return result; + } + + public decimal ReadDecimal(string section, string key, decimal Default) + { + decimal result; + + if (!decimal.TryParse(FindValue(section, key), out result)) + { + result = Default; + Write(section, key, Default); + } + + return result; + } + + public string ReadString(string section, string key, string Default) + { + string result = FindValue(section, key); + + if (string.IsNullOrEmpty(result)) + { + result = Default; + Write(section, key, Default); + } + + return result; + } + + public char ReadChar(string section, string key, char Default) + { + char result; + + if (!char.TryParse(FindValue(section, key), out result)) + { + result = Default; + Write(section, key, Default); + } + + return result; + } + + public Point ReadPoint(string section, string key, Point Default) + { + string temp = FindValue(section, key); + int tempX, tempY; + if (temp == null || !int.TryParse(temp.Split(',')[0], out tempX)) + { + Write(section, key, Default); + return Default; + } + if (!int.TryParse(temp.Split(',')[1], out tempY)) + { + Write(section, key, Default); + return Default; + } + + return new Point(tempX, tempY); + } + + public Size ReadSize(string section, string key, Size Default) + { + string temp = FindValue(section, key); + int tempX, tempY; + if (!int.TryParse(temp.Split(',')[0], out tempX)) + { + Write(section, key, Default); + return Default; + } + if (!int.TryParse(temp.Split(',')[1], out tempY)) + { + Write(section, key, Default); + return Default; + } + + return new Size(tempX, tempY); + } + + public TimeSpan ReadTimeSpan(string section, string key, TimeSpan Default) + { + TimeSpan result; + + if (!TimeSpan.TryParse(FindValue(section, key), out result)) + { + result = Default; + Write(section, key, Default); + } + + + return result; + } + #endregion + + #region Write + public void Write(string section, string key, bool value) + { + _contents[FindIndex(section, key)] = key + "=" + value; + Save(); + } + + public void Write(string section, string key, byte value) + { + _contents[FindIndex(section, key)] = key + "=" + value; + Save(); + } + + public void Write(string section, string key, sbyte value) + { + _contents[FindIndex(section, key)] = key + "=" + value; + Save(); + } + + public void Write(string section, string key, ushort value) + { + _contents[FindIndex(section, key)] = key + "=" + value; + Save(); + } + + public void Write(string section, string key, short value) + { + _contents[FindIndex(section, key)] = key + "=" + value; + Save(); + } + + public void Write(string section, string key, uint value) + { + _contents[FindIndex(section, key)] = key + "=" + value; + Save(); + } + + public void Write(string section, string key, int value) + { + _contents[FindIndex(section, key)] = key + "=" + value; + Save(); + } + + public void Write(string section, string key, ulong value) + { + _contents[FindIndex(section, key)] = key + "=" + value; + Save(); + } + + public void Write(string section, string key, long value) + { + _contents[FindIndex(section, key)] = key + "=" + value; + Save(); + } + + public void Write(string section, string key, float value) + { + _contents[FindIndex(section, key)] = key + "=" + value; + Save(); + } + + public void Write(string section, string key, double value) + { + _contents[FindIndex(section, key)] = key + "=" + value; + Save(); + } + + public void Write(string section, string key, decimal value) + { + _contents[FindIndex(section, key)] = key + "=" + value; + Save(); + } + + public void Write(string section, string key, string value) + { + _contents[FindIndex(section, key)] = key + "=" + value; + Save(); + } + + public void Write(string section, string key, char value) + { + _contents[FindIndex(section, key)] = key + "=" + value; + Save(); + } + + public void Write(string section, string key, Point value) + { + _contents[FindIndex(section, key)] = key + "=" + value.X + "," + value.Y; + Save(); + } + + public void Write(string section, string key, Size value) + { + _contents[FindIndex(section, key)] = key + "=" + value.Width + "," + value.Height; + Save(); + } + + public void Write(string section, string key, TimeSpan value) + { + _contents[FindIndex(section, key)] = key + "=" + value; + Save(); + } + #endregion + } +} diff --git a/AutoPatcherAdmin/Program.cs b/AutoPatcherAdmin/Program.cs new file mode 100644 index 0000000..76f651e --- /dev/null +++ b/AutoPatcherAdmin/Program.cs @@ -0,0 +1,20 @@ +namespace AutoPatcherAdmin +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Settings.Load(); + + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new AMain()); + + Settings.Save(); + } + } +} diff --git a/AutoPatcherAdmin/Settings.cs b/AutoPatcherAdmin/Settings.cs new file mode 100644 index 0000000..b17c37a --- /dev/null +++ b/AutoPatcherAdmin/Settings.cs @@ -0,0 +1,40 @@ +namespace AutoPatcherAdmin +{ + public static class Settings + { + private static readonly InIReader Reader = new InIReader(@".\PatchAdmin.ini"); + + public static string Client = @"S:\Patch\"; + public static string Host = @"ftp://127.0.0.1/"; + public static string Login = string.Empty; + public static string Password = string.Empty; + public static string Protocol = "Ftp"; + + public static bool AllowCleanUp = true; + public static bool CompressFiles = false; + + public static void Load() + { + Client = Reader.ReadString("AutoPatcher", "Client", Client); + Host = Reader.ReadString("AutoPatcher", "Host", Host); + Login = Reader.ReadString("AutoPatcher", "Login", Login); + Password = Reader.ReadString("AutoPatcher", "Password", Password); + Protocol = Reader.ReadString("AutoPatcher", "Protocol", Protocol); + + AllowCleanUp = Reader.ReadBoolean("AutoPatcher", "AllowCleanUp", AllowCleanUp); + CompressFiles = Reader.ReadBoolean("AutoPatcher", "CompressFiles", CompressFiles); + } + + public static void Save() + { + Reader.Write("AutoPatcher", "Client", Client); + Reader.Write("AutoPatcher", "Host", Host); + Reader.Write("AutoPatcher", "Login", Login); + Reader.Write("AutoPatcher", "Password", Password); + Reader.Write("AutoPatcher", "Protocol", Protocol); + + Reader.Write("AutoPatcher", "AllowCleanUp", AllowCleanUp); + Reader.Write("AutoPatcher", "CompressFiles", CompressFiles); + } + } +} diff --git a/Client/Client.csproj b/Client/Client.csproj new file mode 100644 index 0000000..933f7f2 --- /dev/null +++ b/Client/Client.csproj @@ -0,0 +1,92 @@ + + + + WinExe + net8.0-windows7.0 + disable + true + enable + MIR1.ICO + + True + x64 + ..\Build\Client\ + + + + false + false + MIR1.ICO + git + LOMCN + + + + True + 1701;1702 + + + + True + 1701;1702 + + + + + + + + + Always + + + + + + True + \ + + + + + + + + + + + + + + + + + ..\Components\SlimDX.dll + + + + + + True + True + Images.resx + + + + + + ResXFileCodeGenerator + Images.Designer.cs + + + + + + + Always + True + \ + + + + \ No newline at end of file diff --git a/Client/Forms/AMain.Designer.cs b/Client/Forms/AMain.Designer.cs new file mode 100644 index 0000000..142b84e --- /dev/null +++ b/Client/Forms/AMain.Designer.cs @@ -0,0 +1,424 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.IO.Compression; +using System.Net; +using System.Windows.Forms; +using System.Drawing; + +namespace Launcher +{ + partial class AMain + { + /// + /// 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() + { + components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AMain)); + ActionLabel = new Label(); + SpeedLabel = new Label(); + InterfaceTimer = new System.Windows.Forms.Timer(components); + Movement_panel = new Panel(); + pictureBox1 = new PictureBox(); + Close_pb = new PictureBox(); + Config_pb = new PictureBox(); + Name_label = new Label(); + Version_label = new Label(); + CurrentFile_label = new Label(); + CurrentPercent_label = new Label(); + TotalPercent_label = new Label(); + Credit_label = new Label(); + ProgTotalEnd_pb = new PictureBox(); + ProgEnd_pb = new PictureBox(); + ProgressCurrent_pb = new PictureBox(); + TotalProg_pb = new PictureBox(); + Launch_pb = new PictureBox(); + Main_browser = new Microsoft.Web.WebView2.WinForms.WebView2(); + Movement_panel.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)pictureBox1).BeginInit(); + ((System.ComponentModel.ISupportInitialize)Close_pb).BeginInit(); + ((System.ComponentModel.ISupportInitialize)Config_pb).BeginInit(); + ((System.ComponentModel.ISupportInitialize)ProgTotalEnd_pb).BeginInit(); + ((System.ComponentModel.ISupportInitialize)ProgEnd_pb).BeginInit(); + ((System.ComponentModel.ISupportInitialize)ProgressCurrent_pb).BeginInit(); + ((System.ComponentModel.ISupportInitialize)TotalProg_pb).BeginInit(); + ((System.ComponentModel.ISupportInitialize)Launch_pb).BeginInit(); + ((System.ComponentModel.ISupportInitialize)Main_browser).BeginInit(); + SuspendLayout(); + // + // ActionLabel + // + ActionLabel.Anchor = AnchorStyles.Bottom; + ActionLabel.BackColor = Color.Transparent; + ActionLabel.Font = new Font("Calibri", 8.25F, FontStyle.Regular, GraphicsUnit.Point); + ActionLabel.ForeColor = Color.Gray; + ActionLabel.Location = new Point(463, 450); + ActionLabel.Margin = new Padding(4, 0, 4, 0); + ActionLabel.Name = "ActionLabel"; + ActionLabel.Size = new Size(126, 21); + ActionLabel.TabIndex = 4; + ActionLabel.Text = "1423MB/2000MB"; + ActionLabel.TextAlign = ContentAlignment.MiddleRight; + ActionLabel.Visible = false; + ActionLabel.Click += ActionLabel_Click; + // + // SpeedLabel + // + SpeedLabel.Anchor = AnchorStyles.Bottom; + SpeedLabel.BackColor = Color.Transparent; + SpeedLabel.Font = new Font("Calibri", 8.25F, FontStyle.Regular, GraphicsUnit.Point); + SpeedLabel.ForeColor = Color.Gray; + SpeedLabel.Location = new Point(326, 454); + SpeedLabel.Margin = new Padding(4, 0, 4, 0); + SpeedLabel.Name = "SpeedLabel"; + SpeedLabel.RightToLeft = RightToLeft.No; + SpeedLabel.Size = new Size(83, 18); + SpeedLabel.TabIndex = 13; + SpeedLabel.Text = "Speed"; + SpeedLabel.TextAlign = ContentAlignment.TopRight; + SpeedLabel.Visible = false; + // + // InterfaceTimer + // + InterfaceTimer.Enabled = true; + InterfaceTimer.Interval = 50; + InterfaceTimer.Tick += InterfaceTimer_Tick; + // + // Movement_panel + // + Movement_panel.BackColor = Color.Transparent; + Movement_panel.BackgroundImageLayout = ImageLayout.Center; + Movement_panel.Controls.Add(pictureBox1); + Movement_panel.Controls.Add(Close_pb); + Movement_panel.Controls.Add(Config_pb); + Movement_panel.Location = new Point(14, 6); + Movement_panel.Margin = new Padding(4, 3, 4, 3); + Movement_panel.Name = "Movement_panel"; + Movement_panel.Size = new Size(922, 55); + Movement_panel.TabIndex = 21; + Movement_panel.MouseClick += Movement_panel_MouseClick; + Movement_panel.MouseDown += Movement_panel_MouseClick; + Movement_panel.MouseMove += Movement_panel_MouseMove; + Movement_panel.MouseUp += Movement_panel_MouseUp; + // + // pictureBox1 + // + pictureBox1.Image = Client.Resources.Images.server_base; + pictureBox1.Location = new Point(358, -46); + pictureBox1.Margin = new Padding(4, 3, 4, 3); + pictureBox1.Name = "pictureBox1"; + pictureBox1.Size = new Size(217, 23); + pictureBox1.TabIndex = 33; + pictureBox1.TabStop = false; + // + // Close_pb + // + Close_pb.BackColor = Color.Transparent; + Close_pb.BackgroundImageLayout = ImageLayout.Center; + Close_pb.Image = Client.Resources.Images.Cross_Base; + Close_pb.Location = new Point(720, 22); + Close_pb.Margin = new Padding(4, 3, 4, 3); + Close_pb.Name = "Close_pb"; + Close_pb.Size = new Size(22, 23); + Close_pb.TabIndex = 20; + Close_pb.TabStop = false; + Close_pb.Click += Close_pb_Click; + Close_pb.MouseDown += Close_pb_MouseDown; + Close_pb.MouseEnter += Close_pb_MouseEnter; + Close_pb.MouseLeave += Close_pb_MouseLeave; + Close_pb.MouseUp += Close_pb_MouseUp; + // + // Config_pb + // + Config_pb.BackColor = Color.Transparent; + Config_pb.BackgroundImageLayout = ImageLayout.Center; + Config_pb.Image = Client.Resources.Images.Config_Base; + Config_pb.Location = new Point(690, 22); + Config_pb.Margin = new Padding(4, 3, 4, 3); + Config_pb.Name = "Config_pb"; + Config_pb.Size = new Size(22, 23); + Config_pb.TabIndex = 32; + Config_pb.TabStop = false; + Config_pb.Click += Config_pb_Click; + Config_pb.MouseDown += Config_pb_MouseDown; + Config_pb.MouseEnter += Config_pb_MouseEnter; + Config_pb.MouseLeave += Config_pb_MouseLeave; + Config_pb.MouseUp += Config_pb_MouseUp; + // + // Name_label + // + Name_label.BackColor = Color.Transparent; + Name_label.Font = new Font("Microsoft Sans Serif", 8.25F, FontStyle.Regular, GraphicsUnit.Point); + Name_label.ForeColor = Color.SaddleBrown; + Name_label.Image = Client.Resources.Images.server_base; + Name_label.Location = new Point(258, 26); + Name_label.Margin = new Padding(4, 0, 4, 0); + Name_label.Name = "Name_label"; + Name_label.Size = new Size(320, 25); + Name_label.TabIndex = 0; + Name_label.Text = "The Legend of Mir 1 - Battle of the King"; + Name_label.TextAlign = ContentAlignment.MiddleCenter; + Name_label.Visible = false; + // + // Version_label + // + Version_label.Anchor = AnchorStyles.Bottom; + Version_label.BackColor = Color.Transparent; + Version_label.Font = new Font("Calibri", 8.25F, FontStyle.Regular, GraphicsUnit.Point); + Version_label.ForeColor = Color.Gray; + Version_label.Location = new Point(633, 514); + Version_label.Margin = new Padding(4, 0, 4, 0); + Version_label.Name = "Version_label"; + Version_label.Size = new Size(143, 15); + Version_label.TabIndex = 31; + Version_label.Text = "Version 1.0.0.0"; + Version_label.TextAlign = ContentAlignment.TopRight; + // + // CurrentFile_label + // + CurrentFile_label.Anchor = AnchorStyles.Bottom; + CurrentFile_label.BackColor = Color.Transparent; + CurrentFile_label.Font = new Font("Calibri", 8.25F, FontStyle.Regular, GraphicsUnit.Point); + CurrentFile_label.ForeColor = Color.Gray; + CurrentFile_label.Location = new Point(47, 450); + CurrentFile_label.Margin = new Padding(4, 0, 4, 0); + CurrentFile_label.Name = "CurrentFile_label"; + CurrentFile_label.Size = new Size(422, 20); + CurrentFile_label.TabIndex = 27; + CurrentFile_label.Text = "Checking Files."; + CurrentFile_label.TextAlign = ContentAlignment.MiddleLeft; + CurrentFile_label.Visible = false; + // + // CurrentPercent_label + // + CurrentPercent_label.Anchor = AnchorStyles.Bottom; + CurrentPercent_label.BackColor = Color.Transparent; + CurrentPercent_label.Font = new Font("Calibri", 8.25F, FontStyle.Regular, GraphicsUnit.Point); + CurrentPercent_label.ForeColor = Color.Gray; + CurrentPercent_label.Location = new Point(604, 468); + CurrentPercent_label.Margin = new Padding(4, 0, 4, 0); + CurrentPercent_label.Name = "CurrentPercent_label"; + CurrentPercent_label.Size = new Size(41, 23); + CurrentPercent_label.TabIndex = 28; + CurrentPercent_label.Text = "100%"; + CurrentPercent_label.TextAlign = ContentAlignment.MiddleCenter; + CurrentPercent_label.Visible = false; + // + // TotalPercent_label + // + TotalPercent_label.Anchor = AnchorStyles.Bottom; + TotalPercent_label.BackColor = Color.Transparent; + TotalPercent_label.Font = new Font("Calibri", 8.25F, FontStyle.Regular, GraphicsUnit.Point); + TotalPercent_label.ForeColor = Color.Gray; + TotalPercent_label.Location = new Point(604, 489); + TotalPercent_label.Margin = new Padding(4, 0, 4, 0); + TotalPercent_label.Name = "TotalPercent_label"; + TotalPercent_label.Size = new Size(41, 23); + TotalPercent_label.TabIndex = 29; + TotalPercent_label.Text = "100%"; + TotalPercent_label.TextAlign = ContentAlignment.MiddleCenter; + TotalPercent_label.Visible = false; + // + // Credit_label + // + Credit_label.Anchor = AnchorStyles.Bottom; + Credit_label.AutoSize = true; + Credit_label.BackColor = Color.Transparent; + Credit_label.Font = new Font("Calibri", 8.25F, FontStyle.Regular, GraphicsUnit.Point); + Credit_label.ForeColor = Color.Gray; + Credit_label.Location = new Point(45, 514); + Credit_label.Margin = new Padding(4, 0, 4, 0); + Credit_label.Name = "Credit_label"; + Credit_label.Size = new Size(98, 13); + Credit_label.TabIndex = 30; + Credit_label.Text = "Powered by Carbon"; + Credit_label.Click += Credit_label_Click; + // + // ProgTotalEnd_pb + // + ProgTotalEnd_pb.Anchor = AnchorStyles.None; + ProgTotalEnd_pb.BackColor = Color.Transparent; + ProgTotalEnd_pb.BackgroundImageLayout = ImageLayout.Center; + ProgTotalEnd_pb.Image = Client.Resources.Images.NEW_Progress_End__Blue_; + ProgTotalEnd_pb.Location = new Point(585, 491); + ProgTotalEnd_pb.Margin = new Padding(4, 3, 4, 3); + ProgTotalEnd_pb.Name = "ProgTotalEnd_pb"; + ProgTotalEnd_pb.Size = new Size(5, 17); + ProgTotalEnd_pb.TabIndex = 26; + ProgTotalEnd_pb.TabStop = false; + // + // ProgEnd_pb + // + ProgEnd_pb.Anchor = AnchorStyles.None; + ProgEnd_pb.BackColor = Color.Transparent; + ProgEnd_pb.BackgroundImageLayout = ImageLayout.Center; + ProgEnd_pb.Image = Client.Resources.Images.NEW_Progress_End__Green_; + ProgEnd_pb.Location = new Point(585, 474); + ProgEnd_pb.Margin = new Padding(4, 3, 4, 3); + ProgEnd_pb.Name = "ProgEnd_pb"; + ProgEnd_pb.Size = new Size(5, 17); + ProgEnd_pb.TabIndex = 25; + ProgEnd_pb.TabStop = false; + // + // ProgressCurrent_pb + // + ProgressCurrent_pb.Anchor = AnchorStyles.None; + ProgressCurrent_pb.BackColor = Color.Transparent; + ProgressCurrent_pb.BackgroundImageLayout = ImageLayout.Center; + ProgressCurrent_pb.Image = Client.Resources.Images.Green_Progress; + ProgressCurrent_pb.Location = new Point(45, 474); + ProgressCurrent_pb.Margin = new Padding(4, 3, 4, 3); + ProgressCurrent_pb.Name = "ProgressCurrent_pb"; + ProgressCurrent_pb.Size = new Size(557, 17); + ProgressCurrent_pb.TabIndex = 23; + ProgressCurrent_pb.TabStop = false; + ProgressCurrent_pb.SizeChanged += ProgressCurrent_pb_SizeChanged; + // + // TotalProg_pb + // + TotalProg_pb.Anchor = AnchorStyles.None; + TotalProg_pb.BackColor = Color.Transparent; + TotalProg_pb.BackgroundImageLayout = ImageLayout.Center; + TotalProg_pb.Image = Client.Resources.Images.Blue_Progress; + TotalProg_pb.Location = new Point(45, 491); + TotalProg_pb.Margin = new Padding(4, 3, 4, 3); + TotalProg_pb.Name = "TotalProg_pb"; + TotalProg_pb.Size = new Size(558, 16); + TotalProg_pb.TabIndex = 22; + TotalProg_pb.TabStop = false; + TotalProg_pb.SizeChanged += TotalProg_pb_SizeChanged; + // + // Launch_pb + // + Launch_pb.Anchor = AnchorStyles.Bottom; + Launch_pb.BackColor = Color.Transparent; + Launch_pb.BackgroundImageLayout = ImageLayout.Stretch; + Launch_pb.Cursor = Cursors.Hand; + Launch_pb.Image = Client.Resources.Images.Launch_Base1; + Launch_pb.Location = new Point(660, 476); + Launch_pb.Margin = new Padding(4, 3, 4, 3); + Launch_pb.Name = "Launch_pb"; + Launch_pb.Size = new Size(131, 56); + Launch_pb.TabIndex = 19; + Launch_pb.TabStop = false; + Launch_pb.Click += Launch_pb_Click; + Launch_pb.MouseDown += Launch_pb_MouseDown; + Launch_pb.MouseEnter += Launch_pb_MouseEnter; + Launch_pb.MouseLeave += Launch_pb_MouseLeave; + Launch_pb.MouseUp += Launch_pb_MouseUp; + // + // Main_browser + // + Main_browser.AllowExternalDrop = true; + Main_browser.CausesValidation = false; + Main_browser.CreationProperties = null; + Main_browser.DefaultBackgroundColor = Color.Transparent; + Main_browser.Enabled = false; + Main_browser.Location = new Point(410, 162); + Main_browser.Margin = new Padding(4, 3, 4, 3); + Main_browser.MaximumSize = new Size(782, 403); + Main_browser.Name = "Main_browser"; + Main_browser.Size = new Size(338, 285); + Main_browser.TabIndex = 32; + Main_browser.Visible = false; + Main_browser.ZoomFactor = 1D; + // + // AMain + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + BackColor = SystemColors.ActiveCaption; + BackgroundImage = Client.Resources.Images.pfffft; + BackgroundImageLayout = ImageLayout.Center; + ClientSize = new Size(804, 558); + Controls.Add(Name_label); + Controls.Add(Main_browser); + Controls.Add(SpeedLabel); + Controls.Add(Credit_label); + Controls.Add(Version_label); + Controls.Add(TotalPercent_label); + Controls.Add(CurrentPercent_label); + Controls.Add(CurrentFile_label); + Controls.Add(ProgTotalEnd_pb); + Controls.Add(ProgEnd_pb); + Controls.Add(ProgressCurrent_pb); + Controls.Add(TotalProg_pb); + Controls.Add(Launch_pb); + Controls.Add(ActionLabel); + Controls.Add(Movement_panel); + DoubleBuffered = true; + ForeColor = SystemColors.ControlText; + FormBorderStyle = FormBorderStyle.None; + Icon = (Icon)resources.GetObject("$this.Icon"); + Margin = new Padding(4, 3, 4, 3); + MaximizeBox = false; + MinimizeBox = false; + Name = "AMain"; + StartPosition = FormStartPosition.CenterScreen; + Text = "Launcher"; + TransparencyKey = Color.Black; + FormClosed += AMain_FormClosed; + Load += AMain_Load; + Click += AMain_Click; + Movement_panel.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)pictureBox1).EndInit(); + ((System.ComponentModel.ISupportInitialize)Close_pb).EndInit(); + ((System.ComponentModel.ISupportInitialize)Config_pb).EndInit(); + ((System.ComponentModel.ISupportInitialize)ProgTotalEnd_pb).EndInit(); + ((System.ComponentModel.ISupportInitialize)ProgEnd_pb).EndInit(); + ((System.ComponentModel.ISupportInitialize)ProgressCurrent_pb).EndInit(); + ((System.ComponentModel.ISupportInitialize)TotalProg_pb).EndInit(); + ((System.ComponentModel.ISupportInitialize)Launch_pb).EndInit(); + ((System.ComponentModel.ISupportInitialize)Main_browser).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + private Label ActionLabel; + private Label SpeedLabel; + public System.Windows.Forms.Timer InterfaceTimer; + public PictureBox Launch_pb; + private PictureBox Close_pb; + private Panel Movement_panel; + private PictureBox TotalProg_pb; + private PictureBox ProgressCurrent_pb; + private Label Name_label; + private PictureBox ProgEnd_pb; + private PictureBox ProgTotalEnd_pb; + private Label CurrentFile_label; + private Label CurrentPercent_label; + private Label TotalPercent_label; + private Label Credit_label; + private Label Version_label; + private PictureBox Config_pb; + private PictureBox pictureBox1; + private Microsoft.Web.WebView2.WinForms.WebView2 Main_browser; + } +} + diff --git a/Client/Forms/AMain.cs b/Client/Forms/AMain.cs new file mode 100644 index 0000000..7a97bf0 --- /dev/null +++ b/Client/Forms/AMain.cs @@ -0,0 +1,712 @@ +using System.Diagnostics; +using System.IO.Compression; +using System.Net; +using Client; +using Microsoft.Web.WebView2.Core; +using System.Net.Http.Headers; +using System.Net.Http.Handlers; +using Client.Utils; + +namespace Launcher +{ + public partial class AMain : Form + { + long _totalBytes, _completedBytes; + private int _fileCount, _currentCount; + + public bool Completed, Checked, CleanFiles, LabelSwitch, ErrorFound; + + public List OldList; + public Queue DownloadList = new Queue(); + public List ActiveDownloads = new List(); + + private Stopwatch _stopwatch = Stopwatch.StartNew(); + + public Thread _workThread; + + private bool dragging = false; + private Point dragCursorPoint; + private Point dragFormPoint; + + private Config ConfigForm = new Config(); + + private bool Restart = false; + + public AMain() + { + InitializeComponent(); + + BackColor = Color.FromArgb(1, 0, 0); + TransparencyKey = Color.FromArgb(1, 0, 0); + } + + public static void SaveError(string ex) + { + try + { + if (Settings.RemainingErrorLogs-- > 0) + { + File.AppendAllText(@".\Error.txt", + string.Format("[{0}] {1}{2}", DateTime.Now, ex, Environment.NewLine)); + } + } + catch + { + } + } + + public void Start() + { + try + { + GetOldFileList(); + + if (OldList.Count == 0) + { + MessageBox.Show(GameLanguage.PatchErr); + Completed = true; + return; + } + + _fileCount = OldList.Count; + for (int i = 0; i < OldList.Count; i++) + CheckFile(OldList[i]); + + Checked = true; + _fileCount = 0; + _currentCount = 0; + + _fileCount = DownloadList.Count; + + ServicePointManager.DefaultConnectionLimit = Settings.P_Concurrency; + + _stopwatch = Stopwatch.StartNew(); + for (var i = 0; i < Settings.P_Concurrency; i++) + BeginDownload(); + + + } + catch (EndOfStreamException ex) + { + MessageBox.Show("End of stream found. Host is likely using a pre version 1.1.0.0 patch system"); + Completed = true; + SaveError(ex.ToString()); + } + catch (Exception ex) + { + MessageBox.Show(ex.ToString(), "Error"); + Completed = true; + SaveError(ex.ToString()); + } + + _stopwatch.Stop(); + } + + private void BeginDownload() + { + if (DownloadList.Count == 0) + { + Completed = true; + + CleanUp(); + return; + } + + var download = new Download(); + download.Info = DownloadList.Dequeue(); + + DownloadFile(download); + } + + private void CleanUp() + { + if (!CleanFiles) return; + + string[] fileNames = Directory.GetFiles(@".\", "*.*", SearchOption.AllDirectories); + string fileName; + for (int i = 0; i < fileNames.Length; i++) + { + if (fileNames[i].StartsWith(".\\Screenshots\\")) continue; + + fileName = Path.GetFileName(fileNames[i]); + + if (fileName == "Mir1Config.ini" || fileName == System.AppDomain.CurrentDomain.FriendlyName) continue; + + try + { + if (!NeedFile(fileNames[i])) + File.Delete(fileNames[i]); + } + catch { } + } + } + public bool NeedFile(string fileName) + { + for (int i = 0; i < OldList.Count; i++) + { + if (fileName.EndsWith(OldList[i].FileName)) + return true; + } + + return false; + } + + private void GetOldFileList() + { + OldList = new List(); + + byte[] data = Download(Settings.P_PatchFileName); + if (data != null) + { + using MemoryStream stream = new MemoryStream(data); + using BinaryReader reader = new BinaryReader(stream); + + int count = reader.ReadInt32(); + + for (int i = 0; i < count; i++) + { + OldList.Add(new FileInformation(reader)); + } + } + } + + + public void ParseOld(BinaryReader reader) + { + int count = reader.ReadInt32(); + + for (int i = 0; i < count; i++) + OldList.Add(new FileInformation(reader)); + } + + public void CheckFile(FileInformation old) + { + FileInformation info = GetFileInformation(Settings.P_Client + old.FileName); + _currentCount++; + + if (info == null || old.Length != info.Length || old.Creation != info.Creation) + { + if (info != null && (Path.GetExtension(old.FileName).ToLower() == ".dll" || Path.GetExtension(old.FileName).ToLower() == ".exe")) + { + string oldFilename = Path.Combine(Path.GetDirectoryName(old.FileName), ("Old__" + Path.GetFileName(old.FileName))); + + try + { + File.Move(Settings.P_Client + old.FileName, oldFilename); + } + catch (UnauthorizedAccessException ex) + { + SaveError(ex.ToString()); + } + finally + { + //Might cause an infinite loop if it can never gain access + Restart = true; + } + } + + DownloadList.Enqueue(old); + _totalBytes += old.Length; + } + } + + public void DownloadFile(Download dl) + { + var info = dl.Info; + string fileName = info.FileName.Replace(@"\", "/"); + + if (fileName != "PList.gz" && (info.Compressed != info.Length || info.Compressed == 0)) + { + fileName += ".gz"; + } + + try + { + HttpClientHandler httpClientHandler = new() { AllowAutoRedirect = true }; + ProgressMessageHandler progressMessageHandler = new(httpClientHandler); + + progressMessageHandler.HttpReceiveProgress += (_, args) => + { + + dl.CurrentBytes = args.BytesTransferred; + + }; + + using (HttpClient client = new(progressMessageHandler)) + { + client.DefaultRequestHeaders.Accept.Clear(); + client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); + client.DefaultRequestHeaders.AcceptCharset.Clear(); + client.DefaultRequestHeaders.AcceptCharset.Add(new StringWithQualityHeaderValue("utf-8")); + + if (Settings.P_NeedLogin) + { + string authInfo = Settings.P_Login + ":" + Settings.P_Password; + authInfo = Convert.ToBase64String(System.Text.Encoding.Default.GetBytes(authInfo)); + client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", authInfo); + } + + ActiveDownloads.Add(dl); + + var task = Task.Run(() => client + .GetAsync(new Uri($"{Settings.P_Host}{fileName}"), HttpCompletionOption.ResponseHeadersRead)); + + var response = task.Result; + + using Stream sm = response.Content.ReadAsStream(); + using MemoryStream ms = new(); + sm.CopyTo(ms); + byte[] data = ms.ToArray(); + + _currentCount++; + _completedBytes += dl.CurrentBytes; + dl.CurrentBytes = 0; + dl.Completed = true; + + if (info.Compressed > 0 && info.Compressed != info.Length) + { + data = Decompress(data); + } + + var fileNameOut = Settings.P_Client + info.FileName; + var dirName = Path.GetDirectoryName(fileNameOut); + if (!Directory.Exists(dirName)) + Directory.CreateDirectory(dirName); + + File.WriteAllBytes(fileNameOut, data); + File.SetLastWriteTime(fileNameOut, info.Creation); + } + } + catch (HttpRequestException e) + { + File.AppendAllText(@".\Error.txt", + $"[{DateTime.Now}] {info.FileName} could not be downloaded. ({e.Message}) {Environment.NewLine}"); + ErrorFound = true; + } + finally + { + if (ErrorFound) + { + MessageBox.Show(string.Format("Failed to download file: {0}", fileName)); + } + } + + BeginDownload(); + } + + public byte[] Download(string fileName) + { + using (HttpClient client = new()) + { + client.DefaultRequestHeaders.Accept.Clear(); + client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); + client.DefaultRequestHeaders.AcceptCharset.Clear(); + client.DefaultRequestHeaders.AcceptCharset.Add(new StringWithQualityHeaderValue("utf-8")); + + if (Settings.P_NeedLogin) + { + string authInfo = Settings.P_Login + ":" + Settings.P_Password; + authInfo = Convert.ToBase64String(System.Text.Encoding.Default.GetBytes(authInfo)); + client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", authInfo); + } + + var task = Task.Run(() => client + .GetAsync(new Uri(Settings.P_Host + Path.ChangeExtension(fileName, ".gz")), HttpCompletionOption.ResponseHeadersRead)); + + var response = task.Result; + + using Stream sm = response.Content.ReadAsStream(); + using MemoryStream ms = new(); + sm.CopyTo(ms); + byte[] data = ms.ToArray(); + return data; + } + } + + public static byte[] Decompress(byte[] raw) + { + using (GZipStream gStream = new GZipStream(new MemoryStream(raw), CompressionMode.Decompress)) + { + const int size = 4096; //4kb + byte[] buffer = new byte[size]; + using (MemoryStream mStream = new MemoryStream()) + { + int count; + do + { + count = gStream.Read(buffer, 0, size); + if (count > 0) + { + mStream.Write(buffer, 0, count); + } + } while (count > 0); + return mStream.ToArray(); + } + } + } + + public static byte[] Compress(byte[] raw) + { + using (MemoryStream mStream = new MemoryStream()) + { + using (GZipStream gStream = new GZipStream(mStream, CompressionMode.Compress, true)) + gStream.Write(raw, 0, raw.Length); + return mStream.ToArray(); + } + } + + public FileInformation GetFileInformation(string fileName) + { + if (!File.Exists(fileName)) return null; + + FileInfo info = new FileInfo(fileName); + return new FileInformation + { + FileName = fileName.Remove(0, Settings.P_Client.Length), + Length = (int)info.Length, + Creation = info.LastWriteTime + }; + } + + private void AMain_Load(object sender, EventArgs e) + { + var envir = CoreWebView2Environment.CreateAsync(null, Settings.ResourcePath).Result; + Main_browser.EnsureCoreWebView2Async(envir); + + if (Settings.P_BrowserAddress != "") + { + Main_browser.NavigationCompleted += Main_browser_NavigationCompleted; + Main_browser.Source = new Uri(Settings.P_BrowserAddress); + } + + RepairOldFiles(); + + Launch_pb.Enabled = false; + ProgressCurrent_pb.Width = 5; + TotalProg_pb.Width = 5; + Version_label.Text = string.Format("Build: {0}.{1}.{2}", Globals.ProductCodename, Settings.UseTestConfig ? "Debug" : "Release", Application.ProductVersion); + + if (Settings.P_ServerName != String.Empty) + { + Name_label.Visible = true; + Name_label.Text = Settings.P_ServerName; + } + + _workThread = new Thread(Start) { IsBackground = true }; + _workThread.Start(); + } + + private void Main_browser_NavigationCompleted(object sender, CoreWebView2NavigationCompletedEventArgs e) + { + if (Main_browser.Source.AbsolutePath != "blank") Main_browser.Visible = true; + } + + private void Launch_pb_Click(object sender, EventArgs e) + { + Launch(); + } + + private void Launch() + { + if (ConfigForm.Visible) ConfigForm.Visible = false; + Program.Form = new CMain(); + Program.Form.Closed += (s, args) => this.Close(); + Program.Form.Show(); + Program.PForm.Hide(); + } + + private void Close_pb_Click(object sender, EventArgs e) + { + if (ConfigForm.Visible) ConfigForm.Visible = false; + Close(); + } + + private void Movement_panel_MouseClick(object sender, MouseEventArgs e) + { + if (ConfigForm.Visible) ConfigForm.Visible = false; + dragging = true; + dragCursorPoint = Cursor.Position; + dragFormPoint = this.Location; + } + + private void Movement_panel_MouseUp(object sender, MouseEventArgs e) + { + dragging = false; + } + + private void Movement_panel_MouseMove(object sender, MouseEventArgs e) + { + if (dragging) + { + Point dif = Point.Subtract(Cursor.Position, new Size(dragCursorPoint)); + this.Location = Point.Add(dragFormPoint, new Size(dif)); + } + } + + private void Launch_pb_MouseEnter(object sender, EventArgs e) + { + Launch_pb.Image = Client.Resources.Images.Launch_Hover; + } + + private void Launch_pb_MouseLeave(object sender, EventArgs e) + { + Launch_pb.Image = Client.Resources.Images.Launch_Base1; + } + + private void Close_pb_MouseEnter(object sender, EventArgs e) + { + Close_pb.Image = Client.Resources.Images.Cross_Hover; + } + + private void Close_pb_MouseLeave(object sender, EventArgs e) + { + Close_pb.Image = Client.Resources.Images.Cross_Base; + } + + private void Launch_pb_MouseDown(object sender, MouseEventArgs e) + { + Launch_pb.Image = Client.Resources.Images.Launch_Pressed; + } + + private void Launch_pb_MouseUp(object sender, MouseEventArgs e) + { + Launch_pb.Image = Client.Resources.Images.Launch_Base1; + } + + private void Close_pb_MouseDown(object sender, MouseEventArgs e) + { + Close_pb.Image = Client.Resources.Images.Cross_Pressed; + } + + private void Close_pb_MouseUp(object sender, MouseEventArgs e) + { + Close_pb.Image = Client.Resources.Images.Cross_Base; + } + + private void ProgressCurrent_pb_SizeChanged(object sender, EventArgs e) + { + ProgEnd_pb.Location = new Point((ProgressCurrent_pb.Location.X + ProgressCurrent_pb.Width), ProgressCurrent_pb.Location.Y); + if (ProgressCurrent_pb.Width == 0) ProgEnd_pb.Visible = false; + else ProgEnd_pb.Visible = true; + } + + private void Config_pb_MouseDown(object sender, MouseEventArgs e) + { + Config_pb.Image = Client.Resources.Images.Config_Pressed; + } + + private void Config_pb_MouseEnter(object sender, EventArgs e) + { + Config_pb.Image = Client.Resources.Images.Config_Hover; + } + + private void Config_pb_MouseLeave(object sender, EventArgs e) + { + Config_pb.Image = Client.Resources.Images.Config_Base; + } + + private void Config_pb_MouseUp(object sender, MouseEventArgs e) + { + Config_pb.Image = Client.Resources.Images.Config_Base; + } + + private void Config_pb_Click(object sender, EventArgs e) + { + if (ConfigForm.Visible) ConfigForm.Hide(); + else ConfigForm.Show(Program.PForm); + ConfigForm.Location = new Point(Location.X + Config_pb.Location.X - 183, Location.Y + 36); + } + + private void TotalProg_pb_SizeChanged(object sender, EventArgs e) + { + ProgTotalEnd_pb.Location = new Point((TotalProg_pb.Location.X + TotalProg_pb.Width), TotalProg_pb.Location.Y); + if (TotalProg_pb.Width == 0) ProgTotalEnd_pb.Visible = false; + else ProgTotalEnd_pb.Visible = true; + } + + private void InterfaceTimer_Tick(object sender, EventArgs e) + { + try + { + if (Completed) + { + + ActionLabel.Text = ""; + CurrentFile_label.Text = "Up to date."; + SpeedLabel.Text = ""; + ProgressCurrent_pb.Width = 550; + TotalProg_pb.Width = 550; + CurrentFile_label.Visible = true; + CurrentPercent_label.Visible = true; + TotalPercent_label.Visible = true; + CurrentPercent_label.Text = "100%"; + TotalPercent_label.Text = "100%"; + InterfaceTimer.Enabled = false; + Launch_pb.Enabled = true; + if (ErrorFound) MessageBox.Show("One or more files failed to download, check Error.txt for details.", "Failed to Download."); + ErrorFound = false; + + if (CleanFiles) + { + CleanFiles = false; + MessageBox.Show("Your files have been cleaned up.", "Clean Files"); + } + + if (Restart) + { + Program.Restart = true; + + MoveOldFilesToCurrent(); + + Close(); + } + + if (Settings.P_AutoStart) + { + Launch(); + } + return; + } + + var currentBytes = 0L; + FileInformation currentFile = null; + + // Remove completed downloads.. + for (var i = ActiveDownloads.Count - 1; i >= 0; i--) + { + var dl = ActiveDownloads[i]; + + if (dl.Completed) + { + ActiveDownloads.RemoveAt(i); + continue; + } + } + + for (var i = ActiveDownloads.Count - 1; i >= 0; i--) + { + var dl = ActiveDownloads[i]; + if (!dl.Completed) + currentBytes += dl.CurrentBytes; + } + + if (Settings.P_Concurrency == 1) + { + // Note: Just mimic old behaviour for now until a better UI is done. + if (ActiveDownloads.Count > 0) + currentFile = ActiveDownloads[0].Info; + } + + ActionLabel.Visible = true; + SpeedLabel.Visible = true; + CurrentFile_label.Visible = true; + CurrentPercent_label.Visible = true; + TotalPercent_label.Visible = true; + + if (LabelSwitch) ActionLabel.Text = string.Format("{0} Files Remaining", _fileCount - _currentCount); + else ActionLabel.Text = string.Format("{0:#,##0}MB Remaining", ((_totalBytes) - (_completedBytes + currentBytes)) / 1024 / 1024); + + if (Settings.P_Concurrency > 1) + { + CurrentFile_label.Text = string.Format(" {0}", ActiveDownloads.Count); + SpeedLabel.Text = ToSize(currentBytes / _stopwatch.Elapsed.TotalSeconds); + } + else + { + if (currentFile != null) + { + CurrentFile_label.Text = string.Format("{0}", currentFile.FileName); + SpeedLabel.Text = ToSize(currentBytes / _stopwatch.Elapsed.TotalSeconds); + CurrentPercent_label.Text = ((int)(100 * currentBytes / currentFile.Length)).ToString() + "%"; + ProgressCurrent_pb.Width = (int)(5.5 * (100 * currentBytes / currentFile.Length)); + } + } + + if (!(_completedBytes is 0 && currentBytes is 0 && _totalBytes is 0)) + { + TotalProg_pb.Width = (int)(5.5 * (100 * (_completedBytes + currentBytes) / _totalBytes)); + TotalPercent_label.Text = ((int)(100 * (_completedBytes + currentBytes) / _totalBytes)).ToString() + "%"; + } + + } + catch + { + //to-do + } + + } + + private void AMain_Click(object sender, EventArgs e) + { + if (ConfigForm.Visible) ConfigForm.Visible = false; + } + + private void ActionLabel_Click(object sender, EventArgs e) + { + LabelSwitch = !LabelSwitch; + } + + private void Credit_label_Click(object sender, EventArgs e) + { + if (Credit_label.Text == "Powered by Carbon") Credit_label.Text = "Designed by Jev"; + else Credit_label.Text = "Powered by Carbon"; + } + + private void AMain_FormClosed(object sender, FormClosedEventArgs e) + { + MoveOldFilesToCurrent(); + + Launch_pb?.Dispose(); + Close_pb?.Dispose(); + Environment.Exit(0); + } + + private static string[] suffixes = new[] { " B", " KB", " MB", " GB", " TB", " PB" }; + + private string ToSize(double number, int precision = 2) + { + // unit's number of bytes + const double unit = 1024; + // suffix counter + int i = 0; + // as long as we're bigger than a unit, keep going + while (number > unit) + { + number /= unit; + i++; + } + // apply precision and current suffix + return Math.Round(number, precision) + suffixes[i]; + } + + private void RepairOldFiles() + { + var files = Directory.GetFiles(Settings.P_Client, "*", SearchOption.AllDirectories).Where(x => Path.GetFileName(x).StartsWith("Old__")); + + foreach (var oldFilename in files) + { + if (!File.Exists(oldFilename.Replace("Old__", ""))) + { + File.Move(oldFilename, oldFilename.Replace("Old__", "")); + } + else + { + File.Delete(oldFilename); + } + } + } + + private void MoveOldFilesToCurrent() + { + var files = Directory.GetFiles(Settings.P_Client, "*", SearchOption.AllDirectories).Where(x => Path.GetFileName(x).StartsWith("Old__")); + + foreach (var oldFilename in files) + { + string originalFilename = Path.Combine(Path.GetDirectoryName(oldFilename), (Path.GetFileName(oldFilename).Replace("Old__", ""))); + + if (!File.Exists(originalFilename) && File.Exists(oldFilename)) + File.Move(oldFilename, originalFilename); + } + } + } +} diff --git a/Client/Forms/AMain.resx b/Client/Forms/AMain.resx new file mode 100644 index 0000000..d5b6dd4 --- /dev/null +++ b/Client/Forms/AMain.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + 17, 17 + + + + 25 + + + + ..\Resources\$this.Icon11.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/Client/Forms/CMain.Designer.cs b/Client/Forms/CMain.Designer.cs new file mode 100644 index 0000000..6861753 --- /dev/null +++ b/Client/Forms/CMain.Designer.cs @@ -0,0 +1,55 @@ +namespace Client +{ + partial class CMain + { + /// + /// 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(CMain)); + this.SuspendLayout(); + // + // CMain + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.Black; + this.ClientSize = new System.Drawing.Size(275, 260); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MinimumSize = new System.Drawing.Size(200, 213); + this.Name = "CMain"; + this.Text = "Legend of Mir 1 - Battle of the King"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.CMain_FormClosing); + this.Load += new System.EventHandler(this.CMain_Load); + this.ResumeLayout(false); + + } + + #endregion + + } +} + diff --git a/Client/Forms/CMain.cs b/Client/Forms/CMain.cs new file mode 100644 index 0000000..653c8f4 --- /dev/null +++ b/Client/Forms/CMain.cs @@ -0,0 +1,789 @@ +using System.ComponentModel; +using System.Diagnostics; +using System.Drawing.Drawing2D; +using System.Drawing.Imaging; +using System.Drawing.Text; +using System.Runtime.InteropServices; +using System.Security; +using Client.MirControls; +using Client.MirGraphics; +using Client.MirNetwork; +using Client.MirScenes; +using Client.MirSounds; +using SlimDX.Direct3D9; +using SlimDX.Windows; +using Font = System.Drawing.Font; + +namespace Client +{ + public partial class CMain : RenderForm + { + public static MirControl DebugBaseLabel, HintBaseLabel; + public static MirLabel DebugTextLabel, HintTextLabel, ScreenshotTextLabel; + public static Graphics Graphics; + public static Point MPoint; + + public readonly static Stopwatch Timer = Stopwatch.StartNew(); + public readonly static DateTime StartTime = DateTime.UtcNow; + public static long Time; + public static DateTime Now { get { return StartTime.AddMilliseconds(Time); } } + public static readonly Random Random = new Random(); + + public static string DebugText = ""; + + private static long _fpsTime; + private static int _fps; + private static long _cleanTime; + private static long _drawTime; + public static int FPS; + public static int DPS; + public static int DPSCounter; + + public static long PingTime; + public static long NextPing = 10000; + + public static bool Shift, Alt, Ctrl, Tilde, SpellTargetLock; + public static double BytesSent, BytesReceived; + + public static KeyBindSettings InputKeys = new KeyBindSettings(); + + public CMain() + { + InitializeComponent(); + + Application.Idle += Application_Idle; + + MouseClick += CMain_MouseClick; + MouseDown += CMain_MouseDown; + MouseUp += CMain_MouseUp; + MouseMove += CMain_MouseMove; + MouseDoubleClick += CMain_MouseDoubleClick; + KeyPress += CMain_KeyPress; + KeyDown += CMain_KeyDown; + KeyUp += CMain_KeyUp; + Deactivate += CMain_Deactivate; + MouseWheel += CMain_MouseWheel; + + + SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.Selectable, true); + FormBorderStyle = Settings.FullScreen || Settings.Borderless ? FormBorderStyle.None : FormBorderStyle.FixedDialog; + + Graphics = CreateGraphics(); + Graphics.SmoothingMode = SmoothingMode.AntiAlias; + Graphics.TextRenderingHint = TextRenderingHint.AntiAliasGridFit; + Graphics.CompositingQuality = CompositingQuality.HighQuality; + Graphics.InterpolationMode = InterpolationMode.NearestNeighbor; + Graphics.PixelOffsetMode = PixelOffsetMode.HighQuality; + Graphics.TextContrast = 0; + } + + private void CMain_Load(object sender, EventArgs e) + { + this.Text = GameLanguage.GameName; + try + { + ClientSize = new Size(800, 600); + + LoadMouseCursors(); + SetMouseCursor(MouseCursor.Default); + + SlimDX.Configuration.EnableObjectTracking = true; + + DXManager.Create(); + SoundManager.Create(); + CenterToScreen(); + } + catch (Exception ex) + { + SaveError(ex.ToString()); + } + } + + private static void Application_Idle(object sender, EventArgs e) + { + try + { + while (AppStillIdle) + { + UpdateTime(); + UpdateFrameTime(); + UpdateEnviroment(); + + if (IsDrawTime()) + RenderEnvironment(); + } + + } + catch (Exception ex) + { + SaveError(ex.ToString()); + } + } + + private static void CMain_Deactivate(object sender, EventArgs e) + { + MapControl.MapButtons = MouseButtons.None; + Shift = false; + Alt = false; + Ctrl = false; + Tilde = false; + SpellTargetLock = false; + } + + public static void CMain_KeyDown(object sender, KeyEventArgs e) + { + Shift = e.Shift; + Alt = e.Alt; + Ctrl = e.Control; + + if (!String.IsNullOrEmpty(InputKeys.GetKey(KeybindOptions.TargetSpellLockOn))) + { + SpellTargetLock = e.KeyCode == (Keys)Enum.Parse(typeof(Keys), InputKeys.GetKey(KeybindOptions.TargetSpellLockOn), true); + } + else + { + SpellTargetLock = false; + } + + + if (e.KeyCode == Keys.Oem8) + CMain.Tilde = true; + + try + { + if (e.Alt && e.KeyCode == Keys.Enter) + { + ToggleFullScreen(); + return; + } + + if (MirScene.ActiveScene != null) + MirScene.ActiveScene.OnKeyDown(e); + + } + catch (Exception ex) + { + SaveError(ex.ToString()); + } + } + public static void CMain_MouseMove(object sender, MouseEventArgs e) + { + if (Settings.FullScreen || Settings.MouseClip) + Cursor.Clip = Program.Form.RectangleToScreen(Program.Form.ClientRectangle); + + MPoint = Program.Form.PointToClient(Cursor.Position); + + try + { + if (MirScene.ActiveScene != null) + MirScene.ActiveScene.OnMouseMove(e); + } + catch (Exception ex) + { + SaveError(ex.ToString()); + } + } + public static void CMain_KeyUp(object sender, KeyEventArgs e) + { + Shift = e.Shift; + Alt = e.Alt; + Ctrl = e.Control; + + if (!String.IsNullOrEmpty(InputKeys.GetKey(KeybindOptions.TargetSpellLockOn))) + { + SpellTargetLock = e.KeyCode == (Keys)Enum.Parse(typeof(Keys), InputKeys.GetKey(KeybindOptions.TargetSpellLockOn), true); + } + else + { + SpellTargetLock = false; + } + + if (e.KeyCode == Keys.Oem8) + CMain.Tilde = false; + + foreach (KeyBind KeyCheck in CMain.InputKeys.Keylist) + { + if (KeyCheck.function != KeybindOptions.Screenshot) continue; + if (KeyCheck.Key != e.KeyCode) + continue; + if ((KeyCheck.RequireAlt != 2) && (KeyCheck.RequireAlt != (Alt ? 1 : 0))) + continue; + if ((KeyCheck.RequireShift != 2) && (KeyCheck.RequireShift != (Shift ? 1 : 0))) + continue; + if ((KeyCheck.RequireCtrl != 2) && (KeyCheck.RequireCtrl != (Ctrl ? 1 : 0))) + continue; + if ((KeyCheck.RequireTilde != 2) && (KeyCheck.RequireTilde != (Tilde ? 1 : 0))) + continue; + Program.Form.CreateScreenShot(); + break; + + } + try + { + if (MirScene.ActiveScene != null) + MirScene.ActiveScene.OnKeyUp(e); + } + catch (Exception ex) + { + SaveError(ex.ToString()); + } + } + public static void CMain_KeyPress(object sender, KeyPressEventArgs e) + { + try + { + if (MirScene.ActiveScene != null) + MirScene.ActiveScene.OnKeyPress(e); + } + catch (Exception ex) + { + SaveError(ex.ToString()); + } + } + public static void CMain_MouseDoubleClick(object sender, MouseEventArgs e) + { + try + { + if (MirScene.ActiveScene != null) + MirScene.ActiveScene.OnMouseClick(e); + } + catch (Exception ex) + { + SaveError(ex.ToString()); + } + } + public static void CMain_MouseUp(object sender, MouseEventArgs e) + { + MapControl.MapButtons &= ~e.Button; + + try + { + if (MirScene.ActiveScene != null) + MirScene.ActiveScene.OnMouseUp(e); + } + catch (Exception ex) + { + SaveError(ex.ToString()); + } + } + public static void CMain_MouseDown(object sender, MouseEventArgs e) + { + if (Program.Form.ActiveControl is TextBox) + { + MirTextBox textBox = Program.Form.ActiveControl.Tag as MirTextBox; + + if (textBox != null && textBox.CanLoseFocus) + Program.Form.ActiveControl = null; + } + + if (e.Button == MouseButtons.Right && (GameScene.SelectedCell != null || GameScene.PickedUpGold)) + { + GameScene.SelectedCell = null; + GameScene.PickedUpGold = false; + return; + } + + try + { + if (MirScene.ActiveScene != null) + MirScene.ActiveScene.OnMouseDown(e); + } + catch (Exception ex) + { + SaveError(ex.ToString()); + } + } + public static void CMain_MouseClick(object sender, MouseEventArgs e) + { + try + { + if (MirScene.ActiveScene != null) + MirScene.ActiveScene.OnMouseClick(e); + } + catch (Exception ex) + { + SaveError(ex.ToString()); + } + } + public static void CMain_MouseWheel(object sender, MouseEventArgs e) + { + try + { + if (MirScene.ActiveScene != null) + MirScene.ActiveScene.OnMouseWheel(e); + } + catch (Exception ex) + { + SaveError(ex.ToString()); + } + } + + private static void UpdateTime() + { + Time = Timer.ElapsedMilliseconds; + } + + private static void UpdateFrameTime() + { + if (Time >= _fpsTime) + { + _fpsTime = Time + 1000; + FPS = _fps; + _fps = 0; + + DPS = DPSCounter; + DPSCounter = 0; + } + else + _fps++; + } + + private static bool IsDrawTime() + { + const int TargetUpdates = 1000 / 60; // 60 frames per second + + if (Time >= _drawTime) + { + _drawTime = Time + TargetUpdates; + return true; + } + return false; + } + + private static void UpdateEnviroment() + { + if (Time >= _cleanTime) + { + _cleanTime = Time + 1000; + + DXManager.Clean(); // Clean once a second. + } + + Network.Process(); + + if (MirScene.ActiveScene != null) + MirScene.ActiveScene.Process(); + + for (int i = 0; i < MirAnimatedControl.Animations.Count; i++) + MirAnimatedControl.Animations[i].UpdateOffSet(); + + for (int i = 0; i < MirAnimatedButton.Animations.Count; i++) + MirAnimatedButton.Animations[i].UpdateOffSet(); + + CreateHintLabel(); + + if (Settings.DebugMode) + { + CreateDebugLabel(); + } + } + + private static void RenderEnvironment() + { + try + { + if (DXManager.DeviceLost) + { + DXManager.AttemptReset(); + Thread.Sleep(1); + return; + } + + DXManager.Device.Clear(ClearFlags.Target, Color.CornflowerBlue, 0, 0); + DXManager.Device.BeginScene(); + DXManager.Sprite.Begin(SpriteFlags.AlphaBlend); + DXManager.SetSurface(DXManager.MainSurface); + + if (MirScene.ActiveScene != null) + MirScene.ActiveScene.Draw(); + + DXManager.Sprite.End(); + DXManager.Device.EndScene(); + DXManager.Device.Present(); + } + catch (Direct3D9Exception ex) + { + DXManager.DeviceLost = true; + SaveError(ex.ToString()); + } + catch (Exception ex) + { + SaveError(ex.ToString()); + + DXManager.AttemptRecovery(); + } + } + + private static void CreateDebugLabel() + { + string text; + + if (MirControl.MouseControl != null) + { + text = string.Format("FPS: {0}", FPS); + + text += string.Format(", DPS: {0}", DPS); + + text += string.Format(", Time: {0:HH:mm:ss UTC}", Now); + + if (MirControl.MouseControl is MapControl) + text += string.Format(", Co Ords: {0}", MapControl.MapLocation); + + if (MirControl.MouseControl is MirImageControl) + text += string.Format(", Control: {0}", MirControl.MouseControl.GetType().Name); + + if (MirScene.ActiveScene is GameScene) + text += string.Format(", Objects: {0}", MapControl.Objects.Count); + + if (MirScene.ActiveScene is GameScene && !string.IsNullOrEmpty(DebugText)) + text += string.Format(", Debug: {0}", DebugText); + + if (MirObjects.MapObject.MouseObject != null) + { + text += string.Format(", Target: {0}", MirObjects.MapObject.MouseObject.Name); + } + else + { + text += string.Format(", Target: none"); + } + } + else + { + text = string.Format("FPS: {0}", FPS); + } + + text += string.Format(", Ping: {0}", PingTime); + + text += string.Format(", Sent: {0}, Received: {1}", Functions.ConvertByteSize(BytesSent), Functions.ConvertByteSize(BytesReceived)); + + text += string.Format(", TLC: {0}", DXManager.TextureList.Count(x => x.TextureValid)); + text += string.Format(", CLC: {0}", DXManager.ControlList.Count(x => x.IsDisposed == false)); + + if (Settings.FullScreen) + { + if (DebugBaseLabel == null || DebugBaseLabel.IsDisposed) + { + DebugBaseLabel = new MirControl + { + BackColour = Color.FromArgb(50, 50, 50), + Border = true, + BorderColour = Color.Black, + DrawControlTexture = true, + Location = new Point(5, 5), + NotControl = true, + Opacity = 0.5F + }; + } + + if (DebugTextLabel == null || DebugTextLabel.IsDisposed) + { + DebugTextLabel = new MirLabel + { + AutoSize = true, + BackColour = Color.Transparent, + ForeColour = Color.White, + Parent = DebugBaseLabel, + }; + + DebugTextLabel.SizeChanged += (o, e) => DebugBaseLabel.Size = DebugTextLabel.Size; + } + + DebugTextLabel.Text = text; + } + else + { + if (DebugBaseLabel != null && DebugBaseLabel.IsDisposed == false) + { + DebugBaseLabel.Dispose(); + DebugBaseLabel = null; + } + if (DebugTextLabel != null && DebugTextLabel.IsDisposed == false) + { + DebugTextLabel.Dispose(); + DebugTextLabel = null; + } + + Program.Form.Text = $"{GameLanguage.GameName} - {text}"; + } + } + + private static void CreateHintLabel() + { + if (HintBaseLabel == null || HintBaseLabel.IsDisposed) + { + HintBaseLabel = new MirControl + { + BackColour = Color.FromArgb(255, 0, 0, 0), + Border = true, + DrawControlTexture = true, + BorderColour = Color.FromArgb(255, 144, 144, 0), + ForeColour = Color.Yellow, + Parent = MirScene.ActiveScene, + NotControl = true, + Opacity = 0.5F + }; + } + + + if (HintTextLabel == null || HintTextLabel.IsDisposed) + { + HintTextLabel = new MirLabel + { + AutoSize = true, + BackColour = Color.Transparent, + ForeColour = Color.Yellow, + Parent = HintBaseLabel, + }; + + HintTextLabel.SizeChanged += (o, e) => HintBaseLabel.Size = HintTextLabel.Size; + } + + if (MirControl.MouseControl == null || string.IsNullOrEmpty(MirControl.MouseControl.Hint)) + { + HintBaseLabel.Visible = false; + return; + } + + HintBaseLabel.Visible = true; + + HintTextLabel.Text = MirControl.MouseControl.Hint; + + Point point = MPoint.Add(-HintTextLabel.Size.Width, 20); + + if (point.X + HintBaseLabel.Size.Width >= Settings.ScreenWidth) + point.X = Settings.ScreenWidth - HintBaseLabel.Size.Width - 1; + if (point.Y + HintBaseLabel.Size.Height >= Settings.ScreenHeight) + point.Y = Settings.ScreenHeight - HintBaseLabel.Size.Height - 1; + + if (point.X < 0) + point.X = 0; + if (point.Y < 0) + point.Y = 0; + + HintBaseLabel.Location = point; + } + + private static void ToggleFullScreen() + { + Settings.FullScreen = !Settings.FullScreen; + + Program.Form.FormBorderStyle = Settings.FullScreen || Settings.Borderless ? FormBorderStyle.None : FormBorderStyle.FixedDialog; + + DXManager.Parameters.Windowed = !Settings.FullScreen; + + Program.Form.ClientSize = new Size(Settings.ScreenWidth, Settings.ScreenHeight); + + DXManager.ResetDevice(); + + if (MirScene.ActiveScene == GameScene.Scene) + { + GameScene.Scene.MapControl.FloorValid = false; + GameScene.Scene.TextureValid = false; + } + + Program.Form.CenterToScreen(); + } + + public void CreateScreenShot() + { + string text = string.Format("[{0} Server {1}] {2} {3:hh\\:mm\\:ss}", + Settings.P_ServerName.Length > 0 ? Settings.P_ServerName : "Carbon", + MapControl.User != null ? MapControl.User.Name : "", + Now.ToShortDateString(), + Now.TimeOfDay); + + Surface backbuffer = DXManager.Device.GetBackBuffer(0, 0); + + using (var stream = Surface.ToStream(backbuffer, ImageFileFormat.Png)) + { + Bitmap image = new Bitmap(stream); + + using (Graphics graphics = Graphics.FromImage(image)) + { + StringFormat sf = new StringFormat + { + LineAlignment = StringAlignment.Center, + Alignment = StringAlignment.Center + }; + + graphics.DrawString(text, new Font(Settings.FontName, 9F), Brushes.Black, new Point((Settings.ScreenWidth / 2) + 3, 10), sf); + graphics.DrawString(text, new Font(Settings.FontName, 9F), Brushes.Black, new Point((Settings.ScreenWidth / 2) + 4, 9), sf); + graphics.DrawString(text, new Font(Settings.FontName, 9F), Brushes.Black, new Point((Settings.ScreenWidth / 2) + 5, 10), sf); + graphics.DrawString(text, new Font(Settings.FontName, 9F), Brushes.Black, new Point((Settings.ScreenWidth / 2) + 4, 11), sf); + graphics.DrawString(text, new Font(Settings.FontName, 9F), Brushes.White, new Point((Settings.ScreenWidth / 2) + 4, 10), sf);//SandyBrown + + string path = Path.Combine(Application.StartupPath, @"Screenshots\"); + if (!Directory.Exists(path)) + Directory.CreateDirectory(path); + + int count = Directory.GetFiles(path, "*.png").Length; + + image.Save(Path.Combine(path, string.Format("Image {0}.png", count)), ImageFormat.Png); + } + } + } + + public static void SaveError(string ex) + { + try + { + if (Settings.RemainingErrorLogs-- > 0) + { + File.AppendAllText(@".\Error.txt", + string.Format("[{0}] {1}{2}", Now, ex, Environment.NewLine)); + } + } + catch + { + } + } + + public static void SetResolution(int width, int height) + { + Settings.ScreenWidth = width; + Settings.ScreenHeight = height; + Program.Form.ClientSize = new Size(width, height); + + DXManager.Device.Clear(ClearFlags.Target, Color.Black, 0, 0); + DXManager.Device.Present(); + DXManager.ResetDevice(); + + Program.Form.CenterToScreen(); + } + + + #region ScreenCapture + + //private Bitmap CaptureScreen() + //{ + + //} + + #endregion + + #region Idle Check + private static bool AppStillIdle + { + get + { + PeekMsg msg; + return !PeekMessage(out msg, IntPtr.Zero, 0, 0, 0); + } + } + + [SuppressUnmanagedCodeSecurity] + [DllImport("User32.dll", CharSet = CharSet.Auto)] + private static extern bool PeekMessage(out PeekMsg msg, IntPtr hWnd, uint messageFilterMin, + uint messageFilterMax, uint flags); + + [StructLayout(LayoutKind.Sequential)] + private struct PeekMsg + { + private readonly IntPtr hWnd; + private readonly Message msg; + private readonly IntPtr wParam; + private readonly IntPtr lParam; + private readonly uint time; + private readonly Point p; + } + #endregion + + private void CMain_FormClosing(object sender, FormClosingEventArgs e) + { + if (CMain.Time < GameScene.LogTime && !Settings.UseTestConfig && !GameScene.Observing) + { + GameScene.Scene.ChatDialog.ReceiveChat(string.Format(GameLanguage.CannotLeaveGame, (GameScene.LogTime - CMain.Time) / 1000), ChatType.System); + e.Cancel = true; + } + else + { + Settings.Save(); + + DXManager.Dispose(); + SoundManager.Dispose(); + } + } + + protected override void WndProc(ref Message m) + { + if (m.Msg == 0x0112) // WM_SYSCOMMAND + { + if (m.WParam.ToInt32() == 0xF100) // SC_KEYMENU + { + m.Result = IntPtr.Zero; + return; + } + else if (m.WParam.ToInt32() == 0xF030) // SC_MAXIMISE + { + ToggleFullScreen(); + return; + } + } + + base.WndProc(ref m); + } + + + public static Cursor[] Cursors; + public static MouseCursor CurrentCursor = MouseCursor.None; + public static void SetMouseCursor(MouseCursor cursor) + { + if (!Settings.UseMouseCursors) return; + + if (CurrentCursor != cursor) + { + CurrentCursor = cursor; + Program.Form.Cursor = Cursors[(byte)cursor]; + } + } + + private static void LoadMouseCursors() + { + Cursors = new Cursor[8]; + + Cursors[(int)MouseCursor.None] = Program.Form.Cursor; + + string path = $"{Settings.MouseCursorPath}Cursor_Default.CUR"; + if (File.Exists(path)) + Cursors[(int)MouseCursor.Default] = LoadCustomCursor(path); + + path = $"{Settings.MouseCursorPath}Cursor_Normal_Atk.CUR"; + if (File.Exists(path)) + Cursors[(int)MouseCursor.Attack] = LoadCustomCursor(path); + + path = $"{Settings.MouseCursorPath}Cursor_Compulsion_Atk.CUR"; + if (File.Exists(path)) + Cursors[(int)MouseCursor.AttackRed] = LoadCustomCursor(path); + + path = $"{Settings.MouseCursorPath}Cursor_Npc.CUR"; + if (File.Exists(path)) + Cursors[(int)MouseCursor.NPCTalk] = LoadCustomCursor(path); + + path = $"{Settings.MouseCursorPath}Cursor_TextPrompt.CUR"; + if (File.Exists(path)) + Cursors[(int)MouseCursor.TextPrompt] = LoadCustomCursor(path); + + path = $"{Settings.MouseCursorPath}Cursor_Trash.CUR"; + if (File.Exists(path)) + Cursors[(int)MouseCursor.Trash] = LoadCustomCursor(path); + + path = $"{Settings.MouseCursorPath}Cursor_Upgrade.CUR"; + if (File.Exists(path)) + Cursors[(int)MouseCursor.Upgrade] = LoadCustomCursor(path); + } + + public static Cursor LoadCustomCursor(string path) + { + IntPtr hCurs = LoadCursorFromFile(path); + if (hCurs == IntPtr.Zero) throw new Win32Exception(); + var curs = new Cursor(hCurs); + // Note: force the cursor to own the handle so it gets released properly + //var fi = typeof(Cursor).GetField("ownHandle", BindingFlags.NonPublic | BindingFlags.Instance); + //fi.SetValue(curs, true); + return curs; + } + + [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)] + private static extern IntPtr LoadCursorFromFile(string path); + } +} diff --git a/Client/Forms/CMain.resx b/Client/Forms/CMain.resx new file mode 100644 index 0000000..6639c33 --- /dev/null +++ b/Client/Forms/CMain.resx @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\$this.Icon1.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/Client/Forms/Config.cs b/Client/Forms/Config.cs new file mode 100644 index 0000000..8dd7891 --- /dev/null +++ b/Client/Forms/Config.cs @@ -0,0 +1,244 @@ +using Client; +using System.Resources; +using System.Reflection; +using Client.Resolution; + +namespace Launcher +{ + + public partial class Config : Form + { + public Config() + { + InitializeComponent(); + } + + private void Config_Load(object sender, EventArgs e) + { + this.label10.Text = GameLanguage.Resolution; + this.AutoStart_label.Text = GameLanguage.Autostart; + this.ID_l.Text = GameLanguage.Usrname; + this.Password_l.Text = GameLanguage.Password; + + DrawSupportedResolutions(); + } + + private void Res1_pb_Click(object sender, EventArgs e) + { + resolutionChoice(eSupportedResolution.w800h600); + + } + + public void resolutionChoice(eSupportedResolution res) + { + Res2_pb.Image = Client.Resources.Images.Radio_Unactive; + Res3_pb.Image = Client.Resources.Images.Radio_Unactive; + Res4_pb.Image = Client.Resources.Images.Radio_Unactive; + Res5_pb.Image = Client.Resources.Images.Radio_Unactive; + + switch (res) + { + case eSupportedResolution.w800h600: + Res2_pb.Image = Client.Resources.Images.Config_Radio_On; + break; + case eSupportedResolution.w1366h768: + Res3_pb.Image = Client.Resources.Images.Config_Radio_On; + break; + case eSupportedResolution.w1280h720: + Res4_pb.Image = Client.Resources.Images.Config_Radio_On; + break; + case eSupportedResolution.w1920h1080: + Res5_pb.Image = Client.Resources.Images.Config_Radio_On; + break; + + } + + Settings.Resolution = (int)res; + } + + private void Res2_pb_Click(object sender, EventArgs e) + { + resolutionChoice(eSupportedResolution.w800h600); + } + + private void Res3_pb_Click(object sender, EventArgs e) + { + resolutionChoice(eSupportedResolution.w1366h768); + } + + private void Config_VisibleChanged(object sender, EventArgs e) + { + if (Visible) + { + AccountLogin_txt.Text = Settings.AccountID; + AccountPass_txt.Text = Settings.Password; + resolutionChoice((eSupportedResolution)Settings.Resolution); + + Fullscreen_pb.Image = Settings.FullScreen + ? Client.Resources.Images.Config_Check_On + : Client.Resources.Images.Config_Check_Off1; + + FPScap_pb.Image = Settings.FPSCap + ? Client.Resources.Images.Config_Check_On + : Client.Resources.Images.Config_Check_Off1; + + OnTop_pb.Image = Settings.TopMost + ? Client.Resources.Images.Config_Check_On + : Client.Resources.Images.Config_Check_Off1; + + AutoStart_pb.Image = Settings.P_AutoStart + ? Client.Resources.Images.Config_Check_On + : Client.Resources.Images.Config_Check_Off1; + + this.ActiveControl = label4; + } + else + { + Settings.AccountID = AccountLogin_txt.Text; + Settings.Password = AccountPass_txt.Text; + Settings.Save(); + } + } + + private void AccountLogin_txt_TextChanged(object sender, EventArgs e) + { + if (AccountLogin_txt.Text == string.Empty) ID_l.Visible = true; + else ID_l.Visible = false; + } + + private void AccountPass_txt_TextChanged(object sender, EventArgs e) + { + if (AccountPass_txt.Text == string.Empty) Password_l.Visible = true; + else Password_l.Visible = false; + } + + private void AccountLogin_txt_Click(object sender, EventArgs e) + { + ID_l.Visible = false; + AccountLogin_txt.Focus(); + } + + private void AccountPass_txt_Click(object sender, EventArgs e) + { + Password_l.Visible = false; + AccountPass_txt.Focus(); + } + + private void Config_Click(object sender, EventArgs e) + { + this.ActiveControl = label4; + } + + private void Fullscreen_pb_Click(object sender, EventArgs e) + { + Settings.FullScreen = !Settings.FullScreen; + + Fullscreen_pb.Image = Settings.FullScreen + ? Client.Resources.Images.Config_Check_On + : Client.Resources.Images.Config_Check_Off1; + } + + private void FPScap_pb_Click(object sender, EventArgs e) + { + Settings.FPSCap = !Settings.FPSCap; + + FPScap_pb.Image = Settings.FPSCap + ? Client.Resources.Images.Config_Check_On + : Client.Resources.Images.Config_Check_Off1; + } + + private void OnTop_pb_Click(object sender, EventArgs e) + { + Settings.TopMost = !Settings.TopMost; + + OnTop_pb.Image = Settings.TopMost + ? Client.Resources.Images.Config_Check_On + : Client.Resources.Images.Config_Check_Off1; + } + + private void AutoStart_pb_Click(object sender, EventArgs e) + { + Settings.P_AutoStart = !Settings.P_AutoStart; + + AutoStart_pb.Image = Settings.P_AutoStart + ? Client.Resources.Images.Config_Check_On + : Client.Resources.Images.Config_Check_Off1; + } + + private void CleanFiles_pb_MouseDown(object sender, MouseEventArgs e) + { + CleanFiles_pb.Image = Client.Resources.Images.CheckF_Pressed; + } + + private void CleanFiles_pb_MouseUp(object sender, MouseEventArgs e) + { + CleanFiles_pb.Image = Client.Resources.Images.CheckF_Base2; + } + + private void CleanFiles_pb_MouseEnter(object sender, EventArgs e) + { + CleanFiles_pb.Image = Client.Resources.Images.CheckF_Hover; + } + + private void CleanFiles_pb_MouseLeave(object sender, EventArgs e) + { + CleanFiles_pb.Image = Client.Resources.Images.CheckF_Base2; + } + + private void CleanFiles_pb_Click(object sender, EventArgs e) + { + if (!Program.PForm.Launch_pb.Enabled) return; + + Program.PForm.Completed = false; + Program.PForm.InterfaceTimer.Enabled = true; + Program.PForm.CleanFiles = true; + Program.PForm._workThread = new Thread(Program.PForm.Start) { IsBackground = true }; + Program.PForm._workThread.Start(); + } + + private void Res4_pb_Click(object sender, EventArgs e) + { + resolutionChoice(eSupportedResolution.w1280h720); + } + + private void Res5_pb_Click(object sender, EventArgs e) + { + resolutionChoice(eSupportedResolution.w1920h1080); + } + + private void DrawSupportedResolutions() + { + Res2_pb.Enabled = false; + label2.ForeColor = Color.Red; + Res4_pb.Enabled = false; + label5.ForeColor = Color.Red; + Res3_pb.Enabled = false; + label3.ForeColor = Color.Red; + Res5_pb.Enabled = false; + label1.ForeColor = Color.Red; + + foreach (eSupportedResolution supportedResolution in DisplayResolutions.DisplaySupportedResolutions) + { + switch (supportedResolution) + { + case (eSupportedResolution.w800h600): + Res2_pb.Enabled = true; + label2.ForeColor = Color.Gray; + break; + case (eSupportedResolution.w1280h720): + Res4_pb.Enabled = true; + label5.ForeColor = Color.Gray; + break; + case (eSupportedResolution.w1366h768): + Res3_pb.Enabled = true; + label3.ForeColor = Color.Gray; + break; + case (eSupportedResolution.w1920h1080): + Res5_pb.Enabled = true; + label1.ForeColor = Color.Gray; + break; + } + } + } + } +} diff --git a/Client/Forms/Config.designer.cs b/Client/Forms/Config.designer.cs new file mode 100644 index 0000000..4ea0d87 --- /dev/null +++ b/Client/Forms/Config.designer.cs @@ -0,0 +1,513 @@ +namespace Launcher +{ + partial class Config + { + /// + /// 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() + { + AccountLogin_txt = new TextBox(); + AccountPass_txt = new TextBox(); + label2 = new Label(); + label3 = new Label(); + Res3_pb = new PictureBox(); + Res2_pb = new PictureBox(); + ID_l = new Label(); + Password_l = new Label(); + label4 = new Label(); + AutoStart_pb = new PictureBox(); + AutoStart_label = new Label(); + Fullscreen_label = new Label(); + Fullscreen_pb = new PictureBox(); + OnTop_label = new Label(); + OnTop_pb = new PictureBox(); + FPScap_label = new Label(); + FPScap_pb = new PictureBox(); + CleanFiles_pb = new PictureBox(); + pictureBox6 = new PictureBox(); + label9 = new Label(); + label10 = new Label(); + label11 = new Label(); + label12 = new Label(); + label5 = new Label(); + Res4_pb = new PictureBox(); + label1 = new Label(); + Res5_pb = new PictureBox(); + ((System.ComponentModel.ISupportInitialize)Res3_pb).BeginInit(); + ((System.ComponentModel.ISupportInitialize)Res2_pb).BeginInit(); + ((System.ComponentModel.ISupportInitialize)AutoStart_pb).BeginInit(); + ((System.ComponentModel.ISupportInitialize)Fullscreen_pb).BeginInit(); + ((System.ComponentModel.ISupportInitialize)OnTop_pb).BeginInit(); + ((System.ComponentModel.ISupportInitialize)FPScap_pb).BeginInit(); + ((System.ComponentModel.ISupportInitialize)CleanFiles_pb).BeginInit(); + ((System.ComponentModel.ISupportInitialize)pictureBox6).BeginInit(); + ((System.ComponentModel.ISupportInitialize)Res4_pb).BeginInit(); + ((System.ComponentModel.ISupportInitialize)Res5_pb).BeginInit(); + SuspendLayout(); + // + // AccountLogin_txt + // + AccountLogin_txt.BackColor = Color.FromArgb(64, 64, 64); + AccountLogin_txt.BorderStyle = BorderStyle.None; + AccountLogin_txt.Cursor = Cursors.IBeam; + AccountLogin_txt.Font = new Font("Calibri", 9F, FontStyle.Regular, GraphicsUnit.Point); + AccountLogin_txt.ForeColor = Color.White; + AccountLogin_txt.Location = new Point(29, 205); + AccountLogin_txt.Margin = new Padding(4, 3, 4, 3); + AccountLogin_txt.Name = "AccountLogin_txt"; + AccountLogin_txt.Size = new Size(124, 15); + AccountLogin_txt.TabIndex = 0; + AccountLogin_txt.Tag = "Testing"; + AccountLogin_txt.Click += AccountLogin_txt_Click; + AccountLogin_txt.TextChanged += AccountLogin_txt_TextChanged; + AccountLogin_txt.Leave += AccountLogin_txt_TextChanged; + // + // AccountPass_txt + // + AccountPass_txt.BackColor = Color.FromArgb(64, 64, 64); + AccountPass_txt.BorderStyle = BorderStyle.None; + AccountPass_txt.Font = new Font("Calibri", 9F, FontStyle.Regular, GraphicsUnit.Point); + AccountPass_txt.ForeColor = Color.White; + AccountPass_txt.Location = new Point(29, 232); + AccountPass_txt.Margin = new Padding(4, 3, 4, 3); + AccountPass_txt.Name = "AccountPass_txt"; + AccountPass_txt.PasswordChar = '*'; + AccountPass_txt.Size = new Size(124, 15); + AccountPass_txt.TabIndex = 1; + AccountPass_txt.Click += AccountPass_txt_Click; + AccountPass_txt.TextChanged += AccountPass_txt_TextChanged; + AccountPass_txt.Leave += AccountPass_txt_TextChanged; + // + // label2 + // + label2.AutoSize = true; + label2.BackColor = Color.Transparent; + label2.Font = new Font("Calibri", 8.25F, FontStyle.Regular, GraphicsUnit.Point); + label2.ForeColor = Color.Gray; + label2.Location = new Point(178, 59); + label2.Margin = new Padding(4, 0, 4, 0); + label2.Name = "label2"; + label2.Size = new Size(48, 13); + label2.TabIndex = 5; + label2.Text = "800x600"; + label2.Click += Res2_pb_Click; + // + // label3 + // + label3.AutoSize = true; + label3.BackColor = Color.Transparent; + label3.Font = new Font("Calibri", 8.25F, FontStyle.Regular, GraphicsUnit.Point); + label3.ForeColor = Color.Gray; + label3.Location = new Point(178, 100); + label3.Margin = new Padding(4, 0, 4, 0); + label3.Name = "label3"; + label3.Size = new Size(54, 13); + label3.TabIndex = 7; + label3.Text = "1366x768"; + label3.Click += Res3_pb_Click; + // + // Res3_pb + // + Res3_pb.Location = new Point(157, 100); + Res3_pb.Margin = new Padding(4, 3, 4, 3); + Res3_pb.Name = "Res3_pb"; + Res3_pb.Size = new Size(12, 12); + Res3_pb.TabIndex = 6; + Res3_pb.TabStop = false; + Res3_pb.Click += Res3_pb_Click; + // + // Res2_pb + // + Res2_pb.Location = new Point(157, 59); + Res2_pb.Margin = new Padding(4, 3, 4, 3); + Res2_pb.Name = "Res2_pb"; + Res2_pb.Size = new Size(12, 12); + Res2_pb.TabIndex = 4; + Res2_pb.TabStop = false; + Res2_pb.Click += Res2_pb_Click; + // + // ID_l + // + ID_l.BackColor = Color.Transparent; + ID_l.Cursor = Cursors.IBeam; + ID_l.Enabled = false; + ID_l.Font = new Font("Calibri", 9.75F, FontStyle.Italic, GraphicsUnit.Point); + ID_l.ForeColor = Color.Transparent; + ID_l.Location = new Point(29, 204); + ID_l.Margin = new Padding(4, 0, 4, 0); + ID_l.Name = "ID_l"; + ID_l.Size = new Size(124, 17); + ID_l.TabIndex = 8; + ID_l.Text = "Username"; + ID_l.Click += AccountLogin_txt_Click; + // + // Password_l + // + Password_l.BackColor = Color.Transparent; + Password_l.Cursor = Cursors.IBeam; + Password_l.Enabled = false; + Password_l.Font = new Font("Calibri Light", 9.75F, FontStyle.Italic, GraphicsUnit.Point); + Password_l.ForeColor = Color.Transparent; + Password_l.Location = new Point(29, 232); + Password_l.Margin = new Padding(4, 0, 4, 0); + Password_l.Name = "Password_l"; + Password_l.Size = new Size(124, 17); + Password_l.TabIndex = 9; + Password_l.Text = "Password"; + Password_l.Click += AccountPass_txt_Click; + // + // label4 + // + label4.AutoSize = true; + label4.BackColor = Color.Transparent; + label4.Location = new Point(261, 31); + label4.Margin = new Padding(4, 0, 4, 0); + label4.Name = "label4"; + label4.Size = new Size(0, 15); + label4.TabIndex = 10; + // + // AutoStart_pb + // + AutoStart_pb.BackgroundImageLayout = ImageLayout.Center; + AutoStart_pb.Location = new Point(23, 160); + AutoStart_pb.Margin = new Padding(4, 3, 4, 3); + AutoStart_pb.Name = "AutoStart_pb"; + AutoStart_pb.Size = new Size(12, 12); + AutoStart_pb.TabIndex = 11; + AutoStart_pb.TabStop = false; + AutoStart_pb.Click += AutoStart_pb_Click; + // + // AutoStart_label + // + AutoStart_label.AutoSize = true; + AutoStart_label.BackColor = Color.Transparent; + AutoStart_label.Font = new Font("Calibri", 8.25F, FontStyle.Regular, GraphicsUnit.Point); + AutoStart_label.ForeColor = Color.Gray; + AutoStart_label.Location = new Point(40, 159); + AutoStart_label.Margin = new Padding(4, 0, 4, 0); + AutoStart_label.Name = "AutoStart_label"; + AutoStart_label.Size = new Size(54, 13); + AutoStart_label.TabIndex = 12; + AutoStart_label.Text = "Auto start"; + AutoStart_label.Click += AutoStart_pb_Click; + // + // Fullscreen_label + // + Fullscreen_label.AutoSize = true; + Fullscreen_label.BackColor = Color.Transparent; + Fullscreen_label.Font = new Font("Calibri", 8.25F, FontStyle.Regular, GraphicsUnit.Point); + Fullscreen_label.ForeColor = Color.Gray; + Fullscreen_label.Location = new Point(40, 59); + Fullscreen_label.Margin = new Padding(4, 0, 4, 0); + Fullscreen_label.Name = "Fullscreen_label"; + Fullscreen_label.Size = new Size(56, 13); + Fullscreen_label.TabIndex = 14; + Fullscreen_label.Text = "Fullscreen"; + Fullscreen_label.Click += Fullscreen_pb_Click; + // + // Fullscreen_pb + // + Fullscreen_pb.BackgroundImageLayout = ImageLayout.Center; + Fullscreen_pb.Location = new Point(23, 59); + Fullscreen_pb.Margin = new Padding(4, 3, 4, 3); + Fullscreen_pb.Name = "Fullscreen_pb"; + Fullscreen_pb.Size = new Size(12, 12); + Fullscreen_pb.TabIndex = 13; + Fullscreen_pb.TabStop = false; + Fullscreen_pb.Click += Fullscreen_pb_Click; + // + // OnTop_label + // + OnTop_label.AutoSize = true; + OnTop_label.BackColor = Color.Transparent; + OnTop_label.Font = new Font("Calibri", 8.25F, FontStyle.Regular, GraphicsUnit.Point); + OnTop_label.ForeColor = Color.Gray; + OnTop_label.Location = new Point(40, 113); + OnTop_label.Margin = new Padding(4, 0, 4, 0); + OnTop_label.Name = "OnTop_label"; + OnTop_label.Size = new Size(72, 13); + OnTop_label.TabIndex = 16; + OnTop_label.Text = "Always on top"; + OnTop_label.Click += OnTop_pb_Click; + // + // OnTop_pb + // + OnTop_pb.BackgroundImageLayout = ImageLayout.Center; + OnTop_pb.Image = Client.Resources.Images.Config_Check_Off1; + OnTop_pb.Location = new Point(23, 113); + OnTop_pb.Margin = new Padding(4, 3, 4, 3); + OnTop_pb.Name = "OnTop_pb"; + OnTop_pb.Size = new Size(12, 12); + OnTop_pb.TabIndex = 15; + OnTop_pb.TabStop = false; + OnTop_pb.Click += OnTop_pb_Click; + // + // FPScap_label + // + FPScap_label.AutoSize = true; + FPScap_label.BackColor = Color.Transparent; + FPScap_label.Font = new Font("Calibri", 8.25F, FontStyle.Regular, GraphicsUnit.Point); + FPScap_label.ForeColor = Color.Gray; + FPScap_label.Location = new Point(40, 84); + FPScap_label.Margin = new Padding(4, 0, 4, 0); + FPScap_label.Name = "FPScap_label"; + FPScap_label.Size = new Size(42, 13); + FPScap_label.TabIndex = 18; + FPScap_label.Text = "FPS cap"; + FPScap_label.Click += FPScap_pb_Click; + // + // FPScap_pb + // + FPScap_pb.BackgroundImageLayout = ImageLayout.Center; + FPScap_pb.Image = Client.Resources.Images.Config_Check_Off1; + FPScap_pb.Location = new Point(23, 85); + FPScap_pb.Margin = new Padding(4, 3, 4, 3); + FPScap_pb.Name = "FPScap_pb"; + FPScap_pb.Size = new Size(12, 12); + FPScap_pb.TabIndex = 17; + FPScap_pb.TabStop = false; + FPScap_pb.Click += FPScap_pb_Click; + // + // CleanFiles_pb + // + CleanFiles_pb.BackgroundImageLayout = ImageLayout.Center; + CleanFiles_pb.Image = Client.Resources.Images.CheckF_Base2; + CleanFiles_pb.Location = new Point(23, 275); + CleanFiles_pb.Margin = new Padding(4, 3, 4, 3); + CleanFiles_pb.Name = "CleanFiles_pb"; + CleanFiles_pb.Size = new Size(67, 23); + CleanFiles_pb.TabIndex = 19; + CleanFiles_pb.TabStop = false; + CleanFiles_pb.Click += CleanFiles_pb_Click; + CleanFiles_pb.MouseDown += CleanFiles_pb_MouseDown; + CleanFiles_pb.MouseEnter += CleanFiles_pb_MouseEnter; + CleanFiles_pb.MouseLeave += CleanFiles_pb_MouseLeave; + CleanFiles_pb.MouseUp += CleanFiles_pb_MouseUp; + // + // pictureBox6 + // + pictureBox6.BackColor = Color.Transparent; + pictureBox6.Image = Client.Resources.Images.textboxes; + pictureBox6.Location = new Point(23, 198); + pictureBox6.Margin = new Padding(4, 3, 4, 3); + pictureBox6.Name = "pictureBox6"; + pictureBox6.Size = new Size(137, 57); + pictureBox6.TabIndex = 20; + pictureBox6.TabStop = false; + // + // label9 + // + label9.AutoSize = true; + label9.BackColor = Color.Transparent; + label9.Font = new Font("Calibri", 9F, FontStyle.Regular, GraphicsUnit.Point); + label9.ForeColor = Color.White; + label9.Location = new Point(23, 42); + label9.Margin = new Padding(4, 0, 4, 0); + label9.Name = "label9"; + label9.Size = new Size(55, 14); + label9.TabIndex = 21; + label9.Text = "Graphics"; + // + // label10 + // + label10.AutoSize = true; + label10.BackColor = Color.Transparent; + label10.Font = new Font("Calibri", 9F, FontStyle.Regular, GraphicsUnit.Point); + label10.ForeColor = Color.White; + label10.Location = new Point(157, 42); + label10.Margin = new Padding(4, 0, 4, 0); + label10.Name = "label10"; + label10.Size = new Size(66, 14); + label10.TabIndex = 22; + label10.Text = "Resolution"; + // + // label11 + // + label11.AutoSize = true; + label11.BackColor = Color.Transparent; + label11.Font = new Font("Calibri", 9F, FontStyle.Regular, GraphicsUnit.Point); + label11.ForeColor = Color.White; + label11.Location = new Point(20, 145); + label11.Margin = new Padding(4, 0, 4, 0); + label11.Name = "label11"; + label11.Size = new Size(39, 14); + label11.TabIndex = 23; + label11.Text = "Game"; + // + // label12 + // + label12.AutoSize = true; + label12.BackColor = Color.Transparent; + label12.Font = new Font("Calibri", 8.25F, FontStyle.Regular, GraphicsUnit.Point); + label12.ForeColor = Color.Gray; + label12.Location = new Point(20, 182); + label12.Margin = new Padding(4, 0, 4, 0); + label12.Name = "label12"; + label12.Size = new Size(80, 13); + label12.TabIndex = 24; + label12.Text = "Account details"; + // + // label5 + // + label5.AutoSize = true; + label5.BackColor = Color.Transparent; + label5.Font = new Font("Calibri", 8.25F, FontStyle.Regular, GraphicsUnit.Point); + label5.ForeColor = Color.Gray; + label5.Location = new Point(178, 80); + label5.Margin = new Padding(4, 0, 4, 0); + label5.Name = "label5"; + label5.Size = new Size(54, 13); + label5.TabIndex = 26; + label5.Text = "1280x800"; + // + // Res4_pb + // + Res4_pb.Image = Client.Resources.Images.Radio_Unactive; + Res4_pb.Location = new Point(157, 80); + Res4_pb.Margin = new Padding(4, 3, 4, 3); + Res4_pb.Name = "Res4_pb"; + Res4_pb.Size = new Size(12, 12); + Res4_pb.TabIndex = 25; + Res4_pb.TabStop = false; + Res4_pb.Click += Res4_pb_Click; + // + // label1 + // + label1.AutoSize = true; + label1.BackColor = Color.Transparent; + label1.Font = new Font("Calibri", 8.25F, FontStyle.Regular, GraphicsUnit.Point); + label1.ForeColor = Color.Gray; + label1.Location = new Point(178, 121); + label1.Margin = new Padding(4, 0, 4, 0); + label1.Name = "label1"; + label1.Size = new Size(60, 13); + label1.TabIndex = 27; + label1.Text = "1920x1080"; + // + // Res5_pb + // + Res5_pb.Image = Client.Resources.Images.Radio_Unactive; + Res5_pb.Location = new Point(157, 121); + Res5_pb.Margin = new Padding(4, 3, 4, 3); + Res5_pb.Name = "Res5_pb"; + Res5_pb.Size = new Size(12, 12); + Res5_pb.TabIndex = 28; + Res5_pb.TabStop = false; + Res5_pb.Click += Res5_pb_Click; + // + // Config + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + BackColor = Color.Black; + BackgroundImage = Client.Resources.Images.Config_Base1; + BackgroundImageLayout = ImageLayout.Center; + ClientSize = new Size(257, 315); + Controls.Add(Res5_pb); + Controls.Add(label1); + Controls.Add(label5); + Controls.Add(Res4_pb); + Controls.Add(label12); + Controls.Add(label11); + Controls.Add(label10); + Controls.Add(label9); + Controls.Add(CleanFiles_pb); + Controls.Add(FPScap_label); + Controls.Add(FPScap_pb); + Controls.Add(OnTop_label); + Controls.Add(OnTop_pb); + Controls.Add(Fullscreen_label); + Controls.Add(Fullscreen_pb); + Controls.Add(AutoStart_label); + Controls.Add(AutoStart_pb); + Controls.Add(label4); + Controls.Add(Password_l); + Controls.Add(ID_l); + Controls.Add(label3); + Controls.Add(Res3_pb); + Controls.Add(label2); + Controls.Add(Res2_pb); + Controls.Add(AccountPass_txt); + Controls.Add(AccountLogin_txt); + Controls.Add(pictureBox6); + DoubleBuffered = true; + FormBorderStyle = FormBorderStyle.None; + Margin = new Padding(4, 3, 4, 3); + Name = "Config"; + Opacity = 0.94D; + ShowIcon = false; + ShowInTaskbar = false; + SizeGripStyle = SizeGripStyle.Hide; + StartPosition = FormStartPosition.CenterScreen; + Text = "Config"; + TransparencyKey = Color.Black; + Load += Config_Load; + VisibleChanged += Config_VisibleChanged; + Click += Config_Click; + ((System.ComponentModel.ISupportInitialize)Res3_pb).EndInit(); + ((System.ComponentModel.ISupportInitialize)Res2_pb).EndInit(); + ((System.ComponentModel.ISupportInitialize)AutoStart_pb).EndInit(); + ((System.ComponentModel.ISupportInitialize)Fullscreen_pb).EndInit(); + ((System.ComponentModel.ISupportInitialize)OnTop_pb).EndInit(); + ((System.ComponentModel.ISupportInitialize)FPScap_pb).EndInit(); + ((System.ComponentModel.ISupportInitialize)CleanFiles_pb).EndInit(); + ((System.ComponentModel.ISupportInitialize)pictureBox6).EndInit(); + ((System.ComponentModel.ISupportInitialize)Res4_pb).EndInit(); + ((System.ComponentModel.ISupportInitialize)Res5_pb).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private TextBox AccountLogin_txt; + private TextBox AccountPass_txt; + private Label label2; + private PictureBox Res2_pb; + private Label label3; + private PictureBox Res3_pb; + private Label ID_l; + private Label Password_l; + private Label label4; + private PictureBox AutoStart_pb; + private Label AutoStart_label; + private Label Fullscreen_label; + private PictureBox Fullscreen_pb; + private Label OnTop_label; + private PictureBox OnTop_pb; + private Label FPScap_label; + private PictureBox FPScap_pb; + private PictureBox CleanFiles_pb; + private PictureBox pictureBox6; + private Label label9; + private Label label10; + private Label label11; + private Label label12; + private Label label5; + private PictureBox Res4_pb; + private Label label1; + private PictureBox Res5_pb; + } +} \ No newline at end of file diff --git a/Client/Forms/Config.resx b/Client/Forms/Config.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/Client/Forms/Config.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Client/KeyBindSettings.cs b/Client/KeyBindSettings.cs new file mode 100644 index 0000000..fe0e6c7 --- /dev/null +++ b/Client/KeyBindSettings.cs @@ -0,0 +1,346 @@ +namespace Client +{ + + public enum KeybindOptions : int + { + Bar1Skill1 = 0, + Bar1Skill2, + Bar1Skill3, + Bar1Skill4, + Bar1Skill5, + Bar1Skill6, + Bar1Skill7, + Bar1Skill8, + Bar2Skill1, + Bar2Skill2, + Bar2Skill3, + Bar2Skill4, + Bar2Skill5, + Bar2Skill6, + Bar2Skill7, + Bar2Skill8, + Inventory, + Inventory2, + Equipment, + Equipment2, + Skills, + Skills2, + Skillbar, + Relationship, + Friends, + Guilds, + GameShop, + Quests, + Closeall, + Options, + Options2, + Group, + Belt, + BeltFlip, + Pickup, + Belt1, + Belt1Alt, + Belt2, + Belt2Alt, + Belt3, + Belt3Alt, + Belt4, + Belt4Alt, + Belt5, + Belt5Alt, + Belt6, + Belt6Alt, + Exit, + Logout, + Minimap, + Bigmap, + Trade, + ChangeAttackmode, + AttackmodePeace, + AttackmodeGroup, + AttackmodeGuild, + AttackmodeEnemyguild, + AttackmodeRedbrown, + AttackmodeAll, + ChangePetmode, + PetmodeBoth, + PetmodeMoveonly, + PetmodeAttackonly, + PetmodeNone, + Help, + Keybind, + Autorun, + Cameramode, + Screenshot, + DropView, + TargetDead, + Ranking, + AddGroupMember, + TargetSpellLockOn, + PetmodeFocusMasterTarget + } + + public class KeyBind + { + public KeybindOptions function = KeybindOptions.Bar1Skill1; + public string Group = "", Description = ""; + public Keys Key = 0; + + /// + /// Require Options : 0 = Require unpressed key, 1 = Require pressed key, 2 = Don't care + /// + public byte RequireCtrl = 0; + public byte RequireShift = 0; + public byte RequireAlt = 0; + public byte RequireTilde = 0; + } + + + public class KeyBindSettings + { + private static InIReader Reader = new InIReader(@".\KeyBinds.ini"); + public List Keylist = new List(); + public List DefaultKeylist = new List(); + + public KeyBindSettings() + { + New(Keylist); + New(DefaultKeylist); + + if (!File.Exists(@".\KeyBinds.ini")) + { + Save(DefaultKeylist); + return; + } + + Load(); + } + + public void Load() + { + foreach (KeyBind Inputkey in Keylist) + { + Inputkey.RequireAlt = Reader.ReadByte(Inputkey.function.ToString(), "RequireAlt", Inputkey.RequireAlt); + Inputkey.RequireShift = Reader.ReadByte(Inputkey.function.ToString(), "RequireShift", Inputkey.RequireShift); + Inputkey.RequireTilde = Reader.ReadByte(Inputkey.function.ToString(), "RequireTilde", Inputkey.RequireTilde); + Inputkey.RequireCtrl = Reader.ReadByte(Inputkey.function.ToString(), "RequireCtrl", Inputkey.RequireCtrl); + string Input = Reader.ReadString(Inputkey.function.ToString(), "RequireKey", Inputkey.Key.ToString()); + Enum.TryParse(Input, out Inputkey.Key); + + } + } + + public void Save(List keyList) + { + Reader.Write("Guide", "01", "RequireAlt,RequireShift,RequireTilde,RequireCtrl"); + Reader.Write("Guide", "02", "have 3 options: 0/1/2"); + Reader.Write("Guide", "03", "0 < you cannot have this key pressed to use the function"); + Reader.Write("Guide", "04", "1 < you have to have this key pressed to use this function"); + Reader.Write("Guide", "05", "2 < it doesnt matter if you press this key to use this function"); + Reader.Write("Guide", "06", "by default just use 2, unless you have 2 functions on the same key"); + Reader.Write("Guide", "07", "example: change attack mode (ctrl+h) and help (h)"); + Reader.Write("Guide", "08", "if you set either of those to requireshift 2, then they wil both work at the same time or not work"); + Reader.Write("Guide", "09", ""); + Reader.Write("Guide", "10", "To get the value for RequireKey look at:"); + Reader.Write("Guide", "11", "https://msdn.microsoft.com/en-us/library/system.windows.forms.keys(v=vs.110).aspx"); + + foreach (KeyBind Inputkey in keyList) + { + Reader.Write(Inputkey.function.ToString(), "RequireAlt", Inputkey.RequireAlt); + Reader.Write(Inputkey.function.ToString(), "RequireShift", Inputkey.RequireShift); + Reader.Write(Inputkey.function.ToString(), "RequireTilde", Inputkey.RequireTilde); + Reader.Write(Inputkey.function.ToString(), "RequireCtrl", Inputkey.RequireCtrl); + Reader.Write(Inputkey.function.ToString(), "RequireKey", Inputkey.Key.ToString()); + } + } + + public void New(List list) + { + KeyBind InputKey; + InputKey = new KeyBind { Group = "Dialogs", Description = "Inventory Open/Close", function = KeybindOptions.Inventory, RequireAlt = 2, RequireShift = 2, RequireTilde = 2, RequireCtrl = 2, Key = Keys.F9 }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Dialogs", Description = "Inventory Open/Close Alt", function = KeybindOptions.Inventory2, RequireAlt = 2, RequireShift = 2, RequireTilde = 2, RequireCtrl = 0, Key = Keys.I }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Dialogs", Description = "Equipment Open/Close", function = KeybindOptions.Equipment, RequireAlt = 2, RequireShift = 2, RequireTilde = 2, RequireCtrl = 2, Key = Keys.F10 }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Dialogs", Description = "Equipment Open/Close Alt", function = KeybindOptions.Equipment2, RequireAlt = 2, RequireShift = 2, RequireTilde = 2, RequireCtrl = 0, Key = Keys.C }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Dialogs", Description = "Skills Open/Close", function = KeybindOptions.Skills, RequireAlt = 2, RequireShift = 2, RequireTilde = 2, RequireCtrl = 2, Key = Keys.F11 }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Dialogs", Description = "Skills Open/Close Alt", function = KeybindOptions.Skills2, RequireAlt = 2, RequireShift = 2, RequireTilde = 2, RequireCtrl = 0, Key = Keys.S }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Dialogs", Description = "Skillbar Open/Close", function = KeybindOptions.Skillbar, RequireAlt = 2, RequireShift = 2, RequireTilde = 2, RequireCtrl = 2, Key = Keys.R }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Dialogs", Description = "Relationship Open/Close", function = KeybindOptions.Relationship, RequireAlt = 2, RequireShift = 2, RequireTilde = 2, RequireCtrl = 2, Key = Keys.L }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Dialogs", Description = "Friends Open/Close", function = KeybindOptions.Friends, RequireAlt = 2, RequireShift = 2, RequireTilde = 2, RequireCtrl = 2, Key = Keys.F }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Dialogs", Description = "Guild Open/Close", function = KeybindOptions.Guilds, RequireAlt = 2, RequireShift = 2, RequireTilde = 2, RequireCtrl = 0, Key = Keys.G }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Dialogs", Description = "Gameshop Open/Close", function = KeybindOptions.GameShop, RequireAlt = 2, RequireShift = 2, RequireTilde = 2, RequireCtrl = 2, Key = Keys.Y }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Dialogs", Description = "Quest Diary Open/Close", function = KeybindOptions.Quests, RequireAlt = 0, RequireShift = 2, RequireTilde = 2, RequireCtrl = 2, Key = Keys.Q }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Dialogs", Description = "Options Open/Close", function = KeybindOptions.Options, RequireAlt = 2, RequireShift = 2, RequireTilde = 2, RequireCtrl = 2, Key = Keys.F12 }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Dialogs", Description = "Options Open/Close Alt", function = KeybindOptions.Options2, RequireAlt = 2, RequireShift = 2, RequireTilde = 2, RequireCtrl = 2, Key = Keys.O }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Dialogs", Description = "Group Open/Close", function = KeybindOptions.Group, RequireAlt = 2, RequireShift = 2, RequireTilde = 2, RequireCtrl = 2, Key = Keys.P }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Dialogs", Description = "Belt Open/Close", function = KeybindOptions.Belt, RequireAlt = 2, RequireShift = 2, RequireTilde = 2, RequireCtrl = 0, Key = Keys.Z }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Dialogs", Description = "Minimap Open/Close", function = KeybindOptions.Minimap, RequireAlt = 2, RequireShift = 2, RequireTilde = 2, RequireCtrl = 2, Key = Keys.V }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Dialogs", Description = "Bigmap Open/Close", function = KeybindOptions.Bigmap, RequireAlt = 2, RequireShift = 2, RequireTilde = 2, RequireCtrl = 2, Key = Keys.B }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Dialogs", Description = "Ranking Open/Close", function = KeybindOptions.Ranking, RequireAlt = 2, RequireShift = 2, RequireTilde = 2, RequireCtrl = 2, Key = Keys.K }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Dialogs", Description = "Help Open/Close", function = KeybindOptions.Help, RequireAlt = 2, RequireShift = 0, RequireTilde = 2, RequireCtrl = 0, Key = Keys.H }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Dialogs", Description = "Keybinds Open/Close", function = KeybindOptions.Keybind, RequireAlt = 2, RequireShift = 2, RequireTilde = 2, RequireCtrl = 2, Key = Keys.U }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Dialogs", Description = "Close All Windows", function = KeybindOptions.Closeall, RequireAlt = 2, RequireShift = 2, RequireTilde = 2, RequireCtrl = 2, Key = Keys.Escape }; + list.Add(InputKey); + + InputKey = new KeyBind { Group = "Skillbar", Description = "Skillbar Slot 1", function = KeybindOptions.Bar1Skill1, RequireAlt = 2, RequireShift = 0, RequireTilde = 0, RequireCtrl = 0, Key = Keys.F1 }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Skillbar", Description = "Skillbar Slot 2", function = KeybindOptions.Bar1Skill2, RequireAlt = 2, RequireShift = 0, RequireTilde = 0, RequireCtrl = 0, Key = Keys.F2 }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Skillbar", Description = "Skillbar Slot 3", function = KeybindOptions.Bar1Skill3, RequireAlt = 2, RequireShift = 0, RequireTilde = 0, RequireCtrl = 0, Key = Keys.F3 }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Skillbar", Description = "Skillbar Slot 4", function = KeybindOptions.Bar1Skill4, RequireAlt = 2, RequireShift = 0, RequireTilde = 0, RequireCtrl = 0, Key = Keys.F4 }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Skillbar", Description = "Skillbar Slot 5", function = KeybindOptions.Bar1Skill5, RequireAlt = 2, RequireShift = 0, RequireTilde = 0, RequireCtrl = 0, Key = Keys.F5 }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Skillbar", Description = "Skillbar Slot 6", function = KeybindOptions.Bar1Skill6, RequireAlt = 2, RequireShift = 0, RequireTilde = 0, RequireCtrl = 0, Key = Keys.F6 }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Skillbar", Description = "Skillbar Slot 7", function = KeybindOptions.Bar1Skill7, RequireAlt = 2, RequireShift = 0, RequireTilde = 0, RequireCtrl = 0, Key = Keys.F7 }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Skillbar", Description = "Skillbar Slot 8", function = KeybindOptions.Bar1Skill8, RequireAlt = 2, RequireShift = 0, RequireTilde = 0, RequireCtrl = 0, Key = Keys.F8 }; + list.Add(InputKey); + + InputKey = new KeyBind { Group = "Skillbar", Description = "Skillbar Alt Slot 1", function = KeybindOptions.Bar2Skill1, RequireAlt = 2, RequireShift = 0, RequireTilde = 0, RequireCtrl = 1, Key = Keys.F1 }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Skillbar", Description = "Skillbar Alt Slot 2", function = KeybindOptions.Bar2Skill2, RequireAlt = 2, RequireShift = 0, RequireTilde = 0, RequireCtrl = 1, Key = Keys.F2 }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Skillbar", Description = "Skillbar Alt Slot 3", function = KeybindOptions.Bar2Skill3, RequireAlt = 2, RequireShift = 0, RequireTilde = 0, RequireCtrl = 1, Key = Keys.F3 }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Skillbar", Description = "Skillbar Alt Slot 4", function = KeybindOptions.Bar2Skill4, RequireAlt = 2, RequireShift = 0, RequireTilde = 0, RequireCtrl = 1, Key = Keys.F4 }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Skillbar", Description = "Skillbar Alt Slot 5", function = KeybindOptions.Bar2Skill5, RequireAlt = 2, RequireShift = 0, RequireTilde = 0, RequireCtrl = 1, Key = Keys.F5 }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Skillbar", Description = "Skillbar Alt Slot 6", function = KeybindOptions.Bar2Skill6, RequireAlt = 2, RequireShift = 0, RequireTilde = 0, RequireCtrl = 1, Key = Keys.F6 }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Skillbar", Description = "Skillbar Alt Slot 7", function = KeybindOptions.Bar2Skill7, RequireAlt = 2, RequireShift = 0, RequireTilde = 0, RequireCtrl = 1, Key = Keys.F7 }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Skillbar", Description = "Skillbar Alt Slot 8", function = KeybindOptions.Bar2Skill8, RequireAlt = 2, RequireShift = 0, RequireTilde = 0, RequireCtrl = 1, Key = Keys.F8 }; + list.Add(InputKey); + + InputKey = new KeyBind { Group = "Belt", Description = "Rotate Belt", function = KeybindOptions.BeltFlip, RequireAlt = 2, RequireShift = 2, RequireTilde = 2, RequireCtrl = 1, Key = Keys.Z }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Belt", Description = "Belt Slot 1", function = KeybindOptions.Belt1, RequireAlt = 2, RequireShift = 2, RequireTilde = 2, RequireCtrl = 2, Key = Keys.D1 }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Belt", Description = "Belt Slot 1 Alt", function = KeybindOptions.Belt1Alt, RequireAlt = 2, RequireShift = 2, RequireTilde = 2, RequireCtrl = 2, Key = Keys.NumPad1 }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Belt", Description = "Belt Slot 2", function = KeybindOptions.Belt2, RequireAlt = 2, RequireShift = 2, RequireTilde = 2, RequireCtrl = 2, Key = Keys.D2 }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Belt", Description = "Belt Slot 2 Alt", function = KeybindOptions.Belt2Alt, RequireAlt = 2, RequireShift = 2, RequireTilde = 2, RequireCtrl = 2, Key = Keys.NumPad2 }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Belt", Description = "Belt Slot 3", function = KeybindOptions.Belt3, RequireAlt = 2, RequireShift = 2, RequireTilde = 2, RequireCtrl = 2, Key = Keys.D3 }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Belt", Description = "Belt Slot 3 Alt", function = KeybindOptions.Belt3Alt, RequireAlt = 2, RequireShift = 2, RequireTilde = 2, RequireCtrl = 2, Key = Keys.NumPad3 }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Belt", Description = "Belt Slot 4", function = KeybindOptions.Belt4, RequireAlt = 2, RequireShift = 2, RequireTilde = 2, RequireCtrl = 2, Key = Keys.D4 }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Belt", Description = "Belt Slot 4 Alt", function = KeybindOptions.Belt4Alt, RequireAlt = 2, RequireShift = 2, RequireTilde = 2, RequireCtrl = 2, Key = Keys.NumPad4 }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Belt", Description = "Belt Slot 5", function = KeybindOptions.Belt5, RequireAlt = 2, RequireShift = 2, RequireTilde = 2, RequireCtrl = 2, Key = Keys.D5 }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Belt", Description = "Belt Slot 5 Alt", function = KeybindOptions.Belt5Alt, RequireAlt = 2, RequireShift = 2, RequireTilde = 2, RequireCtrl = 2, Key = Keys.NumPad5 }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Belt", Description = "Belt Slot 6", function = KeybindOptions.Belt6, RequireAlt = 2, RequireShift = 2, RequireTilde = 2, RequireCtrl = 2, Key = Keys.D6 }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Belt", Description = "Belt Slot 6 Alt", function = KeybindOptions.Belt6Alt, RequireAlt = 2, RequireShift = 2, RequireTilde = 2, RequireCtrl = 2, Key = Keys.NumPad6 }; + list.Add(InputKey); + + InputKey = new KeyBind { Group = "General", Description = "Logout", function = KeybindOptions.Logout, RequireAlt = 1, RequireShift = 2, RequireTilde = 2, RequireCtrl = 2, Key = Keys.X }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "General", Description = "Exit", function = KeybindOptions.Exit, RequireAlt = 1, RequireShift = 2, RequireTilde = 2, RequireCtrl = 2, Key = Keys.Q }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "General", Description = "Pickup Floor Item", function = KeybindOptions.Pickup, RequireAlt = 2, RequireShift = 2, RequireTilde = 2, RequireCtrl = 2, Key = Keys.Tab }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "General", Description = "Request Trade", function = KeybindOptions.Trade, RequireAlt = 2, RequireShift = 2, RequireTilde = 2, RequireCtrl = 2, Key = Keys.T }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "General", Description = "Recruit Group Member", function = KeybindOptions.AddGroupMember, RequireAlt = 2, RequireShift = 2, RequireTilde = 2, RequireCtrl = 1, Key = Keys.G }; + list.Add(InputKey); + + InputKey = new KeyBind { Group = "Toggle", Description = "Toggle Attack Mode", function = KeybindOptions.ChangeAttackmode, RequireAlt = 2, RequireShift = 0, RequireTilde = 2, RequireCtrl = 1, Key = Keys.H }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Toggle", Description = "Set Attack Mode : Peace", function = KeybindOptions.AttackmodePeace, RequireAlt = 2, RequireShift = 2, RequireTilde = 2, RequireCtrl = 2, Key = Keys.None }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Toggle", Description = "Set Attack Mode : Group", function = KeybindOptions.AttackmodeGroup, RequireAlt = 2, RequireShift = 2, RequireTilde = 2, RequireCtrl = 2, Key = Keys.None }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Toggle", Description = "Set Attack Mode : Guild", function = KeybindOptions.AttackmodeGuild, RequireAlt = 2, RequireShift = 2, RequireTilde = 2, RequireCtrl = 2, Key = Keys.None }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Toggle", Description = "Set Attack Mode : Enemy Guild", function = KeybindOptions.AttackmodeEnemyguild, RequireAlt = 2, RequireShift = 2, RequireTilde = 2, RequireCtrl = 2, Key = Keys.None }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Toggle", Description = "Set Attack Mode : Red/Brown", function = KeybindOptions.AttackmodeRedbrown, RequireAlt = 2, RequireShift = 2, RequireTilde = 2, RequireCtrl = 2, Key = Keys.None }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Toggle", Description = "Set Attack Mode : All", function = KeybindOptions.AttackmodeAll, RequireAlt = 2, RequireShift = 2, RequireTilde = 2, RequireCtrl = 2, Key = Keys.None }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Toggle", Description = "Toggle Pet Mode", function = KeybindOptions.ChangePetmode, RequireAlt = 0, RequireShift = 2, RequireTilde = 2, RequireCtrl = 1, Key = Keys.A }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Toggle", Description = "Set Pet Mode : Both", function = KeybindOptions.PetmodeBoth, RequireAlt = 2, RequireShift = 2, RequireTilde = 2, RequireCtrl = 2, Key = Keys.None }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Toggle", Description = "Set Pet Mode : Move Only", function = KeybindOptions.PetmodeMoveonly, RequireAlt = 2, RequireShift = 2, RequireTilde = 2, RequireCtrl = 2, Key = Keys.None }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Toggle", Description = "Set Pet Mode : Attack Only", function = KeybindOptions.PetmodeAttackonly, RequireAlt = 2, RequireShift = 2, RequireTilde = 2, RequireCtrl = 2, Key = Keys.None }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Toggle", Description = "Set Pet Mode : None", function = KeybindOptions.PetmodeNone, RequireAlt = 2, RequireShift = 2, RequireTilde = 2, RequireCtrl = 2, Key = Keys.None }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Toggle", Description = "Set Pet Mode : Focus Master Target", function = KeybindOptions.PetmodeFocusMasterTarget, RequireAlt = 2, RequireShift = 2, RequireTilde = 2, RequireCtrl = 2, Key = Keys.None }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Toggle", Description = "Toggle Autorun", function = KeybindOptions.Autorun, RequireAlt = 2, RequireShift = 2, RequireTilde = 2, RequireCtrl = 2, Key = Keys.D }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Toggle", Description = "Toggle Camera Mode", function = KeybindOptions.Cameramode, RequireAlt = 2, RequireShift = 2, RequireTilde = 2, RequireCtrl = 2, Key = Keys.Insert }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Toggle", Description = "Take Screenshot", function = KeybindOptions.Screenshot, RequireAlt = 2, RequireShift = 2, RequireTilde = 2, RequireCtrl = 2, Key = Keys.PrintScreen }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Toggle", Description = "Toggle Dropview", function = KeybindOptions.DropView, RequireAlt = 2, RequireShift = 2, RequireTilde = 2, RequireCtrl = 2, Key = Keys.Tab }; + list.Add(InputKey); + InputKey = new KeyBind { Group = "Combat", Description = "Hold to enable target spell lock-on", function = KeybindOptions.TargetSpellLockOn, RequireAlt = 2, RequireShift = 2, RequireTilde = 2, RequireCtrl = 2, Key = Keys.None }; + list.Add(InputKey); + } + + public string GetKey(KeybindOptions Option, bool defaultKey = false) + { + List lst; + + if (defaultKey) lst = CMain.InputKeys.DefaultKeylist; + else lst = CMain.InputKeys.Keylist; + + string output = ""; + for (int i = 0; i < lst.Count; i++) + { + if (lst[i].function == Option) + { + if (lst[i].Key == Keys.None) return output; + if (lst[i].RequireAlt == 1) + output = "Alt"; + if (lst[i].RequireCtrl == 1) + output = output != "" ? output + " + Ctrl" : "Ctrl"; + if (lst[i].RequireShift == 1) + output = output != "" ? output + " + Shift" : "Shift"; + if (lst[i].RequireTilde == 1) + output = output != "" ? output + " + ~" : "~"; + + output = output != "" ? output + " + " + lst[i].Key.ToString() : lst[i].Key.ToString(); + return output; + } + } + return ""; + } + } + + +} diff --git a/Client/MIR1.ICO b/Client/MIR1.ICO new file mode 100644 index 0000000..f32c413 Binary files /dev/null and b/Client/MIR1.ICO differ diff --git a/Client/MirControls/MirAmountBox.cs b/Client/MirControls/MirAmountBox.cs new file mode 100644 index 0000000..0ad7bab --- /dev/null +++ b/Client/MirControls/MirAmountBox.cs @@ -0,0 +1,220 @@ +using Client.MirGraphics; +using Client.MirSounds; + +namespace Client.MirControls +{ + public sealed class MirAmountBox : MirImageControl + { + public MirLabel TitleLabel, TextLabel; + public MirButton OKButton, CancelButton; + public MirTextBox InputTextBox; + public MirControl ItemImage; + private MirGeneratedBox GeneratedBox; + private MLibrary ImageLibrary; + public int ImageIndex; + public uint Amount, MinAmount, MaxAmount; + + public MirAmountBox(string title, int image, MLibrary library, uint max, uint min = 0, uint defaultAmount = 0) + { + ImageIndex = image; + ImageLibrary = library; + MaxAmount = max; + MinAmount = min; + Amount = max; + Modal = true; + Movable = false; + DrawImage = false; + + AutoSize = false; + Size = new Size(240, 120); + GeneratedBox = new MirGeneratedBox(79, Size) + { + Parent = this, + Visible = true + }; + + Location = new Point((Settings.ScreenWidth - Size.Width) / 2, (Settings.ScreenHeight - Size.Height) / 2); + + TitleLabel = new MirLabel + { + AutoSize = true, + Location = new Point(19, 8), + Parent = this, + NotControl = true, + Text = title + }; + + ItemImage = new MirControl + { + Location = new Point(15, 34), + Size = new Size(38, 34), + Parent = this, + }; + ItemImage.AfterDraw += (o, e) => DrawItem(); + + OKButton = new MirButton + { + Index = 115, + Library = Libraries.Prguse, + Location = new Point(23, 76), + Parent = this, + PressedIndex = 116, + }; + OKButton.Click += (o, e) => Dispose(); + + CancelButton = new MirButton + { + Index = 117, + Library = Libraries.Prguse, + Location = new Point(110, 76), + Parent = this, + PressedIndex = 118, + }; + CancelButton.Click += (o, e) => Dispose(); + + InputTextBox = new MirTextBox + { + Parent = this, + Border = true, + BorderColour = Color.Lime, + Location = new Point(58, 43), + Size = new Size(132, 19), + }; + InputTextBox.SetFocus(); + InputTextBox.TextBox.KeyPress += MirInputBox_KeyPress; + InputTextBox.TextBox.TextChanged += TextBox_TextChanged; + InputTextBox.Text = (defaultAmount > 0 && defaultAmount <= MaxAmount) ? defaultAmount.ToString() : MaxAmount.ToString(); + InputTextBox.TextBox.SelectionStart = 0; + InputTextBox.TextBox.SelectionLength = InputTextBox.Text.Length; + + } + + void TextBox_TextChanged(object sender, EventArgs e) + { + if (uint.TryParse(InputTextBox.Text, out Amount) && Amount >= MinAmount) + { + InputTextBox.BorderColour = Color.Lime; + + OKButton.Visible = true; + if (Amount > MaxAmount) + { + Amount = MaxAmount; + InputTextBox.Text = MaxAmount.ToString(); + InputTextBox.TextBox.SelectionStart = InputTextBox.Text.Length; + } + + if (Amount == MaxAmount) + InputTextBox.BorderColour = Color.Orange; + } + else + { + InputTextBox.BorderColour = Color.Red; + OKButton.Visible = false; + } + } + + void MirInputBox_KeyPress(object sender, KeyPressEventArgs e) + { + if (!char.IsControl(e.KeyChar) + && !char.IsDigit(e.KeyChar)) + { + e.Handled = true; + } + + if (e.KeyChar == (char)Keys.Enter) + { + if (OKButton != null && !OKButton.IsDisposed) + OKButton.InvokeMouseClick(EventArgs.Empty); + e.Handled = true; + } + else if (e.KeyChar == (char)Keys.Escape) + { + if (CancelButton != null && !CancelButton.IsDisposed) + CancelButton.InvokeMouseClick(EventArgs.Empty); + e.Handled = true; + } + } + + void DrawItem() + { + int x = ItemImage.DisplayLocation.X, y = ItemImage.DisplayLocation.Y; + + Size s = Libraries.Items.GetTrueSize(ImageIndex); + + x += (ItemImage.Size.Width - s.Width) / 2; + y += (ItemImage.Size.Height - s.Height) / 2; + + ImageLibrary.Draw(ImageIndex, x, y); + } + + public override void Show() + { + if (Parent != null) return; + + Parent = MirScene.ActiveScene; + + Highlight(); + + for (int i = 0; i < Program.Form.Controls.Count; i++) + { + TextBox T = Program.Form.Controls[i] as TextBox; + if (T != null && T.Tag != null && T.Tag != null) + ((MirTextBox)T.Tag).DialogChanged(); + } + + /* + CMain.Shift = false; + CMain.Ctrl = false; + CMain.Alt = false; + + Parent = MirScene.ActiveScene; + Activate(); + Highlight(); + + for (int i = 0; i < Main.This.Controls.Count; i++) + { + TextBox T = (TextBox)Main.This.Controls[i]; + if (T != null && T.Tag != null && T.Tag != null) + ((MirTextBox)T.Tag).DialogChanged(); + }*/ + } + public override void OnKeyDown(KeyEventArgs e) + { + base.OnKeyDown(e); + e.Handled = true; + } + public override void OnKeyUp(KeyEventArgs e) + { + base.OnKeyUp(e); + e.Handled = true; + } + public override void OnKeyPress(KeyPressEventArgs e) + { + base.OnKeyPress(e); + + if (e.KeyChar == (char)Keys.Escape) + CancelButton.InvokeMouseClick(EventArgs.Empty); + else if (e.KeyChar == (char)Keys.Enter) + OKButton.InvokeMouseClick(EventArgs.Empty); + e.Handled = true; + } + + #region Disposable + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + + if (!disposing) return; + + for (int i = 0; i < Program.Form.Controls.Count; i++) + { + TextBox T = (TextBox)Program.Form.Controls[i]; + if (T != null && T.Tag != null && T.Tag != null) + ((MirTextBox)T.Tag).DialogChanged(); + } + } + + #endregion + } +} diff --git a/Client/MirControls/MirAnimatedButton.cs b/Client/MirControls/MirAnimatedButton.cs new file mode 100644 index 0000000..93f76d0 --- /dev/null +++ b/Client/MirControls/MirAnimatedButton.cs @@ -0,0 +1,289 @@ +namespace Client.MirControls +{ + public class MirAnimatedButton : MirButton + { + public static List Animations = new List(); + + #region Animated + + private bool _animated; + public event EventHandler AnimatedChanged; + public bool Animated + { + get { return _animated; } + set + { + if (_animated == value) return; + _animated = value; + _nextOffSet = CMain.Time + _fadeInDelay; + OnAnimatedChanged(EventArgs.Empty); + } + } + protected virtual void OnAnimatedChanged(EventArgs e) + { + Redraw(); + if (AnimatedChanged != null) + AnimatedChanged.Invoke(this, e); + } + + #endregion + + #region Animation Count + + private int _animationCount; + public event EventHandler AnimationCountChanged; + public virtual int AnimationCount + { + get { return _animationCount; } + set + { + if (_animationCount == value) return; + _animationCount = value; + OnAnimationCountChanged(EventArgs.Empty); + } + } + protected virtual void OnAnimationCountChanged(EventArgs e) + { + if (AnimationCountChanged != null) + AnimationCountChanged.Invoke(this, e); + } + + #endregion + + #region Animation Delay + + private long _animationDelay; + public event EventHandler AnimationDelayChanged; + public long AnimationDelay + { + get { return _animationDelay; } + set + { + if (_animationDelay == value) return; + _animationDelay = value; + OnAnimationDelayChanged(); + } + } + protected virtual void OnAnimationDelayChanged() + { + if (AnimationDelayChanged != null) + AnimationDelayChanged.Invoke(this, EventArgs.Empty); + } + + #endregion + + #region FadeIn + + private long _nextFadeTime; + private bool _fadeIn; + public event EventHandler FadeInChanged; + public bool FadeIn + { + get { return _fadeIn; } + set + { + if (_fadeIn == value) return; + _nextFadeTime = CMain.Time + _fadeInDelay; + _fadeIn = value; + OnFadeInChanged(EventArgs.Empty); + } + } + protected virtual void OnFadeInChanged(EventArgs e) + { + if (FadeInChanged != null) + FadeInChanged.Invoke(this, e); + } + + #endregion + + #region FadeIn Rate + + private float _fadeInRate; + public event EventHandler FadeInRateChanged; + public virtual float FadeInRate + { + get { return _fadeInRate; } + set + { + if (_fadeInRate == value) return; + _fadeInRate = value; + OnFadeInRateChanged(EventArgs.Empty); + } + } + protected virtual void OnFadeInRateChanged(EventArgs e) + { + if (FadeInRateChanged != null) + FadeInRateChanged.Invoke(this, e); + } + + #endregion + + #region FadeIn Delay + + private long _fadeInDelay; + public event EventHandler FadeInDelayChanged; + public long FadeInDelay + { + get { return _fadeInDelay; } + set + { + if (_fadeInDelay == value) return; + _fadeInDelay = value; + OnFadeInDelayChanged(); + } + } + protected virtual void OnFadeInDelayChanged() + { + if (FadeInDelayChanged != null) + FadeInDelayChanged.Invoke(this, EventArgs.Empty); + } + + #endregion + + #region Events + + public event EventHandler AfterAnimation; + + #endregion + + public override int Index + { + get + { + if (!Enabled) + return base.Index; + + if (PressedIndex >= 0 && ActiveControl == this && MouseControl == this) + return PressedIndex; + + if (HoverIndex >= 0 && MouseControl == this) + return HoverIndex; + + return base.Index + OffSet; + } + set { base.Index = value; } + } + + #region Loop + + private bool _loop; + public event EventHandler LoopChanged; + public bool Loop + { + get { return _loop; } + set + { + if (_loop == value) return; + _loop = value; + OnLoopChanged(EventArgs.Empty); + } + } + protected virtual void OnLoopChanged(EventArgs e) + { + if (LoopChanged != null) + LoopChanged.Invoke(this, e); + } + + #endregion + + #region OffSet + + private int _offSet; + public event EventHandler OffSetChanged; + public virtual int OffSet + { + protected get { return _offSet; } + set + { + if (_offSet == value) return; + _offSet = value; + OnOffSetChanged(EventArgs.Empty); + } + } + protected virtual void OnOffSetChanged(EventArgs e) + { + OnIndexChanged(); + if (OffSetChanged != null) + OffSetChanged.Invoke(this, e); + } + private long _nextOffSet; + + #endregion + + public MirAnimatedButton() + { + _loop = true; + _nextFadeTime = CMain.Time; + _nextOffSet = CMain.Time; + Animations.Add(this); + } + + public void UpdateOffSet() + { + if (_fadeIn && CMain.Time > _nextFadeTime) + { + if ((Opacity += _fadeInRate) > 1F) + { + Opacity = 1F; + _fadeIn = false; + } + + _nextFadeTime = CMain.Time + _fadeInDelay; + } + + if (!Visible || !_animated || _animationDelay == 0 || _animationCount == 0) return; + + if (CMain.Time < _nextOffSet) return; + + Redraw(); + + _nextOffSet = CMain.Time + _animationDelay; + + + if (++OffSet < _animationCount) return; + + EventHandler temp = AfterAnimation; + AfterAnimation = null; + + if (!Loop) + Animated = false; + else + OffSet = 0; + + if (temp != null) + temp.Invoke(this, EventArgs.Empty); + } + + #region Disposable + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + + if (!disposing) return; + + AnimatedChanged = null; + _animated = false; + + AnimationCountChanged = null; + _animationCount = 0; + + AnimationDelayChanged = null; + _animationDelay = 0; + + AfterAnimation = null; + + LoopChanged = null; + _loop = false; + + OffSetChanged = null; + _offSet = 0; + + _nextOffSet = 0; + + Animations.Remove(this); + } + + #endregion + } +} diff --git a/Client/MirControls/MirAnimatedControl.cs b/Client/MirControls/MirAnimatedControl.cs new file mode 100644 index 0000000..645a210 --- /dev/null +++ b/Client/MirControls/MirAnimatedControl.cs @@ -0,0 +1,277 @@ +namespace Client.MirControls +{ + public class MirAnimatedControl : MirImageControl + { + public static List Animations = new List(); + + #region Animated + + private bool _animated; + public event EventHandler AnimatedChanged; + public bool Animated + { + get { return _animated; } + set + { + if (_animated == value) return; + _animated = value; + _nextOffSet = CMain.Time + _fadeInDelay; + OnAnimatedChanged(EventArgs.Empty); + } + } + protected virtual void OnAnimatedChanged(EventArgs e) + { + Redraw(); + if (AnimatedChanged != null) + AnimatedChanged.Invoke(this, e); + } + + #endregion + + #region Animation Count + + private int _animationCount; + public event EventHandler AnimationCountChanged; + public virtual int AnimationCount + { + get { return _animationCount; } + set + { + if (_animationCount == value) return; + _animationCount = value; + OnAnimationCountChanged(EventArgs.Empty); + } + } + protected virtual void OnAnimationCountChanged(EventArgs e) + { + if (AnimationCountChanged != null) + AnimationCountChanged.Invoke(this, e); + } + + #endregion + + #region Animation Delay + + private long _animationDelay; + public event EventHandler AnimationDelayChanged; + public long AnimationDelay + { + get { return _animationDelay; } + set + { + if (_animationDelay == value) return; + _animationDelay = value; + OnAnimationDelayChanged(); + } + } + protected virtual void OnAnimationDelayChanged() + { + if (AnimationDelayChanged != null) + AnimationDelayChanged.Invoke(this, EventArgs.Empty); + } + + #endregion + + #region FadeIn + + private long _nextFadeTime; + private bool _fadeIn; + public event EventHandler FadeInChanged; + public bool FadeIn + { + get { return _fadeIn; } + set + { + if (_fadeIn == value) return; + _nextFadeTime = CMain.Time + _fadeInDelay; + _fadeIn = value; + OnFadeInChanged(EventArgs.Empty); + } + } + protected virtual void OnFadeInChanged(EventArgs e) + { + if (FadeInChanged != null) + FadeInChanged.Invoke(this, e); + } + + #endregion + + #region FadeIn Rate + + private float _fadeInRate; + public event EventHandler FadeInRateChanged; + public virtual float FadeInRate + { + get { return _fadeInRate; } + set + { + if (_fadeInRate == value) return; + _fadeInRate = value; + OnFadeInRateChanged(EventArgs.Empty); + } + } + protected virtual void OnFadeInRateChanged(EventArgs e) + { + if (FadeInRateChanged != null) + FadeInRateChanged.Invoke(this, e); + } + + #endregion + + #region FadeIn Delay + + private long _fadeInDelay; + public event EventHandler FadeInDelayChanged; + public long FadeInDelay + { + get { return _fadeInDelay; } + set + { + if (_fadeInDelay == value) return; + _fadeInDelay = value; + OnFadeInDelayChanged(); + } + } + protected virtual void OnFadeInDelayChanged() + { + if (FadeInDelayChanged != null) + FadeInDelayChanged.Invoke(this, EventArgs.Empty); + } + + #endregion + + #region Events + + public event EventHandler AfterAnimation; + + #endregion + + public override int Index + { + get { return base.Index + OffSet; } + set { base.Index = value; } + } + + #region Loop + + private bool _loop; + public event EventHandler LoopChanged; + public bool Loop + { + get { return _loop; } + set + { + if (_loop == value) return; + _loop = value; + OnLoopChanged(EventArgs.Empty); + } + } + protected virtual void OnLoopChanged(EventArgs e) + { + if (LoopChanged != null) + LoopChanged.Invoke(this, e); + } + + #endregion + + #region OffSet + + private int _offSet; + public event EventHandler OffSetChanged; + public virtual int OffSet + { + protected get { return _offSet; } + set + { + if (_offSet == value) return; + _offSet = value; + OnOffSetChanged(EventArgs.Empty); + } + } + protected virtual void OnOffSetChanged(EventArgs e) + { + OnIndexChanged(); + if (OffSetChanged != null) + OffSetChanged.Invoke(this, e); + } + private long _nextOffSet; + + #endregion + + public MirAnimatedControl() + { + _loop = true; + _nextFadeTime = CMain.Time; + _nextOffSet = CMain.Time; + Animations.Add(this); + } + + public void UpdateOffSet() + { + if (_fadeIn && CMain.Time > _nextFadeTime) + { + if ((Opacity += _fadeInRate) > 1F) + { + Opacity = 1F; + _fadeIn = false; + } + + _nextFadeTime = CMain.Time + _fadeInDelay; + } + + if (!Visible || !_animated || _animationDelay == 0 || _animationCount == 0) return; + + if (CMain.Time < _nextOffSet) return; + + Redraw(); + + _nextOffSet = CMain.Time + _animationDelay; + + + if (++OffSet < _animationCount) return; + + EventHandler temp = AfterAnimation; + //AfterAnimation = null; + + if (!Loop) + Animated = false; + else + OffSet = 0; + + if (temp != null) + temp.Invoke(this, EventArgs.Empty); + } + + #region Disposable + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + + if (!disposing) return; + + AnimatedChanged = null; + _animated = false; + + AnimationCountChanged = null; + _animationCount = 0; + + AnimationDelayChanged = null; + _animationDelay = 0; + + AfterAnimation = null; + + LoopChanged = null; + _loop = false; + + OffSetChanged = null; + _offSet = 0; + + _nextOffSet = 0; + + Animations.Remove(this); + } + + #endregion + } +} \ No newline at end of file diff --git a/Client/MirControls/MirButton.cs b/Client/MirControls/MirButton.cs new file mode 100644 index 0000000..0aa53d6 --- /dev/null +++ b/Client/MirControls/MirButton.cs @@ -0,0 +1,229 @@ +using Client.MirSounds; + +namespace Client.MirControls +{ + public class MirButton : MirImageControl + { + #region Font Colour + public virtual Color FontColour + { + get + { + if (_label != null && !_label.IsDisposed) + return _label.ForeColour; + return Color.Empty; + } + set + { + if (_label != null && !_label.IsDisposed) + _label.ForeColour = value; + } + } + #endregion + + #region Hover Index + private int _hoverIndex; + public int HoverIndex + { + get { return _hoverIndex; } + set + { + if (_hoverIndex == value) + return; + _hoverIndex = value; + OnHoverIndexChanged(); + } + } + public event EventHandler HoverIndexChanged; + private void OnHoverIndexChanged() + { + if (HoverIndexChanged != null) + HoverIndexChanged.Invoke(this, EventArgs.Empty); + } + #endregion + + #region Index + public override int Index + { + get + { + if (!Enabled) + return _disabledIndex >= 0 ? _disabledIndex : base.Index; + + if (_pressedIndex >= 0 && ActiveControl == this && MouseControl == this) + return _pressedIndex; + + if (_hoverIndex >= 0 && MouseControl == this) + return _hoverIndex; + + return base.Index; + } + set { base.Index = value; } + } + #endregion + + #region Label + protected MirLabel _label; + #endregion + + #region CenterText + protected bool _center; + public virtual bool CenterText + { + get + { + return _center; + } + set + { + _center = value; + if (_center) + { + _label.Size = Size; + _label.DrawFormat = TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter; + } + else + _label.AutoSize = true; + } + } + #endregion + + #region Pressed Index + private int _pressedIndex; + public int PressedIndex + { + set + { + if (_pressedIndex == value) + return; + _pressedIndex = value; + OnPressedIndexChanged(); + } + get { return _pressedIndex; } + } + + public event EventHandler PressedIndexChanged; + private void OnPressedIndexChanged() + { + if (PressedIndexChanged != null) + PressedIndexChanged.Invoke(this, EventArgs.Empty); + } + #endregion + + #region Disabled Index + private int _disabledIndex; + public int DisabledIndex + { + set + { + if (_disabledIndex == value) + return; + _disabledIndex = value; + OnDisabledIndexChanged(); + } + get { return _disabledIndex; } + } + + public event EventHandler DisabledIndexChanged; + private void OnDisabledIndexChanged() + { + if (DisabledIndexChanged != null) + DisabledIndexChanged.Invoke(this, EventArgs.Empty); + } + #endregion + + #region Size + protected override void OnSizeChanged() + { + base.OnSizeChanged(); + + if (_label != null && !_label.IsDisposed) + _label.Size = Size; + } + #endregion + + #region Text + public virtual string Text + { + set + { + if (_label == null || _label.IsDisposed) + return; + _label.Text = value; + _label.Visible = !string.IsNullOrEmpty(value); + } + } + #endregion + + public bool OnlyDrawWhenActive; + + public MirButton() + { + HoverIndex = -1; + PressedIndex = -1; + DisabledIndex = -1; + Sound = SoundList.ButtonB; + + _label = new MirLabel + { + NotControl = true, + Parent = this, + //Font = new Font("Constantia", 8, FontStyle.Italic), + //OutLine = true, + //OutLineColour = Color.FromArgb(255, 70, 50, 30), + }; + } + + protected internal override void DrawControl() + { + if (OnlyDrawWhenActive && ActiveControl != this && MouseControl != this) + return; + + base.DrawControl(); + } + + protected override void Highlight() + { + Redraw(); + base.Highlight(); + } + protected override void Activate() + { + Redraw(); + base.Activate(); + } + protected override void Dehighlight() + { + Redraw(); + base.Dehighlight(); + } + protected override void Deactivate() + { + Redraw(); + base.Deactivate(); + } + + + #region Disposable + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + + if (!disposing) return; + + HoverIndexChanged = null; + _hoverIndex = 0; + + if (_label != null && !_label.IsDisposed) + _label.Dispose(); + _label = null; + + PressedIndexChanged = null; + _pressedIndex = 0; + + DisabledIndexChanged = null; + _disabledIndex = 0; + } + #endregion + } +} diff --git a/Client/MirControls/MirCheckBox.cs b/Client/MirControls/MirCheckBox.cs new file mode 100644 index 0000000..56b8d7b --- /dev/null +++ b/Client/MirControls/MirCheckBox.cs @@ -0,0 +1,102 @@ +using Client.MirSounds; + +namespace Client.MirControls +{ + public class MirCheckBox : MirButton + { + + #region TickedIndex + private int _tickedIndex; + public int TickedIndex + { + get { return _tickedIndex; } + set { _tickedIndex = value; } + } + #endregion + + #region UnTickedIndex + private int _untickedIndex; + public int UnTickedIndex + { + get { return _untickedIndex; } + set { _untickedIndex = value; } + } + #endregion + + #region Checked + private bool _checked; + public bool Checked + { + get { return _checked; } + set { _checked = value; Index = value ? TickedIndex : UnTickedIndex; Redraw(); } + } + #endregion + + #region Label + private new MirLabel _label; + #endregion + + #region CenterText + private new bool _center; + public bool CenterLabelText + { + get + { + return _center; + } + set + { + _center = value; + if (_center) + { + _label.Size = Size; + _label.DrawFormat = TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter; + } + else + _label.AutoSize = true; + } + } + #endregion + + #region LabelText + public string LabelText + { + set + { + if (_label == null || _label.IsDisposed) + return; + _label.Text = value; + _label.Visible = !string.IsNullOrEmpty(value); + } + } + #endregion + + public MirCheckBox() + { + TickedIndex = -1; + UnTickedIndex = -1; + Index = -1; + HoverIndex = -1; + PressedIndex = -1; + DisabledIndex = -1; + Sound = SoundList.ButtonB; + Click += MirCheckBox_Click; + + _label = new MirLabel + { + AutoSize = true, + NotControl = true, + Location = new Point(15, -2), + Parent = this + }; + } + + private void MirCheckBox_Click(object sender, EventArgs e) + { + Checked = !Checked; + if (Checked) Index = TickedIndex; + else Index = UnTickedIndex; + Redraw(); + } + } +} diff --git a/Client/MirControls/MirControl.cs b/Client/MirControls/MirControl.cs new file mode 100644 index 0000000..0a4ea66 --- /dev/null +++ b/Client/MirControls/MirControl.cs @@ -0,0 +1,1124 @@ +using Client.MirGraphics; +using Client.MirSounds; +using SlimDX; +using SlimDX.Direct3D9; + +namespace Client.MirControls +{ + public class MirControl : IDisposable + { + public static MirControl ActiveControl, MouseControl; + + public virtual Point DisplayLocation { get { return Parent == null ? Location : Parent.DisplayLocation.Add(Location); } } + public Rectangle DisplayRectangle { get { return new Rectangle(DisplayLocation, Size); } } + + public bool GrayScale { get; set; } + public bool Blending { get; set; } + public float BlendingRate { get; set; } + public BlendMode BlendMode { get; set; } + + #region Back Colour + private Color _backColour; + public Color BackColour + { + get { return _backColour; } + set + { + if (_backColour == value) + return; + _backColour = value; + OnBackColourChanged(); + } + } + public event EventHandler BackColourChanged; + protected virtual void OnBackColourChanged() + { + TextureValid = false; + Redraw(); + if (BackColourChanged != null) + BackColourChanged.Invoke(this, EventArgs.Empty); + } + #endregion + + #region Border + protected Rectangle BorderRectangle; + private bool _border; + protected Vector2[] _borderInfo; + protected virtual Vector2[] BorderInfo + { + get + { + if (Size == Size.Empty) + return null; + + if (BorderRectangle != DisplayRectangle) + { + _borderInfo = new[] + { + new Vector2(DisplayRectangle.Left - 1, DisplayRectangle.Top - 1), + new Vector2(DisplayRectangle.Right, DisplayRectangle.Top - 1), + new Vector2(DisplayRectangle.Left - 1, DisplayRectangle.Top - 1), + new Vector2(DisplayRectangle.Left - 1, DisplayRectangle.Bottom), + new Vector2(DisplayRectangle.Left - 1, DisplayRectangle.Bottom), + new Vector2(DisplayRectangle.Right, DisplayRectangle.Bottom), + new Vector2(DisplayRectangle.Right, DisplayRectangle.Top - 1), + new Vector2(DisplayRectangle.Right, DisplayRectangle.Bottom) + }; + + BorderRectangle = DisplayRectangle; + } + return _borderInfo; + } + } + public virtual bool Border + { + get { return _border; } + set + { + if (_border == value) + return; + _border = value; + OnBorderChanged(); + } + } + public event EventHandler BorderChanged; + private void OnBorderChanged() + { + Redraw(); + if (BorderChanged != null) + BorderChanged.Invoke(this, EventArgs.Empty); + } + #endregion + + #region Border Colour + private Color _borderColour; + public Color BorderColour + { + get { return _borderColour; } + set + { + if (_borderColour == value) + return; + _borderColour = value; + OnBorderColourChanged(); + } + } + public event EventHandler BorderColourChanged; + private void OnBorderColourChanged() + { + Redraw(); + if (BorderColourChanged != null) + BorderColourChanged.Invoke(this, EventArgs.Empty); + } + #endregion + + #region Control Texture + public long CleanTime; + protected Texture ControlTexture; + protected internal bool TextureValid; + private bool _drawControlTexture; + protected Size TextureSize; + public bool DrawControlTexture + { + get { return _drawControlTexture; } + set + { + if (_drawControlTexture == value) + return; + _drawControlTexture = value; + Redraw(); + } + } + protected virtual void CreateTexture() + { + if (ControlTexture == null || ControlTexture.Disposed) + { + DXManager.ControlList.Add(this); + ControlTexture = new Texture(DXManager.Device, Size.Width, Size.Height, 1, Usage.RenderTarget, Format.A8R8G8B8, Pool.Default); + TextureSize = Size; + } + + Surface oldSurface = DXManager.CurrentSurface; + Surface surface = ControlTexture.GetSurfaceLevel(0); + DXManager.SetSurface(surface); + DXManager.Device.Clear(ClearFlags.Target, BackColour, 0, 0); + DXManager.SetSurface(oldSurface); + + TextureValid = true; + surface.Dispose(); + } + + internal void DisposeTexture() + { + if (ControlTexture == null || ControlTexture.Disposed) return; + + ControlTexture.Dispose(); + ControlTexture = null; + TextureValid = false; + TextureSize = Size.Empty; + + DXManager.ControlList.Remove(this); + } + #endregion + + #region Controls + public List Controls { get; private set; } + public event EventHandler ControlAdded , ControlRemoved; + private void AddControl(MirControl control) + { + Controls.Add(control); + OnControlAdded(); + } + public void InsertControl(int index, MirControl control) + { + if (control.Parent != this) + { + control.Parent = null; + control._parent = this; + } + + if (index >= Controls.Count) + Controls.Add(control); + else + { + Controls.Insert(index, control); + OnControlAdded(); + } + } + private void RemoveControl(MirControl control) + { + Controls.Remove(control); + OnControlRemoved(); + } + private void OnControlAdded() + { + Redraw(); + if (ControlAdded != null) + ControlAdded.Invoke(this, EventArgs.Empty); + } + private void OnControlRemoved() + { + Redraw(); + if (ControlRemoved != null) + ControlRemoved.Invoke(this, EventArgs.Empty); + } + #endregion + + #region Enabled + private bool _enabled; + public bool Enabled + { + internal get { return Parent == null ? _enabled : Parent.Enabled && _enabled; } + set + { + if (_enabled == value) + return; + _enabled = value; + OnEnabledChanged(); + } + } + public event EventHandler EnabledChanged; + protected virtual void OnEnabledChanged() + { + Redraw(); + + if (EnabledChanged != null) + EnabledChanged.Invoke(this, EventArgs.Empty); + + if (!Enabled && ActiveControl == this) + ActiveControl.Deactivate(); + + if (Controls != null) + foreach (MirControl control in Controls) + control.OnEnabledChanged(); + } + public bool AllowDisabledMouseOver; + #endregion + + #region Events + protected bool HasShown; + public event EventHandler Click , DoubleClick, BeforeDraw , AfterDraw , MouseEnter , MouseLeave , Shown , BeforeShown, Disposing; + public event MouseEventHandler MouseWheel,MouseMove, MouseDown, MouseUp; + public event KeyEventHandler KeyDown , KeyUp; + public event KeyPressEventHandler KeyPress; + #endregion + + #region Fore Colour + private Color _foreColour; + public Color ForeColour + { + get { return _foreColour; } + set + { + if (_foreColour == value) + return; + _foreColour = value; + OnForeColourChanged(); + } + } + public event EventHandler ForeColourChanged; + protected virtual void OnForeColourChanged() + { + TextureValid = false; + if (ForeColourChanged != null) + ForeColourChanged.Invoke(this, EventArgs.Empty); + } + #endregion + + #region Location + private Point _location; + public Point Location + { + get { return _location; } + set + { + if (_location == value) + return; + _location = value; + OnLocationChanged(); + } + } + public event EventHandler LocationChanged; + protected virtual void OnLocationChanged() + { + Redraw(); + if (Controls != null) + for (int i = 0; i < Controls.Count; i++) + Controls[i].OnLocationChanged(); + + if (LocationChanged != null) + LocationChanged.Invoke(this, EventArgs.Empty); + } + #endregion + + #region Hint + private string _hint; + public string Hint + { + get { return _hint; } + set + { + if (_hint == value) + return; + + _hint = value; + OnHintChanged(EventArgs.Empty); + } + } + public event EventHandler HintChanged; + private void OnHintChanged(EventArgs e) + { + Redraw(); + if (HintChanged != null) + HintChanged.Invoke(this, e); + } + #endregion + + #region Modal + private bool _modal; + public bool Modal + { + get { return _modal; } + set + { + if (_modal == value) + return; + _modal = value; + OnModalChanged(); + } + } + public event EventHandler ModalChanged; + private void OnModalChanged() + { + Redraw(); + if (ModalChanged != null) + ModalChanged.Invoke(this, EventArgs.Empty); + } + #endregion + + #region Movable + protected internal bool Moving; + private bool _movable; + private Point _movePoint; + + public bool Movable + { + get { return _movable; } + set + { + if (_movable == value) + return; + _movable = value; + OnMovableChanged(); + } + } + + public event EventHandler MovableChanged; + public event MouseEventHandler OnMoving; + + private void OnMovableChanged() + { + Redraw(); + if (MovableChanged != null) + MovableChanged.Invoke(this, EventArgs.Empty); + } + #endregion + + #region Not Control + private bool _notControl; + public bool NotControl + { + private get { return _notControl; } + set + { + if (_notControl == value) + return; + _notControl = value; + OnNotControlChanged(); + } + } + public event EventHandler NotControlChanged; + private void OnNotControlChanged() + { + Redraw(); + if (NotControlChanged != null) + NotControlChanged.Invoke(this, EventArgs.Empty); + } + #endregion + + #region Opacity + private float _opacity; + public float Opacity + { + get { return _opacity; } + set + { + if (value > 1F) + value = 1F; + if (value < 0F) + value = 0; + + if (_opacity == value) + return; + + _opacity = value; + OnOpacityChanged(); + } + } + public event EventHandler OpacityChanged; + private void OnOpacityChanged() + { + Redraw(); + if (OpacityChanged != null) + OpacityChanged.Invoke(this, EventArgs.Empty); + } + #endregion + + #region Parent + private MirControl _parent; + public MirControl Parent + { + get { return _parent; } + set + { + if (_parent == value) return; + + if (_parent != null) + _parent.RemoveControl(this); + _parent = value; + if (_parent != null) + _parent.AddControl(this); + OnParentChanged(); + } + } + public event EventHandler ParentChanged; + protected virtual void OnParentChanged() + { + OnLocationChanged(); + if (ParentChanged != null) + ParentChanged.Invoke(this, EventArgs.Empty); + } + #endregion + + #region Size + +// ReSharper disable InconsistentNaming + protected Size _size; +// ReSharper restore InconsistentNaming + + public virtual Size Size + { + get { return _size; } + set + { + if (_size == value) + return; + _size = value; + OnSizeChanged(); + } + } + + public virtual Size TrueSize + { + get { return _size; } + } + + public event EventHandler SizeChanged; + protected virtual void OnSizeChanged() + { + TextureValid = false; + Redraw(); + + if (SizeChanged != null) + SizeChanged.Invoke(this, EventArgs.Empty); + } + #endregion + + #region Sound + private int _sound; + public int Sound + { + get { return _sound; } + set + { + if (_sound == value) + return; + _sound = value; + OnSoundChanged(); + } + } + public event EventHandler SoundChanged; + private void OnSoundChanged() + { + if (SoundChanged != null) + SoundChanged.Invoke(this, EventArgs.Empty); + } + #endregion + + #region Sort + private bool _sort; + public bool Sort + { + get { return _sort; } + set + { + if (_sort == value) + return; + _sort = value; + OnSortChanged(); + } + } + public event EventHandler SortChanged; + private void OnSortChanged() + { + Redraw(); + if (SortChanged != null) + SortChanged.Invoke(this, EventArgs.Empty); + } + public void TrySort() + { + if (Parent == null) + return; + + Parent.TrySort(); + + if (Parent.Controls[Parent.Controls.Count - 1] == this) + return; + + if (!Sort) return; + + Parent.Controls.Remove(this); + Parent.Controls.Add(this); + + Redraw(); + } + #endregion + + #region Visible + private bool _visible; + public virtual bool Visible + { + get { return Parent == null ? _visible : Parent.Visible && _visible; } + set + { + if (_visible == value) + return; + _visible = value; + OnVisibleChanged(); + } + } + public event EventHandler VisibleChanged; + protected virtual void OnVisibleChanged() + { + Redraw(); + if (VisibleChanged != null) + VisibleChanged.Invoke(this, EventArgs.Empty); + + Moving = false; + _movePoint = Point.Empty; + + if (Sort && Parent != null) + { + Parent.Controls.Remove(this); + Parent.Controls.Add(this); + } + + if (MouseControl == this && !Visible) + { + Dehighlight(); + Deactivate(); + } + else if (IsMouseOver(CMain.MPoint)) + Highlight(); + + + if (Controls != null) + foreach (MirControl control in Controls) + control.OnVisibleChanged(); + } + protected void OnBeforeShown() + { + if (HasShown) + return; + + if (Visible && IsMouseOver(CMain.MPoint)) + Highlight(); + + if (BeforeShown != null) + BeforeShown.Invoke(this, EventArgs.Empty); + } + protected void OnShown() + { + if (HasShown) + return; + + if (Shown != null) + Shown.Invoke(this, EventArgs.Empty); + + HasShown = true; + } + #endregion + + #region MultiLine + + public virtual void MultiLine() + { + } + + #endregion + + #region Positions + + protected Point Center + { + get { return new Point((Settings.ScreenWidth - Size.Width) / 2, (Settings.ScreenHeight - Size.Height) / 2); } + } + + protected Point Left + { + get { return new Point(0, (Settings.ScreenHeight - Size.Height) / 2); } + } + + protected Point Top + { + get { return new Point((Settings.ScreenWidth - Size.Width) / 2, 0); } + } + + protected Point Right + { + get { return new Point(Settings.ScreenWidth - Size.Width, (Settings.ScreenHeight - Size.Height) / 2); } + } + + protected Point Bottom + { + get { return new Point((Settings.ScreenWidth - Size.Width) / 2, Settings.ScreenHeight - Size.Height); } + } + + protected Point TopLeft + { + get { return new Point(0, 0); } + } + + protected Point TopRight + { + get { return new Point(Settings.ScreenWidth - Size.Width, 0); } + } + + protected Point BottomRight + { + get { return new Point(Settings.ScreenWidth - Size.Width, Settings.ScreenHeight - Size.Height); } + } + + protected Point BottomLeft + { + get { return new Point(0, Settings.ScreenHeight - Size.Height); } + } + + #endregion + + + public void BringToFront() + { + if (Parent == null) return; + int index = _parent.Controls.IndexOf(this); + if (index == _parent.Controls.Count - 1) return; + + _parent.Controls.RemoveAt(index); + _parent.Controls.Add(this); + Redraw(); + } + + public MirControl() + { + Controls = new List(); + _opacity = 1F; + _enabled = true; + _foreColour = Color.White; + _visible = true; + _sound = SoundList.None; + } + + public virtual void Show() + { + if (Visible) return; + Visible = true; + } + + public virtual void Hide() + { + if (!Visible) return; + Visible = false; + } + + public virtual void Draw() + { + if (IsDisposed || !Visible /*|| Size.Width == 0 || Size.Height == 0*/ || Size.Width > Settings.ScreenWidth || Size.Height > Settings.ScreenHeight) + return; + + OnBeforeShown(); + + BeforeDrawControl(); + DrawControl(); + DrawChildControls(); + DrawBorder(); + AfterDrawControl(); + + CleanTime = CMain.Time + Settings.CleanDelay; + + OnShown(); + } + + protected virtual void BeforeDrawControl() + { + if (BeforeDraw != null) + BeforeDraw.Invoke(this, EventArgs.Empty); + } + protected internal virtual void DrawControl() + { + if (!DrawControlTexture) + return; + + if (!TextureValid) + CreateTexture(); + + if (ControlTexture == null || ControlTexture.Disposed) + return; + + DXManager.DrawOpaque(ControlTexture, new Rectangle(0, 0, Size.Width, Size.Height), new Vector3?(new Vector3((float)(DisplayLocation.X), (float)(DisplayLocation.Y), 0.0f)), Color.White, Opacity); + + CleanTime = CMain.Time + Settings.CleanDelay; + } + protected void DrawChildControls() + { + if (Controls != null) + for (int i = 0; i < Controls.Count; i++) + if (Controls[i] != null) + Controls[i].Draw(); + } + protected virtual void DrawBorder() + { + if (!Border || BorderInfo == null) + return; + DXManager.Sprite.Flush(); + DXManager.Line.Draw(BorderInfo, _borderColour); + } + protected void AfterDrawControl() + { + if (AfterDraw != null) + AfterDraw.Invoke(this, EventArgs.Empty); + } + + protected virtual void Deactivate() + { + if (ActiveControl != this) + return; + + ActiveControl = null; + Moving = false; + _movePoint = Point.Empty; + } + protected virtual void Dehighlight() + { + if (MouseControl != this) + return; + MouseControl.OnMouseLeave(); + MouseControl = null; + } + protected virtual void Activate() + { + if (ActiveControl == this) + return; + + if (ActiveControl != null) + ActiveControl.Deactivate(); + + ActiveControl = this; + } + protected virtual void Highlight() + { + if (MouseControl == this) + return; + if (NotControl) + { + + } + if (MouseControl != null) + MouseControl.Dehighlight(); + + if (ActiveControl != null && ActiveControl != this) return; + + OnMouseEnter(); + MouseControl = this; + } + + public virtual bool IsMouseOver(Point p) + { + return Visible && (DisplayRectangle.Contains(p) || Moving || Modal) && !NotControl; + } + protected virtual void OnMouseEnter() + { + if (!_enabled && !AllowDisabledMouseOver) + return; + + Redraw(); + + if (MouseEnter != null) + MouseEnter.Invoke(this, EventArgs.Empty); + } + protected virtual void OnMouseLeave() + { + if (!_enabled && !AllowDisabledMouseOver) + return; + + Redraw(); + + if (MouseLeave != null) + MouseLeave.Invoke(this, EventArgs.Empty); + } + public virtual void OnMouseClick(MouseEventArgs e) + { + if (!Enabled) + return; + + if (Sound != SoundList.None) + SoundManager.PlaySound(Sound); + + if (Click != null) + InvokeMouseClick(e); + } + public virtual void OnMouseDoubleClick(MouseEventArgs e) + { + if (!Enabled) + return; + + if (DoubleClick != null) + { + if (Sound != SoundList.None) + SoundManager.PlaySound(Sound); + InvokeMouseDoubleClick(e); + } + else + OnMouseClick(e); + } + public void InvokeMouseClick(EventArgs e) + { + if (Click != null) + Click.Invoke(this, e); + } + public void InvokeMouseDoubleClick(EventArgs e) + { + DoubleClick.Invoke(this, e); + } + public virtual void OnMouseMove(MouseEventArgs e) + { + if (!_enabled && !AllowDisabledMouseOver) + return; + + + if (Moving) + { + Point tempPoint = CMain.MPoint.Subtract(_movePoint); + + if (Parent == null) + { + if (tempPoint.Y + TrueSize.Height > Settings.ScreenHeight) + tempPoint.Y = Settings.ScreenHeight - TrueSize.Height - 1; + + if (tempPoint.X + TrueSize.Width > Settings.ScreenWidth) + tempPoint.X = Settings.ScreenWidth - TrueSize.Width - 1; + } + else + { + if (tempPoint.Y + TrueSize.Height > Parent.TrueSize.Height) + tempPoint.Y = Parent.TrueSize.Height - TrueSize.Height; + + if (tempPoint.X + TrueSize.Width > Parent.TrueSize.Width) + tempPoint.X = Parent.TrueSize.Width - TrueSize.Width; + } + + if (tempPoint.X < 0) + tempPoint.X = 0; + if (tempPoint.Y < 0) + tempPoint.Y = 0; + + Location = tempPoint; + if (OnMoving != null) + OnMoving.Invoke(this, e); + return; + } + + if (Controls != null) + for (int i = Controls.Count - 1; i >= 0; i--) + if (Controls[i].IsMouseOver(CMain.MPoint)) + { + Controls[i].OnMouseMove(e); + return; + } + + Highlight(); + + if (MouseMove != null) + MouseMove.Invoke(this, e); + } + public virtual void OnMouseDown(MouseEventArgs e) + { + if (!_enabled) + return; + + Activate(); + + TrySort(); + + if (_movable) + { + Moving = true; + _movePoint = CMain.MPoint.Subtract(Location); + } + + if (MouseDown != null) + MouseDown.Invoke(this, e); + } + public virtual void OnMouseUp(MouseEventArgs e) + { + if (!_enabled) + return; + + if (Moving) + { + Moving = false; + _movePoint = Point.Empty; + } + + if (ActiveControl != null) ActiveControl.Deactivate(); + + if (MouseUp != null) + MouseUp.Invoke(this, e); + } + public virtual void OnMouseWheel(MouseEventArgs e) + { + if (!Enabled) + return; + + MouseWheel?.Invoke(this, e); + } + public virtual void OnKeyPress(KeyPressEventArgs e) + { + if (!_enabled) + return; + + if (Controls != null) + for (int i = Controls.Count - 1; i >= 0; i--) + if (e.Handled) + return; + else + Controls[i].OnKeyPress(e); + + if (KeyPress == null) + return; + KeyPress.Invoke(this, e); + } + public virtual void OnKeyDown(KeyEventArgs e) + { + if (!_enabled) + return; + + if (Controls != null) + for (int i = Controls.Count - 1; i >= 0; i--) + if (e.Handled) + return; + else + Controls[i].OnKeyDown(e); + + if (KeyDown == null) + return; + KeyDown.Invoke(this, e); + } + public virtual void OnKeyUp(KeyEventArgs e) + { + if (!_enabled) + return; + + if (Controls != null) + for (int i = Controls.Count - 1; i >= 0; i--) + if (e.Handled) + return; + else + Controls[i].OnKeyUp(e); + + if (KeyUp == null) + return; + KeyUp.Invoke(this, e); + } + + public virtual void Redraw() + { + if (Parent != null) Parent.Redraw(); + + } + + #region Font + public virtual System.Drawing.Font ScaleFont(System.Drawing.Font font) + { + var theFont = new System.Drawing.Font(font.Name, font.Size * 96f / CMain.Graphics.DpiX, font.Style); + font.Dispose(); + + return theFont; + } + #endregion + + #region Disposable + public bool IsDisposed { get; private set; } + + public void Dispose() + { + if (IsDisposed) + return; + Dispose(true); + } + + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + if (Disposing != null) + Disposing.Invoke(this, EventArgs.Empty); + + Disposing = null; + + BackColourChanged = null; + _backColour = Color.Empty; + + BorderChanged = null; + _border = false; + BorderRectangle = Rectangle.Empty; + _borderInfo = null; + + BorderColourChanged = null; + _borderColour = Color.Empty; + + DrawControlTexture = false; + DisposeTexture(); + + ControlAdded = null; + ControlRemoved = null; + + if (Controls != null) + { + for (int i = Controls.Count - 1; i >= 0; i--) + { + if (Controls[i] != null && !Controls[i].IsDisposed) + Controls[i].Dispose(); + } + + Controls = null; + } + _enabled = false; + EnabledChanged = null; + + HasShown = false; + + BeforeDraw = null; + AfterDraw = null; + Shown = null; + BeforeShown = null; + + Click = null; + DoubleClick = null; + MouseEnter = null; + MouseLeave = null; + MouseMove = null; + MouseDown = null; + MouseUp = null; + MouseWheel = null; + + KeyPress = null; + KeyUp = null; + KeyDown = null; + + ForeColourChanged = null; + _foreColour = Color.Empty; + + LocationChanged = null; + _location = Point.Empty; + + ModalChanged = null; + _modal = false; + + MovableChanged = null; + _movePoint = Point.Empty; + Moving = false; + OnMoving = null; + _movable = false; + + NotControlChanged = null; + _notControl = false; + + OpacityChanged = null; + _opacity = 0F; + + if (Parent != null && Parent.Controls != null) + Parent.Controls.Remove(this); + ParentChanged = null; + _parent = null; + + SizeChanged = null; + _size = Size.Empty; + + SoundChanged = null; + _sound = 0; + + VisibleChanged = null; + _visible = false; + + if (ActiveControl == this) ActiveControl = null; + if (MouseControl == this) MouseControl = null; + } + + IsDisposed = true; + } + #endregion + + + + } +} diff --git a/Client/MirControls/MirDropDownBox.cs b/Client/MirControls/MirDropDownBox.cs new file mode 100644 index 0000000..51bf96b --- /dev/null +++ b/Client/MirControls/MirDropDownBox.cs @@ -0,0 +1,350 @@ +using Client.MirGraphics; + +namespace Client.MirControls +{ + public class MirDropDownBox : MirControl + { + private MirLabel _label; + private MirButton _DropDownButton; + private MirLabel[] _Option = new MirLabel[5]; + private MirButton _ScrollUp, _ScrollDown, _ScrollPosition; + + public int _SelectedIndex = -1; + public int _WantedIndex = -1; + public int MinimumOption = 0; + public int ScrollIndex = 0; + public int OrigHeight = 0; + public long LastMouseLeave = 0; + private List _Items = new List(); + public event EventHandler ValueChanged; + + public int SelectedIndex + { + get + { + return _SelectedIndex; + } + set + { + _SelectedIndex = value; + if (_SelectedIndex >= Items.Count) + _SelectedIndex = -1; + } + } + + public List Items + { + get + { + return _Items; + } + set + { + _Items = value; + ItemsChanged(); + } + } + + #region Back Color + + protected override void OnBackColourChanged() + { + base.OnBackColourChanged(); + if (_label != null && !_label.IsDisposed) + _label.BackColour = BackColour; + } + + #endregion + + #region Size + protected override void OnSizeChanged() + { + base.OnSizeChanged(); + OrigHeight = OrigHeight == 0 ? Size.Height : OrigHeight; + for (int i = 0; i < _Option.Length; i++) + { + _Option[i].Size = new Size(Size.Width - 16, 16); //Size.Width - 13, 13 + } + + if (_label != null && !_label.IsDisposed) + _label.Size = new Size(Size.Width - 16, 15); //Size.Width - 16, 12 + if (_DropDownButton != null && !_DropDownButton.IsDisposed) + _DropDownButton.Location = new Point(Size.Width - 18, 2); + if (_ScrollUp != null && !_ScrollUp.IsDisposed) + _ScrollUp.Location = new Point(Size.Width - 12, 14); + if (_ScrollDown != null && !_ScrollDown.IsDisposed) + _ScrollDown.Location = new Point(Size.Width - 12, 52); + if (_ScrollPosition != null && !_ScrollPosition.IsDisposed) + _ScrollPosition.Location = new Point(Size.Width - 11, 22); + + } + #endregion + + #region Enabled + + protected override void OnEnabledChanged() + { + base.OnEnabledChanged(); + if (_DropDownButton != null && !_DropDownButton.IsDisposed) + { + _DropDownButton.Enabled = Enabled; + if (Enabled) + _DropDownButton.Visible = true; + else + _DropDownButton.Visible = false; + } + } + + #endregion + + public MirDropDownBox() + { + BackColour = Color.FromArgb(255,6,6,6); + ForeColour = Color.White; + Enabled = false; + _label = new MirLabel + { + Parent = this, + Location = new Point(0, 0), + ForeColour = ForeColour, + BackColour = BackColour, + Font = new Font(Settings.FontName, 8F), + Visible = true, + }; + _label.Click += (o, e) => + { + if (_DropDownButton.Enabled) + DropDownClick(); + }; + _label.BeforeDraw += (o, e) => + { + if ((Items.Count > 0) && (Items.Count >= SelectedIndex)) + if (SelectedIndex == -1) + { + _label.Text = " "; + } + else + + _label.Text = Items[SelectedIndex]; + else + _label.Text = "None"; + }; + for (int i = 0; i < _Option.Length; i++) + { + _Option[i] = new MirLabel + { + Parent = this, + Visible = false, + Location = new Point(0, 15 + (i * 13)), + ForeColour = ForeColour, + BackColour = Color.FromArgb(255,20,20,20), + Font = new Font(Settings.FontName, 8F) + }; + int index = i; + _Option[index].MouseEnter += (o, e) => _Option[index].BackColour = Color.FromArgb(255,140,70,0); + _Option[index].MouseLeave += (o, e) => _Option[index].BackColour = Color.FromArgb(255, 20, 20, 20); + _Option[index].MouseDown += (o, e) => _Option[index].BackColour = Color.FromArgb(255, 20, 20, 20); + _Option[index].MouseUp += (o, e) => _Option[index].BackColour = Color.FromArgb(255,20,20,20); + _Option[index].Click += (o, e) => SelectOption(index); + + _Option[index].BeforeDraw += (o, e) => + { + if (Items.Count > (ScrollIndex + index + MinimumOption)) + _Option[index].Text = _Items[ScrollIndex + index + MinimumOption]; + }; + } + _DropDownButton = new MirButton + { + Index = 207, + Library = Libraries.Prguse2, + Location = new Point(Size.Width - 18, 1), + Parent = this, + HoverIndex = 208, + PressedIndex = 209, + Visible = false, + }; + _DropDownButton.Click += (o, e) => DropDownClick(); + _ScrollUp = new MirButton + { + HoverIndex = 2022, + Index = 2021, + Library = Libraries.Prguse, + Location = new Point(Size.Width - 12, 14), + Parent = this, + PressedIndex = 2023, + Visible = false + }; + _ScrollUp.Click += (o, e) => ScrollUp(); + _ScrollDown = new MirButton + { + HoverIndex = 2025, + Index = 2024, + Library = Libraries.Prguse, + Location = new Point(Size.Width - 12, 52), + Parent = this, + PressedIndex = 2026, + Visible = false + }; + _ScrollDown.Click += (o, e) => ScrollDown(); + + _ScrollPosition = new MirButton + { + HoverIndex = 2016, + Index = 2015, + Library = Libraries.Prguse, + Location = new Point(Size.Width - 11, 22), + Movable = true, + Parent = this, + PressedIndex = 2017, + Visible = false + }; + _ScrollPosition.OnMoving += ScrollPosition; + BeforeDraw += MirDropDownBox_BeforeDraw; + } + + void MirDropDownBox_BeforeDraw(object sender, EventArgs e) + { + if (!_Option[0].Visible) return; + if (IsMouseOver(CMain.MPoint)) return; + foreach (MirControl control in Controls) + if (control.IsMouseOver(CMain.MPoint)) + return; + + CloseDropDown(); + } + + protected override void OnMouseLeave() + { + if (!IsMouseOver(CMain.MPoint)) + CloseDropDown(); + base.OnMouseLeave(); + } + + public void SelectOption(int index) + { + if (ScrollIndex + index + MinimumOption < Items.Count) + { + _WantedIndex = ScrollIndex + index + MinimumOption; + if (ValueChanged != null) + ValueChanged.Invoke(this, EventArgs.Empty); + } + else + Update(); + CloseDropDown(); + } + + public void ItemsChanged() + { + CloseDropDown(); + SelectedIndex = -1; + } + public void Update() + { + // Member is not implemented. + } + public void DropDownClick() + { + if (_Option[0].Visible) + CloseDropDown(); + else + OpenDropDown(); + } + public void OpenDropDown() + { + Size = new Size(Size.Width, OrigHeight + (Math.Max(5, Items.Count) * 15)); + ScrollIndex = 0; + if (Items.Count > 5) + ScrollIndex = SelectedIndex > 3 ? SelectedIndex - 2 : 0; + for (int i = 0; i < _Option.Length; i++) + if (Items.Count > i) + _Option[i].Visible = true; + else + _Option[i].Visible = false; + if (Items.Count > 5) + { + _ScrollDown.Visible = true; + _ScrollPosition.Visible = true; + _ScrollUp.Visible = true; + } + else + { + _ScrollDown.Visible = false; + _ScrollPosition.Visible = false; + _ScrollUp.Visible = false; + } + _ScrollDown.Location = new Point(Size.Width - 12, 9 + Math.Min(5, Items.Count) * 13); + } + public void CloseDropDown() + { + Size = new Size(Size.Width, OrigHeight); + for (int i = 0; i < _Option.Length; i++) + _Option[i].Visible = false; + _ScrollDown.Visible = false; + _ScrollPosition.Visible = false; + _ScrollUp.Visible = false; + } + public void ScrollUp() + { + if (ScrollIndex > 0) ScrollIndex--; + Update(); + } + public void ScrollDown() + { + if (ScrollIndex < (Items.Count - 5)) ScrollIndex++; + Update(); + } + void ScrollPosition(object sender, MouseEventArgs e) + { + int x = Size.Width - 11; + int y = _ScrollPosition.Location.Y; + if (y >= _ScrollDown.Location.Y - 14) y = _ScrollDown.Location.Y - 14; + if (y < 20) y = 20; + + int h = _ScrollDown.Location.Y - _ScrollUp.Location.Y + 6; + h = (int)((y - 15) / (h / (float)(Items.Count - 1))); + if (h > Items.Count - 5) h = Math.Max(0, Items.Count - 5); + if (h != ScrollIndex) + { + ScrollIndex = h; + Update(); + } + + _ScrollPosition.Location = new Point(x, y); + } + + #region Disposable + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + + if (!disposing) return; + + if (_label != null && !_label.IsDisposed) + _label.Dispose(); + _label = null; + + if (_DropDownButton != null && !_DropDownButton.IsDisposed) + _DropDownButton.Dispose(); + _DropDownButton = null; + + if (_ScrollDown != null && !_ScrollDown.IsDisposed) + _ScrollDown.Dispose(); + _ScrollDown = null; + + if (_ScrollPosition != null && !_ScrollPosition.IsDisposed) + _ScrollPosition.Dispose(); + _ScrollPosition = null; + + if (_ScrollUp != null && !_ScrollUp.IsDisposed) + _ScrollUp.Dispose(); + _ScrollUp = null; + for (int i = 0; i < _Option.Length; i++) + { + if (_Option[i] != null && !_Option[i].IsDisposed) + _Option[i].Dispose(); + _Option[i] = null; + } + } + #endregion + } +} \ No newline at end of file diff --git a/Client/MirControls/MirGameShopCell.cs b/Client/MirControls/MirGameShopCell.cs new file mode 100644 index 0000000..20056ea --- /dev/null +++ b/Client/MirControls/MirGameShopCell.cs @@ -0,0 +1,479 @@ +using Client.MirGraphics; +using Client.MirNetwork; +using Client.MirScenes; +using Client.MirSounds; +using C = ClientPackets; + +namespace Client.MirControls +{ + public sealed class GameShopCell : MirImageControl + { + public MirLabel nameLabel, typeLabel, goldLabel, gpLabel, stockLabel, StockLabel, countLabel; + public GameShopItem Item; + public UserItem ShowItem; + Rectangle ItemDisplayArea; + public MirButton BuyItem, PreviewItem; + public MirImageControl ViewerBackground; + public byte Quantity = 1; + public MirButton quantityUp, quantityDown; + public MirLabel quantity; + public GameShopViewer Viewer; + + public GameShopCell() + { + Size = new Size(125, 146); + Index = 750; + Library = Libraries.Prguse; + MouseLeave += (o, e) => + { + GameScene.Scene.DisposeItemLabel(); + GameScene.HoverItem = null; + ShowItem = null; + }; + + nameLabel = new MirLabel + { + Size = new Size(125, 15), + DrawFormat = TextFormatFlags.HorizontalCenter, + Location = new Point(0, 13), + Parent = this, + NotControl = true, + Font = new Font(Settings.FontName, 8F), + }; + + goldLabel = new MirLabel + { + Size = new Size(95, 20), + DrawFormat = TextFormatFlags.RightToLeft | TextFormatFlags.Right, + Location = new Point(2, 102), + Parent = this, + NotControl = true, + Font = new Font(Settings.FontName, 8F) + }; + + gpLabel = new MirLabel + { + Size = new Size(95, 20), + DrawFormat = TextFormatFlags.RightToLeft | TextFormatFlags.Right, + Location = new Point(2, 81), + Parent = this, + NotControl = true, + Font = new Font(Settings.FontName, 8F) + }; + + StockLabel = new MirLabel + { + Size = new Size(40, 20), + Location = new Point(53, 37), + Parent = this, + NotControl = true, + ForeColour = Color.Gray, + Font = new Font(Settings.FontName, 7F), + Text = "STOCK:" + }; + + stockLabel = new MirLabel + { + Size = new Size(20, 20), + DrawFormat = TextFormatFlags.HorizontalCenter, + Location = new Point(93, 37), + Parent = this, + NotControl = true, + Font = new Font(Settings.FontName, 7F), + }; + + countLabel = new MirLabel + { + Size = new Size(30, 20), + DrawFormat = TextFormatFlags.Right, + Location = new Point(16, 60), + Parent = this, + NotControl = true, + Font = new Font(Settings.FontName, 7F), + }; + + + BuyItem = new MirButton + { + Index = 778, + HoverIndex = 779, + PressedIndex = 780, + Location = new Point(42, 122), + Library = Libraries.Prguse, + Parent = this, + Sound = SoundList.ButtonA, + }; + BuyItem.Click += (o, e) => + { + BuyProduct(); + }; + + PreviewItem = new MirButton + { + Index = 781, + HoverIndex = 782, + PressedIndex = 783, + Location = new Point(8, 122), + Library = Libraries.Prguse, + Parent = this, + Sound = SoundList.ButtonA, + Visible = false, + }; + PreviewItem.Click += (o, e) => + { + GameScene.Scene.GameShopDialog.Viewer.Dispose(); + GameScene.Scene.GameShopDialog.Viewer = new GameShopViewer + { + Parent = GameScene.Scene.GameShopDialog, + Visible = true, + Location = this.Location.X < 350 ? new Point(416, 115) : new Point(151, 115), + }; + GameScene.Scene.GameShopDialog.Viewer.ViewerItem = Item; + GameScene.Scene.GameShopDialog.Viewer.UpdateViewer(); + }; + + + quantityUp = new MirButton + { + Index = 243, + HoverIndex = 244, + PressedIndex = 245, + Library = Libraries.Prguse2, + Parent = this, + Location = new Point(97, 56), + Sound = SoundList.ButtonA, + }; + quantityUp.Click += (o, e) => + { + if (CMain.Shift) Quantity += 10; + else Quantity++; + + if (((decimal)(Quantity * Item.Count) / Item.Info.StackSize) > 5) Quantity = ((5 * Item.Info.StackSize) / Item.Count) > 99 ? Quantity = 99 : Quantity = (byte)((5 * Item.Info.StackSize) / Item.Count); + if (Quantity >= 99) Quantity = 99; + if (Item.Stock != 0 && Quantity > Item.Stock) Quantity = (byte)Item.Stock; + }; + + quantityDown = new MirButton + { + Index = 240, + HoverIndex = 241, + PressedIndex = 242, + Library = Libraries.Prguse2, + Parent = this, + Location = new Point(55, 56), + Sound = SoundList.ButtonA, + }; + quantityDown.Click += (o, e) => + { + + if (CMain.Shift) Quantity -= 10; + else Quantity--; + + if (Quantity <= 1 || Quantity > 99) Quantity = 1; + }; + + quantity = new MirLabel + { + Size = new Size(20, 13), + DrawFormat = TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter, + Location = new Point(74, 56), + Parent = this, + NotControl = true, + Font = new Font(Settings.FontName, 8F), + }; + + + + } + + public void BuyProduct() + { + uint CreditCost; + uint GoldCost; + MirMessageBox messageBox; + int pType = -1; + if (GameScene.Scene.GameShopDialog.PaymentTypeCredit.Checked && Item.CanBuyCredit) + { + pType = 0; + } + else if (GameScene.Scene.GameShopDialog.PaymentTypeGold.Checked && Item.CanBuyGold) + { + pType = 1; + } + if (pType == -1) + { + GameScene.Scene.ChatDialog.ReceiveChat("You MUST select a payment type!", ChatType.System); + return; + } + switch (pType) + { + case 0: // Credit + if (Item.CreditPrice * Quantity <= GameScene.Credit) + { + CreditCost = Item.CreditPrice * Quantity; + messageBox = new MirMessageBox(string.Format("Are you sure would you like to buy {1} x \n{0}({3}) for {2} Credits?", Item.Info.FriendlyName, Quantity, CreditCost, Item.Count), MirMessageBoxButtons.YesNo); + messageBox.YesButton.Click += (o, e) => Network.Enqueue(new C.GameshopBuy { GIndex = Item.GIndex, Quantity = Quantity, PType = pType }); + messageBox.NoButton.Click += (o, e) => { }; + messageBox.Show(); + } + else + GameScene.Scene.ChatDialog.ReceiveChat("You can't afford the selected item.", ChatType.System); + break; + case 1: // Gold + if (Item.GoldPrice * Quantity <= GameScene.Gold) + { + GoldCost = Item.GoldPrice * Quantity; + messageBox = new MirMessageBox(string.Format("Are you sure would you like to buy{1} x \n{0}({3}) for {2} Gold?", Item.Info.FriendlyName, Quantity, GoldCost, Item.Count), MirMessageBoxButtons.YesNo); + messageBox.YesButton.Click += (o, e) => Network.Enqueue(new C.GameshopBuy { GIndex = Item.GIndex, Quantity = Quantity, PType = pType }); + messageBox.NoButton.Click += (o, e) => { }; + messageBox.Show(); + } + else + GameScene.Scene.ChatDialog.ReceiveChat("You can't afford the selected item.", ChatType.System); + break; + default: + + return; + } + } + + public override void OnMouseMove(MouseEventArgs e) + { + base.OnMouseMove(e); + + if (GameScene.HoverItem != null && (Item.Info.Index != GameScene.HoverItem.Info.Index)) + { + GameScene.Scene.DisposeItemLabel(); + GameScene.HoverItem = null; + ShowItem = null; + } + + if (ShowItem == null && ItemDisplayArea.Contains(CMain.MPoint)) + { + ShowItem = new UserItem(Item.Info) { MaxDura = Item.Info.Durability, CurrentDura = Item.Info.Durability, Count = Item.Count }; + GameScene.Scene.CreateItemLabel(ShowItem); + } + else if (ShowItem != null && !ItemDisplayArea.Contains(CMain.MPoint)) + { + GameScene.Scene.DisposeItemLabel(); + GameScene.HoverItem = null; + ShowItem = null; + } + } + + public void UpdateText() + { + nameLabel.Text = Item.Info.FriendlyName; + nameLabel.Text = nameLabel.Text.Length > 17 ? nameLabel.Text.Substring(0, 17) : nameLabel.Text; + nameLabel.ForeColour = GameScene.Scene.GradeNameColor(Item.Info.Grade); + if (Item.CanBuyGold) + goldLabel.Text = (Item.GoldPrice * Quantity).ToString("###,###,##0"); + if (Item.CanBuyCredit) + gpLabel.Text = (Item.CreditPrice * Quantity).ToString("###,###,##0"); + if (Item.Stock >= 99) stockLabel.Text = "99+"; + if (Item.Stock == 0) stockLabel.Text = "∞"; + else stockLabel.Text = Item.Stock.ToString(); + countLabel.Text = Item.Count.ToString(); + + if (Item.Info.Type == ItemType.Weapon || Item.Info.Type == ItemType.Armour) + { + PreviewItem.Visible = true; + BuyItem.Location = new Point(75, 122); + } + } + + protected internal override void DrawControl() + { + + base.DrawControl(); + + if (Item == null) return; + + UpdateText(); + + Size size = Libraries.Items.GetTrueSize(Item.Info.Image); + Point offSet = new Point((32 - size.Width) / 2, (32 - size.Height) / 2); + + Libraries.Items.Draw(Item.Info.Image, offSet.X + DisplayLocation.X + 12, offSet.Y + DisplayLocation.Y + 40); + ItemDisplayArea = new Rectangle(new Point(offSet.X + DisplayLocation.X + 12, offSet.Y + DisplayLocation.Y + 40), size); + } + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + + Item = null; + GameScene.HoverItem = null; + ShowItem = null; + } + + } + + public sealed class GameShopViewer : MirImageControl + { + + public MirAnimatedControl PreviewImage, WeaponImage, WeaponImage2, MountImage; + + public int StartIndex = 0; + public int Direction = 6; + public GameShopItem ViewerItem; + + public MirButton RightDirection, LeftDirection, CloseButton; + + + public GameShopViewer() + { + Index = 785;// 314; + Library = Libraries.Prguse;// Libraries.Prguse2; + Location = new Point(405, 108); + BeforeDraw += GameShopViewer_BeforeDraw; + //Click += (o, e) => + //{ + //Visible = false; + //}; + + CloseButton = new MirButton + { + HoverIndex = 362, + Index = 361, + Location = new Point(230, 8), + Library = Libraries.Prguse, + Parent = this, + PressedIndex = 363, + Sound = SoundList.ButtonA, + }; + CloseButton.Click += (o, e) => + { + Visible = false; + }; + + WeaponImage = new MirAnimatedControl + { + Animated = false, + Location = new Point(105, 160), + AnimationCount = 6, + AnimationDelay = 150, + Index = 0, + Library = Libraries.Prguse, + Loop = true, + Parent = this, + UseOffSet = true, + NotControl = true, + }; + WeaponImage2 = new MirAnimatedControl + { + Animated = false, + Location = new Point(105, 160), + AnimationCount = 6, + AnimationDelay = 150, + Index = 0, + Library = Libraries.Prguse, + Loop = true, + Parent = this, + UseOffSet = true, + NotControl = true, + }; + MountImage = new MirAnimatedControl + { + Animated = false, + Location = new Point(105, 160), + AnimationCount = 8, + AnimationDelay = 150, + Index = 0, + Library = Libraries.Prguse, + Loop = true, + Parent = this, + UseOffSet = true, + NotControl = true, + }; + + PreviewImage = new MirAnimatedControl + { + Animated = false, + Location = new Point(105, 160), + AnimationCount = 6, + AnimationDelay = 150, + Index = 0, + Library = Libraries.Prguse, + Loop = true, + Parent = this, + UseOffSet = true, + NotControl = true, + }; + + RightDirection = new MirButton + { + Index = 243, + HoverIndex = 244, + PressedIndex = 245, + Library = Libraries.Prguse2, + Parent = this, + Location = new Point(160, 282), + Sound = SoundList.ButtonA, + }; + RightDirection.Click += (o, e) => + { + Direction++; + if (Direction > 8) Direction = 1; + + UpdateViewer(); + }; + + LeftDirection = new MirButton + { + Index = 240, + HoverIndex = 241, + PressedIndex = 242, + Library = Libraries.Prguse2, + Parent = this, + Location = new Point(81, 282), + Sound = SoundList.ButtonA, + }; + LeftDirection.Click += (o, e) => + { + Direction--; + if (Direction == 0) Direction = 8; + + UpdateViewer(); + }; + + } + + public void UpdateViewer() + { + this.Visible = true; + if (ViewerItem.Info.Type == ItemType.Weapon) DrawWeapon(); + if (ViewerItem.Info.Type == ItemType.Armour) DrawArmour(); + } + + private void GameShopViewer_BeforeDraw(object sender, EventArgs e) + { + BringToFront(); + } + + private void DrawMount() + { + } + + private void DrawWeapon() + { + } + + private void DrawArmour() + { + + } + + private void DrawTransform() + { + + } + + private void DrawMask() + { + + + } + + } +} diff --git a/Client/MirControls/MirGeneratedBox.cs b/Client/MirControls/MirGeneratedBox.cs new file mode 100644 index 0000000..64687ed --- /dev/null +++ b/Client/MirControls/MirGeneratedBox.cs @@ -0,0 +1,84 @@ +using Client.MirGraphics; + +namespace Client.MirControls +{ + public enum GeneratedBoxSections + { + TopLeft, + Top, + TopRight, + Left, + Middle, + Right, + BottomLeft, + Bottom, + BottomRight + } + + public sealed class MirGeneratedBox : MirImageControl + { + private GeneratedBoxSections[,] boxArray; + private int SectionOffset; + public Size FixedSize; + public MirGeneratedBox(int offset, Size size) + { + SectionOffset = offset; + DrawImage = false; + FixedSize = new Size(size.Width / 40 * 40, size.Height / 40 * 40); + boxArray = new GeneratedBoxSections[FixedSize.Width / 40, FixedSize.Height / 40]; + + for (int y = 0; y < boxArray.GetLength(1); y++) + for (int x = 0; x < boxArray.GetLength(0); x++) + { + GeneratedBoxSections section = GetSectionForRowAndCol(y, x); + boxArray[x, y] = section; + } + + BeforeDraw += (o,e) => DrawSections(); + } + + private GeneratedBoxSections GetSectionForRowAndCol(int row, int col) + { + int width = boxArray.GetLength(0); + int height = boxArray.GetLength(1); + + if (row == 0) + { + if (col == 0) + return GeneratedBoxSections.TopLeft; + else if (col == width - 1) + return GeneratedBoxSections.TopRight; + else + return GeneratedBoxSections.Top; + } + else if (row == height - 1) + { + if (col == 0) + return GeneratedBoxSections.BottomLeft; + else if (col == width - 1) + return GeneratedBoxSections.BottomRight; + else + return GeneratedBoxSections.Bottom; + } + else + { + if (col == 0) + return GeneratedBoxSections.Left; + else if (col == width - 1) + return GeneratedBoxSections.Right; + else + return GeneratedBoxSections.Middle; + } + } + + private void DrawSections() + { + for (int y = 0; y < boxArray.GetLength(1); y++) + for (int x = 0; x < boxArray.GetLength(0); x++) + { + GeneratedBoxSections section = boxArray[x, y]; + Libraries.Prguse.Draw(SectionOffset + (int)section, Parent.DisplayLocation.X + Location.X + x * 40, Parent.DisplayLocation.Y + Location.Y + y * 40); + } + } + } +} diff --git a/Client/MirControls/MirGoodsCell.cs b/Client/MirControls/MirGoodsCell.cs new file mode 100644 index 0000000..c026947 --- /dev/null +++ b/Client/MirControls/MirGoodsCell.cs @@ -0,0 +1,97 @@ +using Client.MirGraphics; +using Client.MirScenes; +using SlimDX; + +namespace Client.MirControls +{ + public sealed class MirGoodsCell : MirControl + { + public UserItem Item; + + public MirLabel NameLabel, PriceLabel, CountLabel; + + public bool MultipleAvailable = false; + public MirImageControl NewIcon; + + public MirGoodsCell() + { + Size = new Size(130, 32); + + NameLabel = new MirLabel + { + AutoSize = true, + Parent = this, + NotControl = true, + Location = new Point(49, 0), + }; + + CountLabel = new MirLabel + { + AutoSize = true, + Parent = this, + NotControl = true, + DrawControlTexture = true, + Location = new Point(23, 17), + ForeColour = Color.Yellow, + }; + + PriceLabel = new MirLabel + { + AutoSize = true, + Parent = this, + NotControl = true, + Location = new Point(49, 14), + }; + + NewIcon = new MirImageControl + { + Index = 550, + Library = Libraries.Prguse, + Parent = this, + Location = new Point(190, 5), + NotControl = true, + Visible = false + }; + + BeforeDraw += (o, e) => Update(); + AfterDraw += (o, e) => DrawItem(); + } + + private void Update() + { + NewIcon.Visible = false; + + if (Item == null || Item.Info == null) return; + NameLabel.Text = Item.Info.FriendlyName; + CountLabel.Text = (Item.Count <= 1) ? "" : Item.Count.ToString(); + + NewIcon.Visible = !Item.IsShopItem || MultipleAvailable; + + PriceLabel.Text = string.Format("Price: {0} gold", (uint)(Item.Price() * GameScene.NPCRate)); + } + + protected override void OnMouseEnter() + { + base.OnMouseEnter(); + GameScene.Scene.CreateItemLabel(Item, hideAdded: GameScene.HideAddedStoreStats); + } + + protected override void OnMouseLeave() + { + base.OnMouseLeave(); + GameScene.Scene.DisposeItemLabel(); + GameScene.HoverItem = null; + } + + private void DrawItem() + { + if (Item == null || Item.Info == null) return; + + Size size = Libraries.Items.GetTrueSize(Item.Image); + Point offSet = new Point((40 - size.Width)/2, (32 - size.Height)/2); + Libraries.Items.Draw(Item.Image, offSet.X + DisplayLocation.X, offSet.Y + DisplayLocation.Y); + + CountLabel.Draw(); + } + } +} diff --git a/Client/MirControls/MirImageControl.cs b/Client/MirControls/MirImageControl.cs new file mode 100644 index 0000000..3935b61 --- /dev/null +++ b/Client/MirControls/MirImageControl.cs @@ -0,0 +1,224 @@ +using Client.MirGraphics; + +namespace Client.MirControls +{ + public class MirImageControl : MirControl + { + public override Point DisplayLocation { get { return UseOffSet ? base.DisplayLocation.Add(Library.GetOffSet(Index)) : base.DisplayLocation; } } + public Point DisplayLocationWithoutOffSet { get { return base.DisplayLocation; } } + + #region Auto Size + private bool _autoSize; + public bool AutoSize + { + get { return _autoSize; } + set + { + if (_autoSize == value) + return; + _autoSize = value; + OnAutoSizeChanged(EventArgs.Empty); + } + } + public event EventHandler AutoSizeChanged; + private void OnAutoSizeChanged(EventArgs e) + { + TextureValid = false; + if (AutoSizeChanged != null) + AutoSizeChanged.Invoke(this, e); + } + #endregion + + #region DrawImage + private bool _drawImage; + public bool DrawImage + { + get { return _drawImage; } + set + { + if (_drawImage == value) + return; + _drawImage = value; + OnDrawImageChanged(); + } + } + public event EventHandler DrawImageChanged; + private void OnDrawImageChanged() + { + Redraw(); + if (DrawImageChanged != null) + DrawImageChanged.Invoke(this, EventArgs.Empty); + } + #endregion + + #region Index + private int _index; + public virtual int Index + { + get { return _index; } + set + { + if (_index == value) + return; + _index = value; + OnIndexChanged(); + } + } + public event EventHandler IndexChanged; + protected void OnIndexChanged() + { + OnSizeChanged(); + if (IndexChanged != null) + IndexChanged.Invoke(this, EventArgs.Empty); + } + #endregion + + #region Library + private MLibrary _library; + public MLibrary Library + { + get { return _library; } + set + { + if (_library == value) + return; + _library = value; + OnLibraryChanged(); + } + } + public event EventHandler LibraryChanged; + private void OnLibraryChanged() + { + OnSizeChanged(); + if (LibraryChanged != null) + LibraryChanged.Invoke(this, EventArgs.Empty); + } + #endregion + + #region PixelDetect + private bool _pixelDetect; + protected bool PixelDetect + { + set + { + if (_pixelDetect == value) + return; + _pixelDetect = value; + OnPixelDetectChanged(); + } + } + public event EventHandler PixelDetectChanged; + private void OnPixelDetectChanged() + { + Redraw(); + if (PixelDetectChanged != null) + PixelDetectChanged.Invoke(this, EventArgs.Empty); + } + #endregion + + #region UseOffset + private bool _useOffSet; + public bool UseOffSet + { + protected get { return _useOffSet; } + set + { + if (_useOffSet == value) + return; + _useOffSet = value; + OnUseOffSetChanged(); + } + } + public event EventHandler UseOffSetChanged; + private void OnUseOffSetChanged() + { + OnLocationChanged(); + if (UseOffSetChanged != null) + UseOffSetChanged.Invoke(this, EventArgs.Empty); + } + #endregion + + #region Size + public override Size Size + { + set { base.Size = value; } + get + { + if (AutoSize && Library != null && Index >= 0) + return Library.GetTrueSize(Index); + return base.Size; + } + } + + public override Size TrueSize + { + get + { + if (Library != null && Index >= 0) + return Library.GetTrueSize(Index); + return base.TrueSize; + } + } + + #endregion + + public MirImageControl() + { + _drawImage = true; + _index = -1; + ForeColour = Color.White; + _autoSize = true; + } + + protected internal override void DrawControl() + { + base.DrawControl(); + + if (DrawImage && Library != null) + { + bool oldGray = DXManager.GrayScale; + + if (GrayScale) + { + DXManager.SetGrayscale(true); + } + + if (Blending) + Library.DrawBlend(Index, DisplayLocation, ForeColour, false, BlendingRate); + else + Library.Draw(Index, DisplayLocation, ForeColour, false, Opacity); + + if (GrayScale) DXManager.SetGrayscale(oldGray); + } + } + + public override bool IsMouseOver(Point p) + { + return base.IsMouseOver(p) && (!_pixelDetect || Library.VisiblePixel(Index, p.Subtract(DisplayLocation),true) || Moving); + } + + #region Disposable + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + + if (!disposing) return; + + DrawImageChanged = null; + _drawImage = false; + + IndexChanged = null; + _index = 0; + + LibraryChanged = null; + Library = null; + + PixelDetectChanged = null; + _pixelDetect = false; + + UseOffSetChanged = null; + _useOffSet = false; + } + #endregion + } +} \ No newline at end of file diff --git a/Client/MirControls/MirInputBox.cs b/Client/MirControls/MirInputBox.cs new file mode 100644 index 0000000..6c9c97c --- /dev/null +++ b/Client/MirControls/MirInputBox.cs @@ -0,0 +1,149 @@ +using Client.MirGraphics; + +namespace Client.MirControls +{ + public sealed class MirInputBox : MirImageControl + { + public readonly MirLabel CaptionLabel; + public readonly MirButton OKButton, CancelButton; + public readonly MirTextBox InputTextBox; + + + public MirInputBox(string message) + { + Modal = true; + Movable = false; + + Index = 660; + Library = Libraries.Prguse; + + Location = new Point((Settings.ScreenWidth - Size.Width) / 2, (Settings.ScreenHeight - Size.Height) / 2); + + CaptionLabel = new MirLabel + { + DrawFormat = TextFormatFlags.WordBreak, + Location = new Point(25, 25), + Size = new Size(235, 40), + Parent = this, + Text = message, + }; + + InputTextBox = new MirTextBox + { + Parent = this, + Border = true, + BorderColour = Color.Lime, + Location = new Point(23, 86), + Size = new Size(240, 19), + MaxLength = 50, + }; + InputTextBox.SetFocus(); + InputTextBox.TextBox.KeyPress += MirInputBox_KeyPress; + + OKButton = new MirButton + { + HoverIndex = 201, + Index = 200, + Library = Libraries.Prguse, + Location = new Point(60, 123), + Parent = this, + PressedIndex = 202, + }; + + CancelButton = new MirButton + { + HoverIndex = 204, + Index = 203, + Library = Libraries.Prguse, + Location = new Point(160, 123), + Parent = this, + PressedIndex = 205, + }; + CancelButton.Click += DisposeDialog; + } + + void MirInputBox_KeyPress(object sender, KeyPressEventArgs e) + { + if (e.KeyChar == (char)Keys.Enter) + { + if (OKButton != null && !OKButton.IsDisposed) + OKButton.InvokeMouseClick(EventArgs.Empty); + e.Handled = true; + } + else if (e.KeyChar == (char)Keys.Escape) + { + if (CancelButton != null && !CancelButton.IsDisposed) + CancelButton.InvokeMouseClick(EventArgs.Empty); + e.Handled = true; + } + } + void DisposeDialog(object sender, EventArgs e) + { + Dispose(); + } + + public override void OnKeyDown(KeyEventArgs e) + { + base.OnKeyDown(e); + e.Handled = true; + } + public override void OnKeyUp(KeyEventArgs e) + { + base.OnKeyUp(e); + e.Handled = true; + } + public override void OnKeyPress(KeyPressEventArgs e) + { + base.OnKeyPress(e); + + if (e.KeyChar == (char)Keys.Escape) + { + if (CancelButton != null && !CancelButton.IsDisposed) + CancelButton.InvokeMouseClick(EventArgs.Empty); + } + else if (e.KeyChar == (char)Keys.Enter) + { + if (OKButton != null && !OKButton.IsDisposed) + OKButton.InvokeMouseClick(EventArgs.Empty); + + } + e.Handled = true; + } + + public override void Show() + { + if (Parent != null) return; + + Parent = MirScene.ActiveScene; + + Highlight(); + + for (int i = 0; i < Program.Form.Controls.Count; i++) + { + TextBox T = Program.Form.Controls[i] as TextBox; + if (T != null && T.Tag != null && T.Tag != null) + ((MirTextBox)T.Tag).DialogChanged(); + } + } + + + #region Disposable + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + + if (!disposing) return; + + for (int i = 0; i < Program.Form.Controls.Count; i++) + { + TextBox T = (TextBox)Program.Form.Controls[i]; + if (T != null && T.Tag != null && T.Tag != null) + ((MirTextBox)T.Tag).DialogChanged(); + } + } + + #endregion + + } +} diff --git a/Client/MirControls/MirItemCell.cs b/Client/MirControls/MirItemCell.cs new file mode 100644 index 0000000..68c9431 --- /dev/null +++ b/Client/MirControls/MirItemCell.cs @@ -0,0 +1,1597 @@ +using Client.MirGraphics; +using Client.MirNetwork; +using Client.MirObjects; +using Client.MirScenes; +using Client.MirSounds; +using Client.MirScenes.Dialogs; +using C = ClientPackets; + +namespace Client.MirControls +{ + public sealed class MirItemCell : MirImageControl + { + public UserItem Item + { + get + { + if (GridType == MirGridType.DropPanel) + return NPCDropDialog.TargetItem; + + if (GridType == MirGridType.TrustMerchant) + return TrustMerchantDialog.SellItemSlot; + + if (ItemArray != null && _itemSlot >= 0 && _itemSlot < ItemArray.Length) + return ItemArray[_itemSlot]; + return null; + } + set + { + if (GridType == MirGridType.DropPanel) + NPCDropDialog.TargetItem = value; + else if (GridType == MirGridType.TrustMerchant) + TrustMerchantDialog.SellItemSlot = value; + else if (ItemArray != null && _itemSlot >= 0 && _itemSlot < ItemArray.Length) + ItemArray[_itemSlot] = value; + + SetEffect(); + Redraw(); + } + } + + public UserItem ShadowItem + { + get + { + return null; + } + } + + public UserItem[] ItemArray + { + get + { + switch (GridType) + { + case MirGridType.Inventory: + return MapObject.User.Inventory; + case MirGridType.Equipment: + return MapObject.User.Equipment; + case MirGridType.Storage: + return GameScene.Storage; + case MirGridType.GuildStorage: + return GameScene.GuildStorage; + case MirGridType.Trade: + return GameScene.User.Trade; + case MirGridType.GuestTrade: + return GuestTradeDialog.GuestItems; + case MirGridType.QuestInventory: + return MapObject.User.QuestInventory; + case MirGridType.Mail: + return MailComposeParcelDialog.Items; + case MirGridType.Refine: + return GameScene.Refine; + + default: + throw new NotImplementedException(); + } + + } + } + + public override bool Border + { + get { return (GameScene.SelectedCell == this || MouseControl == this || Locked) && !(GridType == MirGridType.DropPanel); } + } + + private bool _locked; + + public bool Locked + { + get { return _locked; } + set + { + if (_locked == value) return; + _locked = value; + Redraw(); + } + } + + + + #region GridType + + private MirGridType _gridType; + public event EventHandler GridTypeChanged; + public MirGridType GridType + { + get { return _gridType; } + set + { + if (_gridType == value) return; + _gridType = value; + OnGridTypeChanged(); + } + } + + private void OnGridTypeChanged() + { + if (GridTypeChanged != null) + GridTypeChanged.Invoke(this, EventArgs.Empty); + } + #endregion + + #region ItemSlot + + private int _itemSlot; + public event EventHandler ItemSlotChanged; + public int ItemSlot + { + get { return _itemSlot; } + set + { + if (_itemSlot == value) return; + _itemSlot = value; + OnItemSlotChanged(); + } + } + + private void OnItemSlotChanged() + { + if (ItemSlotChanged != null) + ItemSlotChanged.Invoke(this, EventArgs.Empty); + } + #endregion + + #region Count Label + + private MirLabel CountLabel { get; set; } + + #endregion + + public MirItemCell() + { + Size = new Size(54, 40); + GridType = MirGridType.None; + DrawImage = false; + + BorderColour = Color.MediumAquamarine; + + BackColour = Color.FromArgb(255, 255, 125, 125); + Opacity = 0.5F; + DrawControlTexture = true; + Library = Libraries.Items; + } + + public void SetEffect() + { + //put effect stuff here?? + } + + + public override void OnMouseClick(MouseEventArgs e) + { + if (Locked || GameScene.Observing) return; + + if (GameScene.PickedUpGold || GridType == MirGridType.QuestInventory) return; + + if (GameScene.SelectedCell == null && (GridType == MirGridType.Mail)) return; + + base.OnMouseClick(e); + + Redraw(); + + switch (e.Button) + { + case MouseButtons.Right: + if (CMain.Shift) + { + if (Item != null) + { + string text = string.Format("<{0}> ", Item.FriendlyName); + + if (GameScene.Scene.ChatDialog.ChatTextBox.Text.Length + text.Length > Globals.MaxChatLength) + { + GameScene.Scene.ChatDialog.ReceiveChat("Unable to link item, message exceeds allowed length", ChatType.System); + return; + } + + GameScene.Scene.ChatDialog.LinkedItems.Add(new ChatItem { UniqueID = Item.UniqueID, Title = Item.FriendlyName, Grid = GridType }); + GameScene.Scene.ChatDialog.SetChatText(text); + } + + break; + } + + if (GridType == MirGridType.Inventory && GameScene.Scene.NPCGoodsDialog.Visible) + { + SellItem(); + return; + } + + UseItem(); + break; + case MouseButtons.Left: + if (Item != null && GameScene.SelectedCell == null) + PlayItemSound(); + + if (CMain.Shift) + { + if (GridType == MirGridType.Inventory || GridType == MirGridType.Storage) + { + if (GameScene.SelectedCell == null && Item != null) + { + if (FreeSpace() == 0) + { + GameScene.Scene.ChatDialog.ReceiveChat("No room to split stack.", ChatType.System); + return; + } + + if (Item.Count > 1) + { + MirAmountBox amountBox = new MirAmountBox("Split Amount:", Item.Image, Libraries.Items, (uint)(Item.Count - 1)); + + amountBox.OKButton.Click += (o, a) => + { + if (amountBox.Amount == 0 || amountBox.Amount >= Item.Count) return; + Network.Enqueue(new C.SplitItem { Grid = GridType, UniqueID = Item.UniqueID, Count = (ushort)amountBox.Amount }); + Locked = true; + }; + + amountBox.Show(); + } + } + } + } + + //Add support for ALT + click to sell quickly + else if (CMain.Alt && GameScene.Scene.NPCDropDialog.Visible && GridType == MirGridType.Inventory) // alt sell/repair + { + MoveItem(); // pickup item + GameScene.Scene.NPCDropDialog.ItemCell.OnMouseClick(e); // emulate click to drop control + GameScene.Scene.NPCDropDialog.ConfirmButton.OnMouseClick(e); //emulate OK to confirm trade + } + //Add support for ALT + click to sell quickly + + else MoveItem(); + break; + } + } + public override void OnMouseDoubleClick(MouseEventArgs e) + { + if (Locked) return; + + if (GameScene.PickedUpGold || GridType == MirGridType.TrustMerchant) return; + + base.OnMouseClick(e); + + Redraw(); + + GameScene.SelectedCell = null; + UseItem(); + } + + + private void BuyItem() + { + if (Item == null || Item.Price() * GameScene.NPCRate > GameScene.Gold) return; + + MirAmountBox amountBox; + if (Item.Count > 1) + { + amountBox = new MirAmountBox("Purchase Amount:", Item.Image, Libraries.Items, Item.Count); + + amountBox.OKButton.Click += (o, e) => + { + Network.Enqueue(new C.BuyItemBack { UniqueID = Item.UniqueID, Count = (ushort)amountBox.Amount }); + Locked = true; + }; + } + else + { + amountBox = new MirAmountBox("Purchase", Item.Image, Libraries.Items, int.MaxValue); + + amountBox.OKButton.Click += (o, e) => + { + Network.Enqueue(new C.BuyItemBack { UniqueID = Item.UniqueID, Count = 1 }); + Locked = true; + }; + } + + amountBox.Show(); + } + + public void UseItem() + { + if (Locked || GridType == MirGridType.TrustMerchant || GridType == MirGridType.GuildStorage) return; + + if (GridType == MirGridType.BuyBack) + { + BuyItem(); + return; + } + + if (GridType == MirGridType.Equipment) + { + RemoveItem(); + return; + } + + if ((GridType != MirGridType.Inventory && GridType != MirGridType.Storage) || Item == null || !CanUseItem() || GameScene.SelectedCell == this) return; + + CharacterDialog dialog = GameScene.Scene.CharacterDialog; + UserObject actor = GameScene.User; + if (Item.SoulBoundId != -1 && MapObject.User.Id != Item.SoulBoundId) + return; + + switch (Item.Info.Type) + { + case ItemType.Weapon: + if (dialog.Grid[(int)EquipmentSlot.Weapon].CanWearItem(actor, Item)) + { + Network.Enqueue(new C.EquipItem { Grid = GridType, UniqueID = Item.UniqueID, To = (int)EquipmentSlot.Weapon }); + dialog.Grid[(int)EquipmentSlot.Weapon].Locked = true; + Locked = true; + } + break; + case ItemType.Armour: + if (dialog.Grid[(int)EquipmentSlot.Armour].CanWearItem(actor, Item)) + { + Network.Enqueue(new C.EquipItem { Grid = GridType, UniqueID = Item.UniqueID, To = (int)EquipmentSlot.Armour }); + dialog.Grid[(int)EquipmentSlot.Armour].Locked = true; + Locked = true; + } + break; + case ItemType.Helmet: + if (dialog.Grid[(int)EquipmentSlot.Helmet].CanWearItem(actor, Item)) + { + Network.Enqueue(new C.EquipItem { Grid = GridType, UniqueID = Item.UniqueID, To = (int)EquipmentSlot.Helmet }); + dialog.Grid[(int)EquipmentSlot.Helmet].Locked = true; + Locked = true; + } + break; + case ItemType.Necklace: + if (dialog.Grid[(int)EquipmentSlot.Necklace].CanWearItem(actor, Item)) + { + Network.Enqueue(new C.EquipItem { Grid = GridType, UniqueID = Item.UniqueID, To = (int)EquipmentSlot.Necklace }); + dialog.Grid[(int)EquipmentSlot.Necklace].Locked = true; + Locked = true; + } + break; + case ItemType.Bracelet: + if ((dialog.Grid[(int)EquipmentSlot.BraceletR].Item == null) && dialog.Grid[(int)EquipmentSlot.BraceletR].CanWearItem(actor, Item)) + { + Network.Enqueue(new C.EquipItem { Grid = GridType, UniqueID = Item.UniqueID, To = (int)EquipmentSlot.BraceletR }); + dialog.Grid[(int)EquipmentSlot.BraceletR].Locked = true; + Locked = true; + } + else if (dialog.Grid[(int)EquipmentSlot.BraceletL].CanWearItem(actor, Item)) + { + Network.Enqueue(new C.EquipItem { Grid = GridType, UniqueID = Item.UniqueID, To = (int)EquipmentSlot.BraceletL }); + dialog.Grid[(int)EquipmentSlot.BraceletL].Locked = true; + Locked = true; + } + break; + case ItemType.Ring: + if (dialog.Grid[(int)EquipmentSlot.RingR].Item == null && dialog.Grid[(int)EquipmentSlot.RingR].CanWearItem(actor, Item)) + { + Network.Enqueue(new C.EquipItem { Grid = GridType, UniqueID = Item.UniqueID, To = (int)EquipmentSlot.RingR }); + dialog.Grid[(int)EquipmentSlot.RingR].Locked = true; + Locked = true; + } + else if (dialog.Grid[(int)EquipmentSlot.RingL].CanWearItem(actor, Item)) + { + Network.Enqueue(new C.EquipItem { Grid = GridType, UniqueID = Item.UniqueID, To = (int)EquipmentSlot.RingL }); + dialog.Grid[(int)EquipmentSlot.RingL].Locked = true; + Locked = true; + } + break; + case ItemType.Potion: + case ItemType.Scroll: + case ItemType.Book: + case ItemType.Script: + if (CanUseItem() && (GridType == MirGridType.Inventory)) + { + if (CMain.Time < GameScene.UseItemTime) return; + if (Item.Info.Type == ItemType.Potion && Item.Info.Shape == 4) + { + MirMessageBox messageBox = new MirMessageBox("Are you use you want to use this Potion?", MirMessageBoxButtons.YesNo); + messageBox.YesButton.Click += (o, e) => + { + Network.Enqueue(new C.UseItem { UniqueID = Item.UniqueID, Grid = GridType }); + + if (Item.Count == 1 && ItemSlot < GameScene.User.BeltIdx) + { + for (int i = GameScene.User.BeltIdx; i < GameScene.User.Inventory.Length; i++) + if (ItemArray[i] != null && ItemArray[i].Info == Item.Info) + { + Network.Enqueue(new C.MoveItem { Grid = MirGridType.Inventory, From = i, To = ItemSlot }); + GameScene.Scene.InventoryDialog.Grid[i - GameScene.User.BeltIdx].Locked = true; + break; + } + } + + GameScene.UseItemTime = CMain.Time + 100; + PlayItemSound(); + }; + + messageBox.Show(); + return; + } + + Network.Enqueue(new C.UseItem { UniqueID = Item.UniqueID, Grid = GridType }); + + if (Item.Count == 1 && ItemSlot < GameScene.User.BeltIdx) + { + for (int i = GameScene.User.BeltIdx; i < GameScene.User.Inventory.Length; i++) + if (ItemArray[i] != null && ItemArray[i].Info == Item.Info) + { + Network.Enqueue(new C.MoveItem { Grid = MirGridType.Inventory, From = i, To = ItemSlot }); + GameScene.Scene.InventoryDialog.Grid[i - GameScene.User.BeltIdx].Locked = true; + break; + } + } + + Locked = true; + } + break; + } + + GameScene.UseItemTime = CMain.Time + 300; + PlayItemSound(); + } + + public void RemoveItem() + { + int count = 0; + + for (int i = 0; i < GameScene.User.Inventory.Length; i++) + { + MirItemCell itemCell = i < GameScene.User.BeltIdx ? GameScene.Scene.BeltDialog.Grid[i] : GameScene.Scene.InventoryDialog.Grid[i - GameScene.User.BeltIdx]; + + if (itemCell.Item == null) count++; + } + + if (Item == null || count < 1) return; + + if (Item.Info.StackSize > 1) + { + UserItem item = null; + + for (int i = 0; i < GameScene.User.Inventory.Length; i++) + { + MirItemCell itemCell = i < GameScene.User.BeltIdx ? GameScene.Scene.BeltDialog.Grid[i] : GameScene.Scene.InventoryDialog.Grid[i - GameScene.User.BeltIdx]; + + if (itemCell.Item == null || itemCell.Item.Info != Item.Info) continue; + + item = itemCell.Item; + } + + if (item != null && ((item.Count + Item.Count) <= item.Info.StackSize)) + { + //Merge. + Network.Enqueue(new C.MergeItem { GridFrom = GridType, GridTo = MirGridType.Inventory, IDFrom = Item.UniqueID, IDTo = item.UniqueID }); + + Locked = true; + + PlayItemSound(); + return; + } + } + + for (int i = 0; i < GameScene.User.Inventory.Length; i++) + { + MirItemCell itemCell; + + itemCell = i < (GameScene.User.Inventory.Length - GameScene.User.BeltIdx) ? GameScene.Scene.InventoryDialog.Grid[i] : GameScene.Scene.BeltDialog.Grid[i - GameScene.User.Inventory.Length]; + + if (itemCell.Item != null) continue; + + Network.Enqueue(new C.RemoveItem { Grid = MirGridType.Inventory, UniqueID = Item.UniqueID, To = itemCell.ItemSlot }); + + Locked = true; + + PlayItemSound(); + break; + } + } + + private void MoveItem() + { + if (GridType == MirGridType.BuyBack || GridType == MirGridType.DropPanel || GridType == MirGridType.TrustMerchant) return; + + if (GameScene.SelectedCell != null) + { + if (GameScene.SelectedCell.Item == null || GameScene.SelectedCell == this) + { + GameScene.SelectedCell = null; + return; + } + + switch (GridType) + { + #region To Inventory + case MirGridType.Inventory: // To Inventory + switch (GameScene.SelectedCell.GridType) + { + #region From Inventory + case MirGridType.Inventory: //From Invenotry + if (Item != null) + { + if (CMain.Ctrl) + { + MirMessageBox messageBox = new MirMessageBox("Do you want to try and combine these items?", MirMessageBoxButtons.YesNo); + messageBox.YesButton.Click += (o, e) => + { + //Combine + Network.Enqueue(new C.CombineItem { Grid = GameScene.SelectedCell.GridType, IDFrom = GameScene.SelectedCell.Item.UniqueID, IDTo = Item.UniqueID }); + Locked = true; + GameScene.SelectedCell.Locked = true; + GameScene.SelectedCell = null; + }; + + messageBox.Show(); + return; + } + + if (GameScene.SelectedCell.Item.Info == Item.Info && Item.Count < Item.Info.StackSize) + { + //Merge + Network.Enqueue(new C.MergeItem { GridFrom = GameScene.SelectedCell.GridType, GridTo = GridType, IDFrom = GameScene.SelectedCell.Item.UniqueID, IDTo = Item.UniqueID }); + + Locked = true; + GameScene.SelectedCell.Locked = true; + GameScene.SelectedCell = null; + return; + } + } + + Network.Enqueue(new C.MoveItem { Grid = GridType, From = GameScene.SelectedCell.ItemSlot, To = ItemSlot }); + + Locked = true; + GameScene.SelectedCell.Locked = true; + GameScene.SelectedCell = null; + return; + #endregion + #region From Equipment + case MirGridType.Equipment: //From Equipment + if (!CanRemoveItem(GameScene.SelectedCell.Item)) + { + GameScene.SelectedCell = null; + return; + } + if (Item == null) + { + Network.Enqueue(new C.RemoveItem { Grid = GridType, UniqueID = GameScene.SelectedCell.Item.UniqueID, To = ItemSlot }); + + Locked = true; + GameScene.SelectedCell.Locked = true; + GameScene.SelectedCell = null; + return; + } + + for (int x = 6; x < ItemArray.Length; x++) + if (ItemArray[x] == null) + { + Network.Enqueue(new C.RemoveItem { Grid = GridType, UniqueID = GameScene.SelectedCell.Item.UniqueID, To = x }); + + MirItemCell temp = x < GameScene.User.BeltIdx ? GameScene.Scene.BeltDialog.Grid[x] : GameScene.Scene.InventoryDialog.Grid[x - GameScene.User.BeltIdx]; + + if (temp != null) temp.Locked = true; + GameScene.SelectedCell.Locked = true; + GameScene.SelectedCell = null; + return; + } + break; + #endregion + #region From Storage + case MirGridType.Storage: //From Storage + if (Item != null) + { + if (GameScene.SelectedCell.Item.Info == Item.Info && Item.Count < Item.Info.StackSize) + { + Network.Enqueue(new C.MergeItem { GridFrom = GameScene.SelectedCell.GridType, GridTo = GridType, IDFrom = GameScene.SelectedCell.Item.UniqueID, IDTo = Item.UniqueID }); + + Locked = true; + GameScene.SelectedCell.Locked = true; + GameScene.SelectedCell = null; + return; + } + } + + + if (Item == null) + { + Network.Enqueue(new C.TakeBackItem { From = GameScene.SelectedCell.ItemSlot, To = ItemSlot }); + + Locked = true; + GameScene.SelectedCell.Locked = true; + GameScene.SelectedCell = null; + return; + } + + for (int x = 6; x < ItemArray.Length; x++) + if (ItemArray[x] == null) + { + Network.Enqueue(new C.TakeBackItem { From = GameScene.SelectedCell.ItemSlot, To = x }); + + MirItemCell temp = x < GameScene.User.BeltIdx ? GameScene.Scene.BeltDialog.Grid[x] : GameScene.Scene.InventoryDialog.Grid[x - GameScene.User.BeltIdx]; + + if (temp != null) temp.Locked = true; + GameScene.SelectedCell.Locked = true; + GameScene.SelectedCell = null; + return; + } + break; + #endregion + #region From Guild Storage + case MirGridType.GuildStorage: + if (Item != null) + { + GameScene.Scene.ChatDialog.ReceiveChat("You cannot swap items.", ChatType.System); + return; + } + if (!GuildDialog.MyOptions.HasFlag(GuildRankOptions.CanRetrieveItem)) + { + GameScene.Scene.ChatDialog.ReceiveChat("Insufficient rights to retrieve items.", ChatType.System); + return; + } + Network.Enqueue(new C.GuildStorageItemChange { Type = 1, From = GameScene.SelectedCell.ItemSlot, To = ItemSlot }); + Locked = true; + GameScene.SelectedCell.Locked = true; + GameScene.SelectedCell = null; + break; + #endregion + #region From Trade + case MirGridType.Trade: //From Trade + + if (Item != null) + { + if (GameScene.SelectedCell.Item.Info == Item.Info && Item.Count < Item.Info.StackSize) + { + Network.Enqueue(new C.MergeItem { GridFrom = GameScene.SelectedCell.GridType, GridTo = GridType, IDFrom = GameScene.SelectedCell.Item.UniqueID, IDTo = Item.UniqueID }); + + Locked = true; + GameScene.SelectedCell.Locked = true; + GameScene.SelectedCell = null; + return; + } + } + + + if (Item == null) + { + Network.Enqueue(new C.RetrieveTradeItem { From = GameScene.SelectedCell.ItemSlot, To = ItemSlot }); + + Locked = true; + GameScene.SelectedCell.Locked = true; + GameScene.SelectedCell = null; + return; + } + + for (int x = 6; x < ItemArray.Length; x++) + if (ItemArray[x] == null) + { + Network.Enqueue(new C.RetrieveTradeItem { From = GameScene.SelectedCell.ItemSlot, To = x }); + + MirItemCell temp = x < GameScene.User.BeltIdx ? GameScene.Scene.BeltDialog.Grid[x] : GameScene.Scene.InventoryDialog.Grid[x - GameScene.User.BeltIdx]; + + if (temp != null) temp.Locked = true; + GameScene.SelectedCell.Locked = true; + GameScene.SelectedCell = null; + return; + } + break; + #endregion + #region From Refine + case MirGridType.Refine: //From AwakenItem + + if (Item != null) + { + if (GameScene.SelectedCell.Item.Info == Item.Info && Item.Count < Item.Info.StackSize) + { + Network.Enqueue(new C.MergeItem { GridFrom = GameScene.SelectedCell.GridType, GridTo = GridType, IDFrom = GameScene.SelectedCell.Item.UniqueID, IDTo = Item.UniqueID }); + + Locked = true; + GameScene.SelectedCell.Locked = true; + GameScene.SelectedCell = null; + return; + } + } + + + if (Item == null) + { + Network.Enqueue(new C.RetrieveRefineItem { From = GameScene.SelectedCell.ItemSlot, To = ItemSlot }); + + Locked = true; + GameScene.SelectedCell.Locked = true; + GameScene.SelectedCell = null; + return; + } + + for (int x = 6; x < ItemArray.Length; x++) + if (ItemArray[x] == null) + { + Network.Enqueue(new C.RetrieveRefineItem { From = GameScene.SelectedCell.ItemSlot, To = x }); + + MirItemCell temp = x < GameScene.User.BeltIdx ? GameScene.Scene.BeltDialog.Grid[x] : GameScene.Scene.InventoryDialog.Grid[x - GameScene.User.BeltIdx]; + + if (temp != null) temp.Locked = true; + GameScene.SelectedCell.Locked = true; + GameScene.SelectedCell = null; + return; + } + break; + #endregion + } + break; + #endregion + #region To Equipment + case MirGridType.Equipment: //To Equipment + + if (GameScene.SelectedCell.GridType != MirGridType.Inventory && GameScene.SelectedCell.GridType != MirGridType.Storage) return; + + if (CorrectSlot(GameScene.SelectedCell.Item, GameScene.SelectedCell.GridType)) + { + if (CanWearItem(GameScene.User, GameScene.SelectedCell.Item)) + { + Network.Enqueue(new C.EquipItem { Grid = GameScene.SelectedCell.GridType, UniqueID = GameScene.SelectedCell.Item.UniqueID, To = ItemSlot }); + Locked = true; + GameScene.SelectedCell.Locked = true; + } + GameScene.SelectedCell = null; + } + return; + #endregion + #region To Storage + case MirGridType.Storage: //To Storage + switch (GameScene.SelectedCell.GridType) + { + #region From Inventory + case MirGridType.Inventory: //From Invenotry + if (Item != null) + { + if (GameScene.SelectedCell.Item.Info == Item.Info && Item.Count < Item.Info.StackSize) + { + Network.Enqueue(new C.MergeItem { GridFrom = GameScene.SelectedCell.GridType, GridTo = GridType, IDFrom = GameScene.SelectedCell.Item.UniqueID, IDTo = Item.UniqueID }); + + Locked = true; + GameScene.SelectedCell.Locked = true; + GameScene.SelectedCell = null; + return; + } + } + + + if (ItemArray[ItemSlot] == null) + { + Network.Enqueue(new C.StoreItem { From = GameScene.SelectedCell.ItemSlot, To = ItemSlot }); + Locked = true; + GameScene.SelectedCell.Locked = true; + GameScene.SelectedCell = null; + return; + } + + for (int x = 0; x < ItemArray.Length; x++) + if (ItemArray[x] == null) + { + Network.Enqueue(new C.StoreItem { From = GameScene.SelectedCell.ItemSlot, To = x }); + + MirItemCell temp = GameScene.Scene.StorageDialog.Grid[x]; + if (temp != null) temp.Locked = true; + GameScene.SelectedCell.Locked = true; + GameScene.SelectedCell = null; + return; + } + break; + #endregion + #region From Equipment + case MirGridType.Equipment: //From Equipment + if (Item != null) + { + if (GameScene.SelectedCell.Item.Info == Item.Info && Item.Count < Item.Info.StackSize) + { + //Merge. + Network.Enqueue(new C.MergeItem { GridFrom = GameScene.SelectedCell.GridType, GridTo = GridType, IDFrom = GameScene.SelectedCell.Item.UniqueID, IDTo = Item.UniqueID }); + + Locked = true; + GameScene.SelectedCell.Locked = true; + GameScene.SelectedCell = null; + return; + } + } + + if (!CanRemoveItem(GameScene.SelectedCell.Item)) + { + GameScene.SelectedCell = null; + return; + } + + if (Item == null) + { + Network.Enqueue(new C.RemoveItem { Grid = GridType, UniqueID = GameScene.SelectedCell.Item.UniqueID, To = ItemSlot }); + + Locked = true; + GameScene.SelectedCell.Locked = true; + GameScene.SelectedCell = null; + return; + } + + for (int x = 0; x < ItemArray.Length; x++) + if (ItemArray[x] == null) + { + Network.Enqueue(new C.RemoveItem { Grid = GridType, UniqueID = GameScene.SelectedCell.Item.UniqueID, To = x }); + + MirItemCell temp = GameScene.Scene.StorageDialog.Grid[x]; + if (temp != null) temp.Locked = true; + GameScene.SelectedCell.Locked = true; + GameScene.SelectedCell = null; + return; + } + break; + #endregion + #region From Storage + case MirGridType.Storage: + if (Item != null) + { + if (GameScene.SelectedCell.Item.Info == Item.Info && Item.Count < Item.Info.StackSize) + { + //Merge. + Network.Enqueue(new C.MergeItem { GridFrom = GameScene.SelectedCell.GridType, GridTo = GridType, IDFrom = GameScene.SelectedCell.Item.UniqueID, IDTo = Item.UniqueID }); + + Locked = true; + GameScene.SelectedCell.Locked = true; + GameScene.SelectedCell = null; + return; + } + } + + Network.Enqueue(new C.MoveItem { Grid = GridType, From = GameScene.SelectedCell.ItemSlot, To = ItemSlot }); + Locked = true; + GameScene.SelectedCell.Locked = true; + GameScene.SelectedCell = null; + return; + #endregion + + } + break; + + #endregion + #region To guild storage + case MirGridType.GuildStorage: //To Guild Storage + switch (GameScene.SelectedCell.GridType) + { + case MirGridType.GuildStorage: //From Guild Storage + if (GameScene.SelectedCell.GridType == MirGridType.GuildStorage) + { + if (!GuildDialog.MyOptions.HasFlag(GuildRankOptions.CanStoreItem)) + { + GameScene.Scene.ChatDialog.ReceiveChat("Insufficient rights to store items.", ChatType.System); + return; + } + + //if (ItemArray[ItemSlot] == null) + //{ + Network.Enqueue(new C.GuildStorageItemChange { Type = 2, From = GameScene.SelectedCell.ItemSlot, To = ItemSlot }); + Locked = true; + GameScene.SelectedCell.Locked = true; + GameScene.SelectedCell = null; + return; + //} + } + return; + + case MirGridType.Inventory: + + if (GameScene.SelectedCell.GridType == MirGridType.Inventory) + { + if (Item != null) + { + GameScene.Scene.ChatDialog.ReceiveChat("You cannot swap items.", ChatType.System); + return; + } + if (!GuildDialog.MyOptions.HasFlag(GuildRankOptions.CanStoreItem)) + { + GameScene.Scene.ChatDialog.ReceiveChat("Insufficient rights to store items.", ChatType.System); + return; + } + if (ItemArray[ItemSlot] == null) + { + Network.Enqueue(new C.GuildStorageItemChange { Type = 0, From = GameScene.SelectedCell.ItemSlot, To = ItemSlot }); + Locked = true; + GameScene.SelectedCell.Locked = true; + GameScene.SelectedCell = null; + return; + } + } + return; + } + break; + #endregion + #region To Trade + + case MirGridType.Trade: + if (Item != null && Item.Info.Bind.HasFlag(BindMode.DontTrade)) return; + + switch (GameScene.SelectedCell.GridType) + { + #region From Trade + case MirGridType.Trade: //From Trade + if (Item != null) + { + if (GameScene.SelectedCell.Item.Info == Item.Info && Item.Count < Item.Info.StackSize) + { + //Merge. + Network.Enqueue(new C.MergeItem { GridFrom = GameScene.SelectedCell.GridType, GridTo = GridType, IDFrom = GameScene.SelectedCell.Item.UniqueID, IDTo = Item.UniqueID }); + + Locked = true; + GameScene.SelectedCell.Locked = true; + GameScene.SelectedCell = null; + return; + } + } + + Network.Enqueue(new C.MoveItem { Grid = GridType, From = GameScene.SelectedCell.ItemSlot, To = ItemSlot }); + + Locked = true; + GameScene.SelectedCell.Locked = true; + GameScene.SelectedCell = null; + return; + #endregion + + #region From Inventory + case MirGridType.Inventory: //From Inventory + if (Item != null) + { + if (GameScene.SelectedCell.Item.Info == Item.Info && Item.Count < Item.Info.StackSize) + { + Network.Enqueue(new C.MergeItem { GridFrom = GameScene.SelectedCell.GridType, GridTo = GridType, IDFrom = GameScene.SelectedCell.Item.UniqueID, IDTo = Item.UniqueID }); + + Locked = true; + GameScene.SelectedCell.Locked = true; + GameScene.SelectedCell = null; + return; + } + } + + + if (ItemArray[ItemSlot] == null) + { + Network.Enqueue(new C.DepositTradeItem { From = GameScene.SelectedCell.ItemSlot, To = ItemSlot }); + Locked = true; + GameScene.SelectedCell.Locked = true; + GameScene.SelectedCell = null; + return; + } + + for (int x = 0; x < ItemArray.Length; x++) + if (ItemArray[x] == null) + { + Network.Enqueue(new C.DepositTradeItem { From = GameScene.SelectedCell.ItemSlot, To = x }); + + MirItemCell temp = GameScene.Scene.TradeDialog.Grid[x]; + if (temp != null) temp.Locked = true; + GameScene.SelectedCell.Locked = true; + GameScene.SelectedCell = null; + return; + } + break; + #endregion + } + break; + + #endregion + #region To Refine + + case MirGridType.Refine: + + switch (GameScene.SelectedCell.GridType) + { + #region From Refine + case MirGridType.Refine: //From Refine + if (Item != null) + { + if (GameScene.SelectedCell.Item.Info == Item.Info && Item.Count < Item.Info.StackSize) + { + //Merge. + Network.Enqueue(new C.MergeItem { GridFrom = GameScene.SelectedCell.GridType, GridTo = GridType, IDFrom = GameScene.SelectedCell.Item.UniqueID, IDTo = Item.UniqueID }); + + Locked = true; + GameScene.SelectedCell.Locked = true; + GameScene.SelectedCell = null; + return; + } + } + + Network.Enqueue(new C.MoveItem { Grid = GridType, From = GameScene.SelectedCell.ItemSlot, To = ItemSlot }); + Locked = true; + GameScene.SelectedCell.Locked = true; + GameScene.SelectedCell = null; + return; + #endregion + + #region From Inventory + case MirGridType.Inventory: //From Inventory + if (Item != null) + { + if (GameScene.SelectedCell.Item.Info == Item.Info && Item.Count < Item.Info.StackSize) + { + Network.Enqueue(new C.MergeItem { GridFrom = GameScene.SelectedCell.GridType, GridTo = GridType, IDFrom = GameScene.SelectedCell.Item.UniqueID, IDTo = Item.UniqueID }); + + Locked = true; + GameScene.SelectedCell.Locked = true; + GameScene.SelectedCell = null; + return; + } + } + + Network.Enqueue(new C.DepositRefineItem { From = GameScene.SelectedCell.ItemSlot, To = ItemSlot }); + Locked = true; + GameScene.SelectedCell.Locked = true; + GameScene.SelectedCell = null; + return; + #endregion + } + break; + + #endregion + #region To Mail + case MirGridType.Mail: //To Mail + if (GameScene.SelectedCell.GridType == MirGridType.Inventory) + { + if (Item != null) + { + GameScene.Scene.ChatDialog.ReceiveChat("You cannot swap items.", ChatType.System); + return; + } + + if (GameScene.SelectedCell.Item.Info.Bind.HasFlag(BindMode.DontTrade)) + { + GameScene.Scene.ChatDialog.ReceiveChat("You cannot mail this item.", ChatType.System); + return; + } + + if (ItemArray[ItemSlot] == null) + { + Item = GameScene.SelectedCell.Item; + GameScene.SelectedCell.Locked = true; + MailComposeParcelDialog.ItemsIdx[_itemSlot] = GameScene.SelectedCell.Item.UniqueID; + GameScene.SelectedCell = null; + GameScene.Scene.MailComposeParcelDialog.CalculatePostage(); + + return; + } + } + break; + #endregion + } + + return; + } + + if (Item != null) + { + GameScene.SelectedCell = this; + } + } + private void PlayItemSound() + { + if (Item == null) return; + + switch (Item.Info.Type) + { + case ItemType.Weapon: + SoundManager.PlaySound(SoundList.ClickWeapon); + break; + case ItemType.Armour: + SoundManager.PlaySound(SoundList.ClickArmour); + break; + case ItemType.Helmet: + SoundManager.PlaySound(SoundList.ClickHelmet); + break; + case ItemType.Necklace: + SoundManager.PlaySound(SoundList.ClickNecklace); + break; + case ItemType.Bracelet: + SoundManager.PlaySound(SoundList.ClickBracelet); + break; + case ItemType.Ring: + SoundManager.PlaySound(SoundList.ClickRing); + break; + case ItemType.Potion: + SoundManager.PlaySound(SoundList.ClickDrug); + break; + default: + SoundManager.PlaySound(SoundList.ClickItem); + break; + } + } + + private int FreeSpace() + { + int count = 0; + + for (int i = 0; i < ItemArray.Length; i++) + if (ItemArray[i] == null) count++; + + return count; + } + + + private bool CanRemoveItem(UserItem i) + { + return FreeSpace() > 0; + } + + private bool CorrectSlot(UserItem i, MirGridType grid) + { + ItemType type = i.Info.Type; + + switch (GridType) + { + case MirGridType.Equipment: + if (grid != MirGridType.Inventory && grid != MirGridType.Storage) + return false; + break; + } + + switch ((EquipmentSlot)ItemSlot) + { + case EquipmentSlot.Weapon: + return type == ItemType.Weapon; + case EquipmentSlot.Armour: + return type == ItemType.Armour; + case EquipmentSlot.Helmet: + return type == ItemType.Helmet; + case EquipmentSlot.Necklace: + return type == ItemType.Necklace; + case EquipmentSlot.BraceletL: + return i.Info.Type == ItemType.Bracelet; + case EquipmentSlot.BraceletR: + return i.Info.Type == ItemType.Bracelet; + case EquipmentSlot.RingL: + case EquipmentSlot.RingR: + return type == ItemType.Ring; + default: + return false; + } + + } + private bool CanUseItem() + { + if (Item == null) return false; + + UserObject actor = GameScene.User; + + switch (actor.Gender) + { + case MirGender.Male: + if (!Item.Info.RequiredGender.HasFlag(RequiredGender.Male)) + { + GameScene.Scene.ChatDialog.ReceiveChat(GameLanguage.NotFemale, ChatType.System); + return false; + } + break; + case MirGender.Female: + if (!Item.Info.RequiredGender.HasFlag(RequiredGender.Female)) + { + GameScene.Scene.ChatDialog.ReceiveChat(GameLanguage.NotMale, ChatType.System); + return false; + } + break; + } + + switch (actor.Class) + { + case MirClass.Warrior: + if (!Item.Info.RequiredClass.HasFlag(RequiredClass.Warrior)) + { + GameScene.Scene.ChatDialog.ReceiveChat("Warriors cannot use this item.", ChatType.System); + return false; + } + break; + case MirClass.Wizard: + if (!Item.Info.RequiredClass.HasFlag(RequiredClass.Wizard)) + { + GameScene.Scene.ChatDialog.ReceiveChat("Wizards cannot use this item.", ChatType.System); + return false; + } + break; + case MirClass.Taoist: + if (!Item.Info.RequiredClass.HasFlag(RequiredClass.Taoist)) + { + GameScene.Scene.ChatDialog.ReceiveChat("Taoists cannot use this item.", ChatType.System); + return false; + } + break; + } + + switch (Item.Info.RequiredType) + { + case RequiredType.Level: + if (actor.Level < Item.Info.RequiredAmount) + { + GameScene.Scene.ChatDialog.ReceiveChat(GameLanguage.LowLevel, ChatType.System); + return false; + } + break; + case RequiredType.MaxAC: + if (actor.Stats[Stat.MaxAC] < Item.Info.RequiredAmount) + { + GameScene.Scene.ChatDialog.ReceiveChat("You do not have enough AC.", ChatType.System); + return false; + } + break; + case RequiredType.MaxMAC: + if (actor.Stats[Stat.MaxMAC] < Item.Info.RequiredAmount) + { + GameScene.Scene.ChatDialog.ReceiveChat("You do not have enough MAC.", ChatType.System); + return false; + } + break; + case RequiredType.MaxDC: + if (actor.Stats[Stat.MaxDC] < Item.Info.RequiredAmount) + { + GameScene.Scene.ChatDialog.ReceiveChat(GameLanguage.LowDC, ChatType.System); + return false; + } + break; + case RequiredType.MaxMC: + if (actor.Stats[Stat.MaxMC] < Item.Info.RequiredAmount) + { + GameScene.Scene.ChatDialog.ReceiveChat(GameLanguage.LowMC, ChatType.System); + return false; + } + break; + case RequiredType.MaxSC: + if (actor.Stats[Stat.MaxSC] < Item.Info.RequiredAmount) + { + GameScene.Scene.ChatDialog.ReceiveChat(GameLanguage.LowSC, ChatType.System); + return false; + } + break; + case RequiredType.MaxLevel: + if (actor.Level > Item.Info.RequiredAmount) + { + GameScene.Scene.ChatDialog.ReceiveChat("You have exceeded the maximum level.", ChatType.System); + return false; + } + break; + case RequiredType.MinAC: + if (actor.Stats[Stat.MinAC] < Item.Info.RequiredAmount) + { + GameScene.Scene.ChatDialog.ReceiveChat("You do not have enough Base AC.", ChatType.System); + return false; + } + break; + case RequiredType.MinMAC: + if (actor.Stats[Stat.MinMAC] < Item.Info.RequiredAmount) + { + GameScene.Scene.ChatDialog.ReceiveChat("You do not have enough Base MAC.", ChatType.System); + return false; + } + break; + case RequiredType.MinDC: + if (actor.Stats[Stat.MinDC] < Item.Info.RequiredAmount) + { + GameScene.Scene.ChatDialog.ReceiveChat("You do not have enough Base DC.", ChatType.System); + return false; + } + break; + case RequiredType.MinMC: + if (actor.Stats[Stat.MinMC] < Item.Info.RequiredAmount) + { + GameScene.Scene.ChatDialog.ReceiveChat("You do not have enough Base MC.", ChatType.System); + return false; + } + break; + case RequiredType.MinSC: + if (actor.Stats[Stat.MinSC] < Item.Info.RequiredAmount) + { + GameScene.Scene.ChatDialog.ReceiveChat("You do not have enough Base SC.", ChatType.System); + return false; + } + break; + } + return true; + } + + private bool CanWearItem(UserObject actor, UserItem i) + { + if (i == null) return false; + + //If Can remove; + + switch (actor.Gender) + { + case MirGender.Male: + if (!i.Info.RequiredGender.HasFlag(RequiredGender.Male)) + { + GameScene.Scene.ChatDialog.ReceiveChat(GameLanguage.NotFemale, ChatType.System); + return false; + } + break; + case MirGender.Female: + if (!i.Info.RequiredGender.HasFlag(RequiredGender.Female)) + { + GameScene.Scene.ChatDialog.ReceiveChat(GameLanguage.NotMale, ChatType.System); + return false; + } + break; + } + + switch (actor.Class) + { + case MirClass.Warrior: + if (!i.Info.RequiredClass.HasFlag(RequiredClass.Warrior)) + { + GameScene.Scene.ChatDialog.ReceiveChat("Warriors cannot use this item.", ChatType.System); + return false; + } + break; + case MirClass.Wizard: + if (!i.Info.RequiredClass.HasFlag(RequiredClass.Wizard)) + { + GameScene.Scene.ChatDialog.ReceiveChat("Wizards cannot use this item.", ChatType.System); + return false; + } + break; + case MirClass.Taoist: + if (!i.Info.RequiredClass.HasFlag(RequiredClass.Taoist)) + { + GameScene.Scene.ChatDialog.ReceiveChat("Taoists cannot use this item.", ChatType.System); + return false; + } + break; + } + + switch (i.Info.RequiredType) + { + case RequiredType.Level: + if (actor.Level < i.Info.RequiredAmount) + { + GameScene.Scene.ChatDialog.ReceiveChat(GameLanguage.LowLevel, ChatType.System); + return false; + } + break; + case RequiredType.MaxAC: + if (actor.Stats[Stat.MaxAC] < i.Info.RequiredAmount) + { + GameScene.Scene.ChatDialog.ReceiveChat("You do not have enough AC.", ChatType.System); + return false; + } + break; + case RequiredType.MaxMAC: + if (actor.Stats[Stat.MaxMAC] < i.Info.RequiredAmount) + { + GameScene.Scene.ChatDialog.ReceiveChat("You do not have enough MAC.", ChatType.System); + return false; + } + break; + case RequiredType.MaxDC: + if (actor.Stats[Stat.MaxDC] < i.Info.RequiredAmount) + { + GameScene.Scene.ChatDialog.ReceiveChat(GameLanguage.LowDC, ChatType.System); + return false; + } + break; + case RequiredType.MaxMC: + if (actor.Stats[Stat.MaxMC] < i.Info.RequiredAmount) + { + GameScene.Scene.ChatDialog.ReceiveChat(GameLanguage.LowMC, ChatType.System); + return false; + } + break; + case RequiredType.MaxSC: + if (actor.Stats[Stat.MaxSC] < i.Info.RequiredAmount) + { + GameScene.Scene.ChatDialog.ReceiveChat(GameLanguage.LowSC, ChatType.System); + return false; + } + break; + case RequiredType.MaxLevel: + if (actor.Level > i.Info.RequiredAmount) + { + GameScene.Scene.ChatDialog.ReceiveChat("You have exceeded the maximum level.", ChatType.System); + return false; + } + break; + case RequiredType.MinAC: + if (actor.Stats[Stat.MinAC] < i.Info.RequiredAmount) + { + GameScene.Scene.ChatDialog.ReceiveChat("You do not have enough Base AC.", ChatType.System); + return false; + } + break; + case RequiredType.MinMAC: + if (actor.Stats[Stat.MinMAC] < i.Info.RequiredAmount) + { + GameScene.Scene.ChatDialog.ReceiveChat("You do not have enough Base MAC.", ChatType.System); + return false; + } + break; + case RequiredType.MinDC: + if (actor.Stats[Stat.MinDC] < i.Info.RequiredAmount) + { + GameScene.Scene.ChatDialog.ReceiveChat("You do not have enough Base DC.", ChatType.System); + return false; + } + break; + case RequiredType.MinMC: + if (actor.Stats[Stat.MinMC] < i.Info.RequiredAmount) + { + GameScene.Scene.ChatDialog.ReceiveChat("You do not have enough Base MC.", ChatType.System); + return false; + } + break; + case RequiredType.MinSC: + if (actor.Stats[Stat.MinSC] < i.Info.RequiredAmount) + { + GameScene.Scene.ChatDialog.ReceiveChat("You do not have enough Base SC.", ChatType.System); + return false; + } + break; + } + + if (i.Info.Type == ItemType.Weapon) + { + if (i.Weight - (Item != null ? Item.Weight : 0) + actor.CurrentHandWeight > actor.Stats[Stat.HandWeight]) + { + GameScene.Scene.ChatDialog.ReceiveChat(GameLanguage.TooHeavyToHold, ChatType.System); + return false; + } + } + else + { + if (i.Weight - (Item != null ? Item.Weight : 0) + actor.CurrentWearWeight > actor.Stats[Stat.WearWeight]) + { + GameScene.Scene.ChatDialog.ReceiveChat("It is too heavy to wear.", ChatType.System); + return false; + } + } + + return true; + } + + protected internal override void DrawControl() + { + + if (GridType == MirGridType.Inventory && ItemSlot < 6) + Libraries.Prguse.Draw(158 + ItemSlot, DisplayLocation.Add(new Point(-2, -1)), Color.White); + + Libraries.Prguse.Draw(1121, DisplayLocation.Add(new Point(-2, -1)), Color.White, UseOffSet, 0.8F); + + if (Item != null && GameScene.SelectedCell != this && Locked != true) + { + CreateDisposeLabel(); + + if (Library != null) + { + ushort image = Item.Image; + + Size imgSize = Library.GetTrueSize(image); + + Point offSet = new Point((Size.Width - imgSize.Width) / 2, (Size.Height - imgSize.Height) / 2); + + Library.Draw(image, DisplayLocation.Add(offSet), ForeColour, UseOffSet, 1F); + + if (Item.SealedInfo != null && Item.SealedInfo.ExpiryDate > CMain.Now) + { + Libraries.StateItems.Draw(3590, DisplayLocation.Add(new Point(2, 2)), Color.White, UseOffSet, 1F); + } + } + } + else if (Item != null && (GameScene.SelectedCell == this || Locked)) + { + CreateDisposeLabel(); + + if (Library != null) + { + ushort image = Item.Image; + + Size imgSize = Library.GetTrueSize(image); + + Point offSet = new Point((Size.Width - imgSize.Width) / 2, (Size.Height - imgSize.Height) / 2); + + Library.Draw(image, DisplayLocation.Add(offSet), Color.DimGray, UseOffSet, 0.8F); + } + } + else if (ShadowItem != null) + { + CreateDisposeLabel(); + + if (Library != null) + { + ushort image = ShadowItem.Info.Image; + + Size imgSize = Library.GetTrueSize(image); + + Point offSet = new Point((Size.Width - imgSize.Width) / 2, (Size.Height - imgSize.Height) / 2); + + Library.Draw(image, DisplayLocation.Add(offSet), Color.DimGray, UseOffSet, 0.8F); + } + } + else + DisposeCountLabel(); + } + + protected override void OnMouseEnter() + { + base.OnMouseEnter(); + if (Item != null) + GameScene.Scene.CreateItemLabel(Item); + else if (ShadowItem != null) + GameScene.Scene.CreateItemLabel(ShadowItem, false, ShadowItem.CurrentDura == ShadowItem.MaxDura); + } + protected override void OnMouseLeave() + { + base.OnMouseLeave(); + GameScene.Scene.DisposeItemLabel(); + GameScene.HoverItem = null; + } + + private void CreateDisposeLabel() + { + if (Item == null && ShadowItem == null) + return; + + if (Item != null && ShadowItem == null && Item.Info.StackSize <= 1) + { + DisposeCountLabel(); + return; + } + + if (CountLabel == null || CountLabel.IsDisposed) + { + CountLabel = new MirLabel + { + AutoSize = true, + ForeColour = Color.Yellow, + NotControl = true, + OutLine = false, + Parent = this, + }; + } + + if (ShadowItem != null) + { + CountLabel.ForeColour = (Item == null || ShadowItem.Count > Item.Count) ? Color.Red : Color.LimeGreen; + CountLabel.Text = string.Format("{0}/{1}", Item == null ? 0 : Item.Count, ShadowItem.Count); + } + else + { + CountLabel.Text = Item.Count.ToString("###0"); + } + + CountLabel.Location = new Point(Size.Width - CountLabel.Size.Width, Size.Height - CountLabel.Size.Height); + } + private void DisposeCountLabel() + { + if (CountLabel != null && !CountLabel.IsDisposed) + CountLabel.Dispose(); + CountLabel = null; + } + private void SellItem() + { + if (Item.Info.Bind.HasFlag(BindMode.DontSell)) + { + GameScene.Scene.ChatDialog.ReceiveChat("Cannot sell this item.", ChatType.System); + return; + } + if (GameScene.Gold + Item.Price() / 2 <= uint.MaxValue) + { + MirMessageBox messageBox = new MirMessageBox($"Sell {Item.FriendlyName} for {Item.Price() / 2} gold?", MirMessageBoxButtons.YesNo); + + messageBox.YesButton.Click += (o1, a) => + { + Network.Enqueue(new C.SellItem { UniqueID = Item.UniqueID, Count = Item.Count }); + Locked = true; + }; + + messageBox.Show(); + return; + } + GameScene.Scene.ChatDialog.ReceiveChat("Cannot carry anymore gold.", ChatType.System); + } + } +} diff --git a/Client/MirControls/MirLabel.cs b/Client/MirControls/MirLabel.cs new file mode 100644 index 0000000..2674934 --- /dev/null +++ b/Client/MirControls/MirLabel.cs @@ -0,0 +1,274 @@ +using System.Drawing.Drawing2D; +using System.Drawing.Imaging; +using System.Drawing.Text; +using Client.MirGraphics; +using SlimDX; +using SlimDX.Direct3D9; +using Font = System.Drawing.Font; + +namespace Client.MirControls +{ + public class MirLabel : MirControl + { + #region Auto Size + private bool _autoSize; + public bool AutoSize + { + get { return _autoSize; } + set + { + if (_autoSize == value) + return; + _autoSize = value; + OnAutoSizeChanged(EventArgs.Empty); + } + } + public event EventHandler AutoSizeChanged; + private void OnAutoSizeChanged(EventArgs e) + { + TextureValid = false; + GetSize(); + if (AutoSizeChanged != null) + AutoSizeChanged.Invoke(this, e); + } + #endregion + + #region DrawFormat + private TextFormatFlags _drawFormat; + public TextFormatFlags DrawFormat + { + get { return _drawFormat; } + set + { + _drawFormat = value; + OnDrawFormatChanged(EventArgs.Empty); + } + } + public event EventHandler DrawFormatChanged; + private void OnDrawFormatChanged(EventArgs e) + { + TextureValid = false; + + if (DrawFormatChanged != null) + DrawFormatChanged.Invoke(this, e); + } + #endregion + + #region Font + private Font _font; + public Font Font + { + get { return _font; } + set + { + _font = ScaleFont(value); + OnFontChanged(EventArgs.Empty); + } + } + public event EventHandler FontChanged; + private void OnFontChanged(EventArgs e) + { + TextureValid = false; + + GetSize(); + + if (FontChanged != null) + FontChanged.Invoke(this, e); + } + #endregion + + #region Out Line + private bool _outLine; + public bool OutLine + { + get { return _outLine; } + set + { + if (_outLine == value) + return; + _outLine = value; + OnOutLineChanged(EventArgs.Empty); + } + } + public event EventHandler OutLineChanged; + private void OnOutLineChanged(EventArgs e) + { + TextureValid = false; + GetSize(); + + if (OutLineChanged != null) + OutLineChanged.Invoke(this, e); + } + #endregion + + #region Out Line Colour + private Color _outLineColour; + public Color OutLineColour + { + get { return _outLineColour; } + set + { + if (_outLineColour == value) + return; + _outLineColour = value; + OnOutLineColourChanged(); + } + } + public event EventHandler OutLineColourChanged; + private void OnOutLineColourChanged() + { + TextureValid = false; + + if (OutLineColourChanged != null) + OutLineColourChanged.Invoke(this, EventArgs.Empty); + } + #endregion + + #region Size + + private void GetSize() + { + if (!AutoSize) + return; + + if (string.IsNullOrEmpty(_text)) + Size = Size.Empty; + else + { + Size = TextRenderer.MeasureText(CMain.Graphics, Text, Font); + //Size = new Size(Size.Width, Size.Height + 5); + + if (OutLine && Size != Size.Empty) + Size = new Size(Size.Width + 2, Size.Height + 2); + } + } + #endregion + + #region Label + private string _text; + public string Text + { + get { return _text; } + set + { + if (_text == value) + return; + + _text = value; + OnTextChanged(EventArgs.Empty); + } + } + public event EventHandler TextChanged; + private void OnTextChanged(EventArgs e) + { + DrawControlTexture = !string.IsNullOrEmpty(Text); + TextureValid = false; + Redraw(); + + GetSize(); + + if (TextChanged != null) + TextChanged.Invoke(this, e); + } + #endregion + + public MirLabel() + { + DrawControlTexture = true; + _drawFormat = TextFormatFlags.WordBreak; + + _font = ScaleFont(new Font(Settings.FontName, 8F)); + _outLine = true; + _outLineColour = Color.Black; + _text = string.Empty; + + } + + protected override unsafe void CreateTexture() + { + if (string.IsNullOrEmpty(Text)) + return; + + if (Size.Width == 0 || Size.Height == 0) + return; + + if (TextureSize != Size) + DisposeTexture(); + + if (ControlTexture == null || ControlTexture.Disposed) + { + DXManager.ControlList.Add(this); + + ControlTexture = new Texture(DXManager.Device, Size.Width, Size.Height, 1, Usage.None, Format.A8R8G8B8, Pool.Managed); + TextureSize = Size; + } + + DataRectangle stream = ControlTexture.LockRectangle(0, LockFlags.Discard); + using (Bitmap image = new Bitmap(Size.Width, Size.Height, Size.Width * 4, PixelFormat.Format32bppArgb, stream.Data.DataPointer)) + { + using (Graphics graphics = Graphics.FromImage(image)) + { + graphics.SmoothingMode = SmoothingMode.AntiAlias; + graphics.TextRenderingHint = TextRenderingHint.AntiAliasGridFit; + graphics.CompositingQuality = CompositingQuality.HighQuality; + graphics.InterpolationMode = InterpolationMode.NearestNeighbor; + graphics.PixelOffsetMode = PixelOffsetMode.HighQuality; + graphics.TextContrast = 0; + graphics.Clear(BackColour); + + + if (OutLine) + { + TextRenderer.DrawText(graphics, Text, Font, new Rectangle(1, 0, Size.Width, Size.Height), OutLineColour, DrawFormat); + TextRenderer.DrawText(graphics, Text, Font, new Rectangle(0, 1, Size.Width, Size.Height), OutLineColour, DrawFormat); + TextRenderer.DrawText(graphics, Text, Font, new Rectangle(2, 1, Size.Width, Size.Height), OutLineColour, DrawFormat); + TextRenderer.DrawText(graphics, Text, Font, new Rectangle(1, 2, Size.Width, Size.Height), OutLineColour, DrawFormat); + TextRenderer.DrawText(graphics, Text, Font, new Rectangle(1, 1, Size.Width, Size.Height), ForeColour, DrawFormat); + + //LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, this.Size.Width, this.Size.Height), Color.FromArgb(239, 243, 239), Color.White, LinearGradientMode.Vertical); + ////graphics.DrawString(Text, Font, brush, 37, 9); + ////graphics.DrawString(this.Text, this.Font, new SolidBrush(Color.Black), 39, 9, StringFormat.GenericDefault); + } + else + TextRenderer.DrawText(graphics, Text, Font, new Rectangle(1, 0, Size.Width, Size.Height), ForeColour, DrawFormat); + } + } + + ControlTexture.UnlockRectangle(0); + DXManager.Sprite.Flush(); + TextureValid = true; + } + + #region Disposable + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + + if (!disposing) return; + + AutoSizeChanged = null; + _autoSize = false; + + DrawFormatChanged = null; + _drawFormat = 0; + + FontChanged = null; + if (_font != null) + { + _font.Dispose(); + _font = null; + } + + OutLineChanged = null; + _outLine = false; + + OutLineColourChanged = null; + _outLineColour = Color.Empty; + + TextChanged = null; + _text = null; + } + #endregion + + } +} diff --git a/Client/MirControls/MirMessageBox.cs b/Client/MirControls/MirMessageBox.cs new file mode 100644 index 0000000..d00a033 --- /dev/null +++ b/Client/MirControls/MirMessageBox.cs @@ -0,0 +1,251 @@ +using Client.MirGraphics; + +namespace Client.MirControls +{ + public enum MirMessageBoxButtons { OK, OKCancel, YesNo, YesNoCancel, Cancel } + + public sealed class MirMessageBox : MirImageControl + { + public MirLabel Label; + public MirButton OKButton, CancelButton, NoButton, YesButton; + public MirMessageBoxButtons Buttons; + private MirGeneratedBox GeneratedBox; + public bool AllowKeyPress = true; + + public MirMessageBox(string message, MirMessageBoxButtons b = MirMessageBoxButtons.OK, bool allowKeys = true) + { + DrawImage = false; + ForeColour = Color.White; + Buttons = b; + Modal = true; + Movable = false; + AllowKeyPress = allowKeys; + + AutoSize = false; + Size = new Size(440, 160); + + Location = new Point((Settings.ScreenWidth - Size.Width) / 2, (Settings.ScreenHeight - Size.Height) / 2); + + GeneratedBox = new MirGeneratedBox(79, Size) + { + Parent = this, + Visible = true + }; + + Label = new MirLabel + { + AutoSize = false, + Location = new Point(10, 10), + Size = new Size(390, 110), + Parent = this, + Text = message + }; + + + switch (Buttons) + { + case MirMessageBoxButtons.OK: + OKButton = new MirButton + { + Index = 115, + Library = Libraries.Prguse, + Location = new Point(182, Size.Height - 35), + Parent = this, + PressedIndex = 116, + }; + OKButton.Click += (o, e) => Dispose(); + break; + case MirMessageBoxButtons.OKCancel: + OKButton = new MirButton + { + Index = 115, + Library = Libraries.Prguse, + Location = new Point(124, Size.Height - 35), + Parent = this, + PressedIndex = 116, + }; + OKButton.Click += (o, e) => Dispose(); + CancelButton = new MirButton + { + Index = 117, + Library = Libraries.Prguse, + Location = new Point(240, Size.Height - 35), + Parent = this, + PressedIndex = 118, + }; + CancelButton.Click += (o, e) => Dispose(); + break; + case MirMessageBoxButtons.YesNo: + YesButton = new MirButton + { + Index = 50, + Library = Libraries.Prguse, + Location = new Point(124, Size.Height - 35), + Parent = this, + PressedIndex = 51, + }; + YesButton.Click += (o, e) => Dispose(); + NoButton = new MirButton + { + Index = 52, + Library = Libraries.Prguse, + Location = new Point(240, Size.Height - 35), + Parent = this, + PressedIndex = 53, + }; + NoButton.Click += (o, e) => Dispose(); + break; + case MirMessageBoxButtons.YesNoCancel: + YesButton = new MirButton + { + Index = 50, + Library = Libraries.Prguse, + Location = new Point(124, Size.Height - 35), + Parent = this, + PressedIndex = 51, + }; + YesButton.Click += (o, e) => Dispose(); + NoButton = new MirButton + { + Index = 52, + Library = Libraries.Prguse, + Location = new Point(240, Size.Height - 35), + Parent = this, + PressedIndex = 53, + }; + NoButton.Click += (o, e) => Dispose(); + CancelButton = new MirButton + { + Index = 117, + Library = Libraries.Prguse, + Location = new Point(364, Size.Height - 35), + Parent = this, + PressedIndex = 118, + }; + CancelButton.Click += (o, e) => Dispose(); + break; + case MirMessageBoxButtons.Cancel: + CancelButton = new MirButton + { + Index = 117, + Library = Libraries.Prguse, + Location = new Point(182, Size.Height - 35), + Parent = this, + }; + CancelButton.Click += (o, e) => Dispose(); + break; + } + } + + public override void Show() + { + if (Parent != null) return; + + Parent = MirScene.ActiveScene; + + Highlight(); + + for (int i = 0; i < Program.Form.Controls.Count; i++) + { + TextBox T = Program.Form.Controls[i] as TextBox; + if (T != null && T.Tag != null && T.Tag != null) + ((MirTextBox)T.Tag).DialogChanged(); + } + } + + + public override void OnKeyDown(KeyEventArgs e) + { + if (AllowKeyPress) + { + base.OnKeyDown(e); + e.Handled = true; + } + } + public override void OnKeyUp(KeyEventArgs e) + { + if (AllowKeyPress) + { + base.OnKeyUp(e); + e.Handled = true; + } + } + public override void OnKeyPress(KeyPressEventArgs e) + { + base.OnKeyPress(e); + + if (AllowKeyPress) + { + if (e.KeyChar == (char)Keys.Escape) + { + switch (Buttons) + { + case MirMessageBoxButtons.OK: + if (OKButton != null && !OKButton.IsDisposed) OKButton.InvokeMouseClick(null); + break; + case MirMessageBoxButtons.OKCancel: + case MirMessageBoxButtons.YesNoCancel: + if (CancelButton != null && !CancelButton.IsDisposed) CancelButton.InvokeMouseClick(null); + break; + case MirMessageBoxButtons.YesNo: + if (NoButton != null && !NoButton.IsDisposed) NoButton.InvokeMouseClick(null); + break; + } + } + + else if (e.KeyChar == (char)Keys.Enter) + { + switch (Buttons) + { + case MirMessageBoxButtons.OK: + case MirMessageBoxButtons.OKCancel: + if (OKButton != null && !OKButton.IsDisposed) OKButton.InvokeMouseClick(null); + break; + case MirMessageBoxButtons.YesNoCancel: + case MirMessageBoxButtons.YesNo: + if (YesButton != null && !YesButton.IsDisposed) YesButton.InvokeMouseClick(null); + break; + + } + } + e.Handled = true; + } + } + + + public static void Show(string message, bool close = false) + { + MirMessageBox box = new MirMessageBox(message, MirMessageBoxButtons.OK); + + if (close) box.OKButton.Click += (o, e) => Program.Form.Close(); + + box.Show(); + } + + #region Disposable + + protected override void Dispose(bool disposing) + { + + base.Dispose(disposing); + + if (!disposing) return; + + Label = null; + OKButton = null; + CancelButton = null; + NoButton = null; + YesButton = null; + Buttons = 0; + + for (int i = 0; i < Program.Form.Controls.Count; i++) + { + TextBox T = (TextBox) Program.Form.Controls[i]; + if (T != null && T.Tag != null) + ((MirTextBox) T.Tag).DialogChanged(); + } + } + + #endregion + } +} diff --git a/Client/MirControls/MirScene.cs b/Client/MirControls/MirScene.cs new file mode 100644 index 0000000..0215e98 --- /dev/null +++ b/Client/MirControls/MirScene.cs @@ -0,0 +1,259 @@ +using Client.MirGraphics; +using Client.MirNetwork; +using Client.MirScenes; +using SlimDX.Direct3D9; +using S = ServerPackets; + +namespace Client.MirControls +{ + public abstract class MirScene : MirControl + { + public static MirScene ActiveScene = new LoginScene(); + + private static MouseButtons _buttons; + private static long _lastClickTime; + private static MirControl _clickedControl; + + protected MirScene() + { + DrawControlTexture = true; + BackColour = Color.Magenta; + Size = new Size(Settings.ScreenWidth, Settings.ScreenHeight); + } + + public override sealed Size Size + { + get { return base.Size; } + set { base.Size = value; } + } + + public override void Draw() + { + if (IsDisposed || !Visible) + return; + + OnBeforeShown(); + + DrawControl(); + + if (CMain.DebugBaseLabel != null && !CMain.DebugBaseLabel.IsDisposed) + CMain.DebugBaseLabel.Draw(); + + if (CMain.HintBaseLabel != null && !CMain.HintBaseLabel.IsDisposed) + CMain.HintBaseLabel.Draw(); + + OnShown(); + } + + protected override void CreateTexture() + { + if (Size != TextureSize) + DisposeTexture(); + + if (ControlTexture == null || ControlTexture.Disposed) + { + DXManager.ControlList.Add(this); + ControlTexture = new Texture(DXManager.Device, Size.Width, Size.Height, 1, Usage.RenderTarget, Format.A8R8G8B8, Pool.Default); + TextureSize = Size; + } + Surface oldSurface = DXManager.CurrentSurface; + Surface surface = ControlTexture.GetSurfaceLevel(0); + DXManager.SetSurface(surface); + + DXManager.Device.Clear(ClearFlags.Target, BackColour, 0, 0); + + BeforeDrawControl(); + DrawChildControls(); + AfterDrawControl(); + + DXManager.Sprite.Flush(); + + + DXManager.SetSurface(oldSurface); + TextureValid = true; + surface.Dispose(); + } + + public override void OnMouseDown(MouseEventArgs e) + { + if (!Enabled) + return; + + if (MouseControl != null && MouseControl != this) + MouseControl.OnMouseDown(e); + else + base.OnMouseDown(e); + } + public override void OnMouseUp(MouseEventArgs e) + { + if (!Enabled) + return; + if (MouseControl != null && MouseControl != this) + MouseControl.OnMouseUp(e); + else + base.OnMouseUp(e); + } + public override void OnMouseMove(MouseEventArgs e) + { + if (!Enabled) + return; + + if (MouseControl != null && MouseControl != this && MouseControl.Moving) + MouseControl.OnMouseMove(e); + else + base.OnMouseMove(e); + } + public override void OnMouseWheel(MouseEventArgs e) + { + if (!Enabled) + return; + + if (MouseControl != null && MouseControl != this) + MouseControl.OnMouseWheel(e); + else + base.OnMouseWheel(e); + } + + public override void OnMouseClick(MouseEventArgs e) + { + if (!Enabled) + return; + if (_buttons == e.Button) + { + if (_lastClickTime + SystemInformation.DoubleClickTime >= CMain.Time) + { + OnMouseDoubleClick(e); + return; + } + } + else + _lastClickTime = 0; + + if (ActiveControl != null && ActiveControl.IsMouseOver(CMain.MPoint) && ActiveControl != this) + ActiveControl.OnMouseClick(e); + else + base.OnMouseClick(e); + + _clickedControl = ActiveControl; + + _lastClickTime = CMain.Time; + _buttons = e.Button; + } + + public override void OnMouseDoubleClick(MouseEventArgs e) + { + if (!Enabled) + return; + _lastClickTime = 0; + _buttons = MouseButtons.None; + + if (ActiveControl != null && ActiveControl.IsMouseOver(CMain.MPoint) && ActiveControl != this) + { + if (ActiveControl == _clickedControl) + ActiveControl.OnMouseDoubleClick(e); + else + ActiveControl.OnMouseClick(e); + } + else + { + if (ActiveControl == _clickedControl) + base.OnMouseDoubleClick(e); + else + base.OnMouseClick(e); + } + } + + public override void Redraw() + { + TextureValid = false; + } + + public virtual void ProcessPacket(Packet p) + { + switch (p.Index) + { + case (short)ServerPacketIds.Disconnect: // Disconnected + Disconnect((S.Disconnect) p); + Network.Disconnect(); + break; + case (short)ServerPacketIds.NewItemInfo: + NewItemInfo((S.NewItemInfo) p); + break; + case (short)ServerPacketIds.NewChatItem: + NewChatItem((S.NewChatItem)p); + break; + case (short)ServerPacketIds.NewQuestInfo: + NewQuestInfo((S.NewQuestInfo)p); + break; + } + } + + private void NewItemInfo(S.NewItemInfo info) + { + GameScene.ItemInfoList.Add(info.Info); + } + + private void NewChatItem(S.NewChatItem p) + { + if (GameScene.ChatItemList.Any(x => x.UniqueID == p.Item.UniqueID)) return; + + GameScene.Bind(p.Item); + GameScene.ChatItemList.Add(p.Item); + } + + private void NewQuestInfo(S.NewQuestInfo info) + { + GameScene.QuestInfoList.Add(info.Info); + } + + private static void Disconnect(S.Disconnect p) + { + switch (p.Reason) + { + case 0: + MirMessageBox.Show(GameLanguage.ShuttingDown, true); + break; + case 1: + MirMessageBox.Show("Disconnected: Another user logged onto your account.", true); + break; + case 2: + MirMessageBox.Show("Disconnected: Packet Error.", true); + break; + case 3: + MirMessageBox.Show("Disconnected: Server Crashed.", true); + break; + case 4: + MirMessageBox.Show("Disconnected: Kicked by Admin.", true); + break; + case 5: + MirMessageBox.Show("Disconnected: Maximum connections reached.", true); + break; + case 6: + MirMessageBox.Show("Disconnected: Account has been Banned!.", true); + break; + } + + GameScene.LogTime = 0; + } + + public abstract void Process(); + + #region Disposable + + protected override void Dispose(bool disposing) + { + + base.Dispose(disposing); + + if (!disposing) return; + + if (ActiveScene == this) ActiveScene = null; + + _buttons = 0; + _lastClickTime = 0; + _clickedControl = null; + } + + #endregion + } +} \ No newline at end of file diff --git a/Client/MirControls/MirScrollingLabel.cs b/Client/MirControls/MirScrollingLabel.cs new file mode 100644 index 0000000..1d3ccdf --- /dev/null +++ b/Client/MirControls/MirScrollingLabel.cs @@ -0,0 +1,110 @@ +using System.Text.RegularExpressions; + +namespace Client.MirControls +{ + public class MirScrollingLabel : MirControl + { + private static readonly Regex R = new Regex(@"<(.*?/\@.*?)>"); + private static readonly Regex C = new Regex(@"{(.*?/.*?)}"); + + private readonly MirLabel[] _textLabel; + private readonly List _textButtons; + + public int Index; + + public Font Font = new Font(Settings.FontName, 8F); + public List CurrentLines = new List(); + public int VisibleLines = 8; + + public MirScrollingLabel() + { + _textLabel = new MirLabel[12]; + _textButtons = new List(); + } + + public void NewText(List lines, bool resetIndex = true) + { + if (resetIndex) + { + Index = 0; + CurrentLines = lines; + } + + foreach (MirLabel t in _textButtons) + t.Dispose(); + + foreach (MirLabel t in _textLabel.Where(t => t != null)) + t.Text = ""; + + _textButtons.Clear(); + + int lastLine = lines.Count > VisibleLines ? ((VisibleLines + Index) > lines.Count ? lines.Count : (VisibleLines + Index)) : lines.Count; + + for (int i = Index; i < lastLine; i++) + { + _textLabel[i - Index] = new MirLabel + { + Font = Font, + DrawFormat = TextFormatFlags.WordBreak, + Visible = true, + Parent = this, + Size = new Size(Size.Width, 20), + Location = new Point(0, 0 + (i - Index) * 15), + NotControl = true + }; + + if (i >= lines.Count) + { + _textLabel[i - Index].Text = string.Empty; + continue; + } + + string currentLine = lines[i]; + + List matchList = R.Matches(currentLine).Cast().ToList(); + matchList.AddRange(C.Matches(currentLine).Cast()); + + int oldLength = currentLine.Length; + + foreach (Match match in matchList.OrderBy(o => o.Index).ToList()) + { + int offSet = oldLength - currentLine.Length; + + Capture capture = match.Groups[1].Captures[0]; + string[] values = capture.Value.Split('/'); + currentLine = currentLine.Remove(capture.Index - 1 - offSet, capture.Length + 2).Insert(capture.Index - 1 - offSet, values[0]); + string text = currentLine.Substring(0, capture.Index - 1 - offSet) + " "; + Size size = TextRenderer.MeasureText(CMain.Graphics, text, _textLabel[i - Index].Font, _textLabel[i - Index].Size, TextFormatFlags.TextBoxControl); + + //if (R.Match(match.Value).Success) + // NewButton(values[0], values[1], TextLabel[i].Location.Add(new Point(size.Width - 10, 0))); + + if (C.Match(match.Value).Success) + NewColour(values[0], values[1], _textLabel[i - Index].Location.Add(new Point(size.Width - 10, 0))); + } + + _textLabel[i - Index].Text = currentLine; + //TextLabel[i].MouseWheel += NPCDialog_MouseWheel; + } + } + + private void NewColour(string text, string colour, Point p) + { + Color textColour = Color.FromName(colour); + + MirLabel temp = new MirLabel + { + AutoSize = true, + Visible = true, + Parent = this, + Location = p, + Text = text, + ForeColour = textColour, + Font = Font + }; + //temp.MouseWheel += NPCDialog_MouseWheel; + + _textButtons.Add(temp); + } + } +} diff --git a/Client/MirControls/MirTextBox.cs b/Client/MirControls/MirTextBox.cs new file mode 100644 index 0000000..db1f1a2 --- /dev/null +++ b/Client/MirControls/MirTextBox.cs @@ -0,0 +1,423 @@ +using Client.MirGraphics; +using SlimDX; +using SlimDX.Direct3D9; +using System.Drawing.Imaging; + +namespace Client.MirControls +{ + public sealed class MirTextBox : MirControl + { + #region Back Color + + protected override void OnBackColourChanged() + { + base.OnBackColourChanged(); + if (TextBox != null && !TextBox.IsDisposed) + TextBox.BackColor = BackColour; + } + + #endregion + + #region Enabled + + protected override void OnEnabledChanged() + { + base.OnEnabledChanged(); + if (TextBox != null && !TextBox.IsDisposed) + TextBox.Enabled = Enabled; + } + + #endregion + + #region Fore Color + + protected override void OnForeColourChanged() + { + base.OnForeColourChanged(); + if (TextBox != null && !TextBox.IsDisposed) + TextBox.ForeColor = ForeColour; + } + + #endregion + + #region Location + + protected override void OnLocationChanged() + { + base.OnLocationChanged(); + if (TextBox != null && !TextBox.IsDisposed) + TextBox.Location = DisplayLocation; + + TextureValid = false; + Redraw(); + } + + #endregion + + #region Max Length + + public int MaxLength + { + get + { + if (TextBox != null && !TextBox.IsDisposed) + return TextBox.MaxLength; + return -1; + } + set + { + if (TextBox != null && !TextBox.IsDisposed) + TextBox.MaxLength = value; + } + } + + #endregion + + #region Parent + + protected override void OnParentChanged() + { + base.OnParentChanged(); + if (TextBox != null && !TextBox.IsDisposed) + OnVisibleChanged(); + } + + #endregion + + #region Password + + public bool Password + { + get + { + if (TextBox != null && !TextBox.IsDisposed) + return TextBox.UseSystemPasswordChar; + return false; + } + set + { + if (TextBox != null && !TextBox.IsDisposed) + TextBox.UseSystemPasswordChar = value; + } + } + + #endregion + + #region Font + + public System.Drawing.Font Font + { + get + { + if (TextBox != null && !TextBox.IsDisposed) + return TextBox.Font; + return null; + } + set + { + if (TextBox != null && !TextBox.IsDisposed) + TextBox.Font = ScaleFont(value); + } + } + + #endregion + + #region Size + + protected override void OnSizeChanged() + { + TextBox.Size = Size; + + DisposeTexture(); + + _size = Size; + + if (TextBox != null && !TextBox.IsDisposed) + base.OnSizeChanged(); + } + + #endregion + + #region TextBox + + public bool CanLoseFocus; + public readonly TextBox TextBox; + private Pen CaretPen; + + #endregion + + #region Label + + public string Text + { + get + { + if (TextBox != null && !TextBox.IsDisposed) + return TextBox.Text; + return null; + } + set + { + if (TextBox != null && !TextBox.IsDisposed) + TextBox.Text = value; + } + } + public string[] MultiText + { + get + { + if (TextBox != null && !TextBox.IsDisposed) + return TextBox.Lines; + return null; + } + set + { + if (TextBox != null && !TextBox.IsDisposed) + TextBox.Lines = value; + } + } + + #endregion + + #region Visible + + public override bool Visible + { + get + { + return base.Visible; + } + set + { + base.Visible = value; + OnVisibleChanged(); + } + } + + protected override void OnVisibleChanged() + { + base.OnVisibleChanged(); + + if (TextBox != null && !TextBox.IsDisposed) + TextBox.Visible = Visible; + } + private void TextBox_VisibleChanged(object sender, EventArgs e) + { + DialogChanged(); + + if (TextBox.Visible && TextBox.CanFocus) + if (Program.Form.ActiveControl == null || Program.Form.ActiveControl == Program.Form) + Program.Form.ActiveControl = TextBox; + + if (!TextBox.Visible) + if (Program.Form.ActiveControl == TextBox) + Program.Form.Focus(); + } + private void SetFocus(object sender, EventArgs e) + { + if (TextBox.Visible) + TextBox.VisibleChanged -= SetFocus; + if (TextBox.Parent != null) + TextBox.ParentChanged -= SetFocus; + + if (TextBox.CanFocus) TextBox.Focus(); + else if (TextBox.Visible && TextBox.Parent != null) + Program.Form.ActiveControl = TextBox; + + + } + + #endregion + + #region MultiLine + + public override void MultiLine() + { + TextBox.Multiline = true; + TextBox.Size = Size; + + DisposeTexture(); + Redraw(); + } + + #endregion + + public MirTextBox() + { + BackColour = Color.Black; + + DrawControlTexture = true; + TextureValid = false; + + TextBox = new TextBox + { + BackColor = BackColour, + BorderStyle = BorderStyle.None, + Font = new System.Drawing.Font(Settings.FontName, 10F * 96f / CMain.Graphics.DpiX), + ForeColor = ForeColour, + Location = DisplayLocation, + Size = Size, + Visible = Visible, + Tag = this, + Cursor = CMain.Cursors[(byte)MouseCursor.TextPrompt] + }; + + CaretPen = new Pen(ForeColour, 1); + + TextBox.VisibleChanged += TextBox_VisibleChanged; + TextBox.ParentChanged += TextBox_VisibleChanged; + TextBox.KeyUp += TextBoxOnKeyUp; + TextBox.KeyPress += TextBox_KeyPress; + + TextBox.KeyPress += TextBox_NeedRedraw; + TextBox.KeyUp += TextBox_NeedRedraw; + TextBox.MouseDown += TextBox_NeedRedraw; + TextBox.MouseUp += TextBox_NeedRedraw; + TextBox.LostFocus += TextBox_NeedRedraw; + TextBox.GotFocus += TextBox_NeedRedraw; + TextBox.MouseWheel += TextBox_NeedRedraw; + + Shown += MirTextBox_Shown; + TextBox.MouseMove += CMain.CMain_MouseMove; + } + + private void TextBox_NeedRedraw(object sender, EventArgs e) + { + TextureValid = false; + Redraw(); + } + + protected unsafe override void CreateTexture() + { + if (!Settings.FullScreen) return; + + if (Size.IsEmpty) + return; + + if (TextureSize != Size) + DisposeTexture(); + + if (ControlTexture == null || ControlTexture.Disposed) + { + DXManager.ControlList.Add(this); + + ControlTexture = new Texture(DXManager.Device, Size.Width, Size.Height, 1, Usage.None, Format.A8R8G8B8, Pool.Managed); + TextureSize = Size; + } + + Point caret = GetCaretPosition(); + + DataRectangle stream = ControlTexture.LockRectangle(0, LockFlags.Discard); + using (Bitmap bm = new Bitmap(Size.Width, Size.Height, Size.Width * 4, PixelFormat.Format32bppArgb, stream.Data.DataPointer)) + { + TextBox.DrawToBitmap(bm, new Rectangle(0, 0, Size.Width, Size.Height)); + using (Graphics graphics = Graphics.FromImage(bm)) + { + graphics.DrawImage(bm, Point.Empty); + if (TextBox.Focused) + graphics.DrawLine(CaretPen, new Point(caret.X, caret.Y), new Point(caret.X, caret.Y + TextBox.Font.Height)); + } + + } + ControlTexture.UnlockRectangle(0); + DXManager.Sprite.Flush(); + TextureValid = true; + } + + private Point GetCaretPosition() + { + Point result = TextBox.GetPositionFromCharIndex(TextBox.SelectionStart); + + if (result.X == 0 && TextBox.Text.Length > 0) + { + result = TextBox.GetPositionFromCharIndex(TextBox.Text.Length - 1); + int s = result.X / TextBox.Text.Length; + result.X = (int)(result.X + (s * 1.46)); + result.Y = TextBox.GetLineFromCharIndex(TextBox.SelectionStart) * TextBox.Font.Height; + } + + return result; + } + + private void TextBoxOnKeyUp(object sender, KeyEventArgs e) + { + switch (e.KeyCode) + { + case Keys.PrintScreen: + CMain.CMain_KeyUp(sender, e); + break; + + } + } + + void TextBox_KeyPress(object sender, KeyPressEventArgs e) + { + base.OnKeyPress(e); + + if (e.KeyChar == (char)Keys.Escape) + { + Program.Form.ActiveControl = null; + e.Handled = true; + } + } + + + void MirTextBox_Shown(object sender, EventArgs e) + { + TextBox.Parent = Program.Form; + CMain.Ctrl = false; + CMain.Shift = false; + CMain.Alt = false; + CMain.Tilde = false; + + TextureValid = false; + SetFocus(); + } + + public void SetFocus() + { + if (!TextBox.Visible) + TextBox.VisibleChanged += SetFocus; + else if (TextBox.Parent == null) + TextBox.ParentChanged += SetFocus; + else + TextBox.Focus(); + } + + public void DialogChanged() + { + MirMessageBox box1 = null; + MirInputBox box2 = null; + MirAmountBox box3 = null; + + if (MirScene.ActiveScene != null && MirScene.ActiveScene.Controls.Count > 0) + { + box1 = (MirMessageBox) MirScene.ActiveScene.Controls.FirstOrDefault(ob => ob is MirMessageBox); + box2 = (MirInputBox) MirScene.ActiveScene.Controls.FirstOrDefault(O => O is MirInputBox); + box3 = (MirAmountBox) MirScene.ActiveScene.Controls.FirstOrDefault(ob => ob is MirAmountBox); + } + + + if ((box1 != null && box1 != Parent) || (box2 != null && box2 != Parent) || (box3 != null && box3 != Parent)) + TextBox.Visible = false; + else + TextBox.Visible = Visible && TextBox.Parent != null; + } + + + #region Disposable + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + + if (!disposing) return; + + if (!TextBox.IsDisposed) + TextBox.Dispose(); + } + + + #endregion + } +} diff --git a/Client/MirGraphics/DXManager.cs b/Client/MirGraphics/DXManager.cs new file mode 100644 index 0000000..cdc7742 --- /dev/null +++ b/Client/MirGraphics/DXManager.cs @@ -0,0 +1,595 @@ +using System.Drawing.Drawing2D; +using System.Drawing.Imaging; +using Client.MirControls; +using Client.MirScenes; +using SlimDX; +using SlimDX.Direct3D9; +using Blend = SlimDX.Direct3D9.Blend; + +namespace Client.MirGraphics +{ + class DXManager + { + public static List TextureList = new List(); + public static List ControlList = new List(); + + public static Device Device; + public static Sprite Sprite; + public static Line Line; + + public static Surface CurrentSurface; + public static Surface MainSurface; + public static PresentParameters Parameters; + public static bool DeviceLost; + public static float Opacity = 1F; + public static bool Blending; + public static float BlendingRate; + public static BlendMode BlendingMode; + + + public static Texture RadarTexture; + public static List Lights = new List(); + public static Texture PoisonDotBackground; + + public static Texture FloorTexture, LightTexture; + public static Surface FloorSurface, LightSurface; + + public static PixelShader GrayScalePixelShader; + public static PixelShader NormalPixelShader; + public static PixelShader MagicPixelShader; + + public static bool GrayScale; + + public static Point[] LightSizes = + { + new Point(125,95), + new Point(205,156), + new Point(285,217), + new Point(365,277), + new Point(445,338), + new Point(525,399), + new Point(605,460), + new Point(685,521), + new Point(765,581), + new Point(845,642), + new Point(925,703) + }; + + public static void Create() + { + Parameters = new PresentParameters + { + BackBufferFormat = Format.X8R8G8B8, + PresentFlags = PresentFlags.LockableBackBuffer, + BackBufferWidth = Settings.ScreenWidth, + BackBufferHeight = Settings.ScreenHeight, + SwapEffect = SwapEffect.Discard, + PresentationInterval = Settings.FPSCap ? PresentInterval.One : PresentInterval.Immediate, + Windowed = !Settings.FullScreen, + }; + + + Direct3D d3d = new Direct3D(); + + Capabilities devCaps = d3d.GetDeviceCaps(0, DeviceType.Hardware); + DeviceType devType = DeviceType.Reference; + CreateFlags devFlags = CreateFlags.HardwareVertexProcessing; + + if (devCaps.VertexShaderVersion.Major >= 2 && devCaps.PixelShaderVersion.Major >= 2) + devType = DeviceType.Hardware; + + if ((devCaps.DeviceCaps & DeviceCaps.HWTransformAndLight) != 0) + devFlags = CreateFlags.HardwareVertexProcessing; + + + if ((devCaps.DeviceCaps & DeviceCaps.PureDevice) != 0) + devFlags |= CreateFlags.PureDevice; + + + Device = new Device(d3d, d3d.Adapters.DefaultAdapter.Adapter, devType, Program.Form.Handle, devFlags, Parameters); + + Device.SetDialogBoxMode(true); + + LoadTextures(); + LoadPixelsShaders(); + } + + private static unsafe void LoadPixelsShaders() + { + var shaderNormalPath = Settings.ShadersPath + "normal.ps"; + var shaderGrayScalePath = Settings.ShadersPath + "grayscale.ps"; + var shaderMagicPath = Settings.ShadersPath + "magic.ps"; + + if (System.IO.File.Exists(shaderNormalPath)) + { + using (var gs = ShaderBytecode.AssembleFromFile(shaderNormalPath, ShaderFlags.None)) + NormalPixelShader = new PixelShader(Device, gs); + } + if (System.IO.File.Exists(shaderGrayScalePath)) + { + using (var gs = ShaderBytecode.AssembleFromFile(shaderGrayScalePath, ShaderFlags.None)) + GrayScalePixelShader = new PixelShader(Device, gs); + } + if (System.IO.File.Exists(shaderMagicPath)) + { + using (var gs = ShaderBytecode.AssembleFromFile(shaderMagicPath, ShaderFlags.None)) + MagicPixelShader = new PixelShader(Device, gs); + } + } + + private static unsafe void LoadTextures() + { + Sprite = new Sprite(Device); + Line = new Line(Device) { Width = 1F }; + + MainSurface = Device.GetBackBuffer(0, 0); + CurrentSurface = MainSurface; + Device.SetRenderTarget(0, MainSurface); + + if (RadarTexture == null || RadarTexture.Disposed) + { + RadarTexture = new Texture(Device, 2, 2, 1, Usage.None, Format.A8R8G8B8, Pool.Managed); + + DataRectangle stream = RadarTexture.LockRectangle(0, LockFlags.Discard); + using (Bitmap image = new Bitmap(2, 2, 8, PixelFormat.Format32bppArgb, stream.Data.DataPointer)) + using (Graphics graphics = Graphics.FromImage(image)) + graphics.Clear(Color.White); + RadarTexture.UnlockRectangle(0); + } + if (PoisonDotBackground == null || PoisonDotBackground.Disposed) + { + PoisonDotBackground = new Texture(Device, 5, 5, 1, Usage.None, Format.A8R8G8B8, Pool.Managed); + + DataRectangle stream = PoisonDotBackground.LockRectangle(0, LockFlags.Discard); + using (Bitmap image = new Bitmap(5, 5, 20, PixelFormat.Format32bppArgb, stream.Data.DataPointer)) + using (Graphics graphics = Graphics.FromImage(image)) + graphics.Clear(Color.White); + PoisonDotBackground.UnlockRectangle(0); + } + CreateLights(); + } + + private unsafe static void CreateLights() + { + + for (int i = Lights.Count - 1; i >= 0; i--) + Lights[i].Dispose(); + + Lights.Clear(); + + for (int i = 1; i < LightSizes.Length; i++) + { + // int width = 125 + (57 *i); + //int height = 110 + (57 * i); + int width = LightSizes[i].X; + int height = LightSizes[i].Y; + + Texture light = new Texture(Device, width, height, 1, Usage.None, Format.A8R8G8B8, Pool.Managed); + + DataRectangle stream = light.LockRectangle(0, LockFlags.Discard); + using (Bitmap image = new Bitmap(width, height, width * 4, PixelFormat.Format32bppArgb, stream.Data.DataPointer)) + { + using (Graphics graphics = Graphics.FromImage(image)) + { + using (GraphicsPath path = new GraphicsPath()) + { + //path.AddEllipse(new Rectangle(0, 0, width, height)); + //using (PathGradientBrush brush = new PathGradientBrush(path)) + //{ + // graphics.Clear(Color.FromArgb(0, 0, 0, 0)); + // brush.SurroundColors = new[] { Color.FromArgb(0, 255, 255, 255) }; + // brush.CenterColor = Color.FromArgb(255, 255, 255, 255); + // graphics.FillPath(brush, path); + // graphics.Save(); + //} + + path.AddEllipse(new Rectangle(0, 0, width, height)); + using (PathGradientBrush brush = new PathGradientBrush(path)) + { + Color[] blendColours = { Color.White, + Color.FromArgb(255,210,210,210), + Color.FromArgb(255,160,160,160), + Color.FromArgb(255,70,70,70), + Color.FromArgb(255,40,40,40), + Color.FromArgb(0,0,0,0)}; + + float[] radiusPositions = { 0f, .20f, .40f, .60f, .80f, 1.0f }; + + ColorBlend colourBlend = new ColorBlend(); + colourBlend.Colors = blendColours; + colourBlend.Positions = radiusPositions; + + graphics.Clear(Color.FromArgb(0, 0, 0, 0)); + brush.InterpolationColors = colourBlend; + brush.SurroundColors = blendColours; + brush.CenterColor = Color.White; + graphics.FillPath(brush, path); + graphics.Save(); + } + } + } + } + + light.UnlockRectangle(0); + //light.Disposing += (o, e) => Lights.Remove(light); + Lights.Add(light); + } + } + + public static void SetSurface(Surface surface) + { + if (CurrentSurface == surface) + return; + + Sprite.Flush(); + CurrentSurface = surface; + Device.SetRenderTarget(0, surface); + } + public static void SetGrayscale(bool value) + { + GrayScale = value; + + if (value == true) + { + if (Device.PixelShader == GrayScalePixelShader) return; + Sprite.Flush(); + Device.PixelShader = GrayScalePixelShader; + } + else + { + if (Device.PixelShader == null) return; + Sprite.Flush(); + Device.PixelShader = null; + } + } + + public static void DrawOpaque(Texture texture, Rectangle? sourceRect, Vector3? position, Color4 color, float opacity) + { + color.Alpha = opacity; + Draw(texture, sourceRect, position, color); + } + + public static void Draw(Texture texture, Rectangle? sourceRect, Vector3? position, Color4 color) + { + Sprite.Draw(texture, sourceRect, Vector3.Zero, position, color); + CMain.DPSCounter++; + } + + public static void AttemptReset() + { + try + { + Result result = DXManager.Device.TestCooperativeLevel(); + + if (result.Code == ResultCode.DeviceLost.Code) return; + + if (result.Code == ResultCode.DeviceNotReset.Code) + { + DXManager.ResetDevice(); + return; + } + + if (result.Code != ResultCode.Success.Code) return; + + DXManager.DeviceLost = false; + } + catch + { + } + } + + public static void ResetDevice() + { + DXManager.CleanUp(); + DXManager.DeviceLost = true; + + if (DXManager.Parameters == null) return; + + Size clientSize = Program.Form.ClientSize; + + if (clientSize.Width == 0 || clientSize.Height == 0) return; + + DXManager.Parameters.Windowed = !Settings.FullScreen; + DXManager.Parameters.BackBufferWidth = clientSize.Width; + DXManager.Parameters.BackBufferHeight = clientSize.Height; + DXManager.Parameters.PresentationInterval = Settings.FPSCap ? PresentInterval.Default : PresentInterval.Immediate; + DXManager.Device.Reset(DXManager.Parameters); + + DXManager.LoadTextures(); + } + + public static void AttemptRecovery() + { + try + { + Sprite.End(); + } + catch + { + } + + try + { + Device.EndScene(); + } + catch + { + } + + try + { + MainSurface = Device.GetBackBuffer(0, 0); + CurrentSurface = MainSurface; + Device.SetRenderTarget(0, MainSurface); + } + catch + { + } + } + public static void SetOpacity(float opacity) + { + if (Opacity == opacity) + return; + + Sprite.Flush(); + Device.SetRenderState(RenderState.AlphaBlendEnable, true); + if (opacity >= 1 || opacity < 0) + { + Device.SetRenderState(RenderState.SourceBlend, SlimDX.Direct3D9.Blend.SourceAlpha); + Device.SetRenderState(RenderState.DestinationBlend, SlimDX.Direct3D9.Blend.InverseSourceAlpha); + Device.SetRenderState(RenderState.SourceBlendAlpha, Blend.One); + Device.SetRenderState(RenderState.BlendFactor, Color.FromArgb(255, 255, 255, 255).ToArgb()); + } + else + { + Device.SetRenderState(RenderState.SourceBlend, Blend.BlendFactor); + Device.SetRenderState(RenderState.DestinationBlend, Blend.InverseBlendFactor); + Device.SetRenderState(RenderState.SourceBlendAlpha, Blend.SourceAlpha); + Device.SetRenderState(RenderState.BlendFactor, Color.FromArgb((byte)(255 * opacity), (byte)(255 * opacity), (byte)(255 * opacity), (byte)(255 * opacity)).ToArgb()); + } + Opacity = opacity; + Sprite.Flush(); + } + public static void SetBlend(bool value, float rate = 1F, BlendMode mode = BlendMode.NORMAL) + { + if (value == Blending && BlendingRate == rate && BlendingMode == mode) return; + + Blending = value; + BlendingRate = rate; + BlendingMode = mode; + + Sprite.Flush(); + + Sprite.End(); + + if (Blending) + { + Sprite.Begin(SpriteFlags.DoNotSaveState); + Device.SetRenderState(RenderState.AlphaBlendEnable, true); + + switch (BlendingMode) + { + case BlendMode.INVLIGHT: + Device.SetRenderState(RenderState.BlendOperation, BlendOperation.Add); + Device.SetRenderState(RenderState.SourceBlend, Blend.BlendFactor); + Device.SetRenderState(RenderState.DestinationBlend, Blend.InverseSourceColor); + break; + default: + Device.SetRenderState(RenderState.SourceBlend, Blend.SourceAlpha); + Device.SetRenderState(RenderState.DestinationBlend, Blend.One); + break; + } + + Device.SetRenderState(RenderState.BlendFactor, Color.FromArgb((byte)(255 * BlendingRate), (byte)(255 * BlendingRate), + (byte)(255 * BlendingRate), (byte)(255 * BlendingRate)).ToArgb()); + } + else + Sprite.Begin(SpriteFlags.AlphaBlend); + + Device.SetRenderTarget(0, CurrentSurface); + } + + public static void SetNormal(float blend, Color tintcolor) + { + if (Device.PixelShader == NormalPixelShader) + return; + + Sprite.Flush(); + Device.PixelShader = NormalPixelShader; + Device.SetPixelShaderConstant(0, new Vector4[] { new Vector4(1.0F, 1.0F, 1.0F, blend) }); + Device.SetPixelShaderConstant(1, new Vector4[] { new Vector4(tintcolor.R / 255, tintcolor.G / 255, tintcolor.B / 255, 1.0F) }); + Sprite.Flush(); + } + + public static void SetGrayscale(float blend, Color tintcolor) + { + if (Device.PixelShader == GrayScalePixelShader) + return; + + Sprite.Flush(); + Device.PixelShader = GrayScalePixelShader; + Device.SetPixelShaderConstant(0, new Vector4[] { new Vector4(1.0F, 1.0F, 1.0F, blend) }); + Device.SetPixelShaderConstant(1, new Vector4[] { new Vector4(tintcolor.R / 255, tintcolor.G / 255, tintcolor.B / 255, 1.0F) }); + Sprite.Flush(); + } + + public static void SetBlendMagic(float blend, Color tintcolor) + { + if (Device.PixelShader == MagicPixelShader || MagicPixelShader == null) + return; + + Sprite.Flush(); + Device.PixelShader = MagicPixelShader; + Device.SetPixelShaderConstant(0, new Vector4[] { new Vector4(1.0F, 1.0F, 1.0F, blend) }); + Device.SetPixelShaderConstant(1, new Vector4[] { new Vector4(tintcolor.R / 255, tintcolor.G / 255, tintcolor.B / 255, 1.0F) }); + Sprite.Flush(); + } + + public static void Clean() + { + for (int i = TextureList.Count - 1; i >= 0; i--) + { + MImage m = TextureList[i]; + + if (m == null) + { + TextureList.RemoveAt(i); + continue; + } + + if (CMain.Time <= m.CleanTime) continue; + + m.DisposeTexture(); + } + + for (int i = ControlList.Count - 1; i >= 0; i--) + { + MirControl c = ControlList[i]; + + if (c == null) + { + ControlList.RemoveAt(i); + continue; + } + + if (CMain.Time <= c.CleanTime) continue; + + c.DisposeTexture(); + } + } + + + private static void CleanUp() + { + if (Sprite != null) + { + if (!Sprite.Disposed) + { + Sprite.Dispose(); + } + + Sprite = null; + } + + if (Line != null) + { + if (!Line.Disposed) + { + Line.Dispose(); + } + + Line = null; + } + + if (CurrentSurface != null) + { + if (!CurrentSurface.Disposed) + { + CurrentSurface.Dispose(); + } + + CurrentSurface = null; + } + + if (PoisonDotBackground != null) + { + if (!PoisonDotBackground.Disposed) + { + PoisonDotBackground.Dispose(); + } + + PoisonDotBackground = null; + } + + if (RadarTexture != null) + { + if (!RadarTexture.Disposed) + { + RadarTexture.Dispose(); + } + + RadarTexture = null; + } + + if (FloorTexture != null) + { + if (!FloorTexture.Disposed) + { + FloorTexture.Dispose(); + } + + DXManager.FloorTexture = null; + GameScene.Scene.MapControl.FloorValid = false; + + if (DXManager.FloorSurface != null && !DXManager.FloorSurface.Disposed) + { + DXManager.FloorSurface.Dispose(); + } + + DXManager.FloorSurface = null; + } + + if (LightTexture != null) + { + if (!LightTexture.Disposed) + LightTexture.Dispose(); + + DXManager.LightTexture = null; + + if (DXManager.LightSurface != null && !DXManager.LightSurface.Disposed) + { + DXManager.LightSurface.Dispose(); + } + + DXManager.LightSurface = null; + } + + if (Lights != null) + { + for (int i = 0; i < Lights.Count; i++) + { + if (!Lights[i].Disposed) + Lights[i].Dispose(); + } + Lights.Clear(); + } + + for (int i = TextureList.Count - 1; i >= 0; i--) + { + MImage m = TextureList[i]; + + if (m == null) continue; + + m.DisposeTexture(); + } + TextureList.Clear(); + + + for (int i = ControlList.Count - 1; i >= 0; i--) + { + MirControl c = ControlList[i]; + + if (c == null) continue; + + c.DisposeTexture(); + } + ControlList.Clear(); + } + + public static void Dispose() + { + CleanUp(); + + Device.Direct3D?.Dispose(); + + if (Program.Form.WindowState != FormWindowState.Normal) + { + Device.Dispose(); + } + + NormalPixelShader?.Dispose(); + GrayScalePixelShader?.Dispose(); + MagicPixelShader?.Dispose(); + } + } +} \ No newline at end of file diff --git a/Client/MirGraphics/MLibrary.cs b/Client/MirGraphics/MLibrary.cs new file mode 100644 index 0000000..e5f7e8d --- /dev/null +++ b/Client/MirGraphics/MLibrary.cs @@ -0,0 +1,679 @@ +using SlimDX; +using SlimDX.Direct3D9; +using System.IO.Compression; +using Frame = Client.MirObjects.Frame; +using Client.MirObjects; +using System.Text.RegularExpressions; + +namespace Client.MirGraphics +{ + public static class Libraries + { + public static bool Loaded; + public static int Count, Progress; + + public static readonly MLibrary + Body = new MLibrary(Settings.DataPath + "Body"), + Head = new MLibrary(Settings.DataPath + "Head"), + Weapon = new MLibrary(Settings.DataPath + "Weapon"), + Monster = new MLibrary(Settings.DataPath + "Monster"), + DungeonMonster = new MLibrary(Settings.DataPath + "DungeonMonster"), + Prguse = new MLibrary(Settings.DataPath + "Prguse"), + Prguse2 = new MLibrary(Settings.DataPath + "Prguse2"), + BuffIcon = new MLibrary(Settings.DataPath + "BuffIcon"), + Help = new MLibrary(Settings.DataPath + "Help"), + MiniMap = new MLibrary(Settings.DataPath + "MMap"), + MagIcon = new MLibrary(Settings.DataPath + "MagIcon"), + Magic = new MLibrary(Settings.DataPath + "Magic"), + Magic2 = new MLibrary(Settings.DataPath + "Magic2"), + Effect = new MLibrary(Settings.DataPath + "Effect"); + + //Map + public static readonly MLibrary[] MapLibs = new MLibrary[3]; + + //Items + public static readonly MLibrary + Items = new MLibrary(Settings.DataPath + "Items"), + StateItems = new MLibrary(Settings.DataPath + "StateItem"), + FloorItems = new MLibrary(Settings.DataPath + "DNItems"); + + static Libraries() + { + MapLibs[0] = new MLibrary(Settings.DataPath + "Tiles"); + MapLibs[1] = new MLibrary(Settings.DataPath + "Smtiles"); + MapLibs[2] = new MLibrary(Settings.DataPath + "Objects"); + + LoadLibraries(); + + Thread thread = new Thread(LoadGameLibraries) { IsBackground = true }; + thread.Start(); + } + + static void LoadLibraries() + { + Prguse.Initialize(); + Progress++; + + Prguse2.Initialize(); + Progress++; + } + + private static void LoadGameLibraries() + { + Count = MapLibs.Length + 17; + + Body.Initialize(); + Progress++; + + Head.Initialize(); + Progress++; + + Weapon.Initialize(); + Progress++; + + Monster.Initialize(); + Progress++; + + DungeonMonster.Initialize(); + Progress++; + + BuffIcon.Initialize(); + Progress++; + + Help.Initialize(); + Progress++; + + MiniMap.Initialize(); + Progress++; + + MagIcon.Initialize(); + Progress++; + + Magic.Initialize(); + Progress++; + Magic2.Initialize(); + Progress++; + + Effect.Initialize(); + Progress++; + + Items.Initialize(); + Progress++; + StateItems.Initialize(); + Progress++; + FloorItems.Initialize(); + Progress++; + + for (int i = 0; i < MapLibs.Length; i++) + { + if (MapLibs[i] == null) + MapLibs[i] = new MLibrary(""); + else + MapLibs[i].Initialize(); + Progress++; + } + + Loaded = true; + } + + } + + public sealed class MLibrary + { + public const string Extention = ".Lib"; + public const int LibVersion = 1; + + private readonly string _fileName; + + private MImage[] _images; + private int[] _indexList; + private int _count; + private bool _initialized; + + private BinaryReader _reader; + private FileStream _fStream; + + public MLibrary(string filename) + { + _fileName = Path.ChangeExtension(filename, Extention); + } + + public void Initialize() + { + _initialized = true; + + if (!File.Exists(_fileName)) + return; + + try + { + _fStream = new FileStream(_fileName, FileMode.Open, FileAccess.Read); + _reader = new BinaryReader(_fStream); + int currentVersion = _reader.ReadInt32(); + if (currentVersion != 1) + { + System.Windows.Forms.MessageBox.Show("Wrong version, expecting lib version: " + LibVersion.ToString() + " found version: " + currentVersion.ToString() + ".", _fileName, System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error, System.Windows.Forms.MessageBoxDefaultButton.Button1); + System.Windows.Forms.Application.Exit(); + return; + } + _count = _reader.ReadInt32(); + _images = new MImage[_count]; + _indexList = new int[_count]; + + for (int i = 0; i < _count; i++) + _indexList[i] = _reader.ReadInt32(); + } + catch (Exception) + { + _initialized = false; + throw; + } + } + + private bool CheckImage(int index) + { + if (!_initialized) + Initialize(); + + if (_images == null || index < 0 || index >= _images.Length) + return false; + + if (_images[index] == null) + { + _fStream.Position = _indexList[index]; + _images[index] = new MImage(_reader); + } + MImage mi = _images[index]; + if (!mi.TextureValid) + { + if ((mi.Width == 0) || (mi.Height == 0)) + return false; + _fStream.Seek(_indexList[index] + 12, SeekOrigin.Begin); + mi.CreateTexture(_reader); + } + + return true; + } + + public Point GetOffSet(int index) + { + if (!_initialized) Initialize(); + + if (_images == null || index < 0 || index >= _images.Length) + return Point.Empty; + + if (_images[index] == null) + { + _fStream.Seek(_indexList[index], SeekOrigin.Begin); + _images[index] = new MImage(_reader); + } + + return new Point(_images[index].X, _images[index].Y); + } + public Size GetSize(int index) + { + if (!_initialized) Initialize(); + if (_images == null || index < 0 || index >= _images.Length) + return Size.Empty; + + if (_images[index] == null) + { + _fStream.Seek(_indexList[index], SeekOrigin.Begin); + _images[index] = new MImage(_reader); + } + + return new Size(_images[index].Width, _images[index].Height); + } + public Size GetTrueSize(int index) + { + if (!_initialized) + Initialize(); + + if (_images == null || index < 0 || index >= _images.Length) + return Size.Empty; + + if (_images[index] == null) + { + _fStream.Position = _indexList[index]; + _images[index] = new MImage(_reader); + } + MImage mi = _images[index]; + if (mi.TrueSize.IsEmpty) + { + if (!mi.TextureValid) + { + if ((mi.Width == 0) || (mi.Height == 0)) + return Size.Empty; + + _fStream.Seek(_indexList[index] + 12, SeekOrigin.Begin); + mi.CreateTexture(_reader); + } + return mi.GetTrueSize(); + } + return mi.TrueSize; + } + + public void Draw(int index, int x, int y) + { + if (x >= Settings.ScreenWidth || y >= Settings.ScreenHeight) + return; + + if (!CheckImage(index)) + return; + + MImage mi = _images[index]; + + if (x + mi.Width < 0 || y + mi.Height < 0) + return; + + + DXManager.Draw(mi.Image, new Rectangle(0, 0, mi.Width, mi.Height), new Vector3((float)x, (float)y, 0.0F), Color.White); + + mi.CleanTime = CMain.Time + Settings.CleanDelay; + } + public void Draw(int index, Point point, Color colour, bool offSet = false) + { + if (!CheckImage(index)) + return; + + MImage mi = _images[index]; + + if (offSet) point.Offset(mi.X, mi.Y); + + if (point.X >= Settings.ScreenWidth || point.Y >= Settings.ScreenHeight || point.X + mi.Width < 0 || point.Y + mi.Height < 0) + return; + + DXManager.Draw(mi.Image, new Rectangle(0, 0, mi.Width, mi.Height), new Vector3((float)point.X, (float)point.Y, 0.0F), colour); + + mi.CleanTime = CMain.Time + Settings.CleanDelay; + } + + public void Draw(int index, Point point, Color colour, bool offSet, float opacity) + { + if (!CheckImage(index)) + return; + + MImage mi = _images[index]; + + if (offSet) point.Offset(mi.X, mi.Y); + + if (point.X >= Settings.ScreenWidth || point.Y >= Settings.ScreenHeight || point.X + mi.Width < 0 || point.Y + mi.Height < 0) + return; + + DXManager.DrawOpaque(mi.Image, new Rectangle(0, 0, mi.Width, mi.Height), new Vector3((float)point.X, (float)point.Y, 0.0F), colour, opacity); + + mi.CleanTime = CMain.Time + Settings.CleanDelay; + } + + public void DrawBlend(int index, Point point, Color colour, bool offSet = false, float rate = 1) + { + if (!CheckImage(index)) + return; + + MImage mi = _images[index]; + + if (offSet) point.Offset(mi.X, mi.Y); + + if (point.X >= Settings.ScreenWidth || point.Y >= Settings.ScreenHeight || point.X + mi.Width < 0 || point.Y + mi.Height < 0) + return; + + bool oldBlend = DXManager.Blending; + DXManager.SetBlend(true, rate); + + DXManager.Draw(mi.Image, new Rectangle(0, 0, mi.Width, mi.Height), new Vector3((float)point.X, (float)point.Y, 0.0F), colour); + + DXManager.SetBlend(oldBlend); + mi.CleanTime = CMain.Time + Settings.CleanDelay; + } + public void Draw(int index, Rectangle section, Point point, Color colour, bool offSet) + { + if (!CheckImage(index)) + return; + + MImage mi = _images[index]; + + if (offSet) point.Offset(mi.X, mi.Y); + + + if (point.X >= Settings.ScreenWidth || point.Y >= Settings.ScreenHeight || point.X + mi.Width < 0 || point.Y + mi.Height < 0) + return; + + if (section.Right > mi.Width) + section.Width -= section.Right - mi.Width; + + if (section.Bottom > mi.Height) + section.Height -= section.Bottom - mi.Height; + + DXManager.Draw(mi.Image, section, new Vector3((float)point.X, (float)point.Y, 0.0F), colour); + + mi.CleanTime = CMain.Time + Settings.CleanDelay; + } + public void Draw(int index, Rectangle section, Point point, Color colour, float opacity) + { + if (!CheckImage(index)) + return; + + MImage mi = _images[index]; + + + if (point.X >= Settings.ScreenWidth || point.Y >= Settings.ScreenHeight || point.X + mi.Width < 0 || point.Y + mi.Height < 0) + return; + + if (section.Right > mi.Width) + section.Width -= section.Right - mi.Width; + + if (section.Bottom > mi.Height) + section.Height -= section.Bottom - mi.Height; + + DXManager.DrawOpaque(mi.Image, section, new Vector3((float)point.X, (float)point.Y, 0.0F), colour, opacity); + + mi.CleanTime = CMain.Time + Settings.CleanDelay; + } + public void Draw(int index, Point point, Size size, Color colour) + { + if (!CheckImage(index)) + return; + + MImage mi = _images[index]; + + if (point.X >= Settings.ScreenWidth || point.Y >= Settings.ScreenHeight || point.X + size.Width < 0 || point.Y + size.Height < 0) + return; + + float scaleX = (float)size.Width / mi.Width; + float scaleY = (float)size.Height / mi.Height; + + Matrix matrix = Matrix.Scaling(scaleX, scaleY, 0); + DXManager.Sprite.Transform = matrix; + DXManager.Draw(mi.Image, new Rectangle(0, 0, mi.Width, mi.Height), new Vector3((float)point.X / scaleX, (float)point.Y / scaleY, 0.0F), Color.White); + + DXManager.Sprite.Transform = Matrix.Identity; + + mi.CleanTime = CMain.Time + Settings.CleanDelay; + } + + public void DrawTinted(int index, Point point, Color colour, Color Tint, bool offSet = false) + { + if (!CheckImage(index)) + return; + + MImage mi = _images[index]; + + if (offSet) point.Offset(mi.X, mi.Y); + + if (point.X >= Settings.ScreenWidth || point.Y >= Settings.ScreenHeight || point.X + mi.Width < 0 || point.Y + mi.Height < 0) + return; + + DXManager.Draw(mi.Image, new Rectangle(0, 0, mi.Width, mi.Height), new Vector3((float)point.X, (float)point.Y, 0.0F), colour); + + if (mi.HasMask) + { + DXManager.Draw(mi.MaskImage, new Rectangle(0, 0, mi.Width, mi.Height), new Vector3((float)point.X, (float)point.Y, 0.0F), Tint); + } + + mi.CleanTime = CMain.Time + Settings.CleanDelay; + } + + public void DrawUp(int index, int x, int y) + { + if (x >= Settings.ScreenWidth) + return; + + if (!CheckImage(index)) + return; + + MImage mi = _images[index]; + y -= mi.Height; + if (y >= Settings.ScreenHeight) + return; + if (x + mi.Width < 0 || y + mi.Height < 0) + return; + + DXManager.Draw(mi.Image, new Rectangle(0, 0, mi.Width, mi.Height), new Vector3(x, y, 0.0F), Color.White); + + mi.CleanTime = CMain.Time + Settings.CleanDelay; + } + public void DrawUpBlend(int index, Point point) + { + if (!CheckImage(index)) + return; + + MImage mi = _images[index]; + + point.Y -= mi.Height; + + + if (point.X >= Settings.ScreenWidth || point.Y >= Settings.ScreenHeight || point.X + mi.Width < 0 || point.Y + mi.Height < 0) + return; + + bool oldBlend = DXManager.Blending; + DXManager.SetBlend(true, 1); + + DXManager.Draw(mi.Image, new Rectangle(0, 0, mi.Width, mi.Height), new Vector3((float)point.X, (float)point.Y, 0.0F), Color.White); + + DXManager.SetBlend(oldBlend); + mi.CleanTime = CMain.Time + Settings.CleanDelay; + } + + public bool VisiblePixel(int index, Point point, bool accuate) + { + if (!CheckImage(index)) + return false; + + if (accuate) + return _images[index].VisiblePixel(point); + + int accuracy = 2; + + for (int x = -accuracy; x <= accuracy; x++) + for (int y = -accuracy; y <= accuracy; y++) + if (_images[index].VisiblePixel(new Point(point.X + x, point.Y + y))) + return true; + + return false; + } + } + + public sealed class MImage + { + public short Width, Height, X, Y, ShadowX, ShadowY; + public byte Shadow; + public int Length; + + public bool TextureValid; + public Texture Image; + //layer 2: + public short MaskWidth, MaskHeight, MaskX, MaskY; + public int MaskLength; + + public Texture MaskImage; + public Boolean HasMask; + + public long CleanTime; + public Size TrueSize; + + public unsafe byte* Data; + + public MImage(BinaryReader reader) + { + //read layer 1 + Width = reader.ReadInt16(); + Height = reader.ReadInt16(); + X = reader.ReadInt16(); + Y = reader.ReadInt16(); + Length = reader.ReadInt32(); + } + + public unsafe void CreateTexture(BinaryReader reader) + { + int w = Width;// + (4 - Width % 4) % 4; + int h = Height;// + (4 - Height % 4) % 4; + + Image = new Texture(DXManager.Device, w, h, 1, Usage.None, Format.A8R8G8B8, Pool.Managed); + DataRectangle stream = Image.LockRectangle(0, LockFlags.Discard); + Data = (byte*)stream.Data.DataPointer; + + DecompressImage(reader.ReadBytes(Length), stream.Data); + + stream.Data.Dispose(); + Image.UnlockRectangle(0); + + DXManager.TextureList.Add(this); + TextureValid = true; + + CleanTime = CMain.Time + Settings.CleanDelay; + } + + public unsafe void DisposeTexture() + { + DXManager.TextureList.Remove(this); + + if (Image != null && !Image.Disposed) + { + Image.Dispose(); + } + + if (MaskImage != null && !MaskImage.Disposed) + { + MaskImage.Dispose(); + } + + TextureValid = false; + Image = null; + MaskImage = null; + Data = null; + } + + public unsafe bool VisiblePixel(Point p) + { + if (p.X < 0 || p.Y < 0 || p.X >= Width || p.Y >= Height) + return false; + + int w = Width; + + bool result = false; + if (Data != null) + { + int x = p.X; + int y = p.Y; + + int index = (y * (w << 2)) + (x << 2); + + byte col = Data[index + 3]; + + if (col == 0) return false; + else return true; + } + return result; + } + + public Size GetTrueSize() + { + if (TrueSize != Size.Empty) return TrueSize; + + int l = 0, t = 0, r = Width, b = Height; + + bool visible = false; + for (int x = 0; x < r; x++) + { + for (int y = 0; y < b; y++) + { + if (!VisiblePixel(new Point(x, y))) continue; + + visible = true; + break; + } + + if (!visible) continue; + + l = x; + break; + } + + visible = false; + for (int y = 0; y < b; y++) + { + for (int x = l; x < r; x++) + { + if (!VisiblePixel(new Point(x, y))) continue; + + visible = true; + break; + + } + if (!visible) continue; + + t = y; + break; + } + + visible = false; + for (int x = r - 1; x >= l; x--) + { + for (int y = 0; y < b; y++) + { + if (!VisiblePixel(new Point(x, y))) continue; + + visible = true; + break; + } + + if (!visible) continue; + + r = x + 1; + break; + } + + visible = false; + for (int y = b - 1; y >= t; y--) + { + for (int x = l; x < r; x++) + { + if (!VisiblePixel(new Point(x, y))) continue; + + visible = true; + break; + + } + if (!visible) continue; + + b = y + 1; + break; + } + + TrueSize = Rectangle.FromLTRB(l, t, r, b).Size; + + return TrueSize; + } + + private static byte[] DecompressImage(byte[] image) + { + using (GZipStream stream = new GZipStream(new MemoryStream(image), CompressionMode.Decompress)) + { + const int size = 4096; + byte[] buffer = new byte[size]; + using (MemoryStream memory = new MemoryStream()) + { + int count = 0; + do + { + count = stream.Read(buffer, 0, size); + if (count > 0) + { + memory.Write(buffer, 0, count); + } + } + while (count > 0); + return memory.ToArray(); + } + } + } + + private static void DecompressImage(byte[] data, Stream destination) + { + using (var stream = new GZipStream(new MemoryStream(data), CompressionMode.Decompress)) + { + stream.CopyTo(destination); + } + } + } +} diff --git a/Client/MirNetwork/Network.cs b/Client/MirNetwork/Network.cs new file mode 100644 index 0000000..57ff0a9 --- /dev/null +++ b/Client/MirNetwork/Network.cs @@ -0,0 +1,256 @@ +using System.Collections.Concurrent; +using System.Net.Sockets; +using Client.MirControls; +using C = ClientPackets; + + +namespace Client.MirNetwork +{ + static class Network + { + private static TcpClient _client; + public static int ConnectAttempt = 0; + public static int MaxAttempts = 20; + public static bool ErrorShown; + public static bool Connected; + public static long TimeOutTime, TimeConnected, RetryTime = CMain.Time + 5000; + + private static ConcurrentQueue _receiveList; + private static ConcurrentQueue _sendList; + + static byte[] _rawData = new byte[0]; + static readonly byte[] _rawBytes = new byte[8 * 1024]; + + public static void Connect() + { + if (_client != null) + Disconnect(); + + if (ConnectAttempt >= MaxAttempts) + { + if (ErrorShown) + { + return; + } + + ErrorShown = true; + + MirMessageBox errorBox = new("Error Connecting to Server", MirMessageBoxButtons.Cancel); + errorBox.CancelButton.Click += (o, e) => Program.Form.Close(); + errorBox.Label.Text = $"Maximum Connection Attempts Reached: {MaxAttempts}" + + $"{Environment.NewLine}Please try again later or check your connection settings."; + errorBox.Show(); + return; + } + + ConnectAttempt++; + + try + { + _client = new TcpClient { NoDelay = true }; + _client?.BeginConnect(Settings.IPAddress, Settings.Port, Connection, null); + } + catch (ObjectDisposedException ex) + { + if (Settings.LogErrors) CMain.SaveError(ex.ToString()); + Disconnect(); + } + } + + private static void Connection(IAsyncResult result) + { + try + { + _client?.EndConnect(result); + + if ((_client != null && + !_client.Connected) || + _client == null) + { + Connect(); + return; + } + + _receiveList = new ConcurrentQueue(); + _sendList = new ConcurrentQueue(); + _rawData = new byte[0]; + + TimeOutTime = CMain.Time + Settings.TimeOut; + TimeConnected = CMain.Time; + + BeginReceive(); + } + catch (SocketException) + { + Thread.Sleep(100); + Connect(); + } + catch (Exception ex) + { + if (Settings.LogErrors) CMain.SaveError(ex.ToString()); + Disconnect(); + } + } + + private static void BeginReceive() + { + if (_client == null || !_client.Connected) return; + + try + { + _client.Client.BeginReceive(_rawBytes, 0, _rawBytes.Length, SocketFlags.None, ReceiveData, _rawBytes); + } + catch + { + Disconnect(); + } + } + private static void ReceiveData(IAsyncResult result) + { + if (_client == null || !_client.Connected) return; + + int dataRead; + + try + { + dataRead = _client.Client.EndReceive(result); + } + catch + { + Disconnect(); + return; + } + + if (dataRead == 0) + { + Disconnect(); + } + + byte[] rawBytes = result.AsyncState as byte[]; + + byte[] temp = _rawData; + _rawData = new byte[dataRead + temp.Length]; + Buffer.BlockCopy(temp, 0, _rawData, 0, temp.Length); + Buffer.BlockCopy(rawBytes, 0, _rawData, temp.Length, dataRead); + + Packet p; + List data = new List(); + + while ((p = Packet.ReceivePacket(_rawData, out _rawData)) != null) + { + data.AddRange(p.GetPacketBytes()); + _receiveList.Enqueue(p); + } + + CMain.BytesReceived += data.Count; + + BeginReceive(); + } + + private static void BeginSend(List data) + { + if (_client == null || !_client.Connected || data.Count == 0) return; + + try + { + _client.Client.BeginSend(data.ToArray(), 0, data.Count, SocketFlags.None, SendData, null); + } + catch + { + Disconnect(); + } + } + private static void SendData(IAsyncResult result) + { + try + { + _client.Client.EndSend(result); + } + catch + { } + } + + public static void Disconnect() + { + if (_client == null) return; + + _client?.Close(); + + TimeConnected = 0; + Connected = false; + _sendList = null; + _client = null; + + _receiveList = null; + } + + public static void Process() + { + if (_client == null || !_client.Connected) + { + if (Connected) + { + while (_receiveList != null && !_receiveList.IsEmpty) + { + if (!_receiveList.TryDequeue(out Packet p) || p == null) continue; + if (!(p is ServerPackets.Disconnect) && !(p is ServerPackets.ClientVersion)) continue; + + MirScene.ActiveScene.ProcessPacket(p); + _receiveList = null; + return; + } + + MirMessageBox.Show("Lost connection with the server.", true); + Disconnect(); + return; + } + else if (CMain.Time >= RetryTime) + { + RetryTime = CMain.Time + 5000; + Connect(); + } + return; + } + + if (!Connected && TimeConnected > 0 && CMain.Time > TimeConnected + 5000) + { + Disconnect(); + Connect(); + return; + } + + + + while (_receiveList != null && !_receiveList.IsEmpty) + { + if (!_receiveList.TryDequeue(out Packet p) || p == null) continue; + MirScene.ActiveScene.ProcessPacket(p); + } + + + if (CMain.Time > TimeOutTime && _sendList != null && _sendList.IsEmpty) + _sendList.Enqueue(new C.KeepAlive()); + + if (_sendList == null || _sendList.IsEmpty) return; + + TimeOutTime = CMain.Time + Settings.TimeOut; + + List data = new List(); + while (!_sendList.IsEmpty) + { + if (!_sendList.TryDequeue(out Packet p)) continue; + data.AddRange(p.GetPacketBytes()); + } + + CMain.BytesSent += data.Count; + + BeginSend(data); + } + + public static void Enqueue(Packet p) + { + if (_sendList != null && p != null) + _sendList.Enqueue(p); + } + } +} diff --git a/Client/MirObjects/Damage.cs b/Client/MirObjects/Damage.cs new file mode 100644 index 0000000..5c39f3a --- /dev/null +++ b/Client/MirObjects/Damage.cs @@ -0,0 +1,50 @@ +using Client.MirControls; + +namespace Client.MirObjects +{ + public class Damage + { + public string Text; + public Color Colour; + public int Distance; + public long ExpireTime; + public double Factor; + public int Offset; + + public MirLabel DamageLabel; + + public Damage(string text, int duration, Color colour, int distance = 50) + { + ExpireTime = (long)(CMain.Time + duration); + Text = text; + Distance = distance; + Factor = duration / this.Distance; + Colour = colour; + } + + public void Draw(Point displayLocation) + { + long timeRemaining = ExpireTime - CMain.Time; + + if (DamageLabel == null) + { + DamageLabel = new MirLabel + { + AutoSize = true, + BackColour = Color.Transparent, + ForeColour = Colour, + OutLine = true, + OutLineColour = Color.Black, + Text = Text, + Font = new Font(Settings.FontName, 8F, FontStyle.Bold) + }; + } + + displayLocation.Offset((int)(15 - (Text.Length * 3)), (int)(((int)((double)timeRemaining / Factor)) - Distance) - 75 - Offset); + + DamageLabel.Location = displayLocation; + DamageLabel.Draw(); + } + } + +} diff --git a/Client/MirObjects/Effect.cs b/Client/MirObjects/Effect.cs new file mode 100644 index 0000000..514dde5 --- /dev/null +++ b/Client/MirObjects/Effect.cs @@ -0,0 +1,354 @@ +using Client.MirGraphics; +using Client.MirScenes; +using Client.MirSounds; + +namespace Client.MirObjects +{ + public class Effect + { + public MLibrary Library; + + public int BaseIndex, Count, Duration; + public long Start; + + public int CurrentFrame; + public long NextFrame; + + public Point Source; + public MapObject Owner; + + public int Light = 6; + public Color LightColour = Color.White; + + public bool Blend = true; + public float Rate = 1F; + public Point DrawLocation; + public Point DrawOffset = Point.Empty; + public bool Repeat; + public long RepeatUntil; + + public bool DrawBehind = false; + + public long CurrentDelay; + public long Delay; + + public event EventHandler Complete; + public event EventHandler Played; + + public Effect(MLibrary library, int baseIndex, int count, int duration, MapObject owner, long starttime = 0, bool drawBehind = false) + { + Library = library; + BaseIndex = baseIndex; + Count = count == 0 ? 1 : count; + Duration = duration; + Start = starttime == 0 ? CMain.Time : starttime; + + NextFrame = Start + (Duration / Count) * (CurrentFrame + 1); + Owner = owner; + Source = Owner.CurrentLocation; + + DrawBehind = drawBehind; + } + public Effect(MLibrary library, int baseIndex, int count, int duration, Point source, long starttime = 0, bool drawBehind = false) + { + Library = library; + BaseIndex = baseIndex; + Count = count == 0 ? 1 : count; + Duration = duration; + Start = starttime == 0 ? CMain.Time : starttime; + + NextFrame = Start + (Duration / Count) * (CurrentFrame + 1); + Source = source; + + DrawBehind = drawBehind; + } + + public void SetStart(long start) + { + Start = start; + + NextFrame = Start + (Duration / Count) * (CurrentFrame + 1); + } + + public virtual void Process() + { + if (CurrentFrame == 1) + { + if (Played != null) + Played(this, EventArgs.Empty); + } + + if (CMain.Time <= NextFrame) return; + + if (Owner != null && Owner.SkipFrames) CurrentFrame++; + + if (++CurrentFrame >= Count) + { + if (Repeat && (RepeatUntil == 0 || CMain.Time < RepeatUntil)) + { + CurrentFrame = 0; + Start = CMain.Time + Delay; + NextFrame = Start + (Duration / Count) * (CurrentFrame + 1); + } + else + Remove(); + } + else NextFrame = Start + (Duration / Count) * (CurrentFrame + 1); + + GameScene.Scene.MapControl.TextureValid = false; + } + + public virtual void Remove() + { + if (Owner != null) + Owner.Effects.Remove(this); + else + MapControl.Effects.Remove(this); + + if (Complete != null) + Complete(this, EventArgs.Empty); + } + + public virtual void Draw() + { + if (CMain.Time < Start) return; + + if (Owner != null) + { + DrawLocation = Owner.DrawLocation; + } + else + { + DrawLocation = new Point((Source.X - MapObject.User.Movement.X + MapControl.OffSetX) * MapControl.CellWidth, + (Source.Y - MapObject.User.Movement.Y + MapControl.OffSetY) * MapControl.CellHeight); + DrawLocation.Offset(DrawOffset); + DrawLocation.Offset(MapObject.User.OffSetMove); + } + + + if (Blend) + Library.DrawBlend(BaseIndex + CurrentFrame, DrawLocation, Color.White, true, Rate); + else + Library.Draw(BaseIndex + CurrentFrame, DrawLocation, Color.White, true); + } + + public void Clear() + { + Complete = null; + Played = null; + } + } + + public class Missile : Effect + { + public static List Missiles = new List(); + public MapObject Target; + public Point Destination; + public int Interval, FrameCount, Skip; + public int Direction; + public bool Explode; + + + public Missile(MLibrary library, int baseIndex, int count, int duration, MapObject owner, Point target, bool direction16 = true) + : base(library, baseIndex, count, duration, owner) + { + Missiles.Add(this); + Source = Owner.CurrentLocation; + Destination = target; + Direction = direction16 ? MapControl.Direction16(Source, Destination) : (int)Functions.DirectionFromPoint(Source, Destination); + } + + public Missile(MLibrary library, int baseIndex, int count, int duration, Point source, Point target) + : base(library, baseIndex, count, duration, source) + { + Missiles.Add(this); + Destination = target; + + Direction = MapControl.Direction16(Source, Destination); + + + } + + public override void Process() + { + if (CMain.Time < Start) return; + + if (Target != null) Destination = Target.CurrentLocation; + else if (!Explode) + { + int dist = Functions.MaxDistance(Owner.CurrentLocation, Destination); + + if (dist < Globals.DataRange) + Destination.Offset(Destination.X - Source.X, Destination.Y - Source.Y); + } + + Duration = Functions.MaxDistance(Source, Destination) * 50; + Count = Duration / Interval; + if (Count == 0) Count = 1; + + base.Process(); + } + public override void Remove() + { + base.Remove(); + Missiles.Remove(this); + } + public override void Draw() + { + if (CMain.Time < Start) return; + + + int index = BaseIndex + (CurrentFrame % FrameCount) + Direction * (Skip + FrameCount); + + DrawLocation = new Point((Source.X - MapObject.User.Movement.X + MapControl.OffSetX) * MapControl.CellWidth, + (Source.Y - MapObject.User.Movement.Y + MapControl.OffSetY) * MapControl.CellHeight); + DrawLocation.Offset(MapObject.User.OffSetMove); + + int x = (Destination.X - Source.X) * MapControl.CellWidth; + int y = (Destination.Y - Source.Y) * MapControl.CellHeight; + + + DrawLocation.Offset(x * CurrentFrame / Count, y * CurrentFrame / Count); + + if (!Blend) + Library.Draw(index, DrawLocation, Color.White, true); + else + Library.DrawBlend(index, DrawLocation, Color.White, true, Rate); + } + + } + + public class SpecialEffect : Effect + { + public uint EffectType = 0; + + public SpecialEffect(MLibrary library, int baseIndex, int count, int duration, MapObject owner, bool blend, bool drawBehind, uint type) + : base(library, baseIndex, count, duration, owner, 0, drawBehind) + { + Blend = blend; + DrawBehind = drawBehind; + EffectType = type; + Light = -1; + } + + public override void Process() + { + base.Process(); + } + } + + public class BuffEffect : Effect + { + public BuffType BuffType; + + public BuffEffect(MLibrary library, int baseIndex, int count, int duration, MapObject owner, bool blend, BuffType buffType) + : base(library, baseIndex, count, duration, owner, 0) + { + Repeat = true; + Blend = blend; + BuffType = buffType; + Light = -1; + } + + public override void Process() + { + base.Process(); + } + } + + public class TrackableEffect : Effect + { + public static List effectlist = new List(); + public string EffectName = "default"; + + public TrackableEffect(Effect baseEffect, string effName = "null") + : base(baseEffect.Library, baseEffect.BaseIndex, baseEffect.Count, baseEffect.Duration, baseEffect.Owner, baseEffect.Start) + { + Repeat = baseEffect.Repeat; + RepeatUntil = baseEffect.RepeatUntil; + Blend = baseEffect.Blend; + + EffectName = effName; + + effectlist.Add(this); + } + + public static int GetOwnerEffectID(uint objectID, string effectName = "null") + { + for (int i = 0; i < effectlist.Count; i++) + { + if (effectlist[i].Owner.ObjectID != objectID) continue; + if (effectName != "null" && effectlist[i].EffectName != effectName) continue; + return i; + } + return -1; + } + + public override void Process() + { + base.Process(); + + if (Owner == null) Remove(); + else if (Owner.Dead) Remove(); + } + + public override void Remove() + { + base.Remove(); + effectlist.Remove(this); + } + + public void RemoveNoComplete() + { + if (Owner != null) + Owner.Effects.Remove(this); + else + MapControl.Effects.Remove(this); + } + + } + + public class LightEffect : Effect + { + public LightEffect(int duration, MapObject owner, long starttime = 0, int lightDistance = 6, Color? lightColour = null) + : base(null, 0, 0, duration, owner, starttime) + { + Light = lightDistance; + LightColour = lightColour == null ? Color.White : (Color)lightColour; + } + + public LightEffect(int duration, Point source, long starttime = 0, int lightDistance = 6, Color? lightColour = null) + : base(null, 0, 0, duration, source, starttime) + { + Light = lightDistance; + LightColour = lightColour == null ? Color.White : (Color)lightColour; + } + + public override void Process() + { + if (CMain.Time >= Start + Duration) + Remove(); + GameScene.Scene.MapControl.TextureValid = false; + + } + + public override void Draw() + { + + if (CMain.Time < Start) return; + + + if (Owner != null) + { + DrawLocation = Owner.DrawLocation; + } + else + { + DrawLocation = new Point((Source.X - MapObject.User.Movement.X + MapControl.OffSetX) * MapControl.CellWidth, + (Source.Y - MapObject.User.Movement.Y + MapControl.OffSetY) * MapControl.CellHeight); + DrawLocation.Offset(MapObject.User.OffSetMove); + } + } + } + +} diff --git a/Client/MirObjects/Frames.cs b/Client/MirObjects/Frames.cs new file mode 100644 index 0000000..62bd2dd --- /dev/null +++ b/Client/MirObjects/Frames.cs @@ -0,0 +1,106 @@ +namespace Client.MirObjects +{ + public class FrameSet : Dictionary + { + public static FrameSet Player; + public static FrameSet DefaultNPC, DefaultMonster, DungeonMonster1, DungeonMonster2, DungeonMonster3, DungeonMonster4, DungeonMonster5; + + static FrameSet() + { + FrameSet frame; + + Player = new FrameSet(); + + DefaultNPC = new FrameSet + { + { MirAction.Standing, new Frame(56, 1, 3, 450) } + }; + + DefaultMonster = new FrameSet + { + { MirAction.Standing, new Frame(16, 1, 3, 500) }, + { MirAction.Walking, new Frame(16, 4, 0, 100) }, + { MirAction.Attack1, new Frame(0, 2, 0, 100) } + }; + + DungeonMonster1 = new FrameSet + { + { MirAction.Standing, new Frame(0, 1, 0, 500) }, + { MirAction.Walking, new Frame(10, 6, 4, 100) }, + { MirAction.Attack1, new Frame(90, 6, 4, 100) } + }; + + DungeonMonster2 = new FrameSet + { + { MirAction.Standing, new Frame(48, 1, 5, 500) }, + { MirAction.Walking, new Frame(48, 6, 0, 100) }, + { MirAction.Attack1, new Frame(0, 6, 0, 100) } + }; + + DungeonMonster3 = new FrameSet + { + { MirAction.Standing, new Frame(0, 1, 0, 500) }, + { MirAction.Walking, new Frame(10, 6, 4, 100) }, + { MirAction.Attack1, new Frame(90, 4, 6, 100) } + }; + + DungeonMonster4 = new FrameSet + { + { MirAction.Standing, new Frame(10, 8, 2, 500) }, + { MirAction.Walking, new Frame(10, 8, 2, 100) }, + { MirAction.Attack1, new Frame(90, 8, 2, 100) } + }; + + DungeonMonster5 = new FrameSet + { + { MirAction.Standing, new Frame(10, 8, 2, 500) }, + { MirAction.Walking, new Frame(10, 8, 2, 100) }, + { MirAction.Attack1, new Frame(90, 6, 4, 100) } + }; + + + #region Player + Player.Add(MirAction.Standing, new Frame(56, 1, 3, 500, 0, 8, 0, 250)); + Player.Add(MirAction.Walking, new Frame(56, 4, 0, 100, 64, 6, 0, 100)); + Player.Add(MirAction.Stance, new Frame(9, 1, 2, 1000, 160, 1, 0, 1000)); + Player.Add(MirAction.Attack1, new Frame(8, 3, 0, 100, 168, 6, 0, 100)); + Player.Add(MirAction.Spell, new Frame(8, 3, 0, 100, 328, 6, 0, 100)); + Player.Add(MirAction.Harvest, new Frame(0, 1, 0, 300, 376, 2, 0, 300)); + Player.Add(MirAction.Die, new Frame(88, 1, -1, 100, 416, 4, 0, 100)); + Player.Add(MirAction.Dead, new Frame(88, 1, -1, 1000, 419, 1, 3, 1000)); + Player.Add(MirAction.Revive, new Frame(56, 1, 3, 100, 416, 4, 0, 100) { Reverse = true }); + + #endregion + } + } + + public class Frame + { + public int Start, Count, Skip, EffectStart, EffectCount, EffectSkip; + public int Interval, EffectInterval; + public bool Reverse, Blend; + + public int OffSet + { + get { return Count + Skip; } + } + + public int EffectOffSet + { + get { return EffectCount + EffectSkip; } + } + + public Frame(int start, int count, int skip, int interval, int effectstart = 0, int effectcount = 0, int effectskip = 0, int effectinterval = 0) + { + Start = start; + Count = count; + Skip = skip; + Interval = interval; + EffectStart = effectstart; + EffectCount = effectcount; + EffectSkip = effectskip; + EffectInterval = effectinterval; + } + } + +} diff --git a/Client/MirObjects/ItemObject.cs b/Client/MirObjects/ItemObject.cs new file mode 100644 index 0000000..99828b3 --- /dev/null +++ b/Client/MirObjects/ItemObject.cs @@ -0,0 +1,143 @@ +using Client.MirGraphics; +using Client.MirScenes; +using S = ServerPackets; +using System.Text.RegularExpressions; + +namespace Client.MirObjects +{ + public class ItemObject : MapObject + { + public override ObjectType Race{ + get { return ObjectType.Item; } + } + + public override bool Blocking + { + get { return false; } + } + + public Size Size; + + + public ItemObject(uint objectID) : base(objectID) + { + } + + + public void Load(S.ObjectItem info) + { + Name = info.Name; + NameColour = info.NameColour; + + BodyLibrary = Libraries.FloorItems; + + CurrentLocation = info.Location; + MapLocation = info.Location; + GameScene.Scene.MapControl.AddObject(this); + DrawFrame = info.Image; + + Size = BodyLibrary.GetTrueSize(DrawFrame); + + DrawY = CurrentLocation.Y; + + } + public void Load(S.ObjectGold info) + { + Name = string.Format("Gold ({0:###,###,###})", info.Gold); + + + BodyLibrary = Libraries.Prguse; + + CurrentLocation = info.Location; + MapLocation = info.Location; + GameScene.Scene.MapControl.AddObject(this); + + DrawFrame = 38; + + Size = BodyLibrary.GetTrueSize(DrawFrame); + + DrawY = CurrentLocation.Y; + } + public override void Draw() + { + if (BodyLibrary != null) + BodyLibrary.Draw(DrawFrame, DrawLocation, DrawColour); + } + + public override void Process() + { + DrawLocation = new Point((CurrentLocation.X - User.Movement.X + MapControl.OffSetX) * MapControl.CellWidth, (CurrentLocation.Y - User.Movement.Y + MapControl.OffSetY) * MapControl.CellHeight); + DrawLocation.Offset((MapControl.CellWidth - Size.Width) / 2, (MapControl.CellHeight - Size.Height) / 2); + DrawLocation.Offset(User.OffSetMove); + DrawLocation.Offset(GlobalDisplayLocationOffset); + FinalDrawLocation = DrawLocation; + + DisplayRectangle = new Rectangle(DrawLocation, Size); + } + public override bool MouseOver(Point p) + { + return MapControl.MapLocation == CurrentLocation; + // return DisplayRectangle.Contains(p); + } + + public override void DrawName() + { + CreateLabel(Color.Transparent, false, true); + + if (NameLabel == null) return; + NameLabel.Location = new Point( + DisplayRectangle.X + (DisplayRectangle.Width - NameLabel.Size.Width) / 2, + DisplayRectangle.Y + (DisplayRectangle.Height - NameLabel.Size.Height) / 2 - 20); + NameLabel.Draw(); + } + + public override void DrawBehindEffects(bool effectsEnabled) + { + } + + public override void DrawEffects(bool effectsEnabled) + { + + + } + + public void DrawName(int y) + { + CreateLabel(Color.FromArgb(100, 0, 24, 48), true, false); + + NameLabel.Location = new Point( + DisplayRectangle.X + (DisplayRectangle.Width - NameLabel.Size.Width) / 2, + DisplayRectangle.Y + y + (DisplayRectangle.Height - NameLabel.Size.Height) / 2 - 20); + NameLabel.Draw(); + } + + private void CreateLabel(Color backColour, bool border, bool outline) + { + NameLabel = null; + + for (int i = 0; i < LabelList.Count; i++) + { + if (LabelList[i].Text != Name || LabelList[i].Border != border || LabelList[i].BackColour != backColour || LabelList[i].ForeColour != NameColour || LabelList[i].OutLine != outline) continue; + NameLabel = LabelList[i]; + break; + } + + if (NameLabel != null && !NameLabel.IsDisposed) return; + + NameLabel = new MirControls.MirLabel + { + AutoSize = true, + BorderColour = Color.Black, + BackColour = backColour, + ForeColour = NameColour, + OutLine = outline, + Border = border, + Text = Regex.Replace(Name, @"\d+$", string.Empty), + }; + + LabelList.Add(NameLabel); + } + + + } +} diff --git a/Client/MirObjects/MapCode.cs b/Client/MirObjects/MapCode.cs new file mode 100644 index 0000000..47a2997 --- /dev/null +++ b/Client/MirObjects/MapCode.cs @@ -0,0 +1,165 @@ +namespace Client.MirObjects +{ + public class CellInfo + { + public short BackIndex; + public int BackImage; + public short MiddleIndex; + public int MiddleImage; + public short FrontIndex; + public int FrontImage; + + public byte DoorIndex; + public byte DoorOffset; + + public byte FrontAnimationFrame; + public byte FrontAnimationTick; + + public byte MiddleAnimationFrame; + public byte MiddleAnimationTick; + + public short TileAnimationImage; + public short TileAnimationOffset; + public byte TileAnimationFrames; + + public byte Light; + public byte Unknown; + public List CellObjects; + + public void AddObject(MapObject ob) + { + if (CellObjects == null) CellObjects = new List(); + + CellObjects.Insert(0, ob); + Sort(); + } + public void RemoveObject(MapObject ob) + { + if (CellObjects == null) return; + + CellObjects.Remove(ob); + + if (CellObjects.Count == 0) CellObjects = null; + else Sort(); + } + public MapObject FindObject(uint ObjectID) + { + return CellObjects.Find( + delegate(MapObject mo) + { + return mo.ObjectID == ObjectID; + }); + } + public void DrawObjects() + { + if (CellObjects == null) return; + + for (int i = 0; i < CellObjects.Count; i++) + { + if (!CellObjects[i].Dead) + { + CellObjects[i].Draw(); + continue; + } + } + } + public void DrawDeadObjects() + { + if (CellObjects == null) return; + for (int i = 0; i < CellObjects.Count; i++) + { + if (!CellObjects[i].Dead) continue; + + CellObjects[i].Draw(); + } + } + + public void Sort() + { + CellObjects.Sort(delegate(MapObject ob1, MapObject ob2) + { + if (ob1.Race == ObjectType.Item && ob2.Race != ObjectType.Item) + return -1; + if (ob2.Race == ObjectType.Item && ob1.Race != ObjectType.Item) + return 1; + if (ob1.Race == ObjectType.Spell && ob2.Race != ObjectType.Spell) + return -1; + if (ob2.Race == ObjectType.Spell && ob1.Race != ObjectType.Spell) + return 1; + + int i = ob2.Dead.CompareTo(ob1.Dead); + return i == 0 ? ob1.ObjectID.CompareTo(ob2.ObjectID) : i; + }); + } + } + + class MapReader + { + public int Width, Height; + public CellInfo[,] MapCells; + private string FileName; + private byte[] Bytes; + + public MapReader(string FileName) + { + this.FileName = FileName; + initiate(); + } + + private void initiate() + { + if (File.Exists(FileName)) + { + Bytes = File.ReadAllBytes(FileName); + } + else + { + Width = 1000; + Height = 1000; + MapCells = new CellInfo[Width, Height]; + + for (int x = 0; x < Width; x++) + for (int y = 0; y < Height; y++) + { + MapCells[x, y] = new CellInfo(); + } + return; + } + + LoadMap(); + } + + private void LoadMap() + { + try + { + int offset = 0; + Width = BitConverter.ToInt16(Bytes, offset); + offset += 2; + Height = BitConverter.ToInt16(Bytes, offset); + MapCells = new CellInfo[Width, Height]; + + offset = 56; + + for (int x = 0; x < Width; x++) + for (int y = 0; y < Height; y++) + { + MapCells[x, y] = new CellInfo(); + MapCells[x, y].MiddleIndex = 1; + MapCells[x, y].MiddleImage = (short)BitConverter.ToInt16(Bytes, offset); + offset += 2; + MapCells[x, y].FrontIndex = 2; + MapCells[x, y].FrontImage = (short)BitConverter.ToInt16(Bytes, offset); + offset += 2; + if ((MapCells[x, y].MiddleImage & 0x8000) != 0) + MapCells[x, y].BackImage = 0x20000000; + MapCells[x, y].MiddleImage = (MapCells[x, y].MiddleImage & 0x7FFF); + } + } + catch (Exception ex) + { + if (Settings.LogErrors) CMain.SaveError(ex.ToString()); + } + } + } +} diff --git a/Client/MirObjects/MapObject.cs b/Client/MirObjects/MapObject.cs new file mode 100644 index 0000000..df4e826 --- /dev/null +++ b/Client/MirObjects/MapObject.cs @@ -0,0 +1,420 @@ +using Client.MirControls; +using Client.MirGraphics; +using Client.MirScenes; +using Client.MirSounds; +using Client.MirScenes.Dialogs; +using SlimDX; + +namespace Client.MirObjects +{ + public abstract class MapObject + { + public static Font ChatFont = new Font(Settings.FontName, 10F); + public static List LabelList = new List(); + + public static UserObject User; + public static MapObject MouseObject, TargetObject, MagicObject; + + private static uint mouseObjectID; + public static uint MouseObjectID + { + get { return mouseObjectID; } + set + { + if (mouseObjectID == value) return; + mouseObjectID = value; + MouseObject = MapControl.Objects.Find(x => x.ObjectID == value); + } + } + + private static uint targetObjectID; + public static uint TargetObjectID + { + get { return targetObjectID; } + set + { + if (targetObjectID == value) return; + targetObjectID = value; + TargetObject = MapControl.Objects.Find(x => x.ObjectID == value); + } + } + + private static uint magicObjectID; + public static uint MagicObjectID + { + get { return magicObjectID; } + set + { + if (magicObjectID == value) return; + magicObjectID = value; + MagicObject = MapControl.Objects.Find(x => x.ObjectID == value); + } + } + + public abstract ObjectType Race { get; } + public abstract bool Blocking { get; } + + public uint ObjectID; + public string Name = string.Empty; + public Point CurrentLocation, MapLocation; + public MirDirection Direction; + public bool Dead, Hidden; + public PoisonType Poison; + public long DeadTime; + public byte AI; + + public bool Blend = true; + + public long BlindTime; + public byte BlindCount; + + private byte percentHealth; + public virtual byte PercentHealth + { + get { return percentHealth; } + set + { + if (percentHealth == value) return; + + percentHealth = value; + } + } + public long HealthTime; + + private byte percentMana; + public virtual byte PercentMana + { + get { return percentMana; } + set + { + if (percentMana == value) return; + + percentMana = value; + } + } + + public List ActionFeed = new List(); + public QueuedAction NextAction + { + get { return ActionFeed.Count > 0 ? ActionFeed[0] : null; } + } + + public List Effects = new List(); + public List Buffs = new List(); + + public MLibrary BodyLibrary; + public Color DrawColour = Color.White, NameColour = Color.White, LightColour = Color.White; + public MirLabel NameLabel, ChatLabel, GuildLabel; + public long ChatTime; + public int DrawFrame, DrawWingFrame; + public Point DrawLocation, Movement, FinalDrawLocation, OffSetMove; + public Rectangle DisplayRectangle; + public int Light, DrawY; + public long NextMotion, NextMotion2; + public MirAction CurrentAction; + public byte CurrentActionLevel; + public bool SkipFrames; + public FrameLoop FrameLoop = null; + + //Sound + public int StruckWeapon; + + public MirLabel TempLabel; + + public static List DamageLabelList = new List(); + public List Damages = new List(); + + protected Point GlobalDisplayLocationOffset + { + get { return new Point(0, 0); } + } + + protected MapObject() { } + + protected MapObject(uint objectID) + { + ObjectID = objectID; + + for (int i = MapControl.Objects.Count - 1; i >= 0; i--) + { + MapObject ob = MapControl.Objects[i]; + if (ob.ObjectID != ObjectID) continue; + ob.Remove(); + } + + MapControl.Objects.Add(this); + } + public void Remove() + { + if (MouseObject == this) MouseObjectID = 0; + if (TargetObject == this) TargetObjectID = 0; + if (MagicObject == this) MagicObjectID = 0; + + if (this == User.NextMagicObject) + User.ClearMagic(); + + MapControl.Objects.Remove(this); + GameScene.Scene.MapControl.RemoveObject(this); + + if (ObjectID != GameScene.NPCID) return; + + GameScene.NPCID = 0; + GameScene.Scene.NPCDialog.Hide(); + } + + public abstract void Process(); + public abstract void Draw(); + public abstract bool MouseOver(Point p); + + public void AddBuffEffect(BuffType type) + { + for (int i = 0; i < Effects.Count; i++) + { + if (!(Effects[i] is BuffEffect)) continue; + if (((BuffEffect)(Effects[i])).BuffType == type) return; + } + + PlayerObject ob = null; + + if (Race == ObjectType.Player) + { + ob = (PlayerObject)this; + } + } + public void RemoveBuffEffect(BuffType type) + { + PlayerObject ob = null; + + if (Race == ObjectType.Player) + { + ob = (PlayerObject)this; + } + + for (int i = 0; i < Effects.Count; i++) + { + if (!(Effects[i] is BuffEffect)) continue; + if (((BuffEffect)(Effects[i])).BuffType != type) continue; + Effects[i].Repeat = false; + } + } + + public Color ApplyDrawColour() + { + Color drawColour = DrawColour; + if (drawColour == Color.Gray) + { + drawColour = Color.White; + DXManager.SetGrayscale(true); + } + return drawColour; + } + + public virtual Missile CreateProjectile(int baseIndex, MLibrary library, bool blend, int count, int interval, int skip, int lightDistance = 6, bool direction16 = true, Color? lightColour = null, uint targetID = 0) + { + return null; + } + + public void Chat(string text) + { + if (ChatLabel != null && !ChatLabel.IsDisposed) + { + ChatLabel.Dispose(); + ChatLabel = null; + } + + const int chatWidth = 200; + List chat = new List(); + + int index = 0; + for (int i = 1; i < text.Length; i++) + if (TextRenderer.MeasureText(CMain.Graphics, text.Substring(index, i - index), ChatFont).Width > chatWidth) + { + chat.Add(text.Substring(index, i - index - 1)); + index = i - 1; + } + chat.Add(text.Substring(index, text.Length - index)); + + text = chat[0]; + for (int i = 1; i < chat.Count; i++) + text += string.Format("\n{0}", chat[i]); + + ChatLabel = new MirLabel + { + AutoSize = true, + BackColour = Color.Transparent, + ForeColour = Color.White, + OutLine = true, + OutLineColour = Color.Black, + DrawFormat = TextFormatFlags.HorizontalCenter, + Text = text, + }; + ChatTime = CMain.Time + 5000; + } + public virtual void DrawChat() + { + if (ChatLabel == null || ChatLabel.IsDisposed) return; + + if (CMain.Time > ChatTime) + { + ChatLabel.Dispose(); + ChatLabel = null; + return; + } + + ChatLabel.ForeColour = Dead ? Color.Gray : Color.White; + ChatLabel.Location = new Point(DisplayRectangle.X + (48 - ChatLabel.Size.Width) / 2, DisplayRectangle.Y - (60 + ChatLabel.Size.Height) - (Dead ? 35 : 0)); + ChatLabel.Draw(); + } + + public virtual void CreateLabel() + { + NameLabel = null; + + for (int i = 0; i < LabelList.Count; i++) + { + if (LabelList[i].Text != Name || LabelList[i].ForeColour != NameColour) continue; + NameLabel = LabelList[i]; + break; + } + + + if (NameLabel != null && !NameLabel.IsDisposed) return; + + NameLabel = new MirLabel + { + AutoSize = true, + BackColour = Color.Transparent, + ForeColour = NameColour, + OutLine = true, + OutLineColour = Color.Black, + Text = Name, + }; + NameLabel.Disposing += (o, e) => LabelList.Remove(NameLabel); + LabelList.Add(NameLabel); + + + + } + public virtual void DrawName() + { + CreateLabel(); + + if (NameLabel == null) return; + + NameLabel.Text = Name; + NameLabel.Location = new Point(DisplayRectangle.X + (50 - NameLabel.Size.Width) / 2, DisplayRectangle.Y - (32 - NameLabel.Size.Height / 2) + (Dead ? 35 : 8)); //was 48 - + NameLabel.Draw(); + } + public virtual void DrawBlend() + { + DXManager.SetBlend(true, 0.3F); //0.8 + Draw(); + DXManager.SetBlend(false); + } + public void DrawDamages() + { + for (int i = Damages.Count - 1; i >= 0; i--) + { + Damage info = Damages[i]; + if (CMain.Time > info.ExpireTime) + { + if (info.DamageLabel != null) + { + info.DamageLabel.Dispose(); + } + + Damages.RemoveAt(i); + } + else + { + info.Draw(DisplayRectangle.Location); + } + } + } + public virtual bool ShouldDrawHealth() + { + return false; + } + public void DrawHealth() + { + string name = Name; + if (Name.Contains("(")) name = Name.Substring(Name.IndexOf("(") + 1, Name.Length - Name.IndexOf("(") - 2); + + if (Dead) return; + if (Race != ObjectType.Player && Race != ObjectType.Monster) return; + + if (CMain.Time >= HealthTime) + { + if (!ShouldDrawHealth()) return; + } + + Libraries.Prguse.Draw(151, DisplayRectangle.X + 8, DisplayRectangle.Y - 80); + int index = this == User ? 152 : 183; + Libraries.Prguse.Draw(index, new Rectangle(0, 0, (int)(40 * PercentHealth / 100F), 4), new Point(DisplayRectangle.X + 8, DisplayRectangle.Y - 80), Color.White, false); + } + + public virtual void PlayStruckSound() + { + } + + public void DrawPoison() + { + byte poisoncount = 0; + if (Poison != PoisonType.None) + { + if (Poison.HasFlag(PoisonType.Green)) + { + DXManager.Draw(DXManager.PoisonDotBackground, new Rectangle(0, 0, 6, 6), new Vector3((float)(DisplayRectangle.X + 7 + (poisoncount * 5)), (float)(DisplayRectangle.Y - 21), 0.0F), Color.Black); + DXManager.Draw(DXManager.RadarTexture, new Rectangle(0, 0, 4, 4), new Vector3((float)(DisplayRectangle.X + 8 + (poisoncount * 5)), (float)(DisplayRectangle.Y - 20), 0.0F), Color.Green); + poisoncount++; + } + if (Poison.HasFlag(PoisonType.Red)) + { + DXManager.Draw(DXManager.PoisonDotBackground, new Rectangle(0, 0, 6, 6), new Vector3((float)(DisplayRectangle.X + 7 + (poisoncount * 5)), (float)(DisplayRectangle.Y - 21), 0.0F), Color.Black); + DXManager.Draw(DXManager.RadarTexture, new Rectangle(0, 0, 4, 4), new Vector3((float)(DisplayRectangle.X + 8 + (poisoncount * 5)), (float)(DisplayRectangle.Y - 20), 0.0F), Color.Red); + poisoncount++; + } + if (Poison.HasFlag(PoisonType.Slow)) + { + DXManager.Draw(DXManager.PoisonDotBackground, new Rectangle(0, 0, 6, 6), new Vector3((float)(DisplayRectangle.X + 7 + (poisoncount * 5)), (float)(DisplayRectangle.Y - 21), 0.0F), Color.Black); + DXManager.Draw(DXManager.RadarTexture, new Rectangle(0, 0, 4, 4), new Vector3((float)(DisplayRectangle.X + 8 + (poisoncount * 5)), (float)(DisplayRectangle.Y - 20), 0.0F), Color.Purple); + poisoncount++; + } + if (Poison.HasFlag(PoisonType.Frozen)) + { + DXManager.Draw(DXManager.PoisonDotBackground, new Rectangle(0, 0, 6, 6), new Vector3((float)(DisplayRectangle.X + 7 + (poisoncount * 5)), (float)(DisplayRectangle.Y - 21), 0.0F), Color.Black); + DXManager.Draw(DXManager.RadarTexture, new Rectangle(0, 0, 4, 4), new Vector3((float)(DisplayRectangle.X + 8 + (poisoncount * 5)), (float)(DisplayRectangle.Y - 20), 0.0F), Color.Blue); + poisoncount++; + } + } + } + + public abstract void DrawBehindEffects(bool effectsEnabled); + + public abstract void DrawEffects(bool effectsEnabled); + + protected void LoopFrame(int start, int frameCount, int frameInterval, int duration) + { + if (FrameLoop == null) + { + FrameLoop = new FrameLoop + { + Start = start, + End = start + frameCount - 1, + Loops = (duration / (frameInterval * frameCount)) - 1 //Remove 1 count as we've already done a loop before this is checked + }; + } + } + } + + public class FrameLoop + { + public MirAction Action { get; set; } + public int Start { get; set; } + public int End { get; set; } + public int Loops { get; set; } + + public int CurrentCount { get; set; } + } + +} diff --git a/Client/MirObjects/MonsterObject.cs b/Client/MirObjects/MonsterObject.cs new file mode 100644 index 0000000..56be7cb --- /dev/null +++ b/Client/MirObjects/MonsterObject.cs @@ -0,0 +1,923 @@ +using Client.MirGraphics; +using Client.MirScenes; +using Client.MirSounds; +using S = ServerPackets; +using Client.MirControls; + +namespace Client.MirObjects +{ + class MonsterObject : MapObject + { + public override ObjectType Race + { + get { return ObjectType.Monster; } + } + + public override bool Blocking + { + get { return AI == 64 || (AI == 81 && Direction == (MirDirection)6) ? false : !Dead; } + } + + public Point ManualLocationOffset + { + get + { + switch (BaseImage) + { + default: + return new Point(0, 0); + } + } + } + + public Monster BaseImage; + public byte Effect; + public bool Skeleton; + + public FrameSet Frames = new FrameSet(); + public Frame Frame; + public int FrameIndex, FrameInterval, EffectFrameIndex; + + public uint TargetID; + public Point TargetPoint; + + public bool Stoned; + public byte Stage; + public int BaseSound; + + public long ShockTime; + public bool BindingShotCenter; + + public Color OldNameColor; + + public SpellEffect CurrentEffect; + + public MonsterObject(uint objectID) : base(objectID) { } + + public void Load(S.ObjectMonster info, bool update = false) + { + Name = info.Name; + NameColour = info.NameColour; + BaseImage = info.Image; + + OldNameColor = NameColour; + + CurrentLocation = info.Location; + MapLocation = info.Location; + if (!update) GameScene.Scene.MapControl.AddObject(this); + + Effect = info.Effect; + AI = info.AI; + Light = info.Light; + + Direction = info.Direction; + Dead = info.Dead; + Poison = info.Poison; + Skeleton = info.Skeleton; + Hidden = info.Hidden; + ShockTime = CMain.Time + info.ShockTime; + BindingShotCenter = info.BindingShotCenter; + + Buffs = info.Buffs; + + Stage = info.ExtraByte; + + BodyLibrary = (int)BaseImage < 1000 ? Libraries.Monster : Libraries.DungeonMonster; + + if (Dead) + ActionFeed.Add(new QueuedAction { Action = MirAction.Dead, Direction = Direction, Location = CurrentLocation }); + + BaseSound = (ushort)BaseImage * 10; + + switch (BaseImage) + { + case Monster.BoneElite: + case Monster.Wooma1: + case Monster.GiantLizard: + case Monster.Goblin: + Frames = FrameSet.DungeonMonster2; + break; + case Monster.Centipede: + case Monster.Centipede2: + case Monster.Reptile: + case Monster.Spider: + Frames = FrameSet.DungeonMonster3; + break; + case Monster.DragonBat: + Frames = FrameSet.DungeonMonster4; + break; + case Monster.Wooma2: + case Monster.Minotaur: + Frames = FrameSet.DungeonMonster5; + break; + case Monster.Zombie: + case Monster.GiantFrog: + Frames = FrameSet.DungeonMonster1; + break; + default: + Frames = FrameSet.DefaultMonster; + break; + } + + switch (BaseImage) + { + case Monster.Wolf: + case Monster.Wolf2: + BaseSound = SoundList.Wolf; + break; + case Monster.Deer: + BaseSound = SoundList.Deer; + break; + case Monster.Bull: + BaseSound = SoundList.Bull; + break; + case Monster.Doe: + BaseSound = SoundList.Doe; + break; + case Monster.Hen: + BaseSound = SoundList.Hen; + break; + case Monster.Tiger: + BaseSound = SoundList.Tiger; + break; + } + + SetAction(); + SetCurrentEffects(); + + if (CurrentAction == MirAction.Standing) + { + PlayAppearSound(); + + if (Frame != null) + { + FrameIndex = CMain.Random.Next(Frame.Count); + } + } + + NextMotion -= NextMotion % 100; + + ProcessBuffs(); + } + + public void ProcessBuffs() + { + for (int i = 0; i < Buffs.Count; i++) + { + AddBuffEffect(Buffs[i]); + } + } + + public override bool ShouldDrawHealth() + { + string name = string.Empty; + if (Name.Contains("(")) name = Name.Substring(Name.IndexOf("(") + 1, Name.Length - Name.IndexOf("(") - 2); + + return Name.EndsWith(string.Format("({0})", User.Name)) || MirScenes.Dialogs.GroupDialog.GroupList.Contains(name); + } + + public override void Process() + { + bool update = CMain.Time >= NextMotion || GameScene.CanMove; + SkipFrames = ActionFeed.Count > 1; + + ProcessFrames(); + + if (Frame == null) + { + DrawFrame = 0; + DrawWingFrame = 0; + } + else + { + int BaseIndex = 0; + if ((int)BaseImage < 1000) + BaseIndex = (int)BaseImage * 50; + else //Dungeon Monsters + BaseIndex = ((int)BaseImage - 1000) * 180; + + DrawFrame = BaseIndex + (Frame.Start + (Frame.OffSet * (byte)Direction) + FrameIndex); + DrawWingFrame = BaseIndex + (Frame.EffectStart + (Frame.EffectOffSet * (byte)Direction) + EffectFrameIndex); + } + + + #region Moving OffSet + + switch (CurrentAction) + { + case MirAction.Walking: + case MirAction.Pushed: + case MirAction.DashL: + case MirAction.DashR: + if (Frame == null) + { + OffSetMove = Point.Empty; + Movement = CurrentLocation; + break; + } + int i = 1; + + Movement = Functions.PointMove(CurrentLocation, Direction, CurrentAction == MirAction.Pushed ? 0 : -i); + + int count = Frame.Count; + int index = FrameIndex; + + if (CurrentAction == MirAction.DashR || CurrentAction == MirAction.DashL) + { + count = 3; + index %= 3; + } + + switch (Direction) + { + case MirDirection.Up: + OffSetMove = new Point(0, (int)((MapControl.CellHeight * i / (float)(count)) * (index + 1))); + break; + case MirDirection.UpRight: + OffSetMove = new Point((int)((-MapControl.CellWidth * i / (float)(count)) * (index + 1)), (int)((MapControl.CellHeight * i / (float)(count)) * (index + 1))); + break; + case MirDirection.Right: + OffSetMove = new Point((int)((-MapControl.CellWidth * i / (float)(count)) * (index + 1)), 0); + break; + case MirDirection.DownRight: + OffSetMove = new Point((int)((-MapControl.CellWidth * i / (float)(count)) * (index + 1)), (int)((-MapControl.CellHeight * i / (float)(count)) * (index + 1))); + break; + case MirDirection.Down: + OffSetMove = new Point(0, (int)((-MapControl.CellHeight * i / (float)(count)) * (index + 1))); + break; + case MirDirection.DownLeft: + OffSetMove = new Point((int)((MapControl.CellWidth * i / (float)(count)) * (index + 1)), (int)((-MapControl.CellHeight * i / (float)(count)) * (index + 1))); + break; + case MirDirection.Left: + OffSetMove = new Point((int)((MapControl.CellWidth * i / (float)(count)) * (index + 1)), 0); + break; + case MirDirection.UpLeft: + OffSetMove = new Point((int)((MapControl.CellWidth * i / (float)(count)) * (index + 1)), (int)((MapControl.CellHeight * i / (float)(count)) * (index + 1))); + break; + } + + OffSetMove = new Point(OffSetMove.X % 2 + OffSetMove.X, OffSetMove.Y % 2 + OffSetMove.Y); + break; + default: + OffSetMove = Point.Empty; + Movement = CurrentLocation; + break; + } + + #endregion + + DrawY = Movement.Y > CurrentLocation.Y ? Movement.Y : CurrentLocation.Y; + + DrawLocation = new Point((Movement.X - User.Movement.X + MapControl.OffSetX) * MapControl.CellWidth, (Movement.Y - User.Movement.Y + MapControl.OffSetY) * MapControl.CellHeight); + DrawLocation.Offset(-OffSetMove.X, -OffSetMove.Y); + DrawLocation.Offset(User.OffSetMove); + DrawLocation = DrawLocation.Add(ManualLocationOffset); + DrawLocation.Offset(GlobalDisplayLocationOffset); + + if (BodyLibrary != null && update) + { + FinalDrawLocation = DrawLocation.Add(BodyLibrary.GetOffSet(DrawFrame)); + DisplayRectangle = new Rectangle(DrawLocation, BodyLibrary.GetTrueSize(DrawFrame)); + } + + for (int i = 0; i < Effects.Count; i++) + Effects[i].Process(); + + Color colour = DrawColour; + if (Poison == PoisonType.None) + DrawColour = Color.White; + if (Poison.HasFlag(PoisonType.Green)) + DrawColour = Color.Green; + if (Poison.HasFlag(PoisonType.Red)) + DrawColour = Color.Red; + if (Poison.HasFlag(PoisonType.Slow)) + DrawColour = Color.Purple; + if (Poison.HasFlag(PoisonType.Stun)) + DrawColour = Color.Yellow; + if (Poison.HasFlag(PoisonType.Frozen)) + DrawColour = Color.Blue; + if (Poison.HasFlag(PoisonType.Paralysis)) + DrawColour = Color.Gray; + if (colour != DrawColour) GameScene.Scene.MapControl.TextureValid = false; + } + + public bool SetAction() + { + if (NextAction != null && !GameScene.CanMove) + { + switch (NextAction.Action) + { + case MirAction.Walking: + case MirAction.Pushed: + return false; + } + } + + if (ActionFeed.Count == 0) + { + CurrentAction = MirAction.Standing; + Frames.TryGetValue(CurrentAction, out Frame); + + if (MapLocation != CurrentLocation) + { + GameScene.Scene.MapControl.RemoveObject(this); + MapLocation = CurrentLocation; + GameScene.Scene.MapControl.AddObject(this); + } + + FrameIndex = 0; + + if (Frame == null) return false; + + FrameInterval = Frame.Interval; + } + else + { + QueuedAction action = ActionFeed[0]; + ActionFeed.RemoveAt(0); + + CurrentActionLevel = 0; + CurrentAction = action.Action; + CurrentLocation = action.Location; + Direction = action.Direction; + + Point temp; + switch (CurrentAction) + { + case MirAction.Walking: + case MirAction.Pushed: + int i = 1; + temp = Functions.PointMove(CurrentLocation, Direction, CurrentAction == MirAction.Pushed ? 0 : -i); + break; + default: + temp = CurrentLocation; + break; + } + + temp = new Point(action.Location.X, temp.Y > CurrentLocation.Y ? temp.Y : CurrentLocation.Y); + + if (MapLocation != temp) + { + GameScene.Scene.MapControl.RemoveObject(this); + MapLocation = temp; + GameScene.Scene.MapControl.AddObject(this); + } + + + switch (CurrentAction) + { + case MirAction.Pushed: + Frames.TryGetValue(MirAction.Walking, out Frame); + break; + case MirAction.AttackRange1: + if (!Frames.TryGetValue(CurrentAction, out Frame)) + Frames.TryGetValue(MirAction.Attack1, out Frame); + break; + case MirAction.Hide: + switch (BaseImage) + { + default: + Frames.TryGetValue(CurrentAction, out Frame); + break; + } + break; + case MirAction.Dead: + switch (BaseImage) + { + default: + Frames.TryGetValue(CurrentAction, out Frame); + break; + } + break; + default: + Frames.TryGetValue(CurrentAction, out Frame); + break; + + } + + FrameIndex = 0; + + if (Frame == null) return false; + + FrameInterval = Frame.Interval; + + Point front = Functions.PointMove(CurrentLocation, Direction, 1); + + switch (CurrentAction) + { + case MirAction.Show: + PlayPopupSound(); + break; + case MirAction.Pushed: + FrameIndex = Frame.Count - 1; + GameScene.Scene.Redraw(); + break; + case MirAction.Walking: + GameScene.Scene.Redraw(); + break; + case MirAction.Attack1: + PlayAttackSound(); + CurrentActionLevel = (byte)action.Params[1]; + break; + case MirAction.AttackRange1: + PlayRangeSound(); + TargetID = (uint)action.Params[0]; + CurrentActionLevel = (byte)action.Params[4]; + break; + case MirAction.Die: + PlayDieSound(); + break; + case MirAction.Dead: + GameScene.Scene.Redraw(); + GameScene.Scene.MapControl.SortObject(this); + if (MouseObject == this) MouseObjectID = 0; + if (TargetObject == this) TargetObjectID = 0; + if (MagicObject == this) MagicObjectID = 0; + + for (int i = 0; i < Effects.Count; i++) + Effects[i].Remove(); + + DeadTime = CMain.Time; + + break; + } + + } + + GameScene.Scene.MapControl.TextureValid = false; + + NextMotion = CMain.Time + FrameInterval; + + return true; + } + + public void SetCurrentEffects() + { + //BindingShot + if (BindingShotCenter && ShockTime > CMain.Time) + { + int effectid = TrackableEffect.GetOwnerEffectID(ObjectID); + if (effectid >= 0) + TrackableEffect.effectlist[effectid].RemoveNoComplete(); + } + else if (BindingShotCenter && ShockTime <= CMain.Time) + { + int effectid = TrackableEffect.GetOwnerEffectID(ObjectID); + if (effectid >= 0) + TrackableEffect.effectlist[effectid].Remove(); + + //SoundManager.PlaySound(20000 + 130 * 10 + 6);//sound M130-6 + //Effects.Add(new TrackableEffect(new Effect(Libraries.ArcherMagic, 8, 8, 700, this))); + + ShockTime = 0; + BindingShotCenter = false; + } + + } + + + private void ProcessFrames() + { + if (Frame == null) return; + + switch (CurrentAction) + { + case MirAction.Walking: + if (!GameScene.CanMove) return; + + GameScene.Scene.MapControl.TextureValid = false; + + if (SkipFrames) UpdateFrame(); + + if (UpdateFrame() >= Frame.Count) + { + FrameIndex = Frame.Count - 1; + SetAction(); + } + else + { + switch (FrameIndex) + { + case 1: + PlayWalkSound(true); + break; + case 4: + PlayWalkSound(false); + break; + } + } + break; + case MirAction.Pushed: + if (!GameScene.CanMove) return; + + GameScene.Scene.MapControl.TextureValid = false; + + FrameIndex -= 2; + + if (FrameIndex < 0) + { + FrameIndex = 0; + SetAction(); + } + break; + case MirAction.Show: + if (CMain.Time >= NextMotion) + { + GameScene.Scene.MapControl.TextureValid = false; + + if (SkipFrames) UpdateFrame(); + + if (UpdateFrame() >= Frame.Count) + { + FrameIndex = Frame.Count - 1; + SetAction(); + } + else + { + NextMotion += FrameInterval; + } + } + break; + case MirAction.Hide: + if (CMain.Time >= NextMotion) + { + GameScene.Scene.MapControl.TextureValid = false; + + if (SkipFrames) UpdateFrame(); + + if (UpdateFrame() >= Frame.Count) + { + FrameIndex = Frame.Count - 1; + SetAction(); + } + else + { + NextMotion += FrameInterval; + } + } + break; + case MirAction.Standing: + if (CMain.Time >= NextMotion) + { + GameScene.Scene.MapControl.TextureValid = false; + + if (SkipFrames) UpdateFrame(); + + if (UpdateFrame() >= Frame.Count) + { + FrameIndex = Frame.Count - 1; + SetAction(); + } + else + { + NextMotion += FrameInterval; + } + } + break; + case MirAction.Attack1: + if (CMain.Time >= NextMotion) + { + GameScene.Scene.MapControl.TextureValid = false; + + Point front = Functions.PointMove(CurrentLocation, Direction, 1); + + if (SkipFrames) UpdateFrame(); + + if (UpdateFrame() >= Frame.Count) + { + FrameIndex = Frame.Count - 1; + SetAction(); + } + else + { + switch (FrameIndex) + { + case 3: + { + PlaySwingSound(); + break; + } + } + NextMotion += FrameInterval; + } + } + break; + case MirAction.AttackRange1: + if (CMain.Time >= NextMotion) + { + GameScene.Scene.MapControl.TextureValid = false; + + if (SkipFrames) UpdateFrame(); + + if (UpdateFrame() >= Frame.Count) + { + FrameIndex = Frame.Count - 1; + SetAction(); + } + else + { + if (FrameIndex == 2) PlaySwingSound(); + MapObject ob = null; + Missile missile; + NextMotion += FrameInterval; + } + } + break; + + case MirAction.Die: + if (CMain.Time >= NextMotion) + { + GameScene.Scene.MapControl.TextureValid = false; + + if (SkipFrames) UpdateFrame(); + + if (UpdateFrame() >= Frame.Count) + { + FrameIndex = Frame.Count - 1; + ActionFeed.Clear(); + ActionFeed.Add(new QueuedAction { Action = MirAction.Dead, Direction = Direction, Location = CurrentLocation }); + SetAction(); + } + else + { + switch (FrameIndex) + { + case 4: + PlayDeadSound(); + break; + } + + NextMotion += FrameInterval; + } + } + break; + case MirAction.Revive: + if (CMain.Time >= NextMotion) + { + GameScene.Scene.MapControl.TextureValid = false; + + if (SkipFrames) UpdateFrame(); + + if (UpdateFrame() >= Frame.Count) + { + FrameIndex = Frame.Count - 1; + ActionFeed.Clear(); + ActionFeed.Add(new QueuedAction { Action = MirAction.Standing, Direction = Direction, Location = CurrentLocation }); + SetAction(); + } + else + { + if (FrameIndex == 3) + PlayReviveSound(); + NextMotion += FrameInterval; + } + } + break; + case MirAction.Dead: + break; + + } + + if ((CurrentAction == MirAction.Standing) && NextAction != null) + SetAction(); + else if (CurrentAction == MirAction.Dead && NextAction != null && (NextAction.Action == MirAction.Revive)) + SetAction(); + } + + public int UpdateFrame() + { + if (Frame == null) return 0; + + if (FrameLoop != null) + { + if (FrameLoop.CurrentCount > FrameLoop.Loops) + { + FrameLoop = null; + } + else if (FrameIndex >= FrameLoop.End) + { + FrameIndex = FrameLoop.Start - 1; + FrameLoop.CurrentCount++; + } + } + + if (Frame.Reverse) return Math.Abs(--FrameIndex); + + return ++FrameIndex; + } + + public override Missile CreateProjectile(int baseIndex, MLibrary library, bool blend, int count, int interval, int skip, int lightDistance = 6, bool direction16 = true, Color? lightColour = null, uint targetID = 0) + { + if (targetID == 0) + { + targetID = TargetID; + } + + MapObject ob = MapControl.GetObject(targetID); + + var targetPoint = TargetPoint; + + if (ob != null) targetPoint = ob.CurrentLocation; + + int duration = Functions.MaxDistance(CurrentLocation, targetPoint) * 50; + + Missile missile = new Missile(library, baseIndex, duration / interval, duration, this, targetPoint, direction16) + { + Target = ob, + Interval = interval, + FrameCount = count, + Blend = blend, + Skip = skip, + Light = lightDistance, + LightColour = lightColour == null ? Color.White : (Color)lightColour + }; + + Effects.Add(missile); + + return missile; + } + + private void PlaySummonSound() + { + } + private void PlayWalkSound(bool left = true) + { + if (left) + { + } + else + { + } + } + public void PlayAppearSound() + { + SoundManager.PlaySound(BaseSound); + } + public void PlayPopupSound() + { + SoundManager.PlaySound(BaseSound); + } + + public void PlayRunSound() + { + } + + public void PlayJumpSound() + { + } + + public void PlayDashSound() + { + } + + public override void PlayStruckSound() + { + switch (StruckWeapon) + { + default: + SoundManager.PlaySound(SoundList.StruckBodySword); + break; + case -1: + SoundManager.PlaySound(SoundList.StruckBodyFist); + break; + } + } + + public void PlayAttackSound() + { + } + + public void PlaySwingSound() + { + } + public void PlayDieSound() + { + } + + public void PlayDeadSound() + { + } + public void PlayReviveSound() + { + } + public void PlayRangeSound() + { + } + public override void Draw() + { + DrawBehindEffects(Settings.Effect); + + float oldOpacity = DXManager.Opacity; + if (Hidden && !DXManager.Blending) DXManager.SetOpacity(0.5F); + + if (BodyLibrary == null || Frame == null) return; + + bool oldGrayScale = DXManager.GrayScale; + Color drawColour = ApplyDrawColour(); + + if (!DXManager.Blending && Frame.Blend) + BodyLibrary.DrawBlend(DrawFrame, DrawLocation, drawColour, true); + else + BodyLibrary.Draw(DrawFrame, DrawLocation, drawColour, true); + + DXManager.SetGrayscale(oldGrayScale); + DXManager.SetOpacity(oldOpacity); + } + + + public override bool MouseOver(Point p) + { + return MapControl.MapLocation == CurrentLocation || BodyLibrary != null && BodyLibrary.VisiblePixel(DrawFrame, p.Subtract(FinalDrawLocation), false); + } + + public override void DrawBehindEffects(bool effectsEnabled) + { + for (int i = 0; i < Effects.Count; i++) + { + if (!Effects[i].DrawBehind) continue; + Effects[i].Draw(); + } + } + + public override void DrawEffects(bool effectsEnabled) + { + if (!effectsEnabled) return; + + for (int i = 0; i < Effects.Count; i++) + { + if (Effects[i].DrawBehind) continue; + Effects[i].Draw(); + } + } + + public override void DrawName() + { + if (!Name.Contains("_")) + { + base.DrawName(); + return; + } + + string[] splitName = Name.Split('_'); + + //IntelligentCreature + int yOffset = 0; + + for (int s = 0; s < splitName.Count(); s++) + { + CreateMonsterLabel(splitName[s], s); + + TempLabel.Text = splitName[s]; + TempLabel.Location = new Point(DisplayRectangle.X + (48 - TempLabel.Size.Width) / 2, DisplayRectangle.Y - (32 - TempLabel.Size.Height / 2) + (Dead ? 35 : 8) - (((splitName.Count() - 1) * 10) / 2) + (s * 12) + yOffset); + TempLabel.Draw(); + } + } + + public void CreateMonsterLabel(string word, int wordOrder) + { + TempLabel = null; + + for (int i = 0; i < LabelList.Count; i++) + { + if (LabelList[i].Text != word) continue; + TempLabel = LabelList[i]; + break; + } + + if (TempLabel != null && !TempLabel.IsDisposed && NameColour == OldNameColor) return; + + OldNameColor = NameColour; + + TempLabel = new MirLabel + { + AutoSize = true, + BackColour = Color.Transparent, + ForeColour = NameColour, + OutLine = true, + OutLineColour = Color.Black, + Text = word, + }; + + TempLabel.Disposing += (o, e) => LabelList.Remove(TempLabel); + LabelList.Add(TempLabel); + } + + public override void DrawChat() + { + if (ChatLabel == null || ChatLabel.IsDisposed) return; + + if (CMain.Time > ChatTime) + { + ChatLabel.Dispose(); + ChatLabel = null; + return; + } + + int yOffset = 0; + + ChatLabel.ForeColour = Dead ? Color.Gray : Color.White; + ChatLabel.Location = new Point(DisplayRectangle.X + (48 - ChatLabel.Size.Width) / 2, DisplayRectangle.Y - (60 + ChatLabel.Size.Height) - (Dead ? 35 : 0) + yOffset); + ChatLabel.Draw(); + } + } +} diff --git a/Client/MirObjects/NPCObject.cs b/Client/MirObjects/NPCObject.cs new file mode 100644 index 0000000..5b2597d --- /dev/null +++ b/Client/MirObjects/NPCObject.cs @@ -0,0 +1,443 @@ +using Client.MirControls; +using Client.MirGraphics; +using Client.MirScenes; +using S = ServerPackets; + +namespace Client.MirObjects +{ + public class NPCObject : MapObject + { + public override ObjectType Race + { + get { return ObjectType.Merchant; } + } + public override bool Blocking + { + get { return true; } + } + + public FrameSet Frames; + public Frame Frame; + + public MLibrary HairLibrary; + + public long QuestTime; + public int BaseIndex, FrameIndex, FrameInterval, EffectFrameIndex, EffectFrameInterval, QuestIndex; + + public ushort Image; + public MirGender Gender; + public byte Hair; + public Color Colour = Color.White; + + public QuestIcon QuestIcon = QuestIcon.None; + + private bool _canChangeDir = true; + + public bool CanChangeDir + { + get { return _canChangeDir; } + set + { + _canChangeDir = value; + if (value == false) Direction = MirDirection.Down; + } + } + + public List Quests; + + + public NPCObject(uint objectID) : base(objectID) + { + } + + public void Load(S.ObjectNPC info) + { + Name = info.Name; + NameColour = info.NameColour; + CurrentLocation = info.Location; + Direction = info.Direction; + Movement = info.Location; + MapLocation = info.Location; + GameScene.Scene.MapControl.AddObject(this); + + Quests = GameScene.QuestInfoList.Where(c => c.NPCIndex == ObjectID).ToList(); + + Image = info.Image; + Gender = info.Gender; + Hair = info.Hair; + Colour = info.Colour; + + LoadLibrary(); + + Frames = FrameSet.DefaultNPC; + + Light = 10; + BaseIndex = 0; + + SetAction(true); + } + + public void LoadLibrary() + { + BodyLibrary = Libraries.Body; + HairLibrary = Libraries.Head; + } + + public override void Process() + { + bool update = CMain.Time >= NextMotion || GameScene.CanMove; + + ProcessFrames(); + + if (update) + { + UpdateBestQuestIcon(); + } + + if (Frame == null) + { + DrawFrame = 0; + DrawWingFrame = 0; + } + else + { + DrawFrame = Frame.Start + (Frame.OffSet * (byte)Direction) + FrameIndex; + DrawWingFrame = Frame.EffectStart + (Frame.EffectOffSet * (byte)Direction) + EffectFrameIndex; + } + + DrawY = CurrentLocation.Y; + + DrawLocation = new Point((Movement.X - User.Movement.X + MapControl.OffSetX) * MapControl.CellWidth, (Movement.Y - User.Movement.Y + MapControl.OffSetY) * MapControl.CellHeight); + DrawLocation.Offset(User.OffSetMove); + DrawLocation.Offset(GlobalDisplayLocationOffset); + + if (BodyLibrary != null) + FinalDrawLocation = DrawLocation.Add(BodyLibrary.GetOffSet(DrawFrame)); + + if (BodyLibrary != null && update) + { + FinalDrawLocation = DrawLocation.Add(BodyLibrary.GetOffSet(DrawFrame)); + DisplayRectangle = new Rectangle(DrawLocation, BodyLibrary.GetTrueSize(DrawFrame)); + } + + for (int i = 0; i < Effects.Count; i++) + Effects[i].Process(); + + Color colour = DrawColour; + + switch (Poison) + { + case PoisonType.None: + DrawColour = Color.White; + break; + case PoisonType.Green: + DrawColour = Color.Green; + break; + case PoisonType.Red: + DrawColour = Color.Red; + break; + case PoisonType.Slow: + DrawColour = Color.Purple; + break; + case PoisonType.Stun: + DrawColour = Color.Yellow; + break; + case PoisonType.Frozen: + DrawColour = Color.Blue; + break; + case PoisonType.Paralysis: + DrawColour = Color.Gray; + break; + } + + + if (colour != DrawColour) GameScene.Scene.MapControl.TextureValid = false; + + + if (CMain.Time > QuestTime) + { + QuestTime = CMain.Time + 500; + if (++QuestIndex > 1) QuestIndex = 0; + } + } + public virtual void ProcessFrames() + { + if (Frame == null) return; + + switch (CurrentAction) + { + case MirAction.Standing: + if (CMain.Time >= NextMotion) + { + GameScene.Scene.MapControl.TextureValid = false; + + if (SkipFrames) UpdateFrame(); + + if (UpdateFrame() >= Frame.Count) + { + FrameIndex = Frame.Count - 1; + SetAction(); + } + else + { + NextMotion += FrameInterval; + } + } + + if(EffectFrameInterval > 0) + if (CMain.Time >= NextMotion2) + { + GameScene.Scene.MapControl.TextureValid = false; + + if (SkipFrames) UpdateFrame2(); + + if (UpdateFrame2() >= Frame.EffectCount) + EffectFrameIndex = Frame.EffectCount - 1; + else + NextMotion2 += EffectFrameInterval; + } + break; + + } + + } + public int UpdateFrame() + { + if (Frame == null) return 0; + + if (Frame.Reverse) return Math.Abs(--FrameIndex); + + return ++FrameIndex; + } + + public int UpdateFrame2() + { + if (Frame == null) return 0; + + if (Frame.Reverse) return Math.Abs(--EffectFrameIndex); + + return ++EffectFrameIndex; + } + + public virtual void SetAction(bool randomStartFrame = false) + { + if (ActionFeed.Count == 0) + { + CurrentAction = MirAction.Standing; + Frames.TryGetValue(CurrentAction, out Frame); + + if (randomStartFrame) + { + var frameIndex = new Random().Next(Frame.Count); + + FrameIndex = frameIndex; + EffectFrameIndex = Math.Min(Frame.EffectCount, frameIndex); + } + else + { + FrameIndex = 0; + EffectFrameIndex = 0; + } + + if (MapLocation != CurrentLocation) + { + GameScene.Scene.MapControl.RemoveObject(this); + MapLocation = CurrentLocation; + GameScene.Scene.MapControl.AddObject(this); + } + + if (Frame == null) return; + + FrameInterval = Frame.Interval; + EffectFrameInterval = Frame.EffectInterval; + } + else + { + QueuedAction action = ActionFeed[0]; + ActionFeed.RemoveAt(0); + + CurrentAction = action.Action; + CurrentLocation = action.Location; + + FrameIndex = 0; + EffectFrameIndex = 0; + + if (Frame == null) return; + + FrameInterval = Frame.Interval; + EffectFrameInterval = Frame.EffectInterval; + } + + NextMotion = CMain.Time + FrameInterval; + NextMotion2 = CMain.Time + EffectFrameInterval; + + GameScene.Scene.MapControl.TextureValid = false; + + } + public override void Draw() + { + if (BodyLibrary == null) return; + + BodyLibrary.DrawTinted(240 * Image + 120 * (byte)Gender + DrawFrame, DrawLocation, DrawColour, Colour, true); + HairLibrary.DrawTinted(240 * Hair + 120 * (byte)Gender + DrawFrame, DrawLocation, DrawColour, Colour, true); + + if (QuestIcon == QuestIcon.None) return; + + var offSet = BodyLibrary.GetOffSet(BaseIndex); + var size = BodyLibrary.GetSize(BaseIndex); + + int imageIndex = 981 + ((int)QuestIcon * 2) + QuestIndex; + + Libraries.Prguse.Draw(imageIndex, DrawLocation.Add(offSet).Add(size.Width / 2 - 28, -40), Color.White, false); + } + + public override bool MouseOver(Point p) + { + return MapControl.MapLocation == CurrentLocation || BodyLibrary != null && BodyLibrary.VisiblePixel(DrawFrame, p.Subtract(FinalDrawLocation), false); + } + + public override void DrawBehindEffects(bool effectsEnabled) + { + } + + public override void DrawEffects(bool effectsEnabled) + { + if (!effectsEnabled) return; + + if (BodyLibrary == null) return; + + if (DrawWingFrame > 0) + BodyLibrary.DrawBlend(DrawWingFrame, DrawLocation, Color.White, true); + } + + public override void DrawName() + { + if (!Name.Contains("_")) + { + base.DrawName(); + return; + } + + string[] splitName = Name.Split('_'); + + for (int s = 0; s < splitName.Count(); s++) + { + CreateNPCLabel(splitName[s], s); + + TempLabel.Text = splitName[s]; + TempLabel.Location = new Point(DisplayRectangle.X + (48 - TempLabel.Size.Width) / 2, DisplayRectangle.Y - (32 - TempLabel.Size.Height / 2) + (Dead ? 35 : 8) - (((splitName.Count() - 1) * 10) / 2) + (s * 12)); + TempLabel.Draw(); + } + } + + public void CreateNPCLabel(string word, int wordOrder) + { + TempLabel = null; + + for (int i = 0; i < LabelList.Count; i++) + { + if (LabelList[i].Text != word || LabelList[i].ForeColour != (wordOrder == 0 ? NameColour : Color.White)) continue; + TempLabel = LabelList[i]; + break; + } + + if (TempLabel != null && !TempLabel.IsDisposed) return; + + TempLabel = new MirLabel + { + AutoSize = true, + BackColour = Color.Transparent, + ForeColour = wordOrder == 0 ? NameColour : Color.White, + OutLine = true, + OutLineColour = Color.Black, + Text = word, + }; + + TempLabel.Disposing += (o, e) => LabelList.Remove(TempLabel); + LabelList.Add(TempLabel); + } + + + //Quests + + #region Quest System + public void UpdateBestQuestIcon() + { + ClientQuestProgress quests = GetAvailableQuests(true).FirstOrDefault(); + QuestIcon bestIcon = QuestIcon.None; + + if (quests != null) + { + bestIcon = quests.Icon; + } + + QuestIcon = bestIcon; + } + + public List GetAvailableQuests(bool returnFirst = false) + { + List quests = new List(); + + foreach (ClientQuestProgress q in User.CurrentQuests.Where(q => !User.CompletedQuests.Contains(q.QuestInfo.Index))) + { + if (q.QuestInfo.FinishNPCIndex == ObjectID) + { + quests.Add(q); + } + else if (q.QuestInfo.NPCIndex == ObjectID && q.QuestInfo.SameFinishNPC) + { + quests.Add(q); + + if (returnFirst) return quests; + } + } + + foreach (ClientQuestProgress quest in ( + from q in Quests + where !quests.Exists(p => p.QuestInfo.Index == q.Index) + where CanAccept(q) + where !User.CompletedQuests.Contains(q.Index) + select q).Select( + q => User.CurrentQuests.Exists(p => p.QuestInfo.Index == q.Index) ? + new ClientQuestProgress { QuestInfo = q, Taken = true, Completed = false } : + new ClientQuestProgress { QuestInfo = q })) + { + quests.Add(quest); + + if (returnFirst) return quests; + } + + return quests; + } + + public bool CanAccept(ClientQuestInfo quest) + { + if (quest.MinLevelNeeded > User.Level || quest.MaxLevelNeeded < User.Level) + return false; + + if (!quest.ClassNeeded.HasFlag(RequiredClass.None)) + { + switch (User.Class) + { + case MirClass.Warrior: + if (!quest.ClassNeeded.HasFlag(RequiredClass.Warrior)) + return false; + break; + case MirClass.Wizard: + if (!quest.ClassNeeded.HasFlag(RequiredClass.Wizard)) + return false; + break; + case MirClass.Taoist: + if (!quest.ClassNeeded.HasFlag(RequiredClass.Taoist)) + return false; + break; + } + } + + //check against active quest list + return quest.QuestNeeded <= 0 || User.CompletedQuests.Contains(quest.QuestNeeded); + } + + #endregion + } +} diff --git a/Client/MirObjects/PathFinder.cs b/Client/MirObjects/PathFinder.cs new file mode 100644 index 0000000..f8fdff3 --- /dev/null +++ b/Client/MirObjects/PathFinder.cs @@ -0,0 +1,297 @@ +using Client.MirScenes; + +namespace Client.MirObjects +{ + public class Heap where T : IHeapItem + { + private T[] items; + private int currentItemCount; + + public Heap(int maxHeapSize) + { + items = new T[maxHeapSize]; + } + + public void Add(T item) + { + item.HeapIndex = currentItemCount; + items[currentItemCount] = item; + SortUp(item); + currentItemCount++; + } + + public T RemoveFirst() + { + T firstItem = items[0]; + currentItemCount--; + + items[0] = items[currentItemCount]; + items[0].HeapIndex = 0; + + SortDown(items[0]); + + return firstItem; + } + + public void UpdateItem(T item) + { + SortUp(item); + } + + public int Count { get { return currentItemCount; } } + + public bool Contains(T item) + { + return Equals(items[item.HeapIndex], item); + } + + private void SortDown(T item) + { + while (true) + { + int childIndexLeft = (item.HeapIndex * 2) + 1; + int childIndexRight = (item.HeapIndex * 2) + 2; + int swapIndex = 0; + + if (childIndexLeft < currentItemCount) + { + swapIndex = childIndexLeft; + if (childIndexRight < currentItemCount) + { + if (items[childIndexLeft].CompareTo(items[childIndexRight]) < 0) + { + swapIndex = childIndexRight; + } + } + + if (item.CompareTo(items[swapIndex]) < 0) + { + Swap(item, items[swapIndex]); + } + else + { + return; + } + } + else + { + return; + } + } + } + + private void SortUp(T item) + { + int parentIndex = (item.HeapIndex - 1) / 2; + + while (true) + { + T parentItem = items[parentIndex]; + if (item.CompareTo(parentItem) > 0) + { + Swap(item, parentItem); + } + else + break; + + parentIndex = (item.HeapIndex - 1) / 2; + } + } + + private void Swap(T itemA, T itemB) + { + items[itemA.HeapIndex] = itemB; + items[itemB.HeapIndex] = itemA; + + int itemAIndex = itemA.HeapIndex; + itemA.HeapIndex = itemB.HeapIndex; + itemB.HeapIndex = itemAIndex; + } + } + + public interface IHeapItem : IComparable + { + int HeapIndex + { + get; set; + } + } + + public class Node : IHeapItem + { + public bool Walkable + { + get { return Map.EmptyCell(Location); } + } + + public MapControl Map; + public Point Location; + public Node Parent; + + public int GCost, HCost; + + public int FCost + { + get { return GCost + HCost; } + } + + private int _heapIndex; + + public int HeapIndex + { + get { return _heapIndex; } + set { _heapIndex = value; } + } + + public int CompareTo(Node nodeToCompare) + { + int compare = FCost.CompareTo(nodeToCompare.FCost); + if (compare == 0) + { + compare = HCost.CompareTo(nodeToCompare.HCost); + } + return -compare; + } + + public Node(MapControl map, int x, int y) + { + Map = map; + Location = new Point(x, y); + } + } + + public class PathFinder + { + private Node[,] Grid; + + public MapControl Map; + + public int MaxSize + { + get { return Map.Width * Map.Height; } + } + + public PathFinder(MapControl map) + { + Map = map; + + CreateGrid(); + } + + private void CreateGrid() + { + Grid = new Node[Map.Width, Map.Height]; + + for (int x = 0; x < Map.Width; x++) + { + for (int y = 0; y < Map.Height; y++) + { + Grid[x, y] = new Node(Map, x, y); + } + } + } + + public List FindPath(Point start, Point target, int MaxNodes = 0) + { + Node startNode = GetNode(start); + Node targetNode = GetNode(target); + + Heap openSet = new Heap(MaxSize); + HashSet closedSet = new HashSet(); + + openSet.Add(startNode); + + while (openSet.Count > 0) + { + Node currentNode = openSet.RemoveFirst(); + + closedSet.Add(currentNode); + + if (currentNode == targetNode) + { + var path = RetracePath(startNode, targetNode); + return MaxNodes == 0 || path.Count < MaxNodes ? path : null; + } + + foreach (Node neighbor in GetNeighbours(currentNode)) + { + if (!neighbor.Walkable || closedSet.Contains(neighbor)) + continue; + + int newMovementCostToNeighbor = currentNode.GCost + GetDistance(currentNode, neighbor); + if (newMovementCostToNeighbor < neighbor.GCost || !openSet.Contains(neighbor)) + { + neighbor.GCost = newMovementCostToNeighbor; + neighbor.HCost = GetDistance(neighbor, targetNode); + neighbor.Parent = currentNode; + + if (!openSet.Contains(neighbor)) + openSet.Add(neighbor); + else + { + openSet.UpdateItem(neighbor); + } + } + } + } + + return null; + } + + public List RetracePath(Node startNode, Node endNode) + { + List path = new List(); + Node currentNode = endNode; + + while (currentNode != startNode) + { + path.Add(currentNode); + currentNode = currentNode.Parent; + } + + path.Add(startNode); + path.Reverse(); + + return path; + } + + private int GetDistance(Node nodeA, Node nodeB) + { + int distX = Math.Abs(nodeA.Location.X - nodeB.Location.X); + int distY = Math.Abs(nodeA.Location.Y - nodeB.Location.Y); + + if (distX > distY) + return 14 * distY + (10 * (distX - distY)); + + return 14 * distX + (10 * (distY - distX)); + } + + private Node GetNode(Point location) + { + return Grid[location.X, location.Y]; + } + + private List GetNeighbours(Node node) + { + List neighbours = new List(); + for (int x = -1; x <= 1; x++) + { + for (int y = -1; y <= 1; y++) + { + if (x == 0 && y == 0) continue; + + int checkX = node.Location.X + x; + int checkY = node.Location.Y + y; + + if (checkX >= 0 && checkX < Grid.GetLength(0) && checkY >= 0 && checkY < Grid.GetLength(1)) + { + neighbours.Add(Grid[checkX, checkY]); + } + } + } + + return neighbours; + } + + } +} \ No newline at end of file diff --git a/Client/MirObjects/PlayerObject.cs b/Client/MirObjects/PlayerObject.cs new file mode 100644 index 0000000..dbd23d2 --- /dev/null +++ b/Client/MirObjects/PlayerObject.cs @@ -0,0 +1,1934 @@ +using Client.MirGraphics; +using Client.MirNetwork; +using Client.MirScenes; +using Client.MirSounds; +using Client.MirControls; +using S = ServerPackets; +using C = ClientPackets; +using Client.MirScenes.Dialogs; +using System.Reflection; + +namespace Client.MirObjects +{ + public class PlayerObject : MapObject + { + public override ObjectType Race + { + get { return ObjectType.Player; } + } + + public override bool Blocking + { + get { return !Dead; } + } + + public MirGender Gender; + public MirClass Class; + public byte Hair; + public ushort Level; + + public MLibrary WeaponLibrary1, HairLibrary, WingLibrary; + public int Armour, Weapon, ArmourOffSet, HairOffSet, WeaponOffSet, WingOffset; + + public int DieSound, FlinchSound, AttackSound; + + + public FrameSet Frames; + public Frame Frame, WingFrame; + public int FrameIndex, FrameInterval, EffectFrameIndex, EffectFrameInterval, SlowFrameIndex; + public byte SkipFrameUpdate = 0; + + public Spell Spell; + public byte SpellLevel; + public bool Cast; + public uint TargetID; + public List SecondaryTargetIDs; + public Point TargetPoint; + + public bool MagicShield; + public Effect ShieldEffect; + + public byte WingEffect; + private short StanceDelay = 2500; + + public SpellEffect CurrentEffect; + + public long StanceTime; + + public string GuildName; + public string GuildRankName; + + public LevelEffects LevelEffects; + + public PlayerObject() { } + public PlayerObject(uint objectID) : base(objectID) + { + Frames = FrameSet.Player; + } + + public void Load(S.ObjectPlayer info) + { + Name = info.Name; + NameColour = info.NameColour; + GuildName = info.GuildName; + GuildRankName = info.GuildRankName; + Class = info.Class; + Gender = info.Gender; + Level = info.Level; + + CurrentLocation = info.Location; + MapLocation = info.Location; + GameScene.Scene.MapControl.AddObject(this); + + Direction = info.Direction; + Hair = info.Hair; + + Weapon = info.Weapon; + Armour = info.Armour; + Light = info.Light; + + Poison = info.Poison; + + Dead = info.Dead; + Hidden = info.Hidden; + + WingEffect = info.WingEffect; + CurrentEffect = info.Effect; + + SetLibraries(); + + if (Dead) ActionFeed.Add(new QueuedAction { Action = MirAction.Dead, Direction = Direction, Location = CurrentLocation }); + if (info.Extra) Effects.Add(new Effect(Libraries.Magic2, 670, 10, 800, this)); + + Buffs = info.Buffs; + + LevelEffects = info.LevelEffects; + + ProcessBuffs(); + + SetAction(); + + SetEffects(); + } + public void Update(S.PlayerUpdate info) + { + Weapon = info.Weapon; + Armour = info.Armour; + Light = info.Light; + WingEffect = info.WingEffect; + + SetLibraries(); + SetEffects(); + } + + public override bool ShouldDrawHealth() + { + if (GroupDialog.GroupList.Contains(Name) || this == User) + { + return true; + } + else + { + return false; + } + } + + public void ProcessBuffs() + { + for (int i = 0; i < Buffs.Count; i++) + { + AddBuffEffect(Buffs[i]); + } + } + + + public virtual void SetLibraries() + { + #region Armours + BodyLibrary = Libraries.Body; + HairLibrary = Libraries.Head; + #endregion + + #region Weapons + + if (Weapon >= 0) + { + WeaponLibrary1 = Libraries.Weapon; + } + else + { + WeaponLibrary1 = null; + } + + #endregion + + #region WingEffects + if (WingEffect > 0 && WingEffect < 100) + { + WingLibrary = null; + } + #endregion + + #region Offsets + ArmourOffSet = 240 * Armour + 120 * (int)Gender; + HairOffSet = 240 * Hair + 120 * (int)Gender; + WeaponOffSet = 240 * Weapon + 120 * (int)Gender; + WingOffset = 240 * WingEffect + 120 * (int)Gender; + #endregion + } + + public virtual void SetEffects() + { + for (int i = Effects.Count - 1; i >= 0; i--) + { + if (Effects[i] is SpecialEffect) Effects[i].Remove(); + } + + if (CurrentEffect == SpellEffect.MagicShieldUp) + { + if (ShieldEffect != null) + { + ShieldEffect.Clear(); + ShieldEffect.Remove(); + } + + MagicShield = true; + Effects.Add(ShieldEffect = new Effect(Libraries.Magic, 3890, 3, 600, this) { Repeat = true }); + } + + if (WingEffect >= 100) + { + switch(WingEffect) + { + case 100: //Oma King Robe effect + Effects.Add(new SpecialEffect(Libraries.Effect, 352, 33, 3600, this, true, false, 0) { Repeat = true }); + break; + } + } + + long delay = 5000; + + if (LevelEffects == LevelEffects.None) return; + + //Effects dependant on flags + if (LevelEffects.HasFlag(LevelEffects.BlueDragon)) + { + Effects.Add(new SpecialEffect(Libraries.Effect, 1210, 20, 3200, this, true, true, 1) { Repeat = true }); + SpecialEffect effect = new SpecialEffect(Libraries.Effect, 1240, 32, 4200, this, true, false, 1) { Repeat = true }; + effect.SetStart(CMain.Time); + Effects.Add(effect); + } + + if (LevelEffects.HasFlag(LevelEffects.RedDragon)) + { + Effects.Add(new SpecialEffect(Libraries.Effect, 990, 20, 3200, this, true, true, 1) { Repeat = true }); + SpecialEffect effect = new SpecialEffect(Libraries.Effect, 1020, 32, 4200, this, true, false, 1) { Repeat = true, Delay = delay }; + effect.SetStart(CMain.Time + delay); + Effects.Add(effect); + } + + if (LevelEffects.HasFlag(LevelEffects.Mist)) + { + Effects.Add(new SpecialEffect(Libraries.Effect, 296, 32, 3600, this, true, false, 1) { Repeat = true }); + } + + if (LevelEffects.HasFlag(LevelEffects.Rebirth1)) + { + Effects.Add(new SpecialEffect(Libraries.Magic2, 6800, 20, 3600, this, true, false, 1) { Repeat = true }); + + + } + + if (LevelEffects.HasFlag(LevelEffects.Rebirth2)) + { + Effects.Add(new SpecialEffect(Libraries.Magic2, 6870, 19, 3600, this, true, true, 1) { Repeat = true }); + SpecialEffect effect = new SpecialEffect(Libraries.Magic2, 6840, 22, 3600, this, true, false, 1) { Repeat = true, Delay = delay }; + effect.SetStart(CMain.Time + delay); + Effects.Add(effect); + } + + if (LevelEffects.HasFlag(LevelEffects.Rebirth3)) + { + Effects.Add(new SpecialEffect(Libraries.Magic2, 6906, 19, 3600, this, true, false, 1) { Repeat = true, Delay = delay }); + SpecialEffect effect = new SpecialEffect(Libraries.Magic2, 6930, 29, 3600, this, true, true, 1) { Repeat = true }; + + Effects.Add(effect); + } + + if (LevelEffects.HasFlag(LevelEffects.NewBlue)) + { + Effects.Add(new SpecialEffect(Libraries.Magic2, 7040, 31, 3600, this, true, false, 1) { Repeat = true, Delay = delay }); + SpecialEffect effect = new SpecialEffect(Libraries.Magic2,7080, 24, 3600, this, true, true, 1) { Repeat = true }; + + Effects.Add(effect); + } + + if (LevelEffects.HasFlag(LevelEffects.YellowDragon)) + { + Effects.Add(new SpecialEffect(Libraries.Magic2, 7120, 31, 3600, this, true, false, 1) { Repeat = true, Delay = delay }); + SpecialEffect effect = new SpecialEffect(Libraries.Magic2, 7160, 24, 3600, this, true, true, 1) { Repeat = true }; + + Effects.Add(effect); + } + + if (LevelEffects.HasFlag(LevelEffects.Phoenix)) + { + Effects.Add(new SpecialEffect(Libraries.Magic2, 6970, 26, 3600, this, true, false, 1) { Repeat = true, Delay = delay }); + SpecialEffect effect = new SpecialEffect(Libraries.Magic2, 7000, 21, 3600, this, true, true, 1) { Repeat = true }; + + Effects.Add(effect); + } + } + + public override void Process() + { + bool update = CMain.Time >= NextMotion || GameScene.CanMove; + + SkipFrames = this != User && ActionFeed.Count > 1; + + ProcessFrames(); + + if (Frame == null) + { + DrawFrame = 0; + DrawWingFrame = 0; + } + else + { + DrawFrame = Frame.Start + (Frame.OffSet * (byte)Direction) + FrameIndex; + DrawWingFrame = Frame.EffectStart + (Frame.EffectOffSet * (byte)Direction) + EffectFrameIndex; + } + + #region Moving OffSet + + switch (CurrentAction) + { + case MirAction.Walking: + case MirAction.Pushed: + case MirAction.DashL: + case MirAction.DashR: + if (Frame == null) + { + OffSetMove = Point.Empty; + Movement = CurrentLocation; + break; + } + + var i = 1; + + Movement = Functions.PointMove(CurrentLocation, Direction, CurrentAction == MirAction.Pushed ? 0 : -i); + + int count = Frame.Count; + int index = FrameIndex; + + if (CurrentAction == MirAction.DashR || CurrentAction == MirAction.DashL) + { + count = 3; + index %= 3; + } + + switch (Direction) + { + case MirDirection.Up: + OffSetMove = new Point(0, (int)((MapControl.CellHeight * i / (float)(count)) * (index + 1))); + break; + case MirDirection.UpRight: + OffSetMove = new Point((int)((-MapControl.CellWidth * i / (float)(count)) * (index + 1)), (int)((MapControl.CellHeight * i / (float)(count)) * (index + 1))); + break; + case MirDirection.Right: + OffSetMove = new Point((int)((-MapControl.CellWidth * i / (float)(count)) * (index + 1)), 0); + break; + case MirDirection.DownRight: + OffSetMove = new Point((int)((-MapControl.CellWidth * i / (float)(count)) * (index + 1)), (int)((-MapControl.CellHeight * i / (float)(count)) * (index + 1))); + break; + case MirDirection.Down: + OffSetMove = new Point(0, (int)((-MapControl.CellHeight * i / (float)(count)) * (index + 1))); + break; + case MirDirection.DownLeft: + OffSetMove = new Point((int)((MapControl.CellWidth * i / (float)(count)) * (index + 1)), (int)((-MapControl.CellHeight * i / (float)(count)) * (index + 1))); + break; + case MirDirection.Left: + OffSetMove = new Point((int)((MapControl.CellWidth * i / (float)(count)) * (index + 1)), 0); + break; + case MirDirection.UpLeft: + OffSetMove = new Point((int)((MapControl.CellWidth * i / (float)(count)) * (index + 1)), (int)((MapControl.CellHeight * i / (float)(count)) * (index + 1))); + break; + } + + OffSetMove = new Point(OffSetMove.X % 2 + OffSetMove.X, OffSetMove.Y % 2 + OffSetMove.Y); + break; + default: + OffSetMove = Point.Empty; + Movement = CurrentLocation; + break; + } + + #endregion + + + DrawY = Movement.Y > CurrentLocation.Y ? Movement.Y : CurrentLocation.Y; + + DrawLocation = new Point((Movement.X - User.Movement.X + MapControl.OffSetX) * MapControl.CellWidth, (Movement.Y - User.Movement.Y + MapControl.OffSetY) * MapControl.CellHeight); + DrawLocation.Offset(GlobalDisplayLocationOffset); + + if (this != User) + { + DrawLocation.Offset(User.OffSetMove); + DrawLocation.Offset(-OffSetMove.X, -OffSetMove.Y); + } + + if (BodyLibrary != null && update) + { + FinalDrawLocation = DrawLocation.Add(BodyLibrary.GetOffSet(DrawFrame)); + DisplayRectangle = new Rectangle(DrawLocation, BodyLibrary.GetTrueSize(DrawFrame)); + } + + for (int i = 0; i < Effects.Count; i++) + Effects[i].Process(); + + Color colour = DrawColour; + DrawColour = Color.White; + if (Poison != PoisonType.None) + { + + if (Poison.HasFlag(PoisonType.Green)) + DrawColour = Color.Green; + if (Poison.HasFlag(PoisonType.Red)) + DrawColour = Color.Red; + if (Poison.HasFlag(PoisonType.Slow)) + DrawColour = Color.Purple; + if (Poison.HasFlag(PoisonType.Stun)) + DrawColour = Color.Yellow; + if (Poison.HasFlag(PoisonType.Frozen)) + DrawColour = Color.Blue; + if (Poison.HasFlag(PoisonType.Paralysis)) + DrawColour = Color.Gray; + } + + + if (colour != DrawColour) GameScene.Scene.MapControl.TextureValid = false; + } + public virtual void SetAction() + { + if (NextAction != null && !GameScene.CanMove) + { + switch (NextAction.Action) + { + case MirAction.Walking: + case MirAction.Pushed: + case MirAction.DashL: + case MirAction.DashR: + return; + } + } + + if (User == this && CMain.Time < MapControl.NextAction)// && CanSetAction) + { + //NextMagic = null; + return; + } + + + if (ActionFeed.Count == 0) + { + CurrentAction = MirAction.Standing; + + if (CurrentAction == MirAction.Standing) + { + CurrentAction = CMain.Time > StanceTime ? MirAction.Standing : MirAction.Stance; + } + + Frames.TryGetValue(CurrentAction, out Frame); + FrameIndex = 0; + EffectFrameIndex = 0; + + if (MapLocation != CurrentLocation) + { + GameScene.Scene.MapControl.RemoveObject(this); + MapLocation = CurrentLocation; + GameScene.Scene.MapControl.AddObject(this); + } + + if (Frame == null) return; + + FrameInterval = Frame.Interval; + EffectFrameInterval = Frame.EffectInterval; + + SetLibraries(); + } + else + { + QueuedAction action = ActionFeed[0]; + ActionFeed.RemoveAt(0); + + + CurrentAction = action.Action; + + CurrentLocation = action.Location; + MirDirection olddirection = Direction; + Direction = action.Direction; + + Point temp; + switch (CurrentAction) + { + case MirAction.Walking: + case MirAction.Pushed: + case MirAction.DashL: + case MirAction.DashR: + var steps = 1; + + temp = Functions.PointMove(CurrentLocation, Direction, CurrentAction == MirAction.Pushed ? 0 : -steps); + + break; + default: + temp = CurrentLocation; + break; + } + + temp = new Point(action.Location.X, temp.Y > CurrentLocation.Y ? temp.Y : CurrentLocation.Y); + + if (MapLocation != temp) + { + GameScene.Scene.MapControl.RemoveObject(this); + MapLocation = temp; + GameScene.Scene.MapControl.AddObject(this); + } + + + bool ArcherLayTrap = false; + + switch (CurrentAction) + { + case MirAction.Pushed: + if (this == User) + MapControl.InputDelay = CMain.Time + 500; + Frames.TryGetValue(MirAction.Walking, out Frame); + break; + case MirAction.DashL: + case MirAction.DashR: + Frames.TryGetValue(MirAction.Walking, out Frame); + break; + case MirAction.DashFail: + Frames.TryGetValue(MirAction.Standing, out Frame); + break; + case MirAction.Attack1: + Frames.TryGetValue(CurrentAction, out Frame); + break; + case MirAction.Spell: + Spell = (Spell)action.Params[0]; + switch (Spell) + { + case Spell.ShoulderDash: + Frames.TryGetValue(MirAction.Walking, out Frame); + CurrentAction = MirAction.DashL; + Direction = olddirection; + CurrentLocation = Functions.PointMove(CurrentLocation, Direction, 1); + if (this == User) + { + MapControl.NextAction = CMain.Time + 2500; + GameScene.SpellTime = CMain.Time + 2500; //Spell Delay + + Network.Enqueue(new C.Magic { ObjectID = GameScene.User.ObjectID, Spell = Spell, Direction = Direction, }); + } + break; + default: + Frames.TryGetValue(CurrentAction, out Frame); + break; + } + + break; + default: + Frames.TryGetValue(CurrentAction, out Frame); + break; + + } + + SetLibraries(); + + FrameIndex = 0; + EffectFrameIndex = 0; + Spell = Spell.None; + SpellLevel = 0; + //NextMagic = null; + + ClientMagic magic; + + if (Frame == null) return; + + FrameInterval = Frame.Interval; + EffectFrameInterval = Frame.EffectInterval; + + if (this == User) + { + switch (CurrentAction) + { + case MirAction.DashFail: + //CanSetAction = false; + break; + case MirAction.Standing: + Network.Enqueue(new C.Turn { Direction = Direction }); + MapControl.NextAction = CMain.Time + 2500; + break; + case MirAction.Walking: + Network.Enqueue(new C.Walk { Direction = Direction }); + GameScene.Scene.MapControl.FloorValid = false; + MapControl.NextAction = CMain.Time + 2500; + break; + case MirAction.Pushed: + GameScene.Scene.MapControl.FloorValid = false; + MapControl.InputDelay = CMain.Time + 500; + GameScene.CanMove = false; + break; + case MirAction.DashL: + case MirAction.DashR: + GameScene.Scene.MapControl.FloorValid = false; + //CanSetAction = false; + break; + case MirAction.Attack1: + if (GameScene.User.Slaying && TargetObject != null) + Spell = Spell.Slaying; + + if (GameScene.User.Thrusting && GameScene.Scene.MapControl.HasTarget(Functions.PointMove(CurrentLocation, Direction, 2))) + Spell = Spell.Thrusting; + + if (GameScene.User.HalfMoon) + { + if (TargetObject != null || GameScene.Scene.MapControl.CanHalfMoon(CurrentLocation, Direction)) + { + magic = User.GetMagic(Spell.HalfMoon); + if (magic != null && magic.BaseCost + magic.LevelCost * magic.Level <= User.MP) + Spell = Spell.HalfMoon; + } + } + + if (GameScene.User.FlamingSword) + { + if (TargetObject != null) + { + magic = User.GetMagic(Spell.FlamingSword); + if (magic != null) + { + Spell = Spell.FlamingSword; + magic.CastTime = CMain.Time; + } + } + } + + + Network.Enqueue(new C.Attack { Direction = Direction, Spell = Spell }); + + if (Spell == Spell.Slaying) + GameScene.User.Slaying = false; + if (Spell == Spell.FlamingSword) + GameScene.User.FlamingSword = false; + + magic = User.GetMagic(Spell); + + if (magic != null) SpellLevel = magic.Level; + + GameScene.AttackTime = CMain.Time + User.AttackSpeed; + MapControl.NextAction = CMain.Time + 2500; + break; + + case MirAction.AttackRange1: + { + GameScene.AttackTime = CMain.Time + User.AttackSpeed + 200; + + uint targetID = (uint)action.Params[0]; + Point location = (Point)action.Params[1]; + + Network.Enqueue(new C.RangeAttack { Direction = Direction, Location = CurrentLocation, TargetID = targetID, TargetLocation = location }); + } + break; + case MirAction.Spell: + { + Spell = (Spell)action.Params[0]; + uint targetID = (uint)action.Params[1]; + Point location = (Point)action.Params[2]; + + Network.Enqueue(new C.Magic { ObjectID = GameScene.User.ObjectID, Spell = Spell, Direction = Direction, TargetID = targetID, Location = location }); + + GameScene.SpellTime = CMain.Time + 1800; + MapControl.NextAction = CMain.Time + 2500; + } + break; + case MirAction.Harvest: + if (ArcherLayTrap) + { + ArcherLayTrap = false; + SoundManager.PlaySound(20000 + 124 * 10); + } + else + { + Network.Enqueue(new C.Harvest { Direction = Direction }); + MapControl.NextAction = CMain.Time + 2500; + } + break; + + } + } + + + switch (CurrentAction) + { + case MirAction.Pushed: + FrameIndex = Frame.Count - 1; + EffectFrameIndex = Frame.EffectCount - 1; + GameScene.Scene.Redraw(); + break; + case MirAction.DashL: + FrameIndex = 0; + EffectFrameIndex = 0; + GameScene.Scene.Redraw(); + break; + case MirAction.DashR: + FrameIndex = 3; + EffectFrameIndex = 3; + GameScene.Scene.Redraw(); + break; + case MirAction.Walking: + GameScene.Scene.Redraw(); + break; + case MirAction.Attack1: + if (this != User) + { + Spell = (Spell)action.Params[0]; + SpellLevel = (byte)action.Params[1]; + } + + switch (Spell) + { + case Spell.Slaying: + SoundManager.PlaySound(20000 + (ushort)Spell * 10 + (Gender == MirGender.Male ? 0 : 1)); + break; + case Spell.Thrusting: + SoundManager.PlaySound(20000 + (ushort)Spell * 10); + break; + case Spell.HalfMoon: + SoundManager.PlaySound(20000 + (ushort)Spell * 10); + break; + case Spell.FlamingSword: + SoundManager.PlaySound(20000 + (ushort)Spell * 10 + 1); + break; + + + } + break; + case MirAction.AttackRange1: //ArcherTest - Assign Target for other users + if (this != User) + { + TargetID = (uint)action.Params[0]; + TargetPoint = (Point)action.Params[1]; + Spell = (Spell)action.Params[2]; + } + break; + case MirAction.Spell: + if (this != User) + { + Spell = (Spell)action.Params[0]; + TargetID = (uint)action.Params[1]; + TargetPoint = (Point)action.Params[2]; + Cast = (bool)action.Params[3]; + SpellLevel = (byte)action.Params[4]; + SecondaryTargetIDs = (List)action.Params[5]; + } + + switch (Spell) + { + #region FireBall + + case Spell.FireBall: + Effects.Add(new Effect(Libraries.Magic, 0, 10, Frame.Count * FrameInterval, this)); + SoundManager.PlaySound(20000 + (ushort)Spell * 10); + break; + + #endregion + + #region Healing + + case Spell.Healing: + Effects.Add(new Effect(Libraries.Magic, 200, 10, Frame.Count * FrameInterval, this)); + SoundManager.PlaySound(20000 + (ushort)Spell * 10); + break; + + #endregion + + #region Repulsion + + case Spell.Repulsion: + Effects.Add(new Effect(Libraries.Magic, 900, 6, Frame.Count * FrameInterval, this)); + SoundManager.PlaySound(20000 + (ushort)Spell * 10); + break; + + #endregion + + #region ElectricShock + + case Spell.ElectricShock: + Effects.Add(new Effect(Libraries.Magic, 1560, 10, Frame.Count * FrameInterval, this)); + SoundManager.PlaySound(20000 + (ushort)Spell * 10); + break; + + #endregion + + #region Poisoning + + case Spell.Poisoning: + Effects.Add(new Effect(Libraries.Magic, 600, 10, Frame.Count * FrameInterval, this)); + SoundManager.PlaySound(20000 + (ushort)Spell * 10); + break; + + #endregion + + #region GreatFireBall + + case Spell.GreatFireBall: + Effects.Add(new Effect(Libraries.Magic, 400, 10, Frame.Count * FrameInterval, this)); + SoundManager.PlaySound(20000 + (ushort)Spell * 10); + break; + + #endregion + + #region HellFire + + case Spell.HellFire: + Effects.Add(new Effect(Libraries.Magic, 920, 10, Frame.Count * FrameInterval, this)); + SoundManager.PlaySound(20000 + (ushort)Spell * 10); + break; + + #endregion + + #region ThunderBolt + + case Spell.ThunderBolt: + Effects.Add(new Effect(Libraries.Magic2, 20, 3, 300, this)); + break; + + #endregion + + #region SoulFireBall + + case Spell.SoulFireBall: + SoundManager.PlaySound(20000 + (ushort)Spell * 10); + break; + + #endregion + + #region SummonSkeleton + + case Spell.SummonSkeleton: + Effects.Add(new Effect(Libraries.Magic, 1500, 10, Frame.Count * FrameInterval, this)); + SoundManager.PlaySound(20000 + (ushort)Spell * 10); + break; + + #endregion + + #region Teleport + + case Spell.Teleport: + Effects.Add(new Effect(Libraries.Magic, 1590, 10, Frame.Count * FrameInterval, this)); + SoundManager.PlaySound(20000 + (ushort)Spell * 10); + break; + + #endregion + + #region Hiding + + case Spell.Hiding: + Effects.Add(new Effect(Libraries.Magic, 1520, 10, Frame.Count * FrameInterval, this)); + SoundManager.PlaySound(20000 + (ushort)Spell * 10); + break; + + #endregion + + #region FireBang + + case Spell.FireBang: + Effects.Add(new Effect(Libraries.Magic, 1650, 10, Frame.Count * FrameInterval, this)); + SoundManager.PlaySound(20000 + (ushort)Spell * 10); + break; + + #endregion + + #region FireWall + + case Spell.FireWall: + Effects.Add(new Effect(Libraries.Magic, 1620, 10, Frame.Count * FrameInterval, this)); + SoundManager.PlaySound(20000 + (ushort)Spell * 10); + break; + + #endregion + + #region TrapHexagon + + case Spell.TrapHexagon: + Effects.Add(new Effect(Libraries.Magic, 1380, 10, Frame.Count * FrameInterval, this)); + SoundManager.PlaySound(20000 + (ushort)Spell * 10); + break; + + #endregion + + #region EnergyRepulsor + + case Spell.EnergyRepulsor: + Effects.Add(new Effect(Libraries.Magic2, 190, 6, Frame.Count * FrameInterval, this)); + SoundManager.PlaySound(20000 + (ushort)Spell * 10); + break; + + #endregion + + #region UltimateEnchancer + + case Spell.UltimateEnhancer: + Effects.Add(new Effect(Libraries.Magic2, 160, 15, 1000, this)); + SoundManager.PlaySound(20000 + (ushort)Spell * 10); + break; + + #endregion + + #region FrostCrunch + + case Spell.FrostCrunch: + Effects.Add(new Effect(Libraries.Magic2, 400, 10, Frame.Count * FrameInterval, this)); + SoundManager.PlaySound(20000 + (ushort)Spell * 10); + break; + + #endregion + + #region Purification + + case Spell.Purification: + Effects.Add(new Effect(Libraries.Magic2, 600, 10, Frame.Count * FrameInterval, this)); + SoundManager.PlaySound(20000 + (ushort)Spell * 10); + break; + + #endregion + + #region ThunderStorm + + case Spell.ThunderStorm: + MapControl.Effects.Add(new Effect(Libraries.Magic, 1680, 10, Frame.Count * FrameInterval, CurrentLocation)); + SoundManager.PlaySound(20000 + (ushort)Spell * 10); + break; + + #endregion + + #region MassHealing + + case Spell.MassHealing: + Effects.Add(new Effect(Libraries.Magic, 1790, 10, Frame.Count * FrameInterval, this)); + SoundManager.PlaySound(20000 + (ushort)Spell * 10); + break; + + #endregion + + #region MagicShield + + case Spell.MagicShield: + Effects.Add(new Effect(Libraries.Magic, 3880, 10, Frame.Count * FrameInterval, this)); + SoundManager.PlaySound(20000 + (ushort)Spell * 10); + break; + + #endregion + + #region Revelation + + case Spell.Revelation: + Effects.Add(new Effect(Libraries.Magic, 3960, 20, 1200, this)); + SoundManager.PlaySound(20000 + (ushort)Spell * 10); + break; + + #endregion + } + + + break; + case MirAction.Dead: + GameScene.Scene.Redraw(); + GameScene.Scene.MapControl.SortObject(this); + if (MouseObject == this) MouseObjectID = 0; + if (TargetObject == this) TargetObjectID = 0; + if (MagicObject == this) MagicObjectID = 0; + DeadTime = CMain.Time; + break; + + } + + } + + GameScene.Scene.MapControl.TextureValid = false; + + NextMotion = CMain.Time + FrameInterval; + NextMotion2 = CMain.Time + EffectFrameInterval; + + if (MagicShield) + { + switch (CurrentAction) + { + default: + if (ShieldEffect == null) + Effects.Add(ShieldEffect = new Effect(Libraries.Magic, 3890, 3, 600, this) { Repeat = true }); + break; + } + } + + } + + public virtual void ProcessFrames() + { + if (Frame == null) return; + + switch (CurrentAction) + { + case MirAction.Walking: + if (!GameScene.CanMove) return; + + GameScene.Scene.MapControl.TextureValid = false; + + if (this == User) GameScene.Scene.MapControl.FloorValid = false; + //if (CMain.Time < NextMotion) return; + if (SkipFrames) UpdateFrame(); + + if (UpdateFrame(false) >= Frame.Count) + { + FrameIndex = Frame.Count - 1; + SetAction(); + } + + if (WingEffect > 0 && CMain.Time >= NextMotion2) + { + if (this == User) GameScene.Scene.MapControl.TextureValid = false; + + if (SkipFrames) UpdateFrame2(); + + if (UpdateFrame2() >= Frame.EffectCount) + EffectFrameIndex = Frame.EffectCount - 1; + else + NextMotion2 += EffectFrameInterval; + } + break; + case MirAction.DashL: + if (!GameScene.CanMove) return; + + GameScene.Scene.MapControl.TextureValid = false; + + if (this == User) GameScene.Scene.MapControl.FloorValid = false; + if (UpdateFrame() >= 3) + { + FrameIndex = 2; + SetAction(); + } + + if (UpdateFrame2() >= 3) EffectFrameIndex = 2; + break; + case MirAction.DashR: + if (!GameScene.CanMove) return; + + GameScene.Scene.MapControl.TextureValid = false; + + if (this == User) GameScene.Scene.MapControl.FloorValid = false; + + if (UpdateFrame() >= 6) + { + FrameIndex = 5; + SetAction(); + } + + if (UpdateFrame2() >= 6) EffectFrameIndex = 5; + break; + case MirAction.Pushed: + if (!GameScene.CanMove) return; + + GameScene.Scene.MapControl.TextureValid = false; + + if (this == User) GameScene.Scene.MapControl.FloorValid = false; + + FrameIndex -= 2; + EffectFrameIndex -= 2; + + if (FrameIndex < 0) + { + FrameIndex = 0; + SetAction(); + } + + if (FrameIndex < 0) EffectFrameIndex = 0; + break; + + case MirAction.Standing: + case MirAction.DashFail: + case MirAction.Harvest: + case MirAction.Stance: + if (CMain.Time >= NextMotion) + { + GameScene.Scene.MapControl.TextureValid = false; + + if (SkipFrames) UpdateFrame(); + + if (UpdateFrame() >= Frame.Count) + { + FrameIndex = Frame.Count - 1; + SetAction(); + } + else + { + NextMotion += FrameInterval; + } + } + + if (WingEffect > 0 && CMain.Time >= NextMotion2) + { + GameScene.Scene.MapControl.TextureValid = false; + + if (SkipFrames) UpdateFrame2(); + + if (UpdateFrame2() >= Frame.EffectCount) + EffectFrameIndex = Frame.EffectCount - 1; + else + NextMotion2 += EffectFrameInterval; + } + break; + case MirAction.Attack1: + if (CMain.Time >= NextMotion) + { + GameScene.Scene.MapControl.TextureValid = false; + + if (SkipFrames) UpdateFrame(); + + if (UpdateFrame() >= Frame.Count) + { + //if (ActionFeed.Count == 0) + // ActionFeed.Add(new QueuedAction { Action = MirAction.Stance, Direction = Direction, Location = CurrentLocation }); + + StanceTime = CMain.Time + StanceDelay; + FrameIndex = Frame.Count - 1; + SetAction(); + } + else + { + if (FrameIndex == 1) PlayAttackSound(); + NextMotion += FrameInterval; + } + } + + if (WingEffect > 0 && CMain.Time >= NextMotion2) + { + GameScene.Scene.MapControl.TextureValid = false; + + if (SkipFrames) UpdateFrame2(); + + if (UpdateFrame2() >= Frame.EffectCount) + EffectFrameIndex = Frame.EffectCount - 1; + else + NextMotion2 += EffectFrameInterval; + } + break; + + case MirAction.AttackRange1: + if (CMain.Time >= NextMotion) + { + GameScene.Scene.MapControl.TextureValid = false; + + if (SkipFrames) UpdateFrame(); + + if (UpdateFrame() >= Frame.Count) + { + FrameIndex = Frame.Count - 1; + SetAction(); + } + else + { + if (FrameIndex == 1) PlayAttackSound(); + Missile missile; + switch (FrameIndex) + { + case 5: + missile = CreateProjectile(1030, Libraries.Magic2, true, 5, 30, 5); + StanceTime = CMain.Time + StanceDelay; + SoundManager.PlaySound(20000 + 121 * 10); + if (missile.Target != null) + { + missile.Complete += (o, e) => + { + SoundManager.PlaySound(20000 + 121 * 10 + 2); + }; + } + break; + } + + NextMotion += FrameInterval; + } + } + + if (WingEffect > 0 && CMain.Time >= NextMotion2) + { + GameScene.Scene.MapControl.TextureValid = false; + + if (SkipFrames) UpdateFrame2(); + + if (UpdateFrame2() >= Frame.EffectCount) + EffectFrameIndex = Frame.EffectCount - 1; + else + NextMotion2 += EffectFrameInterval; + } + break; + case MirAction.Spell: + if (CMain.Time >= NextMotion) + { + GameScene.Scene.MapControl.TextureValid = false; + + if (SkipFrames) UpdateFrame(); + + if (UpdateFrame() >= Frame.Count) + { + if (Cast) + { + + MapObject ob = MapControl.GetObject(TargetID); + + Missile missile; + Effect effect; + switch (Spell) + { + #region FireBall + + case Spell.FireBall: + SoundManager.PlaySound(20000 + (ushort)Spell * 10 + 1); + missile = CreateProjectile(10, Libraries.Magic, true, 6, 30, 4); + + if (missile.Target != null) + { + missile.Complete += (o, e) => + { + if (missile.Target.CurrentAction == MirAction.Dead) return; + missile.Target.Effects.Add(new Effect(Libraries.Magic, 170, 10, 600, missile.Target)); + SoundManager.PlaySound(20000 + (ushort)Spell * 10 + 2); + }; + } + break; + + #endregion + + #region GreatFireBall + + case Spell.GreatFireBall: + SoundManager.PlaySound(20000 + (ushort)Spell * 10 + 1); + missile = CreateProjectile(410, Libraries.Magic, true, 6, 30, 4); + + if (missile.Target != null) + { + missile.Complete += (o, e) => + { + if (missile.Target.CurrentAction == MirAction.Dead) return; + missile.Target.Effects.Add(new Effect(Libraries.Magic, 570, 10, 600, missile.Target)); + SoundManager.PlaySound(20000 + (ushort)Spell.GreatFireBall * 10 + 2); + }; + } + break; + + #endregion + + #region Healing + + case Spell.Healing: + SoundManager.PlaySound(20000 + (ushort)Spell * 10 + 1); + if (ob == null) + MapControl.Effects.Add(new Effect(Libraries.Magic, 370, 10, 800, TargetPoint)); + else + ob.Effects.Add(new Effect(Libraries.Magic, 370, 10, 800, ob)); + break; + + #endregion + + #region ElectricShock + + case Spell.ElectricShock: + SoundManager.PlaySound(20000 + (ushort)Spell * 10 + 1); + if (ob == null) + MapControl.Effects.Add(new Effect(Libraries.Magic, 1570, 10, 1000, TargetPoint)); + else + ob.Effects.Add(new Effect(Libraries.Magic, 1570, 10, 1000, ob)); + break; + #endregion + + #region Poisoning + + case Spell.Poisoning: + SoundManager.PlaySound(20000 + (ushort)Spell * 10 + 1); + if (ob != null) + ob.Effects.Add(new Effect(Libraries.Magic, 770, 10, 1000, ob)); + break; + #endregion + + #region HellFire + + case Spell.HellFire: + SoundManager.PlaySound(20000 + (ushort)Spell * 10 + 1); + + + Point dest = CurrentLocation; + for (int i = 0; i < 4; i++) + { + dest = Functions.PointMove(dest, Direction, 1); + if (!GameScene.Scene.MapControl.ValidPoint(dest)) break; + effect = new Effect(Libraries.Magic, 930, 6, 500, dest) { Rate = 0.7F }; + + effect.SetStart(CMain.Time + i * 50); + MapControl.Effects.Add(effect); + } + + if (SpellLevel == 3) + { + MirDirection dir = (MirDirection)(((int)Direction + 1) % 8); + dest = CurrentLocation; + for (int r = 0; r < 4; r++) + { + dest = Functions.PointMove(dest, dir, 1); + if (!GameScene.Scene.MapControl.ValidPoint(dest)) break; + effect = new Effect(Libraries.Magic, 930, 6, 500, dest) { Rate = 0.7F }; + + effect.SetStart(CMain.Time + r * 50); + MapControl.Effects.Add(effect); + } + + dir = (MirDirection)(((int)Direction - 1 + 8) % 8); + dest = CurrentLocation; + for (int r = 0; r < 4; r++) + { + dest = Functions.PointMove(dest, dir, 1); + if (!GameScene.Scene.MapControl.ValidPoint(dest)) break; + effect = new Effect(Libraries.Magic, 930, 6, 500, dest) { Rate = 0.7F }; + + effect.SetStart(CMain.Time + r * 50); + MapControl.Effects.Add(effect); + } + } + break; + + #endregion + + #region ThunderBolt + + case Spell.ThunderBolt: + + SoundManager.PlaySound(20000 + (ushort)Spell * 10); + + if (ob == null) + MapControl.Effects.Add(new Effect(Libraries.Magic2, 10, 5, 400, TargetPoint)); + else + ob.Effects.Add(new Effect(Libraries.Magic2, 10, 5, 400, ob)); + break; + + #endregion + + #region SoulFireBall + + case Spell.SoulFireBall: + SoundManager.PlaySound(20000 + (ushort)Spell * 10 + 1); + missile = CreateProjectile(1160, Libraries.Magic, true, 3, 30, 7); + + if (missile.Target != null) + { + missile.Complete += (o, e) => + { + if (missile.Target.CurrentAction == MirAction.Dead) return; + missile.Target.Effects.Add(new Effect(Libraries.Magic, 1360, 10, 600, missile.Target)); + SoundManager.PlaySound(20000 + (ushort)Spell.SoulFireBall * 10 + 2); + }; + } + break; + + #endregion + + #region FireBang + + case Spell.FireBang: + + SoundManager.PlaySound(20000 + (ushort)Spell * 10 + 1); + MapControl.Effects.Add(new Effect(Libraries.Magic, 1660, 10, 1000, TargetPoint)); + break; + + #endregion + + #region MassHiding + + case Spell.MassHiding: + SoundManager.PlaySound(20000 + (ushort)Spell * 10); + missile = CreateProjectile(1160, Libraries.Magic, true, 3, 30, 7); + missile.Explode = true; + + missile.Complete += (o, e) => + { + MapControl.Effects.Add(new Effect(Libraries.Magic, 1540, 10, 800, TargetPoint)); + SoundManager.PlaySound(20000 + (ushort)Spell.MassHiding * 10 + 1); + }; + break; + + #endregion + + #region SoulShield + + case Spell.SoulShield: + SoundManager.PlaySound(20000 + (ushort)Spell * 10); + missile = CreateProjectile(1160, Libraries.Magic, true, 3, 30, 7); + missile.Explode = true; + + missile.Complete += (o, e) => + { + MapControl.Effects.Add(new Effect(Libraries.Magic, 1320, 15, 1200, TargetPoint)); + SoundManager.PlaySound(20000 + (ushort)Spell.SoulShield * 10 + 1); + }; + break; + + #endregion + + #region BlessedArmour + + case Spell.BlessedArmour: + SoundManager.PlaySound(20000 + (ushort)Spell * 10); + missile = CreateProjectile(1160, Libraries.Magic, true, 3, 30, 7); + missile.Explode = true; + + missile.Complete += (o, e) => + { + MapControl.Effects.Add(new Effect(Libraries.Magic, 1340, 15, 1200, TargetPoint)); + SoundManager.PlaySound(20000 + (ushort)Spell.BlessedArmour * 10 + 1); + }; + break; + + #endregion + + #region FireWall + + case Spell.FireWall: + SoundManager.PlaySound(20000 + (ushort)Spell * 10 + 1); + break; + + #endregion + + #region MassHealing + + case Spell.MassHealing: + + SoundManager.PlaySound(20000 + (ushort)Spell * 10 + 1); + MapControl.Effects.Add(new Effect(Libraries.Magic, 1800, 10, 1000, TargetPoint)); + break; + + #endregion + + #region Revelation + + case Spell.Revelation: + SoundManager.PlaySound(20000 + (ushort)Spell * 10 + 1); + if (ob == null) + MapControl.Effects.Add(new Effect(Libraries.Magic, 3990, 10, 1000, TargetPoint)); + else + ob.Effects.Add(new Effect(Libraries.Magic, 3990, 10, 1000, ob)); + break; + #endregion + + #region FrostCrunch + + case Spell.FrostCrunch: + SoundManager.PlaySound(20000 + (ushort)Spell * 10 + 1); + missile = CreateProjectile(410, Libraries.Magic2, true, 4, 30, 6); + + if (missile.Target != null) + { + missile.Complete += (o, e) => + { + if (missile.Target.CurrentAction == MirAction.Dead) return; + missile.Target.Effects.Add(new Effect(Libraries.Magic2, 570, 8, 600, missile.Target)); + SoundManager.PlaySound(20000 + (ushort)Spell.FrostCrunch * 10 + 2); + }; + } + break; + + #endregion + + #region Purification + + case Spell.Purification: + if (ob == null) + MapControl.Effects.Add(new Effect(Libraries.Magic2, 620, 10, 800, TargetPoint)); + else + ob.Effects.Add(new Effect(Libraries.Magic2, 620, 10, 800, ob)); + break; + + #endregion + + #region Hallucination + + case Spell.Hallucination: + missile = CreateProjectile(1160, Libraries.Magic, true, 3, 48, 7); + + if (missile.Target != null) + { + missile.Complete += (o, e) => + { + if (missile.Target.CurrentAction == MirAction.Dead) return; + missile.Target.Effects.Add(new Effect(Libraries.Magic2, 1110, 10, 1000, missile.Target)); + SoundManager.PlaySound(20000 + (ushort)Spell * 10); + }; + } + break; + + #endregion + + #region Lightning + + case Spell.Lightning: + Effects.Add(new Effect(Libraries.Magic, 970 + (int)Direction * 20, 6, Frame.Count * FrameInterval, this)); + SoundManager.PlaySound(20000 + (ushort)Spell * 10); + break; + + #endregion + + #region UltimateEnhancer + + case Spell.UltimateEnhancer: + if (ob != null && ob != User) + ob.Effects.Add(new Effect(Libraries.Magic2, 160, 15, 1000, ob)); + break; + + #endregion + + #region TrapHexagon + + case Spell.TrapHexagon: + if (ob != null) + SoundManager.PlaySound(20000 + (ushort)Spell.TrapHexagon * 10 + 1); + break; + + #endregion + } + + + Cast = false; + } + //if (ActionFeed.Count == 0) + // ActionFeed.Add(new QueuedAction { Action = MirAction.Stance, Direction = Direction, Location = CurrentLocation }); + + StanceTime = CMain.Time + StanceDelay; + FrameIndex = Frame.Count - 1; + SetAction(); + + } + else + { + NextMotion += FrameInterval; + + } + } + if (WingEffect > 0 && CMain.Time >= NextMotion2) + { + GameScene.Scene.MapControl.TextureValid = false; + + if (SkipFrames) UpdateFrame2(); + + if (UpdateFrame2() >= Frame.EffectCount) + EffectFrameIndex = Frame.EffectCount - 1; + else + NextMotion2 += EffectFrameInterval; + } + break; + case MirAction.Die: + if (CMain.Time >= NextMotion) + { + GameScene.Scene.MapControl.TextureValid = false; + + if (SkipFrames) UpdateFrame(); + + if (UpdateFrame() >= Frame.Count) + { + FrameIndex = Frame.Count - 1; + ActionFeed.Clear(); + ActionFeed.Add(new QueuedAction { Action = MirAction.Dead, Direction = Direction, Location = CurrentLocation }); + SetAction(); + } + else + { + if (FrameIndex == 1) + PlayDieSound(); + + NextMotion += FrameInterval; + } + } + if (WingEffect > 0 && CMain.Time >= NextMotion2) + { + GameScene.Scene.MapControl.TextureValid = false; + + if (SkipFrames) UpdateFrame2(); + + if (UpdateFrame2() >= Frame.EffectCount) + EffectFrameIndex = Frame.EffectCount - 1; + else + NextMotion2 += EffectFrameInterval; + } + break; + case MirAction.Dead: + break; + case MirAction.Revive: + if (CMain.Time >= NextMotion) + { + GameScene.Scene.MapControl.TextureValid = false; + + if (SkipFrames) UpdateFrame(); + + if (UpdateFrame() >= Frame.Count) + { + FrameIndex = Frame.Count - 1; + ActionFeed.Clear(); + ActionFeed.Add(new QueuedAction { Action = MirAction.Standing, Direction = Direction, Location = CurrentLocation }); + SetAction(); + } + else + { + NextMotion += FrameInterval; + } + } + break; + + } + + if (this == User) return; + + if ((CurrentAction == MirAction.Standing || CurrentAction == MirAction.Stance || CurrentAction == MirAction.DashFail) && NextAction != null) + SetAction(); + //if Revive and dead set action + + } + public int UpdateFrame(bool skip = true) + { + if (Frame == null) return 0; + if (Poison.HasFlag(PoisonType.Slow) && !skip) + { + SkipFrameUpdate++; + if (SkipFrameUpdate == 2) + SkipFrameUpdate = 0; + else + return FrameIndex; + } + if (Frame.Reverse) return Math.Abs(--FrameIndex); + + return ++FrameIndex; + } + + public int UpdateFrame2() + { + if (Frame == null) return 0; + + if (Frame.Reverse) return Math.Abs(--EffectFrameIndex); + + return ++EffectFrameIndex; + } + + + public override Missile CreateProjectile(int baseIndex, MLibrary library, bool blend, int count, int interval, int skip, int lightDistance = 6, bool direction16 = true, Color? lightColour = null, uint targetID = 0) + { + if (targetID == 0) + { + targetID = TargetID; + } + + MapObject ob = MapControl.GetObject(targetID); + + var targetPoint = TargetPoint; + + if (ob != null) targetPoint = ob.CurrentLocation; + + int duration = Functions.MaxDistance(CurrentLocation, targetPoint) * 50; + + Missile missile = new Missile(library, baseIndex, duration / interval, duration, this, targetPoint) + { + Target = ob, + Interval = interval, + FrameCount = count, + Blend = blend, + Skip = skip, + Light = lightDistance, + LightColour = lightColour == null ? Color.White : (Color)lightColour + }; + + Effects.Add(missile); + + return missile; + } + + public override void PlayStruckSound() + { + switch (StruckWeapon) + { + default: + SoundManager.PlaySound(SoundList.StruckBodySword); + break; + case -1: + SoundManager.PlaySound(SoundList.StruckBodyFist); + break; + } + } + + public void PlayAttackSound() + { + switch (Weapon) + { + case 1: + case 2: + case 4: + SoundManager.PlaySound(SoundList.SwingWood); + break; + case 3: + case 5: + case 6: + SoundManager.PlaySound(SoundList.SwingSword); + break; + default: + SoundManager.PlaySound(SoundList.SwingFist); + break; + } + } + + public void PlayDieSound() + { + } + + + public override void Draw() + { + DrawBehindEffects(Settings.Effect); + + float oldOpacity = DXManager.Opacity; + if (Hidden && !DXManager.Blending) DXManager.SetOpacity(0.5F); + + + if (Direction == MirDirection.Left || Direction == MirDirection.Up || Direction == MirDirection.UpLeft || Direction == MirDirection.DownLeft) + DrawWeapon(); + + DrawBody(); + + if (Direction == MirDirection.Up || Direction == MirDirection.UpLeft || Direction == MirDirection.UpRight || Direction == MirDirection.Right || Direction == MirDirection.Left) + { + DrawHead(); + if (this != User) + { + DrawWings(); + } + } + else + { + if (this != User) + { + DrawWings(); + } + DrawHead(); + } + + + if (Direction == MirDirection.UpRight || Direction == MirDirection.Right || Direction == MirDirection.DownRight || Direction == MirDirection.Down) + DrawWeapon(); + + DXManager.SetOpacity(oldOpacity); + } + + public override void DrawBehindEffects(bool effectsEnabled) + { + for (int i = 0; i < Effects.Count; i++) + { + if (!Effects[i].DrawBehind) continue; + if (!Settings.LevelEffect && (Effects[i] is SpecialEffect) && ((SpecialEffect)Effects[i]).EffectType == 1) continue; + if ((!effectsEnabled) && (!IsVitalEffect(Effects[i]))) continue; + Effects[i].Draw(); + } + } + + public override void DrawEffects(bool effectsEnabled) + { + for (int i = 0; i < Effects.Count; i++) + { + if (Effects[i].DrawBehind) continue; + if (!Settings.LevelEffect && (Effects[i] is SpecialEffect) && ((SpecialEffect)Effects[i]).EffectType == 1) continue; + if ((!effectsEnabled) && (!IsVitalEffect(Effects[i]))) continue; + Effects[i].Draw(); + } + + if (!effectsEnabled) return; + + switch (CurrentAction) + { + case MirAction.Attack1: + switch (Spell) + { + case Spell.Slaying: + Libraries.Magic.DrawBlend(1820 + ((int)Direction * 10) + SpellLevel * 90 + FrameIndex, DrawLocation, Color.White, true, 0.7F); + break; + case Spell.Thrusting: + Libraries.Magic.DrawBlend(2190 + ((int)Direction * 10) + SpellLevel * 90 + FrameIndex, DrawLocation, Color.White, true, 0.7F); + break; + case Spell.HalfMoon: + Libraries.Magic.DrawBlend(2560 + ((int)Direction * 10) + SpellLevel * 90 + FrameIndex, DrawLocation, Color.White, true, 0.7F); + break; + case Spell.FlamingSword: + Libraries.Magic.DrawBlend(3480 + ((int)Direction * 10) + FrameIndex, DrawLocation, Color.White, true, 0.7F); + break; + } + break; + } + + + } + + public void DrawCurrentEffects() + { + if (CurrentEffect == SpellEffect.MagicShieldUp && !MagicShield) + { + MagicShield = true; + Effects.Add(ShieldEffect = new Effect(Libraries.Magic, 3890, 3, 600, this) { Repeat = true }); + CurrentEffect = SpellEffect.None; + } + } + + public override void DrawBlend() + { + DXManager.SetBlend(true, 0.3F); + Draw(); + DXManager.SetBlend(false); + } + public void DrawBody() + { + bool oldGrayScale = DXManager.GrayScale; + Color drawColour = ApplyDrawColour(); + + if (BodyLibrary != null) + BodyLibrary.Draw(DrawFrame + ArmourOffSet, DrawLocation, drawColour, true); + + DXManager.SetGrayscale(oldGrayScale); + + //BodyLibrary.DrawTinted(DrawFrame + ArmourOffSet, DrawLocation, DrawColour, Color.DarkSeaGreen); + } + public void DrawHead() + { + if (HairLibrary != null) + HairLibrary.Draw(DrawFrame + HairOffSet, DrawLocation, DrawColour, true); + } + public void DrawWeapon() + { + if (Weapon < 0) return; + + if (WeaponLibrary1 != null) + { + WeaponLibrary1.Draw(DrawFrame + WeaponOffSet, DrawLocation, DrawColour, true); //original + } + } + public void DrawWings() + { + if (WingEffect <= 0 || WingEffect >= 100) return; + + if (WingLibrary != null) + WingLibrary.DrawBlend(DrawWingFrame + WingOffset, DrawLocation, DrawColour, true); + } + + private bool IsVitalEffect(Effect effect) + { + if ((effect.Library == Libraries.Magic) && (effect.BaseIndex == 3890)) + return true; + if ((effect.Library == Libraries.Magic2) && (effect.BaseIndex == 1890)) + return true; + return false; + } + + public override bool MouseOver(Point p) + { + return MapControl.MapLocation == CurrentLocation || BodyLibrary != null && BodyLibrary.VisiblePixel(DrawFrame + ArmourOffSet, p.Subtract(FinalDrawLocation), false); + } + + private void CreateNameLabel() + { + for (int i = 0; i < LabelList.Count; i++) + { + if (LabelList[i].Text != Name || LabelList[i].ForeColour != NameColour) continue; + NameLabel = LabelList[i]; + break; + } + + if (NameLabel != null && !NameLabel.IsDisposed) return; + + NameLabel = new MirLabel + { + AutoSize = true, + BackColour = Color.Transparent, + ForeColour = NameColour, + OutLine = true, + OutLineColour = Color.Black, + Text = Name, + }; + NameLabel.Disposing += (o, e) => LabelList.Remove(NameLabel); + LabelList.Add(NameLabel); + } + + private void CreateGuildLabel() + { + if (string.IsNullOrEmpty(GuildName)) + return; + + for (int i = 0; i < LabelList.Count; i++) + { + if (LabelList[i].Text != GuildName || LabelList[i].ForeColour != NameColour) continue; + GuildLabel = LabelList[i]; + break; + } + + if (GuildLabel != null && !GuildLabel.IsDisposed) return; + + GuildLabel = new MirLabel + { + AutoSize = true, + BackColour = Color.Transparent, + ForeColour = NameColour, + OutLine = true, + OutLineColour = Color.Black, + Text = GuildName, + }; + GuildLabel.Disposing += (o, e) => LabelList.Remove(GuildLabel); + LabelList.Add(GuildLabel); + } + + public override void CreateLabel() + { + NameLabel = null; + GuildLabel = null; + + CreateNameLabel(); + CreateGuildLabel(); + } + + public override void DrawName() + { + CreateLabel(); + + if (GuildLabel != null && !string.IsNullOrEmpty(GuildName)) + { + GuildLabel.Text = GuildName; + GuildLabel.Location = new Point(DisplayRectangle.X + (50 - GuildLabel.Size.Width) / 2, DisplayRectangle.Y - (19 - GuildLabel.Size.Height / 2) + (Dead ? 35 : 8)); //was 48 - + GuildLabel.Draw(); + } + + if (NameLabel != null) + { + NameLabel.Text = Name; + NameLabel.Location = new Point(DisplayRectangle.X + (50 - NameLabel.Size.Width) / 2, DisplayRectangle.Y - (51 - NameLabel.Size.Height / 2) + (Dead ? 55 : 8)); //was 48 - + NameLabel.Draw(); + } + } + + } + + + public class QueuedAction + { + public MirAction Action; + public Point Location; + public MirDirection Direction; + public List Params; + } + +} diff --git a/Client/MirObjects/SpellObject.cs b/Client/MirObjects/SpellObject.cs new file mode 100644 index 0000000..b0300aa --- /dev/null +++ b/Client/MirObjects/SpellObject.cs @@ -0,0 +1,128 @@ +using Client.MirGraphics; +using Client.MirScenes; +using Client.MirSounds; +using S = ServerPackets; + +namespace Client.MirObjects +{ + class SpellObject : MapObject + { + public override ObjectType Race + { + get { return ObjectType.Spell; } + } + + public override bool Blocking + { + get { return false; } + } + + public Spell Spell; + public Point AnimationOffset = new(0, 0); + public int FrameCount, FrameInterval, FrameIndex; + public bool Repeat, Ended; + + + public SpellObject(uint objectID) : base(objectID) + { + } + + public void Load(S.ObjectSpell info) + { + CurrentLocation = info.Location; + MapLocation = info.Location; + GameScene.Scene.MapControl.AddObject(this); + Spell = info.Spell; + Direction = info.Direction; + Repeat = true; + Ended = false; + + switch (Spell) + { + case Spell.TrapHexagon: + BodyLibrary = Libraries.Magic; + DrawFrame = 1390; + FrameInterval = 100; + FrameCount = 10; + Blend = true; + break; + case Spell.FireWall: + BodyLibrary = Libraries.Magic; + DrawFrame = 1630; + FrameInterval = 120; + FrameCount = 6; + Light = 3; + Blend = true; + break; + } + + NextMotion = CMain.Time + FrameInterval; + NextMotion -= NextMotion % 100; + } + + public override void Process() + { + if (CMain.Time >= NextMotion) + { + if (++FrameIndex >= FrameCount && Repeat) + { + FrameIndex = 0; + Ended = true; + } + + NextMotion = CMain.Time + FrameInterval; + } + + DrawLocation = new Point((CurrentLocation.X - User.Movement.X + MapControl.OffSetX) * MapControl.CellWidth, (CurrentLocation.Y - User.Movement.Y + MapControl.OffSetY) * MapControl.CellHeight); + DrawLocation.Offset(GlobalDisplayLocationOffset); + DrawLocation.Offset(User.OffSetMove); + } + + public override void Draw() + { + if (FrameIndex >= FrameCount && !Repeat) return; + if (BodyLibrary == null) return; + + if (Blend) + { + BodyLibrary.DrawBlend( + DrawFrame + FrameIndex, + AnimationOffset == default ? DrawLocation : GetDrawWithOffset(), + DrawColour, true, + 0.8F); + } + else + { + BodyLibrary.Draw(DrawFrame + FrameIndex, + AnimationOffset == default ? DrawLocation : GetDrawWithOffset(), + DrawColour, + true); + } + } + + public override bool MouseOver(Point p) + { + return false; + } + + public override void DrawBehindEffects(bool effectsEnabled) + { + } + + public override void DrawEffects(bool effectsEnabled) + { + } + + private Point GetDrawWithOffset() + { + Point newDrawLocation = new ( + (CurrentLocation.X + AnimationOffset.X - User.Movement.X + MapControl.OffSetX) * MapControl.CellWidth, + (CurrentLocation.Y + AnimationOffset.Y - User.Movement.Y + MapControl.OffSetY) * MapControl.CellHeight); + + newDrawLocation.Offset(GlobalDisplayLocationOffset); + newDrawLocation.Offset(User.OffSetMove); + + return newDrawLocation; + } + } +} diff --git a/Client/MirObjects/UserObject.cs b/Client/MirObjects/UserObject.cs new file mode 100644 index 0000000..800c560 --- /dev/null +++ b/Client/MirObjects/UserObject.cs @@ -0,0 +1,469 @@ +using Client.MirScenes; +using Client.MirScenes.Dialogs; +using S = ServerPackets; + +namespace Client.MirObjects +{ + public class UserObject : PlayerObject + { + public uint Id; + + public int HP, MP; + + public int AttackSpeed; + + public Stats Stats; + + public int CurrentHandWeight, + CurrentWearWeight, + CurrentBagWeight; + + public long Experience, MaxExperience; + + public bool TradeLocked; + public uint TradeGoldAmount; + public bool AllowTrade; + + public bool RentalGoldLocked; + public bool RentalItemLocked; + public uint RentalGoldAmount; + + public SpecialItemMode ItemMode; + + public BaseStats CoreStats = new BaseStats(0); + + public virtual BuffDialog GetBuffDialog => GameScene.Scene.BuffsDialog; + + public UserItem[] Inventory = new UserItem[46], Equipment = new UserItem[14], Trade = new UserItem[10], QuestInventory = new UserItem[40]; + public int BeltIdx = 6, HeroBeltIdx = 2; + public bool HasExpandedStorage = false; + public DateTime ExpandedStorageExpiryTime; + + public List Magics = new List(); + public List ItemSets = new List(); + + + public List CurrentQuests = new List(); + public List CompletedQuests = new List(); + public List Mail = new List(); + + public bool Slaying, Thrusting, HalfMoon, FlamingSword; + public ClientMagic NextMagic; + public Point NextMagicLocation; + public MapObject NextMagicObject; + public MirDirection NextMagicDirection; + public QueuedAction QueuedAction; + + public UserObject() { } + public UserObject(uint objectID) : base(objectID) + { + Stats = new Stats(); + } + + public virtual void Load(S.UserInformation info) + { + Id = info.RealId; + Name = info.Name; + Settings.LoadTrackedQuests(info.Name); + NameColour = info.NameColour; + GuildName = info.GuildName; + GuildRankName = info.GuildRank; + Class = info.Class; + Gender = info.Gender; + Level = info.Level; + + CurrentLocation = info.Location; + MapLocation = info.Location; + GameScene.Scene.MapControl.AddObject(this); + + Direction = info.Direction; + Hair = info.Hair; + + HP = info.HP; + MP = info.MP; + + Experience = info.Experience; + MaxExperience = info.MaxExperience; + + LevelEffects = info.LevelEffects; + + Inventory = info.Inventory; + Equipment = info.Equipment; + QuestInventory = info.QuestInventory; + + HasExpandedStorage = info.HasExpandedStorage; + ExpandedStorageExpiryTime = info.ExpandedStorageExpiryTime; + + Magics = info.Magics; + for (int i = 0; i < Magics.Count; i++ ) + { + Magics[i].CastTime += CMain.Time; + } + + BindAllItems(); + + RefreshStats(); + + SetAction(); + } + + public override void SetLibraries() + { + base.SetLibraries(); + } + + public override void SetEffects() + { + base.SetEffects(); + } + + public void RefreshStats() + { + Stats.Clear(); + + RefreshLevelStats(); + RefreshBagWeight(); + RefreshEquipmentStats(); + RefreshItemSetStats(); + RefreshSkills(); + RefreshBuffs(); + RefreshGuildBuffs(); + + SetLibraries(); + SetEffects(); + + Stats[Stat.HP] += (Stats[Stat.HP] * Stats[Stat.HPRatePercent]) / 100; + Stats[Stat.MP] += (Stats[Stat.MP] * Stats[Stat.MPRatePercent]) / 100; + Stats[Stat.MaxAC] += (Stats[Stat.MaxAC] * Stats[Stat.MaxACRatePercent]) / 100; + Stats[Stat.MaxMAC] += (Stats[Stat.MaxMAC] * Stats[Stat.MaxMACRatePercent]) / 100; + + Stats[Stat.MaxDC] += (Stats[Stat.MaxDC] * Stats[Stat.MaxDCRatePercent]) / 100; + Stats[Stat.MaxMC] += (Stats[Stat.MaxMC] * Stats[Stat.MaxMCRatePercent]) / 100; + Stats[Stat.MaxSC] += (Stats[Stat.MaxSC] * Stats[Stat.MaxSCRatePercent]) / 100; + Stats[Stat.AttackSpeed] += (Stats[Stat.AttackSpeed] * Stats[Stat.AttackSpeedRatePercent]) / 100; + + RefreshStatCaps(); + + if (this == User && Light < 3) Light = 3; + AttackSpeed = 1400 - ((Stats[Stat.AttackSpeed] * 60) + Math.Min(370, (Level * 14))); + if (AttackSpeed < 550) AttackSpeed = 550; + + PercentHealth = (byte)(HP / (float)Stats[Stat.HP] * 100); + PercentMana = (byte)(MP / (float)Stats[Stat.MP] * 100); + + GameScene.Scene.Redraw(); + } + + private void RefreshLevelStats() + { + Light = 0; + + foreach (var stat in CoreStats.Stats) + { + Stats[stat.Type] = stat.Calculate(Class, Level); + } + } + + private void RefreshBagWeight() + { + CurrentBagWeight = 0; + + for (int i = 0; i < Inventory.Length; i++) + { + UserItem item = Inventory[i]; + if (item != null) + { + CurrentBagWeight += item.Weight; + } + } + } + + private void RefreshEquipmentStats() + { + Weapon = -1; + Armour = 0; + WingEffect = 0; + + CurrentWearWeight = 0; + CurrentHandWeight = 0; + + ItemMode = SpecialItemMode.None; + + ItemSets.Clear(); + + for (int i = 0; i < Equipment.Length; i++) + { + UserItem temp = Equipment[i]; + if (temp == null) continue; + + ItemInfo realItem = Functions.GetRealItem(temp.Info, Level, Class, GameScene.ItemInfoList); + + if (realItem.Type == ItemType.Weapon) + CurrentHandWeight = (int)Math.Min(int.MaxValue, CurrentHandWeight + temp.Weight); + else + CurrentWearWeight = (int)Math.Min(int.MaxValue, CurrentWearWeight + temp.Weight); + + if (temp.CurrentDura == 0 && realItem.Durability > 0) continue; + + if (realItem.Type == ItemType.Armour) + { + Armour = realItem.Shape; + WingEffect = realItem.Effect; + } + if (realItem.Type == ItemType.Weapon) + { + Weapon = realItem.Shape; + } + + Stats.Add(realItem.Stats); + Stats.Add(temp.AddedStats); + + if (realItem.Light > Light) Light = realItem.Light; + if (realItem.Unique != SpecialItemMode.None) + { + ItemMode |= realItem.Unique; + } + + if (realItem.Set == ItemSet.None) continue; + + ItemSets itemSet = ItemSets.Where(set => set.Set == realItem.Set && !set.Type.Contains(realItem.Type) && !set.SetComplete).FirstOrDefault(); + + if (itemSet != null) + { + itemSet.Type.Add(realItem.Type); + itemSet.Count++; + } + else + { + ItemSets.Add(new ItemSets { Count = 1, Set = realItem.Set, Type = new List { realItem.Type } }); + } + } + + if (ItemMode.HasFlag(SpecialItemMode.Muscle)) + { + Stats[Stat.BagWeight] = Stats[Stat.BagWeight] * 2; + Stats[Stat.WearWeight] = Stats[Stat.WearWeight] * 2; + Stats[Stat.HandWeight] = Stats[Stat.HandWeight] * 2; + } + } + + private void RefreshItemSetStats() + { + foreach (var s in ItemSets) + { + if (!s.SetComplete) continue; + } + } + + private void RefreshSkills() + { + int[] spiritSwordLvPlus = { 0, 3, 5, 8 }; + int[] slayingLvPlus = {5, 6, 7, 8}; + for (int i = 0; i < Magics.Count; i++) + { + ClientMagic magic = Magics[i]; + switch (magic.Spell) + { + case Spell.Fencing: + Stats[Stat.Accuracy] += magic.Level * 3; + //Stats[Stat.MaxAC] += (magic.Level + 1) * 3; + break; + case Spell.Slaying: + // case Spell.FatalSword: + Stats[Stat.Accuracy] += magic.Level; + Stats[Stat.MaxDC] += slayingLvPlus[magic.Level]; + break; + case Spell.SpiritSword: + Stats[Stat.Accuracy] += spiritSwordLvPlus[magic.Level]; + // Stats[Stat.Accuracy] += magic.Level; + // Stats[Stat.MaxDC] += (int)(Stats[Stat.MaxSC] * (magic.Level + 1) * 0.1F); + break; + } + } + } + + private void RefreshBuffs() + { + BuffDialog dialog = GetBuffDialog; + + for (int i = 0; i < dialog.Buffs.Count; i++) + { + ClientBuff buff = dialog.Buffs[i]; + + Stats.Add(buff.Stats); + } + } + + public void RefreshGuildBuffs() + { + if (User != this) return; + if (GameScene.Scene.GuildDialog == null) return; + for (int i = 0; i < GameScene.Scene.GuildDialog.EnabledBuffs.Count; i++) + { + GuildBuff buff = GameScene.Scene.GuildDialog.EnabledBuffs[i]; + if (buff == null) continue; + if (!buff.Active) continue; + + if (buff.Info == null) + { + buff.Info = GameScene.Scene.GuildDialog.FindGuildBuffInfo(buff.Id); + } + + if (buff.Info == null) continue; + + Stats.Add(buff.Info.Stats); + } + } + + public void RefreshStatCaps() + { + foreach (var cap in CoreStats.Caps.Values) + { + Stats[cap.Key] = Math.Min(cap.Value, Stats[cap.Key]); + } + + Stats[Stat.HP] = Math.Max(0, Stats[Stat.HP]); + Stats[Stat.MP] = Math.Max(0, Stats[Stat.MP]); + + Stats[Stat.MinAC] = Math.Max(0, Stats[Stat.MinAC]); + Stats[Stat.MaxAC] = Math.Max(0, Stats[Stat.MaxAC]); + Stats[Stat.MinMAC] = Math.Max(0, Stats[Stat.MinMAC]); + Stats[Stat.MaxMAC] = Math.Max(0, Stats[Stat.MaxMAC]); + Stats[Stat.MinDC] = Math.Max(0, Stats[Stat.MinDC]); + Stats[Stat.MaxDC] = Math.Max(0, Stats[Stat.MaxDC]); + Stats[Stat.MinMC] = Math.Max(0, Stats[Stat.MinMC]); + Stats[Stat.MaxMC] = Math.Max(0, Stats[Stat.MaxMC]); + Stats[Stat.MinSC] = Math.Max(0, Stats[Stat.MinSC]); + Stats[Stat.MaxSC] = Math.Max(0, Stats[Stat.MaxSC]); + + Stats[Stat.MinDC] = Math.Min(Stats[Stat.MinDC], Stats[Stat.MaxDC]); + Stats[Stat.MinMC] = Math.Min(Stats[Stat.MinMC], Stats[Stat.MaxMC]); + Stats[Stat.MinSC] = Math.Min(Stats[Stat.MinSC], Stats[Stat.MaxSC]); + } + + public void BindAllItems() + { + for (int i = 0; i < Inventory.Length; i++) + { + if (Inventory[i] == null) continue; + GameScene.Bind(Inventory[i]); + } + + for (int i = 0; i < Equipment.Length; i++) + { + if (Equipment[i] == null) continue; + GameScene.Bind(Equipment[i]); + } + + for (int i = 0; i < QuestInventory.Length; i++) + { + if (QuestInventory[i] == null) continue; + GameScene.Bind(QuestInventory[i]); + } + } + + + public ClientMagic GetMagic(Spell spell) + { + for (int i = 0; i < Magics.Count; i++) + { + ClientMagic magic = Magics[i]; + if (magic.Spell != spell) continue; + return magic; + } + + return null; + } + + + public void GetMaxGain(UserItem item) + { + int freeSpace = FreeSpace(Inventory); + + if (freeSpace > 0) + { + return; + } + + ushort canGain = 0; + + foreach (UserItem inventoryItem in Inventory) + { + if (inventoryItem.Info != item.Info) + { + continue; + } + + int availableStack = inventoryItem.Info.StackSize - inventoryItem.Count; + + if (availableStack == 0) + { + continue; + } + + canGain += (ushort)availableStack; + + if (canGain >= item.Count) + { + return; + } + } + + if (canGain == 0) + { + item.Count = 0; + return; + } + + item.Count = canGain; + } + private int FreeSpace(UserItem[] array) + { + int freeSlots = 0; + + foreach (UserItem slot in array) + { + if (slot == null) + { + freeSlots++; + } + } + + return freeSlots; + } + + public override void SetAction() + { + if (QueuedAction != null && !GameScene.Observing) + { + if ((ActionFeed.Count == 0) || (ActionFeed.Count == 1 && NextAction.Action == MirAction.Stance)) + { + ActionFeed.Clear(); + ActionFeed.Add(QueuedAction); + QueuedAction = null; + } + } + + base.SetAction(); + } + public override void ProcessFrames() + { + bool clear = CMain.Time >= NextMotion; + + base.ProcessFrames(); + + if (clear) QueuedAction = null; + if ((CurrentAction == MirAction.Standing || CurrentAction == MirAction.Stance || CurrentAction == MirAction.DashFail) && (QueuedAction != null || NextAction != null)) + SetAction(); + } + + public void ClearMagic() + { + NextMagic = null; + NextMagicDirection = 0; + NextMagicLocation = Point.Empty; + NextMagicObject = null; + } + } +} + diff --git a/Client/MirScenes/Dialogs/BigMapDialog.cs b/Client/MirScenes/Dialogs/BigMapDialog.cs new file mode 100644 index 0000000..b1ea701 --- /dev/null +++ b/Client/MirScenes/Dialogs/BigMapDialog.cs @@ -0,0 +1,242 @@ +using Client.MirControls; +using Client.MirGraphics; +using Client.MirNetwork; +using Client.MirObjects; +using Client.MirSounds; +using SlimDX; +using Font = System.Drawing.Font; +using C = ClientPackets; + +namespace Client.MirScenes.Dialogs +{ + public sealed class BigMapDialog : MirImageControl + { + public MirButton CloseButton; + public BigMapViewPort ViewPort; + + public BigMapDialog() + { + Index = 170; + Library = Libraries.Prguse; + Sort = true; + Location = Center.Subtract(0, 100); + NotControl = false; + + ViewPort = new BigMapViewPort() + { + Parent = this + }; + + CloseButton = new MirButton + { + HoverIndex = 361, + Index = 360, + Location = new Point(Size.Width - 25, 3), + Library = Libraries.Prguse2, + Parent = this, + PressedIndex = 362, + Sound = SoundList.ButtonA, + }; + CloseButton.Click += (o, e) => Hide(); + } + + public void Toggle() + { + if (Visible) + Hide(); + else + Show(); + } + + #region Disposable + protected override void Dispose(bool disposing) + { + if (disposing) + { + CloseButton = null; + } + + base.Dispose(disposing); + } + + #endregion + } + + public sealed class BigMapViewPort : MirControl + { + BigMapDialog ParentDialog; + float ScaleX; + float ScaleY; + public MirImageControl UserRadarDot; + + int BigMap_MouseCoordsProcessing_OffsetX, BigMap_MouseCoordsProcessing_OffsetY; + + public MirImageControl[] Players; + public static Dictionary PlayerLocations = new Dictionary(); + + public BigMapViewPort() + { + NotControl = false; + Size = new Size(359, 286); + + UserRadarDot = new MirImageControl + { + Library = Libraries.Prguse2, + Index = 1350, + Parent = this, + Visible = false, + NotControl = true + }; + + Players = new MirImageControl[Globals.MaxGroup]; + for (int i = 0; i < Players.Length; i++) + { + Players[i] = new MirImageControl + { + Index = 1350, + Library = Libraries.Prguse2, + Parent = this, + NotControl = false, + Visible = false, + }; + } + + AfterDraw += (o, e) => OnBeforeDraw(); + ParentChanged += (o, e) => SetParent(); + MouseDown += OnMouseClick; + } + + private void SetParent() + { + ParentDialog = (BigMapDialog)Parent; + } + + + private void OnMouseClick(object sender, MouseEventArgs e) + { + int X = (int)((e.Location.X - BigMap_MouseCoordsProcessing_OffsetX) / ScaleX); + int Y = (int)((e.Location.Y - BigMap_MouseCoordsProcessing_OffsetY) / ScaleY); + + var path = GameScene.Scene.MapControl.PathFinder.FindPath(MapObject.User.CurrentLocation, new Point(X, Y)); + + if (path == null || path.Count == 0) + { + GameScene.Scene.ChatDialog.ReceiveChat("Could not find suitable path.", ChatType.System); + } + else + { + GameScene.Scene.MapControl.CurrentPath = path; + GameScene.Scene.MapControl.AutoPath = true; + } + } + + + private void OnBeforeDraw() + { + if (!Parent.Visible) return; + var texture = GameScene.Scene.MapControl.MiniMapTexture; + if (texture == null) return; + + int index = GameScene.Scene.MapControl.MiniMap; + + Size = index > 0 ? Libraries.MiniMap.GetSize(index) : new Size(GameScene.Scene.MapControl.Width, GameScene.Scene.MapControl.Height); + Rectangle viewRect = new Rectangle(0, 0, Math.Min(359, Size.Width), Math.Min(286, Size.Height)); + + viewRect.X = 8 + (359 - viewRect.Width) / 2; + viewRect.Y = 8 + (286 - viewRect.Height) / 2; + + Location = viewRect.Location; + Size = viewRect.Size; + + BigMap_MouseCoordsProcessing_OffsetX = DisplayLocation.X; + BigMap_MouseCoordsProcessing_OffsetY = DisplayLocation.Y; + + ScaleX = Size.Width / (float)GameScene.Scene.MapControl.Width; + ScaleY = Size.Height / (float)GameScene.Scene.MapControl.Height; + + viewRect.Location = new Point( + (int)(ScaleX * MapObject.User.CurrentLocation.X) - viewRect.Width / 2, + (int)(ScaleY * MapObject.User.CurrentLocation.Y) - viewRect.Height / 2); + + if (viewRect.Right >= Size.Width) + viewRect.X = Size.Width - viewRect.Width; + if (viewRect.Bottom >= Size.Height) + viewRect.Y = Size.Height - viewRect.Height; + + if (viewRect.X < 0) viewRect.X = 0; + if (viewRect.Y < 0) viewRect.Y = 0; + + if (index > 0) + Libraries.MiniMap.Draw(index, DisplayLocation, Size, Color.FromArgb(255, 255, 255)); + else + DXManager.Draw(texture, null, new Vector3(DisplayRectangle.X, DisplayRectangle.Y, 0.0F), Color.White); + + int startPointX = (int)(viewRect.X / ScaleX); + int startPointY = (int)(viewRect.Y / ScaleY); + + var map = GameScene.Scene.MapControl; + float x; + float y; + for (int i = MapControl.Objects.Count - 1; i >= 0; i--) + { + MapObject ob = MapControl.Objects[i]; + + if (ob.Race == ObjectType.Item || ob.Dead || ob.Race == ObjectType.Spell) continue; + x = ((ob.CurrentLocation.X - startPointX) * ScaleX) + DisplayLocation.X; + y = ((ob.CurrentLocation.Y - startPointY) * ScaleY) + DisplayLocation.Y; + + Color colour; + + if (GroupDialog.GroupList.Contains(ob.Name) || ob.Name.EndsWith(string.Format("({0})", MapObject.User.Name))) + colour = Color.Blue; + else if (ob is PlayerObject) + colour = Color.Blue; + else if (ob is NPCObject || ob.AI == 6) + colour = Color.FromArgb(0, 255, 50); + else + colour = Color.FromArgb(255, 0, 0); + + DXManager.Draw(DXManager.RadarTexture, new Rectangle(0, 0, 2, 2), new Vector3((float)(x - 0.5), (float)(y - 0.5), 0.0F), colour); + } + + x = MapObject.User.CurrentLocation.X * ScaleX; + y = MapObject.User.CurrentLocation.Y * ScaleY; + var s = UserRadarDot.Size; + UserRadarDot.Location = new Point((int)x - s.Width / 2, (int)y - s.Height / 2); + + if (GroupDialog.GroupList.Count > 0) + { + for (int i = 0; i < GameScene.Scene.GroupDialog.GroupMembers.Length; i++) + { + string groupMembersName = GameScene.Scene.GroupDialog.GroupMembers[i].Text; + Players[i].Visible = false; + + foreach (var groupMembersMap in GroupDialog.GroupMembersMap.Where(x => x.Key == groupMembersName && x.Value == map.Title)) + { + foreach (var groupMemberLocation in PlayerLocations.Where(x => x.Key == groupMembersMap.Key)) + { + + float alteredX = ((groupMemberLocation.Value.X - startPointX) * ScaleX); + float alteredY = ((groupMemberLocation.Value.Y - startPointY) * ScaleY); + + if (groupMembersName != MapObject.User.Name) + Players[i].Visible = true; + + Players[i].Hint = groupMemberLocation.Key; + Players[i].Location = new Point((int)(alteredX - 0.5F) - 3, (int)(alteredY - 0.5F) - 3); + } + } + } + } + else + { + for (int i = 0; i < Players.Length; i++) + { + Players[i].Visible = false; + } + } + + } + } + +} diff --git a/Client/MirScenes/Dialogs/BuffDialog.cs b/Client/MirScenes/Dialogs/BuffDialog.cs new file mode 100644 index 0000000..8872fdc --- /dev/null +++ b/Client/MirScenes/Dialogs/BuffDialog.cs @@ -0,0 +1,769 @@ +using Client.MirControls; +using Client.MirGraphics; +using Client.MirSounds; + +namespace Client.MirScenes.Dialogs +{ + public class BuffDialog : MirImageControl + { + public List Buffs = new List(); + + protected MirButton _expandCollapseButton; + protected MirLabel _buffCountLabel; + protected List _buffList = new List(); + protected bool _fadedOut, _fadedIn; + protected int _buffCount; + protected long _nextFadeTime; + public Func GetExpandedParameter; + public Action SetExpandedParameter; + private bool ExpandedBuffWindow + { + get { return GetExpandedParameter(); } + set { SetExpandedParameter(value); } + } + + protected const long FadeDelay = 55; + protected const float FadeRate = 0.2f; + + public BuffDialog() + { + Index = 20; + Library = Libraries.Prguse2; + DrawImage = false; + Movable = false; + Size = new Size(44, 34); + Location = new Point(Settings.ScreenWidth - 170, 33); + Sort = true; + + Opacity = 0f; + _fadedOut = true; + + _expandCollapseButton = new MirButton + { + Index = 7, + HoverIndex = 8, + Size = new Size(16, 15), + Library = Libraries.Prguse2, + Parent = this, + PressedIndex = 9, + Sound = SoundList.ButtonA, + Opacity = 0f + }; + _expandCollapseButton.Click += (o, e) => + { + if (_buffCount == 1) + { + ExpandedBuffWindow = true; + } + else + { + ExpandedBuffWindow = !ExpandedBuffWindow; + } + + UpdateWindow(); + }; + + _buffCountLabel = new MirLabel + { + Parent = this, + AutoSize = true, + DrawFormat = TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter, + Font = new Font(Settings.FontName, 10F, FontStyle.Bold), + NotControl = true, + Sort = true, + Visible = false, + ForeColour = Color.Yellow, + OutLineColour = Color.Black, + }; + } + + public void CreateBuff(ClientBuff buff) + { + var buffImage = BuffImage(buff.Type); + + var buffLibrary = Libraries.BuffIcon; + + if (buffImage >= 20000) + { + buffImage -= 20000; + buffLibrary = Libraries.MagIcon; + } + + if (buffImage >= 10000) + { + buffImage -= 10000; + buffLibrary = Libraries.Prguse2; + } + + var image = new MirImageControl + { + Library = buffLibrary, + Parent = this, + Visible = true, + Sort = false, + Index = buffImage + }; + + _buffList.Insert(0, image); + UpdateWindow(); + } + + public void RemoveBuff(int buffId) + { + _buffList[buffId].Dispose(); + _buffList.RemoveAt(buffId); + + UpdateWindow(); + } + + public void Process() + { + if (!Visible) return; + + if (_buffList.Count != _buffCount) + { + UpdateWindow(); + } + + for (var i = 0; i < _buffList.Count; i++) + { + var image = _buffList[i]; + var buff = Buffs[i]; + + var buffImage = BuffImage(buff.Type); + var buffLibrary = Libraries.BuffIcon; + + //ArcherSpells - VampireShot,PoisonShot + if (buffImage >= 20000) + { + buffImage -= 20000; + buffLibrary = Libraries.MagIcon; + } + + if (buffImage >= 10000) + { + buffImage -= 10000; + buffLibrary = Libraries.Prguse2; + } + + var location = new Point(Size.Width - 10 - 23 - (i * 23) + ((10 * 23) * (i / 10)), 6 + ((i / 10) * 24)); + + image.Location = new Point(location.X, location.Y); + image.Hint = ExpandedBuffWindow ? BuffString(buff) : CombinedBuffText(); + image.Index = buffImage; + image.Library = buffLibrary; + + if (ExpandedBuffWindow || !ExpandedBuffWindow && i == 0) + { + image.Visible = true; + image.Opacity = 1f; + } + else + { + image.Visible = false; + image.Opacity = 0.6f; + } + + if (buff.Paused || buff.Infinite || !(Math.Round((buff.ExpireTime - CMain.Time) / 1000D) <= 5)) + continue; + + var time = (buff.ExpireTime - CMain.Time) / 100D; + + if (Math.Round(time) % 10 < 5) + image.Index = -1; + } + + if (IsMouseOver(CMain.MPoint)) + { + if (_buffCount == 0 || (!_fadedIn && CMain.Time <= _nextFadeTime)) + return; + + Opacity += FadeRate; + _expandCollapseButton.Opacity += FadeRate; + + if (Opacity > 1f) + { + Opacity = 1f; + _expandCollapseButton.Opacity = 1f; + _fadedIn = true; + _fadedOut = false; + } + + _nextFadeTime = CMain.Time + FadeDelay; + } + else + { + if (!_fadedOut && CMain.Time <= _nextFadeTime) + return; + + Opacity -= FadeRate; + _expandCollapseButton.Opacity -= FadeRate; + + if (Opacity < 0f) + { + Opacity = 0f; + _expandCollapseButton.Opacity = 0f; + _fadedOut = true; + _fadedIn = false; + } + + _nextFadeTime = CMain.Time + FadeDelay; + } + } + + private void UpdateWindow() + { + _buffCount = _buffList.Count; + + var baseImage = 20; + var heightOffset = Location.Y; + + //foreach (var dialog in GameScene.Scene.BuffDialogs) + //{ + // if (dialog.Category == Category) break; + + // if (dialog.Buffs.Count > 0) + // { + // heightOffset += dialog.Size.Height; + // } + //} + + if (_buffCount > 0 && ExpandedBuffWindow) + { + var oldWidth = Size.Width; + + if (_buffCount <= 10) + Index = baseImage + _buffCount - 1; + else if (_buffCount > 10) + Index = baseImage + 10; + else if (_buffCount > 20) + Index = baseImage + 11; + else if (_buffCount > 30) + Index = baseImage + 12; + else if (_buffCount > 40) + Index = baseImage + 13; + + var newX = Location.X - Size.Width + oldWidth; + var newY = heightOffset; + Location = new Point(newX, newY); + + _buffCountLabel.Visible = false; + + _expandCollapseButton.Location = new Point(Size.Width - 15, 0); + Size = new Size((_buffCount > 10 ? 10 : _buffCount) * 23, 24 + (_buffCount / 10) * 24); + } + else if (_buffCount > 0 && !ExpandedBuffWindow) + { + var oldWidth = Size.Width; + + Index = 20; + + var newX = Location.X - Size.Width + oldWidth; + var newY = heightOffset; + Location = new Point(newX, newY); + + _buffCountLabel.Visible = true; + _buffCountLabel.Text = $"{_buffCount}"; + _buffCountLabel.Location = new Point(Size.Width / 2 - _buffCountLabel.Size.Width / 2, Size.Height / 2 - 10); + _buffCountLabel.BringToFront(); + + _expandCollapseButton.Location = new Point(Size.Width - 15, 0); + Size = new Size(44, 34); + } + } + + public string BuffString(ClientBuff buff) + { + string text = RegexFunctions.SeperateCamelCase(buff.Type.ToString()) + "\n"; + bool overridestats = false; + + switch (buff.Type) + { + case BuffType.GameMaster: + GMOptions options = (GMOptions)buff.Values[0]; + + if (options.HasFlag(GMOptions.GameMaster)) text += "-Invisible\n"; + if (options.HasFlag(GMOptions.Superman)) text += "-Superman\n"; + if (options.HasFlag(GMOptions.Observer)) text += "-Observer\n"; + break; + case BuffType.Hiding: + case BuffType.ClearRing: + text += "Invisible to many monsters.\n"; + break; + case BuffType.Guild: + text += GameScene.Scene.GuildDialog.ActiveStats; + break; + } + + if (!overridestats) + { + foreach (var val in buff.Stats.Values) + { + var c = val.Value < 0 ? "Decreases" : "Increases"; + var key = val.Key.ToString(); + + var strKey = RegexFunctions.SeperateCamelCase(key.Replace("Rate", "").Replace("Multiplier", "").Replace("Percent", "")); + + var sign = ""; + + if (key.Contains("Percent")) + sign = "%"; + else if (key.Contains("Multiplier")) + sign = "x"; + + var txt = $"{c} {strKey} by: {val.Value}{sign}.\n"; + + text += txt; + } + } + + if (buff.Paused) + { + text += GameLanguage.ExpirePaused; + } + else if (buff.Infinite) + { + text += GameLanguage.ExpireNever; + } + else + { + text += string.Format(GameLanguage.Expire, Functions.PrintTimeSpanFromSeconds(Math.Round((buff.ExpireTime - CMain.Time) / 1000D))); + } + + if (!string.IsNullOrEmpty(buff.Caster)) text += string.Format("\nCaster: {0}", buff.Caster); + + return text; + } + + private string CombinedBuffText() + { + string text = "Active Buffs\n"; + var stats = new Stats(); + + for (var i = 0; i < _buffList.Count; i++) + { + var buff = Buffs[i]; + + stats.Add(buff.Stats); + } + + foreach (var val in stats.Values) + { + var c = val.Value < 0 ? "Decreased" : "Increased"; + var key = val.Key.ToString(); + + var strKey = RegexFunctions.SeperateCamelCase(key.Replace("Rate", "").Replace("Multiplier", "").Replace("Percent", "")); + + var sign = ""; + + if (key.Contains("Percent")) + sign = "%"; + else if (key.Contains("Multiplier")) + sign = "x"; + + var txt = $"{c} {strKey} by: {val.Value}{sign}.\n"; + + text += txt; + } + + return text; + } + + private int BuffImage(BuffType type) + { + switch (type) + { + //Skills + case BuffType.MagicShield: + return 30; + + case BuffType.Hiding: + case BuffType.ClearRing: + return 17; + case BuffType.SoulShield: + return 13; + case BuffType.BlessedArmour: + return 14; + case BuffType.UltimateEnhancer: + return 35; + + //Special + case BuffType.GameMaster: + return 173; + case BuffType.General: + return 182; + case BuffType.Exp: + return 260; + case BuffType.Drop: + return 162; + case BuffType.Gold: + return 168; + case BuffType.Knapsack: + case BuffType.BagWeight: + return 235; + case BuffType.Lover: + return 201; + case BuffType.Guild: + return 203; + case BuffType.Rested: + return 240; + case BuffType.Skill: + return 200; + + //Stats + case BuffType.Impact: + return 249; + case BuffType.Magic: + return 165; + case BuffType.Taoist: + return 250; + case BuffType.Storm: + return 170; + case BuffType.HealthAid: + return 161; + case BuffType.ManaAid: + return 169; + case BuffType.Defence: + return 166; + case BuffType.MagicDefence: + return 158; + case BuffType.WonderDrug: + return 252; + default: + return 0; + } + } + } + + + //UNFINISHED + public class ClientPoisonBuff + { + public PoisonType Type; + public string Caster; + public int Value; + public int TickSpeed; + public long ExpireTime; + } + + public sealed class PoisonBuffDialog : MirImageControl + { + public List Buffs = new List(); + + private MirButton _expandCollapseButton; + private MirLabel _buffCountLabel; + private List _buffList = new List(); + private bool _fadedOut, _fadedIn; + private int _buffCount; + private long _nextFadeTime; + + private const long FadeDelay = 55; + private const float FadeRate = 0.2f; + + public PoisonBuffDialog() + { + Index = 40; + Library = Libraries.Prguse2; + Movable = false; + Size = new Size(44, 34); + Location = new Point(Settings.ScreenWidth - 170, 0); + Sort = true; + + Opacity = 0f; + _fadedOut = true; + + _expandCollapseButton = new MirButton + { + Index = 7, + HoverIndex = 8, + Size = new Size(16, 15), + Library = Libraries.Prguse2, + Parent = this, + PressedIndex = 9, + Sound = SoundList.ButtonA, + Opacity = 0f + }; + _expandCollapseButton.Click += (o, e) => + { + if (_buffCount == 1) + { + Settings.ExpandedBuffWindow = true; + } + else + { + Settings.ExpandedBuffWindow = !Settings.ExpandedBuffWindow; + } + + UpdateWindow(); + }; + + _buffCountLabel = new MirLabel + { + Parent = this, + AutoSize = true, + DrawFormat = TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter, + Font = new Font(Settings.FontName, 10F, FontStyle.Bold), + NotControl = true, + Sort = true, + Visible = false, + ForeColour = Color.Yellow, + OutLineColour = Color.Black, + }; + } + + public void CreateBuff(ClientPoisonBuff buff) + { + var buffImage = BuffImage(buff.Type); + + var buffLibrary = Libraries.BuffIcon; + + if (buffImage >= 20000) + { + buffImage -= 20000; + buffLibrary = Libraries.MagIcon; + } + + if (buffImage >= 10000) + { + buffImage -= 10000; + buffLibrary = Libraries.Prguse2; + } + + var image = new MirImageControl + { + Library = buffLibrary, + Parent = this, + Visible = true, + Sort = false, + Index = buffImage + }; + + _buffList.Insert(0, image); + UpdateWindow(); + } + + public string BuffString(ClientPoisonBuff buff) + { + string text = RegexFunctions.SeperateCamelCase(buff.Type.ToString()) + "\n"; + + switch (buff.Type) + { + case PoisonType.Green: + { + var tick = buff.TickSpeed / 1000; + var tickName = tick > 1 ? "seconds" : "second"; + + text += $"Recieve {buff.Value} damage every {tick} {tickName}.\n"; + } + break; + case PoisonType.Red: + { + var tick = buff.TickSpeed / 1000; + var tickName = tick > 1 ? "seconds" : "second"; + + text += $"Reduces armour rate by 10% every {tick} {tickName}.\n"; + } + break; + case PoisonType.Slow: + text += "Reduces movement speed.\n"; + break; + case PoisonType.Frozen: + text += "Prevents casting, movin\nand attacking.\n"; + break; + case PoisonType.Stun: + { + var tick = buff.TickSpeed / 1000; + var tickName = tick > 1 ? "seconds" : "second"; + + text += $"Increases damage received by 20% every {tick} {tickName}.\n"; + } + break; + case PoisonType.Paralysis: + text += "Prevents moving and attacking.\n"; + break; + } + + text += string.Format(GameLanguage.Expire, Functions.PrintTimeSpanFromSeconds(Math.Round((buff.ExpireTime - CMain.Time) / 1000D))); + + if (!string.IsNullOrEmpty(buff.Caster)) text += string.Format("\nCaster: {0}", buff.Caster); + + return text; + } + + private int BuffImage(PoisonType type) + { + switch (type) + { + case PoisonType.Green: + return 221; + case PoisonType.Red: + return 222; + case PoisonType.Slow: + return 225; + case PoisonType.Frozen: + return 223; + case PoisonType.Stun: + return 224; + case PoisonType.Paralysis: + return 233; + default: + return 0; + } + } + + public void Process() + { + if (!Visible) return; + + if (_buffList.Count != _buffCount) + { + UpdateWindow(); + } + + for (var i = 0; i < _buffList.Count; i++) + { + var image = _buffList[i]; + var buff = Buffs[i]; + + var buffImage = BuffImage(buff.Type); + var buffLibrary = Libraries.BuffIcon; + + //ArcherSpells - VampireShot,PoisonShot + if (buffImage >= 20000) + { + buffImage -= 20000; + buffLibrary = Libraries.MagIcon; + } + + if (buffImage >= 10000) + { + buffImage -= 10000; + buffLibrary = Libraries.Prguse2; + } + + var location = new Point(Size.Width - 10 - 23 - (i * 23) + ((10 * 23) * (i / 10)), 6 + ((i / 10) * 24)); + + image.Location = new Point(location.X, location.Y); + image.Hint = Settings.ExpandedBuffWindow ? BuffString(buff) : CombinedBuffText(); + image.Index = buffImage; + image.Library = buffLibrary; + + if (Settings.ExpandedBuffWindow || !Settings.ExpandedBuffWindow && i == 0) + { + image.Visible = true; + image.Opacity = 1f; + } + else + { + image.Visible = false; + image.Opacity = 0.6f; + } + + if (!(Math.Round((buff.ExpireTime - CMain.Time) / 1000D) <= 5)) + continue; + + var time = (buff.ExpireTime - CMain.Time) / 100D; + + if (Math.Round(time) % 10 < 5) + image.Index = -1; + } + + if (IsMouseOver(CMain.MPoint)) + { + if (_buffCount == 0 || (!_fadedIn && CMain.Time <= _nextFadeTime)) + return; + + Opacity += FadeRate; + _expandCollapseButton.Opacity += FadeRate; + + if (Opacity > 1f) + { + Opacity = 1f; + _expandCollapseButton.Opacity = 1f; + _fadedIn = true; + _fadedOut = false; + } + + _nextFadeTime = CMain.Time + FadeDelay; + } + else + { + if (!_fadedOut && CMain.Time <= _nextFadeTime) + return; + + Opacity -= FadeRate; + _expandCollapseButton.Opacity -= FadeRate; + + if (Opacity < 0f) + { + Opacity = 0f; + _expandCollapseButton.Opacity = 0f; + _fadedOut = true; + _fadedIn = false; + } + + _nextFadeTime = CMain.Time + FadeDelay; + } + } + + private void UpdateWindow() + { + _buffCount = _buffList.Count; + + var baseImage = 20; + var heightOffset = 36; + + if (_buffCount > 0 && Settings.ExpandedBuffWindow) + { + var oldWidth = Size.Width; + + if (_buffCount <= 10) + Index = baseImage + _buffCount - 1; + else if (_buffCount > 10) + Index = baseImage + 10; + else if (_buffCount > 20) + Index = baseImage + 11; + else if (_buffCount > 30) + Index = baseImage + 12; + else if (_buffCount > 40) + Index = baseImage + 13; + + var newX = Location.X - Size.Width + oldWidth; + var newY = heightOffset; + Location = new Point(newX, newY); + + _buffCountLabel.Visible = false; + + _expandCollapseButton.Location = new Point(Size.Width - 15, 0); + Size = new Size((_buffCount > 10 ? 10 : _buffCount) * 23, 24 + (_buffCount / 10) * 24); + } + else if (_buffCount > 0 && !Settings.ExpandedBuffWindow) + { + var oldWidth = Size.Width; + + Index = 20; + + var newX = Location.X - Size.Width + oldWidth; + var newY = heightOffset; + Location = new Point(newX, newY); + + _buffCountLabel.Visible = true; + _buffCountLabel.Text = $"{_buffCount}"; + _buffCountLabel.Location = new Point(Size.Width / 2 - _buffCountLabel.Size.Width / 2, Size.Height / 2 - 10); + _buffCountLabel.BringToFront(); + + _expandCollapseButton.Location = new Point(Size.Width - 15, 0); + Size = new Size(44, 34); + } + } + + private string CombinedBuffText() + { + string text = "Active Poisons\n"; + + return text; + } + } + +} + diff --git a/Client/MirScenes/Dialogs/CharacterDialog.cs b/Client/MirScenes/Dialogs/CharacterDialog.cs new file mode 100644 index 0000000..aff3495 --- /dev/null +++ b/Client/MirScenes/Dialogs/CharacterDialog.cs @@ -0,0 +1,139 @@ +using Client.MirControls; +using Client.MirGraphics; +using Client.MirObjects; +using Client.MirSounds; + +namespace Client.MirScenes.Dialogs +{ + public sealed class CharacterDialog : MirImageControl + { + public MirButton CloseButton; + + public MirItemCell[] Grid; + private MirGridType GridType; + private UserObject Actor; + + public CharacterDialog(MirGridType gridType, UserObject actor) + { + Actor = actor; + GridType = gridType; + + Index = 137; + Library = Libraries.Prguse; + Location = new Point(Settings.ScreenWidth - Size.Width - 28, GameScene.Scene.MainCharacterDialog.Location.Y - Size.Height); + Movable = true; + Sort = true; + + CloseButton = new MirButton + { + HoverIndex = 361, + Index = 360, + Location = new Point(241, 3), + Library = Libraries.Prguse2, + Parent = this, + PressedIndex = 362, + Sound = SoundList.ButtonA, + }; + CloseButton.Click += (o, e) => Hide(); + + Grid = new MirItemCell[Enum.GetNames(typeof(EquipmentSlot)).Length]; + + Grid[(int)EquipmentSlot.Weapon] = new MirItemCell + { + ItemSlot = (int)EquipmentSlot.Weapon, + GridType = gridType, + Parent = this, + Location = new Point(293, 43), + Size = new Size(60, 45) + }; + + + Grid[(int)EquipmentSlot.Armour] = new MirItemCell + { + ItemSlot = (int)EquipmentSlot.Armour, + GridType = gridType, + Parent = this, + Location = new Point(157, 69), + Size = new Size(60, 45) + }; + + + Grid[(int)EquipmentSlot.Helmet] = new MirItemCell + { + ItemSlot = (int)EquipmentSlot.Helmet, + GridType = gridType, + Parent = this, + Location = new Point(157, 13), + Size = new Size(60, 45) + }; + + Grid[(int)EquipmentSlot.Necklace] = new MirItemCell + { + ItemSlot = (int)EquipmentSlot.Necklace, + GridType = gridType, + Parent = this, + Location = new Point(19, 43), + Size = new Size(60, 45) + }; + + Grid[(int)EquipmentSlot.BraceletL] = new MirItemCell + { + ItemSlot = (int)EquipmentSlot.BraceletL, + GridType = gridType, + Parent = this, + Location = new Point(87, 13), + Size = new Size(60, 45) + }; + + Grid[(int)EquipmentSlot.BraceletR] = new MirItemCell + { + ItemSlot = (int)EquipmentSlot.BraceletR, + GridType = gridType, + Parent = this, + Location = new Point(225, 13), + Size = new Size(60, 45) + }; + + Grid[(int)EquipmentSlot.RingL] = new MirItemCell + { + ItemSlot = (int)EquipmentSlot.RingL, + GridType = gridType, + Parent = this, + Location = new Point(87, 69), + Size = new Size(60, 45) + }; + + Grid[(int)EquipmentSlot.RingR] = new MirItemCell + { + ItemSlot = (int)EquipmentSlot.RingR, + GridType = gridType, + Parent = this, + Location = new Point(225, 69), + Size = new Size(60, 45) + }; + } + + public override void Show() + { + if (Visible) return; + Visible = true; + } + + public override void Hide() + { + base.Hide(); + } + + public MirItemCell GetCell(ulong id) + { + + for (int i = 0; i < Grid.Length; i++) + { + if (Grid[i].Item == null || Grid[i].Item.UniqueID != id) continue; + return Grid[i]; + } + return null; + } + + } +} diff --git a/Client/MirScenes/Dialogs/ChatNoticeDialog.cs b/Client/MirScenes/Dialogs/ChatNoticeDialog.cs new file mode 100644 index 0000000..2a899cc --- /dev/null +++ b/Client/MirScenes/Dialogs/ChatNoticeDialog.cs @@ -0,0 +1,80 @@ +using Client.MirControls; +using Client.MirGraphics; + +namespace Client.MirScenes.Dialogs +{ + public class ChatNoticeDialog : MirImageControl + { + public MirImageControl Layout; + public MirLabel TextLabel1, TextLabel2; + private long ViewTime = 10000; + private long CurrentTime = 0; + + public ChatNoticeDialog() + { + Index = 1361; + Library = Libraries.Prguse; + Movable = false; + Sort = false; + Location = new Point(Settings.ScreenWidth / 2 - Size.Width / 2, Settings.ScreenHeight / 6 - Size.Height / 2); + Opacity = 0.7F; + + TextLabel1 = new MirLabel + { + Text = "", + Font = new Font(Settings.FontName, 10F), + DrawFormat = TextFormatFlags.VerticalCenter | TextFormatFlags.HorizontalCenter, + Parent = this, + NotControl = true, + Location = new Point(0, -6), + Size = new Size(660, 40), + ForeColour = Color.Yellow, + OutLineColour = Color.Black, + }; + + TextLabel2 = new MirLabel + { + Text = "", + Font = new Font(Settings.FontName, 15F), + DrawFormat = TextFormatFlags.VerticalCenter | TextFormatFlags.HorizontalCenter, + Parent = this, + NotControl = true, + Location = new Point(0, 0), + Size = new Size(660, 40), + ForeColour = Color.Yellow, + OutLineColour = Color.Black, + }; + + Layout = new MirImageControl + { + Index = 1360, + Library = Libraries.Prguse, + Location = new Point(0, 0), + Parent = this + }; + + AfterDraw += ChatNotice_AfterDraw; + } + + private void ChatNotice_AfterDraw(object sender, EventArgs e) + { + + if (CurrentTime < CMain.Time) + { + Hide(); + } + } + + public void ShowNotice(string text, int type = 0) + { + Index = type == 0 ? 1361 : 1363; + Layout.Index = type == 0 ? 1360 : 1362; + TextLabel1.Text = TextLabel2.Text = text; + TextLabel1.Visible = type == 0; + TextLabel2.Visible = type == 1; + + Show(); + CurrentTime = CMain.Time + ViewTime; + } + } +} diff --git a/Client/MirScenes/Dialogs/ChatOptionDialog.cs b/Client/MirScenes/Dialogs/ChatOptionDialog.cs new file mode 100644 index 0000000..7abdb6e --- /dev/null +++ b/Client/MirScenes/Dialogs/ChatOptionDialog.cs @@ -0,0 +1,383 @@ +using Client.MirControls; +using Client.MirGraphics; +using Client.MirSounds; + +namespace Client.MirScenes.Dialogs +{ + public class ChatOptionDialog : MirImageControl + { + public MirButton FilterTabButton, ChatTabButton; + public MirButton CloseButton; + + public MirButton AllButton, GeneralButton, WhisperButton, ShoutButton, SystemButton, LoverButton, MentorButton, GroupButton, GuildButton; + public MirButton TransparencyOnButton, TransparencyOffButton; + + public bool AllFiltersOff = true; + + public ChatOptionDialog() + { + Index = 466; + Library = Libraries.Prguse; + Size = new Size(224, 180); + Movable = true; + Sort = true; + Location = new Point((Settings.ScreenWidth - Size.Width) / 2, (Settings.ScreenHeight - Size.Height) / 2); + + BeforeDraw += ChatFilterPanel_BeforeDraw; + + FilterTabButton = new MirButton + { + Index = 463, + PressedIndex = 462, + Parent = this, + Library = Libraries.Prguse, + Sound = SoundList.ButtonA, + Location = new Point(8, 8) + }; + FilterTabButton.Click += (o, e) => SwitchTab(0); + + ChatTabButton = new MirButton + { + Index = 464, + PressedIndex = 465, + Parent = this, + Library = Libraries.Prguse, + Sound = SoundList.ButtonA, + Location = new Point(78, 8) + }; + ChatTabButton.Click += (o, e) => SwitchTab(1); + + CloseButton = new MirButton + { + HoverIndex = 361, + Index = 360, + Location = new Point(198, 3), + Library = Libraries.Prguse2, + Parent = this, + PressedIndex = 362, + Sound = SoundList.ButtonA, + }; + CloseButton.Click += (o, e) => Hide(); + + #region Filters + + AllButton = new MirButton + { + Index = 2087, + Library = Libraries.Prguse, + Parent = this, + Location = new Point(74, 47), + Sound = SoundList.ButtonA, + Size = new Size(16, 12) + }; + AllButton.Click += (o, e) => ToggleAllFilters(); + + GeneralButton = new MirButton + { + Index = 2071, + Library = Libraries.Prguse, + Parent = this, + Location = new Point(40, 69), + Sound = SoundList.ButtonA + }; + GeneralButton.Click += (o, e) => + { + Settings.FilterNormalChat = !Settings.FilterNormalChat; + CheckAllFilters(); + }; + + WhisperButton = new MirButton + { + Index = 2075, + Library = Libraries.Prguse, + Parent = this, + Location = new Point(40, 92), + Sound = SoundList.ButtonA + }; + WhisperButton.Click += (o, e) => + { + Settings.FilterWhisperChat = !Settings.FilterWhisperChat; + CheckAllFilters(); + }; + + ShoutButton = new MirButton + { + Index = 2073, + Library = Libraries.Prguse, + Parent = this, + Location = new Point(40, 115), + Sound = SoundList.ButtonA + }; + ShoutButton.Click += (o, e) => + { + Settings.FilterShoutChat = !Settings.FilterShoutChat; + CheckAllFilters(); + }; + + SystemButton = new MirButton + { + Index = 2085, + Library = Libraries.Prguse, + Parent = this, + Location = new Point(40, 138), + Sound = SoundList.ButtonA + }; + SystemButton.Click += (o, e) => + { + Settings.FilterSystemChat = !Settings.FilterSystemChat; + CheckAllFilters(); + }; + + LoverButton = new MirButton + { + Index = 2077, + Library = Libraries.Prguse, + Parent = this, + Location = new Point(135, 69), + Sound = SoundList.ButtonA + }; + LoverButton.Click += (o, e) => + { + Settings.FilterLoverChat = !Settings.FilterLoverChat; + CheckAllFilters(); + }; + + MentorButton = new MirButton + { + Index = 2079, + Library = Libraries.Prguse, + Parent = this, + Location = new Point(135, 92), + Sound = SoundList.ButtonA + }; + MentorButton.Click += (o, e) => + { + Settings.FilterMentorChat = !Settings.FilterMentorChat; + CheckAllFilters(); + }; + + GroupButton = new MirButton + { + Index = 2081, + Library = Libraries.Prguse, + Parent = this, + Location = new Point(135, 115), + Sound = SoundList.ButtonA + }; + GroupButton.Click += (o, e) => + { + Settings.FilterGroupChat = !Settings.FilterGroupChat; + CheckAllFilters(); + }; + + GuildButton = new MirButton + { + Index = 2083, + Library = Libraries.Prguse, + Parent = this, + Location = new Point(135, 138), + Sound = SoundList.ButtonA + }; + GuildButton.Click += (o, e) => + { + Settings.FilterGuildChat = !Settings.FilterGuildChat; + CheckAllFilters(); + }; + + #endregion + + #region Transparency + + TransparencyOffButton = new MirButton + { + Index = 471, + HoverIndex = 472, + PressedIndex = 470, + Location = new Point(45, 90), + Parent = this, + Library = Libraries.Prguse, + Sound = SoundList.ButtonA, + Visible = false + }; + TransparencyOffButton.Click += (o, e) => + { + Settings.TransparentChat = false; + UpdateTransparency(); + }; + + TransparencyOnButton = new MirButton + { + Index = 474, + HoverIndex = 475, + PressedIndex = 473, + Location = new Point(115, 90), + Parent = this, + Library = Libraries.Prguse, + Sound = SoundList.ButtonA, + Visible = false + }; + TransparencyOnButton.Click += (o, e) => + { + Settings.TransparentChat = true; + UpdateTransparency(); + }; + + #endregion + + CheckAllFilters(); + UpdateTransparency(); + } + + private void ChatFilterPanel_BeforeDraw(object sender, EventArgs e) + { + AllButton.Index = AllFiltersOff ? 2087 : 2086; + + GeneralButton.Index = Settings.FilterNormalChat ? 2070 : 2071; + WhisperButton.Index = Settings.FilterWhisperChat ? 2074 : 2075; + ShoutButton.Index = Settings.FilterShoutChat ? 2072 : 2073; + SystemButton.Index = Settings.FilterSystemChat ? 2084 : 2085; + LoverButton.Index = Settings.FilterLoverChat ? 2076 : 2077; + MentorButton.Index = Settings.FilterMentorChat ? 2078 : 2079; + GroupButton.Index = Settings.FilterGroupChat ? 2080 : 2081; + GuildButton.Index = Settings.FilterGuildChat ? 2082 : 2083; + } + + private void SwitchTab(int tab = 0) + { + if(tab == 0) + { + FilterTabButton.Index = 463; + FilterTabButton.PressedIndex = 462; + ChatTabButton.Index = 464; + ChatTabButton.PressedIndex = 465; + Index = 466; + + //Show all buttons on filter tab + AllButton.Visible = true; + GeneralButton.Visible = true; + WhisperButton.Visible = true; + ShoutButton.Visible = true; + SystemButton.Visible = true; + LoverButton.Visible = true; + MentorButton.Visible = true; + GroupButton.Visible = true; + GuildButton.Visible = true; + + //hide all transparency buttons + TransparencyOffButton.Visible = false; + TransparencyOnButton.Visible = false; + } + else if(tab == 1) + { + FilterTabButton.Index = 462; + FilterTabButton.PressedIndex = 463; + ChatTabButton.Index = 465; + ChatTabButton.PressedIndex = 464; + Index = 467; + + //Hide all buttons on filter tab + AllButton.Visible = false; + GeneralButton.Visible = false; + WhisperButton.Visible = false; + ShoutButton.Visible = false; + SystemButton.Visible = false; + LoverButton.Visible = false; + MentorButton.Visible = false; + GroupButton.Visible = false; + GuildButton.Visible = false; + + //show all transparency buttons + TransparencyOffButton.Visible = true; + TransparencyOnButton.Visible = true; + } + } + + private void CheckAllFilters() + { + if (!Settings.FilterNormalChat && !Settings.FilterWhisperChat + && !Settings.FilterShoutChat && !Settings.FilterSystemChat + && !Settings.FilterLoverChat && !Settings.FilterMentorChat + && !Settings.FilterGroupChat && !Settings.FilterGuildChat) + { + AllFiltersOff = true; + } + else + { + AllFiltersOff = false; + } + + GameScene.Scene.ChatDialog.Update(); + } + private void ToggleAllFilters() + { + if(AllFiltersOff) + { + //turn all filters on + Settings.FilterNormalChat = true; + Settings.FilterWhisperChat = true; + Settings.FilterShoutChat = true; + Settings.FilterSystemChat = true; + Settings.FilterLoverChat = true; + Settings.FilterMentorChat = true; + Settings.FilterGroupChat = true; + Settings.FilterGuildChat = true; + + AllButton.Index = 2086; + } + else + { + //turn all filters off + Settings.FilterNormalChat = false; + Settings.FilterWhisperChat = false; + Settings.FilterShoutChat = false; + Settings.FilterSystemChat = false; + Settings.FilterLoverChat = false; + Settings.FilterMentorChat = false; + Settings.FilterGroupChat = false; + Settings.FilterGuildChat = false; + + AllButton.Index = 2087; + } + + AllFiltersOff = !AllFiltersOff; + + GameScene.Scene.ChatDialog.Update(); + } + + private void UpdateTransparency() + { + if (Settings.TransparentChat) + { + GameScene.Scene.ChatDialog.ForeColour = Color.FromArgb(15, 0, 0); + GameScene.Scene.ChatDialog.BackColour = Color.FromArgb(15, 0, 0); + GameScene.Scene.ChatDialog.Opacity = 0.8f; + + TransparencyOnButton.Index = 474; + TransparencyOnButton.HoverIndex = 475; + + TransparencyOffButton.Index = 470; + TransparencyOffButton.HoverIndex = 470; + } + else + { + GameScene.Scene.ChatDialog.ForeColour = Color.White; + GameScene.Scene.ChatDialog.BackColour = Color.White; + GameScene.Scene.ChatDialog.Opacity = 1; + + TransparencyOnButton.Index = 473; + TransparencyOnButton.HoverIndex = 473; + + TransparencyOffButton.Index = 471; + TransparencyOffButton.HoverIndex = 472; + } + } + + public void Toggle() + { + if (!Visible) + Show(); + else + Hide(); + } + } +} diff --git a/Client/MirScenes/Dialogs/CompassDialog.cs b/Client/MirScenes/Dialogs/CompassDialog.cs new file mode 100644 index 0000000..c71bb02 --- /dev/null +++ b/Client/MirScenes/Dialogs/CompassDialog.cs @@ -0,0 +1,64 @@ +using Client.MirControls; +using Client.MirGraphics; + +namespace Client.MirScenes.Dialogs +{ + public class CompassDialog : MirControl + { + public Point Destination = Point.Empty; + + private readonly MirImageControl _image; + + public CompassDialog() + { + Location = new Point((Settings.ScreenWidth / 2) - 25, (Settings.ScreenHeight / 2) - 120); + NotControl = true; + Size = new Size(10, 10); + Movable = false; + Sort = true; + + _image = new MirImageControl + { + Parent = this, + Index = 0, + Library = Libraries.Prguse2, + NotControl = true, + UseOffSet = true, + Location = new Point(0, 0), + Visible = true + }; + } + + public void ClearPoint() + { + Destination = Point.Empty; + } + + public void SetPoint(Point point) + { + Destination = point; + } + + public void Process() + { + if (Destination == Point.Empty || (Destination.X == GameScene.User.CurrentLocation.X && Destination.Y == GameScene.User.CurrentLocation.Y)) + { + Visible = false; + return; + } + + Visible = true; + + float xDiff = GameScene.User.CurrentLocation.X - Destination.X; + float yDiff = GameScene.User.CurrentLocation.Y - Destination.Y; + + var angle = Math.Atan2(xDiff * -1, yDiff) * 180 / Math.PI; + + var degree = (angle + 360) % 360; + + var offset = (double)40 / 360 * degree; + + _image.Index = (int)(1470 + Math.Floor(offset)); + } + } +} diff --git a/Client/MirScenes/Dialogs/FriendDialog.cs b/Client/MirScenes/Dialogs/FriendDialog.cs new file mode 100644 index 0000000..4e15452 --- /dev/null +++ b/Client/MirScenes/Dialogs/FriendDialog.cs @@ -0,0 +1,569 @@ +using Client.MirControls; +using Client.MirGraphics; +using Client.MirNetwork; +using Client.MirSounds; +using C = ClientPackets; + +namespace Client.MirScenes.Dialogs +{ + public sealed class FriendDialog : MirImageControl + { + public MirImageControl TitleLabel, FriendLabel, BlacklistLabel; + public MirLabel PageNumberLabel; + public MirButton CloseButton, PreviousButton, NextButton; + public MirButton AddButton, RemoveButton, MemoButton, EmailButton, WhisperButton; + public FriendRow[] Rows = new FriendRow[12]; + + public List Friends = new List(); + private ClientFriend SelectedFriend = null; + private bool _tempBlockedTab = false; + private bool _blockedTab = false; + + public int SelectedIndex = 0; + public int StartIndex = 0; + public int Page = 0; + + public FriendDialog() + { + Index = 199; + Library = Libraries.Prguse; + Movable = true; + Sort = true; + Location = Center; + + TitleLabel = new MirImageControl + { + Index = 6, + Library = Libraries.Prguse, + Location = new Point(18, 8), + Parent = this + }; + + FriendLabel = new MirImageControl + { + Index = 163, + Library = Libraries.Prguse, + Location = new Point(10, 34), + Parent = this, + Sound = SoundList.ButtonA, + }; + FriendLabel.Click += (o, e) => + { + _tempBlockedTab = false; + UpdateDisplay(); + }; + + BlacklistLabel = new MirImageControl + { + Index = 167, + Library = Libraries.Prguse, + Location = new Point(128, 34), + Parent = this, + Sound = SoundList.ButtonA, + }; + BlacklistLabel.Click += (o, e) => + { + _tempBlockedTab = true; + UpdateDisplay(); + }; + + PageNumberLabel = new MirLabel + { + Text = "", + Parent = this, + Size = new Size(83, 17), + Location = new Point(87, 216), + DrawFormat = TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter + }; + + #region Buttons + + PreviousButton = new MirButton + { + Index = 240, + HoverIndex = 241, + PressedIndex = 242, + Library = Libraries.Prguse2, + Parent = this, + Size = new Size(16, 16), + Location = new Point(70, 218), + Sound = SoundList.ButtonA, + }; + PreviousButton.Click += (o, e) => + { + Page--; + if (Page < 0) Page = 0; + StartIndex = Rows.Length * Page; + Update(); + }; + + NextButton = new MirButton + { + Index = 243, + HoverIndex = 244, + PressedIndex = 245, + Library = Libraries.Prguse2, + Parent = this, + Size = new Size(16, 16), + Location = new Point(171, 218), + Sound = SoundList.ButtonA, + }; + NextButton.Click += (o, e) => + { + Page++; + if (Page > Friends.Count() / Rows.Length) Page = Friends.Count() / Rows.Length; + StartIndex = Rows.Length * Page; + + Update(); + }; + + CloseButton = new MirButton + { + HoverIndex = 361, + Index = 360, + Location = new Point(237, 3), + Library = Libraries.Prguse2, + Parent = this, + PressedIndex = 362, + Sound = SoundList.ButtonA, + }; + CloseButton.Click += (o, e) => Hide(); + + AddButton = new MirButton + { + Index = 554, + HoverIndex = 555, + PressedIndex = 556, + Library = Libraries.Prguse, + Location = new Point(60, 241), + Parent = this, + Sound = SoundList.ButtonA, + Hint = GameLanguage.AddFriend + }; + AddButton.Click += (o, e) => + { + string message = GameLanguage.FriendEnterAddName; + if (_blockedTab) + { + message = GameLanguage.FriendEnterBlockName; + } + + MirInputBox inputBox = new MirInputBox(message); + + inputBox.OKButton.Click += (o1, e1) => + { + Network.Enqueue(new C.AddFriend { Name = inputBox.InputTextBox.Text, Blocked = _blockedTab }); + inputBox.Dispose(); + }; + + inputBox.Show(); + }; + + RemoveButton = new MirButton + { + Index = 557, + HoverIndex = 558, + PressedIndex = 559, + Library = Libraries.Prguse, + Location = new Point(88, 241), + Parent = this, + Sound = SoundList.ButtonA, + Hint = GameLanguage.RemoveFriend, + }; + RemoveButton.Click += (o, e) => + { + if (SelectedFriend == null) return; + + MirMessageBox messageBox = new MirMessageBox(string.Format("Are you sure you wish to remove '{0}'?", SelectedFriend.Name), MirMessageBoxButtons.YesNo); + + messageBox.YesButton.Click += (o1, e1) => + { + Network.Enqueue(new C.RemoveFriend { CharacterIndex = SelectedFriend.Index }); + messageBox.Dispose(); + }; + + messageBox.Show(); + }; + + MemoButton = new MirButton + { + Index = 560, + HoverIndex = 561, + PressedIndex = 562, + Library = Libraries.Prguse, + Location = new Point(116, 241), + Parent = this, + Sound = SoundList.ButtonA, + Hint = GameLanguage.FriendMemo + + }; + MemoButton.Click += (o, e) => + { + if (SelectedFriend == null) return; + + GameScene.Scene.MemoDialog.Friend = SelectedFriend; + GameScene.Scene.MemoDialog.Show(); + }; + + EmailButton = new MirButton + { + Index = 563, + HoverIndex = 564, + PressedIndex = 565, + Library = Libraries.Prguse, + Location = new Point(144, 241), + Parent = this, + Sound = SoundList.ButtonA, + Hint = GameLanguage.FriendMail, + }; + EmailButton.Click += (o, e) => + { + if (SelectedFriend == null) return; + + GameScene.Scene.MailComposeLetterDialog.ComposeMail(SelectedFriend.Name); + }; + + WhisperButton = new MirButton + { + Index = 566, + HoverIndex = 567, + PressedIndex = 568, + Library = Libraries.Prguse, + Location = new Point(172, 241), + Parent = this, + Sound = SoundList.ButtonA, + Hint = GameLanguage.FriendWhisper + }; + WhisperButton.Click += (o, e) => + { + if (SelectedFriend == null) return; + + if (!SelectedFriend.Online) + { + GameScene.Scene.ChatDialog.ReceiveChat("Player is not online", ChatType.System); + return; + } + + GameScene.Scene.ChatDialog.ChatTextBox.SetFocus(); + GameScene.Scene.ChatDialog.ChatTextBox.Text = "/" + SelectedFriend.Name + " "; + GameScene.Scene.ChatDialog.ChatTextBox.Visible = true; + GameScene.Scene.ChatDialog.ChatTextBox.TextBox.SelectionLength = 0; + GameScene.Scene.ChatDialog.ChatTextBox.TextBox.SelectionStart = GameScene.Scene.ChatDialog.ChatTextBox.Text.Length; + }; + #endregion + } + + private void UpdateDisplay() + { + if (!Visible) return; + + if (_blockedTab != _tempBlockedTab) + { + _blockedTab = _tempBlockedTab; + + if (_blockedTab) + { + FriendLabel.Index = 164; + BlacklistLabel.Index = 166; + } + else + { + FriendLabel.Index = 163; + BlacklistLabel.Index = 167; + } + Update(); + GameScene.Scene.MemoDialog.Hide(); + GameScene.Scene.DisposeMemoLabel(); + } + } + + public void Update(bool clearSelection = true) + { + if (clearSelection) + SelectedFriend = null; + + for (int i = 0; i < Rows.Length; i++) + { + if (Rows[i] != null) Rows[i].Dispose(); + + Rows[i] = null; + } + + List filteredFriends = new List(); + + if (_blockedTab) + filteredFriends = Friends.Where(e => e.Blocked).ToList(); + else + filteredFriends = Friends.Where(e => !e.Blocked).ToList(); + + int maxPage = filteredFriends.Count / Rows.Length + 1; + if (maxPage < 1) maxPage = 1; + + PageNumberLabel.Text = (Page + 1) + " / " + maxPage; + + int maxIndex = filteredFriends.Count - 1; + + if (StartIndex > maxIndex) StartIndex = maxIndex; + if (StartIndex < 0) StartIndex = 0; + + for (int i = 0; i < Rows.Length; i++) + { + if (i + StartIndex >= filteredFriends.Count) break; + + if (Rows[i] != null) + Rows[i].Dispose(); + + Rows[i] = new FriendRow + { + Friend = filteredFriends[i + StartIndex], + Location = new Point((i % 2) * 115 + 16, 55 + ((i) / 2) * 22), + Parent = this, + }; + Rows[i].Click += (o, e) => + { + FriendRow row = (FriendRow)o; + + if (row.Friend != SelectedFriend) + { + SelectedFriend = row.Friend; + SelectedIndex = FindSelectedIndex(); + UpdateRows(); + } + }; + + if (SelectedFriend != null) + { + if (SelectedIndex == i) + { + SelectedFriend = Rows[i].Friend; + } + } + } + } + + public void UpdateRows() + { + if (SelectedFriend == null) + { + if (Rows[0] == null) return; + + SelectedFriend = Rows[0].Friend; + } + + for (int i = 0; i < Rows.Length; i++) + { + if (Rows[i] == null) continue; + + Rows[i].Selected = false; + + if (Rows[i].Friend == SelectedFriend) + { + Rows[i].Selected = true; + } + + Rows[i].UpdateInterface(); + } + } + + public int FindSelectedIndex() + { + int selectedIndex = 0; + if (SelectedFriend != null) + { + for (int i = 0; i < Rows.Length; i++) + { + if (Rows[i] == null || SelectedFriend != Rows[i].Friend) continue; + + selectedIndex = i; + } + } + + return selectedIndex; + } + + public override void Hide() + { + if (!Visible) return; + Visible = false; + + GameScene.Scene.MemoDialog.Hide(); + } + public override void Show() + { + if (Visible) return; + Visible = true; + UpdateDisplay(); + Network.Enqueue(new C.RefreshFriends()); + } + } + public sealed class FriendRow : MirControl + { + public ClientFriend Friend; + public MirLabel NameLabel, OnlineLabel; + + public bool Selected = false; + + public FriendRow() + { + Sound = SoundList.ButtonA; + Size = new Size(115, 17); + + BeforeDraw += FriendRow_BeforeDraw; + + NameLabel = new MirLabel + { + Location = new Point(0, 0), + Size = new Size(115, 17), + BackColour = Color.Empty, + DrawFormat = TextFormatFlags.VerticalCenter, + Parent = this, + NotControl = true, + }; + + UpdateInterface(); + } + + void FriendRow_BeforeDraw(object sender, EventArgs e) + { + UpdateInterface(); + } + + public void UpdateInterface() + { + if (Friend == null) return; + + NameLabel.Text = Friend.Name; + + if (Friend.Online) + { + NameLabel.ForeColour = Color.Green; + } + else + { + NameLabel.ForeColour = Color.White; + } + + if (Selected) + { + NameLabel.BackColour = Color.Gray; + } + else + { + NameLabel.BackColour = Color.Empty; + } + } + + + protected override void OnMouseEnter() + { + if (Friend == null || Friend.Memo.Length < 1) return; + + base.OnMouseEnter(); + GameScene.Scene.CreateMemoLabel(Friend); + } + protected override void OnMouseLeave() + { + base.OnMouseLeave(); + GameScene.Scene.DisposeMemoLabel(); + } + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + + Friend = null; + NameLabel = null; + + Selected = false; + } + } + public sealed class MemoDialog : MirImageControl + { + //public MirImageControl TitleLabel; + public MirTextBox MemoTextBox; + public MirButton CloseButton, OKButton, CancelButton; + + public ClientFriend Friend; + + public MemoDialog() + { + Index = 209; + Library = Libraries.Prguse; + Movable = true; + Sort = true; + Location = Center; + + MemoTextBox = new MirTextBox + { + ForeColour = Color.White, + Parent = this, + Font = new Font(Settings.FontName, 8F), + Location = new Point(15, 30), + Size = new Size(165, 100), + }; + MemoTextBox.MultiLine(); + + OKButton = new MirButton + { + Index = 382, + HoverIndex = 383, + PressedIndex = 384, + Parent = this, + Library = Libraries.Prguse, + Sound = SoundList.ButtonA, + Location = new Point(30, 133) + }; + OKButton.Click += (o, e) => + { + Network.Enqueue(new C.AddMemo { CharacterIndex = Friend.Index, Memo = MemoTextBox.Text }); + Hide(); + }; + + CancelButton = new MirButton + { + Index = 385, + HoverIndex = 386, + PressedIndex = 387, + Parent = this, + Library = Libraries.Prguse, + Sound = SoundList.ButtonA, + Location = new Point(115, 133) + }; + CancelButton.Click += (o, e) => Hide(); + + #region Buttons + + CloseButton = new MirButton + { + HoverIndex = 361, + Index = 360, + Location = new Point(168, 3), + Library = Libraries.Prguse2, + Parent = this, + PressedIndex = 362, + Sound = SoundList.ButtonA, + }; + CloseButton.Click += (o, e) => Hide(); + + #endregion + } + + public override void Show() + { + if (Visible) return; + Visible = true; + + + if (Friend == null) + { + Hide(); + return; + } + + MemoTextBox.Text = Friend.Memo; + MemoTextBox.SetFocus(); + MemoTextBox.TextBox.SelectionLength = 0; + MemoTextBox.TextBox.SelectionStart = MemoTextBox.Text.Length; + } + } +} diff --git a/Client/MirScenes/Dialogs/GameshopDialog.cs b/Client/MirScenes/Dialogs/GameshopDialog.cs new file mode 100644 index 0000000..e77142a --- /dev/null +++ b/Client/MirScenes/Dialogs/GameshopDialog.cs @@ -0,0 +1,763 @@ +using Client.MirControls; +using Client.MirGraphics; +using Client.MirSounds; + +namespace Client.MirScenes.Dialogs +{ + public sealed class GameShopDialog : MirImageControl + { + public GameShopViewer Viewer; + public MirLabel PageNumberLabel, totalGold, totalCredits; + public MirButton ALL, War, Sin, Tao, Wiz, Arch; + public MirButton allItems, topItems, Deals, New; + public MirButton CloseButton, PreviousButton, NextButton; + public MirButton UpButton, DownButton, PositionBar; + public MirCheckBox PaymentTypeGold, PaymentTypeCredit; + + + public GameShopCell[] Grid; + public MirLabel[] Filters = new MirLabel[22]; + List CategoryList = new List(); + List filteredShop = new List(); + List SearchResult = new List(); + public MirTextBox Search; + public MirImageControl TitleLabel, FilterBackground; + + public string ClassFilter = "Show All"; + public string TypeFilter = "Show All"; + public string SectionFilter = "Show All"; + + public int StartIndex = 0; + public int Page = 0; + public int CStartIndex = 0; + public decimal maxPage; + + public GameShopDialog() + { + GameScene.GameShopInfoList.Clear(); + Index = 749; + Library = Libraries.Prguse; + Movable = true; + Location = Center; + Sort = true; + + TitleLabel = new MirImageControl + { + Index = 26, + Library = Libraries.Prguse, + Location = new Point(18, 9), + Parent = this + }; + + Grid = new GameShopCell[4 * 2]; + for (int x = 0; x < 4; x++) + { + for (int y = 0; y < 2; y++) + { + int idx = 4 * y + x; + Grid[idx] = new GameShopCell + { + Size = new Size(125, 146), + Visible = true, + Parent = this, + }; + } + } + + CloseButton = new MirButton + { + HoverIndex = 361, + Index = 360, + Location = new Point(671, 4), + Library = Libraries.Prguse2, + Parent = this, + PressedIndex = 362, + Sound = SoundList.ButtonA, + }; + CloseButton.Click += (o, e) => Hide(); + + totalGold = new MirLabel + { + Size = new Size(100, 20), + DrawFormat = TextFormatFlags.RightToLeft | TextFormatFlags.Right, + + Location = new Point(123, 449), + Parent = this, + NotControl = true, + Font = new Font(Settings.FontName, 8F), + }; + totalCredits = new MirLabel + { + Size = new Size(100, 20), + DrawFormat = TextFormatFlags.RightToLeft | TextFormatFlags.Right, + Location = new Point(5, 449), + Parent = this, + NotControl = true, + Font = new Font(Settings.FontName, 8F) + }; + + UpButton = new MirButton + { + Index = 197, + HoverIndex = 198, + PressedIndex = 199, + Library = Libraries.Prguse2, + Parent = this, + Size = new Size(16, 14), + Location = new Point(120, 103), + Sound = SoundList.ButtonA, + Visible = true + }; + UpButton.Click += (o, e) => + { + if (CStartIndex <= 0) return; + + CStartIndex--; + + SetCategories(); + UpdatePositionBar(); + }; + + DownButton = new MirButton + { + Index = 207, + HoverIndex = 208, + Library = Libraries.Prguse2, + PressedIndex = 209, + Parent = this, + Size = new Size(16, 14), + Location = new Point(120, 421), + Sound = SoundList.ButtonA, + Visible = true + }; + DownButton.Click += (o, e) => + { + if (CStartIndex + 22 >= CategoryList.Count) return; + + CStartIndex++; + + SetCategories(); + UpdatePositionBar(); + }; + + PositionBar = new MirButton + { + Index = 205, + HoverIndex = 206, + PressedIndex = 206, + Library = Libraries.Prguse2, + Location = new Point(120, 117), + Parent = this, + Movable = true, + Sound = SoundList.None, + Visible = true + }; + PositionBar.OnMoving += PositionBar_OnMoving; + + + + + FilterBackground = new MirImageControl + { + Index = 769, + Library = Libraries.Prguse, + Location = new Point(11, 102), + Parent = this, + }; + FilterBackground.MouseWheel += FilterScrolling; + + Search = new MirTextBox + { + BackColour = Color.FromArgb(4, 4, 4), + ForeColour = Color.White, + Parent = this, + Size = new Size(140, 16), + Location = new Point(540, 69), + Font = new Font(Settings.FontName, 9F), + MaxLength = 23, + CanLoseFocus = true, + }; + Search.TextBox.KeyUp += (o, e) => + { + GetCategories(); + }; + + PaymentTypeGold = new MirCheckBox + { + LabelText = "Buy with Gold", + Location = new Point(250, 449), + Parent = this, + Hint = "Buy item(s) with Gold.", + Index = 2086, + UnTickedIndex = 2086, + TickedIndex = 2087, + Library = Libraries.Prguse, + Checked = true + }; + PaymentTypeGold.Click += PType_Clicked; + + PaymentTypeCredit = new MirCheckBox + { + LabelText = "Buy with Credits", + Location = new Point(340, 449), + Parent = this, + Hint = "Buy item(s) with Credits.", + Index = 2086, + UnTickedIndex = 2086, + TickedIndex = 2087, + Library = Libraries.Prguse + }; + PaymentTypeCredit.Click += PType_Clicked; + + allItems = new MirButton + { + Index = 770, + Library = Libraries.Prguse, + Location = new Point(138, 68), + Visible = true, + Parent = this, + Sound = SoundList.ButtonA, + + }; + allItems.Click += (o, e) => + { + SectionFilter = "Show All"; + ResetTabs(); + GetCategories(); + }; + topItems = new MirButton + { + Index = 776, + Library = Libraries.Prguse, + Location = new Point(209, 68), + Visible = true, + Parent = this, + Sound = SoundList.ButtonA, + }; + topItems.Click += (o, e) => + { + SectionFilter = "TopItems"; + ResetTabs(); + GetCategories(); + }; + Deals = new MirButton + { + Index = 772, + Library = Libraries.Prguse, + Location = new Point(280, 68), + Visible = true, + Parent = this, + Sound = SoundList.ButtonA, + }; + Deals.Click += (o, e) => + { + SectionFilter = "DealItems"; + ResetTabs(); + GetCategories(); + }; + New = new MirButton + { + Index = 774, + Library = Libraries.Prguse, + Location = new Point(351, 68), + Visible = false, + Parent = this, + Sound = SoundList.ButtonA, + }; + New.Click += (o, e) => + { + SectionFilter = "NewItems"; + ResetTabs(); + New.Index = 775; + GetCategories(); + }; + + + ALL = new MirButton + { + Index = 751, + HoverIndex = 752, + PressedIndex = 753, + Library = Libraries.Prguse, + Location = new Point(539, 37), + Visible = true, + Parent = this, + }; + ALL.Click += (o, e) => + { + ClassFilter = "Show All"; + TypeFilter = "Show All"; + GetCategories(); + ResetClass(); + }; + War = new MirButton + { + Index = 754, + HoverIndex = 755, + PressedIndex = 756, + Library = Libraries.Prguse, + Location = new Point(568, 38), + Visible = true, + Parent = this, + }; + War.Click += (o, e) => + { + ClassFilter = "Warrior"; + TypeFilter = "Show All"; + GetCategories(); + ResetClass(); + }; + Sin = new MirButton + { + Index = 757, + HoverIndex = 758, + PressedIndex = 759, + Library = Libraries.Prguse, + Location = new Point(591, 38), + Visible = true, + Parent = this, + }; + Sin.Click += (o, e) => + { + ClassFilter = "Assassin"; + TypeFilter = "Show All"; + GetCategories(); + ResetClass(); + }; + Tao = new MirButton + { + Index = 760, + HoverIndex = 761, + PressedIndex = 762, + Library = Libraries.Prguse, + Location = new Point(614, 38), + Visible = true, + Parent = this, + }; + Tao.Click += (o, e) => + { + ClassFilter = "Taoist"; + TypeFilter = "Show All"; + GetCategories(); + ResetClass(); + }; + Wiz = new MirButton + { + Index = 763, + HoverIndex = 764, + PressedIndex = 765, + Library = Libraries.Prguse, + Location = new Point(637, 38), + Visible = true, + Parent = this, + }; + Wiz.Click += (o, e) => + { + ClassFilter = "Wizard"; + TypeFilter = "Show All"; + GetCategories(); + ResetClass(); + }; + Arch = new MirButton + { + Index = 766, + HoverIndex = 767, + PressedIndex = 768, + Library = Libraries.Prguse, + Location = new Point(660, 38), + Visible = true, + Parent = this, + }; + Arch.Click += (o, e) => + { + ClassFilter = "Archer"; + TypeFilter = "Show All"; + GetCategories(); + ResetClass(); + }; + + PageNumberLabel = new MirLabel + { + Text = "", + Parent = this, + Size = new Size(83, 17), + Location = new Point(597, 446), + DrawFormat = TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter, + Font = new Font(Settings.FontName, 7F), + }; + + PreviousButton = new MirButton + { + Index = 240, + HoverIndex = 241, + PressedIndex = 242, + Library = Libraries.Prguse2, + Parent = this, + Location = new Point(600, 448), + Sound = SoundList.ButtonA, + }; + PreviousButton.Click += (o, e) => + { + Page--; + if (Page < 0) Page = 0; + StartIndex = Grid.Length * Page; + + UpdateShop(); + }; + + NextButton = new MirButton + { + Index = 243, + HoverIndex = 244, + PressedIndex = 245, + Library = Libraries.Prguse2, + Parent = this, + Location = new Point(660, 448), + Sound = SoundList.ButtonA, + }; + NextButton.Click += (o, e) => + { + Page++; + if ((Page + 1) > maxPage) Page--; + StartIndex = Grid.Length * Page; + UpdateShop(); + }; + + for (int i = 0; i < Filters.Length; i++) + { + Filters[i] = new MirLabel + { + Parent = this, + Size = new Size(90, 20), + Location = new Point(15, 103 + (15 * i)), + Text = "Testing - " + i.ToString(), + ForeColour = Color.Gray, + Font = new Font(Settings.FontName, 7F), + }; + Filters[i].Click += (o, e) => + { + MirLabel lab = (MirLabel)o; + TypeFilter = lab.Text; + Page = 0; + StartIndex = 0; + UpdateShop(); + for (int p = 0; p < Filters.Length; p++) + { + if (Filters[p].Text == lab.Text) Filters[p].ForeColour = Color.FromArgb(230, 200, 160); + else Filters[p].ForeColour = Color.Gray; + } + + }; + Filters[i].MouseEnter += (o, e) => + { + MirLabel lab = (MirLabel)o; + for (int p = 0; p < Filters.Length; p++) + { + if (Filters[p].Text == lab.Text && Filters[p].ForeColour != Color.FromArgb(230, 200, 160)) Filters[p].ForeColour = Color.FromArgb(160, 140, 110); + } + }; + Filters[i].MouseLeave += (o, e) => + { + MirLabel lab = (MirLabel)o; + for (int p = 0; p < Filters.Length; p++) + { + if (Filters[p].Text == lab.Text && Filters[p].ForeColour != Color.FromArgb(230, 200, 160)) Filters[p].ForeColour = Color.Gray; + } + }; + Filters[i].MouseWheel += FilterScrolling; + } + + Viewer = new GameShopViewer(); + + } + + private void PType_Clicked(object sender, EventArgs e) + { + if (sender == PaymentTypeCredit) + RefreshPayType(0); + else if (sender == PaymentTypeGold) + RefreshPayType(1); + } + + private void RefreshPayType(int idx) + { + switch (idx) + { + case 0: // Credits + PaymentTypeCredit.Checked = true; + PaymentTypeGold.Checked = false; + break; + case 1: // Gold + PaymentTypeGold.Checked = true; + PaymentTypeCredit.Checked = false; + break; + } + } + + + public override void Hide() + { + if (!Visible) return; + Viewer.Visible = false; + Visible = false; + } + public override void Show() + { + if (Visible) return; + Visible = true; + ClassFilter = GameScene.User.Class.ToString(); + SectionFilter = "Show All"; + ResetTabs(); + ResetClass(); + GetCategories(); + } + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + + Search.Dispose(); + Search = null; + + PageNumberLabel = null; + totalGold = null; + totalCredits = null; + ALL = null; + War = null; + Sin = null; + Tao = null; + Wiz = null; + Arch = null; + allItems = null; + topItems = null; + Deals = null; + New = null; + + CloseButton = null; + PreviousButton = null; + NextButton = null; + + UpButton = null; + DownButton = null; + PositionBar = null; + + Grid = null; + Filters = null; + FilterBackground = null; + + Viewer.Dispose(); + + CategoryList.Clear(); + filteredShop.Clear(); + SearchResult.Clear(); + } + + public void Process() + { + totalCredits.Text = GameScene.Credit.ToString("###,###,##0"); + totalGold.Text = GameScene.Gold.ToString("###,###,##0"); + } + + + public void FilterScrolling(object sender, MouseEventArgs e) + { + int count = e.Delta / SystemInformation.MouseWheelScrollDelta; + + if (CStartIndex == 0 && count >= 0) return; + if (CStartIndex == CategoryList.Count - 1 && count <= 0) return; + if (CategoryList.Count <= 22) return; + + CStartIndex -= count; + + if (CStartIndex < 0) CStartIndex = 0; + if (CStartIndex + 22 > CategoryList.Count - 1) CStartIndex = CategoryList.Count - 22; + + SetCategories(); + + UpdatePositionBar(); + + } + + private void UpdatePositionBar() + { + if (CategoryList.Count <= 22) return; + + int interval = 290 / (CategoryList.Count - 22); + + int x = 120; + int y = 117 + (CStartIndex * interval); + + if (y >= 401) y = 401; + if (y <= 117) y = 117; + + PositionBar.Location = new Point(x, y); + } + + void PositionBar_OnMoving(object sender, MouseEventArgs e) + { + int x = 120; + int y = PositionBar.Location.Y; + + if (y >= 401) y = 401; + if (y <= 117) y = 117; + + if (CategoryList.Count > 22) + { + int location = y - 117; + int interval = 284 / (CategoryList.Count - 22); + + double yPoint = location / interval; + + CStartIndex = Convert.ToInt16(Math.Floor(yPoint)); + SetCategories(); + } + + PositionBar.Location = new Point(x, y); + } + + public void ResetTabs() + { + allItems.Index = 770; + topItems.Index = 776; + Deals.Index = 772; + New.Index = 774; + + if (SectionFilter == "Show All") allItems.Index = 771; + if (SectionFilter == "TopItems") topItems.Index = 777; + if (SectionFilter == "DealItems") Deals.Index = 773; + if (SectionFilter == "NewItems") New.Index = 775; + } + + public void ResetClass() + { + ALL.Index = 751; + War.Index = 754; + Sin.Index = 757; + Tao.Index = 760; + Wiz.Index = 763; + Arch.Index = 766; + + if (ClassFilter == "Show All") ALL.Index = 752; + if (ClassFilter == "Warrior") War.Index = 755; + if (ClassFilter == "Assassin") Sin.Index = 758; + if (ClassFilter == "Taoist") Tao.Index = 761; + if (ClassFilter == "Wizard") Wiz.Index = 764; + if (ClassFilter == "Archer") Arch.Index = 767; + } + + public void GetCategories() + { + TypeFilter = "Show All"; + Page = 0; + StartIndex = 0; + List shopList; + + if (Search.TextBox.Text != "") + shopList = GameScene.GameShopInfoList.Where(f => f.Info.FriendlyName.ToLower().Contains(Search.TextBox.Text.ToLower())).ToList(); + else + shopList = GameScene.GameShopInfoList; + + CategoryList.Clear(); + PositionBar.Location = new Point(120, 117); + CategoryList.Add("Show All"); + + for (int i = 0; i < shopList.Count; i++) + { + if (!CategoryList.Contains(shopList[i].Category) && shopList[i].Category != "") + { + if (shopList[i].Class == ClassFilter || shopList[i].Class == "All" || ClassFilter == "Show All") + { + if (SectionFilter == "Show All" || SectionFilter == "TopItems" && shopList[i].TopItem || SectionFilter == "DealItems" && shopList[i].Deal || SectionFilter == "NewItems" && shopList[i].Date > CMain.Now.AddDays(-7)) + CategoryList.Add(shopList[i].Category); + } + + } + } + Filters[0].ForeColour = Color.FromArgb(230, 200, 160); + CStartIndex = 0; + SetCategories(); + UpdateShop(); + } + + public void SetCategories() + { + for (int i = 0; i < Filters.Length; i++) + { + if (i < CategoryList.Count) + { + Filters[i].Text = CategoryList[i + CStartIndex]; + Filters[i].ForeColour = Filters[i].Text == TypeFilter ? Color.FromArgb(230, 200, 160) : Color.Gray; + Filters[i].NotControl = false; + } + else + { + Filters[i].Text = ""; + Filters[i].NotControl = true; + } + } + + } + public void UpdateShop() + { + List ShopList; + + if (Search.TextBox.Text != "") + ShopList = GameScene.GameShopInfoList.Where(f => f.Info.FriendlyName.ToLower().Contains(Search.TextBox.Text.ToLower())).ToList(); + else + ShopList = GameScene.GameShopInfoList; + + for (int i = 0; i < Grid.Length; i++) + { + if (Grid[i] != null) Grid[i].Dispose(); + Grid[i].Item = null; + }; + + + filteredShop.Clear(); + + for (int i = 0; i < ShopList.Count; i++) + { + if (ShopList[i].Class == ClassFilter || ShopList[i].Class == "All" || ClassFilter == "Show All") + if (ShopList[i].Category == TypeFilter || TypeFilter == "Show All") + { + if (SectionFilter == "Show All" || SectionFilter == "TopItems" && ShopList[i].TopItem || SectionFilter == "DealItems" && ShopList[i].Deal || SectionFilter == "NewItems" && ShopList[i].Date > CMain.Now.AddDays(-7)) + filteredShop.Add(ShopList[i]); + } + } + + + maxPage = ((decimal)filteredShop.Count / 8); + maxPage = Math.Ceiling(maxPage); + if (maxPage < 1) maxPage = 1; + + PageNumberLabel.Text = (Page + 1) + " / " + maxPage; + + int maxIndex = filteredShop.Count - 1; + + if (StartIndex > maxIndex) StartIndex = maxIndex; + if (StartIndex < 0) StartIndex = 0; + + filteredShop = filteredShop.OrderBy(e => e.Info.FriendlyName).ToList(); + + for (int i = 0; i < Grid.Length; i++) + { + if (i + StartIndex >= filteredShop.Count) break; + + if (Grid[i] != null) Grid[i].Dispose(); + + Grid[i] = new GameShopCell + { + Visible = true, + Item = filteredShop[i + StartIndex], + Size = new Size(125, 146), + Location = i < 4 ? new Point(152 + (i * 132), 115) : new Point(152 + ((i - 4) * 132), 275), + Parent = this, + }; + } + + GameScene.Scene.GameShopDialog.Viewer.Visible = false; + + } + + } +} diff --git a/Client/MirScenes/Dialogs/GroupDialog.cs b/Client/MirScenes/Dialogs/GroupDialog.cs new file mode 100644 index 0000000..5c22de0 --- /dev/null +++ b/Client/MirScenes/Dialogs/GroupDialog.cs @@ -0,0 +1,240 @@ +using Client.MirControls; +using Client.MirGraphics; +using Client.MirNetwork; +using Client.MirObjects; +using Client.MirSounds; +using C = ClientPackets; + +namespace Client.MirScenes.Dialogs +{ + public sealed class GroupDialog : MirImageControl + { + public static bool AllowGroup; + public static List GroupList = new List(); + public static Dictionary GroupMembersMap = new Dictionary(); + + public MirImageControl TitleLabel; + public MirButton SwitchButton, CloseButton, AddButton, DelButton; + public MirLabel[] GroupMembers; + + public GroupDialog() + { + Index = 120; + Library = Libraries.Prguse; + Movable = true; + Sort = true; + Location = Center; + + GroupMembers = new MirLabel[Globals.MaxGroup]; + + GroupMembers[0] = new MirLabel + { + AutoSize = true, + Location = new Point(16, 33), + Parent = this, + NotControl = false, + }; + + for (int i = 1; i < GroupMembers.Length; i++) + { + GroupMembers[i] = new MirLabel + { + AutoSize = true, + Location = new Point(((i + 1) % 2) * 100 + 16, 55 + ((i - 1) / 2) * 20), + Parent = this, + NotControl = false, + }; + } + + TitleLabel = new MirImageControl + { + Index = 5, + Library = Libraries.Prguse, + Location = new Point(18, 8), + Parent = this + }; + + CloseButton = new MirButton + { + HoverIndex = 361, + Index = 360, + Location = new Point(206, 3), + Library = Libraries.Prguse2, + Parent = this, + PressedIndex = 362, + Sound = SoundList.ButtonA, + }; + CloseButton.Click += (o, e) => Hide(); + + SwitchButton = new MirButton + { + HoverIndex = 115, + Index = 114, + Location = new Point(25, 219), + Library = Libraries.Prguse, + Parent = this, + PressedIndex = 116, + Sound = SoundList.ButtonA, + Hint = GameLanguage.GroupSwitch + }; + SwitchButton.Click += (o, e) => Network.Enqueue(new C.SwitchGroup { AllowGroup = !AllowGroup }); + + AddButton = new MirButton + { + HoverIndex = 134, + Index = 133, + Location = new Point(70, 219), + Library = Libraries.Prguse, + Parent = this, + PressedIndex = 135, + Sound = SoundList.ButtonA, + Hint = GameLanguage.GroupAdd + }; + AddButton.Click += (o, e) => AddMember(); + + DelButton = new MirButton + { + HoverIndex = 137, + Index = 136, + Location = new Point(140, 219), + Library = Libraries.Prguse, + Parent = this, + PressedIndex = 138, + Sound = SoundList.ButtonA, + Hint = GameLanguage.GroupRemove + }; + DelButton.Click += (o, e) => DelMember(); + + BeforeDraw += GroupPanel_BeforeDraw; + + GroupList.Clear(); + } + + private void GroupPanel_BeforeDraw(object sender, EventArgs e) + { + if (GroupList.Count == 0) + { + AddButton.Index = 130; + AddButton.HoverIndex = 131; + AddButton.PressedIndex = 132; + } + else + { + AddButton.Index = 133; + AddButton.HoverIndex = 134; + AddButton.PressedIndex = 135; + } + if (GroupList.Count > 0 && GroupList[0] != MapObject.User.Name) + { + AddButton.Visible = false; + DelButton.Visible = false; + } + else + { + AddButton.Visible = true; + DelButton.Visible = true; + } + + if (AllowGroup) + { + SwitchButton.Index = 117; + SwitchButton.HoverIndex = 118; + SwitchButton.PressedIndex = 119; + } + else + { + SwitchButton.Index = 114; + SwitchButton.HoverIndex = 115; + SwitchButton.PressedIndex = 116; + } + + for (int i = 0; i < GroupMembers.Length; i++) + GroupMembers[i].Text = i >= GroupList.Count ? string.Empty : GroupList[i]; + + foreach (var player in GroupMembersMap) + { + for (int i = 0; i < GroupMembers.Length; i++) + { + string playersName = GroupMembers[i].Text; + + if (player.Key == playersName) + GroupMembers[i].Hint = player.Value; + } + } + + + } + + public void AddMember(string name) + { + if (GroupList.Count >= Globals.MaxGroup) + { + GameScene.Scene.ChatDialog.ReceiveChat("Your group already has the maximum number of members.", ChatType.System); + return; + } + if (GroupList.Count > 0 && GroupList[0] != MapObject.User.Name) + { + GameScene.Scene.ChatDialog.ReceiveChat("You are not the leader of your group.", ChatType.System); + return; + } + + Network.Enqueue(new C.AddMember { Name = name }); + } + + private bool Checks() + { + if (GroupList.Count >= Globals.MaxGroup) + { + GameScene.Scene.ChatDialog.ReceiveChat("Your group already has the maximum number of members.", ChatType.System); + return false; + } + if (GroupList.Count > 0 && GroupList[0] != MapObject.User.Name) + { + + GameScene.Scene.ChatDialog.ReceiveChat("You are not the leader of your group.", ChatType.System); + return false; + } + + return true; + } + + private void AddMember() + { + if (!Checks()) return; + + MirInputBox inputBox = new MirInputBox(GameLanguage.GroupAddEnterName); + + inputBox.OKButton.Click += (o, e) => + { + ConfirmAddMember(inputBox.InputTextBox.Text); + inputBox.Dispose(); + }; + inputBox.Show(); + } + + public void ConfirmAddMember(string name) + { + if (!Checks()) return; + Network.Enqueue(new C.AddMember { Name = name}); + } + + private void DelMember() + { + if (GroupList.Count > 0 && GroupList[0] != MapObject.User.Name) + { + + GameScene.Scene.ChatDialog.ReceiveChat("You are not the leader of your group.", ChatType.System); + return; + } + + MirInputBox inputBox = new MirInputBox(GameLanguage.GroupRemoveEnterName); + + inputBox.OKButton.Click += (o, e) => + { + Network.Enqueue(new C.DelMember { Name = inputBox.InputTextBox.Text }); + inputBox.Dispose(); + }; + inputBox.Show(); + } + } +} diff --git a/Client/MirScenes/Dialogs/GuildDialog.cs b/Client/MirScenes/Dialogs/GuildDialog.cs new file mode 100644 index 0000000..ad81121 --- /dev/null +++ b/Client/MirScenes/Dialogs/GuildDialog.cs @@ -0,0 +1,2232 @@ +using Client.MirControls; +using Client.MirGraphics; +using Client.MirNetwork; +using Client.MirObjects; +using Client.MirSounds; +using Font = System.Drawing.Font; +using C = ClientPackets; + +namespace Client.MirScenes.Dialogs +{ + + public sealed class GuildDialog : MirImageControl + { + #region NoticeBase + public MirLabel GuildName; + public MirButton CloseButton; + #endregion + + #region GuildLeft + public MirButton NoticeButton, MembersButton, StorageButton, RankButton; + public MirImageControl NoticePage, MembersPage, StoragePage, RankPage; + public MirImageControl StoragePageBase, MembersPageBase; + public MirImageControl TitleLabel; + #endregion + + #region GuildRight + public MirButton BuffButton, StatusButton; + public MirImageControl BuffPage, StatusPage, StatusPageBase; + + public GuildBuffButton[] Buffs; + private bool RequestedList = false; + public List GuildBuffInfos = new List(); + public List EnabledBuffs = new List(); + public int StartIndex = 0; + private long LastRequest = 0; + + public string ActiveStats = ""; + #endregion + + #region DataValues + public byte Level; + public long Experience; + public long MaxExperience; + public uint Gold; + public byte SparePoints; + public int MemberCount; + public int MaxMembers; + public bool Voting; + public byte ItemCount; + public byte BuffCount; + public static int MyRankId; + public static GuildRankOptions MyOptions; + public List Ranks = new List(); + public bool MembersChanged = true; + public long LastMemberRequest = 0; + public long LastGuildMsg = 0; + public long LastRankNameChange = 0; + public GuildRankOptions GetMyOptions() + { + return MyOptions; + } + #endregion + + #region NoticePagePub + public bool NoticeChanged = true; + public long LastNoticeRequest = 0; + public int NoticeScrollIndex = 0; + public MirButton NoticeUpButton, NoticeDownButton, NoticePositionBar, NoticeEditButton, NoticeSaveButton; + public MirTextBox Notice; + #endregion + + #region MembersPagePub + public int MemberScrollIndex = 0, MembersShowCount = 1; + public MirButton MembersUpButton, MembersDownButton, MembersPositionBar; + public MirLabel MembersHeaderRank, MembersHeaderName, MembersHeaderStatus, MembersShowOffline; + public MirButton MembersShowOfflineButton; + public MirImageControl MembersShowOfflineStatus; + public MirDropDownBox[] MembersRanks; + public MirLabel[] MembersName, MembersStatus; + public MirButton[] MembersDelete; + public int MemberPageRows = 18; + public bool MembersShowOfflinesetting = true; + #endregion + + #region StatusPagePub + public MirLabel StatusLevelLabel; + public MirLabel StatusHeaders; + public MirLabel StatusGuildName, StatusLevel, StatusMembers; + public MirImageControl StatusExpBar; + public MirLabel StatusExpLabel, RecruitMemberLabel; + public MirTextBox MembersRecruitName; + public MirButton RecruitMemberButton; + #endregion + + #region StoragePagePub + public MirLabel StorageGoldText; + public MirButton StorageGoldAdd, StorageGoldRemove, StorageGoldIcon; + public MirItemCell[] StorageGrid; + public MirButton StorageUpButton, StorageDownButton, StoragePositionBar; + public int StorageIndex = 1; + #endregion + + #region RankPagePub + + public MirLabel RanksSelectTextR, RanksSelectTextL, PointsLeft; + public MirTextBox RanksName; + public MirImageControl[] RanksOptionsStatus; + public MirButton[] RanksOptionsButtons; + public MirLabel[] RanksOptionsTexts; + public MirDropDownBox RanksSelectBox; + public MirButton RanksSaveName, UpButton, DownButton, PositionBar; + #endregion + + #region BuffPagePub + #endregion + + #region GuildUI + public GuildDialog() + { + Index = 180; + Library = Libraries.Prguse; + Movable = true; + Sort = true; + Location = Center; + + BeforeDraw += (o, e) => RefreshInterface(); + + #region TabUI + + TitleLabel = new MirImageControl + { + Index = 25, + Library = Libraries.Prguse, + Location = new Point(18, 9), + Parent = this + }; + + NoticeButton = new MirButton + { + Library = Libraries.Prguse, + Index = 93, + PressedIndex = 94, + Sound = SoundList.ButtonA, + Parent = this, + Location = new Point(20, 38) + }; + NoticeButton.Click += (o, e) => LeftDialog(0); + MembersButton = new MirButton + { + Library = Libraries.Prguse, + Index = 99, + PressedIndex = 100, + Sound = SoundList.ButtonA, + Parent = this, + Location = new Point(91, 38), + }; + MembersButton.Click += (o, e) => LeftDialog(1); + StorageButton = new MirButton + { + Library = Libraries.Prguse, + Index = 105, + PressedIndex = 106, + Sound = SoundList.ButtonA, + Parent = this, + Location = new Point(162, 38), + Visible = false + }; + StorageButton.Click += (o, e) => LeftDialog(2); + RankButton = new MirButton // Ranks + { + Library = Libraries.Prguse, + Index = 101, + Sound = SoundList.ButtonA, + Parent = this, + Location = new Point(233, 38), + Visible = false, + }; + RankButton.Click += (o, e) => LeftDialog(3); + + StatusButton = new MirButton + { + Library = Libraries.Prguse, + Parent = this, + Index = 103, + Location = new Point(501, 38), + Sound = SoundList.ButtonA, + }; + StatusButton.Click += (o, e) => RightDialog(0); + + BuffButton = new MirButton + { + Library = Libraries.Prguse, + Parent = this, + Index = 95, + Location = new Point(430, 38), + Sound = SoundList.ButtonA, + Visible = false, + }; + BuffButton.Click += (o, e) => RightDialog(1); + + CloseButton = new MirButton + { + HoverIndex = 361, + Index = 360, + Location = new Point(565, 4), + Library = Libraries.Prguse2, + Parent = this, + PressedIndex = 362, + Sound = SoundList.ButtonA + }; + CloseButton.Click += (o, e) => Hide(); + #endregion + + #region NoticePageUI + NoticePage = new MirImageControl() + { + Parent = this, + Size = new Size(352, 372), + Location = new Point(0, 60), + Visible = true + }; + Notice = new MirTextBox() + { + ForeColour = Color.White, + Font = new Font(Settings.FontName, 8F), + Enabled = false, + Visible = true, + Parent = NoticePage, + Size = new Size(322, 330), + Location = new Point(13, 1) + }; + Notice.MultiLine(); + + NoticeEditButton = new MirButton + { + Visible = false, + Index = 560, + HoverIndex = 561, + PressedIndex = 562, + Library = Libraries.Prguse, + Sound = SoundList.ButtonA, + Parent = NoticePage, + Location = new Point(20, 342) + }; + NoticeEditButton.Click += (o, e) => EditNotice(); + + NoticeSaveButton = new MirButton + { + Visible = false, + Index = 554, + HoverIndex = 555, + PressedIndex = 556, + Library = Libraries.Prguse, + Sound = SoundList.ButtonA, + Parent = NoticePage, + Location = new Point(20, 342) + }; + NoticeSaveButton.Click += (o, e) => EditNotice(); + + NoticeUpButton = new MirButton + { + HoverIndex = 198, + Index = 197, + Visible = true, + Library = Libraries.Prguse2, + Location = new Point(337, 1), + Size = new Size(16, 14), + Parent = NoticePage, + PressedIndex = 199, + Sound = SoundList.ButtonA + }; + NoticeUpButton.Click += (o, e) => + { + if (NoticeScrollIndex == 0) return; + NoticeScrollIndex--; + UpdateNotice(); + UpdateNoticeScrollPosition(); + }; + + NoticeDownButton = new MirButton + { + HoverIndex = 208, + Index = 207, + Visible = true, + Library = Libraries.Prguse2, + Location = new Point(337, 318), + Size = new Size(16, 14), + Parent = NoticePage, + PressedIndex = 209, + Sound = SoundList.ButtonA + }; + NoticeDownButton.Click += (o, e) => + { + if (NoticeScrollIndex == Notice.MultiText.Length - 1) return; + if (NoticeScrollIndex >= Notice.MultiText.Length - 25) NoticeScrollIndex--; + NoticeScrollIndex++; + UpdateNotice(true); + UpdateNoticeScrollPosition(); + }; + + NoticePositionBar = new MirButton + { + Index = 206, + Library = Libraries.Prguse2, + Location = new Point(337, 16), + Parent = NoticePage, + Movable = true, + Visible = true, + Sound = SoundList.None + }; + NoticePositionBar.OnMoving += NoticePositionBar_OnMoving; + + NoticePage.KeyDown += NoticePanel_KeyDown; + NoticePage.MouseWheel += NoticePanel_MouseWheel; + #endregion + + #region MembersPageUI + MembersPage = new MirImageControl() + { + Parent = this, + Size = new Size(352, 372), + Location = new Point(0, 60), + Visible = false + }; + MembersPageBase = new MirImageControl() + { + Library = Libraries.Prguse, + Index = 1852, + Parent = MembersPage, + Location = new Point(13, 1), + Visible = true + }; + MembersPageBase.MouseWheel += MembersPanel_MouseWheel; + MembersPage.BeforeDraw += (o, e) => RequestUpdateMembers(); + MembersRanks = new MirDropDownBox[MemberPageRows]; + MembersName = new MirLabel[MemberPageRows]; + MembersStatus = new MirLabel[MemberPageRows]; + MembersDelete = new MirButton[MemberPageRows]; + + for (int i = MembersRanks.Length - 1; i >= 0; i--) + { + int index = i; + MembersRanks[i] = new MirDropDownBox() + { + BackColour = i % 2 == 0 ? Color.FromArgb(255, 10, 10, 10) : Color.FromArgb(255, 15, 15, 15), + ForeColour = Color.White, + Parent = MembersPage, + Size = new Size(100, 14), + Location = new Point(24, 30 + (i * 15)), + Visible = false, + Enabled = false + }; + MembersRanks[index].ValueChanged += (o, e) => OnNewRank(index, MembersRanks[index]._WantedIndex); + MembersRanks[index].MouseWheel += MembersPanel_MouseWheel; + } + for (int i = 0; i < MembersName.Length; i++) + { + MembersName[i] = new MirLabel() + { + BackColour = i % 2 == 0 ? Color.FromArgb(255, 05, 05, 05) : Color.FromArgb(255, 07, 07, 07), + ForeColour = Color.White, + Parent = MembersPage, + Size = new Size(100, 14), + Location = new Point(125, 30 + (i * 15)), + Visible = false, + Enabled = false, + Font = new Font(Settings.FontName, 7F) + + }; + MembersName[i].MouseWheel += MembersPanel_MouseWheel; + } + for (int i = 0; i < MembersStatus.Length; i++) + { + MembersStatus[i] = new MirLabel() + { + BackColour = i % 2 == 0 ? Color.FromArgb(255, 10, 10, 10) : Color.FromArgb(255, 15, 15, 15), + ForeColour = Color.White, + Parent = MembersPage, + Size = new Size(100, 14), + Location = new Point(225, 30 + (i * 15)), + Visible = false, + Enabled = false, + Font = new Font(Settings.FontName, 7F) + }; + MembersStatus[i].MouseWheel += MembersPanel_MouseWheel; + } + for (int i = 0; i < MembersDelete.Length; i++) + { + int index = i; + MembersDelete[i] = new MirButton() + { + Enabled = true, + Visible = true, + Location = new Point(210, 30 + (i * 15)), + Library = Libraries.Prguse, + Index = 917, + Parent = MembersPage + }; + MembersDelete[index].MouseWheel += MembersPanel_MouseWheel; + MembersDelete[index].Click += (o, e) => DeleteMember(index); + } + MembersUpButton = new MirButton + { + HoverIndex = 198, + Index = 197, + Visible = true, + Library = Libraries.Prguse2, + Location = new Point(337, 1), + Size = new Size(16, 14), + Parent = MembersPage, + PressedIndex = 199, + Sound = SoundList.ButtonA + }; + MembersUpButton.Click += (o, e) => + { + if (MemberScrollIndex == 0) return; + MemberScrollIndex--; + UpdateMembers(); + UpdateMembersScrollPosition(); + }; + MembersDownButton = new MirButton + { + HoverIndex = 208, + Index = 207, + Visible = true, + Library = Libraries.Prguse2, + Location = new Point(337, 318), + Size = new Size(16, 14), + Parent = MembersPage, + PressedIndex = 209, + Sound = SoundList.ButtonA + }; + MembersDownButton.Click += (o, e) => + { + if (MemberScrollIndex == MembersShowCount - MemberPageRows) return; + MemberScrollIndex++; + UpdateMembers(); + UpdateMembersScrollPosition(); + }; + + MembersPositionBar = new MirButton + { + Index = 206, + Library = Libraries.Prguse2, + Location = new Point(337, 16), + Parent = MembersPage, + Movable = true, + Sound = SoundList.None + }; + MembersPositionBar.OnMoving += MembersPositionBar_OnMoving; + + MembersShowOfflineButton = new MirButton + { + Visible = true, + Index = 1346, + Library = Libraries.Prguse, + Sound = SoundList.ButtonA, + Parent = MembersPage, + Location = new Point(230, 310) + }; + MembersShowOfflineButton.Click += (o, e) => MembersShowOfflineSwitch(); + + MembersShowOfflineStatus = new MirImageControl + { + Visible = true, + Index = 1347, + Library = Libraries.Prguse, + Parent = MembersPage, + Location = new Point(230, 310) + }; + MembersShowOfflineStatus.Click += (o, e) => MembersShowOfflineSwitch(); + + MembersShowOffline = new MirLabel + { + Visible = true, + Text = "Show Offline", + Location = new Point(245, 309), + Parent = MembersPage, + Size = new Size(150, 12), + Font = new Font(Settings.FontName, 7F), + ForeColour = Color.White + }; + MembersPage.KeyDown += MembersPanel_KeyDown; + MembersPage.MouseWheel += MembersPanel_MouseWheel; + + #endregion + + #region StatusDialogUI + StatusPage = new MirImageControl() + { + Parent = this, + Size = new Size(230, 372), + Location = new Point(355, 60), + Visible = true + }; + StatusPageBase = new MirImageControl() + { + Parent = StatusPage, + Library = Libraries.Prguse, + Index = 1850, + Visible = true, + Location = new Point(10, 2) + }; + StatusPage.BeforeDraw += (o, e) => + { + if (MapControl.User.GuildName == "") + { + StatusGuildName.Text = ""; + StatusLevel.Text = ""; + StatusMembers.Text = ""; + } + else + { + StatusGuildName.Text = string.Format("{0}", MapObject.User.GuildName); + StatusLevel.Text = string.Format("{0}", Level); + StatusMembers.Text = string.Format("{0}{1}", MemberCount, MaxMembers == 0 ? "" : ("/" + MaxMembers.ToString())); + } + }; + StatusHeaders = new MirLabel() + { + Location = new Point(7, 47), + DrawFormat = TextFormatFlags.Right, + Size = new Size(75, 300), + NotControl = true, + Text = "Guild Name\n\nLevel\n\nMembers", + Visible = true, + Parent = StatusPage, + ForeColour = Color.Gray, + }; + StatusGuildName = new MirLabel() + { + Location = new Point(82, 47), + Size = new Size(120, 200), + NotControl = true, + Text = "", + Visible = true, + Parent = StatusPage + }; + StatusLevel = new MirLabel() + { + Location = new Point(82, 73), + Size = new Size(120, 200), + NotControl = true, + Text = "", + Visible = true, + Parent = StatusPage + }; + StatusMembers = new MirLabel() + { + Location = new Point(82, 99), + Size = new Size(120, 200), + NotControl = true, + Text = "", + Visible = true, + Parent = StatusPage + }; + StatusExpBar = new MirImageControl() + { + Visible = true, + Index = 423, + Library = Libraries.Prguse2, + Location = new Point(322, 403), + DrawImage = false, + NotControl = true, + Parent = this, + Size = new Size(260, 15) + }; + StatusExpBar.BeforeDraw += StatusExpBar_BeforeDraw; + StatusExpLabel = new MirLabel() + { + Visible = true, + DrawFormat = TextFormatFlags.VerticalCenter | TextFormatFlags.HorizontalCenter, + Location = new Point(322, 405), + NotControl = true, + Parent = this, + Size = new Size(260, 15) + }; + MembersRecruitName = new MirTextBox() + { + Location = new Point(40, 300), + Size = new Size(130, 21), + MaxLength = 20, + Parent = StatusPage, + Visible = true, + Text = "", + BackColour = Color.FromArgb(255, 25, 25, 25), + Border = true, + BorderColour = Color.FromArgb(255, 35, 35, 35), + CanLoseFocus = true + }; + RecruitMemberButton = new MirButton() + { + Parent = StatusPage, + Enabled = true, + Visible = true, + Location = new Point(170, 298), + Library = Libraries.Prguse, + Index = 356, + HoverIndex = 357, + PressedIndex = 358 + }; + RecruitMemberButton.Click += (o, e) => AddMember(); + + RecruitMemberLabel = new MirLabel() + { + Visible = true, + Location = new Point(36, 283), + NotControl = true, + Parent = StatusPage, + Text = "Recruit Member", + Size = new Size(150, 15) + }; + + #endregion + + #region StorageDialogUI + StoragePage = new MirImageControl() + { + Parent = this, + Size = new Size(352, 372), + Location = new Point(0, 60), + Visible = false + }; + StoragePageBase = new MirImageControl() + { + Visible = true, + Parent = StoragePage, + Library = Libraries.Prguse, + Index = 1851, + Location = new Point(30, 19) + }; + StoragePage.BeforeDraw += (o, e) => + { + StorageGoldText.Text = Gold > 0 ? string.Format("{0:###,###,###}", Gold) : "0"; + if (MyRankId == 0) + StorageGoldRemove.Visible = true; + else + StorageGoldRemove.Visible = false; + + }; + StorageGoldText = new MirLabel() + { + Parent = StoragePage, + Size = new Size(125, 12), + Location = new Point(194, 312), + Visible = true, + Text = "0", + NotControl = true, + }; + StorageGoldAdd = new MirButton() + { + Parent = StoragePage, + Library = Libraries.Prguse, + Index = 918, + Visible = true, + Enabled = true, + Location = new Point(158, 313) + }; + StorageGoldAdd.Click += (o, e) => StorageAddGold(); + + StorageGoldRemove = new MirButton() + { + Parent = StoragePage, + Library = Libraries.Prguse, + Index = 917, + Visible = true, + Enabled = true, + Location = new Point(142, 313) + }; + StorageGoldRemove.Click += (o, e) => StorageRemoveGold(); + + StorageGrid = new MirItemCell[8 * 14]; + { + for (int x = 0; x < 8; x++) + { + for (int y = 0; y < 14; y++) + { + int idx = 8 * y + x; + StorageGrid[idx] = new MirItemCell + { + ItemSlot = idx, + GridType = MirGridType.GuildStorage, + Library = Libraries.Items, + Parent = StoragePage, + Size = new Size(35, 35), + Location = new Point(x * 35 + 31 + x, y * 35 + 20 + y), + }; + if (y > 7) StorageGrid[idx].Visible = false; + StorageGrid[idx].MouseWheel += StoragePanel_MouseWheel; + } + } + } + + StorageUpButton = new MirButton + { + HoverIndex = 198, + Index = 197, + Visible = true, + Library = Libraries.Prguse2, + Location = new Point(337, 1), + Size = new Size(16, 14), + Parent = StoragePage, + PressedIndex = 199, + Sound = SoundList.ButtonA + }; + StorageUpButton.Click += (o, e) => + { + if (StorageIndex == 0) return; + StorageIndex--; + UpdateStorage(); + StorageUpdatePositionBar(); + }; + + StorageDownButton = new MirButton + { + HoverIndex = 208, + Index = 207, + Visible = true, + Library = Libraries.Prguse2, + Location = new Point(337, 318), + Size = new Size(16, 14), + Parent = StoragePage, + PressedIndex = 209, + Sound = SoundList.ButtonA + }; + StorageDownButton.Click += (o, e) => + { + if (StorageIndex >= 6) StorageIndex = 5; + StorageIndex++; + UpdateStorage(); + StorageUpdatePositionBar(); + }; + + StoragePositionBar = new MirButton + { + Index = 206, + Library = Libraries.Prguse2, + Location = new Point(337, 16), + Parent = StoragePage, + Movable = true, + Visible = true, + Sound = SoundList.None + }; + StoragePositionBar.OnMoving += StoragePositionBar_OnMoving; + + StoragePage.MouseWheel += StoragePanel_MouseWheel; + StoragePageBase.MouseWheel += StoragePanel_MouseWheel; + + #endregion + + #region RankDialogUI + RankPage = new MirImageControl() + { + Parent = this, + Size = new Size(352, 372), + Location = new Point(0, 60), + Visible = false + }; + RankPage.BeforeDraw += (o, e) => RequestUpdateMembers(); + RanksSelectTextL = new MirLabel() + { + Text = "Edit Rank", + Location = new Point(42, 18), + Size = new Size(150, 20), + ForeColour = Color.White, + Parent = RankPage, + NotControl = true, + + }; + RanksSelectTextR = new MirLabel() + { + Text = "Select Rank", + Location = new Point(198, 18), + Size = new Size(150, 20), + ForeColour = Color.White, + Parent = RankPage, + NotControl = true, + + }; + RanksSelectBox = new MirDropDownBox() + { + Parent = RankPage, + Location = new Point(198, 36), + Size = new Size(130, 16), + ForeColour = Color.White, + Visible = true, + Enabled = true, + BackColour = Color.FromArgb(255, 25, 25, 25), + BorderColour = Color.FromArgb(255, 35, 35, 35), + }; + RanksSelectBox.ValueChanged += (o, e) => OnRankSelect(RanksSelectBox._WantedIndex); + + RanksName = new MirTextBox() + { + Location = new Point(42, 36), + Size = new Size(130, 16), + MaxLength = 20, + Parent = RankPage, + Visible = true, + Enabled = false, + Text = "", + Border = true, + BackColour = Color.FromArgb(255, 25, 25, 25), + BorderColour = Color.FromArgb(255, 35, 35, 35), + }; + RanksName.BeforeDraw += (o, e) => RanksName_BeforeDraw(); + RanksName.TextBox.KeyPress += RanksName_KeyPress; + RanksSaveName = new MirButton() + { + Location = new Point(155, 290), + Enabled = false, + Visible = true, + Parent = RankPage, + Index = 90, + HoverIndex = 91, + PressedIndex = 92, + Library = Libraries.Prguse, + Sound = SoundList.ButtonA + }; + RanksSaveName.Click += (o, e) => + { + RanksChangeName(); + }; + String[] Options = { "Edit ranks", "Recruit member", "Kick member", "Store item", "Retrieve item", "Alter alliance", "Change notice", "Activate Buff" }; + RanksOptionsButtons = new MirButton[8]; + RanksOptionsStatus = new MirImageControl[8]; + RanksOptionsTexts = new MirLabel[8]; + for (int i = 0; i < RanksOptionsButtons.Length; i++) + { + RanksOptionsButtons[i] = new MirButton() + { + Visible = true, + Enabled = false, + Index = 1346, + Library = Libraries.Prguse, + Sound = SoundList.ButtonA, + Parent = RankPage, + Location = new Point(i % 2 == 0 ? 42 : 202, i % 2 == 0 ? 120 + (i * 20) : 120 + ((i - 1) * 20)) + }; + int index = i; + RanksOptionsButtons[i].Click += (o, e) => SwitchRankOption(index); + } + for (int i = 0; i < RanksOptionsStatus.Length; i++) + { + RanksOptionsStatus[i] = new MirImageControl() + { + Visible = false, + Index = 1347, + Library = Libraries.Prguse, + Parent = RankPage, + NotControl = true, + Location = new Point(i % 2 == 0 ? 42 : 202, i % 2 == 0 ? 120 + (i * 20) : 120 + ((i - 1) * 20)) + }; + int index = i; + RanksOptionsStatus[i].Click += (o, e) => SwitchRankOption(index); + } + for (int i = 0; i < RanksOptionsTexts.Length; i++) + { + RanksOptionsTexts[i] = new MirLabel() + { + Visible = true, + NotControl = true, + Parent = RankPage, + Location = new Point(17 + (i % 2 == 0 ? 42 : 202), i % 2 == 0 ? 118 + (i * 20) : 118 + ((i - 1) * 20)), + AutoSize = true, + Text = Options[i] + }; + } + + #endregion + + #region BuffDialogUI + + BuffPage = new MirImageControl() + { + Parent = this, + Size = new Size(352, 372), + Location = new Point(360, 61), + Index = 1853, + Library = Libraries.Prguse, + Visible = false + }; + BuffPage.MouseWheel += BuffsPanel_MouseWheel; + + + Buffs = new GuildBuffButton[8]; + for (byte i = 0; i < Buffs.Length; i++) + { + byte Id = i; + Buffs[i] = new GuildBuffButton { Parent = BuffPage, Visible = true, Location = new Point(4, 27 + (i * 38)), Id = Id }; + Buffs[i].Click += (o, e) => RequestBuff(Id); + Buffs[i].MouseWheel += BuffsPanel_MouseWheel; + } + + PointsLeft = new MirLabel + { + DrawFormat = TextFormatFlags.HorizontalCenter, + Parent = BuffPage, + Location = new Point(118, 3), + Size = new Size(100, 20), + NotControl = true + }; + + UpButton = new MirButton + { + Index = 197, + HoverIndex = 198, + PressedIndex = 199, + Library = Libraries.Prguse2, + Location = new Point(203, 24), + Parent = BuffPage, + Sound = SoundList.ButtonA + }; + UpButton.Click += (o, e) => + { + if (StartIndex == 0) return; + StartIndex--; + UpdatePositionBar(); + RefreshInterface(); + }; + DownButton = new MirButton + { + Index = 207, + HoverIndex = 208, + PressedIndex = 209, + Library = Libraries.Prguse2, + Location = new Point(203, 317), + Parent = BuffPage, + Sound = SoundList.ButtonA + }; + DownButton.Click += (o, e) => + { + if (GuildBuffInfos.Count < 8) return; + if (StartIndex == GuildBuffInfos.Count - 8) return; + StartIndex++; + UpdatePositionBar(); + RefreshInterface(); + }; + + PositionBar = new MirButton + { + Index = 205, + HoverIndex = 206, + PressedIndex = 206, + Library = Libraries.Prguse2, + Parent = BuffPage, + Movable = true, + Sound = SoundList.None, + Location = new Point(203, 39) + }; + PositionBar.OnMoving += PositionBar_OnMoving; + PositionBar.MouseUp += (o, e) => RefreshInterface(); + + #endregion + } + #endregion + + public void RequestBuff(byte Id) + { + if ((Id + StartIndex) > GuildBuffInfos.Count) return; + GuildBuffInfo BuffInfo = GuildBuffInfos[Id + StartIndex]; + if (BuffInfo == null) return; + GuildBuff Buff = FindGuildBuff(BuffInfo.Id); + if (Buff == null) + { + string Error = ""; + if (GameScene.Scene.GuildDialog.SparePoints < BuffInfo.PointsRequirement) + Error = "Insufficient points available."; + if (GameScene.Scene.GuildDialog.Level < BuffInfo.LevelRequirement) + Error = "Guild level too low."; + if (!GameScene.Scene.GuildDialog.GetMyOptions().HasFlag(GuildRankOptions.CanActivateBuff)) + Error = "Guild rank does not allow buff activation."; + if (Error != "") + { + MirMessageBox messageBox = new MirMessageBox(Error); + messageBox.Show(); + return; + } + if (CMain.Time < LastRequest + 100) return; + LastRequest = CMain.Time; + Network.Enqueue(new C.GuildBuffUpdate { Action = 1, Id = BuffInfo.Id }); + } + else + { + string Error = ""; + if (Buff.Active) + Error = "Buff is still active."; + if (GameScene.Scene.GuildDialog.Gold < BuffInfo.ActivationCost) + Error = "Insufficient guild funds."; + if (!GameScene.Scene.GuildDialog.GetMyOptions().HasFlag(GuildRankOptions.CanActivateBuff)) + Error = "Guild rank does not allow buff activation."; + if (Error != "") + { + MirMessageBox messageBox = new MirMessageBox(Error); + messageBox.Show(); + return; + } + if (CMain.Time < LastRequest + 100) return; + LastRequest = CMain.Time; + Network.Enqueue(new C.GuildBuffUpdate { Action = 2, Id = BuffInfo.Id }); + } + } + + public GuildBuff FindGuildBuff(int Index) + { + for (int i = 0; i < EnabledBuffs.Count; i++) + { + if ((EnabledBuffs[i] != null) && (EnabledBuffs[i].Id == Index)) + return EnabledBuffs[i]; + } + return null; + } + + private void UpdatePositionBar() + { + int h = 277 - PositionBar.Size.Height; + h = (int)((h / (float)(GuildBuffInfos.Count - 8)) * StartIndex); + PositionBar.Location = new Point(203, 39 + h); + } + + private void PositionBar_OnMoving(object sender, MouseEventArgs e) + { + const int x = 203; + int y = PositionBar.Location.Y; + if (y >= 296) y = 296; + if (y < 39) y = 39; + + int h = 277 - PositionBar.Size.Height; + h = (int)Math.Round(((y - 39) / (h / (float)(GuildBuffInfos.Count - 8)))); + PositionBar.Location = new Point(x, y); + if (h == StartIndex) return; + StartIndex = h; + RefreshInterface(); + } + + private void BuffsPanel_MouseWheel(object sender, MouseEventArgs e) + { + int count = e.Delta / SystemInformation.MouseWheelScrollDelta; + + if (StartIndex == 0 && count >= 0) return; + if (StartIndex == (GuildBuffInfos.Count - 8) && count <= 0) return; + StartIndex -= count > 0 ? 1 : -1; + if (GuildBuffInfos.Count <= 8) StartIndex = 0; + UpdatePositionBar(); + RefreshInterface(); + } + + public void RefreshInterface() + { + if (StartIndex < 0) StartIndex = 0; + + if (GuildBuffInfos.Count == 0) BuffButton.Visible = false; + else BuffButton.Visible = true; + + if (MapObject.User.GuildName == "") + { + Hide(); + return; + } + else + { + PointsLeft.Text = GameScene.Scene.GuildDialog.SparePoints.ToString(); + for (int i = 0; i < Buffs.Length; i++) + { + if ((StartIndex + i) > GuildBuffInfos.Count - 1) + { + Buffs[i].Visible = false; + continue; + } + GuildBuffInfo BuffInfo = GuildBuffInfos[i + StartIndex]; + if (BuffInfo == null) + { + Buffs[i].Visible = false; + continue; + } + Buffs[i].Visible = true; + GuildBuff Buff = FindGuildBuff(BuffInfo.Id); + Buffs[i].Name.Text = BuffInfo.Name; + Buffs[i].Icon.Index = BuffInfo.Icon; + + if (Buff == null) + { + if (BuffInfo.LevelRequirement > GameScene.Scene.GuildDialog.Level) + { + Buffs[i].Info.Text = "Insufficient Level"; + Buffs[i].Info.ForeColour = Color.Red; + Buffs[i].Icon.Index += 2; + } + else + { + Buffs[i].Info.Text = "Available"; + Buffs[i].Info.ForeColour = Buffs[i].Name.ForeColour; + Buffs[i].Icon.Index += 2; + } + Buffs[i].Obtained.Text = ""; + } + else + { + if (BuffInfo.TimeLimit > 0) + { + if (Buff.Active) + Buffs[i].Info.Text = "Counting down."; + else + Buffs[i].Info.Text = "Expired."; + } + else + Buffs[i].Info.Text = "Obtained."; + Buffs[i].Info.ForeColour = Buffs[i].Name.ForeColour; + if (Buff.Active) + { + Buffs[i].Obtained.Text = "Active"; + Buffs[i].Icon.Index += 1; + } + else + Buffs[i].Obtained.Text = "Inactive"; + } + } + } + } + + public GuildBuffInfo FindGuildBuffInfo(int Index) + { + if (!RequestedList) + { + RequestGuildBuffList(); + } + for (int i = 0; i < GuildBuffInfos.Count; i++) + { + if (GuildBuffInfos[i].Id == Index) + return GuildBuffInfos[i]; + } + return null; + } + + public void RequestGuildBuffList() + { + if (!RequestedList) + { + RequestedList = true; + Network.Enqueue(new C.GuildBuffUpdate { Action = 0 }); + } + } + + public void UpdateActiveStats() + { + string text = ""; + + var stats = new Stats(); + + foreach (GuildBuff buff in EnabledBuffs) + { + if ((buff.Info == null) || (!buff.Active)) continue; + + stats.Add(buff.Info.Stats); + } + + foreach (var val in stats.Values) + { + var c = val.Value < 0 ? "Decreases" : "Increases"; + + var txt = $"{c} {val.Key} by: {val.Value}{(val.Key.ToString().Contains("Percent") ? "%" : "")}.\n"; + + text += txt; + } + + ActiveStats = text; + } + + public void CreateHintLabel(byte Id) + { + GameScene.Scene.GuildBuffLabel = new MirControl + { + BackColour = Color.FromArgb(255, 50, 50, 50), + Border = true, + BorderColour = Color.Gray, + NotControl = true, + Parent = GameScene.Scene, + Opacity = 0.7F, + DrawControlTexture = true + }; + if (Id + StartIndex > GuildBuffInfos.Count) return; + + GuildBuffInfo Buff = GuildBuffInfos[Id + StartIndex]; + if (Buff == null) return; + MirLabel HintName = new MirLabel + { + AutoSize = true, + ForeColour = Color.White, + Location = new Point(4, 4), + OutLine = true, + Parent = GameScene.Scene.GuildBuffLabel, + Text = Buff.Name + }; + + GameScene.Scene.GuildBuffLabel.Size = new Size(Math.Max(GameScene.Scene.GuildBuffLabel.Size.Width, HintName.DisplayRectangle.Right + 4), + Math.Max(GameScene.Scene.GuildBuffLabel.Size.Height, HintName.DisplayRectangle.Bottom)); + + string ReqText = ""; + if (Buff.LevelRequirement > 0) + { + ReqText += "Minimum Guild Level: " + Buff.LevelRequirement.ToString(); + } + if (Buff.PointsRequirement > 0) + { + if (ReqText != "") ReqText += "\n"; + ReqText += "Points Required: " + Buff.PointsRequirement.ToString(); + } + if (Buff.ActivationCost > 0) + { + if (ReqText != "") ReqText += "\n"; + ReqText += "Activation Cost: " + Buff.ActivationCost.ToString() + " gold."; + //if (ReqText != "") ReqText += "\n"; + } + + + MirLabel RequiredLabel = new MirLabel + { + AutoSize = true, + ForeColour = Color.White, + Location = new Point(4, GameScene.Scene.GuildBuffLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = GameScene.Scene.GuildBuffLabel, + Text = ReqText + }; + GameScene.Scene.GuildBuffLabel.Size = new Size(Math.Max(GameScene.Scene.GuildBuffLabel.Size.Width, RequiredLabel.DisplayRectangle.Right + 4), + Math.Max(GameScene.Scene.GuildBuffLabel.Size.Height, RequiredLabel.DisplayRectangle.Bottom)); + + //code to dispay the buffs duration + if (Buff.TimeLimit > 0) + { + GuildBuff activeBuff = FindGuildBuff(Buff.Id); + + string text = ""; + + if (activeBuff != null && activeBuff.Active) + { + text = string.Format("Time Remaining: {0} minutes", activeBuff.ActiveTimeRemaining); + } + else + { + text = string.Format("Buff Length: {0} minutes.", Buff.TimeLimit.ToString()); + } + MirLabel TimeLabel = new MirLabel + { + AutoSize = true, + ForeColour = Color.White, + Location = new Point(4, GameScene.Scene.GuildBuffLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = GameScene.Scene.GuildBuffLabel, + Text = text + }; + GameScene.Scene.GuildBuffLabel.Size = new Size(Math.Max(GameScene.Scene.GuildBuffLabel.Size.Width, TimeLabel.DisplayRectangle.Right + 4), + Math.Max(GameScene.Scene.GuildBuffLabel.Size.Height, TimeLabel.DisplayRectangle.Bottom)); + } + + + //code to display the buff's effect + MirLabel InfoLabel = new MirLabel + { + AutoSize = true, + ForeColour = Color.White, + Location = new Point(4, GameScene.Scene.GuildBuffLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = GameScene.Scene.GuildBuffLabel, + Text = Buff.ShowStats() + }; + GameScene.Scene.GuildBuffLabel.Size = new Size(Math.Max(GameScene.Scene.GuildBuffLabel.Size.Width, InfoLabel.DisplayRectangle.Right + 4), + Math.Max(GameScene.Scene.GuildBuffLabel.Size.Height, InfoLabel.DisplayRectangle.Bottom)); + + } + + #region ButtonResets + public void ResetButtonStats() + { + if (MyOptions.HasFlag(GuildRankOptions.CanRetrieveItem) || MyOptions.HasFlag(GuildRankOptions.CanStoreItem)) + StorageButton.Visible = true; + else + StorageButton.Visible = false; + + if (MyOptions.HasFlag(GuildRankOptions.CanChangeRank)) + RankButton.Visible = true; + else + RankButton.Visible = false; + + if (MyOptions.HasFlag(GuildRankOptions.CanChangeNotice)) + NoticeEditButton.Visible = true; + else + NoticeEditButton.Visible = false; + + BuffButton.Visible = true; + } + #endregion + + #region NoticeDialogCode + #region NoticeButtonStates + public void EditNotice() + { + if (Notice.Enabled == false) + { + Notice.Enabled = true; + Notice.SetFocus(); + NoticeEditButton.Visible = false; + NoticeSaveButton.Visible = true; + } + else + { + Notice.Enabled = false; + NoticeEditButton.Index = 560; + NoticeEditButton.Visible = true; + NoticeSaveButton.Visible = false; + Network.Enqueue(new C.EditGuildNotice() { notice = Notice.MultiText.ToList() }); + } + } + public void NoticeChange(List newnotice) + { + NoticeEditButton.Index = 560; + Notice.Enabled = false; + NoticeScrollIndex = 0; + Notice.Text = ""; + Notice.MultiText = newnotice.ToArray(); + NoticeChanged = false; + UpdateNotice(); + } + #endregion + + #region AssholeNoticeScroller + public void UpdateNotice(bool forward = false) + { + int NoticeScrollerIndex = NoticeScrollIndex; + + if (forward) NoticeScrollerIndex += 24; + + if (NoticeScrollerIndex >= Notice.MultiText.Length) NoticeScrollerIndex = Notice.MultiText.Length - 24; + if (NoticeScrollerIndex < 0) NoticeScrollerIndex = 0; + if (Notice.MultiText.Length != 0) + { + Notice.TextBox.SelectionLength = 1; + Notice.TextBox.SelectionStart = Notice.TextBox.GetFirstCharIndexFromLine(NoticeScrollerIndex); + Notice.TextBox.ScrollToCaret(); + } + } + + private void UpdateNoticeScrollPosition() + { + int interval = 289 / (Notice.MultiText.Length - 25); + + int x = 337; + int y = 16 + (NoticeScrollIndex * interval); + + if (y >= NoticeDownButton.Location.Y - 20) y = NoticeDownButton.Location.Y - 20; + if (y <= 16) y = 16; + + NoticePositionBar.Location = new Point(x, y); + } + + void NoticePositionBar_OnMoving(object sender, MouseEventArgs e) + { + //int x = 337; + int y = NoticePositionBar.Location.Y; + int TempIndex = 0; + bool forward; + + if (y < 16) y = 16; + + int location = y - 16; + int interval = 289 / (Notice.MultiText.Length - 25); + + double yPoint = location / interval; + + TempIndex = Convert.ToInt16(Math.Floor(yPoint)); + + if (NoticeScrollIndex < TempIndex) + { + forward = true; + NoticeScrollIndex = Convert.ToInt16(Math.Floor(yPoint)); + } + else + { + forward = false; + NoticeScrollIndex = Convert.ToInt16(Math.Floor(yPoint)); + } + + if (NoticeScrollIndex >= Notice.MultiText.Length - 25) NoticeScrollIndex = Notice.MultiText.Length - 25; + if (NoticeScrollIndex <= 0) NoticeScrollIndex = 0; + + UpdateNotice(forward); + + UpdateNoticeScrollPosition(); + } + private void NoticePanel_MouseWheel(object sender, MouseEventArgs e) + { + int count = e.Delta / SystemInformation.MouseWheelScrollDelta; + + if (NoticeScrollIndex == 0 && count >= 0) return; + if (NoticeScrollIndex == Notice.MultiText.Length - 25 && count <= 0) return; + + if (count > 0) + { + NoticeScrollIndex--; + UpdateNotice(); + } + else + { + NoticeScrollIndex++; + UpdateNotice(true); + } + + + UpdateNoticeScrollPosition(); + } + + private void NoticePanel_KeyDown(object sender, KeyEventArgs e) + { + switch (e.KeyCode) + { + case Keys.Up: + if (NoticeScrollIndex == 0) break; + if (NoticeScrollIndex >= 25) NoticeScrollIndex -= 24; + NoticeScrollIndex--; + break; + case Keys.Home: + if (NoticeScrollIndex == 0) break; + NoticeScrollIndex = 0; + break; + case Keys.Down: + if (NoticeScrollIndex == Notice.MultiText.Length - 1) break; + if (NoticeScrollIndex < 25) NoticeScrollIndex = 24; + NoticeScrollIndex++; + break; + case Keys.End: + if (NoticeScrollIndex == Notice.MultiText.Length - 1) break; + NoticeScrollIndex = Notice.MultiText.Length - 1; + break; + case Keys.PageUp: + if (NoticeScrollIndex == 0) break; + NoticeScrollIndex -= 25; + break; + case Keys.PageDown: + if (NoticeScrollIndex == Notice.MultiText.Length - 25) break; + NoticeScrollIndex += 25; + break; + default: + return; + } + UpdateNotice(); + e.Handled = true; + } + #endregion + #endregion + + #region MembersDialogCode + public void NewMembersList(List NewRanks) + { + Ranks = NewRanks; + MembersChanged = false; + RefreshMemberList(); + } + public void RefreshMemberList() + { + MemberScrollIndex = 0; + List RankNames = new List(); + for (int i = 0; i < Ranks.Count; i++) + { + if (Ranks[i] != null) + { + int index = i; + Ranks[i].Index = index; + RankNames.Add(Ranks[i].Name); + } + else + RankNames.Add("Missing Rank"); + } + for (int i = 0; i < MembersRanks.Length; i++) + { + MembersRanks[i].Items = RankNames; + MembersRanks[i].MinimumOption = MyRankId; + } + RanksSelectBox.Items = RankNames.ToList(); + RanksSelectBox.MinimumOption = 0; + if (RankNames.Count < 255) + RanksSelectBox.Items.Add("Add New"); + UpdateMembers(); + UpdateRanks(); + } + + public void MemberStatusChange(string name, bool online) + { + for (int i = 0; i < Ranks.Count; i++) + for (int j = 0; j < Ranks[i].Members.Count; j++) + if (Ranks[i].Members[j].Name == name) + Ranks[i].Members[j].Online = online; + UpdateMembers(); + } + + public void OnNewRank(int Index, int SelectedIndex) + { + if (SelectedIndex >= Ranks.Count) return; + if (LastGuildMsg > CMain.Time) return; + MirMessageBox messageBox = new MirMessageBox(string.Format("Are you sure you want to change the rank of {0} to {1}?", MembersName[Index].Text, Ranks[SelectedIndex].Name), MirMessageBoxButtons.YesNo); + + messageBox.YesButton.Click += (o, a) => + { + Network.Enqueue(new C.EditGuildMember { ChangeType = 2, Name = MembersName[Index].Text, RankIndex = (byte)Ranks[SelectedIndex].Index, RankName = Ranks[SelectedIndex].Name }); + LastGuildMsg = CMain.Time + 5000; + }; + messageBox.Show(); + } + + public void AddMember() + { + if (!MyOptions.HasFlag(GuildRankOptions.CanRecruit)) return; + if (LastGuildMsg > CMain.Time) return; + Network.Enqueue(new C.EditGuildMember { ChangeType = 0, Name = MembersRecruitName.Text }); + LastGuildMsg = CMain.Time + 5000; + MembersRecruitName.Text = ""; + } + + public void DeleteMember(int Index) + { + if (MembersName[Index].Text == MapControl.User.Name) return; + if (LastGuildMsg > CMain.Time) return; + MirMessageBox messageBox = new MirMessageBox(string.Format("Are you sure you want to kick {0}?", MembersName[Index].Text), MirMessageBoxButtons.YesNo); + + messageBox.YesButton.Click += (o, a) => + { + Network.Enqueue(new C.EditGuildMember { ChangeType = 1, Name = MembersName[Index].Text }); + LastGuildMsg = CMain.Time + 5000; + }; + messageBox.Show(); + } + + public void UpdateMembers() + { + MembersShowCount = 0; + for (int i = 0; i < Ranks.Count; i++) + for (int j = 0; j < Ranks[i].Members.Count; j++) + { + if (MembersShowOfflinesetting || Ranks[i].Members[j].Online) MembersShowCount++; + } + if (MembersShowCount < MemberPageRows) + MemberScrollIndex = 0; + + + for (int i = 0; i < MembersRanks.Length; i++) + { + if (MembersShowCount > i) + { + MembersRanks[i].Visible = true; + } + else + MembersRanks[i].Visible = false; + } + for (int i = 0; i < MembersName.Length; i++) + { + if (MembersShowCount > i) + MembersName[i].Visible = true; + else + MembersName[i].Visible = false; + } + for (int i = 0; i < MembersStatus.Length; i++) + { + if (MembersShowCount > i) + MembersStatus[i].Visible = true; + else + MembersStatus[i].Visible = false; + } + for (int i = 0; i < MembersDelete.Length; i++) + { + MembersDelete[i].Visible = false; + } + if (MyOptions.HasFlag(GuildRankOptions.CanRecruit)) + { + RecruitMemberButton.Visible = true; + MembersRecruitName.Visible = true; + RecruitMemberLabel.Visible = true; + } + else + { + RecruitMemberButton.Visible = false; + MembersRecruitName.Visible = false; + RecruitMemberLabel.Visible = false; + } + + int Offset = 0; + int RowCount = 0; + DateTime now = CMain.Now; + for (int i = 0; i < Ranks.Count; i++) + for (int j = 0; j < Ranks[i].Members.Count; j++) + { + if (Offset < MemberScrollIndex) + { + if ((MembersShowOfflinesetting) || (Ranks[i].Members[j].Online)) + Offset++; + } + else + { + + if ((!MembersShowOfflinesetting) && (Ranks[i].Members[j].Online == false)) continue; + if ((MyOptions.HasFlag(GuildRankOptions.CanChangeRank)) && (Ranks[i].Index >= MyRankId)) + MembersRanks[RowCount].Enabled = true; + else + MembersRanks[RowCount].Enabled = false; + if ((MyOptions.HasFlag(GuildRankOptions.CanKick)) && (Ranks[i].Index >= MyRankId) && (Ranks[i].Members[j].Name != MapControl.User.Name)/* && (Ranks[i].Index != 0)*/) + MembersDelete[RowCount].Visible = true; + else + MembersDelete[RowCount].Visible = false; + MembersRanks[RowCount].SelectedIndex = Ranks[i].Index; + MembersName[RowCount].Text = Ranks[i].Members[j].Name; + if (Ranks[i].Members[j].Online) + MembersStatus[RowCount].ForeColour = Color.LimeGreen; + else + MembersStatus[RowCount].ForeColour = Color.White; + TimeSpan Diff = now - Ranks[i].Members[j].LastLogin.ToLocalTime(); + string text; + if (Ranks[i].Members[j].Online) + text = "Online"; + else + { + switch (Diff.Days) + { + case 0: + text = "Today"; + break; + case 1: + text = "Yesterday"; + break; + default: + text = Diff.Days + "Days ago"; + break; + } + } + MembersStatus[RowCount].Text = text; + RowCount++; + if (RowCount > MemberPageRows - 1) return; + } + } + } + public void MembersShowOfflineSwitch() + { + if (MembersShowOfflinesetting) + { + MembersShowOfflinesetting = false; + MembersShowOfflineStatus.Visible = false; + } + else + { + MembersShowOfflinesetting = true; + MembersShowOfflineStatus.Visible = true; + } + UpdateMembers(); + } + public void MembersPositionBar_OnMoving(object sender, MouseEventArgs e) + { + int x = 337; + int y = MembersPositionBar.Location.Y; + + if (y >= MembersDownButton.Location.Y - 20) y = MembersDownButton.Location.Y - 20; + if (y < 16) y = 16; + + int location = y - 16; + int interval = 289 / (MembersShowCount - MemberPageRows); + + double yPoint = location / interval; + + MemberScrollIndex = Convert.ToInt16(Math.Floor(yPoint)); + if (MemberScrollIndex > MembersShowCount - MemberPageRows) MemberScrollIndex = MembersShowCount - MemberPageRows; + if (MemberScrollIndex <= 0) MemberScrollIndex = 0; + + UpdateMembers(); + + MembersPositionBar.Location = new Point(x, y); + } + private void UpdateMembersScrollPosition() + { + int interval = 289 / (MembersShowCount - MemberPageRows); + + int x = 337; + int y = 16 + (MemberScrollIndex * interval); + + if (y >= MembersDownButton.Location.Y - 20) y = MembersDownButton.Location.Y - 20; + if (y <= 16) y = 16; + + MembersPositionBar.Location = new Point(x, y); + } + private void MembersPanel_MouseWheel(object sender, MouseEventArgs e) + { + int count = e.Delta / SystemInformation.MouseWheelScrollDelta; + + if (MemberScrollIndex == 0 && count >= 0) return; + if (MemberScrollIndex == MembersShowCount - MemberPageRows && count <= 0) return; + MemberScrollIndex -= count > 0 ? 1 : -1; + UpdateMembers(); + UpdateMembersScrollPosition(); + } + + private void MembersPanel_KeyDown(object sender, KeyEventArgs e) + { + switch (e.KeyCode) + { + case Keys.Up: + if (MemberScrollIndex == 0) break; + MemberScrollIndex--; + break; + case Keys.Home: + if (MemberScrollIndex == 0) break; + MemberScrollIndex = 0; + break; + case Keys.Down: + if (MembersShowCount < MemberPageRows) break; + if (MemberScrollIndex == MembersShowCount - MemberPageRows) break; + MemberScrollIndex++; + break; + case Keys.End: + if (MembersShowCount < MemberPageRows) break; + if (MemberScrollIndex == MembersShowCount - MemberPageRows) break; + MemberScrollIndex = MembersShowCount - MemberPageRows; + break; + case Keys.PageUp: + if (MemberScrollIndex == 0) break; + MemberScrollIndex -= 25; + if (MemberScrollIndex < 0) MemberScrollIndex = 0; + break; + case Keys.PageDown: + if (MembersShowCount < MemberPageRows) break; + if (MemberScrollIndex == MembersShowCount - 25) break; + MemberScrollIndex += 25; + if (MemberScrollIndex > (MembersShowCount - MemberPageRows)) MemberScrollIndex = MembersShowCount - MemberPageRows; + break; + default: + return; + } + UpdateMembers(); + UpdateMembersScrollPosition(); + e.Handled = true; + } + #endregion + + #region StatusDialogCode + private void StatusExpBar_BeforeDraw(object sender, EventArgs e) + { + if (GameScene.Scene.GuildDialog.MaxExperience == 0) + { + StatusExpLabel.Text = ""; + return; + } + if (StatusExpBar.Library == null) return; + + StatusExpBar.Library.Draw(424, StatusExpBar.DisplayLocation, new Size(260, 22), Color.White); + + double percent = GameScene.Scene.GuildDialog.Experience / (double)GameScene.Scene.GuildDialog.MaxExperience; + StatusExpLabel.Text = string.Format("{0:#0.##%}", percent); + if (percent > 1) percent = 1; + if (percent <= 0) return; + Rectangle section = new Rectangle + { + Size = new Size((int)((260 - 3) * percent), 22) + }; + + StatusExpBar.Library.Draw(StatusExpBar.Index, section, StatusExpBar.DisplayLocation, Color.White, false); + + } + #endregion + + #region RankDialogCode + public void NewRankRecieved(GuildRank New) + { + int NewIndex = Ranks.Count > 1 ? Ranks.Count - 1 : 1; + Ranks.Insert(NewIndex, New); + Ranks[Ranks.Count - 1].Index = Ranks.Count - 1; + RefreshMemberList(); + UpdateRanks(); + } + public void MyRankChanged(GuildRank New) + { + MyOptions = New.Options; + + MapObject.User.GuildRankName = New.Name; + GuildMember Member = null; + int OldRank = MyRankId; + MyRankId = New.Index; + if (OldRank >= Ranks.Count) return; + for (int i = 0; i < Ranks[OldRank].Members.Count; i++) + if (Ranks[OldRank].Members[i].Name == MapObject.User.Name) + { + Member = Ranks[OldRank].Members[i]; + Ranks[OldRank].Members.Remove(Member); + break; + } + + if (Member == null) return; + if (Ranks.Count <= New.Index) + { + Ranks[MyRankId].Members.Add(Member); + MembersChanged = true; + return; + } + Ranks[New.Index].Members.Add(Member); + + ResetButtonStats(); + UpdateMembers(); + + } + public void RankChangeRecieved(GuildRank New) + { + for (int i = 0; i < Ranks.Count; i++) + if (Ranks[i].Index == New.Index) + { + if (Ranks[i].Name == MapObject.User.GuildRankName) + for (int j = 0; j < Ranks[i].Members.Count; j++) + if (Ranks[i].Members[j].Name == MapObject.User.Name) + { + MapObject.User.GuildRankName = New.Name; + MyOptions = New.Options; + ResetButtonStats(); + UpdateMembers(); + } + if (Ranks[i].Name == New.Name) + { + Ranks[i] = New; + } + else + { + Ranks[i] = New; + RefreshMemberList(); + } + } + UpdateRanks(); + } + public void UpdateRanks() + { + if ((RanksSelectBox.SelectedIndex == -1) || (Ranks[RanksSelectBox.SelectedIndex].Index < MyRankId)) + { + for (int i = 0; i < RanksOptionsButtons.Length; i++) + RanksOptionsButtons[i].Enabled = false; + for (int i = 0; i < RanksOptionsStatus.Length; i++) + RanksOptionsStatus[i].Enabled = false; + if (RanksSelectBox.SelectedIndex == -1) + for (int i = 0; i < RanksOptionsStatus.Length; i++) + RanksOptionsStatus[i].Visible = false; + LastRankNameChange = long.MaxValue; + RanksName.Text = ""; + return; + } + RanksName.Text = Ranks[RanksSelectBox.SelectedIndex].Name; + if (Ranks[RanksSelectBox.SelectedIndex].Index >= MyRankId) + LastRankNameChange = 0; + else + LastRankNameChange = long.MaxValue; + for (int i = 0; i < RanksOptionsStatus.Length; i++) + { + if (Ranks[RanksSelectBox.SelectedIndex].Options.HasFlag((GuildRankOptions)(1 << i))) + RanksOptionsStatus[i].Visible = true; + else + RanksOptionsStatus[i].Visible = false; + if (Ranks[RanksSelectBox.SelectedIndex].Index >= MyRankId) + RanksOptionsButtons[i].Enabled = true; + else + RanksOptionsButtons[i].Enabled = false; + } + } + public void OnRankSelect(int Index) + { + if (Index < Ranks.Count) + RanksSelectBox.SelectedIndex = Index; + else + { + if (Ranks.Count == 255) return; + if (LastGuildMsg > CMain.Time) return; + MirMessageBox messageBox = new MirMessageBox("Are you sure you want to create a new rank?", MirMessageBoxButtons.YesNo); + messageBox.YesButton.Click += (o, a) => + { + Network.Enqueue(new C.EditGuildMember { ChangeType = 4, RankName = String.Format("Rank-{0}", Ranks.Count - 1) }); + LastGuildMsg = CMain.Time + 5000; + }; + messageBox.Show(); + } + UpdateRanks(); + } + public void SwitchRankOption(int OptionIndex) + { + if ((RanksSelectBox.SelectedIndex == -1) || (RanksSelectBox.SelectedIndex >= Ranks.Count)) return; + if (LastGuildMsg > CMain.Time) return; + Network.Enqueue(new C.EditGuildMember { ChangeType = 5, RankIndex = (byte)Ranks[RanksSelectBox.SelectedIndex].Index, RankName = OptionIndex.ToString(), Name = RanksOptionsStatus[OptionIndex].Visible ? "false" : "true" }); + LastGuildMsg = CMain.Time + 300; + } + public void RanksChangeName() + { + if (!string.IsNullOrEmpty(RanksName.Text)) + { + Network.Enqueue(new C.EditGuildMember { ChangeType = 3, RankIndex = (byte)Ranks[RanksSelectBox.SelectedIndex].Index, RankName = RanksName.Text }); + LastRankNameChange = CMain.Time + 5000; + RanksName.Enabled = false; + } + } + public void RanksName_KeyPress(object sender, KeyPressEventArgs e) + { + switch (e.KeyChar) + { + case (char)'\\': + e.Handled = true; + break; + case (char)Keys.Enter: + e.Handled = true; + RanksChangeName(); + break; + case (char)Keys.Escape: + e.Handled = true; + UpdateRanks(); + break; + } + } + + public void RanksName_BeforeDraw() + { + if (LastRankNameChange < CMain.Time) + { + RanksName.Enabled = true; + RanksSaveName.Enabled = true; + } + else + { + RanksName.Enabled = false; + RanksSaveName.Enabled = false; + } + } + + #endregion + + #region StorageCode + + public void StoragePositionBar_OnMoving(object sender, MouseEventArgs e) + { + int x = 337; + int y = StoragePositionBar.Location.Y; + + if (y >= StorageDownButton.Location.Y - 20) y = StorageDownButton.Location.Y - 20; + if (y < 16) y = 16; + + int location = y - 16; + int interval = 289 / 8; + + double yPoint = location / interval; + + StorageIndex = Convert.ToInt16(Math.Floor(yPoint)); + if (StorageIndex > 6) StorageIndex = 6; + if (StorageIndex <= 0) StorageIndex = 0; + UpdateStorage(); + + StoragePositionBar.Location = new Point(x, y); + } + + private void StoragePanel_MouseWheel(object sender, MouseEventArgs e) + { + int count = e.Delta / SystemInformation.MouseWheelScrollDelta; + + if (StorageIndex == 0 && count >= 0) return; + if (StorageIndex == 6 && count <= 0) return; + + StorageIndex -= count; + + if (StorageIndex < 0) StorageIndex = 0; + if (StorageIndex > 6) StorageIndex = 6; + + UpdateStorage(); + + StorageUpdatePositionBar(); + } + + private void StorageUpdatePositionBar() + { + + int interval = 289 / 6; + + int x = 337; + int y = 16 + (StorageIndex * interval); + + if (y >= StorageDownButton.Location.Y - 20) y = StorageDownButton.Location.Y - 20; + if (y <= 16) y = 16; + + StoragePositionBar.Location = new Point(x, y); + } + + public void UpdateStorage() + { + for (int x = 0; x < 8; x++) + { + for (int y = 0; y < 14; y++) + { + int idx = 8 * y + x; + if (StorageIndex <= y && (y < StorageIndex + 8)) + { + StorageGrid[idx].Location = new Point(x * 35 + 31 + x, (y - StorageIndex) * 35 + 20 + (y - StorageIndex)); + StorageGrid[idx].Visible = true; + } + else + StorageGrid[idx].Visible = false; + } + } + } + + public void StorageAddGold() + { + if (LastGuildMsg > CMain.Time) return; + MirAmountBox amountBox = new MirAmountBox("Deposit", 38, Libraries.Prguse, GameScene.Gold); + + amountBox.OKButton.Click += (o, a) => + { + if (amountBox.Amount <= 0) return; + LastGuildMsg = CMain.Time + 100; + Network.Enqueue(new C.GuildStorageGoldChange + { + Type = 0, + Amount = amountBox.Amount, + }); + }; + + amountBox.Show(); + } + public void StorageRemoveGold() + { + if (LastGuildMsg > CMain.Time) return; + MirAmountBox amountBox = new MirAmountBox("Gold to retrieve:", 38, Libraries.Items, Gold); + + amountBox.OKButton.Click += (o, a) => + { + if (amountBox.Amount <= 0) return; + LastGuildMsg = CMain.Time + 100; + Network.Enqueue(new C.GuildStorageGoldChange + { + Type = 1, + Amount = amountBox.Amount, + }); + }; + + amountBox.Show(); + } + #endregion + + #region UpdateNotice + public void RequestUpdateNotice() + { + if ((NoticeChanged) && (LastNoticeRequest < CMain.Time)) + { + LastNoticeRequest = CMain.Time + 5000; + Network.Enqueue(new C.RequestGuildInfo() { Type = 0 }); + } + } + public void RequestUpdateMembers() + { + if ((MembersChanged) && (LastMemberRequest < CMain.Time)) + { + LastMemberRequest = CMain.Time + 5000; + Network.Enqueue(new C.RequestGuildInfo() { Type = 1 }); + } + } + #endregion + + #region NoticeDialogPages + public void RightDialog(byte Rpageid) + { + StatusPage.Visible = false; + BuffPage.Visible = false; + + StatusButton.Index = 103; + BuffButton.Index = 95; + + switch (Rpageid) + { + case 0: + StatusPage.Visible = true; + StatusButton.Index = 104; + break; + case 1: + BuffPage.Visible = true; + BuffButton.Index = 96; + break; + } + } + public void LeftDialog(byte Lpageid) + { + NoticePage.Visible = false; + MembersPage.Visible = false; + StoragePage.Visible = false; + RankPage.Visible = false; + + NoticeButton.Index = 93; + MembersButton.Index = 99; + StorageButton.Index = 105; + RankButton.Index = 101; + + switch (Lpageid) + { + case 0: + NoticePage.Visible = true; + NoticeButton.Index = 94; + RequestUpdateNotice(); + break; + case 1: + MembersPage.Visible = true; + MembersButton.Index = 100; + RequestUpdateMembers(); + break; + case 2: + StoragePage.Visible = true; + StorageButton.Index = 106; + Network.Enqueue(new C.GuildStorageItemChange() { Type = 3 }); + break; + case 3: + RankPage.Visible = true; + RankButton.Index = 102; + RequestUpdateMembers(); + break; + } + } + public void StatusChanged(GuildRankOptions status) + { + Notice.Enabled = false; + NoticeEditButton.Index = 85; + MyOptions = status; + + if (MyOptions.HasFlag(GuildRankOptions.CanChangeNotice)) + NoticeEditButton.Visible = true; + else + NoticeEditButton.Visible = false; + + if (MyOptions.HasFlag(GuildRankOptions.CanChangeRank)) + RankButton.Visible = true; + else + RankButton.Visible = false; + + if ((MyOptions.HasFlag(GuildRankOptions.CanStoreItem)) || (MyOptions.HasFlag(GuildRankOptions.CanRetrieveItem))) + StorageButton.Visible = true; + else + StorageButton.Visible = false; + + if (GuildBuffInfos.Count == 0) BuffButton.Visible = false; + else BuffButton.Visible = true; + + } + #endregion + + #region GuildDialogChecks + + public override void Show() + { + if (Visible) return; + + if (MapControl.User.GuildName == "") + { + MirMessageBox messageBox = new MirMessageBox(GameLanguage.NotInGuild, MirMessageBoxButtons.OK); + messageBox.Show(); + return; + } + Visible = true; + + if (NoticePage.Visible) + { + if ((NoticeChanged) && (LastNoticeRequest < CMain.Time)) + { + LastNoticeRequest = CMain.Time + 5000; + Network.Enqueue(new C.RequestGuildInfo() { Type = 0 }); + } + NoticeButton.Index = 94; + } + if (StatusPage.Visible) + StatusButton.Index = 104; + + + } + #endregion + } + public sealed class GuildBuffButton : MirControl + { + public byte Id; + //public MirButton Icon; + public MirImageControl Icon; + public MirLabel Name, Info, Obtained; + //public MirControl HintLabel; + + public GuildBuffButton() + { + BorderColour = Color.Orange; + + Size = new Size(188, 33); + Icon = new MirImageControl + { + Index = 0, + Library = Libraries.MagIcon, + Parent = this, + //Location = new Point(1, 0), + Location = new Point(1, 0), + NotControl = true + }; + Name = new MirLabel + { + AutoSize = true, + Parent = this, + Location = new Point(35, 1), + NotControl = true + }; + Info = new MirLabel + { + AutoSize = true, + Parent = this, + Location = new Point(35, 17), + NotControl = true + }; + Obtained = new MirLabel + { + DrawFormat = TextFormatFlags.Right, + AutoSize = true, + Parent = this, + Location = new Point(140, 17), + NotControl = true, + Text = "" + }; + } + + protected override void OnMouseEnter() + { + base.OnMouseEnter(); + GameScene.Scene.GuildDialog.CreateHintLabel(Id); + Border = true; + } + protected override void OnMouseLeave() + { + base.OnMouseLeave(); + GameScene.Scene.DisposeGuildBuffLabel(); + Border = false; + } + } +} diff --git a/Client/MirScenes/Dialogs/HelpDialog.cs b/Client/MirScenes/Dialogs/HelpDialog.cs new file mode 100644 index 0000000..9fdc376 --- /dev/null +++ b/Client/MirScenes/Dialogs/HelpDialog.cs @@ -0,0 +1,384 @@ +using Client.MirControls; +using Client.MirGraphics; +using Client.MirSounds; + +namespace Client.MirScenes.Dialogs +{ + public sealed class HelpDialog : MirImageControl + { + public List Pages = new List(); + + public MirButton CloseButton, NextButton, PreviousButton; + public MirLabel PageLabel; + public HelpPage CurrentPage; + + public int CurrentPageNumber = 0; + + public HelpDialog() + { + Index = 920; + Library = Libraries.Prguse; + Movable = true; + Sort = true; + + Location = Center; + + MirImageControl TitleLabel = new MirImageControl + { + Index = 57, + Library = Libraries.Prguse, + Location = new Point(18, 9), + Parent = this + }; + + PreviousButton = new MirButton + { + Index = 240, + HoverIndex = 241, + PressedIndex = 242, + Library = Libraries.Prguse2, + Parent = this, + Size = new Size(16, 16), + Location = new Point(210, 485), + Sound = SoundList.ButtonA, + }; + PreviousButton.Click += (o, e) => + { + CurrentPageNumber--; + + if (CurrentPageNumber < 0) CurrentPageNumber = Pages.Count - 1; + + DisplayPage(CurrentPageNumber); + }; + + NextButton = new MirButton + { + Index = 243, + HoverIndex = 244, + PressedIndex = 245, + Library = Libraries.Prguse2, + Parent = this, + Size = new Size(16, 16), + Location = new Point(310, 485), + Sound = SoundList.ButtonA, + }; + NextButton.Click += (o, e) => + { + CurrentPageNumber++; + + if (CurrentPageNumber > Pages.Count - 1) CurrentPageNumber = 0; + + DisplayPage(CurrentPageNumber); + }; + + PageLabel = new MirLabel + { + Text = "", + Font = new Font(Settings.FontName, 9F), + DrawFormat = TextFormatFlags.VerticalCenter | TextFormatFlags.HorizontalCenter, + Parent = this, + NotControl = true, + Location = new Point(230, 480), + Size = new Size(80, 20) + }; + + CloseButton = new MirButton + { + HoverIndex = 361, + Index = 360, + Location = new Point(509, 3), + Library = Libraries.Prguse2, + Parent = this, + PressedIndex = 362, + Sound = SoundList.ButtonA, + }; + CloseButton.Click += (o, e) => Hide(); + + LoadImagePages(); + + DisplayPage(); + } + + private void LoadImagePages() + { + Point location = new Point(12, 35); + + Dictionary keybinds = new Dictionary(); + + List imagePages = new List { + new HelpPage("Shortcut Information", -1, new ShortcutPage1 { Parent = this } ) { Parent = this, Location = location, Visible = false }, + new HelpPage("Shortcut Information", -1, new ShortcutPage2 { Parent = this } ) { Parent = this, Location = location, Visible = false }, + new HelpPage("Chat Shortcuts", -1, new ShortcutPage3 { Parent = this } ) { Parent = this, Location = location, Visible = false }, + new HelpPage("Movements", 0, null) { Parent = this, Location = location, Visible = false }, + new HelpPage("Attacking", 1, null) { Parent = this, Location = location, Visible = false }, + new HelpPage("Collecting Items", 2, null) { Parent = this, Location = location, Visible = false }, + new HelpPage("Health", 3, null) { Parent = this, Location = location, Visible = false }, + new HelpPage("Skills", 4, null) { Parent = this, Location = location, Visible = false }, + new HelpPage("Skills", 5, null) { Parent = this, Location = location, Visible = false }, + new HelpPage("Mana", 6, null) { Parent = this, Location = location, Visible = false }, + new HelpPage("Chatting", 7, null) { Parent = this, Location = location, Visible = false }, + new HelpPage("Groups", 8, null) { Parent = this, Location = location, Visible = false }, + new HelpPage("Durability", 9, null) { Parent = this, Location = location, Visible = false }, + new HelpPage("Purchasing", 10, null) { Parent = this, Location = location, Visible = false }, + new HelpPage("Selling", 11, null) { Parent = this, Location = location, Visible = false }, + new HelpPage("Repairing", 12, null) { Parent = this, Location = location, Visible = false }, + new HelpPage("Trading", 13, null) { Parent = this, Location = location, Visible = false }, + new HelpPage("Inspecting", 14, null) { Parent = this, Location = location, Visible = false }, + new HelpPage("Statistics", 15, null) { Parent = this, Location = location, Visible = false }, + new HelpPage("Statistics", 16, null) { Parent = this, Location = location, Visible = false }, + new HelpPage("Statistics", 17, null) { Parent = this, Location = location, Visible = false }, + new HelpPage("Statistics", 18, null) { Parent = this, Location = location, Visible = false }, + new HelpPage("Statistics", 19, null) { Parent = this, Location = location, Visible = false }, + new HelpPage("Statistics", 20, null) { Parent = this, Location = location, Visible = false }, + new HelpPage("Quests", 21, null) { Parent = this, Location = location, Visible = false }, + new HelpPage("Quests", 22, null) { Parent = this, Location = location, Visible = false }, + new HelpPage("Quests", 23, null) { Parent = this, Location = location, Visible = false }, + new HelpPage("Quests", 24, null) { Parent = this, Location = location, Visible = false }, + new HelpPage("Mounts", 25, null) { Parent = this, Location = location, Visible = false }, + new HelpPage("Mounts", 26, null) { Parent = this, Location = location, Visible = false }, + new HelpPage("Fishing", 27, null) { Parent = this, Location = location, Visible = false }, + new HelpPage("Gems and Orbs", 28, null) { Parent = this, Location = location, Visible = false }, + }; + + Pages.AddRange(imagePages); + } + + + public void DisplayPage(string pageName) + { + if (Pages.Count < 1) return; + + for (int i = 0; i < Pages.Count; i++) + { + if (Pages[i].Title.ToLower() != pageName.ToLower()) continue; + + DisplayPage(i); + break; + } + } + + public void DisplayPage(int id = 0) + { + if (Pages.Count < 1) return; + + if (id > Pages.Count - 1) id = Pages.Count - 1; + if (id < 0) id = 0; + + if (CurrentPage != null) + { + CurrentPage.Visible = false; + if (CurrentPage.Page != null) CurrentPage.Page.Visible = false; + } + + CurrentPage = Pages[id]; + + if (CurrentPage == null) return; + + CurrentPage.Visible = true; + if (CurrentPage.Page != null) CurrentPage.Page.Visible = true; + CurrentPageNumber = id; + + CurrentPage.PageTitleLabel.Text = id + 1 + ". " + CurrentPage.Title; + + PageLabel.Text = string.Format("{0} / {1}", id + 1, Pages.Count); + + Show(); + } + + + public void Toggle() + { + if (!Visible) + Show(); + else + Hide(); + } + } + + public class ShortcutPage1 : ShortcutInfoPage + { + public ShortcutPage1() + { + Shortcuts = new List + { + new ShortcutInfo(CMain.InputKeys.GetKey(KeybindOptions.Exit), "Exit the game"), + new ShortcutInfo(CMain.InputKeys.GetKey(KeybindOptions.Logout), "Log out"), + new ShortcutInfo(CMain.InputKeys.GetKey(KeybindOptions.Bar1Skill1) + "-" + CMain.InputKeys.GetKey(KeybindOptions.Bar1Skill8), "Skill buttons"), + new ShortcutInfo(CMain.InputKeys.GetKey(KeybindOptions.Inventory), "Inventory window (open / close)"), + new ShortcutInfo(CMain.InputKeys.GetKey(KeybindOptions.Equipment), "Status window (open / close)"), + new ShortcutInfo(CMain.InputKeys.GetKey(KeybindOptions.Skills), "Skill window (open / close)"), + new ShortcutInfo(CMain.InputKeys.GetKey(KeybindOptions.Group), "Group window (open / close)"), + new ShortcutInfo(CMain.InputKeys.GetKey(KeybindOptions.Trade), "Trade window (open / close)"), + new ShortcutInfo(CMain.InputKeys.GetKey(KeybindOptions.Friends), "Friend window (open / close)"), + new ShortcutInfo(CMain.InputKeys.GetKey(KeybindOptions.Minimap), "Minimap window (open / close)"), + new ShortcutInfo(CMain.InputKeys.GetKey(KeybindOptions.Guilds), "Guild window (open / close)"), + new ShortcutInfo(CMain.InputKeys.GetKey(KeybindOptions.GameShop), "Gameshop window (open / close)"), + //Shortcuts.Add(new ShortcutInfo("K", "Rental window (open / close)")); + new ShortcutInfo(CMain.InputKeys.GetKey(KeybindOptions.Relationship), "Engagement window (open / close)"), + new ShortcutInfo(CMain.InputKeys.GetKey(KeybindOptions.Belt), "Belt window (open / close)"), + new ShortcutInfo(CMain.InputKeys.GetKey(KeybindOptions.Options), "Option window (open / close)"), + new ShortcutInfo(CMain.InputKeys.GetKey(KeybindOptions.Help), "Help window (open / close)"), + new ShortcutInfo(CMain.InputKeys.GetKey(KeybindOptions.TargetSpellLockOn), "Lock spell onto target not cursor location") + }; + + LoadKeyBinds(); + } + } + public class ShortcutPage2 : ShortcutInfoPage + { + public ShortcutPage2() + { + Shortcuts = new List + { + new ShortcutInfo(CMain.InputKeys.GetKey(KeybindOptions.ChangePetmode), "Toggle pet attack pet"), + //Shortcuts.Add(new ShortcutInfo("Ctrl + F", "Change the font in the chat box")); + new ShortcutInfo(CMain.InputKeys.GetKey(KeybindOptions.ChangeAttackmode), "Toggle player attack mode"), + new ShortcutInfo(CMain.InputKeys.GetKey(KeybindOptions.AttackmodePeace), "Peace Mode - Attack monsters only"), + new ShortcutInfo(CMain.InputKeys.GetKey(KeybindOptions.AttackmodeGroup), "Group Mode - Attack all subjects except your group members"), + new ShortcutInfo(CMain.InputKeys.GetKey(KeybindOptions.AttackmodeGuild), "Guild Mode - Attack all subjects except your guild members"), + new ShortcutInfo(CMain.InputKeys.GetKey(KeybindOptions.AttackmodeRedbrown), "Good/Evil Mode - Attack PK players and monsters only"), + new ShortcutInfo(CMain.InputKeys.GetKey(KeybindOptions.AttackmodeAll), "All Attack Mode - Attack all subjects"), + new ShortcutInfo(CMain.InputKeys.GetKey(KeybindOptions.Bigmap), "Show the field map"), + new ShortcutInfo(CMain.InputKeys.GetKey(KeybindOptions.Skillbar), "Show the skill bar"), + new ShortcutInfo(CMain.InputKeys.GetKey(KeybindOptions.Autorun), "Auto run on / off"), + new ShortcutInfo(CMain.InputKeys.GetKey(KeybindOptions.Cameramode), "Show / Hide interface"), + new ShortcutInfo(CMain.InputKeys.GetKey(KeybindOptions.Pickup), "Highlight / Pickup Items"), + new ShortcutInfo("Ctrl + Right Click", "Show other players kits"), + new ShortcutInfo(CMain.InputKeys.GetKey(KeybindOptions.Screenshot), "Screen Capture") + }; + + LoadKeyBinds(); + } + } + public class ShortcutPage3 : ShortcutInfoPage + { + public ShortcutPage3() + { + Shortcuts = new List + { + //Shortcuts.Add(new ShortcutInfo("` / Ctrl", "Change the skill bar")); + new ShortcutInfo("/(username)", "Command to whisper to others"), + new ShortcutInfo("!(text)", "Command to shout to others nearby"), + new ShortcutInfo("!~(text)", "Command to guild chat") + }; + + LoadKeyBinds(); + } + } + + public class ShortcutInfo + { + public string Shortcut { get; set; } + public string Information { get; set; } + + public ShortcutInfo(string shortcut, string info) + { + Shortcut = shortcut.Replace("\n", " + "); + Information = info; + } + } + + public class ShortcutInfoPage : MirControl + { + protected List Shortcuts = new List(); + + public ShortcutInfoPage() + { + Visible = false; + + MirLabel shortcutTitleLabel = new MirLabel + { + Text = "Shortcuts", + DrawFormat = TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter, + ForeColour = Color.White, + Font = new Font(Settings.FontName, 10F), + Parent = this, + AutoSize = true, + Location = new Point(13, 75), + Size = new Size(100, 30) + }; + + MirLabel infoTitleLabel = new MirLabel + { + Text = "Information", + DrawFormat = TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter, + ForeColour = Color.White, + Font = new Font(Settings.FontName, 10F), + Parent = this, + AutoSize = true, + Location = new Point(114, 75), + Size = new Size(405, 30) + }; + } + + public void LoadKeyBinds() + { + if (Shortcuts == null) return; + + for (int i = 0; i < Shortcuts.Count; i++) + { + MirLabel shortcutLabel = new MirLabel + { + Text = Shortcuts[i].Shortcut, + ForeColour = Color.Yellow, + DrawFormat = TextFormatFlags.VerticalCenter, + Font = new Font(Settings.FontName, 9F), + Parent = this, + AutoSize = true, + Location = new Point(18, 107 + (20 * i)), + Size = new Size(95, 23), + }; + + MirLabel informationLabel = new MirLabel + { + Text = Shortcuts[i].Information, + DrawFormat = TextFormatFlags.VerticalCenter, + ForeColour = Color.White, + Font = new Font(Settings.FontName, 9F), + Parent = this, + AutoSize = true, + Location = new Point(119, 107 + (20 * i)), + Size = new Size(400, 23), + }; + } + } + } + + public class HelpPage : MirControl + { + public string Title; + public int ImageID; + public MirControl Page; + + public MirLabel PageTitleLabel; + + public HelpPage(string title, int imageID, MirControl page) + { + Title = title; + ImageID = imageID; + Page = page; + + NotControl = true; + Size = new System.Drawing.Size(508, 396 + 40); + + BeforeDraw += HelpPage_BeforeDraw; + + PageTitleLabel = new MirLabel + { + Text = Title, + Font = new Font(Settings.FontName, 10F, FontStyle.Bold), + DrawFormat = TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter, + Parent = this, + Size = new System.Drawing.Size(242, 30), + Location = new Point(135, 4) + }; + } + + void HelpPage_BeforeDraw(object sender, EventArgs e) + { + if (ImageID < 0) return; + + Libraries.Help.Draw(ImageID, new Point(DisplayLocation.X, DisplayLocation.Y + 40), Color.White, false); + } + } +} diff --git a/Client/MirScenes/Dialogs/InventoryDialog.cs b/Client/MirScenes/Dialogs/InventoryDialog.cs new file mode 100644 index 0000000..f53d732 --- /dev/null +++ b/Client/MirScenes/Dialogs/InventoryDialog.cs @@ -0,0 +1,251 @@ +using Client.MirControls; +using Client.MirGraphics; +using Client.MirNetwork; +using Client.MirObjects; +using Client.MirSounds; +using C = ClientPackets; + +namespace Client.MirScenes.Dialogs +{ + public sealed class InventoryDialog : MirImageControl + { + public MirItemCell[] Grid; + public MirItemCell[] QuestGrid; + public MirImageControl GoldImage; + public MirLabel GoldLabel; + + public MirButton CloseButton, QuestButton; + + public InventoryDialog() + { + Index = 169; + Library = Libraries.Prguse; + Movable = true; + Sort = true; + Visible = false; + Location = new Point(40, 40); + + QuestButton = new MirButton + { + Index = 739, + Library = Libraries.Prguse, + Location = new Point(146, 7), + Parent = this, + Size = new Size(72, 23), + Sound = SoundList.ButtonA, + Visible = false + }; + QuestButton.Click += Button_Click; + + CloseButton = new MirButton + { + Index = 54, + Location = new Point(Size.Width - 86, Size.Height - 40), + Library = Libraries.Prguse, + Parent = this, + PressedIndex = 55, + Sound = SoundList.ButtonA, + }; + CloseButton.Click += (o, e) => Hide(); + + GoldImage = new MirImageControl + { + Library = Libraries.Prguse, + Index = 38, + Parent = this, + Location = new Point(7, Size.Height - 40) + }; + GoldImage.Click += (o, e) => + { + if (GameScene.SelectedCell == null) + GameScene.PickedUpGold = !GameScene.PickedUpGold && GameScene.Gold > 0; + }; + + GoldLabel = new MirLabel + { + Parent = this, + AutoSize = true, + NotControl = true, + Location = new Point(45, Size.Height - 41) + }; + + Grid = new MirItemCell[6 * 10]; + + for (int x = 0; x < 6; x++) + { + for (int y = 0; y < 10; y++) + { + int idx = 6 * y + x; + Grid[idx] = new MirItemCell + { + ItemSlot = 6 + idx, + GridType = MirGridType.Inventory, + Library = Libraries.Items, + Parent = this, + Location = new Point(x * 60 + 11 + x, y % 5 * 46 + 16 + y % 5), + }; + + if (idx >= 30) + Grid[idx].Visible = false; + } + } + + QuestGrid = new MirItemCell[8 * 5]; + + for (int x = 0; x < 8; x++) + { + for (int y = 0; y < 5; y++) + { + QuestGrid[8 * y + x] = new MirItemCell + { + ItemSlot = 8 * y + x, + GridType = MirGridType.QuestInventory, + Library = Libraries.Items, + Parent = this, + Location = new Point(x * 36 + 9 + x, y * 32 + 37 + y), + Visible = false + }; + } + } + } + + void Button_Click(object sender, EventArgs e) + { + Reset(); + QuestButton.Index = 198; + + foreach (var grid in QuestGrid) + { + grid.Visible = true; + } + } + + void Reset() + { + foreach (MirItemCell grid in QuestGrid) + { + grid.Visible = false; + } + + foreach (MirItemCell grid in Grid) + { + grid.Visible = false; + } + } + + + + public void RefreshInventory() + { + Reset(); + QuestButton.Index = 739; + + foreach (var grid in Grid) + { + if (grid.ItemSlot < 36) + grid.Visible = true; + else + grid.Visible = false; + } + } + + public void Process() + { + GoldLabel.Text = GameScene.Gold.ToString("###,###,##0"); + } + + public MirItemCell GetCell(ulong id) + { + for (int i = 0; i < Grid.Length; i++) + { + if (Grid[i].Item == null || Grid[i].Item.UniqueID != id) continue; + return Grid[i]; + } + return null; + } + + public MirItemCell GetQuestCell(ulong id) + { + return QuestGrid.FirstOrDefault(t => t.Item != null && t.Item.UniqueID == id); + } + + public void DisplayItemGridEffect(ulong id, int type = 0) + { + MirItemCell cell = GetCell(id); + + if (cell.Item == null) return; + + MirAnimatedControl animEffect = null; + + switch (type) + { + case 0: + animEffect = new MirAnimatedControl + { + Animated = true, + AnimationCount = 9, + AnimationDelay = 150, + Index = 410, + Library = Libraries.Prguse, + Location = cell.Location, + Parent = this, + Loop = false, + NotControl = true, + UseOffSet = true, + Blending = true, + BlendingRate = 1F + }; + animEffect.AfterAnimation += (o, e) => animEffect.Dispose(); + SoundManager.PlaySound(20000 + (ushort)Spell.MagicShield * 10); + break; + } + } + } + public sealed class BeltDialog : MirImageControl + { + public MirItemCell[] Grid; + + public BeltDialog() + { + Index = 73; + AutoSize = false; + Size = new Size(234, 35); + Library = Libraries.Prguse; + DrawImage = false; + Visible = true; + Location = new Point(20, GameScene.Scene.MainCharacterDialog.Location.Y - 40); + + BeforeDraw += BeltPanel_BeforeDraw; + + Grid = new MirItemCell[6]; + + for (int x = 0; x < 6; x++) + { + Grid[x] = new MirItemCell + { + ItemSlot = x, + Size = new Size(32, 32), + GridType = MirGridType.Inventory, + Library = Libraries.Items, + Parent = this, + Location = new Point(x * 39 + 3, 3) + }; + } + + } + + private void BeltPanel_BeforeDraw(object sender, EventArgs e) + { + } + + public MirItemCell GetCell(ulong id) + { + for (int i = 0; i < Grid.Length; i++) + { + if (Grid[i].Item == null || Grid[i].Item.UniqueID != id) continue; + return Grid[i]; + } + return null; + } + } +} diff --git a/Client/MirScenes/Dialogs/KeyboardLayoutDialog.cs b/Client/MirScenes/Dialogs/KeyboardLayoutDialog.cs new file mode 100644 index 0000000..2e5ec4a --- /dev/null +++ b/Client/MirScenes/Dialogs/KeyboardLayoutDialog.cs @@ -0,0 +1,438 @@ +using Client.MirControls; +using Client.MirGraphics; +using Client.MirSounds; + +namespace Client.MirScenes.Dialogs +{ + public sealed class KeyboardLayoutDialog : MirImageControl + { + public MirImageControl TitleLabel, EnforceButtonChecked; + public MirLabel PageLabel, EnforceButtonLabel; + public MirButton CloseButton; + + public MirButton ScrollUpButton, ScrollDownButton, PositionBar; + public MirButton ResetButton, EnforceButton; + + public List Rows = new List(); + + public bool Enforce = true; + + public int TopLine; + public int LineCount = 16; + + public int PosX = 491, PosMinY = 101, PosMaxY = 344; + + public KeyBind WaitingForBind = null; + + public KeyboardLayoutDialog() + { + Index = 119; + Library = Libraries.Prguse; + Movable = true; + Sort = true; + Location = Center; + + TitleLabel = new MirImageControl + { + //Index = 7, + Library = Libraries.Prguse, + Location = new Point(18, 4), + Parent = this + }; + + PageLabel = new MirLabel + { + Text = "Keyboard Settings", + Font = new Font(Settings.FontName, Settings.FontSize + 2, FontStyle.Bold), + DrawFormat = TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter, + Parent = this, + Size = new System.Drawing.Size(242, 30), + Location = new Point(135, 34) + }; + + CloseButton = new MirButton + { + HoverIndex = 361, + Index = 360, + Location = new Point(489, 3), + Library = Libraries.Prguse2, + Parent = this, + PressedIndex = 362, + Sound = SoundList.ButtonA, + }; + + CloseButton.Click += (o, e) => + { + CMain.InputKeys.Save(CMain.InputKeys.Keylist); + Hide(); + }; + + ScrollUpButton = new MirButton + { + Index = 197, + HoverIndex = 198, + PressedIndex = 199, + Library = Libraries.Prguse2, + Parent = this, + Size = new Size(16, 14), + Location = new Point(491, 88), + Sound = SoundList.ButtonA, + Visible = true + }; + + ScrollUpButton.Click += (o, e) => + { + if (TopLine <= 0) return; + + TopLine--; + + UpdateText(); + UpdatePositionBar(); + }; + + ScrollDownButton = new MirButton + { + Index = 207, + HoverIndex = 208, + Library = Libraries.Prguse2, + PressedIndex = 209, + Parent = this, + Size = new Size(16, 14), + Location = new Point(491, 363), + Sound = SoundList.ButtonA, + Visible = true + }; + + ScrollDownButton.Click += (o, e) => + { + if (TopLine + LineCount >= CMain.InputKeys.Keylist.Count + CMain.InputKeys.Keylist.GroupBy(x => x.Group).Select(y => y.First()).Count()) return; + + TopLine++; + + UpdateText(); + UpdatePositionBar(); + }; + + PositionBar = new MirButton + { + Index = 205, + HoverIndex = 206, + PressedIndex = 206, + Library = Libraries.Prguse2, + Location = new Point(491, 101), + Parent = this, + Movable = true, + Sound = SoundList.None, + Visible = true + }; + PositionBar.OnMoving += PositionBar_OnMoving; + + + ResetButton = new MirButton + { + Index = 120, + HoverIndex = 121, + PressedIndex = 122, + Library = Libraries.Prguse, + Size = new Size(72, 25), + Location = new Point(30, 400), + Parent = this, + Visible = true, + }; + ResetButton.Click += (o, e) => + { + for (int i = 0; i < CMain.InputKeys.Keylist.Count; i++) + { + KeyBind bind = CMain.InputKeys.Keylist[i]; + KeyBind defaultBind = CMain.InputKeys.DefaultKeylist[i]; + + if (bind.Key != defaultBind.Key || bind.RequireAlt != defaultBind.RequireAlt || bind.RequireCtrl != defaultBind.RequireCtrl || bind.RequireShift != defaultBind.RequireShift || bind.RequireTilde != defaultBind.RequireTilde) + { + CMain.InputKeys.Keylist[i].Key = defaultBind.Key; + CMain.InputKeys.Keylist[i].RequireAlt = defaultBind.RequireAlt; + CMain.InputKeys.Keylist[i].RequireCtrl = defaultBind.RequireCtrl; + CMain.InputKeys.Keylist[i].RequireShift = defaultBind.RequireShift; + CMain.InputKeys.Keylist[i].RequireTilde = defaultBind.RequireTilde; + + //CMain.Profile.InputKeys.Save(CMain.Profile.InputKeys.Keylist[i]); + } + } + + UpdateText(); + + MirMessageBox messageBox = new MirMessageBox("Keyboard settings have been reset back to default.", MirMessageBoxButtons.OK); + messageBox.Show(); + }; + + EnforceButton = new MirButton + { + Visible = true, + Index = 1346, + Library = Libraries.Prguse, + Sound = SoundList.ButtonA, + Parent = this, + Location = new Point(105, 406) + }; + EnforceButton.Click += EnforceButton_Click; + + EnforceButtonChecked = new MirImageControl() + { + Visible = Enforce, + Index = 1347, + Library = Libraries.Prguse, + Parent = this, + NotControl = true, + Location = new Point(105, 406) + }; + + EnforceButtonLabel = new MirLabel + { + Visible = true, + NotControl = true, + Parent = this, + Location = new Point(120, 404), + AutoSize = true, + Text = "Assign Rule: Strict" + }; + + UpdateText(); + } + + private void EnforceButton_Click(object sender, EventArgs e) + { + Enforce = !Enforce; + + EnforceButtonChecked.Visible = Enforce; + + if (Enforce) EnforceButtonLabel.Text = "Assign Rule: Strict"; + else EnforceButtonLabel.Text = "Assign Rule: Relaxed"; + } + + public void UpdateText() + { + foreach (MirControl t in Rows) + t.Dispose(); + + Rows.Clear(); + + var orderedList = CMain.InputKeys.Keylist.OrderBy(x => x.Group).ThenBy(x => x.Description).ToList(); + + string currentGroup = ""; + int groupCount = 0; + + for (int i = 0; i < orderedList.Count; i++) + { + if (i < TopLine) continue; + + int y = (18 * (i - TopLine)) + (groupCount * 30); + + if (y > 260) break; + + if (currentGroup != orderedList[i].Group) + { + Rows.Add(new KeybindHeadingRow(orderedList[i].Group) + { + Parent = this, + Location = new Point(15, 90 + y), + Visible = true, + Size = new Size(400, 40) + }); + + groupCount++; + currentGroup = orderedList[i].Group; + } + + y = (18 * (i - TopLine)) + (groupCount * 30); + + if (y > 260) break; + + Rows.Add(new KeybindRow(orderedList[i].function) + { + Parent = this, + Location = new Point(20, 90 + y), + Visible = true, + Size = new Size(460, 15) + }); + } + } + + private void UpdatePositionBar() + { + if (CMain.InputKeys.Keylist.Count <= LineCount) + { + PositionBar.Visible = false; + return; + } + + PositionBar.Visible = true; + + int interval = (PosMaxY - PosMinY) / (CMain.InputKeys.Keylist.Count - LineCount); + + int x = PosX; + int y = PosMinY + (TopLine * interval); + + if (y >= PosMaxY) y = PosMaxY; + if (y <= PosMinY) y = PosMinY; + + + PositionBar.Location = new Point(x, y); + } + + private void PositionBar_OnMoving(object sender, MouseEventArgs e) + { + int x = PosX; + int y = PositionBar.Location.Y; + + if (y >= PosMaxY) y = PosMaxY; + if (y <= PosMinY) y = PosMinY; + + int location = y - PosMinY; + int interval = (PosMaxY - PosMinY) / (CMain.InputKeys.Keylist.Count - LineCount); + + double yPoint = (double)location / interval; + + TopLine = Convert.ToInt16(Math.Floor(yPoint)); + + PositionBar.Location = new Point(x, y); + + UpdateText(); + } + + public void CheckNewInput(KeyEventArgs e) + { + if (e.KeyCode == Keys.ControlKey || e.KeyCode == Keys.Menu || e.KeyCode == Keys.ShiftKey || e.KeyCode == Keys.Oem8 || e.KeyCode == Keys.None) return; + + KeyBind bind = CMain.InputKeys.Keylist.Single(x => x.function == WaitingForBind.function); + + //if (CMain.Profile.InputKeys.Keylist.Any(x => x.Key == e.KeyCode && x.RequireAlt == (byte)(CMain.Alt ? 1 : 0) && x.RequireShift == (byte)(CMain.Shift ? 1 : 0) && x.RequireCtrl == (byte)(CMain.Ctrl ? 1 : 0) && x.RequireTilde == (byte)(CMain.Tilde ? 1 : 0))) + //{ + // GameScene.Scene.ChatDialog.ReceiveChat("Another shortcut with this key bind already exists.", ChatType.System); + // WaitingForBind = null; + // UpdateText(); + // return; + //} + + if (e.KeyCode == Keys.Delete) + { + bind.Key = Keys.None; + bind.RequireAlt = bind.RequireShift = bind.RequireCtrl = bind.RequireTilde = 2; + } + else + { + bind.Key = e.KeyCode; + bind.RequireAlt = (byte)(CMain.Alt ? 1 : Enforce ? 0 : 2); + bind.RequireShift = (byte)(CMain.Shift ? 1 : Enforce ? 0 : 2); + bind.RequireCtrl = (byte)(CMain.Ctrl ? 1 : Enforce ? 0 : 2); + bind.RequireTilde = (byte)(CMain.Tilde ? 1 : Enforce ? 0 : 2); + } + + //CMain.Profile.InputKeys.Save(WaitingForBind); + WaitingForBind = null; + UpdateText(); + } + } + + public sealed class KeybindRow : MirControl + { + public MirLabel BindName, DefaultBind; + public MirButton CurrentBindButton; + + public KeyBind KeyBind; + + public KeybindRow(KeybindOptions option) + { + KeyBind defaultBind = CMain.InputKeys.DefaultKeylist.Single(x => x.function == option); + KeyBind currentBind = CMain.InputKeys.Keylist.Single(x => x.function == option); + + KeyBind = currentBind; + + BindName = new MirLabel + { + Parent = this, + Size = new Size(200, 15), + Location = new Point(0, 0), + Text = defaultBind.Description, + Visible = true + }; + + DefaultBind = new MirLabel + { + Parent = this, + Size = new Size(100, 15), + Location = new Point(200, 0), + Text = CMain.InputKeys.GetKey(option, true), + Visible = true + }; + + CurrentBindButton = new MirButton + { + Parent = this, + Text = string.Format(" {0}", CMain.InputKeys.GetKey(option, false)), + Location = new Point(340, 0), + Size = new Size(120, 16), + Visible = true, + Index = 190, + Library = Libraries.Prguse2, + HoverIndex = 191, + PressedIndex = 192 + }; + CurrentBindButton.Click += (o, e) => + { + if (GameScene.Scene.KeyboardLayoutDialog.WaitingForBind != null) + { + GameScene.Scene.KeyboardLayoutDialog.WaitingForBind = null; + GameScene.Scene.KeyboardLayoutDialog.UpdateText(); + return; + } + + GameScene.Scene.KeyboardLayoutDialog.WaitingForBind = KeyBind; + + ((MirButton)o).Text = string.Format(" {0}", "????"); + ((MirButton)o).Index = 192; + ((MirButton)o).HoverIndex = 192; + ((MirButton)o).PressedIndex = 192; + }; + + } + } + + public sealed class KeybindHeadingRow : MirControl + { + public MirImageControl BulletImage, SpacerImage; + public MirLabel BulletLabel; + + public KeybindHeadingRow(string groupName) + { + BulletImage = new MirImageControl + { + Parent = this, + Index = 201, + Library = Libraries.Prguse2, + Size = new Size(8, 6), + Location = new Point(10, 10), + Visible = true + }; + + BulletLabel = new MirLabel + { + Parent = this, + Text = groupName, + Size = new Size(100, 20), + Location = new Point(20, 5), + Font = new Font(Settings.FontName, Settings.FontSize + 1, FontStyle.Bold), + Visible = true + }; + + SpacerImage = new MirImageControl + { + Parent = this, + Index = 202, + Library = Libraries.Prguse2, + Size = new Size(3, 464), + Location = new Point(0, 25), + Visible = true + }; + } + } + +} diff --git a/Client/MirScenes/Dialogs/MailDialogs.cs b/Client/MirScenes/Dialogs/MailDialogs.cs new file mode 100644 index 0000000..2fd6033 --- /dev/null +++ b/Client/MirScenes/Dialogs/MailDialogs.cs @@ -0,0 +1,1274 @@ +using Client.MirControls; +using Client.MirGraphics; +using Client.MirSounds; +using Client.MirNetwork; +using C = ClientPackets; + +namespace Client.MirScenes.Dialogs +{ + public class MailListDialog : MirImageControl + { + MirImageControl TitleLabel; + MirButton HelpButton, CloseButton; + MirLabel TitleTypeLabel, TitleSenderLabel, TitleMessageLabel; + //Send / Reply (Can only reply if index exists, button will disapear if not) / Read / Delete / Block List / Bug Report (new system??) + + MirLabel PageLabel; + MirButton PreviousButton, NextButton; + MirButton SendButton, ReplyButton, ReadButton, DeleteButton, BlockListButton, BugReportButton; + + public MailItemRow[] Rows = new MailItemRow[10]; + + public ClientMail SelectedMail; + public int SelectedIndex; + + private int StartIndex = 0; + private int CurrentPage = 1, PageCount = 1; + + public MailListDialog() + { + Index = 670; + Library = Libraries.Prguse; + Size = new Size(312, 444); + Movable = true; + Sort = true; + Location = new Point((Settings.ScreenWidth - Size.Width) - 150, 5); + + TitleLabel = new MirImageControl + { + Index = 7, + Library = Libraries.Prguse, + Location = new Point(18, 9), + Parent = this + }; + + TitleTypeLabel = new MirLabel + { + Text = "TYPE", + Parent = this, + Font = new Font(Settings.FontName, Settings.FontSize - 1, FontStyle.Italic), + DrawFormat = TextFormatFlags.VerticalCenter | TextFormatFlags.HorizontalCenter, + Size = new Size(37, 19), + Location = new Point(8, 34) + }; + + TitleSenderLabel = new MirLabel + { + Text = "SENDER", + Parent = this, + Font = new Font(Settings.FontName, Settings.FontSize - 1, FontStyle.Italic), + DrawFormat = TextFormatFlags.VerticalCenter | TextFormatFlags.HorizontalCenter, + Size = new Size(132, 19), + Location = new Point(47, 34) + }; + + TitleMessageLabel = new MirLabel + { + Text = "MESSAGE", + Parent = this, + Font = new Font(Settings.FontName, Settings.FontSize - 1, FontStyle.Italic), + DrawFormat = TextFormatFlags.VerticalCenter | TextFormatFlags.HorizontalCenter, + Size = new Size(122, 19), + Location = new Point(181, 34) + }; + + CloseButton = new MirButton + { + HoverIndex = 361, + Index = 360, + Location = new Point(Size.Width - 24, 3), + Library = Libraries.Prguse2, + Parent = this, + PressedIndex = 362, + Sound = SoundList.ButtonA, + }; + CloseButton.Click += (o, e) => Hide(); + + HelpButton = new MirButton + { + Index = 257, + HoverIndex = 258, + PressedIndex = 259, + Library = Libraries.Prguse2, + Parent = this, + Location = new Point(Size.Width - 50, 3), + Sound = SoundList.ButtonA, + }; + HelpButton.Click += (o, e) => GameScene.Scene.HelpDialog.DisplayPage(""); + + PreviousButton = new MirButton + { + Index = 240, + HoverIndex = 241, + PressedIndex = 242, + Library = Libraries.Prguse2, + Parent = this, + Location = new Point(102, Size.Height - 55), + Sound = SoundList.ButtonA, + }; + PreviousButton.Click += (o, e) => + { + if (CurrentPage <= 1) return; + + SelectedMail = null; + + CurrentPage--; + + StartIndex -= 10; + + UpdateInterface(); + }; + + PageLabel = new MirLabel + { + Text = "", + Parent = this, + Location = new Point(120, Size.Height - 55), + Size = new Size(67, 15), + DrawFormat = TextFormatFlags.VerticalCenter | TextFormatFlags.HorizontalCenter, + }; + + NextButton = new MirButton + { + Index = 243, + HoverIndex = 244, + PressedIndex = 245, + Library = Libraries.Prguse2, + Parent = this, + Location = new Point(192, Size.Height - 55), + Sound = SoundList.ButtonA, + }; + NextButton.Click += (o, e) => + { + if (CurrentPage >= PageCount) return; + + SelectedMail = null; + + CurrentPage++; + StartIndex += 10; + + UpdateInterface(); + }; + + #region Action Buttons + SendButton = new MirButton + { + Index = 563, + HoverIndex = 564, + PressedIndex = 565, + Library = Libraries.Prguse, + Parent = this, + Location = new Point(75, 414), + Sound = SoundList.ButtonA, + Hint = GameLanguage.Send + }; + SendButton.Click += (o, e) => + { + MirInputBox inputBox = new MirInputBox(GameLanguage.EnterMailToName); + + inputBox.OKButton.Click += (o1, e1) => + { + //open letter dialog, pass in name + GameScene.Scene.MailComposeLetterDialog.ComposeMail(inputBox.InputTextBox.Text); + + inputBox.Dispose(); + }; + + inputBox.Show(); + }; + + ReplyButton = new MirButton + { + Index = 569, + HoverIndex = 570, + PressedIndex = 571, + Library = Libraries.Prguse, + Parent = this, + Location = new Point(102, 414), + Sound = SoundList.ButtonA, + Hint = GameLanguage.Reply + }; + ReplyButton.Click += (o, e) => + { + if (SelectedMail == null) return; + + GameScene.Scene.MailComposeLetterDialog.ComposeMail(SelectedMail.SenderName); + }; + + ReadButton = new MirButton + { + Index = 572, + HoverIndex = 573, + PressedIndex = 574, + Library = Libraries.Prguse, + Parent = this, + Location = new Point(129, 414), + Sound = SoundList.ButtonA, + Hint = GameLanguage.Read + }; + ReadButton.Click += (o, e) => + { + if (SelectedMail == null) return; + + if(SelectedMail.Gold > 0 || SelectedMail.Items.Count > 0) + { + GameScene.Scene.MailReadParcelDialog.ReadMail(SelectedMail); + } + else + { + GameScene.Scene.MailReadLetterDialog.ReadMail(SelectedMail); + } + }; + + DeleteButton = new MirButton + { + Index = 557, + HoverIndex = 558, + PressedIndex = 559, + Library = Libraries.Prguse, + Parent = this, + Location = new Point(156, 414), + Sound = SoundList.ButtonA, + Hint = GameLanguage.Delete + }; + DeleteButton.Click += (o, e) => + { + if (SelectedMail == null || SelectedMail.Locked) return; + + if (SelectedMail.Items.Count > 0 || SelectedMail.Gold > 0) + { + MirMessageBox messageBox = new MirMessageBox("This parcel contains items or gold. Are you sure you want to delete it?", MirMessageBoxButtons.YesNo); + + messageBox.YesButton.Click += (o1, e1) => + { + Network.Enqueue(new C.DeleteMail { MailID = SelectedMail.MailID }); + SelectedMail = null; + }; + + messageBox.Show(); + } + else + { + Network.Enqueue(new C.DeleteMail { MailID = SelectedMail.MailID }); + SelectedMail = null; + } + }; + + BlockListButton = new MirButton + { + Index = 520, + HoverIndex = 521, + PressedIndex = 522, + Library = Libraries.Prguse, + Parent = this, + Location = new Point(183, 414), + Sound = SoundList.ButtonA, + Hint = GameLanguage.BlockList, + GrayScale = true, + Enabled = false + }; + + BugReportButton = new MirButton + { + Index = 523, + HoverIndex = 524, + PressedIndex = 525, + Library = Libraries.Prguse, + Parent = this, + Location = new Point(210, 414), + Sound = SoundList.ButtonA, + Hint = "Report Bug", + GrayScale = true, + Enabled = false + }; + #endregion + + + } + + public void Reset() + { + for (int i = 0; i < Rows.Length; i++) + { + if (Rows[i] != null) Rows[i].Dispose(); + + Rows[i] = null; + } + } + + public void UpdateInterface() + { + Reset(); + + PageCount = (int)Math.Ceiling((double)GameScene.User.Mail.Count / 10); + if (PageCount < 1) PageCount = 1; + + PageLabel.Text = string.Format("{0} / {1}", CurrentPage, PageCount); + + for (int i = 0; i < Rows.Length; i++) + { + if (i + StartIndex >= GameScene.User.Mail.Count) break; + + if (Rows[i] != null) + Rows[i].Dispose(); + + Rows[i] = new MailItemRow + { + Mail = GameScene.User.Mail[i + StartIndex], + Location = new Point(10, 55 + i * 33), + Parent = this + }; + + Rows[i].Click += (o, e) => + { + MailItemRow row = (MailItemRow)o; + + if (row.Mail != SelectedMail) + { + SelectedMail = row.Mail; + SelectedIndex = FindSelectedIndex(); + UpdateRows(); + } + else + { + if (SelectedMail.Gold > 0 || SelectedMail.Items.Count > 0) + { + GameScene.Scene.MailReadParcelDialog.ReadMail(SelectedMail); + } + else + { + GameScene.Scene.MailReadLetterDialog.ReadMail(SelectedMail); + } + } + }; + + if (SelectedMail != null) + { + if(SelectedMail.MailID == Rows[i].Mail.MailID) + { + SelectedMail = Rows[i].Mail; + } + } + } + + UpdateRows(); + } + + public int FindSelectedIndex() + { + int selectedIndex = 0; + if (SelectedMail != null) + { + for (int i = 0; i < Rows.Length; i++) + { + if (Rows[i] == null || SelectedMail != Rows[i].Mail) continue; + + selectedIndex = i; + } + } + + return selectedIndex; + } + + public void UpdateRows() + { + for (int i = 0; i < Rows.Length; i++) + { + if (Rows[i] == null) continue; + + Rows[i].Selected = false; + + if (Rows[i].Mail == SelectedMail) + { + Rows[i].Selected = true; + } + + Rows[i].UpdateInterface(); + } + + if(SelectedMail != null) + { + ReplyButton.Visible = SelectedMail.CanReply; + } + } + + public override void Show() + { + if (Visible) return; + Visible = true; + + UpdateInterface(); + } + + public override void Hide() + { + if (!Visible) return; + Visible = false; + + SelectedMail = null; + SelectedIndex = -1; + } + + public void Toggle() + { + if (!Visible) + Show(); + else + Hide(); + } + } + + public class MailItemRow : MirControl + { + public ClientMail Mail = null; + + public MirLabel SenderLabel, MessageLabel; + public MirImageControl IconImage, UnreadImage, ParcelImage, LockedImage, SelectedImage; + + public bool Selected = false; + + Size IconArea = new Size(34, 32); + + public MailItemRow() + { + Sound = SoundList.ButtonA; + Size = new Size(290, 33); + + BeforeDraw += QuestRow_BeforeDraw; + + IconImage = new MirImageControl + { + Index = 0, + Library = Libraries.Prguse, + Location = new Point(0, 0), + Parent = this + }; + + UnreadImage = new MirImageControl + { + Index = 550, + Library = Libraries.Prguse, + Location = new Point(5, 17), + Parent = this, + Visible = false + }; + + LockedImage = new MirImageControl + { + Index = 551, + Library = Libraries.Prguse, + Location = new Point(5, 17), + Parent = this, + Visible = false + }; + + ParcelImage = new MirImageControl + { + Index = 552, + Library = Libraries.Prguse, + Location = new Point(5, 17), //20 + Parent = this, + Visible = false + }; + + + SelectedImage = new MirImageControl + { + Index = 545, + Library = Libraries.Prguse, + Location = new Point(-5, -3), + Parent = this, + Visible = false, + NotControl = true + }; + + SenderLabel = new MirLabel + { + Location = new Point(35, 0), + Size = new Size(130, 31), + DrawFormat = TextFormatFlags.VerticalCenter, + Parent = this, + NotControl = true, + }; + + MessageLabel = new MirLabel + { + Location = new Point(170, 0), + Size = new Size(115, 31), + DrawFormat = TextFormatFlags.VerticalCenter, + Parent = this, + NotControl = true, + }; + + UpdateInterface(); + } + + void QuestRow_BeforeDraw(object sender, EventArgs e) + { + UpdateInterface(); + } + + public void UpdateInterface() + { + if (Mail == null) return; + + IconImage.Visible = true; + + if (Mail.Items.Count > 0) + { + IconImage.Index = Mail.Items[0].Info.Image; + IconImage.Library = Libraries.Items; + } + else if (Mail.Gold > 0) + { + IconImage.Index = 541; + IconImage.Library = Libraries.Prguse; + } + else + { + IconImage.Index = 540; + IconImage.Library = Libraries.Prguse; + } + + IconImage.Location = new Point((IconArea.Width - IconImage.Size.Width) /2, (IconArea.Height - IconImage.Size.Height) / 2); + + + if (!Mail.Opened) + { + UnreadImage.Visible = true; + } + + if (Mail.Locked) + { + LockedImage.Visible = true; + } + + if (!Mail.Collected) + { + ParcelImage.Visible = true; + + if (!Mail.Opened) + { + //move unread to second position if not collected parcel + UnreadImage.Location = new Point(20, 17); + } + } + else + { + if (Mail.Locked) + { + //move unread to second position if locked + UnreadImage.Location = new Point(20, 17); + } + } + + SenderLabel.Text = Mail.SenderName; + MessageLabel.Text = Mail.Locked ? "[*] " + Mail.Message.Replace("\r\n", " ") : Mail.Message.Replace("\r\n", " "); + + SelectedImage.Visible = Selected; + } + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + + Mail = null; + SenderLabel = null; + MessageLabel = null; + SelectedImage = null; + IconImage = null; + + Selected = false; + } + + protected override void OnMouseEnter() + { + base.OnMouseEnter(); + GameScene.Scene.CreateMailLabel(Mail); + } + protected override void OnMouseLeave() + { + base.OnMouseLeave(); + GameScene.Scene.DisposeMailLabel(); + } + } + + public class MailComposeLetterDialog : MirImageControl + { + MirLabel RecipientNameLabel; + MirTextBox MessageTextBox; + MirButton SendButton, CancelButton, CloseButton; + + public MailComposeLetterDialog() + { + Index = 671; + Library = Libraries.Prguse; + Size = new Size(236, 300); + Movable = true; + Sort = true; + Location = new Point(100, 100); + + CloseButton = new MirButton + { + HoverIndex = 361, + Index = 360, + Location = new Point(Size.Width - 27, 3), + Library = Libraries.Prguse2, + Parent = this, + PressedIndex = 362, + Sound = SoundList.ButtonA, + }; + CloseButton.Click += (o, e) => Hide(); + + + RecipientNameLabel = new MirLabel + { + Text = "", + Parent = this, + Font = new Font(Settings.FontName, 8F), + ForeColour = Color.White, + Location = new Point(70, 35), + Size = new Size(150, 15), + NotControl = true, + }; + + MessageTextBox = new MirTextBox + { + ForeColour = Color.White, + Parent = this, + Font = new Font(Settings.FontName, 8F), + Location = new Point(15, 92), + Size = new Size(202, 165), + }; + + MessageTextBox.MultiLine(); + + SendButton = new MirButton + { + Index = 607, + HoverIndex = 608, + PressedIndex = 609, + Parent = this, + Library = Libraries.Prguse, + Sound = SoundList.ButtonA, + Location = new Point(30, 265) + }; + SendButton.Click += (o, e) => + { + Network.Enqueue(new C.SendMail { Name = RecipientNameLabel.Text, Message = MessageTextBox.Text }); + Hide(); + }; + + CancelButton = new MirButton + { + Index = 193, + HoverIndex = 194, + PressedIndex = 195, + Parent = this, + Library = Libraries.Prguse, + Sound = SoundList.ButtonA, + Location = new Point(135, 265) + }; + CancelButton.Click += (o, e) => Hide(); + } + + public void ComposeMail(string recipientName, string message = "") + { + if (string.IsNullOrEmpty(recipientName)) return; + + RecipientNameLabel.Text = recipientName; + MessageTextBox.Text = message; + + MessageTextBox.SetFocus(); + + Visible = true; + } + } + public class MailComposeParcelDialog : MirImageControl + { + public MirLabel RecipientNameLabel, ParcelCostLabel, GoldSendLabel; + MirTextBox MessageTextBox; + MirButton StampButton, SendButton, CancelButton, CloseButton; + MirImageControl ItemCover; + + private const uint _cellCount = 5; + + public MirItemCell[] Cells = new MirItemCell[_cellCount]; + + public static UserItem[] Items = new UserItem[_cellCount]; + public static ulong[] ItemsIdx = new ulong[_cellCount]; + + public uint GiftGoldAmount = 0; + public bool Stamped = false; + + public MailComposeParcelDialog() + { + Index = 674; + Library = Libraries.Prguse; + Size = new Size(236, 384); + Movable = true; + Sort = true; + Location = new Point(GameScene.Scene.InventoryDialog.Size.Width + 10, 0); + + CloseButton = new MirButton + { + HoverIndex = 361, + Index = 360, + Location = new Point(Size.Width - 27, 3), + Library = Libraries.Prguse2, + Parent = this, + PressedIndex = 362, + Sound = SoundList.ButtonA, + }; + CloseButton.Click += (o, e) => + { + ResetLockedCells(); + Hide(); + }; + + RecipientNameLabel = new MirLabel + { + Text = "", + Parent = this, + Font = new Font(Settings.FontName, 8F), + ForeColour = Color.White, + Location = new Point(70, 35), + Size = new Size(150, 15), + NotControl = true, + }; + + MessageTextBox = new MirTextBox + { + ForeColour = Color.White, + Parent = this, + Font = new Font(Settings.FontName, 8F), + Location = new Point(15, 98), + Size = new Size(202, 165), + }; + + MessageTextBox.MultiLine(); + + StampButton = new MirButton + { + Index = 203, + HoverIndex = 203, + PressedIndex = 203, + Location = new Point(73, 56), + Size = new Size(20,20), + Library = Libraries.Prguse2, + Parent = this, + Sound = SoundList.ButtonA, + }; + StampButton.Click += (o, e) => + { + StampParcel(); + }; + + ItemCover = new MirImageControl + { + Index = 676, + Location = new Point(63, 310), + Size = new Size(144, 33), + Library = Libraries.Prguse, + Parent = this + }; + + for (int i = 0; i < Cells.Length; i++) + { + Cells[i] = new MirItemCell + { + BorderColour = Color.Lime, + Size = new Size(35, 31), + GridType = MirGridType.Mail, + Library = Libraries.Items, + Parent = this, + Location = new Point(27 + (i * 36), 311), + ItemSlot = i + }; + } + + ParcelCostLabel = new MirLabel + { + DrawFormat = TextFormatFlags.VerticalCenter, + Font = new Font(Settings.FontName, 8F), + Location = new Point(63, 269), + Parent = this, + Size = new Size(143, 15), + }; + + GoldSendLabel = new MirLabel + { + DrawFormat = TextFormatFlags.VerticalCenter, + Font = new Font(Settings.FontName, 8F), + Location = new Point(63, 290), + Parent = this, + Size = new Size(143, 15), + Sound = SoundList.Gold, + }; + GoldSendLabel.Click += (o, e) => + { + if (GameScene.SelectedCell == null && GameScene.Gold > 0) + { + MirAmountBox amountBox = new MirAmountBox("Send Amount:", 38, Libraries.Prguse, GameScene.Gold); + + amountBox.OKButton.Click += (c, a) => + { + if (amountBox.Amount > 0) + { + GiftGoldAmount += amountBox.Amount; + GameScene.Gold -= amountBox.Amount; + } + + GoldSendLabel.Text = GiftGoldAmount.ToString("###,###,##0"); + + CalculatePostage(); + }; + + amountBox.Show(); + GameScene.PickedUpGold = false; + } + }; + + SendButton = new MirButton + { + Index = 607, + HoverIndex = 608, + PressedIndex = 609, + Parent = this, + Library = Libraries.Prguse, + Sound = SoundList.ButtonA, + Location = new Point(30, 350) + }; + SendButton.Click += (o, e) => + { + Network.Enqueue(new C.SendMail { Name = RecipientNameLabel.Text, Message = MessageTextBox.Text, Gold = GiftGoldAmount, ItemsIdx = ItemsIdx, Stamped = Stamped }); + }; + + CancelButton = new MirButton + { + Index = 193, + HoverIndex = 194, + PressedIndex = 195, + Parent = this, + Library = Libraries.Prguse, + Sound = SoundList.ButtonA, + Location = new Point(135, 350) + }; + CancelButton.Click += (o, e) => + { + ResetLockedCells(); + Hide(); + }; + } + + public override void Hide() + { + if (!Visible) return; + Visible = false; + + Reset(); + } + + public void Reset() + { + GameScene.Gold += GiftGoldAmount; + GiftGoldAmount = 0; + Stamped = false; + + ResetLockedCells(); + } + + public void ResetLockedCells() + { + for (int i = 0; i < _cellCount; i++) + { + MirItemCell cell = Cells[i]; + + if (cell.Item != null) + { + Network.Enqueue(new C.MailLockedItem { UniqueID = cell.Item.UniqueID, Locked = false }); + cell.Item = null; + } + + ItemsIdx[i] = 0; + } + } + + private void StampParcel() + { + if(!Stamped) + { + for (int i = 0; i < GameScene.User.Inventory.Length; i++) + { + UserItem item = GameScene.User.Inventory[i]; + if (item == null || item.Info.Type != ItemType.Nothing || item.Info.Shape != 1) continue; + + Stamped = true; + break; + } + } + else + Stamped = false; + + CalculatePostage(); + UpdateParcel(); + ResetLockedCells(); + } + + private void UpdateParcel() + { + if (Stamped) + { + StampButton.Index = 204; + StampButton.HoverIndex = 204; + StampButton.PressedIndex = 204; + + for (int i = 1; i < Cells.Length; i++) + { + Cells[i].Enabled = true; + } + + ItemCover.Visible = false; + } + else + { + StampButton.Index = 203; + StampButton.HoverIndex = 203; + StampButton.PressedIndex = 203; + + for (int i = 1; i < Cells.Length; i++) + { + Cells[i].Enabled = false; + } + + ItemCover.Visible = true; + } + } + + + public void CalculatePostage() + { + Network.Enqueue(new C.MailCost { Gold = GiftGoldAmount, ItemsIdx = ItemsIdx, Stamped = Stamped }); + } + + public void ComposeMail(string recipientName) + { + if (string.IsNullOrEmpty(recipientName)) return; + + RecipientNameLabel.Text = recipientName; + MessageTextBox.Text = string.Empty; + MessageTextBox.SetFocus(); + + UpdateParcel(); + + //Disable last 4 item slots + for (int i = 1; i < Cells.Length; i++) + { + Cells[i].Enabled = false; + } + + ParcelCostLabel.Text = "0"; + GoldSendLabel.Text = "0"; + + ResetLockedCells(); + + Visible = true; + } + } + + public class MailReadLetterDialog : MirImageControl + { + MirLabel SenderNameLabel, DateSentLabel, MessageLabel; + + MirButton DeleteButton, LockButton, CancelButton, CloseButton; + + public ClientMail Mail; + + public MailReadLetterDialog() + { + Index = 672; + Library = Libraries.Prguse; + Size = new Size(236, 300); + Movable = true; + Sort = true; + Location = new Point(100, 100); + + CloseButton = new MirButton + { + HoverIndex = 361, + Index = 360, + Location = new Point(Size.Width - 27, 3), + Library = Libraries.Prguse2, + Parent = this, + PressedIndex = 362, + Sound = SoundList.ButtonA, + }; + CloseButton.Click += (o, e) => Hide(); + + SenderNameLabel = new MirLabel + { + Parent = this, + Font = new Font(Settings.FontName, 8F), + ForeColour = Color.White, + Location = new Point(70, 35), + Size = new Size(150, 15), + NotControl = true, + }; + + DateSentLabel = new MirLabel + { + Parent = this, + Font = new Font(Settings.FontName, 8F), + ForeColour = Color.White, + Location = new Point(70, 56), + Size = new Size(150, 15), + NotControl = true, + }; + + MessageLabel = new MirLabel + { + ForeColour = Color.White, + Parent = this, + Font = new Font(Settings.FontName, 8F), + Location = new Point(15, 92), + Size = new Size(202, 165), + }; + + DeleteButton = new MirButton + { + Index = 540, + HoverIndex = 541, + PressedIndex = 542, + Parent = this, + Library = Libraries.Prguse, + Sound = SoundList.ButtonA, + Location = new Point(12, 265) + }; + DeleteButton.Click += (o, e) => + { + if (Mail.Locked) return; + + Network.Enqueue(new C.DeleteMail { MailID = Mail.MailID }); + + Mail = null; + + Hide(); + }; + + LockButton = new MirButton + { + Index = 686, + HoverIndex = 687, + PressedIndex = 688, + Parent = this, + Library = Libraries.Prguse, + Sound = SoundList.ButtonA, + Location = new Point(81, 265) + }; + LockButton.Click += (o, e) => + { + Mail.Locked = !Mail.Locked; + + //GameScene.Scene.MailListDialog.SelectedMail = null; + + Network.Enqueue(new C.LockMail { MailID = Mail.MailID, Lock = Mail.Locked }); + }; + + CancelButton = new MirButton + { + Index = 193, + HoverIndex = 194, + PressedIndex = 195, + Parent = this, + Library = Libraries.Prguse, + Sound = SoundList.ButtonA, + Location = new Point(154, 265) + }; + CancelButton.Click += (o, e) => Hide(); + } + + public void ReadMail(ClientMail mail) + { + if (mail == null) return; + + Mail = mail; + + if (!Mail.Opened) + { + Network.Enqueue(new C.ReadMail { MailID = Mail.MailID }); + } + + SenderNameLabel.Text = Mail.SenderName; + DateSentLabel.Text = Mail.DateSent.ToString("dd/MM/yy H:mm:ss"); + MessageLabel.Text = Mail.Message.Replace("\\r\\n", "\r\n"); + + Visible = true; + } + } + public class MailReadParcelDialog : MirImageControl + { + MirLabel SenderNameLabel, DateSentLabel, MessageLabel, GoldSendLabel; + + MirButton CollectButton, CancelButton, CloseButton; + + public MirItemCell[] Cells = new MirItemCell[5]; + + public ClientMail Mail; + + public MailReadParcelDialog() + { + Index = 675; + Library = Libraries.Prguse; + Size = new Size(236, 300); + Movable = true; + Sort = true; + Location = new Point(100, 100); + + CloseButton = new MirButton + { + HoverIndex = 361, + Index = 360, + Location = new Point(Size.Width - 27, 3), + Library = Libraries.Prguse2, + Parent = this, + PressedIndex = 362, + Sound = SoundList.ButtonA, + }; + CloseButton.Click += (o, e) => Hide(); + + SenderNameLabel = new MirLabel + { + Parent = this, + Font = new Font(Settings.FontName, 8F), + ForeColour = Color.White, + Location = new Point(70, 35), + Size = new Size(150, 15), + NotControl = true, + }; + + DateSentLabel = new MirLabel + { + Parent = this, + Font = new Font(Settings.FontName, 8F), + ForeColour = Color.White, + Location = new Point(70, 56), + Size = new Size(150, 15), + NotControl = true, + }; + + MessageLabel = new MirLabel + { + ForeColour = Color.White, + Parent = this, + Font = new Font(Settings.FontName, 8F), + Location = new Point(15, 98), + Size = new Size(202, 165), + }; + + GoldSendLabel = new MirLabel + { + DrawFormat = TextFormatFlags.VerticalCenter, + Font = new Font(Settings.FontName, 8F), + Location = new Point(63, 290), + Parent = this, + Size = new Size(143, 15), + }; + + CollectButton = new MirButton + { + Index = 370, + HoverIndex = 371, + PressedIndex = 372, + Parent = this, + Library = Libraries.Prguse, + Sound = SoundList.ButtonA, + Location = new Point(30, 350) + }; + CollectButton.Click += (o, e) => + { + Network.Enqueue(new C.CollectParcel { MailID = Mail.MailID }); + }; + + CancelButton = new MirButton + { + Index = 193, + HoverIndex = 194, + PressedIndex = 195, + Parent = this, + Library = Libraries.Prguse, + Sound = SoundList.ButtonA, + Location = new Point(135, 350) + }; + CancelButton.Click += (o, e) => Hide(); + } + + public void ReadMail(ClientMail mail) + { + if (mail == null) return; + + Mail = mail; + + if (!Mail.Opened) + { + Network.Enqueue(new C.ReadMail { MailID = Mail.MailID }); + } + + ResetCells(); + + SenderNameLabel.Text = Mail.SenderName; + DateSentLabel.Text = Mail.DateSent.ToString("dd/MM/yy H:mm:ss"); + MessageLabel.Text = Mail.Message.Replace("\\r\\n", "\r\n"); + GoldSendLabel.Text = Mail.Gold.ToString("###,###,##0"); + + if (Mail.Items.Count > 0) + { + for (int i = 0; i < Cells.Length; i++) + { + if (i >= Mail.Items.Count) break; + + Cells[i] = new MirItemCell + { + BorderColour = Color.Lime, + Size = new Size(35, 31), + GridType = MirGridType.Mail, + Library = Libraries.Items, + Parent = this, + Location = new Point(27 + (i * 36), 311), + ItemSlot = i, + Item = Mail.Items[i] + }; + } + } + + if (!Mail.Collected) + { + CollectButton.Index = 683; + CollectButton.HoverIndex = 684; + CollectButton.PressedIndex = 685; + CollectButton.Enabled = false; + } + else + { + CollectButton.Index = 680; + CollectButton.HoverIndex = 681; + CollectButton.PressedIndex = 682; + CollectButton.Enabled = true; + } + + Visible = true; + } + + public void ResetCells() + { + foreach (var item in Cells) + { + if (item == null) continue; + + if (item.Item != null) + { + item.Item = null; + } + } + } + } +} diff --git a/Client/MirScenes/Dialogs/MainDialogs.cs b/Client/MirScenes/Dialogs/MainDialogs.cs new file mode 100644 index 0000000..2752a40 --- /dev/null +++ b/Client/MirScenes/Dialogs/MainDialogs.cs @@ -0,0 +1,2303 @@ +using System.Text.RegularExpressions; +using Client.MirControls; +using Client.MirGraphics; +using Client.MirNetwork; +using Client.MirObjects; +using Client.MirSounds; +using Font = System.Drawing.Font; +using C = ClientPackets; + +namespace Client.MirScenes.Dialogs +{ + public sealed class MainDialog : MirImageControl + { + public static UserObject User + { + get { return MapObject.User; } + set { MapObject.User = value; } + } + + public MirImageControl TopBar, LeftCap, RightCap, Decoration1, Decoration2, Decoration3, Decoration4, HealthOrb, ManaOrb; + public MirButton InventoryButton, CharacterButton, SkillButton, LipsButton, MiniMapButton, HelpButton, QuitButton; + public MirLabel LocationLabel, NameLabel, MapLabel; + + public MainDialog() + { + Index = 69; + Library = Libraries.Prguse; + Location = new Point(0, Settings.ScreenHeight - Size.Height); + PixelDetect = true; + + LeftCap = new MirImageControl + { + Index = 74, + Library = Libraries.Prguse, + Parent = this + }; + RightCap = new MirImageControl + { + Index = 75, + Library = Libraries.Prguse, + Parent = this + }; + + + TopBar = new MirImageControl + { + Index = 73, + Library = Libraries.Prguse, + Location = new Point(0, 0 - Location.Y), + Parent = this + }; + + LeftCap.Location = new Point(0, TopBar.Size.Height - Location.Y); + RightCap.Location = new Point(Settings.ScreenWidth - RightCap.Size.Width, TopBar.Size.Height - Location.Y); + + Decoration1 = new MirImageControl + { + Index = 156, + Library = Libraries.Prguse, + Parent = RightCap + }; + Decoration1.Location = new Point(RightCap.Size.Width - Decoration1.Size.Width, RightCap.Size.Height - 298); + + Decoration2 = new MirImageControl + { + Index = 153, + Library = Libraries.Prguse, + Parent = TopBar + }; + + Decoration3 = new MirImageControl + { + Index = 154, + Library = Libraries.Prguse, + Parent = TopBar, + Location = new Point(Decoration2.Size.Width, 0) + }; + + Decoration4 = new MirImageControl + { + Index = 155, + Library = Libraries.Prguse, + Parent = TopBar, + Location = new Point(Decoration2.Size.Width + Decoration3.Size.Width + 20, 0) + }; + + LocationLabel = new MirLabel + { + AutoSize = true, + Parent = Decoration4, + ForeColour = Color.Yellow, + Location = new Point(12, 6), + }; + + NameLabel = new MirLabel + { + AutoSize = true, + Parent = TopBar, + Location = new Point(TopBar.Size.Width - 95, 8), + }; + + MapLabel = new MirLabel + { + AutoSize = true, + Parent = this, + Location = new Point(Size.Width - 110, - 118), + }; + + CharacterButton = new MirButton + { + Index = 0, + Library = Libraries.Prguse2, + Location = new Point(Size.Width - 258, 3), + Parent = this, + PressedIndex = 1, + Sound = SoundList.ButtonA, + Hint = string.Format(GameLanguage.Character, CMain.InputKeys.GetKey(KeybindOptions.Equipment)) + }; + CharacterButton.Click += (o, e) => + { + if (GameScene.Scene.CharacterDialog.Visible) + GameScene.Scene.CharacterDialog.Hide(); + else + GameScene.Scene.CharacterDialog.Show(); + }; + + InventoryButton = new MirButton + { + Index = 2, + Library = Libraries.Prguse2, + Location = new Point(Size.Width - 225, 3), + Parent = this, + PressedIndex = 3, + Sound = SoundList.ButtonA, + Hint = string.Format(GameLanguage.Inventory, CMain.InputKeys.GetKey(KeybindOptions.Inventory)) + }; + InventoryButton.Click += (o, e) => + { + if (GameScene.Scene.InventoryDialog.Visible) + GameScene.Scene.InventoryDialog.Hide(); + else + GameScene.Scene.InventoryDialog.Show(); + }; + + SkillButton = new MirButton + { + Index = 4, + Library = Libraries.Prguse2, + Location = new Point(Size.Width - 192, 3), + Parent = this, + PressedIndex = 5, + Sound = SoundList.ButtonA, + Hint = string.Format(GameLanguage.Skills, CMain.InputKeys.GetKey(KeybindOptions.Skills)) + }; + SkillButton.Click += (o, e) => + { + }; + + LipsButton = new MirButton + { + Index = 6, + Library = Libraries.Prguse2, + Location = new Point(Size.Width - 159, 3), + Parent = this, + PressedIndex = 7, + Sound = SoundList.ButtonA, + Hint = string.Format(GameLanguage.Quests, CMain.InputKeys.GetKey(KeybindOptions.Quests)) + }; + LipsButton.Click += (o, e) => + { + }; + + MiniMapButton = new MirButton + { + Index = 8, + Library = Libraries.Prguse2, + Location = new Point(Size.Width - 126, 3), + Parent = this, + PressedIndex = 9, + Sound = SoundList.ButtonA, + Hint = string.Format(GameLanguage.Options, CMain.InputKeys.GetKey(KeybindOptions.Options)) + }; + MiniMapButton.Click += (o, e) => + { + GameScene.Scene.BigMapDialog.Toggle(); + }; + + HelpButton = new MirButton + { + Index = 10, + Library = Libraries.Prguse2, + Location = new Point(Size.Width - 93, 3), + Parent = this, + PressedIndex = 11, + Sound = SoundList.ButtonA, + Hint = string.Format(GameLanguage.Help, CMain.InputKeys.GetKey(KeybindOptions.Help)) + }; + HelpButton.Click += (o, e) => + { + }; + + QuitButton = new MirButton + { + Index = 12, + Library = Libraries.Prguse2, + Location = new Point(Size.Width - 51, 4), + Parent = this, + PressedIndex = 13, + Sound = SoundList.ButtonA, + Hint = string.Format(GameLanguage.Exit, CMain.InputKeys.GetKey(KeybindOptions.Exit)) + }; + QuitButton.Click += (o, e) => + { + GameScene.Scene.QuitGame(); + }; + + HealthOrb = new MirImageControl + { + Library = Libraries.Prguse, + Index = 76, + DrawImage = false, + Parent = TopBar, + Location = new Point(437, 9), + NotControl = true, + }; + HealthOrb.BeforeDraw += HealthOrb_BeforeDraw; + + ManaOrb = new MirImageControl + { + Library = Libraries.Prguse, + Index = 77, + DrawImage = false, + Parent = TopBar, + Location = new Point(576, 9), + NotControl = true, + }; + ManaOrb.BeforeDraw += ManaOrb_BeforeDraw; + } + + public void Process() + { + /*if (Settings.HPView) + { + HealthLabel.Text = string.Format("HP {0}/{1}", User.HP, User.Stats[Stat.HP]); + ManaLabel.Text = string.Format("MP {0}/{1} ", User.MP, User.Stats[Stat.MP]); + TopLabel.Text = string.Empty; + BottomLabel.Text = string.Empty; + } + else + { + if (HPOnly) + { + TopLabel.Text = string.Format("{0}\n" + "--", User.HP); + BottomLabel.Text = string.Format("{0}", User.Stats[Stat.HP]); + } + else + { + TopLabel.Text = string.Format(" {0} {1} \n" + "---------------", User.HP, User.MP); + BottomLabel.Text = string.Format(" {0} {1} ", User.Stats[Stat.HP], User.Stats[Stat.MP]); + } + HealthLabel.Text = string.Empty; + ManaLabel.Text = string.Empty; + }*/ + + LocationLabel.Text = Functions.PointToString(MapObject.User.CurrentLocation); + NameLabel.Text = MapObject.User?.Name ?? string.Empty; + } + + private void HealthOrb_BeforeDraw(object sender, EventArgs e) + { + double percent = User.HP / (double)User.Stats[Stat.HP]; + if (percent > 1) percent = 1; + if (percent <= 0) return; + + Rectangle section = new Rectangle + { + Size = new Size((int)((HealthOrb.Size.Width - 3) * percent), HealthOrb.Size.Height) + }; + + HealthOrb.Library.Draw(HealthOrb.Index, section, HealthOrb.DisplayLocation, Color.White, false); + } + + private void ManaOrb_BeforeDraw(object sender, EventArgs e) + { + double percent = User.MP / (double)User.Stats[Stat.MP]; + if (percent > 1) percent = 1; + if (percent <= 0) return; + + Rectangle section = new Rectangle + { + Size = new Size((int)((ManaOrb.Size.Width - 3) * percent), ManaOrb.Size.Height) + }; + + ManaOrb.Library.Draw(ManaOrb.Index, section, ManaOrb.DisplayLocation, Color.White, false); + } + } + + public sealed class MainCharacterDialog : MirImageControl + { + public static UserObject User + { + get { return MapObject.User; } + set { MapObject.User = value; } + } + public MirLabel LevelLabel, ExperienceLabel, GoldLabel, WeightLabel, AccuracyLabel, DestructiveLabel, ACLabel, MACLabel, HPLabel, MPLabel, AgilityLabel; + + public MainCharacterDialog() + { + Index = 99; + Library = Libraries.Prguse; + Location = new Point(16, Settings.ScreenHeight - Size.Height - 32); + + LevelLabel = new MirLabel + { + AutoSize = true, + Parent = this, + NotControl = true, + Location = new Point(433, 8) + }; + + ExperienceLabel = new MirLabel + { + AutoSize = true, + Parent = this, + NotControl = true, + Location = new Point(538, 8) + }; + + GoldLabel = new MirLabel + { + AutoSize = true, + Parent = this, + NotControl = true, + Location = new Point(645, 8) + }; + + AccuracyLabel = new MirLabel + { + Parent = this, + Location = new Point(423, 30), + Size = new Size(40, 14), + }; + + DestructiveLabel = new MirLabel + { + Parent = this, + Location = new Point(532, 30), + Size = new Size(40, 14), + }; + + ACLabel = new MirLabel + { + Parent = this, + Location = new Point(622, 30), + Size = new Size(40, 14), + }; + + MACLabel = new MirLabel + { + Parent = this, + Location = new Point(720, 30), + Size = new Size(40, 14), + }; + + HPLabel = new MirLabel + { + Parent = this, + Location = new Point(418, 55), + Size = new Size(96, 14), + }; + + MPLabel = new MirLabel + { + Parent = this, + Location = new Point(557, 54), + Size = new Size(96, 14), + }; + + AgilityLabel = new MirLabel + { + Parent = this, + Location = new Point(720, 54), + Size = new Size(40, 14), + }; + + WeightLabel = new MirLabel + { + Parent = this, + Location = new Point(720, 76), + Size = new Size(40, 17), + }; + } + + public void Process() + { + LevelLabel.Text = User.Level.ToString(); + ExperienceLabel.Text = string.Format("{0:#0.##%}", User.Experience / (double)User.MaxExperience); + GoldLabel.Text = GameScene.Gold.ToString("###,###,##0"); + AccuracyLabel.Text = MapObject.User.Stats[Stat.Accuracy].ToString(); + DestructiveLabel.Text = string.Format("{0}-{1}", MapObject.User.Class == MirClass.Warrior ? MapObject.User.Stats[Stat.MinDC] : MapObject.User.Stats[Stat.MinMC], + MapObject.User.Class == MirClass.Warrior ? MapObject.User.Stats[Stat.MaxDC] : MapObject.User.Stats[Stat.MaxMC]); + ACLabel.Text = string.Format("{0}-{1}", MapObject.User.Stats[Stat.MinAC],MapObject.User.Stats[Stat.MaxAC]); + MACLabel.Text = string.Format("{0}-{1}", MapObject.User.Stats[Stat.MinMAC], MapObject.User.Stats[Stat.MaxMAC]); + HPLabel.Text = $"{MapObject.User.HP}/{MapObject.User.Stats[Stat.HP]} ({MapObject.User.PercentHealth}%)"; + MPLabel.Text = $"{MapObject.User.MP}/{MapObject.User.Stats[Stat.MP]} ({MapObject.User.PercentMana}%)"; + AgilityLabel.Text = MapObject.User.Stats[Stat.Agility].ToString(); + WeightLabel.Text = (MapObject.User.Stats[Stat.BagWeight] - MapObject.User.CurrentBagWeight).ToString(); + } + } + public sealed class ChatDialog : MirImageControl + { + public List FullHistory = new List(); + public List History = new List(); + public List ChatLines = new List(); + + public List LinkedItems = new List(); + public List LinkedItemButtons = new List(); + + public MirButton UpButton, DownButton, PositionBar; + public MirTextBox ChatTextBox; + public Font ChatFont = new Font(Settings.FontName, 8F); + public string LastPM = string.Empty; + + public int StartIndex, LineCount = 7, WindowSize; + public string ChatPrefix = ""; + + public bool Transparent; + + public ChatDialog() + { + Index = 99; + DrawImage = false; + Library = Libraries.Prguse; + Location = new Point(5, 4); + + KeyPress += ChatPanel_KeyPress; + KeyDown += ChatPanel_KeyDown; + MouseWheel += ChatPanel_MouseWheel; + + ChatTextBox = new MirTextBox + { + BackColour = Color.DarkGray, + ForeColour = Color.Black, + Parent = this, + Size = new Size(503, 13), + Location = new Point(1, 106), + MaxLength = Globals.MaxChatLength, + Visible = false, + Font = ChatFont, + }; + ChatTextBox.TextBox.KeyPress += ChatTextBox_KeyPress; + ChatTextBox.TextBox.KeyDown += ChatTextBox_KeyDown; + ChatTextBox.TextBox.KeyUp += ChatTextBox_KeyUp; + + UpButton = new MirButton + { + Index = 1, + Library = Libraries.Prguse, + Location = new Point(364, -1), + Parent = this, + PressedIndex = 2, + Sound = SoundList.ButtonA, + }; + UpButton.Click += (o, e) => + { + if (StartIndex == 0) return; + StartIndex--; + Update(); + }; + + DownButton = new MirButton + { + Index = 3, + Library = Libraries.Prguse, + Location = new Point(364, 83), + Parent = this, + PressedIndex = 4, + Sound = SoundList.ButtonA, + }; + DownButton.Click += (o, e) => + { + if (StartIndex == History.Count - 1) return; + StartIndex++; + Update(); + }; + + PositionBar = new MirButton + { + Index = 6, + Library = Libraries.Prguse, + Location = new Point(364, 11), + Parent = this, + Sound = SoundList.None, + }; + PositionBar.OnMoving += PositionBar_OnMoving; + } + + public void SetChatText(string newText) + { + string newMsg = ChatTextBox.Text += newText; + + if (newMsg.Length > Globals.MaxChatLength) return; + + ChatTextBox.Text = newMsg; + ChatTextBox.SetFocus(); + ChatTextBox.Visible = true; + ChatTextBox.TextBox.SelectionLength = 0; + ChatTextBox.TextBox.SelectionStart = ChatTextBox.Text.Length; + } + + private void ChatTextBox_KeyPress(object sender, KeyPressEventArgs e) + { + switch (e.KeyChar) + { + case (char)Keys.Enter: + e.Handled = true; + if (!string.IsNullOrEmpty(ChatTextBox.Text)) + { + string msg = ChatTextBox.Text; + bool send = true; + + if (msg.ToUpper() == "@LEVELEFFECT") + { + Settings.LevelEffect = !Settings.LevelEffect; + } + + if (msg.ToUpper() == "@TARGETDEAD") + { + Settings.TargetDead = !Settings.TargetDead; + } + + if (msg.ToUpper().StartsWith("@GROUP ")) + { + string[] parts = ChatTextBox.Text.Split(' '); + if (parts.Length > 1) + GameScene.Scene.GroupDialog.ConfirmAddMember(parts[1]); + send = false; + } + + if (send) + Network.Enqueue(new C.Chat + { + Message = msg, + LinkedItems = new List(LinkedItems) + }); + + if (ChatTextBox.Text[0] == '/') + { + string[] parts = ChatTextBox.Text.Split(' '); + if (parts.Length > 0) + LastPM = parts[0]; + } + } + ChatTextBox.Visible = false; + ChatTextBox.Text = string.Empty; + LinkedItems.Clear(); + break; + case (char)Keys.Escape: + e.Handled = true; + ChatTextBox.Visible = false; + ChatTextBox.Text = string.Empty; + LinkedItems.Clear(); + break; + } + } + + void PositionBar_OnMoving(object sender, MouseEventArgs e) + { + int x = PositionBar.Location.X; + int y = PositionBar.Location.Y; + if (y >= 11 + 71 - PositionBar.Size.Height) y = 11 + 71 - PositionBar.Size.Height; + if (y < 11) y = 11; + + int h = 100 - PositionBar.Size.Height; + h = (int)((y - 11) / (h / (float)(History.Count - 1))); + + if (h != StartIndex) + { + StartIndex = h; + Update(); + } + + PositionBar.Location = new Point(x, y); + } + + public void ReceiveChat(string text, ChatType type) + { + Color foreColour, backColour; + + switch (type) + { + case ChatType.Hint: + backColour = Color.Transparent; + foreColour = Color.DarkGreen; + break; + case ChatType.Announcement: + backColour = Color.Blue; + foreColour = Color.White; + GameScene.Scene.ChatNoticeDialog.ShowNotice(RegexFunctions.CleanChatString(text)); + break; + case ChatType.LineMessage: + backColour = Color.Blue; + foreColour = Color.White; + break; + case ChatType.Shout: + backColour = Color.Yellow; + foreColour = Color.Black; + break; + case ChatType.Shout2: + backColour = Color.Green; + foreColour = Color.White; + break; + case ChatType.Shout3: + backColour = Color.Purple; + foreColour = Color.White; + break; + case ChatType.System: + backColour = Color.Red; + foreColour = Color.White; + break; + case ChatType.System2: + backColour = Color.DarkRed; + foreColour = Color.White; + break; + case ChatType.Group: + backColour = Color.White; + foreColour = Color.Brown; + break; + case ChatType.WhisperOut: + foreColour = Color.CornflowerBlue; + backColour = Color.White; + break; + case ChatType.WhisperIn: + foreColour = Color.DarkBlue; + backColour = Color.White; + break; + case ChatType.Guild: + backColour = Color.White; + foreColour = Color.Green; + break; + case ChatType.LevelUp: + backColour = Color.FromArgb(255, 225, 185, 250); + foreColour = Color.Blue; + break; + case ChatType.Relationship: + backColour = Color.Transparent; + foreColour = Color.HotPink; + break; + default: + backColour = Color.Transparent; + foreColour = Color.Black; + break; + } + + List chat = new List(); + + int chatWidth = 370; + int index = 0; + + for (int i = 1; i < text.Length; i++) + { + if (i - index < 0) continue; + + if (TextRenderer.MeasureText(CMain.Graphics, text.Substring(index, i - index), ChatFont).Width > chatWidth) + { + int offset = i - index; + int newIndex = i - 1; + + var itemLinkMatches = RegexFunctions.ChatItemLinks.Matches(text.Substring(index)).Cast(); + + if (itemLinkMatches.Any()) + { + var match = itemLinkMatches.SingleOrDefault(x => (x.Index < (i - index)) && (x.Index + x.Length > offset - 1)); + + if (match != null) + { + offset = match.Index; + newIndex = match.Index; + } + } + + chat.Add(text.Substring(index, offset - 1)); + index = newIndex; + } + } + + chat.Add(text.Substring(index, text.Length - index)); + + if (StartIndex == History.Count - LineCount) + StartIndex += chat.Count; + + for (int i = 0; i < chat.Count; i++) + FullHistory.Add(new ChatHistory { Text = chat[i], BackColour = backColour, ForeColour = foreColour, Type = type }); + + Update(); + } + + public void Update() + { + History = new List(); + + for (int i = 0; i < FullHistory.Count; i++) + { + switch (FullHistory[i].Type) + { + case ChatType.Normal: + case ChatType.LineMessage: + if (Settings.FilterNormalChat) continue; + break; + case ChatType.WhisperIn: + case ChatType.WhisperOut: + if (Settings.FilterWhisperChat) continue; + break; + case ChatType.Shout: + case ChatType.Shout2: + case ChatType.Shout3: + if (Settings.FilterShoutChat) continue; + break; + case ChatType.System: + case ChatType.System2: + if (Settings.FilterSystemChat) continue; + break; + case ChatType.Group: + if (Settings.FilterGroupChat) continue; + break; + case ChatType.Guild: + if (Settings.FilterGuildChat) continue; + break; + } + + History.Add(FullHistory[i]); + } + + for (int i = 0; i < ChatLines.Count; i++) + ChatLines[i].Dispose(); + + for (int i = 0; i < LinkedItemButtons.Count; i++) + LinkedItemButtons[i].Dispose(); + + ChatLines.Clear(); + LinkedItemButtons.Clear(); + + if (StartIndex >= History.Count) StartIndex = History.Count - 1; + if (StartIndex < 0) StartIndex = 0; + + if (History.Count > 1) + { + int h = 71 - PositionBar.Size.Height; + h = (int)((h / (float)(History.Count - 1)) * StartIndex); + PositionBar.Location = new Point(PositionBar.Location.X, 11 + h); + } + + int y = 1; + + for (int i = StartIndex; i < History.Count; i++) + { + MirLabel temp = new MirLabel + { + AutoSize = true, + BackColour = History[i].BackColour, + ForeColour = History[i].ForeColour, + Location = new Point(1, y), + OutLine = false, + Parent = this, + Text = History[i].Text, + Font = ChatFont, + }; + temp.MouseWheel += ChatPanel_MouseWheel; + ChatLines.Add(temp); + + temp.Click += (o, e) => + { + if (!(o is MirLabel l)) return; + + string[] parts = l.Text.Split(':', ' '); + if (parts.Length == 0) return; + + string name = Regex.Replace(parts[0], "[^A-Za-z0-9]", ""); + + ChatTextBox.SetFocus(); + ChatTextBox.Text = string.Format("/{0} ", name); + ChatTextBox.Visible = true; + ChatTextBox.TextBox.SelectionLength = 0; + ChatTextBox.TextBox.SelectionStart = ChatTextBox.Text.Length; + }; + + string currentLine = History[i].Text; + + int oldLength = currentLine.Length; + + Capture capture = null; + + foreach (Match match in RegexFunctions.ChatItemLinks.Matches(currentLine).Cast().OrderBy(o => o.Index).ToList()) + { + try + { + int offSet = oldLength - currentLine.Length; + + capture = match.Groups[1].Captures[0]; + string[] values = capture.Value.Split('/'); + currentLine = currentLine.Remove(capture.Index - 1 - offSet, capture.Length + 2).Insert(capture.Index - 1 - offSet, values[0]); + string text = currentLine.Substring(0, capture.Index - 1 - offSet) + " "; + Size size = TextRenderer.MeasureText(CMain.Graphics, text, temp.Font, temp.Size, TextFormatFlags.TextBoxControl); + + ChatLink(values[0], ulong.Parse(values[1]), temp.Location.Add(new Point(size.Width - 10, 0))); + } + catch(Exception ex) + { + //Temporary debug to catch unknown error + CMain.SaveError(ex.ToString()); + CMain.SaveError(currentLine); + CMain.SaveError(capture.Value); + throw; + } + } + + temp.Text = currentLine; + + y += 13; + if (i - StartIndex == LineCount - 1) break; + } + + } + + private void ChatLink(string name, ulong uniqueID, Point p) + { + UserItem item = GameScene.ChatItemList.FirstOrDefault(x => x.UniqueID == uniqueID); + + if (item != null) + { + MirLabel temp = new MirLabel + { + AutoSize = true, + Visible = true, + Parent = this, + Location = p, + Text = name, + ForeColour = Color.Blue, + Sound = SoundList.ButtonC, + Font = ChatFont, + OutLine = false, + }; + + temp.MouseEnter += (o, e) => temp.ForeColour = Color.Red; + temp.MouseLeave += (o, e) => + { + GameScene.Scene.DisposeItemLabel(); + temp.ForeColour = Color.Blue; + }; + temp.MouseDown += (o, e) => temp.ForeColour = Color.Blue; + temp.MouseUp += (o, e) => temp.ForeColour = Color.Red; + + temp.Click += (o, e) => + { + GameScene.Scene.CreateItemLabel(item); + }; + + LinkedItemButtons.Add(temp); + } + } + + + private void ChatPanel_KeyDown(object sender, KeyEventArgs e) + { + switch (e.KeyCode) + { + case Keys.Up: + if (StartIndex == 0) return; + StartIndex--; + break; + case Keys.Home: + if (StartIndex == 0) return; + StartIndex = 0; + break; + case Keys.Down: + if (StartIndex == History.Count - 1) return; + StartIndex++; + break; + case Keys.End: + if (StartIndex == History.Count - 1) return; + StartIndex = History.Count - 1; + break; + case Keys.PageUp: + if (StartIndex == 0) return; + StartIndex -= LineCount; + break; + case Keys.PageDown: + if (StartIndex == History.Count - 1) return; + StartIndex += LineCount; + break; + default: + return; + } + Update(); + e.Handled = true; + } + private void ChatPanel_KeyPress(object sender, KeyPressEventArgs e) + { + switch (e.KeyChar) + { + case '@': + case '!': + case ' ': + case (char)Keys.Enter: + ChatTextBox.SetFocus(); + if (e.KeyChar == '!') ChatTextBox.Text = "!"; + if (e.KeyChar == '@') ChatTextBox.Text = "@"; + if (ChatPrefix != "") ChatTextBox.Text = ChatPrefix; + + ChatTextBox.Visible = true; + ChatTextBox.TextBox.SelectionLength = 0; + ChatTextBox.TextBox.SelectionStart = ChatTextBox.Text.Length; + e.Handled = true; + break; + case '/': + ChatTextBox.SetFocus(); + ChatTextBox.Text = LastPM + " "; + ChatTextBox.Visible = true; + ChatTextBox.TextBox.SelectionLength = 0; + ChatTextBox.TextBox.SelectionStart = ChatTextBox.Text.Length; + e.Handled = true; + break; + } + } + private void ChatPanel_MouseWheel(object sender, MouseEventArgs e) + { + int count = e.Delta / SystemInformation.MouseWheelScrollDelta; + + if (StartIndex == 0 && count >= 0) return; + if (StartIndex == History.Count - 1 && count <= 0) return; + + StartIndex -= count; + Update(); + } + private void ChatTextBox_KeyUp(object sender, KeyEventArgs e) + { + CMain.Shift = e.Shift; + CMain.Alt = e.Alt; + CMain.Ctrl = e.Control; + + switch (e.KeyCode) + { + case Keys.F1: + case Keys.F2: + case Keys.F3: + case Keys.F4: + case Keys.F5: + case Keys.F6: + case Keys.F7: + case Keys.F8: + case Keys.F9: + case Keys.F10: + case Keys.F11: + case Keys.F12: + case Keys.Tab: + CMain.CMain_KeyUp(sender, e); + break; + + } + } + private void ChatTextBox_KeyDown(object sender, KeyEventArgs e) + { + CMain.Shift = e.Shift; + CMain.Alt = e.Alt; + CMain.Ctrl = e.Control; + + switch (e.KeyCode) + { + case Keys.F1: + case Keys.F2: + case Keys.F3: + case Keys.F4: + case Keys.F5: + case Keys.F6: + case Keys.F7: + case Keys.F8: + case Keys.F9: + case Keys.F10: + case Keys.F11: + case Keys.F12: + case Keys.Tab: + CMain.CMain_KeyDown(sender, e); + break; + + } + } + + public class ChatHistory + { + public string Text; + public Color ForeColour, BackColour; + public ChatType Type; + } + } + + public sealed class SkillBarDialog : MirImageControl + { + private readonly MirButton _switchBindsButton; + + public bool AltBind; + public bool HasSkill = false; + public byte BarIndex; + + //public bool TopBind = !Settings.SkillMode; + public MirImageControl[] Cells = new MirImageControl[8]; + public MirLabel[] KeyNameLabels = new MirLabel[8]; + public MirLabel BindNumberLabel = new MirLabel(); + + public MirImageControl[] CoolDowns = new MirImageControl[8]; + + public SkillBarDialog() + { + Index = 2190; + Library = Libraries.Prguse; + Movable = true; + Sort = true; + Location = new Point(0, BarIndex * 20); + Visible = true; + + BeforeDraw += MagicKeyDialog_BeforeDraw; + + _switchBindsButton = new MirButton + { + Index = 2247, + Library = Libraries.Prguse, + Parent = this, + Sound = SoundList.ButtonA, + Size = new Size(16, 28), + Location = new Point(0, 0) + }; + _switchBindsButton.Click += (o, e) => + { + //Settings.SkillSet = !Settings.SkillSet; + + Update(); + }; + + for (var i = 0; i < Cells.Length; i++) + { + Cells[i] = new MirImageControl + { + Index = -1, + Library = Libraries.MagIcon, + Parent = this, + Location = new Point(i * 25 + 15, 3), + }; + int j = i + 1; + Cells[i].Click += (o, e) => + { + GameScene.Scene.UseSpell(j + (8 * BarIndex)); + }; + + CoolDowns[i] = new MirImageControl + { + Library = Libraries.Prguse2, + Parent = this, + Location = new Point(i * 25 + 15, 3), + NotControl = true, + UseOffSet = true, + Opacity = 0.6F + }; + } + + BindNumberLabel = new MirLabel + { + Text = "1", + Font = new Font(Settings.FontName, 8F), + ForeColour = Color.White, + Parent = this, + Location = new Point(0, 1), + Size = new Size(10, 25), + NotControl = true + }; + + for (var i = 0; i < KeyNameLabels.Length; i++) + { + KeyNameLabels[i] = new MirLabel + { + Text = "F" + (i + 1), + Font = new Font(Settings.FontName, 8F), + ForeColour = Color.White, + Parent = this, + Location = new Point(i * 25 + 13, 0), + Size = new Size(25, 25), + NotControl = true + }; + } + OnMoving += SkillBar_OnMoving; + } + + private void SkillBar_OnMoving(object sender, MouseEventArgs e) + { + if (BarIndex * 2 >= Settings.SkillbarLocation.Length) return; + Settings.SkillbarLocation[BarIndex, 0] = this.Location.X; + Settings.SkillbarLocation[BarIndex, 1] = this.Location.Y; + } + + private string GetKey(int barindex, int i) + { + //KeybindOptions Type = KeybindOptions.Bar1Skill1; + if ((barindex == 0) && (i == 1)) + return CMain.InputKeys.GetKey(KeybindOptions.Bar1Skill1); + if ((barindex == 0) && (i == 2)) + return CMain.InputKeys.GetKey(KeybindOptions.Bar1Skill2); + if ((barindex == 0) && (i == 3)) + return CMain.InputKeys.GetKey(KeybindOptions.Bar1Skill3); + if ((barindex == 0) && (i == 4)) + return CMain.InputKeys.GetKey(KeybindOptions.Bar1Skill4); + if ((barindex == 0) && (i == 5)) + return CMain.InputKeys.GetKey(KeybindOptions.Bar1Skill5); + if ((barindex == 0) && (i == 6)) + return CMain.InputKeys.GetKey(KeybindOptions.Bar1Skill6); + if ((barindex == 0) && (i == 7)) + return CMain.InputKeys.GetKey(KeybindOptions.Bar1Skill7); + if ((barindex == 0) && (i == 8)) + return CMain.InputKeys.GetKey(KeybindOptions.Bar1Skill8); + if ((barindex == 1) && (i == 1)) + return CMain.InputKeys.GetKey(KeybindOptions.Bar2Skill1); + if ((barindex == 1) && (i == 2)) + return CMain.InputKeys.GetKey(KeybindOptions.Bar2Skill2); + if ((barindex == 1) && (i == 3)) + return CMain.InputKeys.GetKey(KeybindOptions.Bar2Skill3); + if ((barindex == 1) && (i == 4)) + return CMain.InputKeys.GetKey(KeybindOptions.Bar2Skill4); + if ((barindex == 1) && (i == 5)) + return CMain.InputKeys.GetKey(KeybindOptions.Bar2Skill5); + if ((barindex == 1) && (i == 6)) + return CMain.InputKeys.GetKey(KeybindOptions.Bar2Skill6); + if ((barindex == 1) && (i == 7)) + return CMain.InputKeys.GetKey(KeybindOptions.Bar2Skill7); + if ((barindex == 1) && (i == 8)) + return CMain.InputKeys.GetKey(KeybindOptions.Bar2Skill8); + return ""; + } + + + void MagicKeyDialog_BeforeDraw(object sender, EventArgs e) + { + Libraries.Prguse.Draw(2193, new Point(DisplayLocation.X + 12, DisplayLocation.Y), Color.White, true, 0.5F); + } + + public void Update() + { + HasSkill = false; + foreach (var m in GameScene.User.Magics) + { + if ((m.Key < (BarIndex * 8)+1) || (m.Key > ((BarIndex + 1) * 8)+1)) continue; + HasSkill = true; + } + + if (!Visible) return; + Index = 2190; + _switchBindsButton.Index = 2247; + BindNumberLabel.Text = (BarIndex + 1).ToString(); + BindNumberLabel.Location = new Point(0, 1); + + for (var i = 1; i <= 8; i++) + { + Cells[i - 1].Index = -1; + + int offset = BarIndex * 8; + string key = GetKey(BarIndex, i); + KeyNameLabels[i - 1].Text = key; + + foreach (var m in GameScene.User.Magics) + { + if (m.Key != i + offset) continue; + HasSkill = true; + ClientMagic magic = MapObject.User.GetMagic(m.Spell); + if (magic == null) continue; + + //string key = m.Key > 8 ? string.Format("CTRL F{0}", i) : string.Format("F{0}", m.Key); + + Cells[i - 1].Index = magic.Icon*2; + Cells[i - 1].Hint = string.Format("{0}\nMP: {1}\nCooldown: {2}\nKey: {3}", magic.Name, + (magic.BaseCost + (magic.LevelCost * magic.Level)), Functions.PrintTimeSpanFromMilliSeconds(magic.Delay), key); + + KeyNameLabels[i - 1].Text = ""; + } + } + } + + + public void Process() + { + ProcessSkillDelay(); + } + + private void ProcessSkillDelay() + { + if (!Visible) return; + + int offset = BarIndex * 8; + + for (int i = 0; i < Cells.Length; i++) + { + foreach (var magic in GameScene.User.Magics) + { + if (magic.Key != i + offset + 1) continue; + + int totalFrames = 22; + long timeLeft = magic.CastTime + magic.Delay - CMain.Time; + + if (timeLeft < 100) + { + if (timeLeft > 0) { + CoolDowns[i].Visible = false; + // CoolDowns[i].Dispose(); + } + else + continue; + } + + int delayPerFrame = (int)(magic.Delay / totalFrames); + int startFrame = totalFrames - (int)(timeLeft / delayPerFrame); + + if ((CMain.Time <= magic.CastTime + magic.Delay)) + { + CoolDowns[i].Visible = true; + CoolDowns[i].Index = 1260 + startFrame; + } + } + } + } + + public override void Show() + { + if (Visible) return; + if (!HasSkill) return; + Settings.SkillBar = true; + Visible = true; + Update(); + } + + public override void Hide() + { + if (!Visible) return; + Settings.SkillBar = false; + Visible = false; + } + } + + public sealed class OptionDialog : MirImageControl + { + public MirButton SkillModeOn, SkillModeOff; + public MirButton SkillBarOn, SkillBarOff; + public MirButton EffectOn, EffectOff; + public MirButton DropViewOn, DropViewOff; + public MirButton NameViewOn, NameViewOff; + public MirButton HPViewOn, HPViewOff; + public MirButton NewMoveOn, NewMoveOff; + public MirButton ObserveOn, ObserveOff; + public MirImageControl SoundBar, MusicSoundBar; + public MirImageControl VolumeBar, MusicVolumeBar; + + public MirButton CloseButton; + + + public OptionDialog() + { + Index = 411; + Library = Libraries.Prguse; + Movable = true; + Sort = true; + + Location = new Point((Settings.ScreenWidth - Size.Width) / 2, (Settings.ScreenHeight - Size.Height) / 2); + + BeforeDraw += OptionPanel_BeforeDraw; + + CloseButton = new MirButton + { + Index = 360, + HoverIndex = 361, + Library = Libraries.Prguse2, + Location = new Point(Size.Width - 26, 5), + Parent = this, + Sound = SoundList.ButtonA, + PressedIndex = 362, + }; + CloseButton.Click += (o, e) => Hide(); + + //tilde option + SkillModeOn = new MirButton + { + Library = Libraries.Prguse2, + Location = new Point(159, 68), + Parent = this, + Sound = SoundList.ButtonA, + Size = new Size(36, 17), + PressedIndex = 451, + }; + SkillModeOn.Click += (o, e) => + { + GameScene.Scene.ChangeSkillMode(false); + }; + + //ctrl option + SkillModeOff = new MirButton + { + Library = Libraries.Prguse2, + Location = new Point(201, 68), + Parent = this, + Sound = SoundList.ButtonA, + Size = new Size(36, 17), + PressedIndex = 454 + }; + SkillModeOff.Click += (o, e) => + { + GameScene.Scene.ChangeSkillMode(true); + }; + + SkillBarOn = new MirButton + { + Library = Libraries.Prguse2, + Location = new Point(159, 93), + Parent = this, + Sound = SoundList.ButtonA, + Size = new Size(36, 17), + PressedIndex = 457, + }; + SkillBarOn.Click += (o, e) => Settings.SkillBar = true; + + SkillBarOff = new MirButton + { + Library = Libraries.Prguse2, + Location = new Point(201, 93), + Parent = this, + Sound = SoundList.ButtonA, + Size = new Size(36, 17), + PressedIndex = 460 + }; + SkillBarOff.Click += (o, e) => Settings.SkillBar = false; + + EffectOn = new MirButton + { + Library = Libraries.Prguse2, + Location = new Point(159, 118), + Parent = this, + Sound = SoundList.ButtonA, + Size = new Size(36, 17), + PressedIndex = 457, + }; + EffectOn.Click += (o, e) => Settings.Effect = true; + + EffectOff = new MirButton + { + Library = Libraries.Prguse2, + Location = new Point(201, 118), + Parent = this, + Sound = SoundList.ButtonA, + Size = new Size(36, 17), + PressedIndex = 460 + }; + EffectOff.Click += (o, e) => Settings.Effect = false; + + DropViewOn = new MirButton + { + Library = Libraries.Prguse2, + Location = new Point(159, 143), + Parent = this, + Sound = SoundList.ButtonA, + Size = new Size(36, 17), + PressedIndex = 457, + }; + DropViewOn.Click += (o, e) => Settings.DropView = true; + + DropViewOff = new MirButton + { + Library = Libraries.Prguse2, + Location = new Point(201, 143), + Parent = this, + Sound = SoundList.ButtonA, + Size = new Size(36, 17), + PressedIndex = 460 + }; + DropViewOff.Click += (o, e) => Settings.DropView = false; + + NameViewOn = new MirButton + { + Library = Libraries.Prguse2, + Location = new Point(159, 168), + Parent = this, + Sound = SoundList.ButtonA, + Size = new Size(36, 17), + PressedIndex = 457, + }; + NameViewOn.Click += (o, e) => Settings.NameView = true; + + NameViewOff = new MirButton + { + Library = Libraries.Prguse2, + Location = new Point(201, 168), + Parent = this, + Sound = SoundList.ButtonA, + Size = new Size(36, 17), + PressedIndex = 460 + }; + NameViewOff.Click += (o, e) => Settings.NameView = false; + + HPViewOn = new MirButton + { + Library = Libraries.Prguse2, + Location = new Point(159, 193), + Parent = this, + Sound = SoundList.ButtonA, + Size = new Size(36, 17), + PressedIndex = 463, + }; + HPViewOn.Click += (o, e) => + { + Settings.HPView = true; + GameScene.Scene.ChatDialog.ReceiveChat("[HP/MP Mode 1]", ChatType.Hint); + }; + + HPViewOff = new MirButton + { + Library = Libraries.Prguse2, + Location = new Point(201, 193), + Parent = this, + Sound = SoundList.ButtonA, + Size = new Size(36, 17), + PressedIndex = 466 + }; + HPViewOff.Click += (o, e) => + { + Settings.HPView = false; + GameScene.Scene.ChatDialog.ReceiveChat("[HP/MP Mode 2]", ChatType.Hint); + }; + + SoundBar = new MirImageControl + { + Index = 468, + Library = Libraries.Prguse2, + Location = new Point(159, 225), + Parent = this, + DrawImage = false, + }; + SoundBar.MouseDown += SoundBar_MouseMove; + SoundBar.MouseMove += SoundBar_MouseMove; + SoundBar.BeforeDraw += SoundBar_BeforeDraw; + + VolumeBar = new MirImageControl + { + Index = 20, + Library = Libraries.Prguse, + Location = new Point(155, 218), + Parent = this, + NotControl = true, + }; + + MusicSoundBar = new MirImageControl + { + Index = 468, + Library = Libraries.Prguse2, + Location = new Point(159, 251), + Parent = this, + DrawImage = false + }; + MusicSoundBar.MouseDown += MusicSoundBar_MouseMove; + MusicSoundBar.MouseMove += MusicSoundBar_MouseMove; + MusicSoundBar.BeforeDraw += MusicSoundBar_BeforeDraw; + + MusicVolumeBar = new MirImageControl + { + Index = 20, + Library = Libraries.Prguse, + Location = new Point(155, 244), + Parent = this, + NotControl = true, + }; + + NewMoveOn = new MirButton + { + Library = Libraries.Prguse, + Location = new Point(159, 296), + Parent = this, + Sound = SoundList.ButtonA, + Size = new Size(36, 17), + PressedIndex = 853, + }; + NewMoveOn.Click += (o, e) => + { + Settings.NewMove = true; + GameScene.Scene.ChatDialog.ReceiveChat("[New Movement Style]", ChatType.Hint); + }; + + NewMoveOff = new MirButton + { + Library = Libraries.Prguse, + Location = new Point(201, 296), + Parent = this, + Sound = SoundList.ButtonA, + Size = new Size(36, 17), + PressedIndex = 850 + }; + NewMoveOff.Click += (o, e) => + { + Settings.NewMove = false; + GameScene.Scene.ChatDialog.ReceiveChat("[Old Movement Style]", ChatType.Hint); + }; + + ObserveOn = new MirButton + { + Library = Libraries.Prguse2, + Location = new Point(159, 271), + Parent = this, + Sound = SoundList.ButtonA, + Size = new Size(36, 17), + PressedIndex = 457, + }; + ObserveOn.Click += (o, e) => ToggleObserve(true); + + ObserveOff = new MirButton + { + Library = Libraries.Prguse2, + Location = new Point(201, 271), + Parent = this, + Sound = SoundList.ButtonA, + Size = new Size(36, 17), + PressedIndex = 460 + }; + ObserveOff.Click += (o, e) => ToggleObserve(false); + } + + private void ToggleObserve(bool allow) + { + if (GameScene.AllowObserve == allow) return; + + Network.Enqueue(new C.Chat + { + Message = "@ALLOWOBSERVE", + }); + } + + public void ToggleSkillButtons(bool Ctrl) + { + foreach (KeyBind KeyCheck in CMain.InputKeys.Keylist) + { + if (KeyCheck.Key == Keys.None) + continue; + if ((KeyCheck.function < KeybindOptions.Bar1Skill1) || (KeyCheck.function > KeybindOptions.Bar2Skill8)) continue; + //need to test this + if ((KeyCheck.RequireCtrl != 1) && (KeyCheck.RequireTilde != 1)) continue; + KeyCheck.RequireCtrl = (byte)(Ctrl ? 1 : 0); + KeyCheck.RequireTilde = (byte)(Ctrl ? 0 : 1); + } + } + + private void SoundBar_MouseMove(object sender, MouseEventArgs e) + { + if (e.Button != MouseButtons.Left || SoundBar != ActiveControl) return; + + Point p = e.Location.Subtract(SoundBar.DisplayLocation); + + byte volume = (byte)(p.X / (double)SoundBar.Size.Width * 100); + Settings.Volume = volume; + + double percent = Settings.Volume / 100D; + + SoundBar.Hint = $"{Settings.Volume}%"; + + if (percent > 1) percent = 1; + + VolumeBar.Location = percent > 0 ? new Point(159 + (int)((SoundBar.Size.Width - 2) * percent), 218) : new Point(159, 218); + } + + private void SoundBar_BeforeDraw(object sender, EventArgs e) + { + if (SoundBar.Library == null) return; + + double percent = Settings.Volume / 100D; + + SoundBar.Hint = $"{Settings.Volume}%"; + + if (percent > 1) percent = 1; + if (percent > 0) + { + Rectangle section = new Rectangle + { + Size = new Size((int)((SoundBar.Size.Width - 2) * percent), SoundBar.Size.Height) + }; + + SoundBar.Library.Draw(SoundBar.Index, section, SoundBar.DisplayLocation, Color.White, false); + VolumeBar.Location = new Point(159 + section.Size.Width, 218); + } + else + VolumeBar.Location = new Point(159, 218); + } + + private void MusicSoundBar_BeforeDraw(object sender, EventArgs e) + { + if (MusicSoundBar.Library == null) return; + + double percent = Settings.MusicVolume / 100D; + + MusicSoundBar.Hint = $"{Settings.MusicVolume}%"; + + if (percent > 1) percent = 1; + if (percent > 0) + { + Rectangle section = new Rectangle + { + Size = new Size((int)((MusicSoundBar.Size.Width - 2) * percent), MusicSoundBar.Size.Height) + }; + + MusicSoundBar.Library.Draw(MusicSoundBar.Index, section, MusicSoundBar.DisplayLocation, Color.White, false); + MusicVolumeBar.Location = new Point(159 + section.Size.Width, 244); + } + else + MusicVolumeBar.Location = new Point(159, 244); + } + + private void MusicSoundBar_MouseMove(object sender, MouseEventArgs e) + { + if (e.Button != MouseButtons.Left || MusicSoundBar != ActiveControl) return; + + Point p = e.Location.Subtract(MusicSoundBar.DisplayLocation); + + byte volume = (byte)(p.X / (double)MusicSoundBar.Size.Width * 100); + Settings.MusicVolume = volume; + + double percent = Settings.MusicVolume / 100D; + + MusicSoundBar.Hint = $"{Settings.MusicVolume}%"; + + if (percent > 1) percent = 1; + + MusicVolumeBar.Location = percent > 0 ? new Point(159 + (int)((MusicSoundBar.Size.Width - 2) * percent), 244) : new Point(159, 244); + } + + private void OptionPanel_BeforeDraw(object sender, EventArgs e) + { + if (Settings.SkillMode) + { + SkillModeOn.Index = 452; + SkillModeOff.Index = 453; + } + else + { + SkillModeOn.Index = 450; + SkillModeOff.Index = 455; + } + + if (Settings.SkillBar) + { + SkillBarOn.Index = 458; + SkillBarOff.Index = 459; + } + else + { + SkillBarOn.Index = 456; + SkillBarOff.Index = 461; + } + + if (Settings.Effect) + { + EffectOn.Index = 458; + EffectOff.Index = 459; + } + else + { + EffectOn.Index = 456; + EffectOff.Index = 461; + } + + if (Settings.DropView) + { + DropViewOn.Index = 458; + DropViewOff.Index = 459; + } + else + { + DropViewOn.Index = 456; + DropViewOff.Index = 461; + } + + if (Settings.NameView) + { + NameViewOn.Index = 458; + NameViewOff.Index = 459; + } + else + { + NameViewOn.Index = 456; + NameViewOff.Index = 461; + } + + if (Settings.HPView) + { + HPViewOn.Index = 464; + HPViewOff.Index = 465; + } + else + { + HPViewOn.Index = 462; + HPViewOff.Index = 467; + } + + if (Settings.NewMove) + { + NewMoveOn.Index = 853; + NewMoveOff.Index = 848; + } + else + { + NewMoveOn.Index = 851; + NewMoveOff.Index = 850; + } + + if (GameScene.AllowObserve) + { + ObserveOn.Index = 458; + ObserveOff.Index = 459; + } + else + { + ObserveOn.Index = 456; + ObserveOff.Index = 461; + } + } + + } + public sealed class MenuDialog : MirImageControl + { + public MirButton ExitButton, + HelpButton, + KeyboardLayoutButton, + RankingButton, + CraftingButton, + FriendButton, + MentorButton, + RelationshipButton, + GroupButton, + GuildButton; + + public MenuDialog() + { + Index = 567; + Parent = GameScene.Scene; + Library = Libraries.Prguse; + Location = new Point(Settings.ScreenWidth - Size.Width, GameScene.Scene.MainDialog.Location.Y - this.Size.Height + 15); + Sort = true; + Visible = false; + Movable = true; + + ExitButton = new MirButton + { + HoverIndex = 634, + Index = 633, + Parent = this, + Library = Libraries.Prguse, + Location = new Point(3, 12), + PressedIndex = 635, + Hint = string.Format(GameLanguage.Exit, CMain.InputKeys.GetKey(KeybindOptions.Exit)) + }; + ExitButton.Click += (o, e) => GameScene.Scene.QuitGame(); + + HelpButton = new MirButton + { + Index = 1970, + HoverIndex = 1971, + PressedIndex = 1972, + Parent = this, + Library = Libraries.Prguse, + Location = new Point(3, 50), + Hint = string.Format(GameLanguage.Help, CMain.InputKeys.GetKey(KeybindOptions.Help)) + }; + HelpButton.Click += (o, e) => + { + if (GameScene.Scene.HelpDialog.Visible) + GameScene.Scene.HelpDialog.Hide(); + else GameScene.Scene.HelpDialog.Show(); + }; + + KeyboardLayoutButton = new MirButton + { + Index = 1973, + HoverIndex = 1974, + PressedIndex = 1975, + Parent = this, + Library = Libraries.Prguse, + Location = new Point(3, 69), + Visible = true, + Hint = "Keyboard (" + CMain.InputKeys.GetKey(KeybindOptions.Keybind) + ")" + }; + KeyboardLayoutButton.Click += (o, e) => + { + if (GameScene.Scene.KeyboardLayoutDialog.Visible) + GameScene.Scene.KeyboardLayoutDialog.Hide(); + else GameScene.Scene.KeyboardLayoutDialog.Show(); + }; + + RankingButton = new MirButton + { + Index = 2000, + HoverIndex = 2001, + PressedIndex = 2002, + Parent = this, + Library = Libraries.Prguse, + Location = new Point(3, 88), + Hint = string.Format(GameLanguage.Ranking, CMain.InputKeys.GetKey(KeybindOptions.Ranking)) + //Visible = false + }; + RankingButton.Click += (o, e) => + { + if (GameScene.Scene.RankingDialog.Visible) + GameScene.Scene.RankingDialog.Hide(); + else GameScene.Scene.RankingDialog.Show(); + }; + + CraftingButton = new MirButton + { + Index = 2000, + HoverIndex = 2001, + PressedIndex = 2002, + Parent = this, + Library = Libraries.Prguse, + Location = new Point(3, 107), + Visible = false + }; + CraftingButton.Click += (o, e) => + { + + }; + + FriendButton = new MirButton + { + Index = 1982, + HoverIndex = 1983, + PressedIndex = 1984, + Parent = this, + Library = Libraries.Prguse, + Location = new Point(3, 183), + Visible = true, + Hint = string.Format(GameLanguage.Friends, CMain.InputKeys.GetKey(KeybindOptions.Friends)) + }; + FriendButton.Click += (o, e) => + { + if (GameScene.Scene.FriendDialog.Visible) + GameScene.Scene.FriendDialog.Hide(); + else GameScene.Scene.FriendDialog.Show(); + }; + + RelationshipButton = new MirButton /* lover button */ + { + Index = 1988, + HoverIndex = 1989, + PressedIndex = 1990, + Parent = this, + Library = Libraries.Prguse, + Location = new Point(3, 221), + Visible = true, + Hint = string.Format(GameLanguage.Relationship, CMain.InputKeys.GetKey(KeybindOptions.Relationship)) + }; + RelationshipButton.Click += (o, e) => + { + if (GameScene.Scene.RelationshipDialog.Visible) + GameScene.Scene.RelationshipDialog.Hide(); + else GameScene.Scene.RelationshipDialog.Show(); + }; + + GroupButton = new MirButton + { + Index = 1991, + HoverIndex = 1992, + PressedIndex = 1993, + Parent = this, + Library = Libraries.Prguse, + Location = new Point(3, 240), + Hint = string.Format(GameLanguage.Groups, CMain.InputKeys.GetKey(KeybindOptions.Group)) + }; + GroupButton.Click += (o, e) => + { + if (GameScene.Scene.GroupDialog.Visible) + GameScene.Scene.GroupDialog.Hide(); + else GameScene.Scene.GroupDialog.Show(); + }; + + GuildButton = new MirButton + { + Index = 1994, + HoverIndex = 1995, + PressedIndex = 1996, + Parent = this, + Library = Libraries.Prguse, + Location = new Point(3, 259), + Hint = string.Format(GameLanguage.Guild, CMain.InputKeys.GetKey(KeybindOptions.Guilds)) + }; + GuildButton.Click += (o, e) => + { + if (GameScene.Scene.GuildDialog.Visible) + GameScene.Scene.GuildDialog.Hide(); + else GameScene.Scene.GuildDialog.Show(); + }; + + } + + + } + public sealed class MagicButton : MirControl + { + public MirImageControl LevelImage, ExpImage; + public MirButton SkillButton; + public MirLabel LevelLabel, NameLabel, ExpLabel, KeyLabel; + public ClientMagic Magic; + public MirImageControl CoolDown; + + string[] Prefixes = new string[] { "", "CTRL", "Shift" }; + + public MagicButton() + { + Size = new Size(231, 33); + + SkillButton = new MirButton + { + Index = 0, + PressedIndex = 1, + Library = Libraries.MagIcon, + Parent = this, + Location = new Point(36, 0), + Sound = SoundList.ButtonA, + }; + SkillButton.Click += (o, e) => + { + new AssignKeyPanel(Magic, 1, new string[] + { + "F1", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "Ctrl" + Environment.NewLine + "F1", + "Ctrl" + Environment.NewLine + "F2", + "Ctrl" + Environment.NewLine + "F3", + "Ctrl" + Environment.NewLine + "F4", + "Ctrl" + Environment.NewLine + "F5", + "Ctrl" + Environment.NewLine + "F6", + "Ctrl" + Environment.NewLine + "F7", + "Ctrl" + Environment.NewLine + "F8" + }) + { Actor = GameScene.User }; + + }; + + LevelImage = new MirImageControl + { + Index = 516, + Library = Libraries.Prguse, + Location = new Point(73, 7), + Parent = this, + NotControl = true, + }; + + ExpImage = new MirImageControl + { + Index = 517, + Library = Libraries.Prguse, + Location = new Point(73, 19), + Parent = this, + NotControl = true, + }; + + LevelLabel = new MirLabel + { + AutoSize = true, + Parent = this, + Location = new Point(88, 2), + NotControl = true, + }; + + NameLabel = new MirLabel + { + AutoSize = true, + Parent = this, + Location = new Point(109, 2), + NotControl = true, + }; + + ExpLabel = new MirLabel + { + AutoSize = true, + Parent = this, + Location = new Point(109, 15), + NotControl = true, + }; + + KeyLabel = new MirLabel + { + AutoSize = true, + Parent = this, + Location = new Point(2, 2), + NotControl = true, + }; + + CoolDown = new MirImageControl + { + Library = Libraries.Prguse2, + Parent = this, + Location = new Point(36, 0), + Opacity = 0.6F, + NotControl = true, + UseOffSet = true, + }; + } + + public void Update(ClientMagic magic) + { + Magic = magic; + + NameLabel.Text = Magic.Name; + + LevelLabel.Text = Magic.Level.ToString(); + switch (Magic.Level) + { + case 0: + ExpLabel.Text = string.Format("{0}/{1}", Magic.Experience, Magic.Need1); + break; + case 1: + ExpLabel.Text = string.Format("{0}/{1}", Magic.Experience, Magic.Need2); + break; + case 2: + ExpLabel.Text = string.Format("{0}/{1}", Magic.Experience, Magic.Need3); + break; + case 3: + ExpLabel.Text = "-"; + break; + } + + KeyLabel.Text = Magic.Key == 0 ? string.Empty : string.Format("{0}{1}F{2}", + Prefixes[(Magic.Key - 1) / 8], + Magic.Key > 8 ? Environment.NewLine : string.Empty, + (Magic.Key - 1) % 8 + 1); + + switch (magic.Spell) + { //Warrior + case Spell.Fencing: + SkillButton.Hint = string.Format("Fencing \n\nHitting accuracy will be increased in accordance\nwith practice level.\nPassive Skill\nCurrent Skill Level {0}\nNext Level {1}", Magic.Level, Magic.Level == 0 ? Magic.Level1 : Magic.Level == 1 ? Magic.Level2 : Magic.Level == 2 ? Magic.Level3 : 0); + break; + case Spell.Slaying: + SkillButton.Hint = string.Format("Slaying \n\nHitting accuracy and destructive power will\nbe increased in accordance with practive level.\nPassive Skill\nCurrent Skill Level {0}\nNext Level {1}", Magic.Level, Magic.Level == 0 ? Magic.Level1 : Magic.Level == 1 ? Magic.Level2 : Magic.Level == 2 ? Magic.Level3 : 0); + break; + case Spell.Thrusting: + SkillButton.Hint = string.Format("Dark Damage\nThrusting \n\nIncreases the reach of your hits destructive power\nwill increase in accordance with practive level.\nCurrent Skill Level {0}\nNext Level {1}", Magic.Level, Magic.Level == 0 ? Magic.Level1 : Magic.Level == 1 ? Magic.Level2 : Magic.Level == 2 ? Magic.Level3 : 0); + break; + case Spell.HalfMoon: + SkillButton.Hint = string.Format("Wind Damage\nHalfMoon \n\nCause damage to mobs in a semi circle with\nthe shock waves from your fast moving weapon.\nCurrent Skill Level {0}\nNext Level {1}", Magic.Level, Magic.Level == 0 ? Magic.Level1 : Magic.Level == 1 ? Magic.Level2 : Magic.Level == 2 ? Magic.Level3 : 0); + break; + case Spell.FlamingSword: + SkillButton.Hint = string.Format("Fire Damage\nFlamingSword \n\nCause additional damage by summoning the spirit\nof fire into weapon\nCurrent Skill Level {0}\nNext Level {1}", Magic.Level, Magic.Level == 0 ? Magic.Level1 : Magic.Level == 1 ? Magic.Level2 : Magic.Level == 2 ? Magic.Level3 : 0); + break; + case Spell.ShoulderDash: + SkillButton.Hint = string.Format("ShoulderDash \n\nA warrior can push away mobs by charging\nthem with his shoulder, inflicting damage\nif they hit any obstacle.\nCurrent Skill Level {0}\nNext Level {1}", Magic.Level, Magic.Level == 0 ? Magic.Level1 : Magic.Level == 1 ? Magic.Level2 : Magic.Level == 2 ? Magic.Level3 : 0); + break; + //Wizard + case Spell.FireBall: + SkillButton.Hint = string.Format("Fireball \n\nInstant Casting\nMana Cost {2}\n\nElements of fire are gathered to form\na fireball. Throw at monsters for damage.\n\nCurrent Skill Level {0}\nNext Level {1}", Magic.Level, Magic.Level == 0 ? Magic.Level1 : Magic.Level == 1 ? Magic.Level2 : Magic.Level == 2 ? Magic.Level3 : 0, Magic.BaseCost); + break; + case Spell.ThunderBolt: + SkillButton.Hint = string.Format("Thundebolt \n\nInstant Casting\nMana Cost {2}\n\nStrikes the foe with a lightning bolt \ninflicting high damage.\n\nCurrent Skill Level {0}\nNext Level {1}", Magic.Level, Magic.Level == 0 ? Magic.Level1 : Magic.Level == 1 ? Magic.Level2 : Magic.Level == 2 ? Magic.Level3 : 0, Magic.BaseCost); + break; + case Spell.GreatFireBall: + SkillButton.Hint = string.Format("GreatFireBall \n\nInstant Casting\nMana Cost {2}\n\nStronger then fire ball, Great Fire Ball\nwill fire up the mobs.\n\nCurrent Skill Level {0}\nNext Level {1}", Magic.Level, Magic.Level == 0 ? Magic.Level1 : Magic.Level == 1 ? Magic.Level2 : Magic.Level == 2 ? Magic.Level3 : 0, Magic.BaseCost); + break; + case Spell.Repulsion: + SkillButton.Hint = string.Format("Repulsion \n\nInstant Casting\nMana Cost {2}\n\nPush away mobs useing the power of fire.\n\nCurrent Skill Level {0}\nNext Level {1}", Magic.Level, Magic.Level == 0 ? Magic.Level1 : Magic.Level == 1 ? Magic.Level2 : Magic.Level == 2 ? Magic.Level3 : 0, Magic.BaseCost); + break; + case Spell.HellFire: + SkillButton.Hint = string.Format("Hellfire \n\nInstant Casting\nMana Cost {2}\n\nShoots out a streak of fire attack\nthe monster in front.\n\nCurrent Skill Level {0}\nNext Level {1}", Magic.Level, Magic.Level == 0 ? Magic.Level1 : Magic.Level == 1 ? Magic.Level2 : Magic.Level == 2 ? Magic.Level3 : 0, Magic.BaseCost); + break; + case Spell.Lightning: + SkillButton.Hint = string.Format("Lightning \n\nInstant Casting\nMana Cost {2}\n\nShoots out a steak of lightning to attack\nthe monster in front.\n\nCurrent Skill Level {0}\nNext Level {1}", Magic.Level, Magic.Level == 0 ? Magic.Level1 : Magic.Level == 1 ? Magic.Level2 : Magic.Level == 2 ? Magic.Level3 : 0, Magic.BaseCost); + break; + case Spell.ElectricShock: + SkillButton.Hint = string.Format("ElectrickShock \n\nInstant Casting\nMana Cost {2}\n\nStrong shock wave hits the mob and the\nmob will not be able to move or the mob\nwill get confused and fight for you.\n\nCurrent Skill Level {0}\nNext Level {1}", Magic.Level, Magic.Level == 0 ? Magic.Level1 : Magic.Level == 1 ? Magic.Level2 : Magic.Level == 2 ? Magic.Level3 : 0, Magic.BaseCost); + break; + case Spell.Teleport: + SkillButton.Hint = string.Format("Teleport \n\nInstant Casting\nMana Cost {2}\n\nTeleport to a random spot.\n\nCurrent Skill Level {0}\nNext Level {1}", Magic.Level, Magic.Level == 0 ? Magic.Level1 : Magic.Level == 1 ? Magic.Level2 : Magic.Level == 2 ? Magic.Level3 : 0, Magic.BaseCost); + break; + case Spell.FireWall: + SkillButton.Hint = string.Format("FireWall \n\nInstant Casting\nMana Cost {2}\n\nThis skill will build a fire wall at a designated\nspot to attack the monster passing the area.\n\nCurrent Skill Level {0}\nNext Level {1}", Magic.Level, Magic.Level == 0 ? Magic.Level1 : Magic.Level == 1 ? Magic.Level2 : Magic.Level == 2 ? Magic.Level3 : 0, Magic.BaseCost); + break; + case Spell.FireBang: + SkillButton.Hint = string.Format("FireBang \n\nInstant Casting\nMana Cost {2}\n\nFirebang will burst out fire at a designated spot to\nburn all the monster within the area.\n\nCurrent Skill Level {0}\nNext Level {1}", Magic.Level, Magic.Level == 0 ? Magic.Level1 : Magic.Level == 1 ? Magic.Level2 : Magic.Level == 2 ? Magic.Level3 : 0, Magic.BaseCost); + break; + case Spell.ThunderStorm: + SkillButton.Hint = string.Format("Thunderstorm \n\nInstant Casting\nMana Cost {2}\n\nThis skill will make a thunder storm with in a designated area \nto attack the monster with in.\n\nCurrent Skill Level {0}\nNext Level {1}", Magic.Level, Magic.Level == 0 ? Magic.Level1 : Magic.Level == 1 ? Magic.Level2 : Magic.Level == 2 ? Magic.Level3 : 0, Magic.BaseCost); + break; + case Spell.MagicShield: + SkillButton.Hint = string.Format("MagicShield \n\nInstant Casting\nMana Cost {2}\n\nThis skill will use Mp to create protective\nlayer around you\nAttack will be absorbed by the protective layer\n\nCurrent Skill Level {0}\nNext Level {1}", Magic.Level, Magic.Level == 0 ? Magic.Level1 : Magic.Level == 1 ? Magic.Level2 : Magic.Level == 2 ? Magic.Level3 : 0, Magic.BaseCost); + break; + case Spell.FrostCrunch: + SkillButton.Hint = string.Format("FrostCrunch \n\nInstant Casting\nMana Cost {2}\n\nFreeze the elements in the air around the \nmonster to slow them down\n\nCurrent Skill Level {0}\nNext Level {1}", Magic.Level, Magic.Level == 0 ? Magic.Level1 : Magic.Level == 1 ? Magic.Level2 : Magic.Level == 2 ? Magic.Level3 : 0, Magic.BaseCost); + break; + //Taoist + case Spell.SpiritSword: + SkillButton.Hint = string.Format("SpiritSword \n\nIncreases the chance of hitting the target in\n melee combat.\nPassive Skill\n\nCurrent Skill Level {0}\nNext Level {1}", Magic.Level, Magic.Level == 0 ? Magic.Level1 : Magic.Level == 1 ? Magic.Level2 : Magic.Level == 2 ? Magic.Level3 : 0, Magic.BaseCost); + break; + case Spell.Healing: + SkillButton.Hint = string.Format("Healing \n\nInstant Casting\nMana Cost {2}\n\nHeals a single target \nrecovering HP over time.\n\nCurrent Skill Level {0}\nNext Level {1}", Magic.Level, Magic.Level == 0 ? Magic.Level1 : Magic.Level == 1 ? Magic.Level2 : Magic.Level == 2 ? Magic.Level3 : 0, Magic.BaseCost); + break; + case Spell.Poisoning: + SkillButton.Hint = string.Format("Poisoning \n\nInstant Casting\nMana Cost {2}\n\nRequired Items: Poison Powder\n\nThrow poison at mobs to weaken them.\nUse green poison to weaken Hp.\nUse red poison to weaken defense.\n\nCurrent Skill Level {0}\nNext Level {1}", Magic.Level, Magic.Level == 0 ? Magic.Level1 : Magic.Level == 1 ? Magic.Level2 : Magic.Level == 2 ? Magic.Level3 : 0, Magic.BaseCost); + break; + case Spell.SoulFireBall: + SkillButton.Hint = string.Format("SoulFireBall \n\nInstant Casting\nMana Cost {2}\n\nRequired Items: Amulet\n\nPut power into a scroll and throw it at \na mob. The scroll will burst into fire.\n\nCurrent Skill Level {0}\nNext Level {1}", Magic.Level, Magic.Level == 0 ? Magic.Level1 : Magic.Level == 1 ? Magic.Level2 : Magic.Level == 2 ? Magic.Level3 : 0, Magic.BaseCost); + break; + case Spell.SoulShield: + SkillButton.Hint = string.Format("SoulShield \n\nInstant Casting\nMana Cost {2}\n\nRequired Items: Amulet\n\nBless the partymembers to strengthen there magic\ndefence.\n\nCurrent Skill Level {0}\nNext Level {1}", Magic.Level, Magic.Level == 0 ? Magic.Level1 : Magic.Level == 1 ? Magic.Level2 : Magic.Level == 2 ? Magic.Level3 : 0, Magic.BaseCost); + break; + case Spell.BlessedArmour: + SkillButton.Hint = string.Format("BlessedArmour \n\nInstant Casting\nMana Cost {2}\n\nRequired Items: Amulet\n\nBless the partymemebers to strenghten there defence.\n\nCurrent Skill Level {0}\nNext Level {1}", Magic.Level, Magic.Level == 0 ? Magic.Level1 : Magic.Level == 1 ? Magic.Level2 : Magic.Level == 2 ? Magic.Level3 : 0, Magic.BaseCost); + break; + case Spell.TrapHexagon: + SkillButton.Hint = string.Format("TrapHexagon \n\nInstant Casting\nMana Cost {2}\n\nRequired Items: Amulet\n\nTrap the monster with this magical power\n to stop them from moving. Any damages\nfrom outside source will allow the monsters\nto move again.\n\nCurrent Skill Level {0}\nNext Level {1}", Magic.Level, Magic.Level == 0 ? Magic.Level1 : Magic.Level == 1 ? Magic.Level2 : Magic.Level == 2 ? Magic.Level3 : 0, Magic.BaseCost); + break; + case Spell.SummonSkeleton: + SkillButton.Hint = string.Format("SummonSkeleton \n\n\nInstant Casting\nMana Cost {2}\n\nSummons a Powerful AOE Skeleton, Which will Fight Side By Side With You\n\nRequired Items: Amulet.\n\nCurrent Skill Level {0}\nNext Level {1}", Magic.Level, Magic.Level == 0 ? Magic.Level1 : Magic.Level == 1 ? Magic.Level2 : Magic.Level == 2 ? Magic.Level3 : 0, Magic.BaseCost); + break; + case Spell.Hiding: + SkillButton.Hint = string.Format("Hiding \n\nInstant Casting\nMana Cost {2}\n\nRequired Items: Amulet\n\nMobs will not be able to spot you for a short\nmoment.Mobs will notice you if you start\nto move around.\n\nCurrent Skill Level {0}\nNext Level {1}", Magic.Level, Magic.Level == 0 ? Magic.Level1 : Magic.Level == 1 ? Magic.Level2 : Magic.Level == 2 ? Magic.Level3 : 0, Magic.BaseCost); + break; + case Spell.MassHiding: + SkillButton.Hint = string.Format("MassHiding \n\nInstant Casting\nMana Cost {2}\n\nRequired Items: Amulet\n\nMobs will not be able to spot you or your \nparty members for a short moment. \nMobs will notice you and your party if \nyou start to move around.\n\nCurrent Skill Level {0}\nNext Level {1}", Magic.Level, Magic.Level == 0 ? Magic.Level1 : Magic.Level == 1 ? Magic.Level2 : Magic.Level == 2 ? Magic.Level3 : 0, Magic.BaseCost); + break; + case Spell.Revelation: + SkillButton.Hint = string.Format("Revelation \n\nInstant Casting\nMana Cost {2}\n\nYou will be able to read Hp of others\n\nCurrent Skill Level {0}\nNext Level {1}", Magic.Level, Magic.Level == 0 ? Magic.Level1 : Magic.Level == 1 ? Magic.Level2 : Magic.Level == 2 ? Magic.Level3 : 0, Magic.BaseCost); + break; + case Spell.MassHealing: + SkillButton.Hint = string.Format("MassHealing \n\nInstant Casting\nMana Cost {2}\n\nHeal all injured players in the specified\narea by surrounding them with mana.\n\nCurrent Skill Level {0}\nNext Level {1}", Magic.Level, Magic.Level == 0 ? Magic.Level1 : Magic.Level == 1 ? Magic.Level2 : Magic.Level == 2 ? Magic.Level3 : 0, Magic.BaseCost); + break; + case Spell.UltimateEnhancer: + SkillButton.Hint = string.Format("UltimateEnhancer \n\nInstant Casting\nMana Cost {2}\n\nRequired Items: Amulet\n\nAbsorb the energy from the surroundings to increase the stats.\n\nCurrent Skill Level {0}\nNext Level {1}", Magic.Level, Magic.Level == 0 ? Magic.Level1 : Magic.Level == 1 ? Magic.Level2 : Magic.Level == 2 ? Magic.Level3 : 0, Magic.BaseCost); + break; + case Spell.EnergyRepulsor: + SkillButton.Hint = string.Format("EnergyRepulsor \n\nInstant Casting\nMana Cost {2}\n\nConcentrate your energy for one big blast to push away the monsters around you.\n\nCurrent Skill Level {0}\nNext Level {1}", Magic.Level, Magic.Level == 0 ? Magic.Level1 : Magic.Level == 1 ? Magic.Level2 : Magic.Level == 2 ? Magic.Level3 : 0, Magic.BaseCost); + break; + case Spell.Purification: + SkillButton.Hint = string.Format("Purification \n\nInstant Casting\nMana Cost {2}\n\nHelp others to recover from poisoning and\nparalysis useing this skill.\n\nCurrent Skill Level {0}\nNext Level {1}", Magic.Level, Magic.Level == 0 ? Magic.Level1 : Magic.Level == 1 ? Magic.Level2 : Magic.Level == 2 ? Magic.Level3 : 0, Magic.BaseCost); + break; + case Spell.Hallucination: + SkillButton.Hint = string.Format("Hallucination \n\nInstant Casting\nMana Cost {2}\n\nRequired Items: Amulet\n\nThe monster will only see hallucination \nand attack anyone on the way\n\nCurrent Skill Level {0}\nNext Level {1}", Magic.Level, Magic.Level == 0 ? Magic.Level1 : Magic.Level == 1 ? Magic.Level2 : Magic.Level == 2 ? Magic.Level3 : 0, Magic.BaseCost); + break; + + default: + + break; + } + + + SkillButton.Index = Magic.Icon * 2; + SkillButton.PressedIndex = Magic.Icon * 2 + 1; + + SetDelay(); + } + + public void SetDelay() + { + if (Magic == null) return; + + int totalFrames = 34; + + long timeLeft = Magic.CastTime + Magic.Delay - CMain.Time; + + if (timeLeft < 100) + { + CoolDown.Visible = false; + return; + } + + int delayPerFrame = (int)(Magic.Delay / totalFrames); + int startFrame = totalFrames - (int)(timeLeft / delayPerFrame); + + if ((CMain.Time <= Magic.CastTime + Magic.Delay)) + { + CoolDown.Visible = true; + CoolDown.Index = 1290 + startFrame; + } + } + } + public sealed class AssignKeyPanel : MirImageControl + { + public MirButton SaveButton, NoneButton; + public UserObject Actor; + public MirLabel TitleLabel; + public MirImageControl MagicImage; + public MirButton[] FKeys; + + public ClientMagic Magic; + public byte Key; + public byte KeyOffset; + + public AssignKeyPanel(ClientMagic magic, byte keyOffset, string[] keyStrings) + { + Magic = magic; + Key = magic.Key; + KeyOffset = keyOffset; + + Modal = true; + Index = 710; + Library = Libraries.Prguse; + Location = Center; + Parent = GameScene.Scene; + Visible = true; + + MagicImage = new MirImageControl + { + Location = new Point(16, 16), + Index = magic.Icon * 2, + Library = Libraries.MagIcon, + Parent = this, + }; + + TitleLabel = new MirLabel + { + Location = new Point(49, 17), + Parent = this, + Size = new Size(230, 32), + DrawFormat = TextFormatFlags.HorizontalCenter | TextFormatFlags.WordBreak, + Text = string.Format(GameLanguage.SelectKey, magic.Name) + }; + + NoneButton = new MirButton + { + Index = 287, //154 + HoverIndex = 288, + PressedIndex = 289, + Library = Libraries.Prguse, + Parent = this, + Location = new Point(284, 64), + }; + NoneButton.Click += (o, e) => Key = 0; + + SaveButton = new MirButton + { + Library = Libraries.Prguse, + Parent = this, + Location = new Point(284, 101), + Index = 156, + HoverIndex = 157, + PressedIndex = 158, + }; + SaveButton.Click += (o, e) => + { + for (int i = 0; i < Actor.Magics.Count; i++) + { + if (Actor.Magics[i].Key == Key) + Actor.Magics[i].Key = 0; + } + + Network.Enqueue(new C.MagicKey { Spell = Magic.Spell, Key = Key, OldKey = Magic.Key }); + Magic.Key = Key; + foreach (SkillBarDialog Bar in GameScene.Scene.SkillBarDialogs) + Bar.Update(); + + Dispose(); + }; + + FKeys = new MirButton[keyStrings.Length]; + + for (byte i = 0; i < FKeys.Length; i++) + { + FKeys[i] = new MirButton + { + Index = 0, + PressedIndex = 1, + Library = Libraries.Prguse, + Parent = this, + Location = new Point(17 + 32 * (i % 8) + 5 * (i % 8 / 4), 58 + 37 * (i / 8)), + Sound = SoundList.ButtonA, + Text = keyStrings[i] + }; + int num = i + keyOffset; + FKeys[i].Click += (o, e) => + { + Key = (byte)num; + }; + } + + BeforeDraw += AssignKeyPanel_BeforeDraw; + } + + private void AssignKeyPanel_BeforeDraw(object sender, EventArgs e) + { + for (int i = 0; i < FKeys.Length; i++) + { + FKeys[i].Index = 1656; + FKeys[i].HoverIndex = 1657; + FKeys[i].PressedIndex = 1658; + FKeys[i].Visible = true; + } + + int key = Key - KeyOffset; + if (key < 0 || key > FKeys.Length) return; + + FKeys[key].Index = 1658; + FKeys[key].HoverIndex = 1658; + FKeys[key].PressedIndex = 1658; + } + } +} diff --git a/Client/MirScenes/Dialogs/NPCDialogs.cs b/Client/MirScenes/Dialogs/NPCDialogs.cs new file mode 100644 index 0000000..8c4bbeb --- /dev/null +++ b/Client/MirScenes/Dialogs/NPCDialogs.cs @@ -0,0 +1,1527 @@ +using System.Globalization; +using System.Text.RegularExpressions; +using Client.MirControls; +using Client.MirGraphics; +using Client.MirNetwork; +using Client.MirObjects; +using Client.MirSounds; +using Font = System.Drawing.Font; +using C = ClientPackets; +using System.Diagnostics; + +namespace Client.MirScenes.Dialogs +{ + public sealed class NPCDialog : MirImageControl + { + public static Regex R = new Regex(@"<((.*?)\/(\@.*?))>"); + public static Regex C = new Regex(@"{((.*?)\/(.*?))}"); + public static Regex L = new Regex(@"\(((.*?)\/(.*?))\)"); + public static Regex B = new Regex(@"<<((.*?)\/(\@.*?))>>"); + + public MirButton CloseButton, UpButton, DownButton, PositionBar, QuestButton, HelpButton; + public MirLabel[] TextLabel; + public List TextButtons; + public List BigButtons; + public BigButtonDialog BigButtonDialog; + private MirGeneratedBox GeneratedBox; + + Font font = new Font(Settings.FontName, 9F); + + public List CurrentLines = new List(); + private int _index = 0; + public int MaximumLines = 8; + + public NPCDialog() + { + TextLabel = new MirLabel[30]; + TextButtons = new List(); + BigButtons = new List(); + AutoSize = false; + Size = new Size(360, 160); + PixelDetect = false; + Location = new Point(40, 40); + + MouseWheel += NPCDialog_MouseWheel; + + Sort = true; + + GeneratedBox = new MirGeneratedBox(142, Size) + { + Parent = this, + Visible = true + }; + + UpButton = new MirButton + { + Index = 197, + HoverIndex = 198, + PressedIndex = 199, + Library = Libraries.Prguse2, + Parent = this, + Size = new Size(16, 14), + Location = new Point(417, 34), + Sound = SoundList.ButtonA, + Visible = false + }; + UpButton.Click += (o, e) => + { + if (_index <= 0) return; + + _index--; + + NewText(CurrentLines, false); + UpdatePositionBar(); + }; + + DownButton = new MirButton + { + Index = 207, + HoverIndex = 208, + Library = Libraries.Prguse2, + PressedIndex = 209, + Parent = this, + Size = new Size(16, 14), + Location = new Point(417, 175), + Sound = SoundList.ButtonA, + Visible = false + }; + DownButton.Click += (o, e) => + { + if (_index + MaximumLines >= CurrentLines.Count) return; + + _index++; + + NewText(CurrentLines, false); + UpdatePositionBar(); + }; + + PositionBar = new MirButton + { + Index = 205, + HoverIndex = 206, + PressedIndex = 206, + Library = Libraries.Prguse2, + Location = new Point(417, 47), + Parent = this, + Movable = true, + Sound = SoundList.None, + Visible = false + }; + PositionBar.OnMoving += PositionBar_OnMoving; + + CloseButton = new MirButton + { + Index = 54, + Location = new Point(Size.Width / 2 - 35, Size.Height - 30), + Library = Libraries.Prguse, + Parent = this, + PressedIndex = 55, + Sound = SoundList.ButtonA, + }; + CloseButton.Click += (o, e) => Hide(); + + HelpButton = new MirButton + { + Index = 257, + HoverIndex = 258, + PressedIndex = 259, + Library = Libraries.Prguse2, + Parent = this, + Location = new Point(390, 3), + Sound = SoundList.ButtonA, + }; + HelpButton.Click += (o, e) => GameScene.Scene.HelpDialog.DisplayPage("Purchasing"); + + BigButtonDialog = new BigButtonDialog() + { + Parent = this, + }; + + QuestButton = new MirAnimatedButton() + { + Animated = true, + AnimationCount = 10, + Loop = true, + AnimationDelay = 130, + Index = 530, + HoverIndex = 284, + PressedIndex = 286, + Library = Libraries.Prguse, + Parent = this, + Size = new Size(96, 25), + Sound = SoundList.ButtonA, + Visible = false + }; + + QuestButton.Click += (o, e) => GameScene.Scene.QuestListDialog.Toggle(); + } + + void NPCDialog_MouseWheel(object sender, MouseEventArgs e) + { + int count = e.Delta / SystemInformation.MouseWheelScrollDelta; + + if (_index == 0 && count >= 0) return; + if (_index == CurrentLines.Count - 1 && count <= 0) return; + if (CurrentLines.Count <= MaximumLines) return; + + _index -= count; + + if (_index < 0) _index = 0; + if (_index + MaximumLines > CurrentLines.Count - 1) _index = CurrentLines.Count - MaximumLines; + + NewText(CurrentLines, false); + + UpdatePositionBar(); + } + + void PositionBar_OnMoving(object sender, MouseEventArgs e) + { + int x = 417; + int y = PositionBar.Location.Y; + + if (y >= 155) y = 155; + if (y <= 47) y = 47; + + int location = y - 47; + int interval = 108 / (CurrentLines.Count - MaximumLines); + + double yPoint = location / interval; + + _index = Convert.ToInt16(Math.Floor(yPoint)); + + NewText(CurrentLines, false); + + PositionBar.Location = new Point(x, y); + } + + private void UpdatePositionBar() + { + if (CurrentLines.Count <= MaximumLines) return; + + int interval = 108 / (CurrentLines.Count - MaximumLines); + + int x = 417; + int y = 48 + (_index * interval); + + if (y >= 155) y = 155; + if (y <= 47) y = 47; + + PositionBar.Location = new Point(x, y); + } + + private void ButtonClicked(string action) + { + if (action == "@Exit") + { + Hide(); + return; + } + + if (CMain.Time <= GameScene.NPCTime) return; + + GameScene.NPCTime = CMain.Time + 5000; + Network.Enqueue(new C.CallNPC { ObjectID = GameScene.NPCID, Key = $"[{action}]" }); + } + + + public void NewText(List lines, bool resetIndex = true) + { + Size = TrueSize; + + if (resetIndex) + { + _index = 0; + CurrentLines = lines; + UpdatePositionBar(); + for (int i = lines.Count - 1; i >= 0; i--) + { + string currentLine = lines[i]; + + List bigButtonSortedList = B.Matches(currentLine).Cast().OrderBy(o => o.Index).ToList(); + + for (int j = 0; j < bigButtonSortedList.Count; j++) + { + Match match = bigButtonSortedList[j]; + Capture capture = match.Groups[1].Captures[0]; + string txt = match.Groups[2].Captures[0].Value; + string action = match.Groups[3].Captures[0].Value; + string colourString = "RoyalBlue"; + + string[] actionSplit = action.Split('/'); + + action = actionSplit[0]; + if (actionSplit.Length > 1) + colourString = actionSplit[1]; + + Color color = Color.FromName(colourString); + + BigButton button = new BigButton + { + Index = 841, + HoverIndex = 842, + PressedIndex = 843, + Library = Libraries.Prguse, + Sound = SoundList.ButtonA, + Text = txt, + FontColour = Color.White, + ForeColour = color + }; + + button.Click += (o, e) => + { + ButtonClicked(action); + }; + BigButtons.Insert(0, button); + } + + var bigButtonString = B.ToString(); + + var oldCurrentLine = currentLine; + + currentLine = Regex.Replace(currentLine, bigButtonString, ""); + + if (string.IsNullOrWhiteSpace(currentLine) && oldCurrentLine != currentLine) + lines.RemoveAt(i); + } + + if (BigButtons.Count > 0) + { + int minimumButtons = 0; + if (string.IsNullOrWhiteSpace(string.Concat(lines))) + { + BigButtonDialog.Location = new Point(1, 27); + minimumButtons = 4; + } + else + BigButtonDialog.Location = new Point(1, Size.Height - 33); + + BigButtonDialog.Show(BigButtons, minimumButtons); + Size = new Size(Size.Width, BigButtonDialog.Location.Y + BigButtonDialog.Size.Height); + } + } + + if (lines.Count > MaximumLines) + { + Index = 385; + UpButton.Visible = true; + DownButton.Visible = true; + PositionBar.Visible = true; + } + else + { + Index = 384; + UpButton.Visible = false; + DownButton.Visible = false; + PositionBar.Visible = false; + } + + QuestButton.Location = new Point(172, Size.Height - 30); + + for (int i = 0; i < TextButtons.Count; i++) + TextButtons[i].Dispose(); + + for (int i = 0; i < TextLabel.Length; i++) + { + if (TextLabel[i] != null) TextLabel[i].Text = ""; + } + + TextButtons.Clear(); + + int lastLine = lines.Count > MaximumLines ? ((MaximumLines + _index) > lines.Count ? lines.Count : (MaximumLines + _index)) : lines.Count; + + for (int i = _index; i < lastLine; i++) + { + TextLabel[i] = new MirLabel + { + Font = font, + DrawFormat = TextFormatFlags.WordBreak, + Visible = true, + Parent = this, + Size = new Size(420, 20), + Location = new Point(8, 8 + (i - _index) * 18), + NotControl = true + }; + + if (i >= lines.Count) + { + TextLabel[i].Text = string.Empty; + continue; + } + + string currentLine = lines[i]; + + List matchList = R.Matches(currentLine).Cast().ToList(); + matchList.AddRange(C.Matches(currentLine).Cast()); + matchList.AddRange(L.Matches(currentLine).Cast()); + + int oldLength = currentLine.Length; + + foreach (Match match in matchList.OrderBy(o => o.Index).ToList()) + { + int offSet = oldLength - currentLine.Length; + + Capture capture = match.Groups[1].Captures[0]; + string txt = match.Groups[2].Captures[0].Value; + string action = match.Groups[3].Captures[0].Value; + + currentLine = currentLine.Remove(capture.Index - 1 - offSet, capture.Length + 2).Insert(capture.Index - 1 - offSet, txt); + string text = currentLine.Substring(0, capture.Index - 1 - offSet) + " "; + Size size = TextRenderer.MeasureText(CMain.Graphics, text, TextLabel[i].Font, TextLabel[i].Size, TextFormatFlags.TextBoxControl); + + if (R.Match(match.Value).Success) + NewButton(txt, action, TextLabel[i].Location.Add(new Point(size.Width - 10, 0))); + + if (C.Match(match.Value).Success) + NewColour(txt, action, TextLabel[i].Location.Add(new Point(size.Width - 10, 0))); + + if (L.Match(match.Value).Success) + NewButton(txt, null, TextLabel[i].Location.Add(new Point(size.Width - 10, 0)), action); + } + + TextLabel[i].Text = currentLine; + TextLabel[i].MouseWheel += NPCDialog_MouseWheel; + } + } + + private void NewButton(string text, string key, Point p, string link = "") + { + MirLabel temp = new MirLabel + { + AutoSize = true, + Visible = true, + Parent = this, + Location = p, + Text = text, + ForeColour = Color.Yellow, + Sound = SoundList.ButtonC, + Font = font + }; + + temp.MouseEnter += (o, e) => temp.ForeColour = Color.Red; + temp.MouseLeave += (o, e) => temp.ForeColour = Color.Yellow; + temp.MouseDown += (o, e) => temp.ForeColour = Color.Yellow; + temp.MouseUp += (o, e) => temp.ForeColour = Color.Red; + + if (!string.IsNullOrEmpty(link)) + { + temp.Click += (o, e) => + { + if (link.StartsWith("http://", true, CultureInfo.InvariantCulture)) + { + System.Diagnostics.Process.Start(new ProcessStartInfo + { + FileName = link, + UseShellExecute = true + }); + } + }; + } + else + { + temp.Click += (o, e) => + { + ButtonClicked(key); + }; + } + + temp.MouseWheel += NPCDialog_MouseWheel; + + TextButtons.Add(temp); + } + + private void NewColour(string text, string colour, Point p) + { + Color textColour = Color.FromName(colour); + + MirLabel temp = new MirLabel + { + AutoSize = true, + Visible = true, + Parent = this, + Location = p, + Text = text, + ForeColour = textColour, + Font = font + }; + temp.MouseWheel += NPCDialog_MouseWheel; + + TextButtons.Add(temp); + } + + public void CheckQuestButtonDisplay() + { + + QuestButton.Visible = false; + + NPCObject npc = (NPCObject)MapControl.GetObject(GameScene.NPCID); + if (npc != null) + { + if (npc.GetAvailableQuests().Any()) + QuestButton.Visible = true; + } + } + + public override void Hide() + { + Visible = false; + GameScene.Scene.NPCGoodsDialog.Hide(); + GameScene.Scene.NPCSubGoodsDialog.Hide(); + GameScene.Scene.NPCDropDialog.Hide(); + GameScene.Scene.RefineDialog.Hide(); + GameScene.Scene.StorageDialog.Hide(); + GameScene.Scene.TrustMerchantDialog.Hide(); + GameScene.Scene.QuestListDialog.Hide(); + GameScene.Scene.InventoryDialog.Location = new Point(40, 40); + GameScene.Scene.RollControl.Hide(); + BigButtonDialog.Hide(); + } + + public override void Show() + { + GameScene.Scene.InventoryDialog.Location = new Point(Location.X + Size.Width + 5, 40); + Visible = true; + + CheckQuestButtonDisplay(); + } + } + public sealed class NPCGoodsDialog : MirImageControl + { + public PanelType PType; + + public int StartIndex; + public UserItem SelectedItem; + + public List Goods = new List(); + public List DisplayGoods = new List(); + public MirGoodsCell[] Cells; + public MirButton BuyButton, CloseButton; + public MirImageControl BuyLabel; + + public MirButton UpButton, DownButton; + private MirGeneratedBox GeneratedBox; + + public NPCGoodsDialog(PanelType type) + { + PType = type; + Location = new Point(GameScene.Scene.NPCDialog.Location.X, GameScene.Scene.NPCDialog.Location.Y + GameScene.Scene.NPCDialog.Size.Height); + Cells = new MirGoodsCell[4]; + Sort = true; + DrawImage = false; + AutoSize = false; + Size = new Size(160, 160); + GeneratedBox = new MirGeneratedBox(142, Size) + { + Parent = this, + Visible = true + }; + + for (int i = 0; i < Cells.Length; i++) + { + Cells[i] = new MirGoodsCell + { + Parent = this, + Location = new Point(13, 16 + i * 33), + Sound = SoundList.ButtonC + }; + Cells[i].Click += (o, e) => + { + SelectedItem = ((MirGoodsCell)o).Item; + Update(); + }; + Cells[i].MouseWheel += NPCGoodsPanel_MouseWheel; + Cells[i].DoubleClick += (o, e) => + { + BuyItem(); + }; + } + + CloseButton = new MirButton + { + HoverIndex = 361, + Index = 360, + Location = new Point(217, 3), + Library = Libraries.Prguse2, + Parent = this, + PressedIndex = 362, + Sound = SoundList.ButtonA, + }; + CloseButton.Click += (o, e) => Hide(); + + BuyButton = new MirButton + { + HoverIndex = 313, + Index = 312, + Location = new Point(77, 304), + Library = Libraries.Prguse, + Parent = this, + PressedIndex = 314, + Sound = SoundList.ButtonA, + }; + BuyButton.Click += (o, e) => BuyItem(); + + BuyLabel = new MirImageControl + { + Index = 27, + Library = Libraries.Prguse, + Parent = this, + Location = new Point(20, 9), + }; + + UpButton = new MirButton + { + Index = 1, + Library = Libraries.Prguse, + Location = new Point(Size.Width - 15, 5), + Parent = this, + PressedIndex = 2, + Sound = SoundList.ButtonA + }; + UpButton.Click += (o, e) => + { + if (StartIndex == 0) return; + StartIndex--; + Update(); + }; + + DownButton = new MirButton + { + Index = 3, + Library = Libraries.Prguse, + Location = new Point(Size.Width - 15, Size.Height - 15), + Parent = this, + PressedIndex = 4, + Sound = SoundList.ButtonA + }; + DownButton.Click += (o, e) => + { + if (DisplayGoods.Count <= 4) return; + + if (StartIndex == DisplayGoods.Count - 4) return; + StartIndex++; + Update(); + }; + } + + private bool CheckSubGoods() + { + if (SelectedItem == null) return false; + + if (PType == PanelType.Buy) + { + var list = Goods.Where(x => x.Info.Index == SelectedItem.Info.Index).ToList(); + + if (list.Count > 1 || GameScene.Scene.NPCSubGoodsDialog.Visible) + { + GameScene.Scene.NPCSubGoodsDialog.NewGoods(list); + GameScene.Scene.NPCSubGoodsDialog.Show(); + return true; + } + } + + return false; + } + + private void BuyItem() + { + if (SelectedItem == null) return; + + if (CheckSubGoods()) + { + return; + } + + if (SelectedItem.Info.StackSize > 1) + { + ushort tempCount = SelectedItem.Count; + ushort maxQuantity = SelectedItem.Info.StackSize; + + SelectedItem.Count = maxQuantity; + + if (SelectedItem.Price() > GameScene.Gold) + { + maxQuantity = Math.Min(ushort.MaxValue, (ushort)(GameScene.Gold / (SelectedItem.Price() / SelectedItem.Count))); + if (maxQuantity == 0) + { + GameScene.Scene.ChatDialog.ReceiveChat(GameLanguage.LowGold, ChatType.System); + return; + } + } + + MapObject.User.GetMaxGain(SelectedItem); + + if (SelectedItem.Count == 0) + { + SelectedItem.Count = tempCount; + GameScene.Scene.ChatDialog.ReceiveChat(GameLanguage.NoBagSpace, ChatType.System); + return; + } + + if (SelectedItem.Count < maxQuantity) + { + maxQuantity = SelectedItem.Count; + } + + if (SelectedItem.Count > tempCount) + { + SelectedItem.Count = tempCount; + } + + MirAmountBox amountBox = new("Purchase Amount:", SelectedItem.Image, Libraries.Items, maxQuantity, 0, SelectedItem.Count); + + amountBox.OKButton.Click += (o, e) => + { + if (amountBox.Amount > 0) + { + Network.Enqueue(new C.BuyItem { ItemIndex = SelectedItem.UniqueID, Count = (ushort)amountBox.Amount, Type = PanelType.Buy }); + } + }; + + amountBox.Show(); + } + else + { + if (SelectedItem.Info.Price > GameScene.Gold) + { + GameScene.Scene.ChatDialog.ReceiveChat(GameLanguage.LowGold, ChatType.System); + return; + } + + for (int i = 0; i < MapObject.User.Inventory.Length; i++) + { + if (MapObject.User.Inventory[i] == null) break; + if (i == MapObject.User.Inventory.Length - 1) + { + GameScene.Scene.ChatDialog.ReceiveChat(GameLanguage.NoBagSpace, ChatType.System); + return; + } + } + + Network.Enqueue(new C.BuyItem { ItemIndex = SelectedItem.UniqueID, Count = 1, Type = PanelType.Buy }); + } + } + + private void NPCGoodsPanel_MouseWheel(object sender, MouseEventArgs e) + { + int count = e.Delta / SystemInformation.MouseWheelScrollDelta; + + if (StartIndex == 0 && count >= 0) return; + if (StartIndex == DisplayGoods.Count - 1 && count <= 0) return; + + StartIndex -= count; + Update(); + } + private void Update() + { + if (StartIndex > DisplayGoods.Count - 4) StartIndex = DisplayGoods.Count - 8; + if (StartIndex <= 0) StartIndex = 0; + + + + for (int i = 0; i < 4; i++) + { + if (i + StartIndex >= DisplayGoods.Count) + { + Cells[i].Visible = false; + continue; + } + Cells[i].Visible = true; + + var matchingGoods = Goods.Where(x => x.Info.Index == Cells[i].Item.Info.Index); + + Cells[i].Item = DisplayGoods[i + StartIndex]; + Cells[i].MultipleAvailable = matchingGoods.Count() > 1 && matchingGoods.Any(x => x.IsShopItem == false); + Cells[i].Border = SelectedItem != null && Cells[i].Item == SelectedItem; + } + } + + public void NewGoods(IEnumerable list) + { + Goods.Clear(); + DisplayGoods.Clear(); + + if (PType == PanelType.BuySub) + { + StartIndex = 0; + SelectedItem = null; + + list = list.OrderBy(x => x.Price()); + } + + foreach (UserItem item in list) + { + //Normal shops just want to show one of each item type + if (PType == PanelType.Buy) + { + Goods.Add(item); + if (DisplayGoods.Any(x => x.Info.Index == item.Info.Index)) continue; + } + + DisplayGoods.Add(item); + } + + if (GameScene.Scene.NPCSubGoodsDialog.Visible) + { + CheckSubGoods(); + } + + Update(); + } + + public override void Hide() + { + Visible = false; + } + + public override void Show() + { + Visible = true; + + GameScene.Scene.InventoryDialog.Show(); + } + } + public sealed class NPCDropDialog : MirImageControl + { + + public readonly MirButton ConfirmButton, HoldButton; + public readonly MirItemCell ItemCell; + public MirItemCell OldCell; + public readonly MirLabel InfoLabel; + public PanelType PType; + + public static UserItem TargetItem; + public bool Hold; + + + public NPCDropDialog() + { + Index = 392; + Library = Libraries.Prguse; + Location = new Point(264, 224); + Sort = true; + + Click += NPCDropPanel_Click; + + HoldButton = new MirButton + { + HoverIndex = 294, + Index = 293, + Location = new Point(114, 36), + Library = Libraries.Prguse, + Parent = this, + PressedIndex = 295, + Sound = SoundList.ButtonA, + }; + HoldButton.Click += (o, e) => Hold = !Hold; + + ConfirmButton = new MirButton + { + HoverIndex = 291, + Index = 290, + Location = new Point(114, 62), + Library = Libraries.Prguse, + Parent = this, + PressedIndex = 292, + Sound = SoundList.ButtonA, + }; + ConfirmButton.Click += (o, e) => Confirm(); + + InfoLabel = new MirLabel + { + AutoSize = true, + Location = new Point(30, 10), + Parent = this, + NotControl = true, + }; + + ItemCell = new MirItemCell + { + BorderColour = Color.Lime, + GridType = MirGridType.DropPanel, + Library = Libraries.Items, + Parent = this, + Location = new Point(38, 72), + }; + ItemCell.Click += (o, e) => ItemCell_Click(); + + BeforeDraw += NPCDropPanel_BeforeDraw; + AfterDraw += NPCDropPanel_AfterDraw; + } + + private void NPCDropPanel_AfterDraw(object sender, EventArgs e) + { + if (Hold) + Libraries.Prguse.Draw(295, 114 + DisplayLocation.X, 36 + DisplayLocation.Y); + } + + private void NPCDropPanel_Click(object sender, EventArgs e) + { + MouseEventArgs me = e as MouseEventArgs; + + if (me == null) return; + int x = me.X - DisplayLocation.X; + int y = me.Y - DisplayLocation.Y; + + if (new Rectangle(20, 55, 75, 75).Contains(x, y)) + ItemCell_Click(); + } + + private void Confirm() + { + if (TargetItem == null) return; + + switch (PType) + { + case PanelType.Sell: + if (TargetItem.Info.Bind.HasFlag(BindMode.DontSell)) + { + GameScene.Scene.ChatDialog.ReceiveChat("Cannot sell this item.", ChatType.System); + return; + } + if (GameScene.Gold + TargetItem.Price() / 2 <= uint.MaxValue) + { + Network.Enqueue(new C.SellItem { UniqueID = TargetItem.UniqueID, Count = TargetItem.Count }); + TargetItem = null; + return; + } + GameScene.Scene.ChatDialog.ReceiveChat("Cannot carry anymore gold.", ChatType.System); + break; + case PanelType.Repair: + if (TargetItem.Info.Bind.HasFlag(BindMode.DontRepair)) + { + GameScene.Scene.ChatDialog.ReceiveChat("Cannot repair this item.", ChatType.System); + return; + } + if (GameScene.Gold >= TargetItem.RepairPrice() * GameScene.NPCRate) + { + Network.Enqueue(new C.RepairItem { UniqueID = TargetItem.UniqueID }); + TargetItem = null; + return; + } + GameScene.Scene.ChatDialog.ReceiveChat(GameLanguage.LowGold, ChatType.System); + break; + case PanelType.SpecialRepair: + if ((TargetItem.Info.Bind.HasFlag(BindMode.DontRepair)) || (TargetItem.Info.Bind.HasFlag(BindMode.NoSRepair))) + { + GameScene.Scene.ChatDialog.ReceiveChat("Cannot repair this item.", ChatType.System); + return; + } + if (GameScene.Gold >= (TargetItem.RepairPrice() * 3) * GameScene.NPCRate) + { + Network.Enqueue(new C.SRepairItem { UniqueID = TargetItem.UniqueID }); + TargetItem = null; + return; + } + GameScene.Scene.ChatDialog.ReceiveChat(GameLanguage.LowGold, ChatType.System); + break; + case PanelType.Consign: + if (TargetItem.Info.Bind.HasFlag(BindMode.DontStore) || TargetItem.Info.Bind.HasFlag(BindMode.DontSell)) + { + GameScene.Scene.ChatDialog.ReceiveChat("Cannot consign this item.", ChatType.System); + return; + } + MirAmountBox box = new MirAmountBox("Consignment Price:", TargetItem.Image, Libraries.Items, Globals.MaxConsignment, Globals.MinConsignment) + { + InputTextBox = { Text = string.Empty }, + Amount = 0 + }; + + box.Show(); + box.OKButton.Click += (o, e) => + { + Network.Enqueue(new C.ConsignItem { UniqueID = TargetItem.UniqueID, Price = box.Amount, Type = MarketPanelType.Consign }); + TargetItem = null; + }; + return; + case PanelType.Refine: + + for (int i = 0; i < GameScene.Scene.RefineDialog.Grid.Length; i++) + { + if (GameScene.Scene.RefineDialog.Grid[i].Item != null) + { + if (GameScene.Gold >= ((TargetItem.Info.RequiredAmount * 10) * GameScene.NPCRate)) + { + Network.Enqueue(new C.RefineItem { UniqueID = TargetItem.UniqueID }); + TargetItem = null; + return; + } + GameScene.Scene.ChatDialog.ReceiveChat(String.Format("You don't have enough gold to refine your {0}.", TargetItem.FriendlyName), ChatType.System); + return; + } + + } + GameScene.Scene.ChatDialog.ReceiveChat(String.Format("You haven't deposited any items to refine your {0} with.", TargetItem.FriendlyName), ChatType.System); + break; + case PanelType.CheckRefine: + + if (TargetItem.RefineAdded == 0) + { + GameScene.Scene.ChatDialog.ReceiveChat(String.Format("Your {0} hasn't been refined so it doesn't need checking.", TargetItem.FriendlyName), ChatType.System); + return; + } + Network.Enqueue(new C.CheckRefine { UniqueID = TargetItem.UniqueID }); + break; + + case PanelType.ReplaceWedRing: + + if (TargetItem.Info.Type != ItemType.Ring) + { + GameScene.Scene.ChatDialog.ReceiveChat(String.Format("{0} isn't a ring.", TargetItem.FriendlyName), ChatType.System); + return; + } + + Network.Enqueue(new C.ReplaceWedRing { UniqueID = TargetItem.UniqueID }); + break; + } + + + TargetItem = null; + OldCell.Locked = false; + OldCell = null; + } + + private void ItemCell_Click() + { + if (OldCell != null) + { + OldCell.Locked = false; + TargetItem = null; + OldCell = null; + } + + if (GameScene.SelectedCell == null || GameScene.SelectedCell.GridType != MirGridType.Inventory || + (PType != PanelType.Sell && PType != PanelType.Consign && GameScene.SelectedCell.Item != null && GameScene.SelectedCell.Item.Info.Durability == 0)) + return; + + TargetItem = GameScene.SelectedCell.Item; + OldCell = GameScene.SelectedCell; + OldCell.Locked = true; + GameScene.SelectedCell = null; + if (Hold) Confirm(); + } + + private void NPCDropPanel_BeforeDraw(object sender, EventArgs e) + { + string text; + + HoldButton.Visible = true; + + Index = 351; + Library = Libraries.Prguse2; + Location = new Point(264, GameScene.Scene.NPCDialog.Size.Height); + + ConfirmButton.HoverIndex = 291; + ConfirmButton.Index = 290; + ConfirmButton.PressedIndex = 292; + ConfirmButton.Location = new Point(114, 62); + + InfoLabel.Location = new Point(30, 10); + + ItemCell.Location = new Point(38, 72); + + switch (PType) + { + case PanelType.Sell: + text = "Sale: "; + break; + case PanelType.Repair: + text = "Repair: "; + break; + case PanelType.SpecialRepair: + text = "S. Repair: "; + break; + case PanelType.Consign: + InfoLabel.Text = "Consignment: "; + return; + case PanelType.Refine: + text = "Refine: "; + HoldButton.Visible = false; + ConfirmButton.Visible = true; + GameScene.Scene.RefineDialog.Show(); + break; + case PanelType.CheckRefine: + text = "Check Refine"; + HoldButton.Visible = false; + ConfirmButton.Visible = true; + break; + case PanelType.ReplaceWedRing: + text = "Replace: "; + HoldButton.Visible = false; + ConfirmButton.Visible = true; + break; + + default: return; + + } + + if (TargetItem != null) + { + + switch (PType) + { + case PanelType.Sell: + text += (TargetItem.Price() / 2).ToString(); + break; + case PanelType.Repair: + text += (TargetItem.RepairPrice() * GameScene.NPCRate).ToString(); + break; + case PanelType.SpecialRepair: + text += ((TargetItem.RepairPrice() * 3) * GameScene.NPCRate).ToString(); + break; + case PanelType.Refine: + text += ((TargetItem.Info.RequiredAmount * 10) * GameScene.NPCRate).ToString(); + break; + case PanelType.ReplaceWedRing: + text += ((TargetItem.Info.RequiredAmount * 10) * GameScene.NPCRate).ToString(); + break; + default: return; + } + + text += " Gold"; + } + + InfoLabel.Text = text; + } + + public override void Hide() + { + if (OldCell != null) + { + OldCell.Locked = false; + TargetItem = null; + OldCell = null; + } + Visible = false; + } + public override void Show() + { + Hold = false; + GameScene.Scene.InventoryDialog.Show(); + Visible = true; + } + } + public sealed class RefineDialog : MirImageControl + { + public MirItemCell[] Grid; + public MirButton RefineButton; + + public RefineDialog() + { + Index = 1002; + Library = Libraries.Prguse; + Location = new Point(0, 225); + Sort = true; + + MirImageControl TitleLabel = new MirImageControl + { + Index = 18, + Library = Libraries.Prguse, + Location = new Point(28, 8), + Parent = this + }; + + + Grid = new MirItemCell[4 * 4]; + for (int x = 0; x < 4; x++) + { + for (int y = 0; y < 4; y++) + { + int idx = 4 * y + x; + Grid[idx] = new MirItemCell + { + ItemSlot = idx, + GridType = MirGridType.Refine, + Library = Libraries.Items, + Parent = this, + Size = new Size(34, 32), + Location = new Point(x * 34 + 12 + x, y * 32 + 37 + y), + }; + } + } + } + + public override void Hide() + { + if (!Visible) return; + + Visible = false; + RefineCancel(); + } + + public void RefineCancel() + { + Network.Enqueue(new C.RefineCancel()); + } + + public void RefineReset() + { + for (int i = 0; i < Grid.Length; i++) + Grid[i].Item = null; + } + + + + public MirItemCell GetCell(ulong id) + { + for (int i = 0; i < Grid.Length; i++) + { + if (Grid[i].Item == null || Grid[i].Item.UniqueID != id) continue; + return Grid[i]; + } + return null; + } + + } + public sealed class StorageDialog : MirImageControl + { + public MirItemCell[] Grid; + public MirButton CloseButton; + + public StorageDialog() + { + Index = 169; + Library = Libraries.Prguse; + Location = new Point(20, 40); + Sort = true; + + CloseButton = new MirButton + { + Index = 54, + Location = new Point(Size.Width / 2 - 35, Size.Height - 30), + Library = Libraries.Prguse, + Parent = this, + PressedIndex = 55, + Sound = SoundList.ButtonA, + }; + CloseButton.Click += (o, e) => Hide(); + + Grid = new MirItemCell[6 * 10]; + + for (int x = 0; x < 6; x++) + { + for (int y = 0; y < 10; y++) + { + int idx = 6 * y + x; + Grid[idx] = new MirItemCell + { + ItemSlot = idx, + GridType = MirGridType.Storage, + Library = Libraries.Items, + Parent = this, + Location = new Point(x * 60 + 11 + x, y % 5 * 46 + 16 + y % 5), + }; + + if (idx >= 30) + Grid[idx].Visible = false; + } + } + } + + public override void Show() + { + GameScene.Scene.InventoryDialog.Show(); + RefreshStorage1(); + + Visible = true; + } + + public void RefreshStorage1() + { + if (GameScene.User == null) return; + + foreach (var grid in Grid) + { + if (grid.ItemSlot < 30) + grid.Visible = true; + else + grid.Visible = false; + } + } + + public MirItemCell GetCell(ulong id) + { + for (int i = 0; i < Grid.Length; i++) + { + if (Grid[i].Item == null || Grid[i].Item.UniqueID != id) continue; + return Grid[i]; + } + return null; + } + } + public sealed class BigButtonDialog : MirImageControl + { + const int MaximumRows = 8; + private List CurrentButtons; + private int ScrollOffset = 0; + public BigButtonDialog() + { + Visible = false; + } + + public void Show(List buttons, int minimumButtons) + { + if (Visible) return; + CurrentButtons = buttons; + + for (int i = 0; i < Controls.Count; i++) + Controls[i].Dispose(); + Controls.Clear(); + Size = Size.Empty; + ScrollOffset = 0; + + CurrentButtons.ToList().ForEach(b => b.MouseWheel += (o, e) => BigButtonDialog_MouseWheel(o, e)); + int count = Math.Max(minimumButtons, buttons.Count); + for (int i = 0; i < Math.Min(count, MaximumRows); i++) + { + MirImageControl background = new MirImageControl() + { + Parent = this, + Library = Libraries.Prguse, + Location = new Point(buttons.Count == 1 ? -1 : 0, Size.Height), + Index = count == 1 ? 836 : (i == 0 ? 838 : (i == count - 1 ? 840 : 839)), + NotControl = false, + Visible = true, + }; + background.MouseWheel += (o, e) => BigButtonDialog_MouseWheel(o, e); + Size = new Size(background.Size.Width, Size.Height + background.Size.Height); + } + + RefreshButtons(); + + MirImageControl footer = new MirImageControl() + { + Parent = this, + Library = Libraries.Prguse, + Location = new Point(-1, Size.Height), + Index = 837, + NotControl = false, + Visible = true, + }; + Size = new Size(Size.Width, Size.Height + footer.Size.Height); + + if (buttons.Count > MaximumRows) + { + MirButton upButton = new MirButton + { + Index = 197, + HoverIndex = 198, + PressedIndex = 199, + Library = Libraries.Prguse2, + Parent = this, + Size = new Size(16, 14), + Sound = SoundList.ButtonA, + Location = new Point(Size.Width - 26, 17) + }; + upButton.Click += (o, e) => + { + ScrollUp(); + }; + + MirButton downButton = new MirButton + { + Index = 207, + HoverIndex = 208, + Library = Libraries.Prguse2, + PressedIndex = 209, + Parent = this, + Size = new Size(16, 14), + Sound = SoundList.ButtonA, + Location = new Point(Size.Width - 26, Size.Height - 57) + }; + downButton.Click += (o, e) => + { + ScrollDown(); + }; + } + + Visible = true; + } + + public override void Hide() + { + Size = Size.Empty; + Visible = false; + } + + private void RefreshButtons() + { + CurrentButtons.ToList().ForEach(b => b.Visible = false); + + for (int i = 0; i < Math.Min(CurrentButtons.Count, MaximumRows); i++) + { + CurrentButtons[i + ScrollOffset].Parent = this; + CurrentButtons[i + ScrollOffset].Visible = true; + CurrentButtons[i + ScrollOffset].Location = new Point(97, 7 + i * 40); + } + } + + private void BigButtonDialog_MouseWheel(object sender, MouseEventArgs e) + { + int count = e.Delta / SystemInformation.MouseWheelScrollDelta; + + if (count > 0) + ScrollUp(); + else if (count < 0) + ScrollDown(); + } + + private void ScrollUp() + { + if (ScrollOffset <= 0) return; + + ScrollOffset--; + RefreshButtons(); + } + + private void ScrollDown() + { + if (ScrollOffset + MaximumRows >= CurrentButtons.Count) return; + + ScrollOffset++; + RefreshButtons(); + } + } + public sealed class BigButton : MirButton + { + #region Label + private MirLabel _shadowLabel; + #endregion + + #region CenterText + public override bool CenterText + { + get + { + return _center; + } + set + { + _center = value; + if (_center) + { + _label.Size = Size; + _label.DrawFormat = TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter; + _shadowLabel.Size = Size; + _shadowLabel.DrawFormat = TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter; + } + else + { + _label.AutoSize = true; + _shadowLabel.AutoSize = true; + } + } + } + #endregion + + #region Font Colour + public override Color FontColour + { + get + { + if (_label != null && !_label.IsDisposed) + return _label.ForeColour; + return Color.Empty; + } + set + { + if (_label != null && !_label.IsDisposed) + _label.ForeColour = value; + } + } + #endregion + + #region Size + protected override void OnSizeChanged() + { + base.OnSizeChanged(); + + if (_shadowLabel != null && !_shadowLabel.IsDisposed) + _shadowLabel.Size = Size; + } + #endregion + + #region Text + public override string Text + { + set + { + if (_label != null && !_label.IsDisposed) + { + _label.Text = value; + _label.Visible = !string.IsNullOrEmpty(value); + } + + if (_shadowLabel != null && !_shadowLabel.IsDisposed) + { + _shadowLabel.Text = value; + _shadowLabel.Visible = !string.IsNullOrEmpty(value); + } + } + } + #endregion + public BigButton() + { + HoverIndex = -1; + PressedIndex = -1; + DisabledIndex = -1; + Sound = SoundList.ButtonB; + + _shadowLabel = new MirLabel + { + NotControl = true, + Parent = this, + Location = new Point(2, 7), + AutoSize = false, + Size = new Size(237, 20), + DrawFormat = TextFormatFlags.HorizontalCenter, + ForeColour = Color.Black, + Font = ScaleFont(new Font(Settings.FontName, 12F, FontStyle.Bold)) + }; + + _label = new MirLabel + { + NotControl = true, + Parent = this, + Location = new Point(0, 5), + AutoSize = false, + Size = new Size(237, 20), + DrawFormat = TextFormatFlags.HorizontalCenter, + Font = ScaleFont(new Font(Settings.FontName, 12F, FontStyle.Bold)) + }; + } + + protected internal override void DrawControl() + { + base.DrawControl(); + + if (DrawImage && Library != null) + { + bool oldGray = DXManager.GrayScale; + + if (GrayScale) + { + DXManager.SetGrayscale(true); + } + + if (Blending) + Library.DrawBlend(Index + 3, DisplayLocation, Color.White, false, BlendingRate); + else + Library.Draw(Index + 3, DisplayLocation, Color.White, false, Opacity); + + if (GrayScale) DXManager.SetGrayscale(oldGray); + } + } + + #region Disposable + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + + if (!disposing) return; + + if (_shadowLabel != null && !_shadowLabel.IsDisposed) + _shadowLabel.Dispose(); + _shadowLabel = null; + } + #endregion + } +} diff --git a/Client/MirScenes/Dialogs/NewCharacterDialog.cs b/Client/MirScenes/Dialogs/NewCharacterDialog.cs new file mode 100644 index 0000000..e72afe1 --- /dev/null +++ b/Client/MirScenes/Dialogs/NewCharacterDialog.cs @@ -0,0 +1,284 @@ +using System.Text.RegularExpressions; +using Client.MirControls; +using Client.MirGraphics; +using Client.MirSounds; +using static System.Windows.Forms.VisualStyles.VisualStyleElement.TrayNotify; + +namespace Client.MirScenes.Dialogs +{ + public sealed class NewCharacterDialog : MirImageControl + { + private static readonly Regex Reg = new Regex(@"^[A-Za-z0-9]|[\u4e00-\u9fa5]{" + Globals.MinCharacterNameLength + "," + Globals.MaxCharacterNameLength + "}$"); + private static readonly int[] ClassBodyShapes = new int[3] + { + 2, + 4, + 5 + }; + + private static readonly int[] ClassWeaponShapes = new int[3] + { + 2, + 4, + 5 + }; + + public MirImageControl CharacterDisplay, HeadDisplay, WeaponDisplay; + + public MirTextBox NameTextBox; + public MirLabel Description; + public MirButton HairLeft, HairRight, GenderLeft, GenderRight, ClassLeft, ClassRight; + + public MirClass Class; + public MirGender Gender; + public byte Hair; + + #region Descriptions + public const string WarriorDescription = + "<$Gender> Warrior\r\nWarriors are a class of great strength and vitality. They are not easily killed in battle and have the advantage of being able to use" + + " a variety of heavy weapons and Armour. Therefore, Warriors favor attacks that are based on melee physical damage. They are weak in ranged" + + " attacks, however the variety of equipment that are developed specifically for Warriors complement their weakness in ranged combat."; + + public const string WizardDescription = + "<$Gender> Wizard\r\nWizards are a class of low strength and stamina, but have the ability to use powerful spells. Their offensive spells are very effective, but" + + " because it takes time to cast these spells, they're likely to leave themselves open for enemy's attacks. Therefore, the physically weak wizards" + + " must aim to attack their enemies from a safe distance."; + + public const string TaoistDescription = + "<$Gender> Taoist\r\nTaoists are well disciplined in the study of Astronomy, Medicine, and others aside from Mu-Gong. Rather then directly engaging the enemies, their" + + " specialty lies in assisting their allies with support. Taoists can summon powerful creatures and have a high resistance to magic, and is a class" + + " with well balanced offensive and defensive abilities."; + + #endregion + + private SelectScene ParentScene => (SelectScene)Parent; + + public NewCharacterDialog() + { + Index = 136; + Library = Libraries.Prguse; + Location = new Point(Settings.ScreenWidth - 230, 200); + + NameTextBox = new MirTextBox + { + Location = new Point(31, 146), + Parent = this, + Size = new Size(100, 16), + MaxLength = Globals.MaxCharacterNameLength + }; + NameTextBox.TextBox.KeyPress += TextBox_KeyPress; + NameTextBox.TextBox.TextChanged += CharacterNameTextBox_TextChanged; + NameTextBox.SetFocus(); + + CharacterDisplay = new MirImageControl + { + Library = Libraries.Body, + Location = new Point(57, 115), + Parent = this, + NotControl = true, + UseOffSet = true, + }; + HeadDisplay = new MirImageControl + { + Library = Libraries.Head, + Location = new Point(57, 115), + Parent = this, + NotControl = true, + UseOffSet = true, + }; + WeaponDisplay = new MirImageControl + { + Library = Libraries.Weapon, + Location = new Point(57, 115), + Parent = this, + NotControl = true, + UseOffSet = true, + }; + + Description = new MirLabel + { + Border = true, + Location = new Point(-200, 150), + Parent = this, + Size = new Size(178, 170), + Text = WarriorDescription, + }; + + HairLeft = new MirButton + { + HoverIndex = 32, + Index = 33, + Library = Libraries.Prguse, + Location = new Point(42, 46), + Parent = this, + PressedIndex = 34 + }; + HairLeft.Click += (o, e) => + { + Hair--; + UpdateInterface(); + }; + + HairRight = new MirButton + { + HoverIndex = 35, + Index = 36, + Library = Libraries.Prguse, + Location = new Point(104, 46), + Parent = this, + PressedIndex = 37 + }; + HairRight.Click += (o, e) => + { + Hair++; + UpdateInterface(); + }; + + ClassLeft = new MirButton + { + HoverIndex = 32, + Index = 33, + Library = Libraries.Prguse, + Location = new Point(42, 76), + Parent = this, + PressedIndex = 34 + }; + ClassLeft.Click += (o, e) => + { + Class--; + UpdateInterface(); + }; + + ClassRight = new MirButton + { + HoverIndex = 35, + Index = 36, + Library = Libraries.Prguse, + Location = new Point(104, 76), + Parent = this, + PressedIndex = 37 + }; + ClassRight.Click += (o, e) => + { + Class++; + UpdateInterface(); + }; + + GenderLeft = new MirButton + { + HoverIndex = 32, + Index = 33, + Library = Libraries.Prguse, + Location = new Point(42, 106), + Parent = this, + PressedIndex = 34 + }; + GenderLeft.Click += (o, e) => + { + Gender--; + UpdateInterface(); + }; + + GenderRight = new MirButton + { + HoverIndex = 35, + Index = 36, + Library = Libraries.Prguse, + Location = new Point(104, 106), + Parent = this, + PressedIndex = 37 + }; + GenderRight.Click += (o, e) => + { + Gender++; + UpdateInterface(); + }; + } + + public override void Show() + { + base.Show(); + + Class = MirClass.Warrior; + Gender = MirGender.Male; + Hair = 1; + NameTextBox.Text = string.Empty; + + UpdateInterface(); + } + + private void TextBox_KeyPress(object sender, KeyPressEventArgs e) + { + if (sender == null) return; + if (e.KeyChar != (char)Keys.Enter) return; + e.Handled = true; + + if (ParentScene.CreateCharacterButton.Enabled) + ParentScene.CreateCharacterButton.InvokeMouseClick(null); + } + private void CharacterNameTextBox_TextChanged(object sender, EventArgs e) + { + if (string.IsNullOrEmpty(NameTextBox.Text)) + { + ParentScene.CreateCharacterButton.Enabled = false; + NameTextBox.Border = false; + } + else if (!Reg.IsMatch(NameTextBox.Text)) + { + ParentScene.CreateCharacterButton.Enabled = false; + NameTextBox.Border = true; + NameTextBox.BorderColour = Color.Red; + } + else + { + ParentScene.CreateCharacterButton.Enabled = true; + NameTextBox.Border = true; + NameTextBox.BorderColour = Color.Green; + } + } + + public event EventHandler OnCreateCharacter; + public void CreateCharacter() + { + ParentScene.CreateCharacterButton.Enabled = false; + + if (OnCreateCharacter != null) + OnCreateCharacter.Invoke(this, EventArgs.Empty); + } + + private void UpdateInterface() + { + CharacterDisplay.Index = 74 + (ClassBodyShapes[(int)Class] * 240) + (120 * (int)Gender); + HeadDisplay.Index = 74 + (Hair * 240) + (120 * (int)Gender); + WeaponDisplay.Index = 74 + (ClassWeaponShapes[(int)Class] * 240) + (120 * (int)Gender); + + switch (Class) + { + case MirClass.Warrior: + Description.Text = WarriorDescription; + break; + case MirClass.Wizard: + Description.Text = WizardDescription; + break; + case MirClass.Taoist: + Description.Text = TaoistDescription; + break; + } + Description.Text = Description.Text.Replace("<$Gender>", Gender.ToString()); + + HairLeft.Visible = Hair > 1; + HairRight.Visible = Hair < 21; + ClassLeft.Visible = Class > MirClass.Warrior; + ClassRight.Visible = Class < MirClass.Taoist; + GenderLeft.Visible = Gender > MirGender.Male; + GenderRight.Visible = Gender < MirGender.Female; + } + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + + OnCreateCharacter = null; + } + } +} diff --git a/Client/MirScenes/Dialogs/NoticeDialog.cs b/Client/MirScenes/Dialogs/NoticeDialog.cs new file mode 100644 index 0000000..a4c9524 --- /dev/null +++ b/Client/MirScenes/Dialogs/NoticeDialog.cs @@ -0,0 +1,373 @@ +using Client.MirControls; +using Client.MirGraphics; +using Client.MirSounds; +using System.Text.RegularExpressions; +using System.Globalization; +using System.Diagnostics; + +namespace Client.MirScenes.Dialogs +{ + public sealed class NoticeDialog : MirImageControl + { + public static Regex C = new Regex(@"{((.*?)\/(.*?))}"); + public static Regex L = new Regex(@"\(((.*?)\/(.*?))\)"); + + public MirButton CloseButton, UpButton, DownButton, PositionBar, OkButton; + public MirLabel[] TextLabel; + public List TextButtons; + public MirImageControl TitleLabel; + public MirLabel NameLabel; + + public Notice Notice = new Notice(); + + Font font = new Font(Settings.FontName, 10F); + + public List CurrentLines = new List(); + private int _index = 0; + public int MaximumLines = 19; + + public NoticeDialog() + { + Index = 961; + Library = Libraries.Prguse; + Location = new Point((Settings.ScreenWidth - Size.Width) / 2, (Settings.ScreenHeight - Size.Height) / 3); + TextLabel = new MirLabel[40]; + TextButtons = new List(); + + MouseWheel += LoginNoticeDialog_MouseWheel; + + Sort = true; + + NameLabel = new MirLabel + { + Text = "", + Parent = this, + Font = new Font(Settings.FontName, 10F, FontStyle.Bold), + ForeColour = Color.BurlyWood, + Location = new Point(30, 6), + AutoSize = true + }; + + CloseButton = new MirButton + { + Index = 360, + HoverIndex = 361, + PressedIndex = 362, + Library = Libraries.Prguse2, + Parent = this, + Location = new Point(289, 3), + Sound = SoundList.ButtonA, + }; + CloseButton.Click += (o, e) => Hide(); + + OkButton = new MirButton + { + Enabled = true, + HoverIndex = 194, + Index = 193, + Library = Libraries.Prguse, + Location = new Point(120, 436), + Parent = this, + PressedIndex = 195, + }; + OkButton.Click += (o, e) => Hide(); + + UpButton = new MirButton + { + Index = 470, + HoverIndex = 471, + PressedIndex = 472, + Library = Libraries.Prguse2, + Parent = this, + Size = new Size(16, 14), + Location = new Point(293, 33), + Sound = SoundList.ButtonA, + Visible = false + }; + UpButton.Click += (o, e) => + { + if (_index <= 0) return; + + _index--; + + NewText(CurrentLines, false); + UpdatePositionBar(); + }; + + DownButton = new MirButton + { + Index = 473, + HoverIndex = 474, + Library = Libraries.Prguse2, + PressedIndex = 475, + Parent = this, + Size = new Size(16, 14), + Location = new Point(293, 418), + Sound = SoundList.ButtonA, + Visible = true + }; + DownButton.Click += (o, e) => + { + if (_index + MaximumLines >= CurrentLines.Count) return; + + _index++; + + NewText(CurrentLines, false); + UpdatePositionBar(); + }; + + PositionBar = new MirButton + { + Index = 205, + HoverIndex = 206, + PressedIndex = 206, + Library = Libraries.Prguse2, + Location = new Point(293, 46), + Parent = this, + Movable = true, + Sound = SoundList.None, + Visible = true + }; + PositionBar.OnMoving += PositionBar_OnMoving; + } + + private void PositionBar_OnMoving(object sender, MouseEventArgs e) + { + int x = 293; + int y = PositionBar.Location.Y; + + if (y >= 399) y = 399; + if (y <= 46) y = 46; + + int location = y - 46; + int interval = 400 / (CurrentLines.Count - MaximumLines); + + double yPoint = location / interval; + + _index = Convert.ToInt16(Math.Floor(yPoint)); + + NewText(CurrentLines, false); + + PositionBar.Location = new Point(x, y); + } + + private void LoginNoticeDialog_MouseWheel(object sender, MouseEventArgs e) + { + int count = e.Delta / SystemInformation.MouseWheelScrollDelta; + + if (_index == 0 && count >= 0) return; + if (_index == CurrentLines.Count - 1 && count <= 0) return; + if (CurrentLines.Count <= MaximumLines) return; + + _index -= count; + + if (_index < 0) _index = 0; + if (_index + MaximumLines > CurrentLines.Count - 1) _index = CurrentLines.Count - MaximumLines; + + NewText(CurrentLines, false); + + UpdatePositionBar(); + } + + private void UpdatePositionBar() + { + if (CurrentLines.Count <= MaximumLines) return; + + int interval = 400 / (CurrentLines.Count - MaximumLines); + + int x = 293; + int y = 46 + (_index * interval); + + if (y >= 399) y = 399; + if (y <= 46) y = 46; + + PositionBar.Location = new Point(x, y); + } + + public void Update(Notice notice) + { + this.Notice = notice; + + List temp = new List(); + + if (string.IsNullOrWhiteSpace(notice.Message)) + { + return; + } + + string[] lines = notice.Message.Split(new string[] { "\r\n" }, StringSplitOptions.None); + + foreach (string line in lines) + { + temp.Add(line); + } + + NewText(temp); + Visible = true; + } + + public void NewText(List lines, bool resetIndex = true) + { + if (resetIndex) + { + _index = 0; + CurrentLines = lines; + UpdatePositionBar(); + } + + if (resetIndex) + { + if (Index != -1) + { + MaximumLines = 19; + if (lines.Count > MaximumLines) + { + UpButton.Visible = true; + DownButton.Visible = true; + PositionBar.Visible = true; + } + else + { + UpButton.Visible = false; + DownButton.Visible = false; + PositionBar.Visible = false; + } + } + else + { + MaximumLines = 19; + UpButton.Visible = false; + DownButton.Visible = false; + PositionBar.Visible = false; + } + } + + for (int i = 0; i < TextButtons.Count; i++) + TextButtons[i].Dispose(); + + for (int i = 0; i < TextLabel.Length; i++) + { + if (TextLabel[i] != null) TextLabel[i].Text = ""; + } + + TextButtons.Clear(); + + if (!string.IsNullOrEmpty(Notice.Title)) + { + NameLabel.Text = Notice.Title; + } + + int lastLine = lines.Count > MaximumLines ? ((MaximumLines + _index) > lines.Count ? lines.Count : (MaximumLines + _index)) : lines.Count; + + for (int i = _index; i < lastLine; i++) + { + TextLabel[i] = new MirLabel + { + Font = font, + DrawFormat = TextFormatFlags.WordBreak, + Visible = true, + Parent = this, + Size = new Size(420, 20), + Location = new Point(25, 50 + (i - _index) * 20), + NotControl = true + }; + + if (i >= lines.Count) + { + TextLabel[i].Text = string.Empty; + continue; + } + + string currentLine = lines[i]; + + List matchList = C.Matches(currentLine).Cast().ToList(); + matchList.AddRange(L.Matches(currentLine).Cast()); + + int oldLength = currentLine.Length; + + foreach (Match match in matchList.OrderBy(o => o.Index).ToList()) + { + int offSet = oldLength - currentLine.Length; + + Capture capture = match.Groups[1].Captures[0]; + string txt = match.Groups[2].Captures[0].Value; + string action = match.Groups[3].Captures[0].Value; + + currentLine = currentLine.Remove(capture.Index - 1 - offSet, capture.Length + 2).Insert(capture.Index - 1 - offSet, txt); + string text = currentLine.Substring(0, capture.Index - 1 - offSet) + " "; + Size size = TextRenderer.MeasureText(CMain.Graphics, text, TextLabel[i].Font, TextLabel[i].Size, TextFormatFlags.TextBoxControl); + + if (L.Match(match.Value).Success) + { + NewLink(txt, action, TextLabel[i].Location.Add(new Point(size.Width - 11, 0))); + } + + if (C.Match(match.Value).Success) + { + NewColour(txt, action, TextLabel[i].Location.Add(new Point(size.Width - 11, 0))); + } + } + + TextLabel[i].Text = currentLine; + TextLabel[i].MouseWheel += LoginNoticeDialog_MouseWheel; + + } + OkButton.BringToFront(); + } + + private void NewLink(string text, string link, Point p) + { + MirLabel temp = new MirLabel + { + AutoSize = true, + Visible = true, + Parent = this, + Location = p, + Text = text, + ForeColour = Color.Yellow, + Sound = SoundList.ButtonC, + Font = font + }; + + + temp.MouseEnter += (o, e) => temp.ForeColour = Color.Red; + temp.MouseLeave += (o, e) => temp.ForeColour = Color.Yellow; + temp.MouseDown += (o, e) => temp.ForeColour = Color.Yellow; + temp.MouseUp += (o, e) => temp.ForeColour = Color.Red; + + temp.Click += (o, e) => + { + if (link.StartsWith("http://", true, CultureInfo.InvariantCulture)) + { + System.Diagnostics.Process.Start(new ProcessStartInfo + { + FileName = link, + UseShellExecute = true + }); + } + }; + temp.MouseWheel += LoginNoticeDialog_MouseWheel; + + TextButtons.Add(temp); + } + + private void NewColour(string text, string colour, Point p) + { + Color textColour = Color.FromName(colour); + + MirLabel temp = new MirLabel + { + AutoSize = true, + Visible = true, + Parent = this, + Location = p, + Text = text, + ForeColour = textColour, + Font = font + }; + temp.MouseWheel += LoginNoticeDialog_MouseWheel; + + TextButtons.Add(temp); + } + } +} diff --git a/Client/MirScenes/Dialogs/QuestDialogs.cs b/Client/MirScenes/Dialogs/QuestDialogs.cs new file mode 100644 index 0000000..36ed4a3 --- /dev/null +++ b/Client/MirScenes/Dialogs/QuestDialogs.cs @@ -0,0 +1,1925 @@ +using System.Text.RegularExpressions; +using Client.MirControls; +using Client.MirGraphics; +using Client.MirNetwork; +using Client.MirObjects; +using Client.MirSounds; +using C = ClientPackets; + +namespace Client.MirScenes.Dialogs +{ + public sealed class QuestListDialog : MirImageControl + { + private readonly MirButton _acceptButton, _finishButton; + private MirLabel _availableQuestLabel; + + public List Quests = new List(); + + public int SelectedIndex = 0; + + public ClientQuestProgress SelectedQuest; + public QuestMessage Message; + public QuestRewards Reward; + + public QuestRow[] Rows = new QuestRow[5]; + + public int StartIndex = 0; + + public uint CurrentNPCID = 0; + + public QuestListDialog() + { + Index = 950; + Library = Libraries.Prguse; + Movable = true; + Sort = true; + Location = new Point(GameScene.Scene.NPCDialog.Size.Width + 47, 0); + + MirImageControl TitleLabel = new MirImageControl + { + Index = 14, + Library = Libraries.Prguse, + Location = new Point(18, 9), //Y = 9 + Parent = this + }; + + #region QuestSelection + + MirButton upQuestButton = new MirButton + { + Index = 951, + HoverIndex = 952, + PressedIndex = 953, + Library = Libraries.Prguse, + Parent = this, + Location = new Point(291, 35), + Sound = SoundList.ButtonA, + }; + upQuestButton.Click += (o, e) => + { + if (SelectedQuest != null) + { + SelectedIndex = FindSelectedIndex(); + + if (SelectedIndex > 0) + SelectedIndex--; + else + StartIndex--; + } + + RefreshInterface(); + }; + + MirButton downQuestButton = new MirButton + { + Index = 957, + HoverIndex = 958, + PressedIndex = 959, + Library = Libraries.Prguse, + Parent = this, + Location = new Point(291, 83), + Sound = SoundList.ButtonA, + }; + downQuestButton.Click += (o, e) => + { + if (SelectedQuest != null) + { + SelectedIndex = FindSelectedIndex(); + + if (SelectedIndex < Rows.Length - 1) + SelectedIndex++; + else + StartIndex++; + } + + RefreshInterface(); + }; + #endregion + + #region Buttons + + _acceptButton = new MirButton + { + Index = 270, + HoverIndex = 271, + PressedIndex = 272, + Library = Libraries.Prguse, + Parent = this, + Location = new Point(40, 436), + Sound = SoundList.ButtonA, + }; + _acceptButton.Click += (o, e) => + { + if (Reward == null || SelectedQuest.Taken) return; + + Network.Enqueue(new C.AcceptQuest { NPCIndex = SelectedQuest.QuestInfo.NPCIndex, QuestIndex = SelectedQuest.QuestInfo.Index }); + //Hide(); + }; + + _finishButton = new MirButton + { + Index = 273, + HoverIndex = 274, + PressedIndex = 275, + Library = Libraries.Prguse, + Parent = this, + Location = new Point(40, 436), + Sound = SoundList.ButtonA, + Visible = false + }; + _finishButton.Click += (o, e) => + { + if (Reward == null || !SelectedQuest.Completed) return; + + if (Reward.SelectedItemIndex < 0 && SelectedQuest.QuestInfo.RewardsSelectItem.Count > 0) + { + MirMessageBox messageBox = new MirMessageBox("You must select a reward item."); + messageBox.Show(); + return; + } + + Network.Enqueue(new C.FinishQuest { QuestIndex = SelectedQuest.QuestInfo.Index, SelectedItemIndex = Reward.SelectedItemIndex }); + //Hide(); + }; + + MirButton leaveButton = new MirButton + { + Index = 276, + HoverIndex = 277, + PressedIndex = 278, + Library = Libraries.Prguse, + Parent = this, + Location = new Point(205, 436), + Sound = SoundList.ButtonA, + }; + leaveButton.Click += (o, e) => Hide(); + + #endregion + + #region Message Area + + MirButton upButton = new MirButton + { + Index = 197, + HoverIndex = 198, + PressedIndex = 199, + Library = Libraries.Prguse2, + Parent = this, + Size = new Size(16, 14), + Location = new Point(292, 136), + Sound = SoundList.ButtonA, + Visible = true + }; + + MirButton downButton = new MirButton + { + Index = 207, + HoverIndex = 208, + Library = Libraries.Prguse2, + PressedIndex = 209, + Parent = this, + Size = new Size(16, 14), + Location = new Point(292, 282), + Sound = SoundList.ButtonA, + Visible = true + }; + + MirButton positionBar = new MirButton + { + Index = 205, + HoverIndex = 206, + PressedIndex = 206, + Library = Libraries.Prguse2, + Location = new Point(292, 149), + Parent = this, + Movable = true, + Sound = SoundList.None, + Visible = false + }; + + Message = new QuestMessage(upButton, downButton, positionBar, 10) + { + Font = new Font(Settings.FontName, 9F), + Parent = this, + Size = new Size(280, 160), + Location = new Point(10, 135), + PosMinY = 149, + PosMaxY = 263 + }; + + #endregion + + #region Rewards + + Reward = new QuestRewards + { + Parent = this, + Visible = false, + Size = new Size(313, 130), + Location = new Point(5, 307) + }; + + #endregion + + _availableQuestLabel = new MirLabel + { + Font = new Font(Settings.FontName, 8F), + Parent = this, + AutoSize = true, + Location = new Point(210, 8) + }; + + MirButton closeButton = new MirButton + { + Index = 360, + HoverIndex = 361, + PressedIndex = 362, + Library = Libraries.Prguse2, + Parent = this, + Location = new Point(289, 3), + Sound = SoundList.ButtonA, + }; + closeButton.Click += (o, e) => Hide(); + + MirButton helpButton = new MirButton + { + Index = 257, + HoverIndex = 258, + PressedIndex = 259, + Library = Libraries.Prguse2, + Parent = this, + Location = new Point(266, 3), + Sound = SoundList.ButtonA, + }; + helpButton.Click += (o, e) => GameScene.Scene.HelpDialog.DisplayPage("Quests"); + + } + + public override void Show() + { + if (Visible) return; + Visible = true; + + CurrentNPCID = GameScene.NPCID; + + Reset(); + + DisplayInfo(); + } + + public override void Hide() + { + if (!Visible) return; + Visible = false; + + GameScene.Scene.NPCDialog.Hide(); + } + + public void Toggle() + { + if (!Visible) + Show(); + else + Hide(); + } + + public void DisplayInfo() + { + if (!GetAvailableQuests()) + { + Hide(); + return; + } + Reset(); + RefreshInterface(); + } + + public void Reset() + { + StartIndex = 0; + SelectedIndex = 0; + SelectedQuest = null; + + Message.Visible = false; + Reward.Visible = false; + + for (int i = 0; i < Rows.Length; i++) + { + if(Rows[i] != null) Rows[i].Dispose(); + + Rows[i] = null; + } + } + + public bool GetAvailableQuests() + { + NPCObject npc = (NPCObject)MapControl.GetObject(CurrentNPCID); + if (npc != null) + { + Quests = npc.GetAvailableQuests(); + } + + return Quests.Count >= 1 && npc != null; + } + + public void RefreshInterface() + { + _availableQuestLabel.Text = string.Format("List: {0}", Quests.Count); + + int maxIndex = Quests.Count - Rows.Length; + + if (StartIndex > maxIndex) StartIndex = maxIndex; + if (StartIndex < 0) StartIndex = 0; + + for (int i = 0; i < Rows.Length; i++) + { + if (i >= Quests.Count) break; + + if (Rows[i] != null) + Rows[i].Dispose(); + + Rows[i] = new QuestRow + { + Quest = Quests[i + StartIndex], + Location = new Point(9, 36 + i * 19), + Parent = this, + }; + Rows[i].Click += (o, e) => + { + QuestRow row = (QuestRow) o; + + if (row.Quest != SelectedQuest) + { + SelectedQuest = row.Quest; + Reward.UpdateRewards(SelectedQuest); + Message.UpdateQuest(SelectedQuest); + SelectedIndex = FindSelectedIndex(); + UpdateRows(); + + ReDisplayButtons(); + } + }; + + if (SelectedQuest != null) + { + if (SelectedIndex == i) + { + SelectedQuest = Rows[i].Quest; + Reward.UpdateRewards(SelectedQuest); + Message.UpdateQuest(SelectedQuest); + } + } + } + + UpdateRows(); + + ReDisplayButtons(); + } + + public void UpdateRows() + { + if (SelectedQuest == null) + { + if (Rows[0] == null) return; + + SelectedQuest = Rows[0].Quest; + Reward.UpdateRewards(SelectedQuest); + Message.UpdateQuest(SelectedQuest); + } + + for (int i = 0; i < Rows.Length; i++) + { + if (Rows[i] == null) continue; + + Rows[i].Selected = false; + + if (Rows[i].Quest == SelectedQuest) + { + Rows[i].Selected = true; + } + + Rows[i].UpdateInterface(); + } + } + + public void ReDisplayButtons() + { + _acceptButton.Visible = false; + _finishButton.Visible = false; + + if (Reward != null) + { + Reward.Visible = true; + Message.Visible = true; + } + + if (SelectedQuest != null) + { + if (!SelectedQuest.Taken && MapControl.User.CurrentQuests.Count < Globals.MaxConcurrentQuests) + _acceptButton.Visible = true; + + if (SelectedQuest.Completed && Reward != null) + _finishButton.Visible = true; + } + } + + public int FindSelectedIndex() + { + int selectedIndex = 0; + if (SelectedQuest != null) + { + for (int i = 0; i < Rows.Length; i++) + { + if (Rows[i] == null || SelectedQuest != Rows[i].Quest) continue; + + selectedIndex = i; + } + } + + return selectedIndex; + } + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + + Quests.Clear(); + + SelectedQuest = null; + Message = null; + Reward = null; + + foreach (QuestRow row in Rows.Where(row => row != null && !row.IsDisposed)) + { + row.Dispose(); + } + } + + } + public sealed class QuestDetailDialog : MirImageControl + { + private readonly MirButton _shareButton, _pauseButton, _cancelButton; + + public ClientQuestProgress Quest; + public QuestMessage Message; + public QuestRewards Reward; + + public QuestDetailDialog() + { + Index = 960; + Library = Libraries.Prguse; + Movable = true; + Sort = true; + Location = new Point(Settings.ScreenWidth / 2 + 20, 60); + + MirImageControl TitleLabel = new MirImageControl + { + Index = 16, + Library = Libraries.Prguse, + Location = new Point(18, 9), + Parent = this + }; + + #region Message Area + + MirButton upButton = new MirButton + { + Index = 197, + HoverIndex = 198, + PressedIndex = 199, + Library = Libraries.Prguse2, + Parent = this, + Size = new Size(16, 14), + Location = new Point(293, 33), + Sound = SoundList.ButtonA, + Visible = true + }; + + MirButton downButton = new MirButton + { + Index = 207, + HoverIndex = 208, + Library = Libraries.Prguse2, + PressedIndex = 209, + Parent = this, + Size = new Size(16, 14), + Location = new Point(293, 280), + Sound = SoundList.ButtonA, + Visible = true + }; + + MirButton positionBar = new MirButton + { + Index = 205, + HoverIndex = 206, + PressedIndex = 206, + Library = Libraries.Prguse2, + Location = new Point(293, 48), + Parent = this, + Movable = true, + Sound = SoundList.None, + Visible = false + }; + + Message = new QuestMessage(upButton, downButton, positionBar, 16, true) + { + Font = new Font(Settings.FontName, 9F), + Parent = this, + Size = new Size(280, 320), + Location = new Point(10, 35), + PosMinY = 46, + PosMaxY = 261 + }; + + #endregion + + #region Rewards + + Reward = new QuestRewards + { + Parent = this, + Size = new Size(315, 130), + Location = new Point(5, 307) + }; + + #endregion + + #region Buttons + + _shareButton = new MirButton + { + Index = 616, + HoverIndex = 617, + PressedIndex = 618, + Library = Libraries.Prguse, + Parent = this, + Location = new Point(40, 436), + Sound = SoundList.ButtonA + }; + _shareButton.Click += (o, e) => + { + Network.Enqueue(new C.ShareQuest { QuestIndex = Quest.Id }); + }; + + _pauseButton = new MirButton + { + Index = 270, + HoverIndex = 271, + PressedIndex = 272, + Library = Libraries.Prguse, + Parent = this, + Location = new Point(120, 436), + Sound = SoundList.ButtonA, + Visible = false + }; + + _cancelButton = new MirButton + { + Index = 203, + HoverIndex = 204, + PressedIndex = 205, + Library = Libraries.Prguse, + Parent = this, + Location = new Point(200, 436), + Sound = SoundList.ButtonA, + }; + _cancelButton.Click += (o, e) => + { + MirMessageBox messageBox = new MirMessageBox("Are you sure you want to cancel this quest?", MirMessageBoxButtons.YesNo); + + messageBox.YesButton.Click += (o1, a) => + { + Network.Enqueue(new C.AbandonQuest { QuestIndex = Quest.Id }); + Hide(); + }; + messageBox.Show(); + }; + + #endregion + + MirButton closeButton = new MirButton + { + Index = 360, + HoverIndex = 361, + PressedIndex = 362, + Library = Libraries.Prguse2, + Parent = this, + Location = new Point(289, 3), + Sound = SoundList.ButtonA, + }; + closeButton.Click += (o, e) => Hide(); + + //MirButton helpButton = new MirButton + //{ + // Index = 257, + // HoverIndex = 258, + // PressedIndex = 259, + // Library = Libraries.Prguse2, + // Parent = this, + // Location = new Point(266, 3), + // Sound = SoundList.ButtonA, + //}; + //helpButton.Click += (o, e) => GameScene.Scene.HelpDialog.DisplayPage("Quests"); + + } + + public void DisplayQuestDetails(ClientQuestProgress quest) + { + if (quest == null) return; + + Quest = quest; + Reward.UpdateRewards(Quest); + Message.UpdateQuest(Quest); + + Show(); + } + + } + public sealed class QuestDiaryDialog : MirImageControl + { + public List Quests = new List(); + public List TaskGroups = new List(); + + public List ExpandedGroups = new List(); + + private MirButton _closeButton; + private MirLabel _takenQuestsLabel; + + public QuestDiaryDialog() + { + Index = 961; + Library = Libraries.Prguse; + Movable = true; + Sort = true; + Location = new Point(Settings.ScreenWidth / 2 - 300 - 20, 60); + + MirImageControl TitleLabel = new MirImageControl + { + Index = 15, + Library = Libraries.Prguse, + Location = new Point(18, 9), + Parent = this + }; + + _takenQuestsLabel = new MirLabel + { + Font = new Font(Settings.FontName, 8F), + Parent = this, + AutoSize = true, + Location = new Point(210, 7) + }; + + _closeButton = new MirButton + { + Index = 193, + HoverIndex = 194, + PressedIndex = 195, + Library = Libraries.Prguse, + Parent = this, + Location = new Point(200, 436), + Sound = SoundList.ButtonA, + }; + _closeButton.Click += (o, e) => Hide(); + + MirButton closeButton = new MirButton + { + Index = 360, + HoverIndex = 361, + PressedIndex = 362, + Library = Libraries.Prguse2, + Parent = this, + Location = new Point(289, 3), + Sound = SoundList.ButtonA, + }; + closeButton.Click += (o, e) => Hide(); + + } + + public void DisplayQuests() + { + ClearLog(); + + Quests = GameScene.User.CurrentQuests; + + _takenQuestsLabel.Text = string.Format("List: {0}/{1}", Quests.Count, Globals.MaxConcurrentQuests); + + var groupedQuests = Quests.GroupBy(d => d.QuestInfo.Group).ToList(); + + int nextY = 40; + + foreach (var group in groupedQuests) + { + List singleGroup = @group.ToList(); + + bool expanded = ExpandedGroups.Count <= 0 || ExpandedGroups.Contains(@group.Key); + + QuestGroupQuestItem groupQuest = new QuestGroupQuestItem(group.Key, singleGroup, expanded) + { + Parent = this, + Visible = true, + Location = new Point(15, nextY), + }; + groupQuest.ExpandedChanged += (o, e) => + { + nextY = 40; + + foreach (QuestGroupQuestItem task in TaskGroups) + { + task.Location = new Point(15, nextY); + nextY += task.SizeY; + + if (task.Expanded) + { + if (!ExpandedGroups.Contains(task.Group)) + ExpandedGroups.Add(task.Group); + } + else + ExpandedGroups.Remove(task.Group); + } + }; + groupQuest.SelectedQuestChanged += (o, e) => + { + QuestSingleQuestItem singleQuestItem = (QuestSingleQuestItem)o; + + if (singleQuestItem == null) return; + + foreach (QuestGroupQuestItem item in TaskGroups) + { + item.DeselectQuests(); + } + + singleQuestItem.Selected = true; + }; + + nextY += groupQuest.SizeY; + + TaskGroups.Add(groupQuest); + } + } + + public void ClearLog() + { + foreach (QuestGroupQuestItem taskGroupItem in TaskGroups) + { + taskGroupItem.Dispose(); + } + TaskGroups.Clear(); + } + public override void Show() + { + if (Visible) return; + Visible = true; + + DisplayQuests(); + } + + public void Toggle() + { + if (!Visible) + Show(); + else + Hide(); + } + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + + Quests.Clear(); + ClearLog(); + } + } + public sealed class QuestTrackingDialog : MirImageControl + { + public List TrackedQuestsIds = new List(); + public List TaskLines = new List(); + + public Font QuestFont = new Font(Settings.FontName, 8F); + + private MirLabel _questNameLabel, _questTaskLabel; + + public QuestTrackingDialog() + { + Movable = true; + Location = new Point(0, 100); + Sort = false; + } + + public void DisplayQuests() + { + foreach (MirLabel label in TaskLines) + label.Dispose(); + + List questsToTrack = new List(); + + questsToTrack.Clear(); + + questsToTrack.AddRange(from quest in MapObject.User.CurrentQuests from id in TrackedQuestsIds.Where(id => quest.Id == id) select quest); + + if (questsToTrack.Count < 1) + { + Hide(); + return; + } + + int y = 0; + + for (int i = 0; i < questsToTrack.Count; i++) + { + _questNameLabel = new MirLabel + { + Text = questsToTrack[i].QuestInfo.Name, + AutoSize = true, + BackColour = Color.Transparent, + Font = QuestFont, + ForeColour = Color.LimeGreen, + Location = new Point(5, 20 + y), + OutLine = true, + Parent = this, + Visible = true, + }; + + TaskLines.Add(_questNameLabel); + + foreach (string questToTrack in questsToTrack[i].TaskList) + { + y += 15; + + string trackedQuest = questToTrack; + + _questTaskLabel = new MirLabel + { + Text = trackedQuest, + AutoSize = true, + BackColour = Color.Transparent, + Font = QuestFont, + ForeColour = Color.White, //trackedQuest.Contains("(Completed)") ? Color.LimeGreen : + Location = new Point(25, 20 + y), + OutLine = true, + Parent = this, + Visible = true, + }; + + TaskLines.Add(_questTaskLabel); + } + + if (i >= 5) break; + + y += 30; + } + + //Size = new Size(150, 20 + y + 30); + + Show(); + } + + public void AddQuest(ClientQuestProgress quest, bool New = false) + { + if (TrackedQuestsIds.Any(d => d == quest.Id) || TrackedQuestsIds.Count >= 5) return; + + TrackedQuestsIds.Add(quest.Id); + + DisplayQuests(); + if (!New) + UpdateTrackedQuests(); + } + + public void RemoveQuest(ClientQuestProgress quest) + { + TrackedQuestsIds.Remove(quest.Id); + + DisplayQuests(); + UpdateTrackedQuests(); + } + + public void UpdateTrackedQuests() + { + for (int j = 0; j < Settings.TrackedQuests.Length; j++) + { + if (TrackedQuestsIds.Count > 0 && j < TrackedQuestsIds.Count) + { + Settings.TrackedQuests[j] = TrackedQuestsIds[j]; + continue; + } + Settings.TrackedQuests[j] = -1; + } + + Settings.SaveTrackedQuests(GameScene.User.Name); + } + + } + + //Sub controls + public sealed class QuestRow : MirControl + { + public ClientQuestProgress Quest; + public MirLabel NameLabel, RequirementLabel; + public MirImageControl SelectedImage, IconImage; + + public bool Selected = false; + + public QuestRow() + { + Sound = SoundList.ButtonA; + Size = new Size(200, 17); + + BeforeDraw += QuestRow_BeforeDraw; + + SelectedImage = new MirImageControl + { + Index = 956, + Library = Libraries.Prguse, + Location = new Point(25, 0), + Parent = this, + Visible = false + }; + + IconImage = new MirImageControl + { + Index = 0, + Library = Libraries.Prguse, + Location = new Point(3, 0), + Parent = this, + Visible = false + }; + + RequirementLabel = new MirLabel + { + Location = new Point(20, 0), + Size = new Size(178, 17), + DrawFormat = TextFormatFlags.VerticalCenter, + Parent = this, + NotControl = true, + }; + + NameLabel = new MirLabel + { + Location = new Point(60, 0), + Size = new Size(140, 17), + DrawFormat = TextFormatFlags.VerticalCenter, + Parent = this, + NotControl = true, + }; + + UpdateInterface(); + } + + void QuestRow_BeforeDraw(object sender, EventArgs e) + { + UpdateInterface(); + } + + public void UpdateInterface() + { + if (Quest == null) return; + + int iconTypeOffset = (int)Quest.Icon > 3 ? 15 : 0; + + IconImage.Index = 961 + (int)Quest.Icon + iconTypeOffset; + IconImage.Visible = true; + + NameLabel.Text = Quest.QuestInfo.Name; + RequirementLabel.Text = Quest.QuestInfo.MinLevelNeeded > 0 ? "Lv " + Quest.QuestInfo.MinLevelNeeded : ""; + + SelectedImage.Visible = Selected; + } + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + + Quest = null; + NameLabel = null; + RequirementLabel = null; + SelectedImage = null; + IconImage = null; + + Selected = false; + } + } + public sealed class QuestMessage : MirControl + { + public ClientQuestProgress Quest; + public MirButton ScrollUpButton, ScrollDownButton, PositionBar; + + private static readonly Regex C = new Regex(@"{(.*?/.*?)}"); + + private readonly MirLabel[] _textLabel; + private readonly List _textButtons = new List(); + + public int TopLine; + public int BottomLine; + public int LineCount = 10; + public bool DisplayProgress; + + public int PosX, PosMinY, PosMaxY; + + public Font Font = new Font(Settings.FontName, 8F); + public List CurrentLines = new List(); + + private const string TaskTitle = "Tasks", ProgressTitle = "Progress", ReturnTitle = "Quest Return", TimeLimitTitle = "Time Limit"; + + public QuestMessage(MirButton scrollUpButton, MirButton scrollDownButton, MirButton positionBar, int lineCount, bool displayProgress = false) + { + ScrollUpButton = scrollUpButton; + ScrollDownButton = scrollDownButton; + PositionBar = positionBar; + DisplayProgress = displayProgress; + + MouseWheel += QuestMessage_MouseWheel; + PositionBar.OnMoving += PositionBar_OnMoving; + + LineCount = lineCount; + _textLabel = new MirLabel[LineCount]; + + PosX = PositionBar.Location.X; + PosMinY = PositionBar.Location.Y; + PosMaxY = PositionBar.Location.Y; + + ScrollUpButton.Click += (o, e) => + { + if (TopLine <= 0) return; + + TopLine--; + + NewText(CurrentLines, false); + UpdatePositionBar(); + }; + + ScrollDownButton.Click += (o, e) => + { + if (TopLine + LineCount >= CurrentLines.Count) return; + + TopLine++; + + NewText(CurrentLines, false); + UpdatePositionBar(); + }; + + AfterDraw += QuestMessage_AfterDraw; + } + + private void QuestMessage_AfterDraw(object sender, EventArgs e) + { + if (Quest == null || CurrentLines.Count < 1) return; + + int adjust = 0; + + for (int i = TopLine; i < BottomLine; i++) + { + if (i != 0 && CurrentLines[i] != TaskTitle && CurrentLines[i] != ProgressTitle && CurrentLines[i] != ReturnTitle && CurrentLines[i] != TimeLimitTitle) continue; + + Libraries.Prguse.Draw(919, new Point(DisplayLocation.X + 5, DisplayLocation.Y + 5 + (i - TopLine) * 15 + adjust), Color.White); + + adjust += 5; + } + } + + private void QuestMessage_MouseWheel(object sender, MouseEventArgs e) + { + int count = e.Delta / SystemInformation.MouseWheelScrollDelta; + + if (TopLine == 0 && count >= 0) return; + if (TopLine == CurrentLines.Count - 1 && count <= 0) return; + if (CurrentLines.Count <= LineCount) return; + + TopLine -= count; + + if (TopLine < 0) TopLine = 0; + if (TopLine + LineCount > CurrentLines.Count - 1) TopLine = CurrentLines.Count - LineCount; + + NewText(CurrentLines, false); + + UpdatePositionBar(); + } + + private void PositionBar_OnMoving(object sender, MouseEventArgs e) + { + int x = PosX; + int y = PositionBar.Location.Y; + + if (y >= PosMaxY) y = PosMaxY; + if (y <= PosMinY) y = PosMinY; + + int location = y - PosMinY; + int interval = (PosMaxY - PosMinY) / (CurrentLines.Count - LineCount); + + double yPoint = (double)location / interval; + + TopLine = Convert.ToInt16(Math.Floor(yPoint)); + + PositionBar.Location = new Point(x, y); + + NewText(CurrentLines, false); + } + + private void UpdatePositionBar() + { + if (CurrentLines.Count <= LineCount) + { + PositionBar.Visible = false; + return; + } + + PositionBar.Visible = true; + + int interval = (PosMaxY - PosMinY) / (CurrentLines.Count - LineCount); + + int x = PosX; + int y = PosMinY + (TopLine * interval); + + if (y >= PosMaxY) y = PosMaxY; + if (y <= PosMinY) y = PosMinY; + + + PositionBar.Location = new Point(x, y); + } + + public void UpdateQuest(ClientQuestProgress quest) + { + Quest = quest; + + CurrentLines.Clear(); + + //add quest title at the beginning + CurrentLines.Insert(0, Quest.QuestInfo.Name); + + if (Quest.Taken && !Quest.QuestInfo.SameFinishNPC && Quest.QuestInfo.CompletionDescription.Count > 0 && GameScene.Scene.QuestListDialog.CurrentNPCID == Quest.QuestInfo.FinishNPCIndex) + { + foreach (var line in Quest.QuestInfo.CompletionDescription) + { + CurrentLines.Add(line); + } + } + else + { + foreach (var line in Quest.QuestInfo.Description) + { + CurrentLines.Add(line); + } + + AdjustDescription(); + } + + NewText(CurrentLines); + } + + private void AdjustDescription() + { + if (Quest.QuestInfo.TaskDescription.Count > 0) + { + CurrentLines.Add(" "); + CurrentLines.Add(TaskTitle); + + foreach (string task in Quest.QuestInfo.TaskDescription) + { + CurrentLines.Add(task); + } + } + + if (Quest.QuestInfo.ReturnDescription.Count > 0) + { + CurrentLines.Add(" "); + + CurrentLines.Add(ReturnTitle); + + foreach (string questgiver in Quest.QuestInfo.ReturnDescription) + { + CurrentLines.Add(questgiver); + } + } + + if (Quest.QuestInfo.TimeLimitInSeconds > 0) + { + CurrentLines.Add(" "); + CurrentLines.Add(TimeLimitTitle); + CurrentLines.Add(Functions.PrintTimeSpanFromSeconds(Quest.QuestInfo.TimeLimitInSeconds, true)); + } + + if (Quest.Taken && Quest.TaskList.Count > 0 && DisplayProgress) + { + CurrentLines.Add(" "); + + CurrentLines.Add(ProgressTitle); + + foreach (string task in Quest.TaskList) + { + CurrentLines.Add(task); + } + } + } + + private void NewText(List lines, bool resetIndex = true) + { + if (resetIndex) + { + TopLine = 0; + CurrentLines = lines; + UpdatePositionBar(); + } + + foreach (MirLabel t in _textButtons.Where(t => t != null)) + t.Dispose(); + + foreach (MirLabel t in _textLabel.Where(t => t != null)) + t.Text = ""; + + _textButtons.Clear(); + + int adjust = 0; + + BottomLine = lines.Count > LineCount ? ((LineCount + TopLine) > lines.Count ? lines.Count : (LineCount + TopLine)) : lines.Count; + + for (int i = TopLine; i < BottomLine; i++) + { + Font font = Font; + Color fontColor = Color.White; + bool title = false; + + if (i == 0 || lines[i] == TaskTitle || lines[i] == ProgressTitle || lines[i] == ReturnTitle || lines[i] == TimeLimitTitle) + { + font = new Font(Settings.FontName, 10F, FontStyle.Bold); + title = true; + + if (i == 0) + { + fontColor = Color.Yellow; + } + } + + _textLabel[i - TopLine] = new MirLabel + { + Font = font, + ForeColour = fontColor, + DrawFormat = TextFormatFlags.WordBreak, + Visible = true, + Parent = this, + Size = new Size(Size.Width, 20), + Location = new Point(title ? 15 : 0, 0 + (i - TopLine) * 15 + adjust), + NotControl = true + }; + + if (title) + { + adjust += 5; + } + + if (i >= lines.Count) + { + _textLabel[i - TopLine].Text = string.Empty; + continue; + } + + string currentLine = lines[i]; + + List matchList = C.Matches(currentLine).Cast().ToList(); + + int oldLength = currentLine.Length; + + foreach (Match match in matchList.OrderBy(o => o.Index).ToList()) + { + int offSet = oldLength - currentLine.Length; + + Capture capture = match.Groups[1].Captures[0]; + string[] values = capture.Value.Split('/'); + currentLine = currentLine.Remove(capture.Index - 1 - offSet, capture.Length + 2).Insert(capture.Index - 1 - offSet, values[0]); + string text = currentLine.Substring(0, capture.Index - 1 - offSet) + " "; + Size size = TextRenderer.MeasureText(CMain.Graphics, text, _textLabel[i - TopLine].Font, _textLabel[i - TopLine].Size, TextFormatFlags.TextBoxControl); + + if (C.Match(match.Value).Success) + NewColour(values[0], values[1], _textLabel[i - TopLine].Location.Add(new Point(size.Width - 10, 0))); + } + + _textLabel[i - TopLine].Text = currentLine; + _textLabel[i - TopLine].MouseWheel += QuestMessage_MouseWheel; + } + } + + private void NewColour(string text, string colour, Point p) + { + Color textColour = Color.FromName(colour); + + MirLabel temp = new MirLabel + { + AutoSize = true, + Visible = true, + Parent = this, + Location = p, + Text = text, + ForeColour = textColour, + Font = Font + }; + temp.MouseWheel += QuestMessage_MouseWheel; + + _textButtons.Add(temp); + } + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + + Quest = null; + ScrollUpButton = null; + ScrollDownButton = null; + PositionBar = null; + + CurrentLines.Clear(); + } + } + public sealed class QuestRewards : MirControl + { + private readonly MirLabel _goldLabel, _expLabel, _creditLabel; + + public ClientQuestProgress Quest; + + public int SelectedItemIndex = -1; + public ItemInfo SelectedItem = null; + + public static QuestCell[] FixedItems = new QuestCell[5]; + public static QuestCell[] SelectItems = new QuestCell[5]; + + public QuestRewards() + { + _expLabel = new MirLabel + { + Size = new Size(75, 20), + Location = new Point(40, 0), + Parent = this + }; + + _goldLabel = new MirLabel + { + Size = new Size(75, 20), + Parent = this + }; + + _creditLabel = new MirLabel + { + Size = new Size(75, 20), + Location = new Point(60, 0), + Parent = this + }; + + BeforeDraw += QuestReward_BeforeDraw; + } + + public void UpdateRewards(ClientQuestProgress quest) + { + Quest = quest; + + CleanRewards(); + UpdateInterface(); + Redraw(); + } + + void QuestReward_BeforeDraw(object sender, EventArgs e) + { + + if (Quest == null) return; + + ClientQuestInfo quest = Quest.QuestInfo; + + int goldXOffset = 0; + int creditXOffset = 0; + + if (quest.RewardExp > 0) + Libraries.Prguse.Draw(966, DisplayLocation.X + 10, DisplayLocation.Y + 2); + else + { + goldXOffset = -90; + creditXOffset -= 90; + } + + + if (quest.RewardGold > 0) + Libraries.Prguse.Draw(965, DisplayLocation.X + 100 + goldXOffset, DisplayLocation.Y + 2); + else + { + creditXOffset -= 90; + } + + if (quest.RewardCredit > 0) + Libraries.Prguse.Draw(2447, DisplayLocation.X + 190 + creditXOffset, DisplayLocation.Y + 2); + + Libraries.Prguse.Draw(17, DisplayLocation.X + 20, DisplayLocation.Y + 66); + } + + + public void CleanRewards() + { + foreach (QuestCell item in SelectItems.Where(item => item != null)) + { + item.Dispose(); + } + + foreach (QuestCell item in FixedItems.Where(item => item != null)) + { + item.Dispose(); + } + + SelectedItemIndex = -1; + SelectedItem = null; + } + + public void UpdateInterface() + { + ClientQuestInfo quest = Quest.QuestInfo; + + _goldLabel.Visible = false; + _expLabel.Visible = false; + _creditLabel.Visible = false; + + int goldXOffset = 0; + int creditXOffset = 0; + + if (quest.RewardExp > 0) + { + _expLabel.Text = quest.RewardExp.ToString(); + _expLabel.Visible = true; + } + else + { + goldXOffset = -90; + creditXOffset -= 90; + } + + if (quest.RewardGold > 0) + { + _goldLabel.Text = quest.RewardGold.ToString(); + _goldLabel.Location = new Point(120 + goldXOffset, 0); + _goldLabel.Visible = true; + } + else + { + creditXOffset -= 90; + } + + if (quest.RewardCredit > 0) + { + _creditLabel.Text = quest.RewardCredit.ToString(); + _creditLabel.Location = new Point(210 + creditXOffset, 0); + _creditLabel.Visible = true; + } + + + if (quest.RewardsFixedItem.Count > 0) + { + //var fixedRewards = FilterRewards(quest.RewardsFixedItem); + + for (int i = 0; i < FixedItems.Length; i++) + { + if (i >= quest.RewardsFixedItem.Count) break; + + FixedItems[i] = new QuestCell + { + Item = quest.RewardsFixedItem[i].Item, + Count = quest.RewardsFixedItem[i].Count, + Parent = this, + Location = new Point(i * 45 + 15, 24), + Fixed = true + }; + } + } + + if (quest.RewardsSelectItem.Count > 0) + { + var selRewards = FilterRewards(quest.RewardsSelectItem); + + for (int i = 0; i < SelectItems.Length; i++) + { + if (i >= selRewards.Count) break; + + SelectItems[i] = new QuestCell + { + Item = selRewards[i].Item, + Count = selRewards[i].Count, + Parent = this, + Location = new Point(i * 45 + 15, 89), + }; + SelectItems[i].Click += (o, e) => + { + foreach (var itm in SelectItems) + { + if (itm == null) continue; + + if (itm == o) + { + itm.Selected = true; + SelectedItem = itm.Item; + SelectedItemIndex = FindSelectedItemIndex(); + } + else + itm.Selected = false; + } + + Redraw(); + }; + } + } + } + + public List FilterRewards(List rewardItems) + { + List filteredRewards = new List(); + + //Only display same sex items + foreach (var reward in rewardItems) + { + ItemInfo item = reward.Item; + + switch (MapObject.User.Gender) + { + case MirGender.Male: + if (!item.RequiredGender.HasFlag(RequiredGender.Male)) continue; + break; + case MirGender.Female: + if (!item.RequiredGender.HasFlag(RequiredGender.Female)) continue; + break; + } + + filteredRewards.Add(reward); + } + + return filteredRewards; + } + + public int FindSelectedItemIndex() + { + int selectedItemIndex = 0; + if (SelectedItem == null) return selectedItemIndex; + + for (int i = 0; i < Quest.QuestInfo.RewardsSelectItem.Count; i++) + { + ItemInfo item = Quest.QuestInfo.RewardsSelectItem[i].Item; + + if (item == null || SelectedItem != item) continue; + + selectedItemIndex = i; + } + + return selectedItemIndex; + } + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + + Quest = null; + + foreach (QuestCell cell in FixedItems.Where(cell => cell != null && !cell.IsDisposed)) + { + cell.Dispose(); + } + + foreach (QuestCell cell in SelectItems.Where(cell => cell != null && !cell.IsDisposed)) + { + cell.Dispose(); + } + } + + } + public sealed class QuestCell : MirControl + { + public ItemInfo Item; + public UserItem ShowItem; + public ushort Count; + + public bool Selected; + public bool Fixed; + + private MirLabel CountLabel { get; set; } + + public QuestCell() + { + Size = new Size(32, 32); + } + + protected override void OnMouseEnter() + { + base.OnMouseEnter(); + + if (ShowItem == null) ShowItem = new UserItem(Item) { MaxDura = Item.Durability, CurrentDura = Item.Durability }; + + GameScene.Scene.CreateItemLabel(ShowItem); + } + protected override void OnMouseLeave() + { + base.OnMouseLeave(); + GameScene.Scene.DisposeItemLabel(); + GameScene.HoverItem = null; + ShowItem = null; + } + + protected internal override void DrawControl() + { + if (Item == null) return; + + Size size = Libraries.Items.GetTrueSize(Item.Image); + Point offSet = new Point((40 - size.Width) / 2, (32 - size.Height) / 2); + + CreateDisposeLabel(); + + if (Fixed) + { + Libraries.Prguse.Draw(989, DisplayLocation.X, DisplayLocation.Y - 1); + } + else if (Selected) + { + Libraries.Prguse.Draw(979, DisplayLocation.X, DisplayLocation.Y - 5); + } + + Libraries.Items.Draw(Item.Image, offSet.X + DisplayLocation.X, offSet.Y + DisplayLocation.Y); + } + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + + Item = null; + ShowItem = null; + + DisposeCountLabel(); + } + + private void CreateDisposeLabel() + { + if (Count <= 1) + { + DisposeCountLabel(); + return; + } + + if (CountLabel == null || CountLabel.IsDisposed) + { + CountLabel = new MirLabel + { + AutoSize = true, + ForeColour = Color.Yellow, + NotControl = true, + OutLine = false, + Parent = this, + }; + } + + CountLabel.Text = Count.ToString("###0"); + CountLabel.Location = new Point(Size.Width - CountLabel.Size.Width + 8, Size.Height - CountLabel.Size.Height); + } + private void DisposeCountLabel() + { + if (CountLabel != null && !CountLabel.IsDisposed) + CountLabel.Dispose(); + CountLabel = null; + } + } + + + public sealed class QuestGroupQuestItem : MirControl + { + public string Group = string.Empty; + public List Quests = new List(); + + public bool Expanded = true; + public int SizeY = 15; + + private readonly MirButton _expandButton; + private readonly MirLabel _groupLabel; + private readonly List _tasks = new List(); + + public event EventHandler ExpandedChanged; + private void OnExpandedChanged() + { + if (ExpandedChanged != null) + ExpandedChanged.Invoke(this, EventArgs.Empty); + } + + public event EventHandler SelectedQuestChanged; + private void OnSelectedQuestChanged(object ob) + { + if (SelectedQuestChanged != null) + SelectedQuestChanged.Invoke(ob, EventArgs.Empty); + } + + public QuestGroupQuestItem(string group, List quests, bool expanded) + { + Group = group; + Quests = quests; + Expanded = expanded; + + _expandButton = new MirButton + { + Index = Expanded ? 917 : 918, + Library = Libraries.Prguse, + Parent = this, + Size = new Size(16, 14), + Location = new Point(0, 0), + Sound = SoundList.ButtonA + }; + _expandButton.Click += (o, e) => ChangeExpand(); + + _groupLabel = new MirLabel + { + Text = Group, + AutoSize = true, + Parent = this, + Font = new Font(Settings.FontName, 8F), + ForeColour = Color.LimeGreen, + Location = new Point(18, 0), + Visible = true, + }; + + for (int i = 0; i < Quests.Count; i++) + { + bool Track = Settings.TrackedQuests.Contains(Quests[i].Id) ? true : false; + QuestSingleQuestItem singleQuest = new QuestSingleQuestItem(Quests[i]) + { + Parent = this, + Location = new Point(18, (15 * (i + 1))), + Size = new Size(280, 15), + Visible = Expanded + }; + singleQuest.SelectedQuestChanged += (o, e) => OnSelectedQuestChanged(o); + + _tasks.Add(singleQuest); + + if (Expanded) + SizeY += 15; + } + + Size = new Size(280, SizeY); + } + + public void UpdatePositions() + { + SizeY = 15; + + foreach (var singleTask in _tasks) + { + singleTask.Visible = Expanded; + + if (Expanded) SizeY += 15; + } + + Size = new Size(280, SizeY); + } + + public void ClearTasks() + { + foreach (QuestSingleQuestItem task in _tasks) + { + task.Dispose(); + } + _tasks.Clear(); + } + + public void DeselectQuests() + { + foreach (QuestSingleQuestItem task in _tasks) + { + task.Selected = false; + } + } + + private void ChangeExpand() + { + Expanded = !Expanded; + + _expandButton.Index = Expanded ? 917 : 918; + + UpdatePositions(); + + OnExpandedChanged(); + } + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + + Group = string.Empty; + Quests.Clear(); + + _expandButton.Dispose(); + _groupLabel.Dispose(); + + ClearTasks(); + } + } + public sealed class QuestSingleQuestItem : MirControl + { + private MirLabel _questLabel, _stateLabel; + private readonly MirImageControl _selectedImage; + + public ClientQuestProgress Quest; + + public bool Selected; + public bool TrackQuest; + + public event EventHandler SelectedQuestChanged; + private void OnSelectedQuestChanged() + { + if (SelectedQuestChanged != null) + SelectedQuestChanged.Invoke(this, EventArgs.Empty); + } + + public QuestSingleQuestItem(ClientQuestProgress quest) + { + Quest = quest; + Size = new Size(250, 15); + TrackQuest = GameScene.Scene.QuestTrackingDialog.TrackedQuestsIds.Contains(quest.Id); + + string name = Quest.QuestInfo.Name; + string level = string.Format("Lv{0}", Quest.QuestInfo.MinLevelNeeded); + string state = quest.Completed ? "(Complete)" : "(In Progress)"; + + bool lowLevelQuest = (MapObject.User.Level - quest.QuestInfo.MinLevelNeeded) > 10; + + BeforeDraw += QuestTaskSingleItem_BeforeDraw; + AfterDraw += QuestTaskSingleItem_AfterDraw; + + _selectedImage = new MirImageControl + { + Index = 956, + Library = Libraries.Prguse, + Location = new Point(-10, 0), + Parent = this, + Visible = false + }; + + _questLabel = new MirLabel + { + Text = string.Format("{0,-4} {1}", level, name), + AutoSize = true, + Font = new Font(Settings.FontName, 8F), + ForeColour = lowLevelQuest ? Color.Gray : quest.New ? Color.Yellow : Color.White, + Parent = this, + Location = new Point(0, 0), + Sound = SoundList.ButtonA + }; + + _questLabel.Click += (o, e) => + { + MouseEventArgs me = e as MouseEventArgs; + + if (me == null) return; + + switch (me.Button) + { + case MouseButtons.Left: + GameScene.Scene.QuestDetailDialog.DisplayQuestDetails(Quest); + break; + case MouseButtons.Right: + { + if (TrackQuest) + { + GameScene.Scene.QuestTrackingDialog.RemoveQuest(Quest); + } + else + { + if (GameScene.Scene.QuestTrackingDialog.TrackedQuestsIds.Count >= 5) return; + + GameScene.Scene.QuestTrackingDialog.AddQuest(Quest); + } + + TrackQuest = !TrackQuest; + } + break; + } + + OnSelectedQuestChanged(); + }; + + _stateLabel = new MirLabel + { + Text = string.Format("{0}", state), + AutoSize = true, + Font = new Font(Settings.FontName, 8F), + ForeColour = lowLevelQuest ? Color.Gray : quest.New ? Color.Yellow : Color.White, + Parent = this, + Location = new Point(185, 0), + Sound = SoundList.ButtonA + }; + } + + void QuestTaskSingleItem_BeforeDraw(object sender, EventArgs e) + { + _selectedImage.Visible = Selected; + } + + void QuestTaskSingleItem_AfterDraw(object sender, EventArgs e) + { + if (TrackQuest) + { + Libraries.Prguse.Draw(997, new Point(DisplayLocation.X - 15, DisplayLocation.Y), Color.White); + } + } + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + + Quest = null; + _questLabel.Dispose(); + _questLabel = null; + } + } + +} diff --git a/Client/MirScenes/Dialogs/RankingDialog.cs b/Client/MirScenes/Dialogs/RankingDialog.cs new file mode 100644 index 0000000..1e44755 --- /dev/null +++ b/Client/MirScenes/Dialogs/RankingDialog.cs @@ -0,0 +1,423 @@ +using Client.MirControls; +using Client.MirGraphics; +using Client.MirSounds; + +namespace Client.MirScenes.Dialogs +{ + public class RankingDialog : MirImageControl + { + public MirButton AllButton, WarButton, WizButton, TaoButton, SinButton, ArchButton, Tab7, NextButton, PrevButton, ScrollBar; + public MirButton CloseButton; + public MirLabel MyRank; + public MirCheckBox OnlineOnlyButton; + + public byte RankType = 0; + private int rowOffset; + private int RowOffset + { + get { return rowOffset; } + set + { + rowOffset = value; + ScrollBar.Location = new Point(PrevButton.Location.X, (int)(PrevButton.Location.Y + 13 + rowOffset * GapPerRow)); + } + } + public int RankCount; + public RankingRow[] Rows = new RankingRow[20]; + public List[] RankList = new List[6]; + public int[] Rank = new int[6]; + private bool OnlineOnly; + + public long[] LastRequest = new long[6]; + private float GapPerRow; + private int ScrollHeight; + private DateTime NextRequestTime = DateTime.MinValue; + + public RankingDialog() + { + Index = 728; + Library = Libraries.Prguse; + //Size = new Size(288, 324); + Movable = true; + Sort = true; + Location = new Point((Settings.ScreenWidth - Size.Width) / 2, (Settings.ScreenHeight - Size.Height) / 2); + + CloseButton = new MirButton + { + HoverIndex = 361, + Index = 360, + Location = new Point(300, 3), + Library = Libraries.Prguse2, + Parent = this, + PressedIndex = 362, + Sound = SoundList.ButtonA, + }; + CloseButton.Click += (o, e) => Hide(); + + AllButton = new MirButton + { + Index = 751, + PressedIndex = 752, + HoverIndex = 753, + Library = Libraries.Prguse, + Hint = "Overall TOP 20", + Location = new Point(10, 38), + Parent = this, + Sound = SoundList.ButtonA, + + }; + AllButton.Click += (o, e) => SelectRank(0); + TaoButton = new MirButton + { + Index = 760, + PressedIndex = 761, + HoverIndex = 762, + Library = Libraries.Prguse, + Hint = "TOP 20 Taoists", + Location = new Point(40, 38), + Parent = this, + Sound = SoundList.ButtonA, + }; + TaoButton.Click += (o, e) => SelectRank(3); + WarButton = new MirButton + { + Index = 754, + PressedIndex = 755, + HoverIndex = 756, + Library = Libraries.Prguse, + Hint = "TOP 20 Warriors", + Location = new Point(60, 38), + Parent = this, + Sound = SoundList.ButtonA, + }; + WarButton.Click += (o, e) => SelectRank(1); + WizButton = new MirButton + { + Index = 763, + PressedIndex = 764, + HoverIndex = 765, + Library = Libraries.Prguse, + Hint = "TOP 20 Wizards", + Location = new Point(80, 38), + Parent = this, + Sound = SoundList.ButtonA, + }; + WizButton.Click += (o, e) => SelectRank(2); + SinButton = new MirButton + { + Index = 757, + PressedIndex = 758, + HoverIndex = 759, + Library = Libraries.Prguse, + Hint = "TOP 20 Assasins", + Location = new Point(100, 38), + Parent = this, + Sound = SoundList.ButtonA, + }; + SinButton.Click += (o, e) => SelectRank(4); + ArchButton = new MirButton + { + Index = 766, + PressedIndex = 767, + HoverIndex = 768, + Library = Libraries.Prguse, + Hint = "TOP 20 Archers", + Location = new Point(120, 38), + Parent = this, + Sound = SoundList.ButtonA, + }; + ArchButton.Click += (o, e) => SelectRank(5); + + NextButton = new MirButton + { + Index = 207, + HoverIndex = 208, + PressedIndex = 209, + Library = Libraries.Prguse2, + Location = new Point(299, 386), + Parent = this, + Sound = SoundList.ButtonA, + }; + NextButton.Click += (o, e) => Move(1); + + PrevButton = new MirButton + { + Index = 197, + HoverIndex = 198, + PressedIndex = 199, + Library = Libraries.Prguse2, + Location = new Point(299, 100), + Parent = this, + Sound = SoundList.ButtonA, + }; + PrevButton.Click += (o, e) => Move(-1); + + ScrollHeight = NextButton.Location.Y - PrevButton.Location.Y - 32; + + ScrollBar = new MirButton + { + Index = 205, + HoverIndex = 206, + PressedIndex = 206, + Location = new Point(299, PrevButton.Location.Y + 13), + Library = Libraries.Prguse2, + Parent = this, + Movable = true, + Sound = SoundList.ButtonA, + }; + ScrollBar.OnMoving += (o, e) => + { + var y = ScrollBar.Location.Y; + if (y < 110) + y = 110; + if (y > 368) + y = 368; + + ScrollBar.Location = new Point(ScrollBar.Location.X, y); + + var row = Math.Max(0, Math.Min(RankCount - 20, (y - PrevButton.Location.Y - 13) / GapPerRow)); + RowOffset = (int)row; + NextRequestTime = CMain.Now + TimeSpan.FromSeconds(0.5); + }; + + OnlineOnlyButton = new MirCheckBox { Index = 2086, UnTickedIndex = 2086, TickedIndex = 2087, Parent = this, Location = new Point(190, Size.Height - 20), Library = Libraries.Prguse }; + OnlineOnlyButton.LabelText = "Online Only"; + OnlineOnlyButton.Click += (o, e) => + { + OnlineOnly = OnlineOnlyButton.Checked; + RowOffset = 0; + NextRequestTime = CMain.Now; + }; + + MyRank = new MirLabel + { + Text = "", + Parent = this, + Font = new Font(Settings.FontName, 10F, FontStyle.Bold), + ForeColour = Color.BurlyWood, + Location = new Point(229, 36), + Size = new Size(82,22), + DrawFormat = TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter, + //AutoSize = true + }; + MyRank.Click += (o, e) => GoToMyRank(); + + + for (int i = 0; i < Rows.Count(); i++) + { + Rows[i] = new RankingRow() + { + Parent = this, + Location = new Point(32, 98 + i * 15), + Size = new Size(270,15), + }; + Rows[i].MouseWheel += (o, e) => Ranking_MouseWheel(o, e); + } + for (int i = 0; i < RankList.Length; i++) + { + RankList[i] = new List(); + } + } + + public void Process() + { + if (NextRequestTime != DateTime.MinValue && CMain.Now > NextRequestTime) + { + NextRequestTime = DateTime.MinValue; + RequestRanks(RankType); + } + } + + public override void Show() + { + if (Visible) return; + Visible = true; + RequestRanks(RankType); + } + + public override void Hide() + { + if (!Visible) return; + Visible = false; + } + + public void Ranking_MouseWheel(object sender, MouseEventArgs e) + { + int count = e.Delta / SystemInformation.MouseWheelScrollDelta; + Move(-count); + } + + public void Toggle() + { + if (!Visible) + Show(); + else + Hide(); + } + + public void GoToMyRank() + { + + } + + public void Move(int distance) + { + if (distance > 0) + {//go down + RowOffset = RowOffset < RankCount - 20 ? ++RowOffset : RowOffset; + } + else + {//go up + RowOffset = RowOffset > 0 ? --RowOffset : RowOffset; + } + NextRequestTime = CMain.Now + TimeSpan.FromSeconds(0.5); + } + + public void RequestRanks(byte RankType) + { + if (RankType > 6) return; + MirNetwork.Network.Enqueue(new ClientPackets.GetRanking { RankType = RankType, RankIndex = RowOffset, OnlineOnly = OnlineOnly}); + } + + public void RecieveRanks(List Ranking, byte rankType, int MyRank, int Count) + { + RankList[rankType].Clear(); + RankList[rankType] = Ranking; + Rank[rankType] = MyRank; + RankCount = Count; + UpdateRanks(); + var extraRows = Count - 20; + GapPerRow = ScrollHeight / (float)extraRows; + } + + public void SelectRank(byte rankType) + { + RankType = rankType; + for (int i = 0; i < Rows.Count(); i++) + { + Rows[i].Clear(); + } + RowOffset = 0; + RequestRanks(RankType); + } + + public void UpdateRanks() + { + for (int i = 0; i < Rows.Count(); i++) + { + if (i >= RankCount) + Rows[i].Clear(); + else + Rows[i].Update(RankList[RankType][i], RowOffset + i + 1); + } + if (Rank[RankType] == 0) + MyRank.Text = "Not Listed"; + else + MyRank.Text = string.Format("Ranked: {0}", Rank[RankType]); + } + + public sealed class RankingRow : MirControl + { + public RankCharacterInfo Listing; + public MirLabel RankLabel, NameLabel, LevelLabel, ClassLabel; + public long Index; + + public RankingRow() + { + Sound = SoundList.ButtonA; + BorderColour = Color.Lime; + Visible = false; + + RankLabel = new MirLabel + { + Location = new Point(0, 0), + AutoSize = true, + DrawFormat = TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter, + Parent = this, + NotControl = true, + }; + NameLabel = new MirLabel + { + Location = new Point(55, 0), + AutoSize = true, + DrawFormat = TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter, + Parent = this, + NotControl = true, + }; + + ClassLabel = new MirLabel + { + Location = new Point(150, 0), + AutoSize = true, + DrawFormat = TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter, + Parent = this, + NotControl = true, + }; + + LevelLabel = new MirLabel + { + Location = new Point(220, 0), + AutoSize = true, + DrawFormat = TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter, + Parent = this, + NotControl = true, + }; + } + + public void Clear() + { + Visible = false; + NameLabel.Text = string.Empty; + RankLabel.Text = string.Empty; + LevelLabel.Text = string.Empty; + ClassLabel.Text = string.Empty; + } + public void Update(RankCharacterInfo listing, int RankIndex) + { + Listing = listing; + RankLabel.Text = RankIndex.ToString(); + LevelLabel.Text = Listing.level.ToString(); + ClassLabel.Text = Listing.Class.ToString(); + NameLabel.Text = listing.Name; + Index = listing.PlayerId; + if (RankLabel.Text == "1") + { + RankLabel.ForeColour = Color.Gold; + NameLabel.ForeColour = Color.Gold; + LevelLabel.ForeColour = Color.Gold; + ClassLabel.ForeColour = Color.Gold; + } + if (RankLabel.Text == "2") + { + RankLabel.ForeColour = Color.Silver; + NameLabel.ForeColour = Color.Silver; + LevelLabel.ForeColour = Color.Silver; + ClassLabel.ForeColour = Color.Silver; + } + if (RankLabel.Text == "3") + { + RankLabel.ForeColour = Color.RosyBrown; + NameLabel.ForeColour = Color.RosyBrown; + LevelLabel.ForeColour = Color.RosyBrown; + ClassLabel.ForeColour = Color.RosyBrown; + } + else if (NameLabel.Text == GameScene.User.Name) + { + RankLabel.ForeColour = Color.Green; + NameLabel.ForeColour = Color.Green; + LevelLabel.ForeColour = Color.Green; + ClassLabel.ForeColour = Color.Green; + } + else if (Convert.ToInt32(RankLabel.Text) > 3) + { + RankLabel.ForeColour = Color.White; + NameLabel.ForeColour = Color.White; + LevelLabel.ForeColour = Color.White; + ClassLabel.ForeColour = Color.White; + } + + Visible = true; + } + } + } +} diff --git a/Client/MirScenes/Dialogs/RelationshipDialog.cs b/Client/MirScenes/Dialogs/RelationshipDialog.cs new file mode 100644 index 0000000..4834cc1 --- /dev/null +++ b/Client/MirScenes/Dialogs/RelationshipDialog.cs @@ -0,0 +1,247 @@ +using Client.MirControls; +using Client.MirGraphics; +using Client.MirNetwork; +using Client.MirSounds; +using C = ClientPackets; + +namespace Client.MirScenes.Dialogs +{ + public sealed class RelationshipDialog : MirImageControl + { + public MirImageControl TitleLabel; + public MirButton CloseButton, AllowButton, RequestButton, DivorceButton, MailButton, WhisperButton; + public MirLabel LoverNameLabel, LoverDateLabel, LoverOnlineLabel, LoverLengthLabel; + + + public string LoverName = ""; + public DateTime Date; + public string MapName = ""; + public short MarriedDays = 0; + + + public RelationshipDialog() + { + Index = 583; + Library = Libraries.Prguse; + Movable = true; + Sort = true; + Location = Center; + + TitleLabel = new MirImageControl + { + Index = 52, + Library = Libraries.Prguse, + Location = new Point(18, 8), + Parent = this + }; + + CloseButton = new MirButton + { + HoverIndex = 361, + Index = 360, + Location = new Point(260, 3), + Library = Libraries.Prguse2, + Parent = this, + PressedIndex = 362, + Sound = SoundList.ButtonA, + }; + CloseButton.Click += (o, e) => Hide(); + + AllowButton = new MirButton + { + HoverIndex = 611, + Index = 610, + Location = new Point(50, 164), + Library = Libraries.Prguse, + Parent = this, + PressedIndex = 612, + Sound = SoundList.ButtonA, + Hint = GameLanguage.SwitchMarriage + }; + AllowButton.Click += (o, e) => Network.Enqueue(new C.ChangeMarriage()); + + RequestButton = new MirButton + { + HoverIndex = 601, + Index = 600, + Location = new Point(85, 164), + Library = Libraries.Prguse, + Parent = this, + PressedIndex = 602, + Sound = SoundList.ButtonA, + Hint = GameLanguage.RequestMarriage + }; + RequestButton.Click += (o, e) => + { + if (LoverName != "") + { + GameScene.Scene.ChatDialog.ReceiveChat("You're already married.", ChatType.System); + return; + } + + Network.Enqueue(new C.MarriageRequest()); + }; + + DivorceButton = new MirButton + { + HoverIndex = 617, + Index = 616, + Location = new Point(120, 164), + Library = Libraries.Prguse, + Parent = this, + PressedIndex = 618, + Sound = SoundList.ButtonA, + Hint = GameLanguage.RequestDivorce + }; + DivorceButton.Click += (o, e) => + { + if (LoverName == "") + { + GameScene.Scene.ChatDialog.ReceiveChat("You're not married.", ChatType.System); + return; + } + + Network.Enqueue(new C.DivorceRequest()); + }; + + MailButton = new MirButton + { + HoverIndex = 438, + Index = 437, + Location = new Point(155, 164), + Library = Libraries.Prguse, + Parent = this, + PressedIndex = 439, + Sound = SoundList.ButtonA, + Hint = GameLanguage.MailLover + }; + MailButton.Click += (o, e) => + { + if (LoverName == "") + { + GameScene.Scene.ChatDialog.ReceiveChat("You're not married.", ChatType.System); + return; + } + + GameScene.Scene.MailComposeLetterDialog.ComposeMail(LoverName); + }; + + WhisperButton = new MirButton + { + HoverIndex = 567, + Index = 566, + Location = new Point(190, 164), + Library = Libraries.Prguse, + Parent = this, + PressedIndex = 568, + Sound = SoundList.ButtonA, + Hint = GameLanguage.WhisperLover + }; + WhisperButton.Click += (o, e) => + { + if (LoverName == "") + { + GameScene.Scene.ChatDialog.ReceiveChat("You're not married.", ChatType.System); + return; + } + + if (MapName == "") + { + GameScene.Scene.ChatDialog.ReceiveChat("Lover is not online", ChatType.System); + return; + } + GameScene.Scene.ChatDialog.ChatTextBox.SetFocus(); + GameScene.Scene.ChatDialog.ChatTextBox.Text = ":)"; + GameScene.Scene.ChatDialog.ChatTextBox.Visible = true; + GameScene.Scene.ChatDialog.ChatTextBox.TextBox.SelectionLength = 0; + GameScene.Scene.ChatDialog.ChatTextBox.TextBox.SelectionStart = GameScene.Scene.ChatDialog.ChatTextBox.Text.Length; + }; + + LoverNameLabel = new MirLabel + { + Location = new Point(30, 40), + Size = new Size(200, 30), + BackColour = Color.Empty, + ForeColour = Color.LightGray, + DrawFormat = TextFormatFlags.VerticalCenter, + Parent = this, + NotControl = true, + Font = new Font(Settings.FontName, 10F), + }; + + LoverDateLabel = new MirLabel + { + Location = new Point(30, 65), + Size = new Size(200, 30), + BackColour = Color.Empty, + ForeColour = Color.LightGray, + DrawFormat = TextFormatFlags.VerticalCenter, + Parent = this, + NotControl = true, + Font = new Font(Settings.FontName, 10F), + }; + + LoverLengthLabel = new MirLabel + { + Location = new Point(30, 90), + Size = new Size(200, 30), + BackColour = Color.Empty, + ForeColour = Color.LightGray, + DrawFormat = TextFormatFlags.VerticalCenter, + Parent = this, + NotControl = true, + Font = new Font(Settings.FontName, 10F), + }; + + LoverOnlineLabel = new MirLabel + { + Location = new Point(30, 115), + Size = new Size(200, 30), + BackColour = Color.Empty, + ForeColour = Color.LightGray, + DrawFormat = TextFormatFlags.VerticalCenter, + Parent = this, + NotControl = true, + Font = new Font(Settings.FontName, 10F), + }; + } + + public void UpdateInterface() + { + LoverNameLabel.Text = "Lover: " + LoverName; + + if (MapName != "") + { + LoverOnlineLabel.Text = "Location: " + MapName; + } + else + LoverOnlineLabel.Text = "Location: Offline"; + + if ((LoverName == "") && (Date != default)) + { + if (Date < new DateTime(2000)) + { + LoverDateLabel.Text = "Date: "; + LoverLengthLabel.Text = "Length: "; + } + else + { + LoverDateLabel.Text = "Divorced Date: " + Date.ToShortDateString(); + LoverLengthLabel.Text = "Time Since: " + MarriedDays + " Days"; + } + + + LoverOnlineLabel.Text = "Location: "; + AllowButton.Hint = GameLanguage.SwitchMarriage; + } + else + { + LoverDateLabel.Text = "Marriage Date: " + Date.ToShortDateString(); + LoverLengthLabel.Text = "Length: " + MarriedDays.ToString() + " Days"; + AllowButton.Hint = "Allow/Block Recall"; + } + + + } + } +} diff --git a/Client/MirScenes/Dialogs/ReportDialog.cs b/Client/MirScenes/Dialogs/ReportDialog.cs new file mode 100644 index 0000000..09c7915 --- /dev/null +++ b/Client/MirScenes/Dialogs/ReportDialog.cs @@ -0,0 +1,75 @@ +using Client.MirControls; +using Client.MirGraphics; +using Client.MirSounds; + +namespace Client.MirScenes.Dialogs +{ + public sealed class ReportDialog : MirImageControl + { + MirDropDownBox ReportType; + MirButton SendButton, CloseButton; + MirTextBox MessageArea; + + public ReportDialog() + { + Index = 1633; + Library = Libraries.Prguse; + Movable = true; + Sort = true; + Location = Center; + + CloseButton = new MirButton + { + HoverIndex = 361, + Index = 360, + Location = new Point(336, 3), + Library = Libraries.Prguse2, + Parent = this, + PressedIndex = 362, + Sound = SoundList.ButtonA, + }; + CloseButton.Click += (o, e) => Hide(); + + ReportType = new MirDropDownBox() + { + Parent = this, + Location = new Point(12, 35), + Size = new Size(170, 14), + ForeColour = Color.White, + Visible = true, + Enabled = true, + }; + ReportType.Items.Add("Select Report Type."); + ReportType.Items.Add("Submit Bug"); + ReportType.Items.Add("Report Player"); + + MessageArea = new MirTextBox + { + Parent = this, + Location = new Point(12, 57), + Size = new Size(330, 150), + Font = new Font(Settings.FontName, 8F), + }; + + MessageArea.MultiLine(); + + SendButton = new MirButton + { + Parent = this, + Library = Libraries.Prguse, + Index = 607, + HoverIndex = 608, + PressedIndex = 609, + Sound = SoundList.ButtonA, + Location = new Point(260, 219) + }; + SendButton.Click += SendButton_Click; + + } + + void SendButton_Click(object sender, EventArgs e) + { + throw new NotImplementedException(); + } + } +} diff --git a/Client/MirScenes/Dialogs/RollDialog.cs b/Client/MirScenes/Dialogs/RollDialog.cs new file mode 100644 index 0000000..45e60bb --- /dev/null +++ b/Client/MirScenes/Dialogs/RollDialog.cs @@ -0,0 +1,199 @@ +using Client.MirControls; +using Client.MirGraphics; +using Client.MirNetwork; +using Client.MirSounds; +using C = ClientPackets; + +namespace Client.MirScenes.Dialogs +{ + public sealed class RollDialog : MirControl + { + private readonly MirAnimatedControl _animation; + private readonly MirImageControl _image; + + private int _currentLoop; + private int _type; + private string _npcPage; + private int _result; + + private bool _rolled; + private bool _rolling; + + public RollDialog() + { + Movable = false; + Sort = true; + + _animation = new MirAnimatedControl + { + Parent = this, + Index = 0, + Library = Libraries.Prguse2, + UseOffSet = true, + Location = new Point(0, 0), + Visible = true + }; + _animation.AfterAnimation += (o, e) => + { + switch (_type) + { + case 0: //Die + { + if (_currentLoop < 5) + { + _currentLoop++; + return; + } + + _image.Visible = true; + _animation.Visible = false; + _animation.Animated = false; + ReturnResult(); + } + break; + case 1: //Yut + { + _image.Visible = true; + _animation.Visible = false; + _animation.Animated = false; + ReturnResult(); + } + break; + } + + }; + + _image = new MirImageControl + { + Parent = this, + Index = 0, + Library = Libraries.Prguse2, + UseOffSet = true, + Location = new Point(0, 0), + Visible = false + }; + _image.Click += _image_Click; + } + + public void Setup(int type, string page, int result, bool autoRoll) + { + _type = type; + _npcPage = page; + _result = result; + _rolled = false; + + _currentLoop = 0; + Visible = true; + + switch (type) + { + case 0: //Die + { + Size = new Size(65, 65); + Location = new Point((Settings.ScreenWidth / 2) - 38, (Settings.ScreenHeight / 2) - 40); + + _image.Index = 282; + _image.Library = Libraries.Prguse; + _image.Visible = true; + + _animation.Loop = true; + _animation.Visible = false; + _animation.Animated = false; + _animation.OffSet = 0; + } + break; + case 1: //Yut + { + Size = new Size(180, 130); + Location = new Point((Settings.ScreenWidth / 2) - 90, (Settings.ScreenHeight / 2) - 65); + + _image.Index = 2581; + _image.Library = Libraries.Items; + _image.Visible = true; + + _animation.Loop = false; + _animation.Visible = false; + _animation.Animated = false; + _animation.OffSet = 0; + } + break; + } + + if (autoRoll) + { + Roll(); + } + } + + private void Roll() + { + Visible = true; + + _rolling = true; + + switch (_type) + { + case 0: //Die + { + _image.Index = 281 + _result; + _image.Library = Libraries.Prguse; + _image.Visible = false; + + _animation.Index = 290; + _animation.Library = Libraries.Prguse; + _animation.AnimationCount = 4; + _animation.AnimationDelay = 100; + _animation.Loop = true; + _animation.Visible = true; + _animation.Animated = true; + _animation.OffSet = 0; + + SoundManager.PlaySound(10600); + } + break; + case 1: //Yut + { + _image.Index = 2587 + _result; + _image.Library = Libraries.Items; + _image.Visible = false; + + _animation.Index = 2581; + _animation.Library = Libraries.Items; + _animation.AnimationCount = 6; + _animation.AnimationDelay = 100; + _animation.Loop = false; + _animation.Visible = true; + _animation.Animated = true; + _animation.OffSet = 0; + + SoundManager.PlaySound(10601); + } + break; + } + } + + private void _image_Click(object sender, EventArgs e) + { + if (_rolling) return; + + if (_rolled) + { + Hide(); + return; + } + + Roll(); + } + + private void ReturnResult() + { + _rolling = false; + _rolled = true; + + if (CMain.Time <= GameScene.NPCTime) return; + + GameScene.NPCTime = CMain.Time + 5000; + Network.Enqueue(new C.CallNPC { ObjectID = GameScene.NPCID, Key = $"[{_npcPage}]" }); + } + } +} diff --git a/Client/MirScenes/Dialogs/TimerDialog.cs b/Client/MirScenes/Dialogs/TimerDialog.cs new file mode 100644 index 0000000..f949005 --- /dev/null +++ b/Client/MirScenes/Dialogs/TimerDialog.cs @@ -0,0 +1,246 @@ +using S = ServerPackets; +using Client.MirControls; +using Client.MirGraphics; + +namespace Client.MirScenes.Dialogs +{ + public sealed class TimerDialog : MirControl + { + private bool _timerStarted = false; + private int _timerCounter = 0; + private long _timerTime = 0; + + private readonly MirAnimatedControl _eggTimer = null; + private readonly MirImageControl _1000 = null; + private readonly MirImageControl _100 = null; + private readonly MirImageControl _10 = null; + private readonly MirImageControl _1 = null; + private readonly MirImageControl _colon = null; + private readonly int _libraryOffset = 900; + + private readonly List ActiveTimers = new List(); + private ClientTimer CurrentTimer = null; + + public TimerDialog() + { + Location = new Point(Settings.ScreenWidth - 120, Settings.ScreenHeight - 230); + NotControl = true; + Size = new Size(120, 100); + Movable = false; + Sort = true; + + _eggTimer = new MirAnimatedControl + { + Index = 960, + AnimationCount = 6, + AnimationDelay = 333, + Library = Libraries.Prguse2, + Parent = this, + Location = new Point(23, 0), + NotControl = true, + UseOffSet = true, + Animated = true, + Loop = false, + Opacity = 1F + }; + + _1000 = new MirImageControl + { + Parent = this, + Index = _libraryOffset + 0, + Library = Libraries.Prguse2, + NotControl = true, + UseOffSet = true, + Location = new Point(0, 70), + Visible = false + }; + + _100 = new MirImageControl + { + Parent = this, + Index = _libraryOffset + 0, + Library = Libraries.Prguse2, + NotControl = true, + UseOffSet = true, + Location = new Point(22, 70), + Visible = false + }; + + _colon = new MirImageControl + { + Parent = this, + Index = _libraryOffset + 10, + Library = Libraries.Prguse2, + NotControl = true, + UseOffSet = true, + Location = new Point(44, 70), + Visible = false + }; + + _10 = new MirImageControl + { + Parent = this, + Index = _libraryOffset + 0, + Library = Libraries.Prguse2, + NotControl = true, + UseOffSet = true, + Location = new Point(58, 70), + Visible = false + }; + + _1 = new MirImageControl + { + Parent = this, + Index = _libraryOffset + 0, + Library = Libraries.Prguse2, + NotControl = true, + UseOffSet = true, + Location = new Point(80, 70), + Visible = false + }; + } + + public void Process() + { + var timer = GetBestTimer(); + + if (timer != null) + { + if (timer != CurrentTimer || timer.Refresh) + { + CurrentTimer = timer; + CurrentTimer.Refresh = false; + + _timerStarted = true; + _timerTime = CMain.Time + 1000; + _timerCounter = (int)(CurrentTimer.RelativeTime - (CMain.Time / 1000)); + + UpdateTimeGraphic(); + } + } + + if (CurrentTimer == null || _timerStarted == false || CMain.Time < _timerTime) return; + + _timerCounter--; + _timerTime = CMain.Time + 1000; + + if (_timerCounter < 0 && _eggTimer != null) + { + Visible = false; + _1000.Visible = _100.Visible = _10.Visible = _1.Visible = _colon.Visible = false; + _eggTimer.Loop = false; + _timerStarted = false; + + ActiveTimers.Remove(CurrentTimer); + return; + } + + UpdateTimeGraphic(); + } + + private ClientTimer GetBestTimer() + { + return ActiveTimers.OrderBy(x => x.RelativeTime).FirstOrDefault(); + } + + public ClientTimer GetTimer(string key) + { + return ActiveTimers.FirstOrDefault(x => x.Key == key); + } + + public void AddTimer(S.SetTimer p) + { + var currentTimer = GetTimer(p.Key); + + if (currentTimer != null) + { + currentTimer.Update(p.Seconds, p.Type); + return; + } + + ActiveTimers.Add(new ClientTimer(p.Key, p.Seconds, p.Type)); + } + + public void ExpireTimer(string key) + { + var timer = ActiveTimers.FirstOrDefault(x => x.Key == key); + + if (timer != null) + { + timer.RelativeTime = 0; + + if (timer == CurrentTimer) + { + _timerCounter = 0; + } + } + } + + private void UpdateTimeGraphic() + { + TimeSpan ts = new TimeSpan(0, 0, _timerCounter); + + if (ts.Hours > 0) + { + _1000.Index = _libraryOffset + (ts.Hours / 10); + _100.Index = _libraryOffset + (ts.Hours % 10); + _10.Index = _libraryOffset + (ts.Minutes / 10); + _1.Index = _libraryOffset + (ts.Minutes % 10); + } + else + { + _1000.Index = _libraryOffset + (ts.Minutes / 10); + _100.Index = _libraryOffset + (ts.Minutes % 10); + _10.Index = _libraryOffset + (ts.Seconds / 10); + _1.Index = _libraryOffset + (ts.Seconds % 10); + } + + Visible = true; + _1000.Visible = _100.Visible = _10.Visible = _1.Visible = _colon.Visible = true; + + switch (CurrentTimer.Type) + { + default: + case 0: + _eggTimer.Visible = false; + _eggTimer.Index = 960; + break; + case 1: + _eggTimer.Visible = true; + _eggTimer.Index = 960; + break; + case 2: + _eggTimer.Visible = true; + _eggTimer.Index = 440; + break; + } + + _eggTimer.Loop = true; + } + } + + public class ClientTimer + { + public string Key; + public byte Type; + public int Seconds; + + public long RelativeTime; + public bool Refresh; + + public ClientTimer(string key, int time, byte type) + { + Key = key; + Update(time, type); + } + + public void Update(int time, byte type) + { + Seconds = time; + Type = type; + + RelativeTime = Seconds + (CMain.Time / 1000); + Refresh = true; + } + } +} diff --git a/Client/MirScenes/Dialogs/TradeDialogs.cs b/Client/MirScenes/Dialogs/TradeDialogs.cs new file mode 100644 index 0000000..9349346 --- /dev/null +++ b/Client/MirScenes/Dialogs/TradeDialogs.cs @@ -0,0 +1,280 @@ +using Client.MirControls; +using Client.MirGraphics; +using Client.MirNetwork; +using Client.MirSounds; +using C = ClientPackets; + +namespace Client.MirScenes.Dialogs +{ + public sealed class TradeDialog : MirImageControl + { + public MirItemCell[] Grid; + public MirLabel NameLabel, GoldLabel; + public MirButton ConfirmButton, CloseButton; + + public TradeDialog() + { + Index = 389; + Library = Libraries.Prguse; + Movable = true; + Size = new Size(204, 152); + Location = new Point((Settings.ScreenWidth / 2) - Size.Width - 10, Settings.ScreenHeight - 350); + Sort = true; + + #region Buttons + ConfirmButton = new MirButton + { + Index = 520, + HoverIndex = 521, + Location = new Point(135, 120), + Size = new Size(48, 25), + Library = Libraries.Prguse, + Parent = this, + PressedIndex = 522, + Sound = SoundList.ButtonA, + }; + ConfirmButton.Click += (o, e) => + { + ChangeLockState(!GameScene.User.TradeLocked); + Network.Enqueue(new C.TradeConfirm { Locked = GameScene.User.TradeLocked }); + }; + + CloseButton = new MirButton + { + HoverIndex = 361, + Index = 360, + Location = new Point(Size.Width - 23, 3), + Library = Libraries.Prguse2, + Parent = this, + PressedIndex = 362, + Sound = SoundList.ButtonA, + }; + CloseButton.Click += (o, e) => + { + Hide(); + GameScene.Scene.GuestTradeDialog.Hide(); + TradeCancel(); + }; + + #endregion + + #region Host labels + NameLabel = new MirLabel + { + Parent = this, + Location = new Point(20, 10), + Size = new Size(150, 14), + DrawFormat = TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter, + NotControl = true, + }; + + GoldLabel = new MirLabel + { + DrawFormat = TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter, + Font = new Font(Settings.FontName, 8F), + Location = new Point(35, 123), + Parent = this, + Size = new Size(90, 15), + Sound = SoundList.Gold, + }; + GoldLabel.Click += (o, e) => + { + if (GameScene.SelectedCell == null && GameScene.Gold > 0) + { + MirAmountBox amountBox = new MirAmountBox("Trade Amount:", 38, Libraries.Prguse, GameScene.Gold); + + amountBox.OKButton.Click += (c, a) => + { + if (amountBox.Amount > 0) + { + GameScene.User.TradeGoldAmount += amountBox.Amount; + Network.Enqueue(new C.TradeGold { Amount = amountBox.Amount }); + + RefreshInterface(); + } + }; + + amountBox.Show(); + GameScene.PickedUpGold = false; + } + }; + #endregion + + #region Grids + Grid = new MirItemCell[5 * 2]; + + for (int x = 0; x < 5; x++) + { + for (int y = 0; y < 2; y++) + { + Grid[2 * x + y] = new MirItemCell + { + ItemSlot = 2 * x + y, + GridType = MirGridType.Trade, + Parent = this, + Location = new Point(x * 36 + 10 + x, y * 32 + 39 + y), + }; + } + } + #endregion + } + + public void ChangeLockState(bool lockState, bool cancelled = false) + { + GameScene.User.TradeLocked = lockState; + + if (GameScene.User.TradeLocked) + { + ConfirmButton.Index = 521; + } + else + { + ConfirmButton.Index = 520; + } + + //if (!cancelled) + //{ + // //Send lock info to server + // Network.Enqueue(new C.TradeConfirm { Locked = lockState }); + //} + } + + public void RefreshInterface() + { + NameLabel.Text = GameScene.User.Name; + GoldLabel.Text = GameScene.User.TradeGoldAmount.ToString("###,###,##0"); + + GameScene.Scene.GuestTradeDialog.RefreshInterface(); + + Redraw(); + } + + public void TradeAccept() + { + GameScene.Scene.InventoryDialog.Location = new Point(Settings.ScreenWidth - GameScene.Scene.InventoryDialog.Size.Width, 0); + GameScene.Scene.InventoryDialog.Show(); + + RefreshInterface(); + + Show(); + GameScene.Scene.GuestTradeDialog.Show(); + } + + public void TradeReset() + { + GameScene.Scene.GuestTradeDialog.TradeReset(); + + for (int i = 0; i < GameScene.User.Trade.Length; i++) + GameScene.User.Trade[i] = null; + + GameScene.User.TradeGoldAmount = 0; + ChangeLockState(false, true); + + RefreshInterface(); + + Hide(); + GameScene.Scene.GuestTradeDialog.Hide(); + } + + public void TradeCancel() + { + Network.Enqueue(new C.TradeCancel()); + } + + public MirItemCell GetCell(ulong id) + { + for (int i = 0; i < Grid.Length; i++) + { + if (Grid[i].Item == null || Grid[i].Item.UniqueID != id) continue; + return Grid[i]; + } + return null; + } + } + public sealed class GuestTradeDialog : MirImageControl + { + public MirItemCell[] GuestGrid; + public static UserItem[] GuestItems = new UserItem[10]; + public string GuestName; + public uint GuestGold; + + public MirLabel GuestNameLabel, GuestGoldLabel; + + public MirButton ConfirmButton; + + public GuestTradeDialog() + { + Index = 390; + Library = Libraries.Prguse; + Movable = true; + Size = new Size(204, 152); + Location = new Point((Settings.ScreenWidth / 2) + 10, Settings.ScreenHeight - 350); + Sort = true; + + #region Host labels + GuestNameLabel = new MirLabel + { + Parent = this, + Location = new Point(0, 10), + Size = new Size(204, 14), + DrawFormat = TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter, + NotControl = true, + }; + + GuestGoldLabel = new MirLabel + { + DrawFormat = TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter, + Font = new Font(Settings.FontName, 8F), + Location = new Point(35, 123), + Parent = this, + Size = new Size(90, 15), + Sound = SoundList.Gold, + NotControl = true, + }; + #endregion + + #region Grids + GuestGrid = new MirItemCell[5 * 2]; + + for (int x = 0; x < 5; x++) + { + for (int y = 0; y < 2; y++) + { + GuestGrid[2 * x + y] = new MirItemCell + { + ItemSlot = 2 * x + y, + GridType = MirGridType.GuestTrade, + Parent = this, + Location = new Point(x * 36 + 10 + x, y * 32 + 39 + y), + }; + } + } + #endregion + } + + public void RefreshInterface() + { + GuestNameLabel.Text = GuestName; + GuestGoldLabel.Text = string.Format("{0:###,###,##0}", GuestGold); + + for (int i = 0; i < GuestItems.Length; i++) + { + if (GuestItems[i] == null) continue; + GameScene.Bind(GuestItems[i]); + } + + Redraw(); + } + + public void TradeReset() + { + for (int i = 0; i < GuestItems.Length; i++) + GuestItems[i] = null; + + GuestName = string.Empty; + GuestGold = 0; + + Hide(); + } + } +} diff --git a/Client/MirScenes/Dialogs/TrustMerchantDialog.cs b/Client/MirScenes/Dialogs/TrustMerchantDialog.cs new file mode 100644 index 0000000..8d0da47 --- /dev/null +++ b/Client/MirScenes/Dialogs/TrustMerchantDialog.cs @@ -0,0 +1,1515 @@ +using Client.MirControls; +using Client.MirGraphics; +using Client.MirNetwork; +using Client.MirSounds; +using C = ClientPackets; + + +namespace Client.MirScenes.Dialogs +{ + public sealed class TrustMerchantDialog : MirImageControl + { + public static bool UserMode = false; + public static MarketPanelType MarketType; + + public uint Amount = 0, + MinConsignAmount = Globals.MinConsignment, MaxConsignAmount = Globals.MaxConsignment, + MinBidAmount = Globals.MinStartingBid, MaxBidAmount = Globals.MaxStartingBid; + + public static long SearchTime, MarketTime; + + public MirTextBox SearchTextBox, PriceTextBox; + public MirButton FindButton, RefreshButton, MailButton, BuyButton, SellNowButton, CloseButton, NextButton, BackButton; + public MirImageControl TitleLabel; + public MirLabel ItemLabel, PriceLabel, SellerLabel, PageLabel; + public MirLabel DateLabel, ExpireLabel; + public MirLabel NameLabel, TotalPriceLabel, SplitPriceLabel; + public MirLabel HelpLabel; + public MirLabel TitleSalePriceLabel, TitleSellLabel, TitleItemLabel, TitlePriceLabel, TitleExpiryLabel; + + public MirItemCell ItemCell, tempCell; + public static UserItem SellItemSlot; + public MirButton SellItemButton; + + public List Listings = new List(); + public List GameShopListings = new List(); + + public int Page, PageCount; + public static AuctionRow Selected; + public AuctionRow[] Rows = new AuctionRow[10]; + + public MirButton UpButton, DownButton, PositionBar; + public MirButton MarketButton, ConsignmentButton, AuctionButton, GameShopButton; + + public MirImageControl FilterBox, FilterBackground; + + private readonly string consignmentText = $"1. Consignment is {Globals.ConsignmentCost} gold per item \r\n\r\n2. 1% of sale price is paid to Trust Merchant " + + $"at sale end\r\n\r\n3. Maximum {Globals.ConsignmentLength} days of item sale registration until item is removed\r\n\r\n4. Maximum of unlimited " + + $"items allowed for sale\r\n\r\n5. Sale price can be set between: {Globals.MinConsignment} - {Globals.MaxConsignment} gold"; + + private readonly string auctionText = $"1. Auction cost is {Globals.AuctionCost} gold, max starting bid is {Globals.MaxStartingBid} gold per item \r\n\r\n2. 1% of final bid price is paid to Trust Merchant " + + $"at auction end\r\n\r\n3. Maximum {Globals.ConsignmentLength} days of item sale registration, afterwards the item will be sent to highest bidder\r\n\r\n4. Maximum of unlimited " + + $"items allowed for auction\r\n\r\n"; + + private MirLabel TotalGold; + + public List Filters = new List(); + + List FilterButtons = new List(); + List FilterLabels = new List(); + + private int Skip = 0; + private int MaxLines = 19; + private int SelectedIndex = -1; + private int SelectedSubIndex = -1; + + private int PossibleTotal = 0; + private int PosX, PosMinY, PosMaxY; + + public TrustMerchantDialog() + { + Index = 786; + Library = Libraries.Prguse; + Sort = true; + Movable = true; + Size = new Size(492, 478); + + #region TrustMerchant Buttons + + MarketButton = new MirButton + { + Index = 789, + PressedIndex = 788, + Library = Libraries.Prguse, + Location = new Point(9, 35), + Parent = this, + }; + MarketButton.Click += (o, e) => + { + TMerchantDialog(MarketPanelType.Market); + if (tempCell != null) + { + tempCell.Locked = false; + SellItemSlot = null; + tempCell = null; + } + }; + + ConsignmentButton = new MirButton + { + Index = 791, + PressedIndex = 790, + Library = Libraries.Prguse, + Location = new Point(104, 35), + Parent = this, + Visible = true, + }; + ConsignmentButton.Click += (o, e) => + { + TMerchantDialog(MarketPanelType.Consign); + }; + + AuctionButton = new MirButton + { + Index = 817, + PressedIndex = 816, + Library = Libraries.Prguse, + Location = new Point(199, 35), + Parent = this, + Visible = true, + }; + AuctionButton.Click += (o, e) => + { + TMerchantDialog(MarketPanelType.Auction); + }; + + GameShopButton = new MirButton + { + Index = 819, + PressedIndex = 818, + Library = Libraries.Prguse, + Location = new Point(389, 35), + Parent = this, + Visible = true, + }; + GameShopButton.Click += (o, e) => + { + TMerchantDialog(MarketPanelType.GameShop); + }; + + CloseButton = new MirButton + { + Index = 360, + HoverIndex = 361, + PressedIndex = 362, + Location = new Point(465, 3), + Library = Libraries.Prguse2, + Sound = SoundList.ButtonA, + Parent = this, + }; + CloseButton.Click += (o, e) => Hide(); + + #region Page Buttons & Label + + HelpLabel = new MirLabel + { + Text = consignmentText, + Parent = this, + Size = new Size(115, 205), + Location = new Point(8, 237), + Font = new Font(Settings.FontName, Settings.FontSize - 1), + ForeColour = Color.White, + Visible = false + }; + + BackButton = new MirButton + { + Index = 240, + HoverIndex = 241, + PressedIndex = 242, + Library = Libraries.Prguse2, + Location = new Point(251, 419), + Sound = SoundList.ButtonA, + Parent = this, + }; + BackButton.Click += (o, e) => + { + if (Page <= 0) return; + + Page--; + UpdateInterface(); + }; + + NextButton = new MirButton + { + Index = 243, + HoverIndex = 244, + PressedIndex = 245, + Library = Libraries.Prguse2, + Location = new Point(320, 419), + Sound = SoundList.ButtonA, + Parent = this, + }; + NextButton.Click += (o, e) => + { + if (Page >= PageCount - 1) return; + if (Page < (Listings.Count - 1) / 10) + { + Page++; + UpdateInterface(); + return; + } + + Network.Enqueue(new C.MarketPage { Page = Page + 1 }); + + }; + + PageLabel = new MirLabel + { + Size = new Size(70, 18), + Location = new Point(260, 419), + DrawFormat = TextFormatFlags.HorizontalCenter, + Text = "0/0", + NotControl = true, + Parent = this, + }; + + UpButton = new MirButton + { + Index = 197, + HoverIndex = 198, + PressedIndex = 199, + Library = Libraries.Prguse2, + Parent = this, + Size = new Size(16, 14), + Location = new Point(108, 60), + Sound = SoundList.ButtonA, + Visible = true + }; + UpButton.Click += (o, e) => + { + if (Skip <= 0) return; + + Skip--; + + + UpdatePositionBar(); + DrawFilters(SelectedIndex, SelectedSubIndex); + }; + + + DownButton = new MirButton + { + Index = 207, + HoverIndex = 208, + Library = Libraries.Prguse2, + PressedIndex = 209, + Parent = this, + Size = new Size(16, 14), + Location = new Point(108, 429), + Sound = SoundList.ButtonA, + Visible = true + }; + + DownButton.Click += (o, e) => + { + if (Skip + MaxLines >= PossibleTotal) return; + + Skip++; + + UpdatePositionBar(); + DrawFilters(SelectedIndex, SelectedSubIndex); + }; + + PositionBar = new MirButton + { + Index = 205, + HoverIndex = 206, + PressedIndex = 206, + Library = Libraries.Prguse2, + Location = new Point(108, 73), + Parent = this, + Movable = true, + Sound = SoundList.None, + Visible = false + }; + + PosX = PositionBar.Location.X; + PosMinY = UpButton.Location.Y + 13; + PosMaxY = DownButton.Location.Y - 19; + + PositionBar.OnMoving += PositionBar_OnMoving; + + #endregion + + #endregion + + + SetupFilters(); + + #region Market Buttons + + MailButton = new MirButton + { + Index = 437, + HoverIndex = 438, + PressedIndex = 439, + Library = Libraries.Prguse, + Location = new Point(350, 448), + Sound = SoundList.ButtonA, + Parent = this, + }; + MailButton.Click += (o, e) => + { + if (Selected == null || CMain.Time < MarketTime) return; + + string message = $"I am interested in purchasing {Selected.Listing.Item.FriendlyName} for {Selected.Listing.Price}."; + + GameScene.Scene.MailComposeLetterDialog.ComposeMail(Selected.Listing.Seller, message); + }; + + RefreshButton = new MirButton + { + Index = 663, + HoverIndex = 664, + PressedIndex = 665, + Library = Libraries.Prguse, + Location = new Point(320, 448), + Sound = SoundList.ButtonA, + Parent = this, + }; + RefreshButton.Click += (o, e) => + { + if (CMain.Time < SearchTime) + { + GameScene.Scene.ChatDialog.ReceiveChat(string.Format("You can search again after {0} seconds.", Math.Ceiling((SearchTime - CMain.Time) / 1000D)), ChatType.System); + return; + } + SearchTime = CMain.Time + Globals.SearchDelay; + SearchTextBox.Text = string.Empty; + Network.Enqueue(new C.MarketRefresh()); + }; + + BuyButton = new MirButton + { + Index = 703, + HoverIndex = 704, + PressedIndex = 705, + Library = Libraries.Prguse, + Location = new Point(380, 448), + Sound = SoundList.ButtonA, + Parent = this, + }; + BuyButton.Click += (o, e) => + { + if (Selected == null || CMain.Time < MarketTime) return; + + if (UserMode) + { + if (Selected.Listing.ItemType == MarketItemType.Consign) + { + if (Selected.Listing.Seller == "For Sale") + { + MirMessageBox box = new MirMessageBox(string.Format("{0} has not sold, Are you sure you want to get it back?", Selected.Listing.Item.FriendlyName), MirMessageBoxButtons.YesNo); + box.YesButton.Click += (o1, e2) => + { + MarketTime = CMain.Time + 3000; + Network.Enqueue(new C.MarketGetBack { AuctionID = Selected.Listing.AuctionID }); + }; + box.Show(); + } + else + { + MarketTime = CMain.Time + 3000; + Network.Enqueue(new C.MarketGetBack { AuctionID = Selected.Listing.AuctionID }); + } + } + else if (Selected.Listing.ItemType == MarketItemType.Auction) + { + if (Selected.Listing.Seller == "No Bid") + { + MirMessageBox box = new MirMessageBox(string.Format("{0} has not sold, Are you sure you want to get it back?", Selected.Listing.Item.FriendlyName), MirMessageBoxButtons.YesNo); + box.YesButton.Click += (o1, e2) => + { + MarketTime = CMain.Time + 3000; + Network.Enqueue(new C.MarketGetBack { AuctionID = Selected.Listing.AuctionID }); + }; + box.Show(); + } + else + { + MarketTime = CMain.Time + 3000; + Network.Enqueue(new C.MarketGetBack { AuctionID = Selected.Listing.AuctionID }); + } + } + } + else + { + switch (Selected.Listing.ItemType) + { + case MarketItemType.Consign: + case MarketItemType.GameShop: + { + MirMessageBox box = new MirMessageBox(string.Format("Are you sure you want to buy {0} for {1:#,##0} {2}?", Selected.Listing.Item.FriendlyName, Selected.Listing.Price, MarketType == MarketPanelType.GameShop ? "Credits" : "Gold"), MirMessageBoxButtons.YesNo); + box.YesButton.Click += (o1, e2) => + { + MarketTime = CMain.Time + 3000; + Network.Enqueue(new C.MarketBuy { AuctionID = Selected.Listing.AuctionID }); + }; + box.Show(); + } + break; + case MarketItemType.Auction: + { + MirAmountBox bidAmount = new MirAmountBox("Bid Amount:", Selected.Listing.Item.Info.Image, Libraries.Items, uint.MaxValue, Selected.Listing.Price + 1, Selected.Listing.Price + 1); + + bidAmount.OKButton.Click += (o1, e1) => + { + MirMessageBox box = new MirMessageBox(string.Format("Are you sure you want to bid {0:#,##0} Gold for {1}?", bidAmount.Amount, Selected.Listing.Item.FriendlyName), MirMessageBoxButtons.YesNo); + box.YesButton.Click += (o2, e2) => + { + MarketTime = CMain.Time + 3000; + Network.Enqueue(new C.MarketBuy { AuctionID = Selected.Listing.AuctionID, BidPrice = bidAmount.Amount }); + }; + + box.Show(); + }; + + bidAmount.Show(); + } + break; + } + } + }; + + SellNowButton = new MirButton + { + Index = 700, + HoverIndex = 701, + PressedIndex = 702, + Library = Libraries.Prguse, + Location = new Point(324, 448), + Sound = SoundList.ButtonA, + Parent = this, + }; + SellNowButton.Click += (o, e) => + { + if (Selected == null || CMain.Time < MarketTime) return; + + MarketTime = CMain.Time + 3000; + Network.Enqueue(new C.MarketSellNow { AuctionID = Selected.Listing.AuctionID }); + }; + + #endregion + + #region Search + + SearchTextBox = new MirTextBox + { + //Location = new Point(174, 452), + //Location = new Point(240, 451), + Location = new Point(11, 452), + Size = new Size(110, 18), + MaxLength = 20, + Parent = this, + CanLoseFocus = true, + }; + SearchTextBox.TextBox.KeyPress += SearchTextBox_KeyPress; + SearchTextBox.TextBox.KeyUp += SearchTextBox_KeyUp; + SearchTextBox.TextBox.KeyDown += SearchTextBox_KeyDown; + + FindButton = new MirButton + { + Index = 480, + HoverIndex = 481, + PressedIndex = 482, + Library = Libraries.Prguse, + Location = new Point(124, 448), + Sound = SoundList.ButtonA, + Parent = this, + }; + FindButton.Click += (o, e) => + { + if (String.IsNullOrEmpty(SearchTextBox.Text)) return; + if (CMain.Time < SearchTime) + { + GameScene.Scene.ChatDialog.ReceiveChat(string.Format("You can search again after {0} seconds.", Math.Ceiling((SearchTime - CMain.Time) / 1000D)), ChatType.System); + return; + } + + SearchTime = CMain.Time + Globals.SearchDelay; + Network.Enqueue(new C.MarketSearch + { + Match = SearchTextBox.Text, + MarketType = MarketType + }); + }; + + #endregion + + #region Gold Label + TotalGold = new MirLabel + { + Size = new Size(120, 16), + DrawFormat = TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter, + Location = new Point(6, 451), + Parent = this, + NotControl = true, + Font = new Font(Settings.FontName, Settings.FontSize), + Visible = false + }; + #endregion + + #region ItemCell + + ItemCell = new MirItemCell + { + BorderColour = Color.Lime, + GridType = MirGridType.TrustMerchant, + Library = Libraries.Items, + Parent = this, + Location = new Point(47, 104), + ItemSlot = 0, + Visible = false + }; + ItemCell.Click += (o, e) => ItemCell_Click(); + + PriceTextBox = new MirTextBox + { + Location = new Point(15, 165), + Size = new Size(100, 18), + MaxLength = 20, + Parent = this, + CanLoseFocus = true, + Visible = false, + }; + PriceTextBox.TextBox.TextChanged += TextBox_TextChanged; + PriceTextBox.TextBox.KeyPress += MirInputBox_KeyPress; + + SellItemButton = new MirButton + { + Index = 700, + PressedIndex = 702, + HoverIndex = 701, + Library = Libraries.Prguse, + Sound = SoundList.ButtonA, + Location = new Point(39, 188), + Parent = this, + Visible = false, + Enabled = false + }; + SellItemButton.Click += (o, e) => + { + Network.Enqueue(new C.ConsignItem { UniqueID = SellItemSlot.UniqueID, Price = Amount, Type = MarketType }); + SellItemSlot = null; + PriceTextBox.Text = null; + SellItemButton.Enabled = false; + TMerchantDialog(MarketType); + }; + + + #endregion + + #region Auction Rows + for (int i = 0; i < Rows.Length; i++) + { + Rows[i] = new AuctionRow + { + Location = new Point(127, 82 + i * 33), + Parent = this + }; + Rows[i].Click += (o, e) => + { + Selected = (AuctionRow)o; + UpdateInterface(); + }; + } + #endregion + + #region Labels + + TitleSalePriceLabel = new MirLabel + { + Text = "SALE PRICE", + Parent = this, + Font = new Font(Settings.FontName, Settings.FontSize - 1, FontStyle.Italic), + DrawFormat = TextFormatFlags.VerticalCenter | TextFormatFlags.HorizontalCenter, + Size = new Size(100, 21), + Location = new Point(15, 142) + }; + + TitleSellLabel = new MirLabel + { + Text = "SELL ITEM", + Parent = this, + Font = new Font(Settings.FontName, Settings.FontSize - 1, FontStyle.Italic), + DrawFormat = TextFormatFlags.VerticalCenter | TextFormatFlags.HorizontalCenter, + Size = new Size(110, 21), + Location = new Point(10, 60) + }; + + TitleItemLabel = new MirLabel + { + Text = "ITEM", + Parent = this, + Font = new Font(Settings.FontName, Settings.FontSize - 1, FontStyle.Italic), + DrawFormat = TextFormatFlags.VerticalCenter | TextFormatFlags.HorizontalCenter, + Size = new Size(166, 21), + Location = new Point(127, 60) + }; + + TitlePriceLabel = new MirLabel + { + Text = "PRICE", + Parent = this, + Font = new Font(Settings.FontName, Settings.FontSize - 1, FontStyle.Italic), + DrawFormat = TextFormatFlags.VerticalCenter | TextFormatFlags.HorizontalCenter, + Size = new Size(88, 21), + Location = new Point(295, 60) + }; + + TitleExpiryLabel = new MirLabel + { + Text = "EXPIRY", + Parent = this, + Font = new Font(Settings.FontName, Settings.FontSize - 1, FontStyle.Italic), + DrawFormat = TextFormatFlags.VerticalCenter | TextFormatFlags.HorizontalCenter, + Size = new Size(98, 21), + Location = new Point(384, 60) + }; + + #endregion + } + + private void SetupFilters() + { + var all = new Filter { Index = 0, Title = "Show All Items", Type = ItemType.Nothing }; + var weapon = new Filter { Index = 1, Title = "Weapon Items", Type = ItemType.Weapon }; + var drapery = new Filter { Index = 2, Title = "Drapery Items", Type = null }; + var accessory = new Filter { Index = 3, Title = "Accessory Items", Type = null }; + var consumable = new Filter { Index = 4, Title = "Consumable Items", Type = null }; + var enhancement = new Filter { Index = 5, Title = "Enhancement", Type = null }; + var book = new Filter { Index = 6, Title = "Books", Type = null }; + var crafting = new Filter { Index = 7, Title = "Craft Items", Type = null }; + + Filters.Add(all); + Filters.Add(weapon); + Filters.Add(drapery); + Filters.Add(accessory); + Filters.Add(consumable); + Filters.Add(enhancement); + Filters.Add(book); + Filters.Add(crafting); + + drapery.SubFilters.Add(new Filter { Index = 201, Title = "Armour", Type = ItemType.Armour }); + drapery.SubFilters.Add(new Filter { Index = 202, Title = "Helmet", Type = ItemType.Helmet }); + + accessory.SubFilters.Add(new Filter { Index = 301, Title = "Necklaces", Type = ItemType.Necklace }); + accessory.SubFilters.Add(new Filter { Index = 302, Title = "Bracelets", Type = ItemType.Bracelet }); + accessory.SubFilters.Add(new Filter { Index = 303, Title = "Rings", Type = ItemType.Ring }); + + consumable.SubFilters.Add(new Filter { Index = 401, Title = "Recovery Pots", Type = ItemType.Potion, MaxShape = 2 }); + consumable.SubFilters.Add(new Filter { Index = 402, Title = "Buff Pots", Type = ItemType.Potion, MinShape = 3, MaxShape = 4 }); + consumable.SubFilters.Add(new Filter { Index = 403, Title = "Scrolls / Oils", Type = ItemType.Scroll }); + consumable.SubFilters.Add(new Filter { Index = 404, Title = "Misc Items", Type = ItemType.Script }); + + enhancement.SubFilters.Add(new Filter { Index = 501, Title = "Gems", Type = ItemType.Potion, MinShape = 3, MaxShape = 3 }); + enhancement.SubFilters.Add(new Filter { Index = 502, Title = "Orbs", Type = ItemType.Potion, MinShape = 4, MaxShape = 4 }); + + book.SubFilters.Add(new Filter { Index = 601, Title = "Warrior", Type = ItemType.Book, MaxShape = 30 }); + book.SubFilters.Add(new Filter { Index = 602, Title = "Wizard", Type = ItemType.Book, MinShape = 31, MaxShape = 60 }); + book.SubFilters.Add(new Filter { Index = 603, Title = "Taoist", Type = ItemType.Book, MinShape = 61, MaxShape = 90 }); + + crafting.SubFilters.Add(new Filter { Index = 701, Title = "Materials", Type = ItemType.Material }); + crafting.SubFilters.Add(new Filter { Index = 703, Title = "Meat", Type = ItemType.Meat }); + crafting.SubFilters.Add(new Filter { Index = 704, Title = "Ore", Type = ItemType.Ore }); + } + + private void DrawFilters(int index, int subIndex) + { + SelectedIndex = index; + SelectedSubIndex = subIndex; + + int btnx = 7; + int btny = 60; + + int current = 0; + int skipped = Skip; + + //Dispose all buttons and labels + foreach (var item in FilterButtons) + item.Dispose(); + + foreach (var item in FilterLabels) + item.Dispose(); + + FilterButtons.Clear(); + FilterLabels.Clear(); + + PossibleTotal = Filters.Count; + + foreach (var item in Filters) + { + if (skipped > 0) + { + skipped--; + continue; + } + + if (current >= MaxLines) + { + break; + } + + current++; + + var btn = new MirButton + { + Index = 920, + PressedIndex = 921, + HoverIndex = 921, + Library = Libraries.Prguse2, + Sound = SoundList.ButtonA, + Location = new Point(btnx, btny), + Parent = this, + }; + btn.Click += (o, e) => + { + if (item.SubFilters.Any()) + { + DrawFilters(item.Index, -1); + } + else + { + DrawFilters(item.Index, -1); + + if (item.Type.HasValue) + { + Network.Enqueue(new C.MarketSearch { Match = SearchTextBox.Text, Type = item.Type.Value, Usermode = false, MinShape = item.MinShape, MaxShape = item.MaxShape, MarketType = MarketType }); + } + } + }; + + var lbl = new MirLabel + { + Size = new Size(99, 18), + Location = new Point(2, 1), + Parent = btn, + Text = item.Title, + NotControl = true, + }; + + btny += 20; + + FilterButtons.Add(btn); + FilterLabels.Add(lbl); + + + if (item.Index == index) + { + PossibleTotal += item.SubFilters.Count; + + btn.Index = 921; + + //btny += 2; + + if (item.SubFilters.Any()) + { + btny += 2; + } + + foreach (var subItem in item.SubFilters) + { + if (skipped > 0) + { + skipped--; + continue; + } + + if (current >= MaxLines) + { + break; + } + + current++; + + var subBtn = new MirButton + { + Index = 922, + PressedIndex = 923, + HoverIndex = 923, + Library = Libraries.Prguse2, + Sound = SoundList.ButtonA, + Location = new Point(btnx, btny), + Parent = this, + }; + subBtn.Click += (o, e) => + { + DrawFilters(item.Index, subItem.Index); + + if (subItem.Type.HasValue) + { + Network.Enqueue(new C.MarketSearch { Match = SearchTextBox.Text, Type = subItem.Type.Value, Usermode = false, MinShape = subItem.MinShape, MaxShape = subItem.MaxShape, MarketType = MarketType }); + } + }; + + + var sublbl = new MirLabel + { + Size = new Size(99, 18), + Location = new Point(10, 1), + Parent = subBtn, + Text = subItem.Title, + NotControl = true, + }; + + if (subItem.Index == subIndex) + { + subBtn.Index = 923; + } + + FilterButtons.Add(subBtn); + FilterLabels.Add(sublbl); + + btny += 21; + } + } + + } + + UpdatePositionBar(); + } + + private void PositionBar_OnMoving(object sender, MouseEventArgs e) + { + int x = PosX; + int y = PositionBar.Location.Y; + + if (y >= PosMaxY) y = PosMaxY; + if (y <= PosMinY) y = PosMinY; + + int location = y - PosMinY; + int interval = (PosMaxY - PosMinY) / (PossibleTotal - MaxLines); + + double yPoint = (double)location / interval; + + Skip = Convert.ToInt16(Math.Floor(yPoint)); + + PositionBar.Location = new Point(x, y); + + DrawFilters(SelectedIndex, SelectedSubIndex); + } + + private void UpdatePositionBar() + { + if (PossibleTotal <= MaxLines) + { + PositionBar.Visible = false; + return; + } + + PositionBar.Visible = true; + + int interval = (PosMaxY - PosMinY) / (PossibleTotal - MaxLines); + + int x = PosX; + int y = PosMinY + (Skip * interval); + + if (y >= PosMaxY) y = PosMaxY; + if (y <= PosMinY) y = PosMinY; + + + PositionBar.Location = new Point(x, y); + } + + public void UpdateInterface() + { + PageLabel.Text = string.Format("{0}/{1}", Page + 1, PageCount); + TotalGold.Text = MarketType == MarketPanelType.GameShop ? GameScene.Credit.ToString("###,###,##0") : GameScene.Gold.ToString("###,###,##0"); + + for (int i = 0; i < 10; i++) + { + if (i + Page * 10 >= Listings.Count) + { + Rows[i].Clear(); + if (Rows[i] == Selected) Selected = null; + } + else + { + if (Rows[i] == Selected && Selected.Listing != Listings[i + Page * 10]) + { + Selected.Border = false; + Selected = null; + } + + Rows[i].Update(Listings[i + Page * 10]); + } + } + + for (int i = 0; i < Rows.Length; i++) + { + Rows[i].Border = Rows[i] == Selected; + } + + if (Selected != null) + { + BuyButton.Enabled = true; + BuyButton.GrayScale = false; + MailButton.Enabled = true; + MailButton.GrayScale = false; + } + else + { + BuyButton.Enabled = false; + BuyButton.GrayScale = true; + MailButton.Enabled = false; + MailButton.GrayScale = true; + } + + if (Selected != null && Selected.Listing.Seller == "Bid Met") + { + SellNowButton.Enabled = true; + SellNowButton.GrayScale = false; + } + else + { + SellNowButton.Enabled = false; + SellNowButton.GrayScale = true; + } + } + + private void SearchTextBox_KeyPress(object sender, KeyPressEventArgs e) + { + if (CMain.Time < SearchTime) + { + GameScene.Scene.ChatDialog.ReceiveChat(string.Format("You can search again after {0} seconds.", Math.Ceiling((SearchTime - CMain.Time) / 1000D)), ChatType.System); + return; + } + + switch (e.KeyChar) + { + case (char)Keys.Enter: + e.Handled = true; + if (string.IsNullOrEmpty(SearchTextBox.Text)) return; + SearchTime = CMain.Time + Globals.SearchDelay; + Network.Enqueue(new C.MarketSearch + { + Match = SearchTextBox.Text, + MarketType = MarketType + }); + Program.Form.ActiveControl = null; + break; + case (char)Keys.Escape: + e.Handled = true; + break; + } + } + private void SearchTextBox_KeyUp(object sender, KeyEventArgs e) + { + CMain.Shift = e.Shift; + CMain.Alt = e.Alt; + CMain.Ctrl = e.Control; + + switch (e.KeyCode) + { + case Keys.F1: + case Keys.F2: + case Keys.F3: + case Keys.F4: + case Keys.F5: + case Keys.F6: + case Keys.F7: + case Keys.F8: + case Keys.F9: + case Keys.F10: + case Keys.F11: + case Keys.F12: + case Keys.Tab: + case Keys.Escape: + CMain.CMain_KeyUp(sender, e); + break; + + } + } + private void SearchTextBox_KeyDown(object sender, KeyEventArgs e) + { + CMain.Shift = e.Shift; + CMain.Alt = e.Alt; + CMain.Ctrl = e.Control; + + switch (e.KeyCode) + { + case Keys.F1: + case Keys.F2: + case Keys.F3: + case Keys.F4: + case Keys.F5: + case Keys.F6: + case Keys.F7: + case Keys.F8: + case Keys.F9: + case Keys.F10: + case Keys.F11: + case Keys.F12: + case Keys.Tab: + case Keys.Escape: + CMain.CMain_KeyDown(sender, e); + break; + + } + } + + public void TMerchantDialog(MarketPanelType type) + { + MarketButton.Index = 789; + ConsignmentButton.Index = 791; + AuctionButton.Index = 817; + GameShopButton.Index = 819; + + switch (type) + { + case MarketPanelType.Market: + Index = 786; + MarketButton.Index = 788; + BuyButton.Index = 703; + BuyButton.HoverIndex = 704; + BuyButton.PressedIndex = 705; + SellNowButton.Visible = false; + UpButton.Visible = true; + DownButton.Visible = true; + PositionBar.Visible = true; + DrawFilters(0, -1); + + TitleSalePriceLabel.Visible = false; + TitleSellLabel.Visible = false; + TitleItemLabel.Visible = true; + TitlePriceLabel.Visible = true; + TitleExpiryLabel.Visible = true; + TitleSalePriceLabel.Text = "SALE PRICE"; + TitleSellLabel.Text = "SELL ITEM"; + TitleItemLabel.Text = "ITEM"; + TitlePriceLabel.Text = "PRICE / BID"; + TitleExpiryLabel.Text = "SELLER / EXPIRY"; + + //TotalGold.Visible = true; + PriceTextBox.Visible = false; + ItemCell.Visible = false; + MailButton.Visible = true; + FindButton.Visible = true; + SellItemButton.Visible = false; + SearchTextBox.Visible = true; + RefreshButton.Visible = true; + HelpLabel.Visible = false; + MarketType = MarketPanelType.Market; + Network.Enqueue(new C.MarketSearch + { + Match = "", + Type = ItemType.Nothing, + Usermode = false, + MarketType = MarketType + }); + break; + case MarketPanelType.Consign: + Index = 787; + ConsignmentButton.Index = 790; + + MailButton.Visible = false; + BuyButton.Index = 706; + BuyButton.HoverIndex = 707; + BuyButton.PressedIndex = 708; + SellNowButton.Visible = false; + UpButton.Visible = false; + DownButton.Visible = false; + PositionBar.Visible = false; + //TotalGold.Visible = false; + PriceTextBox.Visible = true; + PriceTextBox.Text = null; + ItemCell.Visible = true; + SellItemButton.Visible = true; + SellItemButton.Enabled = false; + FindButton.Visible = false; + SearchTextBox.Visible = false; + RefreshButton.Visible = false; + HelpLabel.Visible = true; + HelpLabel.Text = consignmentText; + + TitleSalePriceLabel.Visible = true; + TitleSellLabel.Visible = true; + TitleItemLabel.Visible = true; + TitlePriceLabel.Visible = true; + TitleExpiryLabel.Visible = true; + TitleSalePriceLabel.Text = "SALE PRICE"; + TitleSellLabel.Text = "SELL ITEM"; + TitleItemLabel.Text = "ITEM"; + TitlePriceLabel.Text = "PRICE"; + TitleExpiryLabel.Text = "EXPIRY"; + + foreach (var item in FilterButtons) + { + item.Visible = false; + } + + MarketType = MarketPanelType.Consign; + Network.Enqueue(new C.MarketSearch + { + Match = "", + Type = ItemType.Nothing, + Usermode = true, + MarketType = MarketType + }); + break; + case MarketPanelType.Auction: + Index = 787; + AuctionButton.Index = 816; + + MailButton.Visible = false; + BuyButton.Index = 706; + BuyButton.HoverIndex = 707; + BuyButton.PressedIndex = 708; + SellNowButton.Visible = true; + UpButton.Visible = false; + DownButton.Visible = false; + PositionBar.Visible = false; + //TotalGold.Visible = false; + PriceTextBox.Visible = true; + PriceTextBox.Text = null; + ItemCell.Visible = true; + SellItemButton.Visible = true; + SellItemButton.Enabled = false; + FindButton.Visible = false; + SearchTextBox.Visible = false; + RefreshButton.Visible = false; + HelpLabel.Visible = true; + HelpLabel.Text = auctionText; + + TitleSalePriceLabel.Visible = true; + TitleSellLabel.Visible = true; + TitleItemLabel.Visible = true; + TitlePriceLabel.Visible = true; + TitleExpiryLabel.Visible = true; + TitleSalePriceLabel.Text = "STARTING BID"; + TitleSellLabel.Text = "SELL ITEM"; + TitleItemLabel.Text = "ITEM"; + TitlePriceLabel.Text = "HIGHEST BID"; + TitleExpiryLabel.Text = "END DATE"; + + foreach (var item in FilterButtons) + { + item.Visible = false; + } + + MarketType = MarketPanelType.Auction; + Network.Enqueue(new C.MarketSearch + { + Match = "", + Type = ItemType.Nothing, + Usermode = true, + MarketType = MarketType + }); + break; + case MarketPanelType.GameShop: + Index = 786; + GameShopButton.Index = 818; + + BuyButton.Index = 703; + BuyButton.HoverIndex = 704; + BuyButton.PressedIndex = 705; + SellNowButton.Visible = false; + UpButton.Visible = true; + DownButton.Visible = true; + PositionBar.Visible = true; + DrawFilters(0, -1); + //TotalGold.Visible = true; + PriceTextBox.Visible = false; + ItemCell.Visible = false; + MailButton.Visible = false; + FindButton.Visible = true; + SellItemButton.Visible = false; + SearchTextBox.Visible = true; + RefreshButton.Visible = false; + HelpLabel.Visible = false; + + TitleSalePriceLabel.Visible = false; + TitleSellLabel.Visible = false; + TitleItemLabel.Visible = true; + TitlePriceLabel.Visible = true; + TitleExpiryLabel.Visible = true; + TitleSalePriceLabel.Text = "SALE PRICE"; + TitleSellLabel.Text = "SELL ITEM"; + TitleItemLabel.Text = "ITEM"; + TitlePriceLabel.Text = "PRICE"; + TitleExpiryLabel.Text = ""; + + MarketType = MarketPanelType.GameShop; + Network.Enqueue(new C.MarketSearch + { + Match = "", + Type = ItemType.Nothing, + Usermode = false, + MarketType = MarketType + }); + break; + } + + UpdateInterface(); + } + + private void TextBox_TextChanged(object sender, EventArgs e) + { + if (MarketType == MarketPanelType.Consign) + { + if (uint.TryParse(PriceTextBox.Text, out Amount) && Amount >= MinConsignAmount) + { + PriceTextBox.BorderColour = Color.Lime; + + if (Amount > MaxConsignAmount) + { + Amount = MaxConsignAmount; + PriceTextBox.Text = MaxConsignAmount.ToString(); + PriceTextBox.TextBox.SelectionStart = PriceTextBox.Text.Length; + SellItemButton.Enabled = true; + } + + if (Amount == MaxConsignAmount) + PriceTextBox.BorderColour = Color.Orange; + SellItemButton.Enabled = true; + } + else + { + PriceTextBox.BorderColour = Color.Red; + SellItemButton.Enabled = false; + } + } + else if (MarketType == MarketPanelType.Auction) + { + if (uint.TryParse(PriceTextBox.Text, out Amount) && Amount >= MinBidAmount) + { + PriceTextBox.BorderColour = Color.Lime; + + if (Amount > MaxBidAmount) + { + Amount = MaxBidAmount; + PriceTextBox.Text = MaxBidAmount.ToString(); + PriceTextBox.TextBox.SelectionStart = PriceTextBox.Text.Length; + SellItemButton.Enabled = true; + } + + if (Amount == MaxBidAmount) + PriceTextBox.BorderColour = Color.Orange; + SellItemButton.Enabled = true; + } + else + { + PriceTextBox.BorderColour = Color.Red; + SellItemButton.Enabled = false; + } + } + } + + private void MirInputBox_KeyPress(object sender, KeyPressEventArgs e) + { + if (!char.IsControl(e.KeyChar) + && !char.IsDigit(e.KeyChar)) + { + e.Handled = true; + } + } + + private void ItemCell_Click() + { + if (tempCell != null) + { + tempCell.Locked = false; + SellItemSlot = null; + tempCell = null; + } + + if (GameScene.SelectedCell == null || GameScene.SelectedCell.GridType != MirGridType.Inventory || + GameScene.SelectedCell.Item != null && GameScene.SelectedCell.Item.Info.Durability < 0) + return; + + SellItemSlot = GameScene.SelectedCell.Item; + tempCell = GameScene.SelectedCell; + tempCell.Locked = true; + GameScene.SelectedCell = null; + PriceTextBox.SetFocus(); + } + + public override void Hide() + { + if (!Visible) return; + Visible = false; + + Listings.Clear(); + + if (tempCell != null) + { + tempCell.Locked = false; + SellItemSlot = null; + tempCell = null; + } + } + public void Show(bool gameshop = false) + { + if (Visible) return; + Visible = true; + + if (gameshop) + { + MarketButton.Visible = false; + ConsignmentButton.Visible = false; + AuctionButton.Visible = false; + GameShopButton.Visible = true; + TMerchantDialog(MarketPanelType.GameShop); + } + else + { + MarketButton.Visible = true; + ConsignmentButton.Visible = true; + AuctionButton.Visible = true; + GameShopButton.Visible = false; + TMerchantDialog(MarketPanelType.Market); + } + } + + #region AuctionRow + public sealed class AuctionRow : MirControl + { + public ClientAuction Listing = null; + + public MirLabel NameLabel, PriceLabel, SellerLabel, ExpireLabel; + public MirImageControl IconImage, SelectedImage; + public bool Selected = false; + + Size IconArea = new Size(34, 32); + + public AuctionRow() + { + Size = new Size(354, 32); + Sound = SoundList.ButtonA; + BorderColour = Color.FromArgb(255, 200, 100, 0); + BeforeDraw += AuctionRow_BeforeDraw; + + NameLabel = new MirLabel + { + AutoSize = true, + Size = new Size(140, 20), + Location = new Point(38, 8), + DrawFormat = TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter, + NotControl = true, + Parent = this, + }; + + PriceLabel = new MirLabel + { + AutoSize = true, + Size = new Size(178, 20), + Location = new Point(170, 8), + DrawFormat = TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter, + NotControl = true, + Parent = this, + }; + + SellerLabel = new MirLabel + { + AutoSize = true, + Size = new Size(148, 20), + Location = new Point(256, 0), + DrawFormat = TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter, + NotControl = true, + Parent = this, + }; + + IconImage = new MirImageControl + { + Index = 0, + Library = Libraries.Prguse, + Location = new Point(0, 0), + Parent = this, + }; + + + SelectedImage = new MirImageControl + { + Index = 545, + Library = Libraries.Prguse, + Location = new Point(-5, -3), + Parent = this, + Visible = false, + NotControl = true + }; + + ExpireLabel = new MirLabel + { + AutoSize = true, + Location = new Point(256, 14), + Size = new Size(110, 22), + DrawFormat = TextFormatFlags.Left | TextFormatFlags.VerticalCenter, + Parent = this, + NotControl = true, + }; + + UpdateInterface(); + } + + private void AuctionRow_BeforeDraw(object sender, EventArgs e) + { + UpdateInterface(); + } + public void UpdateInterface() + { + if (Listing == null) return; + + IconImage.Visible = true; + + if (Listing.Item.Count > 0) + { + IconImage.Index = Listing.Item.Info.Image; + IconImage.Library = Libraries.Items; + } + else + { + IconImage.Index = 540; + IconImage.Library = Libraries.Prguse; + } + + IconImage.Location = new Point((IconArea.Width - IconImage.Size.Width) / 2, (IconArea.Height - IconImage.Size.Height) / 2); + + SellerLabel.Visible = Listing.ItemType == MarketItemType.Consign || Listing.ItemType == MarketItemType.Auction; + ExpireLabel.Visible = Listing != null && (Listing.ItemType == MarketItemType.Consign || Listing.ItemType == MarketItemType.Auction); + + if (Listing == null) return; + + ExpireLabel.Text = string.Format("{0:dd/MM/yy HH:mm:ss}", Listing.ConsignmentDate.AddDays(Globals.ConsignmentLength)); + } + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + + SelectedImage = null; + IconImage = null; + + Selected = false; + } + public void Clear() + { + Visible = false; + NameLabel.Text = string.Empty; + PriceLabel.Text = string.Empty; + SellerLabel.Text = string.Empty; + } + public void Update(ClientAuction listing) + { + Listing = listing; + NameLabel.Text = Listing.Item.FriendlyName; + PriceLabel.Text = String.Format("{0:###,###,##0} {1}", Listing.Price, listing.ItemType == MarketItemType.Auction ? "Bid" : ""); + + NameLabel.ForeColour = GameScene.Scene.GradeNameColor(Listing.Item.Info.Grade); + if (NameLabel.ForeColour == Color.Yellow) + NameLabel.ForeColour = Color.White; + + if (Listing.Price > 10000000) //10Mil + PriceLabel.ForeColour = Color.Red; + else if (listing.Price > 1000000) //1Million + PriceLabel.ForeColour = Color.Orange; + else if (listing.Price > 100000) //1Million + PriceLabel.ForeColour = Color.LawnGreen; + else if (listing.Price > 10000) //1Million + PriceLabel.ForeColour = Color.DeepSkyBlue; + else + PriceLabel.ForeColour = Color.White; + + + SellerLabel.Text = Listing.Seller; + SellerLabel.ForeColour = Color.White; + + if (UserMode) + { + switch (Listing.Seller) + { + case "Sold": + SellerLabel.ForeColour = Color.Gold; + break; + case "Expired": + SellerLabel.ForeColour = Color.Red; + break; + case "Bid Met": + SellerLabel.ForeColour = Color.LawnGreen; + break; + default: + SellerLabel.ForeColour = Color.White; + break; + } + } + Visible = true; + } + protected override void OnMouseEnter() + { + if (Listing == null) return; + + base.OnMouseEnter(); + GameScene.Scene.CreateItemLabel(Listing.Item); + } + protected override void OnMouseLeave() + { + if (Listing == null) return; + + base.OnMouseLeave(); + GameScene.Scene.DisposeItemLabel(); + GameScene.HoverItem = null; + } + } + #endregion + + public class Filter + { + public int Index { get; set; } = -1; + public string Title { get; set; } = ""; + public ItemType? Type { get; set; } = ItemType.Nothing; + public short MinShape { get; set; } = 0; + public short MaxShape { get; set; } = short.MaxValue; + + public List SubFilters = new List(); + } + } +} diff --git a/Client/MirScenes/GameScene.cs b/Client/MirScenes/GameScene.cs new file mode 100644 index 0000000..2994e64 --- /dev/null +++ b/Client/MirScenes/GameScene.cs @@ -0,0 +1,8560 @@ +using Client.MirControls; +using Client.MirGraphics; +using Client.MirNetwork; +using Client.MirObjects; +using Client.MirSounds; +using SlimDX; +using SlimDX.Direct3D9; +using Font = System.Drawing.Font; +using S = ServerPackets; +using C = ClientPackets; +using Effect = Client.MirObjects.Effect; +using Client.MirScenes.Dialogs; +using Client.Utils; +using System; +using System.Drawing.Imaging; + +namespace Client.MirScenes +{ + public sealed class GameScene : MirScene + { + public static GameScene Scene; + public static bool Observing; + public static bool AllowObserve; + + public static UserObject User + { + get { return MapObject.User; } + set { MapObject.User = value; } + } + + public static long MoveTime, AttackTime, LogTime; + public static bool CanMove; + + public MapControl MapControl; + public MainCharacterDialog MainCharacterDialog; + public MainDialog MainDialog; + public ChatDialog ChatDialog; + public InventoryDialog InventoryDialog; + public CharacterDialog CharacterDialog; + public StorageDialog StorageDialog; + public BeltDialog BeltDialog; + public OptionDialog OptionDialog; + public MenuDialog MenuDialog; + public NPCDialog NPCDialog; + public NPCGoodsDialog NPCGoodsDialog; + public NPCGoodsDialog NPCSubGoodsDialog; + public NPCDropDialog NPCDropDialog; + public HelpDialog HelpDialog; + public RefineDialog RefineDialog; + + public GroupDialog GroupDialog; + public GuildDialog GuildDialog; + + public BigMapDialog BigMapDialog; + public TrustMerchantDialog TrustMerchantDialog; + public TradeDialog TradeDialog; + public GuestTradeDialog GuestTradeDialog; + + public List SkillBarDialogs = new List(); + public ChatOptionDialog ChatOptionDialog; + public ChatNoticeDialog ChatNoticeDialog; + + public QuestListDialog QuestListDialog; + public QuestDetailDialog QuestDetailDialog; + public QuestDiaryDialog QuestLogDialog; + public QuestTrackingDialog QuestTrackingDialog; + + public RankingDialog RankingDialog; + + public MailListDialog MailListDialog; + public MailComposeLetterDialog MailComposeLetterDialog; + public MailComposeParcelDialog MailComposeParcelDialog; + public MailReadLetterDialog MailReadLetterDialog; + public MailReadParcelDialog MailReadParcelDialog; + + public FriendDialog FriendDialog; + public MemoDialog MemoDialog; + public RelationshipDialog RelationshipDialog; + public GameShopDialog GameShopDialog; + + public ReportDialog ReportDialog; + + public BuffDialog BuffsDialog; + + public KeyboardLayoutDialog KeyboardLayoutDialog; + public NoticeDialog NoticeDialog; + + public TimerDialog TimerControl; + public CompassDialog CompassControl; + public RollDialog RollControl; + + + public static List ItemInfoList = new List(); + public static List UserIdList = new List(); + public static List ChatItemList = new List(); + public static List QuestInfoList = new List(); + public static List GameShopInfoList = new List(); + public static Dictionary RankingList = new Dictionary(); + + public static UserItem[] Storage = new UserItem[80]; + public static UserItem[] GuildStorage = new UserItem[112]; + public static UserItem[] Refine = new UserItem[16]; + public static UserItem HoverItem, SelectedItem; + public static MirItemCell SelectedCell; + + public static bool PickedUpGold; + public MirControl ItemLabel, MailLabel, MemoLabel, GuildBuffLabel; + public static long UseItemTime, PickUpTime, DropViewTime, TargetDeadTime; + public static uint Gold, Credit; + public bool ShowReviveMessage; + + + public bool NewMail; + public int NewMailCounter = 0; + + + public AttackMode AMode; + public PetMode PMode; + public LightSetting Lights; + + public static long NPCTime; + public static uint NPCID; + public static float NPCRate; + public static uint DefaultNPCID; + public static bool HideAddedStoreStats; + + public long ToggleTime; + public static long SpellTime; + + public MirLabel[] OutputLines = new MirLabel[10]; + public List OutputMessages = new List(); + + public long OutputDelay; + + public GameScene() + { + Scene = this; + BackColour = Color.Transparent; + MoveTime = CMain.Time; + + KeyDown += GameScene_KeyDown; + + MainCharacterDialog = new MainCharacterDialog { Parent = this }; + MainDialog = new MainDialog { Parent = this }; + ChatDialog = new ChatDialog { Parent = MainCharacterDialog }; + InventoryDialog = new InventoryDialog { Parent = this }; + BeltDialog = new BeltDialog { Parent = this }; + StorageDialog = new StorageDialog { Parent = this, Visible = false }; + OptionDialog = new OptionDialog { Parent = this, Visible = false }; + MenuDialog = new MenuDialog { Parent = this, Visible = false }; + NPCDialog = new NPCDialog { Parent = this, Visible = false }; + NPCGoodsDialog = new NPCGoodsDialog(PanelType.Buy) { Parent = this, Visible = false }; + NPCSubGoodsDialog = new NPCGoodsDialog(PanelType.BuySub) { Parent = this, Visible = false }; + NPCDropDialog = new NPCDropDialog { Parent = this, Visible = false }; + + HelpDialog = new HelpDialog { Parent = this, Visible = false }; + KeyboardLayoutDialog = new KeyboardLayoutDialog { Parent = this, Visible = false }; + NoticeDialog = new NoticeDialog { Parent = this, Visible = false }; + + GroupDialog = new GroupDialog { Parent = this, Visible = false }; + GuildDialog = new GuildDialog { Parent = this, Visible = false }; + + BigMapDialog = new BigMapDialog { Parent = this, Visible = false }; + TrustMerchantDialog = new TrustMerchantDialog { Parent = this, Visible = false }; + TradeDialog = new TradeDialog { Parent = this, Visible = false }; + GuestTradeDialog = new GuestTradeDialog { Parent = this, Visible = false }; + + SkillBarDialog Bar1 = new SkillBarDialog { Parent = this, Visible = false, BarIndex = 0 }; + SkillBarDialogs.Add(Bar1); + SkillBarDialog Bar2 = new SkillBarDialog { Parent = this, Visible = false, BarIndex = 1 }; + SkillBarDialogs.Add(Bar2); + ChatOptionDialog = new ChatOptionDialog { Parent = this, Visible = false }; + ChatNoticeDialog = new ChatNoticeDialog { Parent = this, Visible = false }; + + QuestListDialog = new QuestListDialog { Parent = this, Visible = false }; + QuestDetailDialog = new QuestDetailDialog { Parent = this, Visible = false }; + QuestTrackingDialog = new QuestTrackingDialog { Parent = this, Visible = false }; + QuestLogDialog = new QuestDiaryDialog { Parent = this, Visible = false }; + + RankingDialog = new RankingDialog { Parent = this, Visible = false }; + + MailListDialog = new MailListDialog { Parent = this, Visible = false }; + MailComposeLetterDialog = new MailComposeLetterDialog { Parent = this, Visible = false }; + MailComposeParcelDialog = new MailComposeParcelDialog { Parent = this, Visible = false }; + MailReadLetterDialog = new MailReadLetterDialog { Parent = this, Visible = false }; + MailReadParcelDialog = new MailReadParcelDialog { Parent = this, Visible = false }; + + RefineDialog = new RefineDialog { Parent = this, Visible = false }; + RelationshipDialog = new RelationshipDialog { Parent = this, Visible = false }; + FriendDialog = new FriendDialog { Parent = this, Visible = false }; + MemoDialog = new MemoDialog { Parent = this, Visible = false }; + GameShopDialog = new GameShopDialog { Parent = this, Visible = false }; + ReportDialog = new ReportDialog { Parent = this, Visible = false }; + + BuffsDialog = new BuffDialog { + Parent = this, + Visible = true, + GetExpandedParameter = () => { return Settings.ExpandedBuffWindow; }, + SetExpandedParameter = (value) => { Settings.ExpandedBuffWindow = value; } + }; + + KeyboardLayoutDialog = new KeyboardLayoutDialog { Parent = this, Visible = false }; + + TimerControl = new TimerDialog { Parent = this, Visible = false }; + CompassControl = new CompassDialog { Parent = this, Visible = false }; + RollControl = new RollDialog { Parent = this, Visible = false }; + + for (int i = 0; i < OutputLines.Length; i++) + OutputLines[i] = new MirLabel + { + AutoSize = true, + BackColour = Color.Transparent, + Font = new Font(Settings.FontName, 10F), + ForeColour = Color.LimeGreen, + Location = new Point(20, 25 + i * 13), + OutLine = true, + }; + } + + private void UpdateMouseCursor() + { + if (!Settings.UseMouseCursors) return; + + if (GameScene.HoverItem != null) + { + if (GameScene.SelectedCell != null && GameScene.SelectedCell.Item != null && GameScene.SelectedCell.Item.Info.Type == ItemType.Gem && CMain.Ctrl) + { + CMain.SetMouseCursor(MouseCursor.Upgrade); + } + else + { + CMain.SetMouseCursor(MouseCursor.Default); + } + } + else if (MapObject.MouseObject != null) + { + switch (MapObject.MouseObject.Race) + { + case ObjectType.Monster: + CMain.SetMouseCursor(MouseCursor.Attack); + break; + case ObjectType.Merchant: + CMain.SetMouseCursor(MouseCursor.NPCTalk); + break; + case ObjectType.Player: + if (CMain.Shift) + { + CMain.SetMouseCursor(MouseCursor.AttackRed); + } + else + { + CMain.SetMouseCursor(MouseCursor.Default); + } + break; + default: + CMain.SetMouseCursor(MouseCursor.Default); + break; + } + } + else + { + CMain.SetMouseCursor(MouseCursor.Default); + } + + } + + public void OutputMessage(string message, OutputMessageType type = OutputMessageType.Normal) + { + OutputMessages.Add(new OutPutMessage { Message = message, ExpireTime = CMain.Time + 5000, Type = type }); + if (OutputMessages.Count > 10) + OutputMessages.RemoveAt(0); + } + + private void ProcessOuput() + { + for (int i = 0; i < OutputMessages.Count; i++) + { + if (CMain.Time >= OutputMessages[i].ExpireTime) + OutputMessages.RemoveAt(i); + } + + for (int i = 0; i < OutputLines.Length; i++) + { + if (OutputMessages.Count > i) + { + Color color; + switch (OutputMessages[i].Type) + { + case OutputMessageType.Quest: + color = Color.Gold; + break; + case OutputMessageType.Guild: + color = Color.DeepPink; + break; + default: + color = Color.LimeGreen; + break; + } + + OutputLines[i].Text = OutputMessages[i].Message; + OutputLines[i].ForeColour = color; + OutputLines[i].Visible = true; + } + else + { + OutputLines[i].Text = string.Empty; + OutputLines[i].Visible = false; + } + } + } + private void GameScene_KeyDown(object sender, KeyEventArgs e) + { + if (GameScene.Scene.KeyboardLayoutDialog.WaitingForBind != null) + { + GameScene.Scene.KeyboardLayoutDialog.CheckNewInput(e); + return; + } + + foreach (KeyBind KeyCheck in CMain.InputKeys.Keylist) + { + if (KeyCheck.Key == Keys.None) + continue; + if (KeyCheck.Key != e.KeyCode) + continue; + if ((KeyCheck.RequireAlt != 2) && (KeyCheck.RequireAlt != (CMain.Alt ? 1 : 0))) + continue; + if ((KeyCheck.RequireShift != 2) && (KeyCheck.RequireShift != (CMain.Shift ? 1 : 0))) + continue; + if ((KeyCheck.RequireCtrl != 2) && (KeyCheck.RequireCtrl != (CMain.Ctrl ? 1 : 0))) + continue; + if ((KeyCheck.RequireTilde != 2) && (KeyCheck.RequireTilde != (CMain.Tilde ? 1 : 0))) + continue; + //now run the real code + switch (KeyCheck.function) + { + case KeybindOptions.Bar1Skill1: UseSpell(1); break; + case KeybindOptions.Bar1Skill2: UseSpell(2); break; + case KeybindOptions.Bar1Skill3: UseSpell(3); break; + case KeybindOptions.Bar1Skill4: UseSpell(4); break; + case KeybindOptions.Bar1Skill5: UseSpell(5); break; + case KeybindOptions.Bar1Skill6: UseSpell(6); break; + case KeybindOptions.Bar1Skill7: UseSpell(7); break; + case KeybindOptions.Bar1Skill8: UseSpell(8); break; + case KeybindOptions.Bar2Skill1: UseSpell(9); break; + case KeybindOptions.Bar2Skill2: UseSpell(10); break; + case KeybindOptions.Bar2Skill3: UseSpell(11); break; + case KeybindOptions.Bar2Skill4: UseSpell(12); break; + case KeybindOptions.Bar2Skill5: UseSpell(13); break; + case KeybindOptions.Bar2Skill6: UseSpell(14); break; + case KeybindOptions.Bar2Skill7: UseSpell(15); break; + case KeybindOptions.Bar2Skill8: UseSpell(16); break; + case KeybindOptions.Inventory: + case KeybindOptions.Inventory2: + if (!InventoryDialog.Visible) InventoryDialog.Show(); + else InventoryDialog.Hide(); + break; + case KeybindOptions.Equipment: + case KeybindOptions.Equipment2: + if (!CharacterDialog.Visible) + CharacterDialog.Show(); + else + CharacterDialog.Hide(); + break; + case KeybindOptions.Skills: + case KeybindOptions.Skills2: + break; + case KeybindOptions.GameShop: + //if (!GameShopDialog.Visible) GameShopDialog.Show(); + //else GameShopDialog.Hide(); + break; + case KeybindOptions.Skillbar: + if (!Settings.SkillBar) + foreach (SkillBarDialog Bar in SkillBarDialogs) + Bar.Show(); + else + foreach (SkillBarDialog Bar in SkillBarDialogs) + Bar.Hide(); + break; + case KeybindOptions.Relationship: + if (!RelationshipDialog.Visible) RelationshipDialog.Show(); + else RelationshipDialog.Hide(); + break; + case KeybindOptions.Friends: + //if (!FriendDialog.Visible) FriendDialog.Show(); + //else FriendDialog.Hide(); + break; + case KeybindOptions.Guilds: + //if (!GuildDialog.Visible) GuildDialog.Show(); + //else GuildDialog.Hide(); + break; + + case KeybindOptions.Ranking: + //if (!RankingDialog.Visible) RankingDialog.Show(); + //else RankingDialog.Hide(); + break; + case KeybindOptions.Quests: + if (!QuestLogDialog.Visible) QuestLogDialog.Show(); + else QuestLogDialog.Hide(); + break; + case KeybindOptions.Exit: + QuitGame(); + return; + case KeybindOptions.Logout: + LogOut(); + break; + case KeybindOptions.Closeall: + InventoryDialog.Hide(); + CharacterDialog.Hide(); + OptionDialog.Hide(); + MenuDialog.Hide(); + if (NPCDialog.Visible) NPCDialog.Hide(); + HelpDialog.Hide(); + KeyboardLayoutDialog.Hide(); + RankingDialog.Hide(); + FriendDialog.Hide(); + RelationshipDialog.Hide(); + GameShopDialog.Hide(); + GroupDialog.Hide(); + GuildDialog.Hide(); + StorageDialog.Hide(); + TrustMerchantDialog.Hide(); + QuestListDialog.Hide(); + QuestDetailDialog.Hide(); + QuestLogDialog.Hide(); + RefineDialog.Hide(); + BigMapDialog.Hide(); + MailComposeLetterDialog.Hide(); + MailComposeParcelDialog.Hide(); + MailListDialog.Hide(); + MailReadLetterDialog.Hide(); + MailReadParcelDialog.Hide(); + NoticeDialog.Hide(); + + GameScene.Scene.DisposeItemLabel(); + break; + case KeybindOptions.Options: + case KeybindOptions.Options2: + if (!OptionDialog.Visible) OptionDialog.Show(); + else OptionDialog.Hide(); + break; + case KeybindOptions.Group: + //if (!GroupDialog.Visible) GroupDialog.Show(); + //else GroupDialog.Hide(); + break; + case KeybindOptions.Belt: + if (!BeltDialog.Visible) BeltDialog.Show(); + else BeltDialog.Hide(); + break; + case KeybindOptions.Pickup: + if (CMain.Time > PickUpTime) + { + PickUpTime = CMain.Time + 200; + Network.Enqueue(new C.PickUp()); + } + break; + case KeybindOptions.Belt1: + case KeybindOptions.Belt1Alt: + BeltDialog.Grid[0].UseItem(); + break; + case KeybindOptions.Belt2: + case KeybindOptions.Belt2Alt: + BeltDialog.Grid[1].UseItem(); + break; + case KeybindOptions.Belt3: + case KeybindOptions.Belt3Alt: + BeltDialog.Grid[2].UseItem(); + break; + case KeybindOptions.Belt4: + case KeybindOptions.Belt4Alt: + BeltDialog.Grid[3].UseItem(); + break; + case KeybindOptions.Belt5: + case KeybindOptions.Belt5Alt: + BeltDialog.Grid[4].UseItem(); + break; + case KeybindOptions.Belt6: + case KeybindOptions.Belt6Alt: + BeltDialog.Grid[5].UseItem(); + break; + case KeybindOptions.Bigmap: + BigMapDialog.Toggle(); + break; + case KeybindOptions.Trade: + Network.Enqueue(new C.TradeRequest()); + break; + case KeybindOptions.ChangePetmode: + ChangePetMode(); + break; + case KeybindOptions.PetmodeBoth: + Network.Enqueue(new C.ChangePMode { Mode = PetMode.Both }); + return; + case KeybindOptions.PetmodeMoveonly: + Network.Enqueue(new C.ChangePMode { Mode = PetMode.MoveOnly }); + return; + case KeybindOptions.PetmodeAttackonly: + Network.Enqueue(new C.ChangePMode { Mode = PetMode.AttackOnly }); + return; + case KeybindOptions.PetmodeNone: + Network.Enqueue(new C.ChangePMode { Mode = PetMode.None }); + return; + case KeybindOptions.PetmodeFocusMasterTarget: + Network.Enqueue(new C.ChangePMode { Mode = PetMode.FocusMasterTarget }); + return; + case KeybindOptions.ChangeAttackmode: + ChangeAttackMode(); + break; + case KeybindOptions.AttackmodePeace: + Network.Enqueue(new C.ChangeAMode { Mode = AttackMode.Peace }); + return; + case KeybindOptions.AttackmodeGroup: + Network.Enqueue(new C.ChangeAMode { Mode = AttackMode.Group }); + return; + case KeybindOptions.AttackmodeGuild: + Network.Enqueue(new C.ChangeAMode { Mode = AttackMode.Guild }); + return; + case KeybindOptions.AttackmodeEnemyguild: + Network.Enqueue(new C.ChangeAMode { Mode = AttackMode.EnemyGuild }); + return; + case KeybindOptions.AttackmodeRedbrown: + Network.Enqueue(new C.ChangeAMode { Mode = AttackMode.RedBrown }); + return; + case KeybindOptions.AttackmodeAll: + Network.Enqueue(new C.ChangeAMode { Mode = AttackMode.All }); + return; + + case KeybindOptions.Help: + if (!HelpDialog.Visible) HelpDialog.Show(); + else HelpDialog.Hide(); + break; + case KeybindOptions.Keybind: + //if (!KeyboardLayoutDialog.Visible) KeyboardLayoutDialog.Show(); + //else KeyboardLayoutDialog.Hide(); + break; + case KeybindOptions.Cameramode: + + if (!MainDialog.Visible) + { + MainDialog.Show(); + ChatDialog.Show(); + BeltDialog.Show(); + //BuffsDialog.Show(); + } + else + { + MainDialog.Hide(); + ChatDialog.Hide(); + BeltDialog.Hide(); + //BuffsDialog.Hide(); + } + break; + case KeybindOptions.DropView: + if (CMain.Time > DropViewTime) + DropViewTime = CMain.Time + 5000; + break; + case KeybindOptions.TargetDead: + if (CMain.Time > TargetDeadTime) + TargetDeadTime = CMain.Time + 5000; + break; + case KeybindOptions.AddGroupMember: + if (MapObject.MouseObject == null) break; + if (MapObject.MouseObject.Race != ObjectType.Player) break; + + GameScene.Scene.GroupDialog.AddMember(MapObject.MouseObject.Name); + break; + } + } + } + + public void ChangeSkillMode(bool? ctrl) + { + if (Settings.SkillMode || ctrl == true) + { + Settings.SkillMode = false; + GameScene.Scene.ChatDialog.ReceiveChat("[SkillMode Ctrl]", ChatType.Hint); + GameScene.Scene.OptionDialog.ToggleSkillButtons(true); + } + else if (!Settings.SkillMode || ctrl == false) + { + Settings.SkillMode = true; + GameScene.Scene.ChatDialog.ReceiveChat("[SkillMode ~]", ChatType.Hint); + GameScene.Scene.OptionDialog.ToggleSkillButtons(false); + } + } + + public void ChangePetMode() + { + switch (PMode) + { + case PetMode.Both: + Network.Enqueue(new C.ChangePMode { Mode = PetMode.MoveOnly }); + return; + case PetMode.MoveOnly: + Network.Enqueue(new C.ChangePMode { Mode = PetMode.AttackOnly }); + return; + case PetMode.AttackOnly: + Network.Enqueue(new C.ChangePMode { Mode = PetMode.None }); + return; + case PetMode.None: + Network.Enqueue(new C.ChangePMode { Mode = PetMode.FocusMasterTarget }); + return; + case PetMode.FocusMasterTarget: + Network.Enqueue(new C.ChangePMode { Mode = PetMode.Both }); + return; + } + } + + public void ChangeAttackMode() + { + switch (AMode) + { + case AttackMode.Peace: + Network.Enqueue(new C.ChangeAMode { Mode = AttackMode.Group }); + return; + case AttackMode.Group: + Network.Enqueue(new C.ChangeAMode { Mode = AttackMode.Guild }); + return; + case AttackMode.Guild: + Network.Enqueue(new C.ChangeAMode { Mode = AttackMode.EnemyGuild }); + return; + case AttackMode.EnemyGuild: + Network.Enqueue(new C.ChangeAMode { Mode = AttackMode.RedBrown }); + return; + case AttackMode.RedBrown: + Network.Enqueue(new C.ChangeAMode { Mode = AttackMode.All }); + return; + case AttackMode.All: + Network.Enqueue(new C.ChangeAMode { Mode = AttackMode.Peace }); + return; + } + } + + public void UseSpell(int key) + { + UserObject actor = User; + + if (actor.Dead) return; + + ClientMagic magic = null; + + for (int i = 0; i < actor.Magics.Count; i++) + { + if (actor.Magics[i].Key != key) continue; + magic = actor.Magics[i]; + break; + } + + if (magic == null) return; + + int cost; + string prefix = string.Empty; + switch (magic.Spell) + { + case Spell.Fencing: + case Spell.SpiritSword: + case Spell.Slaying: + return; + case Spell.Thrusting: + if (CMain.Time < ToggleTime) return; + actor.Thrusting = !actor.Thrusting; + ChatDialog.ReceiveChat(prefix + (actor.Thrusting ? "Use Thrusting." : "Do not use Thrusting."), ChatType.Hint); + ToggleTime = CMain.Time + 1000; + SendSpellToggle(actor, magic.Spell, actor.Thrusting); + break; + case Spell.HalfMoon: + if (CMain.Time < ToggleTime) return; + actor.HalfMoon = !actor.HalfMoon; + ChatDialog.ReceiveChat(prefix + (actor.HalfMoon ? "Use Half Moon." : "Do not use Half Moon."), ChatType.Hint); + ToggleTime = CMain.Time + 1000; + SendSpellToggle(actor, magic.Spell, actor.HalfMoon); + break; + case Spell.FlamingSword: + if (CMain.Time < ToggleTime) return; + ToggleTime = CMain.Time + 500; + + cost = magic.Level * magic.LevelCost + magic.BaseCost; + if (cost > actor.MP) + { + Scene.OutputMessage(GameLanguage.LowMana); + return; + } + SendSpellToggle(actor, magic.Spell, true); + break; + default: + actor.NextMagic = magic; + actor.NextMagicLocation = MapControl.MapLocation; + actor.NextMagicObject = MapObject.MouseObject; + actor.NextMagicDirection = MapControl.MouseDirection(); + break; + } + } + private void SendSpellToggle(UserObject Actor, Spell Spell, bool CanUse) + { + if (Actor == User) + Network.Enqueue(new C.SpellToggle { Spell = Spell, CanUse = CanUse }); + else + Network.Enqueue(new C.SpellToggle { Spell = Spell }); + } + public void QuitGame() + { + if (CMain.Time >= LogTime) + { + //If Last Combat < 10 CANCEL + MirMessageBox messageBox = new MirMessageBox(GameLanguage.ExitTip, MirMessageBoxButtons.YesNo); + messageBox.YesButton.Click += (o, e) => Program.Form.Close(); + messageBox.Show(); + } + else + { + ChatDialog.ReceiveChat(string.Format(GameLanguage.CannotLeaveGame, (LogTime - CMain.Time) / 1000), ChatType.System); + } + } + + public void LogOut() + { + if (CMain.Time >= LogTime) + { + //If Last Combat < 10 CANCEL + MirMessageBox messageBox = new MirMessageBox(GameLanguage.LogOutTip, MirMessageBoxButtons.YesNo); + messageBox.YesButton.Click += (o, e) => + { + Network.Enqueue(new C.LogOut()); + Enabled = false; + }; + messageBox.Show(); + } + else + { + ChatDialog.ReceiveChat(string.Format(GameLanguage.CannotLeaveGame, (LogTime - CMain.Time) / 1000), ChatType.System); + } + } + + protected internal override void DrawControl() + { + if (MapControl != null && !MapControl.IsDisposed) + MapControl.DrawControl(); + base.DrawControl(); + + + if (PickedUpGold || (SelectedCell != null && SelectedCell.Item != null)) + { + MLibrary library = PickedUpGold ? Libraries.Prguse : Libraries.Items; + int image = PickedUpGold ? 38 : SelectedCell.Item.Image; + Size imgSize = Libraries.Items.GetTrueSize(image); + Point p = CMain.MPoint.Add(-imgSize.Width / 2, -imgSize.Height / 2); + + if (p.X + imgSize.Width >= Settings.ScreenWidth) + p.X = Settings.ScreenWidth - imgSize.Width; + + if (p.Y + imgSize.Height >= Settings.ScreenHeight) + p.Y = Settings.ScreenHeight - imgSize.Height; + + library.Draw(image, p.X, p.Y); + } + + for (int i = 0; i < OutputLines.Length; i++) + OutputLines[i].Draw(); + } + public override void Process() + { + if (MapControl == null || User == null) + return; + + if (CMain.Time >= MoveTime) + { + MoveTime += 100; //Move Speed + CanMove = true; + MapControl.AnimationCount++; + MapControl.TextureValid = false; + } + else + CanMove = false; + + if (CMain.Time >= CMain.NextPing) + { + CMain.NextPing = CMain.Time + 60000; + Network.Enqueue(new C.KeepAlive() { Time = CMain.Time }); + } + + TimerControl.Process(); + CompassControl.Process(); + RankingDialog.Process(); + + MirItemCell cell = MouseControl as MirItemCell; + + if (cell != null && HoverItem != cell.Item && HoverItem != cell.ShadowItem) + { + DisposeItemLabel(); + HoverItem = null; + CreateItemLabel(cell.Item); + } + + if (ItemLabel != null && !ItemLabel.IsDisposed) + { + ItemLabel.BringToFront(); + + int x = CMain.MPoint.X + 15, y = CMain.MPoint.Y; + if (x + ItemLabel.Size.Width > Settings.ScreenWidth) + x = Settings.ScreenWidth - ItemLabel.Size.Width; + + if (y + ItemLabel.Size.Height > Settings.ScreenHeight) + y = Settings.ScreenHeight - ItemLabel.Size.Height; + ItemLabel.Location = new Point(x, y); + } + + if (MailLabel != null && !MailLabel.IsDisposed) + { + MailLabel.BringToFront(); + + int x = CMain.MPoint.X + 15, y = CMain.MPoint.Y; + if (x + MailLabel.Size.Width > Settings.ScreenWidth) + x = Settings.ScreenWidth - MailLabel.Size.Width; + + if (y + MailLabel.Size.Height > Settings.ScreenHeight) + y = Settings.ScreenHeight - MailLabel.Size.Height; + MailLabel.Location = new Point(x, y); + } + + if (MemoLabel != null && !MemoLabel.IsDisposed) + { + MemoLabel.BringToFront(); + + int x = CMain.MPoint.X + 15, y = CMain.MPoint.Y; + if (x + MemoLabel.Size.Width > Settings.ScreenWidth) + x = Settings.ScreenWidth - MemoLabel.Size.Width; + + if (y + MemoLabel.Size.Height > Settings.ScreenHeight) + y = Settings.ScreenHeight - MemoLabel.Size.Height; + MemoLabel.Location = new Point(x, y); + } + + if (GuildBuffLabel != null && !GuildBuffLabel.IsDisposed) + { + GuildBuffLabel.BringToFront(); + + int x = CMain.MPoint.X + 15, y = CMain.MPoint.Y; + if (x + GuildBuffLabel.Size.Width > Settings.ScreenWidth) + x = Settings.ScreenWidth - GuildBuffLabel.Size.Width; + + if (y + GuildBuffLabel.Size.Height > Settings.ScreenHeight) + y = Settings.ScreenHeight - GuildBuffLabel.Size.Height; + GuildBuffLabel.Location = new Point(x, y); + } + + if (!User.Dead) ShowReviveMessage = false; + + if (ShowReviveMessage && CMain.Time > User.DeadTime && User.CurrentAction == MirAction.Dead) + { + ShowReviveMessage = false; + MirMessageBox messageBox = new MirMessageBox(GameLanguage.DiedTip, MirMessageBoxButtons.YesNo, false); + + messageBox.YesButton.Click += (o, e) => + { + if (User.Dead) Network.Enqueue(new C.TownRevive()); + }; + + messageBox.AfterDraw += (o, e) => + { + if (!User.Dead) messageBox.Dispose(); + }; + + messageBox.Show(); + } + + BuffsDialog.Process(); + + MapControl.Process(); + MainDialog.Process(); + MainCharacterDialog.Process(); + InventoryDialog.Process(); + GameShopDialog.Process(); + + foreach (SkillBarDialog Bar in Scene.SkillBarDialogs) + Bar.Process(); + + DialogProcess(); + + ProcessOuput(); + + UpdateMouseCursor(); + + SoundManager.ProcessDelayedSounds(); + } + + public void DialogProcess() + { + if(Settings.SkillBar) + { + foreach (SkillBarDialog Bar in Scene.SkillBarDialogs) + Bar.Show(); + } + else + { + foreach (SkillBarDialog Bar in Scene.SkillBarDialogs) + Bar.Hide(); + } + + for (int i = 0; i < Scene.SkillBarDialogs.Count; i++) + { + if (i * 2 > Settings.SkillbarLocation.Length) break; + if ((Settings.SkillbarLocation[i, 0] > Settings.Resolution - 100) || (Settings.SkillbarLocation[i, 1] > 700)) continue;//in theory you'd want the y coord to be validated based on resolution, but since client only allows for wider screens and not higher :( + Scene.SkillBarDialogs[i].Location = new Point(Settings.SkillbarLocation[i, 0], Settings.SkillbarLocation[i, 1]); + } + } + + public override void ProcessPacket(Packet p) + { + switch (p.Index) + { + case (short)ServerPacketIds.KeepAlive: + KeepAlive((S.KeepAlive)p); + break; + case (short)ServerPacketIds.MapInformation: //MapInfo + MapInformation((S.MapInformation)p); + break; + case (short)ServerPacketIds.UserInformation: + UserInformation((S.UserInformation)p); + break; + case (short)ServerPacketIds.UserLocation: + UserLocation((S.UserLocation)p); + break; + case (short)ServerPacketIds.ObjectPlayer: + ObjectPlayer((S.ObjectPlayer)p); + break; + case (short)ServerPacketIds.ObjectRemove: + ObjectRemove((S.ObjectRemove)p); + break; + case (short)ServerPacketIds.ObjectTurn: + ObjectTurn((S.ObjectTurn)p); + break; + case (short)ServerPacketIds.ObjectWalk: + ObjectWalk((S.ObjectWalk)p); + break; + case (short)ServerPacketIds.Chat: + ReceiveChat((S.Chat)p); + break; + case (short)ServerPacketIds.ObjectChat: + ObjectChat((S.ObjectChat)p); + break; + case (short)ServerPacketIds.MoveItem: + MoveItem((S.MoveItem)p); + break; + case (short)ServerPacketIds.EquipItem: + EquipItem((S.EquipItem)p); + break; + case (short)ServerPacketIds.MergeItem: + MergeItem((S.MergeItem)p); + break; + case (short)ServerPacketIds.RemoveItem: + RemoveItem((S.RemoveItem)p); + break; + case (short)ServerPacketIds.TakeBackItem: + TakeBackItem((S.TakeBackItem)p); + break; + case (short)ServerPacketIds.StoreItem: + StoreItem((S.StoreItem)p); + break; + case (short)ServerPacketIds.DepositRefineItem: + DepositRefineItem((S.DepositRefineItem)p); + break; + case (short)ServerPacketIds.RetrieveRefineItem: + RetrieveRefineItem((S.RetrieveRefineItem)p); + break; + case (short)ServerPacketIds.RefineCancel: + RefineCancel((S.RefineCancel)p); + break; + case (short)ServerPacketIds.RefineItem: + RefineItem((S.RefineItem)p); + break; + case (short)ServerPacketIds.DepositTradeItem: + DepositTradeItem((S.DepositTradeItem)p); + break; + case (short)ServerPacketIds.RetrieveTradeItem: + RetrieveTradeItem((S.RetrieveTradeItem)p); + break; + case (short)ServerPacketIds.SplitItem: + SplitItem((S.SplitItem)p); + break; + case (short)ServerPacketIds.SplitItem1: + SplitItem1((S.SplitItem1)p); + break; + case (short)ServerPacketIds.UseItem: + UseItem((S.UseItem)p); + break; + case (short)ServerPacketIds.DropItem: + DropItem((S.DropItem)p); + break; + case (short)ServerPacketIds.PlayerUpdate: + PlayerUpdate((S.PlayerUpdate)p); + break; + case (short)ServerPacketIds.LogOutSuccess: + LogOutSuccess((S.LogOutSuccess)p); + break; + case (short)ServerPacketIds.LogOutFailed: + LogOutFailed((S.LogOutFailed)p); + break; + case (short)ServerPacketIds.ReturnToLogin: + ReturnToLogin((S.ReturnToLogin)p); + break; + case (short)ServerPacketIds.TimeOfDay: + TimeOfDay((S.TimeOfDay)p); + break; + case (short)ServerPacketIds.ChangeAMode: + ChangeAMode((S.ChangeAMode)p); + break; + case (short)ServerPacketIds.ChangePMode: + ChangePMode((S.ChangePMode)p); + break; + case (short)ServerPacketIds.ObjectItem: + ObjectItem((S.ObjectItem)p); + break; + case (short)ServerPacketIds.ObjectGold: + ObjectGold((S.ObjectGold)p); + break; + case (short)ServerPacketIds.GainedItem: + GainedItem((S.GainedItem)p); + break; + case (short)ServerPacketIds.GainedGold: + GainedGold((S.GainedGold)p); + break; + case (short)ServerPacketIds.LoseGold: + LoseGold((S.LoseGold)p); + break; + case (short)ServerPacketIds.GainedCredit: + GainedCredit((S.GainedCredit)p); + break; + case (short)ServerPacketIds.LoseCredit: + LoseCredit((S.LoseCredit)p); + break; + case (short)ServerPacketIds.ObjectMonster: + ObjectMonster((S.ObjectMonster)p); + break; + case (short)ServerPacketIds.ObjectAttack: + ObjectAttack((S.ObjectAttack)p); + break; + case (short)ServerPacketIds.Struck: + Struck((S.Struck)p); + break; + case (short)ServerPacketIds.DamageIndicator: + DamageIndicator((S.DamageIndicator)p); + break; + case (short)ServerPacketIds.ObjectStruck: + ObjectStruck((S.ObjectStruck)p); + break; + case (short)ServerPacketIds.DuraChanged: + DuraChanged((S.DuraChanged)p); + break; + case (short)ServerPacketIds.HealthChanged: + HealthChanged((S.HealthChanged)p); + break; + case (short)ServerPacketIds.DeleteItem: + DeleteItem((S.DeleteItem)p); + break; + case (short)ServerPacketIds.Death: + Death((S.Death)p); + break; + case (short)ServerPacketIds.ObjectDied: + ObjectDied((S.ObjectDied)p); + break; + case (short)ServerPacketIds.ColourChanged: + ColourChanged((S.ColourChanged)p); + break; + case (short)ServerPacketIds.ObjectColourChanged: + ObjectColourChanged((S.ObjectColourChanged)p); + break; + case (short)ServerPacketIds.ObjectGuildNameChanged: + ObjectGuildNameChanged((S.ObjectGuildNameChanged)p); + break; + case (short)ServerPacketIds.GainExperience: + GainExperience((S.GainExperience)p); + break; + case (short)ServerPacketIds.LevelChanged: + LevelChanged((S.LevelChanged)p); + break; + case (short)ServerPacketIds.ObjectLeveled: + ObjectLeveled((S.ObjectLeveled)p); + break; + case (short)ServerPacketIds.ObjectHarvest: + ObjectHarvest((S.ObjectHarvest)p); + break; + case (short)ServerPacketIds.ObjectHarvested: + ObjectHarvested((S.ObjectHarvested)p); + break; + case (short)ServerPacketIds.ObjectNpc: + ObjectNPC((S.ObjectNPC)p); + break; + case (short)ServerPacketIds.NPCResponse: + NPCResponse((S.NPCResponse)p); + break; + case (short)ServerPacketIds.ObjectHide: + ObjectHide((S.ObjectHide)p); + break; + case (short)ServerPacketIds.ObjectShow: + ObjectShow((S.ObjectShow)p); + break; + case (short)ServerPacketIds.Poisoned: + Poisoned((S.Poisoned)p); + break; + case (short)ServerPacketIds.ObjectPoisoned: + ObjectPoisoned((S.ObjectPoisoned)p); + break; + case (short)ServerPacketIds.MapChanged: + MapChanged((S.MapChanged)p); + break; + case (short)ServerPacketIds.ObjectTeleportOut: + ObjectTeleportOut((S.ObjectTeleportOut)p); + break; + case (short)ServerPacketIds.ObjectTeleportIn: + ObjectTeleportIn((S.ObjectTeleportIn)p); + break; + case (short)ServerPacketIds.TeleportIn: + TeleportIn(); + break; + case (short)ServerPacketIds.NPCGoods: + NPCGoods((S.NPCGoods)p); + break; + case (short)ServerPacketIds.NPCSell: + NPCSell(); + break; + case (short)ServerPacketIds.NPCRepair: + NPCRepair((S.NPCRepair)p); + break; + case (short)ServerPacketIds.NPCSRepair: + NPCSRepair((S.NPCSRepair)p); + break; + case (short)ServerPacketIds.NPCRefine: + NPCRefine((S.NPCRefine)p); + break; + case (short)ServerPacketIds.NPCCheckRefine: + NPCCheckRefine((S.NPCCheckRefine)p); + break; + case (short)ServerPacketIds.NPCCollectRefine: + NPCCollectRefine((S.NPCCollectRefine)p); + break; + case (short)ServerPacketIds.NPCReplaceWedRing: + NPCReplaceWedRing((S.NPCReplaceWedRing)p); + break; + case (short)ServerPacketIds.NPCStorage: + NPCStorage(); + break; + case (short)ServerPacketIds.NPCRequestInput: + NPCRequestInput((S.NPCRequestInput)p); + break; + case (short)ServerPacketIds.SellItem: + SellItem((S.SellItem)p); + break; + case (short)ServerPacketIds.RepairItem: + RepairItem((S.RepairItem)p); + break; + case (short)ServerPacketIds.ItemRepaired: + ItemRepaired((S.ItemRepaired)p); + break; + case (short)ServerPacketIds.ItemSealChanged: + ItemSealChanged((S.ItemSealChanged)p); + break; + case (short)ServerPacketIds.NewMagic: + NewMagic((S.NewMagic)p); + break; + case (short)ServerPacketIds.MagicLeveled: + MagicLeveled((S.MagicLeveled)p); + break; + case (short)ServerPacketIds.Magic: + Magic((S.Magic)p); + break; + case (short)ServerPacketIds.MagicDelay: + MagicDelay((S.MagicDelay)p); + break; + case (short)ServerPacketIds.MagicCast: + MagicCast((S.MagicCast)p); + break; + case (short)ServerPacketIds.ObjectMagic: + ObjectMagic((S.ObjectMagic)p); + break; + case (short)ServerPacketIds.ObjectProjectile: + ObjectProjectile((S.ObjectProjectile)p); + break; + case (short)ServerPacketIds.ObjectEffect: + ObjectEffect((S.ObjectEffect)p); + break; + case (short)ServerPacketIds.RangeAttack: + RangeAttack((S.RangeAttack)p); + break; + case (short)ServerPacketIds.Pushed: + Pushed((S.Pushed)p); + break; + case (short)ServerPacketIds.ObjectPushed: + ObjectPushed((S.ObjectPushed)p); + break; + case (short)ServerPacketIds.ObjectName: + ObjectName((S.ObjectName)p); + break; + case (short)ServerPacketIds.UserStorage: + UserStorage((S.UserStorage)p); + break; + case (short)ServerPacketIds.SwitchGroup: + SwitchGroup((S.SwitchGroup)p); + break; + case (short)ServerPacketIds.DeleteGroup: + DeleteGroup(); + break; + case (short)ServerPacketIds.DeleteMember: + DeleteMember((S.DeleteMember)p); + break; + case (short)ServerPacketIds.GroupInvite: + GroupInvite((S.GroupInvite)p); + break; + case (short)ServerPacketIds.AddMember: + AddMember((S.AddMember)p); + break; + case (short)ServerPacketIds.GroupMembersMap: + GroupMembersMap((S.GroupMembersMap)p); + break; + case (short)ServerPacketIds.SendMemberLocation: + SendMemberLocation((S.SendMemberLocation)p); + break; + case (short)ServerPacketIds.Revived: + Revived(); + break; + case (short)ServerPacketIds.ObjectRevived: + ObjectRevived((S.ObjectRevived)p); + break; + case (short)ServerPacketIds.SpellToggle: + SpellToggle((S.SpellToggle)p); + break; + case (short)ServerPacketIds.ObjectHealth: + ObjectHealth((S.ObjectHealth)p); + break; + case (short)ServerPacketIds.ObjectMana: + ObjectMana((S.ObjectMana)p); + break; + case (short)ServerPacketIds.MapEffect: + MapEffect((S.MapEffect)p); + break; + case (short)ServerPacketIds.AllowObserve: + AllowObserve = ((S.AllowObserve)p).Allow; + break; + case (short)ServerPacketIds.ObjectRangeAttack: + ObjectRangeAttack((S.ObjectRangeAttack)p); + break; + case (short)ServerPacketIds.AddBuff: + AddBuff((S.AddBuff)p); + break; + case (short)ServerPacketIds.RemoveBuff: + RemoveBuff((S.RemoveBuff)p); + break; + case (short)ServerPacketIds.PauseBuff: + PauseBuff((S.PauseBuff)p); + break; + case (short)ServerPacketIds.ObjectHidden: + ObjectHidden((S.ObjectHidden)p); + break; + case (short)ServerPacketIds.RefreshItem: + RefreshItem((S.RefreshItem)p); + break; + case (short)ServerPacketIds.ObjectSpell: + ObjectSpell((S.ObjectSpell)p); + break; + case (short)ServerPacketIds.UserDash: + UserDash((S.UserDash)p); + break; + case (short)ServerPacketIds.ObjectDash: + ObjectDash((S.ObjectDash)p); + break; + case (short)ServerPacketIds.UserDashFail: + UserDashFail((S.UserDashFail)p); + break; + case (short)ServerPacketIds.ObjectDashFail: + ObjectDashFail((S.ObjectDashFail)p); + break; + case (short)ServerPacketIds.NPCConsign: + NPCConsign(); + break; + case (short)ServerPacketIds.NPCMarket: + NPCMarket((S.NPCMarket)p); + break; + case (short)ServerPacketIds.NPCMarketPage: + NPCMarketPage((S.NPCMarketPage)p); + break; + case (short)ServerPacketIds.ConsignItem: + ConsignItem((S.ConsignItem)p); + break; + case (short)ServerPacketIds.MarketFail: + MarketFail((S.MarketFail)p); + break; + case (short)ServerPacketIds.MarketSuccess: + MarketSuccess((S.MarketSuccess)p); + break; + case (short)ServerPacketIds.RemoveMagic: + RemoveMagic((S.RemoveMagic)p); + break; + case (short)ServerPacketIds.BaseStatsInfo: + BaseStatsInfo((S.BaseStatsInfo)p); + break; + case (short)ServerPacketIds.UserName: + UserName((S.UserName)p); + break; + case (short)ServerPacketIds.ChatItemStats: + ChatItemStats((S.ChatItemStats)p); + break; + case (short)ServerPacketIds.GuildInvite: + GuildInvite((S.GuildInvite)p); + break; + case (short)ServerPacketIds.GuildMemberChange: + GuildMemberChange((S.GuildMemberChange)p); + break; + case (short)ServerPacketIds.GuildNoticeChange: + GuildNoticeChange((S.GuildNoticeChange)p); + break; + case (short)ServerPacketIds.GuildStatus: + GuildStatus((S.GuildStatus)p); + break; + case (short)ServerPacketIds.GuildExpGain: + GuildExpGain((S.GuildExpGain)p); + break; + case (short)ServerPacketIds.GuildNameRequest: + GuildNameRequest((S.GuildNameRequest)p); + break; + case (short)ServerPacketIds.GuildStorageGoldChange: + GuildStorageGoldChange((S.GuildStorageGoldChange)p); + break; + case (short)ServerPacketIds.GuildStorageItemChange: + GuildStorageItemChange((S.GuildStorageItemChange)p); + break; + case (short)ServerPacketIds.GuildStorageList: + GuildStorageList((S.GuildStorageList)p); + break; + case (short)ServerPacketIds.GuildRequestWar: + GuildRequestWar((S.GuildRequestWar)p); + break; + case (short)ServerPacketIds.DefaultNPC: + DefaultNPC((S.DefaultNPC)p); + break; + case (short)ServerPacketIds.NPCUpdate: + NPCUpdate((S.NPCUpdate)p); + break; + case (short)ServerPacketIds.NPCImageUpdate: + NPCImageUpdate((S.NPCImageUpdate)p); + break; + case (short)ServerPacketIds.MarriageRequest: + MarriageRequest((S.MarriageRequest)p); + break; + case (short)ServerPacketIds.DivorceRequest: + DivorceRequest((S.DivorceRequest)p); + break; + case (short)ServerPacketIds.TradeRequest: + TradeRequest((S.TradeRequest)p); + break; + case (short)ServerPacketIds.TradeAccept: + TradeAccept((S.TradeAccept)p); + break; + case (short)ServerPacketIds.TradeGold: + TradeGold((S.TradeGold)p); + break; + case (short)ServerPacketIds.TradeItem: + TradeItem((S.TradeItem)p); + break; + case (short)ServerPacketIds.TradeConfirm: + TradeConfirm(); + break; + case (short)ServerPacketIds.TradeCancel: + TradeCancel((S.TradeCancel)p); + break; + case (short)ServerPacketIds.ChangeQuest: + ChangeQuest((S.ChangeQuest)p); + break; + case (short)ServerPacketIds.CompleteQuest: + CompleteQuest((S.CompleteQuest)p); + break; + case (short)ServerPacketIds.ShareQuest: + ShareQuest((S.ShareQuest)p); + break; + case (short)ServerPacketIds.GainedQuestItem: + GainedQuestItem((S.GainedQuestItem)p); + break; + case (short)ServerPacketIds.DeleteQuestItem: + DeleteQuestItem((S.DeleteQuestItem)p); + break; + case (short)ServerPacketIds.CombineItem: + CombineItem((S.CombineItem)p); + break; + case (short)ServerPacketIds.ItemUpgraded: + ItemUpgraded((S.ItemUpgraded)p); + break; + case (short)ServerPacketIds.ObjectLevelEffects: + ObjectLevelEffects((S.ObjectLevelEffects)p); + break; + case (short)ServerPacketIds.SendOutputMessage: + SendOutputMessage((S.SendOutputMessage)p); + break; + case (short)ServerPacketIds.ReceiveMail: + ReceiveMail((S.ReceiveMail)p); + break; + case (short)ServerPacketIds.MailLockedItem: + MailLockedItem((S.MailLockedItem)p); + break; + case (short)ServerPacketIds.MailSent: + MailSent((S.MailSent)p); + break; + case (short)ServerPacketIds.MailSendRequest: + MailSendRequest((S.MailSendRequest)p); + break; + case (short)ServerPacketIds.ParcelCollected: + ParcelCollected((S.ParcelCollected)p); + break; + case (short)ServerPacketIds.MailCost: + MailCost((S.MailCost)p); + break; + case (short)ServerPacketIds.ResizeInventory: + ResizeInventory((S.ResizeInventory)p); + break; + case (short)ServerPacketIds.ResizeStorage: + ResizeStorage((S.ResizeStorage)p); + break; + case (short)ServerPacketIds.FriendUpdate: + FriendUpdate((S.FriendUpdate)p); + break; + case (short)ServerPacketIds.LoverUpdate: + LoverUpdate((S.LoverUpdate)p); + break; + case (short)ServerPacketIds.GuildBuffList: + GuildBuffList((S.GuildBuffList)p); + break; + case (short)ServerPacketIds.GameShopInfo: + GameShopUpdate((S.GameShopInfo)p); + break; + case (short)ServerPacketIds.GameShopStock: + GameShopStock((S.GameShopStock)p); + break; + case (short)ServerPacketIds.Rankings: + Rankings((S.Rankings)p); + break; + case (short)ServerPacketIds.OpenBrowser: + OpenBrowser((S.OpenBrowser)p); + break; + case (short)ServerPacketIds.PlaySound: + PlaySound((S.PlaySound)p); + break; + case (short)ServerPacketIds.SetTimer: + SetTimer((S.SetTimer)p); + break; + case (short)ServerPacketIds.ExpireTimer: + ExpireTimer((S.ExpireTimer)p); + break; + case (short)ServerPacketIds.UpdateNotice: + ShowNotice((S.UpdateNotice)p); + break; + case (short)ServerPacketIds.Roll: + Roll((S.Roll)p); + break; + case (short)ServerPacketIds.SetCompass: + SetCompass((S.SetCompass)p); + break; + default: + base.ProcessPacket(p); + break; + } + } + + private void KeepAlive(S.KeepAlive p) + { + if (p.Time == 0) return; + CMain.PingTime = (CMain.Time - p.Time); + } + private void MapInformation(S.MapInformation p) + { + if (MapControl != null && !MapControl.IsDisposed) + MapControl.Dispose(); + MapControl = new MapControl { Index = p.MapIndex, FileName = Path.Combine(Settings.MapPath, p.FileName + ".map"), Title = p.Title, MiniMap = p.MiniMap, BigMap = p.BigMap, Lights = p.Lights, Lightning = p.Lightning, Fire = p.Fire, MapDarkLight = p.MapDarkLight, Music = p.Music }; + + MapControl.LoadMap(); + Scene.MainDialog.MapLabel.Text = p.Title; + InsertControl(0, MapControl); + } + + private void UserInformation(S.UserInformation p) + { + User = new UserObject(p.ObjectID); + User.Load(p); + Gold = p.Gold; + Credit = p.Credit; + + CharacterDialog = new CharacterDialog(MirGridType.Equipment, User) { Parent = this, Visible = false }; + InventoryDialog.RefreshInventory(); + foreach (SkillBarDialog Bar in SkillBarDialogs) + Bar.Update(); + AllowObserve = p.AllowObserve; + Observing = p.Observer; + } + + private void UserLocation(S.UserLocation p) + { + MapControl.NextAction = 0; + if (User.CurrentLocation == p.Location && User.Direction == p.Direction) return; + + if (Settings.DebugMode) + { + ReceiveChat(new S.Chat { Message = "Displacement", Type = ChatType.System }); + } + + MapControl.RemoveObject(User); + User.CurrentLocation = p.Location; + User.MapLocation = p.Location; + MapControl.AddObject(User); + + MapControl.FloorValid = false; + MapControl.InputDelay = CMain.Time + 400; + + if (User.Dead) return; + + User.ClearMagic(); + User.QueuedAction = null; + + for (int i = User.ActionFeed.Count - 1; i >= 0; i--) + { + if (User.ActionFeed[i].Action == MirAction.Pushed) continue; + User.ActionFeed.RemoveAt(i); + } + + User.SetAction(); + } + private void ReceiveChat(S.Chat p) + { + ChatDialog.ReceiveChat(p.Message, p.Type); + } + private void ObjectPlayer(S.ObjectPlayer p) + { + PlayerObject player = new PlayerObject(p.ObjectID); + player.Load(p); + } + + private void ObjectRemove(S.ObjectRemove p) + { + if (p.ObjectID == User.ObjectID) return; + + for (int i = MapControl.Objects.Count - 1; i >= 0; i--) + { + MapObject ob = MapControl.Objects[i]; + if (ob.ObjectID != p.ObjectID) continue; + + ob.Remove(); + } + } + private void ObjectTurn(S.ObjectTurn p) + { + if (p.ObjectID == User.ObjectID && !Observing) return; + + for (int i = MapControl.Objects.Count - 1; i >= 0; i--) + { + MapObject ob = MapControl.Objects[i]; + if (ob.ObjectID != p.ObjectID) continue; + ob.ActionFeed.Add(new QueuedAction { Action = MirAction.Standing, Direction = p.Direction, Location = p.Location }); + return; + } + } + private void ObjectWalk(S.ObjectWalk p) + { + if (p.ObjectID == User.ObjectID && !Observing) return; + + for (int i = MapControl.Objects.Count - 1; i >= 0; i--) + { + MapObject ob = MapControl.Objects[i]; + if (ob.ObjectID != p.ObjectID) continue; + ob.ActionFeed.Add(new QueuedAction { Action = MirAction.Walking, Direction = p.Direction, Location = p.Location }); + return; + } + } + private void ObjectChat(S.ObjectChat p) + { + ChatDialog.ReceiveChat(p.Text, p.Type); + + for (int i = MapControl.Objects.Count - 1; i >= 0; i--) + { + MapObject ob = MapControl.Objects[i]; + if (ob.ObjectID != p.ObjectID) continue; + ob.Chat(RegexFunctions.CleanChatString(p.Text)); + return; + } + + } + private void MoveItem(S.MoveItem p) + { + MirItemCell toCell, fromCell; + + switch (p.Grid) + { + case MirGridType.Inventory: + fromCell = p.From < User.BeltIdx ? BeltDialog.Grid[p.From] : InventoryDialog.Grid[p.From - User.BeltIdx]; + break; + case MirGridType.Storage: + fromCell = StorageDialog.Grid[p.From]; + break; + case MirGridType.Trade: + fromCell = TradeDialog.Grid[p.From]; + break; + case MirGridType.Refine: + fromCell = RefineDialog.Grid[p.From]; + break; + default: + return; + } + + switch (p.Grid) + { + case MirGridType.Inventory: + toCell = p.To < User.BeltIdx ? BeltDialog.Grid[p.To] : InventoryDialog.Grid[p.To - User.BeltIdx]; + break; + case MirGridType.Storage: + toCell = StorageDialog.Grid[p.To]; + break; + case MirGridType.Trade: + toCell = TradeDialog.Grid[p.To]; + break; + case MirGridType.Refine: + toCell = RefineDialog.Grid[p.To]; + break; + default: + return; + } + + if (toCell == null || fromCell == null) return; + + toCell.Locked = false; + fromCell.Locked = false; + + if (p.Grid == MirGridType.Trade) + TradeDialog.ChangeLockState(false); + + if (!p.Success) return; + + UserItem i = fromCell.Item; + fromCell.Item = toCell.Item; + toCell.Item = i; + + User.RefreshStats(); + } + private void EquipItem(S.EquipItem p) + { + MirItemCell fromCell, toCell; + + toCell = CharacterDialog.Grid[p.To]; + + switch (p.Grid) + { + case MirGridType.Inventory: + fromCell = InventoryDialog.GetCell(p.UniqueID) ?? BeltDialog.GetCell(p.UniqueID); + break; + case MirGridType.Storage: + fromCell = StorageDialog.GetCell(p.UniqueID) ?? BeltDialog.GetCell(p.UniqueID); + break; + default: + return; + } + + if (toCell == null || fromCell == null) return; + + toCell.Locked = false; + fromCell.Locked = false; + + if (!p.Success) return; + + UserItem i = fromCell.Item; + fromCell.Item = toCell.Item; + toCell.Item = i; + User.RefreshStats(); + } + + private void CombineItem(S.CombineItem p) + { + MirItemCell fromCell = null; + MirItemCell toCell = null; + switch (p.Grid) + { + case MirGridType.Inventory: + fromCell = InventoryDialog.GetCell(p.IDFrom) ?? BeltDialog.GetCell(p.IDFrom); + toCell = InventoryDialog.GetCell(p.IDTo) ?? BeltDialog.GetCell(p.IDTo); + break; + } + + if (toCell == null || fromCell == null) return; + + toCell.Locked = false; + fromCell.Locked = false; + + if (p.Destroy) toCell.Item = null; + + if (!p.Success) return; + + fromCell.Item = null; + + switch (p.Grid) + { + case MirGridType.Inventory: + User.RefreshStats(); + break; + } + } + + private void MergeItem(S.MergeItem p) + { + MirItemCell toCell, fromCell; + + switch (p.GridFrom) + { + case MirGridType.Inventory: + fromCell = InventoryDialog.GetCell(p.IDFrom) ?? BeltDialog.GetCell(p.IDFrom); + break; + case MirGridType.Storage: + fromCell = StorageDialog.GetCell(p.IDFrom); + break; + case MirGridType.Equipment: + fromCell = CharacterDialog.GetCell(p.IDFrom); + break; + case MirGridType.Trade: + fromCell = TradeDialog.GetCell(p.IDFrom); + break; + default: + return; + } + + switch (p.GridTo) + { + case MirGridType.Inventory: + toCell = InventoryDialog.GetCell(p.IDTo) ?? BeltDialog.GetCell(p.IDTo); + break; + case MirGridType.Storage: + toCell = StorageDialog.GetCell(p.IDTo); + break; + case MirGridType.Equipment: + toCell = CharacterDialog.GetCell(p.IDTo); + break; + case MirGridType.Trade: + toCell = TradeDialog.GetCell(p.IDTo); + break; + default: + return; + } + + if (toCell == null || fromCell == null) return; + + toCell.Locked = false; + fromCell.Locked = false; + + if (p.GridFrom == MirGridType.Trade || p.GridTo == MirGridType.Trade) + TradeDialog.ChangeLockState(false); + + if (!p.Success) return; + if (fromCell.Item.Count <= toCell.Item.Info.StackSize - toCell.Item.Count) + { + toCell.Item.Count += fromCell.Item.Count; + fromCell.Item = null; + } + else + { + fromCell.Item.Count -= (ushort)(toCell.Item.Info.StackSize - toCell.Item.Count); + toCell.Item.Count = toCell.Item.Info.StackSize; + } + + User.RefreshStats(); + } + private void RemoveItem(S.RemoveItem p) + { + MirItemCell toCell; + + int index = -1; + MirItemCell fromCell = null; + for (int i = 0; i < MapObject.User.Equipment.Length; i++) + { + if (MapObject.User.Equipment[i] == null || MapObject.User.Equipment[i].UniqueID != p.UniqueID) continue; + index = i; + fromCell = CharacterDialog.Grid[index]; + break; + } + + switch (p.Grid) + { + case MirGridType.Inventory: + toCell = p.To < User.BeltIdx ? BeltDialog.Grid[p.To] : InventoryDialog.Grid[p.To - User.BeltIdx]; + break; + case MirGridType.Storage: + toCell = StorageDialog.Grid[p.To]; + break; + default: + return; + } + + if (toCell == null || fromCell == null) return; + + toCell.Locked = false; + fromCell.Locked = false; + + if (!p.Success) return; + toCell.Item = fromCell.Item; + fromCell.Item = null; + User.RefreshStats(); + + } + + private void TakeBackItem(S.TakeBackItem p) + { + MirItemCell fromCell = StorageDialog.Grid[p.From]; + + MirItemCell toCell = p.To < User.BeltIdx ? BeltDialog.Grid[p.To] : InventoryDialog.Grid[p.To - User.BeltIdx]; + + if (toCell == null || fromCell == null) return; + + toCell.Locked = false; + fromCell.Locked = false; + + if (!p.Success) return; + toCell.Item = fromCell.Item; + fromCell.Item = null; + User.RefreshStats(); + } + private void StoreItem(S.StoreItem p) + { + MirItemCell fromCell = p.From < User.BeltIdx ? BeltDialog.Grid[p.From] : InventoryDialog.Grid[p.From - User.BeltIdx]; + + MirItemCell toCell = StorageDialog.Grid[p.To]; + + if (toCell == null || fromCell == null) return; + + toCell.Locked = false; + fromCell.Locked = false; + + if (!p.Success) return; + toCell.Item = fromCell.Item; + fromCell.Item = null; + User.RefreshStats(); + } + private void DepositRefineItem(S.DepositRefineItem p) + { + MirItemCell fromCell = p.From < User.BeltIdx ? BeltDialog.Grid[p.From] : InventoryDialog.Grid[p.From - User.BeltIdx]; + + MirItemCell toCell = RefineDialog.Grid[p.To]; + + if (toCell == null || fromCell == null) return; + + toCell.Locked = false; + fromCell.Locked = false; + + if (!p.Success) return; + toCell.Item = fromCell.Item; + fromCell.Item = null; + User.RefreshStats(); + } + + private void RetrieveRefineItem(S.RetrieveRefineItem p) + { + MirItemCell fromCell = RefineDialog.Grid[p.From]; + MirItemCell toCell = p.To < User.BeltIdx ? BeltDialog.Grid[p.To] : InventoryDialog.Grid[p.To - User.BeltIdx]; + + if (toCell == null || fromCell == null) return; + + toCell.Locked = false; + fromCell.Locked = false; + + if (!p.Success) return; + toCell.Item = fromCell.Item; + fromCell.Item = null; + User.RefreshStats(); + } + + private void RefineCancel(S.RefineCancel p) + { + RefineDialog.RefineReset(); + } + + private void RefineItem(S.RefineItem p) + { + RefineDialog.RefineReset(); + for (int i = 0; i < User.Inventory.Length; i++) + { + if (User.Inventory[i] != null && User.Inventory[i].UniqueID == p.UniqueID) + { + User.Inventory[i] = null; + break; + } + } + NPCDialog.Hide(); + } + private void DepositTradeItem(S.DepositTradeItem p) + { + MirItemCell fromCell = p.From < User.BeltIdx ? BeltDialog.Grid[p.From] : InventoryDialog.Grid[p.From - User.BeltIdx]; + + MirItemCell toCell = TradeDialog.Grid[p.To]; + + if (toCell == null || fromCell == null) return; + + toCell.Locked = false; + fromCell.Locked = false; + TradeDialog.ChangeLockState(false); + + if (!p.Success) return; + toCell.Item = fromCell.Item; + fromCell.Item = null; + User.RefreshStats(); + } + private void RetrieveTradeItem(S.RetrieveTradeItem p) + { + MirItemCell fromCell = TradeDialog.Grid[p.From]; + MirItemCell toCell = p.To < User.BeltIdx ? BeltDialog.Grid[p.To] : InventoryDialog.Grid[p.To - User.BeltIdx]; + + if (toCell == null || fromCell == null) return; + + toCell.Locked = false; + fromCell.Locked = false; + TradeDialog.ChangeLockState(false); + + if (!p.Success) return; + toCell.Item = fromCell.Item; + fromCell.Item = null; + User.RefreshStats(); + } + private void SplitItem(S.SplitItem p) + { + Bind(p.Item); + + UserItem[] array; + switch (p.Grid) + { + case MirGridType.Inventory: + array = MapObject.User.Inventory; + break; + case MirGridType.Storage: + array = Storage; + break; + default: + return; + } + + if (p.Grid == MirGridType.Inventory && (p.Item.Info.Type == ItemType.Potion || p.Item.Info.Type == ItemType.Scroll || (p.Item.Info.Type == ItemType.Script && p.Item.Info.Effect == 1))) + { + if (p.Item.Info.Type == ItemType.Potion || p.Item.Info.Type == ItemType.Scroll || (p.Item.Info.Type == ItemType.Script && p.Item.Info.Effect == 1)) + { + for (int i = 0; i < 4; i++) + { + if (array[i] != null) continue; + array[i] = p.Item; + User.RefreshStats(); + return; + } + } + } + + for (int i = GameScene.User.BeltIdx; i < array.Length; i++) + { + if (array[i] != null) continue; + array[i] = p.Item; + User.RefreshStats(); + return; + } + + for (int i = 0; i < GameScene.User.BeltIdx; i++) + { + if (array[i] != null) continue; + array[i] = p.Item; + User.RefreshStats(); + return; + } + } + + private void SplitItem1(S.SplitItem1 p) + { + MirItemCell cell; + + switch (p.Grid) + { + case MirGridType.Inventory: + cell = InventoryDialog.GetCell(p.UniqueID) ?? BeltDialog.GetCell(p.UniqueID); + break; + case MirGridType.Storage: + cell = StorageDialog.GetCell(p.UniqueID); + break; + default: + return; + } + + if (cell == null) return; + + cell.Locked = false; + + if (!p.Success) return; + cell.Item.Count -= p.Count; + User.RefreshStats(); + } + private void UseItem(S.UseItem p) + { + MirItemCell cell = null; + bool hero = false; + + switch (p.Grid) + { + case MirGridType.Inventory: + cell = InventoryDialog.GetCell(p.UniqueID) ?? BeltDialog.GetCell(p.UniqueID); + break; + } + + if (cell == null) return; + + cell.Locked = false; + + if (!p.Success) return; + if (cell.Item.Count > 1) cell.Item.Count--; + else cell.Item = null; + User.RefreshStats(); + } + private void DropItem(S.DropItem p) + { + MirItemCell cell = InventoryDialog.GetCell(p.UniqueID) ?? BeltDialog.GetCell(p.UniqueID); + + if (cell == null) return; + + cell.Locked = false; + + if (!p.Success) return; + + if (p.Count == cell.Item.Count) + cell.Item = null; + else + cell.Item.Count -= p.Count; + + User.RefreshStats(); + } + + private void CompleteQuest(S.CompleteQuest p) + { + User.CompletedQuests = p.CompletedQuests; + } + + private void ShareQuest(S.ShareQuest p) + { + ClientQuestInfo quest = GameScene.QuestInfoList.FirstOrDefault(e => e.Index == p.QuestIndex); + + if (quest == null) return; + + MirMessageBox messageBox = new MirMessageBox(string.Format("{0} would like to share a quest with you. Do you accept?", p.SharerName), MirMessageBoxButtons.YesNo); + + messageBox.YesButton.Click += (o, e) => Network.Enqueue(new C.AcceptQuest { NPCIndex = 0, QuestIndex = quest.Index }); + + messageBox.Show(); + } + + private void ChangeQuest(S.ChangeQuest p) + { + switch(p.QuestState) + { + case QuestState.Add: + User.CurrentQuests.Add(p.Quest); + + foreach (ClientQuestProgress quest in User.CurrentQuests) + BindQuest(quest); + if (Settings.TrackedQuests.Contains(p.Quest.Id)) + { + GameScene.Scene.QuestTrackingDialog.AddQuest(p.Quest, true); + } + + if (p.TrackQuest) + { + GameScene.Scene.QuestTrackingDialog.AddQuest(p.Quest); + } + + break; + case QuestState.Update: + for (int i = 0; i < User.CurrentQuests.Count; i++) + { + if (User.CurrentQuests[i].Id != p.Quest.Id) continue; + + User.CurrentQuests[i] = p.Quest; + } + + foreach (ClientQuestProgress quest in User.CurrentQuests) + BindQuest(quest); + + break; + case QuestState.Remove: + + for (int i = User.CurrentQuests.Count - 1; i >= 0; i--) + { + if (User.CurrentQuests[i].Id != p.Quest.Id) continue; + + User.CurrentQuests.RemoveAt(i); + } + + GameScene.Scene.QuestTrackingDialog.RemoveQuest(p.Quest); + + break; + } + + GameScene.Scene.QuestTrackingDialog.DisplayQuests(); + + if (Scene.QuestListDialog.Visible) + { + Scene.QuestListDialog.DisplayInfo(); + } + + if (Scene.QuestLogDialog.Visible) + { + Scene.QuestLogDialog.DisplayQuests(); + } + } + + private void PlayerUpdate(S.PlayerUpdate p) + { + for (int i = MapControl.Objects.Count - 1; i >= 0; i--) + { + if (MapControl.Objects[i].ObjectID != p.ObjectID) continue; + + PlayerObject player = MapControl.Objects[i] as PlayerObject; + if (player != null) player.Update(p); + return; + } + } + + private void LogOutSuccess(S.LogOutSuccess p) + { + User = null; + CMain.SetResolution(800, 600); + + ActiveScene = new SelectScene(p.Characters); + Dispose(); + } + private void LogOutFailed(S.LogOutFailed p) + { + Enabled = true; + } + + private void ReturnToLogin(S.ReturnToLogin p) + { + User = null; + CMain.SetResolution(800, 600); + + ActiveScene = new LoginScene(); + Dispose(); + MirMessageBox.Show("The person you was observing has logged off."); + } + + private void TimeOfDay(S.TimeOfDay p) + { + Lights = p.Lights; + } + private void ChangeAMode(S.ChangeAMode p) + { + AMode = p.Mode; + + switch (p.Mode) + { + case AttackMode.Peace: + ChatDialog.ReceiveChat(GameLanguage.AttackMode_Peace, ChatType.Hint); + break; + case AttackMode.Group: + ChatDialog.ReceiveChat(GameLanguage.AttackMode_Group, ChatType.Hint); + break; + case AttackMode.Guild: + ChatDialog.ReceiveChat(GameLanguage.AttackMode_Guild, ChatType.Hint); + break; + case AttackMode.EnemyGuild: + ChatDialog.ReceiveChat(GameLanguage.AttackMode_EnemyGuild, ChatType.Hint); + break; + case AttackMode.RedBrown: + ChatDialog.ReceiveChat(GameLanguage.AttackMode_RedBrown, ChatType.Hint); + break; + case AttackMode.All: + ChatDialog.ReceiveChat(GameLanguage.AttackMode_All, ChatType.Hint); + break; + } + } + private void ChangePMode(S.ChangePMode p) + { + PMode = p.Mode; + switch (p.Mode) + { + case PetMode.Both: + ChatDialog.ReceiveChat(GameLanguage.PetMode_Both, ChatType.Hint); + break; + case PetMode.MoveOnly: + ChatDialog.ReceiveChat(GameLanguage.PetMode_MoveOnly, ChatType.Hint); + break; + case PetMode.AttackOnly: + ChatDialog.ReceiveChat(GameLanguage.PetMode_AttackOnly, ChatType.Hint); + break; + case PetMode.None: + ChatDialog.ReceiveChat(GameLanguage.PetMode_None, ChatType.Hint); + break; + case PetMode.FocusMasterTarget: + ChatDialog.ReceiveChat(GameLanguage.PetMode_FocusMasterTarget, ChatType.Hint); + break; + } + } + + private void ObjectItem(S.ObjectItem p) + { + ItemObject ob = new ItemObject(p.ObjectID); + ob.Load(p); + /* + string[] Warnings = new string[] {"HeroNecklace","AdamantineNecklace","8TrigramWheel","HangMaWheel","BaekTaGlove","SpiritReformer","BokMaWheel","BoundlessRing","ThunderRing","TaeGukRing","OmaSpiritRing","NobleRing"}; + if (Warnings.Contains(p.Name)) + { + ChatDialog.ReceiveChat(string.Format("{0} at {1}", p.Name, p.Location), ChatType.Hint); + } + */ + } + private void ObjectGold(S.ObjectGold p) + { + ItemObject ob = new ItemObject(p.ObjectID); + ob.Load(p); + } + private void GainedItem(S.GainedItem p) + { + Bind(p.Item); + AddItem(p.Item); + User.RefreshStats(); + + OutputMessage(string.Format(GameLanguage.YouGained, p.Item.FriendlyName)); + } + private void GainedQuestItem(S.GainedQuestItem p) + { + Bind(p.Item); + AddQuestItem(p.Item); + } + + private void GainedGold(S.GainedGold p) + { + if (p.Gold == 0) return; + + Gold += p.Gold; + SoundManager.PlaySound(SoundList.Gold); + OutputMessage(string.Format(GameLanguage.YouGained2, p.Gold, GameLanguage.Gold)); + } + private void LoseGold(S.LoseGold p) + { + Gold -= p.Gold; + SoundManager.PlaySound(SoundList.Gold); + } + private void GainedCredit(S.GainedCredit p) + { + if (p.Credit == 0) return; + + Credit += p.Credit; + SoundManager.PlaySound(SoundList.Gold); + OutputMessage(string.Format(GameLanguage.YouGained2, p.Credit, GameLanguage.Credit)); + } + private void LoseCredit(S.LoseCredit p) + { + Credit -= p.Credit; + SoundManager.PlaySound(SoundList.Gold); + } + private void ObjectMonster(S.ObjectMonster p) + { + var found = false; + var mob = (MonsterObject)MapControl.Objects.Find(ob => ob.ObjectID == p.ObjectID); + if (mob != null) + found = true; + if (!found) + mob = new MonsterObject(p.ObjectID); + mob.Load(p, found); + } + private void ObjectAttack(S.ObjectAttack p) + { + if (p.ObjectID == User.ObjectID && !Observing) return; + + QueuedAction action = null; + + for (int i = MapControl.Objects.Count - 1; i >= 0; i--) + { + MapObject ob = MapControl.Objects[i]; + if (ob.ObjectID != p.ObjectID) continue; + action = new QueuedAction { Action = MirAction.Attack1, Direction = p.Direction, Location = p.Location, Params = new List() }; + action.Params.Add(p.Spell); + action.Params.Add(p.Level); + ob.ActionFeed.Add(action); + return; + } + } + private void Struck(S.Struck p) + { + uint attackerID = p.AttackerID; + User.StruckWeapon = -1; + for (int j = 0; j < MapControl.Objects.Count; j++) + { + MapObject ob = MapControl.Objects[j]; + if (ob.ObjectID != attackerID) continue; + if (ob.Race != ObjectType.Player) break; + PlayerObject player = (PlayerObject)ob; + User.StruckWeapon = player.Weapon; + break; + } + User.PlayStruckSound(); + } + private void ObjectStruck(S.ObjectStruck p) + { + if (p.ObjectID == User.ObjectID) return; + + for (int i = MapControl.Objects.Count - 1; i >= 0; i--) + { + MapObject ob = MapControl.Objects[i]; + if (ob.ObjectID != p.ObjectID) continue; + + uint attackerID = p.AttackerID; + ob.StruckWeapon = -1; + for (int j = 0; j < MapControl.Objects.Count; j++) + { + MapObject ob2 = MapControl.Objects[j]; + if (ob2.ObjectID != attackerID) continue; + if (ob2.Race != ObjectType.Player) break; + PlayerObject player = (PlayerObject)ob2; + ob.StruckWeapon = player.Weapon; + break; + } + ob.PlayStruckSound(); + + return; + } + } + + private void DamageIndicator(S.DamageIndicator p) + { + if (Settings.DisplayDamage) + { + for (int i = MapControl.Objects.Count - 1; i >= 0; i--) + { + MapObject obj = MapControl.Objects[i]; + if (obj.ObjectID != p.ObjectID) continue; + + if (obj.Damages.Count >= 10) return; + + switch (p.Type) + { + case DamageType.Hit: //add damage level colours + obj.Damages.Add(new Damage(p.Damage.ToString("#,##0"), 1000, obj.Race == ObjectType.Player ? Color.Red : Color.White, 50)); + break; + case DamageType.Miss: + obj.Damages.Add(new Damage("Miss", 1200, obj.Race == ObjectType.Player ? Color.LightCoral : Color.LightGray, 50)); + break; + case DamageType.Critical: + obj.Damages.Add(new Damage("Crit", 1000, obj.Race == ObjectType.Player ? Color.DarkRed : Color.DarkRed, 50) { Offset = 15 }); + break; + } + } + } + } + + private void DuraChanged(S.DuraChanged p) + { + UserItem item = null; + for (int i = 0; i < User.Inventory.Length; i++) + if (User.Inventory[i] != null && User.Inventory[i].UniqueID == p.UniqueID) + { + item = User.Inventory[i]; + break; + } + + + if (item == null) + for (int i = 0; i < User.Equipment.Length; i++) + { + if (User.Equipment[i] != null && User.Equipment[i].UniqueID == p.UniqueID) + { + item = User.Equipment[i]; + break; + } + } + + if (item == null) return; + + item.CurrentDura = p.CurrentDura; + + if (item.CurrentDura == 0) + { + User.RefreshStats(); + switch (item.Info.Type) + { + default: + ChatDialog.ReceiveChat(string.Format("{0}'s dura has dropped to 0.", item.Info.FriendlyName), ChatType.System); + break; + } + + } + + if (HoverItem == item) + { + DisposeItemLabel(); + CreateItemLabel(item); + } + } + private void HealthChanged(S.HealthChanged p) + { + User.HP = p.HP; + User.MP = p.MP; + + User.PercentHealth = (byte)(User.HP / (float)User.Stats[Stat.HP] * 100); + } + + private void DeleteQuestItem(S.DeleteQuestItem p) + { + for (int i = 0; i < User.QuestInventory.Length; i++) + { + UserItem item = User.QuestInventory[i]; + + if (item == null || item.UniqueID != p.UniqueID) continue; + + if (item.Count == p.Count) + User.QuestInventory[i] = null; + else + item.Count -= p.Count; + break; + } + } + + private void DeleteItem(S.DeleteItem p) + { + UserObject actor = null; + for (int i = 0; i < User.Inventory.Length; i++) + { + if (actor != null) break; + UserItem item = User.Inventory[i]; + + if (item == null || item.UniqueID != p.UniqueID) continue; + + if (item.Count == p.Count) + User.Inventory[i] = null; + else + item.Count -= p.Count; + actor = User; + } + + if (actor == null) + { + for (int i = 0; i < User.Equipment.Length; i++) + { + if (actor != null) break; + UserItem item = User.Equipment[i]; + + if (item == null || item.UniqueID != p.UniqueID) continue; + + if (item.Count == p.Count) + User.Equipment[i] = null; + else + item.Count -= p.Count; + actor = User; + } + } + + if (actor == null) + { + for (int i = 0; i < Storage.Length; i++) + { + var item = Storage[i]; + if (item == null || item.UniqueID != p.UniqueID) continue; + + if (item.Count == p.Count) + Storage[i] = null; + else + item.Count -= p.Count; + break; + } + } + actor?.RefreshStats(); + } + private void Death(S.Death p) + { + User.Dead = true; + + User.ActionFeed.Add(new QueuedAction { Action = MirAction.Die, Direction = p.Direction, Location = p.Location }); + ShowReviveMessage = true; + + LogTime = 0; + } + private void ObjectDied(S.ObjectDied p) + { + if (p.ObjectID == User.ObjectID) return; + + for (int i = MapControl.Objects.Count - 1; i >= 0; i--) + { + MapObject ob = MapControl.Objects[i]; + if (ob.ObjectID != p.ObjectID) continue; + + switch(p.Type) + { + default: + ob.ActionFeed.Add(new QueuedAction { Action = MirAction.Die, Direction = p.Direction, Location = p.Location }); + ob.Dead = true; + break; + case 1: + MapControl.Effects.Add(new Effect(Libraries.Magic2, 690, 10, 1000, ob.CurrentLocation)); + ob.Remove(); + break; + } + + if (ob.ObjectID == MapObject.TargetObjectID) + MapObject.TargetObjectID = 0; + return; + } + } + private void ColourChanged(S.ColourChanged p) + { + User.NameColour = p.NameColour; + } + private void ObjectColourChanged(S.ObjectColourChanged p) + { + if (p.ObjectID == User.ObjectID) return; + + for (int i = MapControl.Objects.Count - 1; i >= 0; i--) + { + MapObject ob = MapControl.Objects[i]; + if (ob.ObjectID != p.ObjectID) continue; + ob.NameColour = p.NameColour; + return; + } + } + + private void ObjectGuildNameChanged(S.ObjectGuildNameChanged p) + { + if (p.ObjectID == User.ObjectID) return; + + for (int i = MapControl.Objects.Count - 1; i >= 0; i--) + { + MapObject ob = MapControl.Objects[i]; + if (ob.ObjectID != p.ObjectID) continue; + PlayerObject obPlayer = (PlayerObject)ob; + obPlayer.GuildName = p.GuildName; + return; + } + } + private void GainExperience(S.GainExperience p) + { + OutputMessage(string.Format(GameLanguage.ExperienceGained, p.Amount)); + MapObject.User.Experience += p.Amount; + } + + private void LevelChanged(S.LevelChanged p) + { + User.Level = p.Level; + User.Experience = p.Experience; + User.MaxExperience = p.MaxExperience; + User.RefreshStats(); + OutputMessage(GameLanguage.LevelUp); + User.Effects.Add(new Effect(Libraries.Magic2, 1200, 20, 2000, User)); + SoundManager.PlaySound(SoundList.LevelUp); + ChatDialog.ReceiveChat(GameLanguage.LevelUp, ChatType.LevelUp); + } + private void ObjectLeveled(S.ObjectLeveled p) + { + for (int i = MapControl.Objects.Count - 1; i >= 0; i--) + { + MapObject ob = MapControl.Objects[i]; + if (ob.ObjectID != p.ObjectID) continue; + ob.Effects.Add(new Effect(Libraries.Magic2, 1180, 16, 2500, ob)); + SoundManager.PlaySound(SoundList.LevelUp); + return; + } + } + private void ObjectHarvest(S.ObjectHarvest p) + { + for (int i = MapControl.Objects.Count - 1; i >= 0; i--) + { + MapObject ob = MapControl.Objects[i]; + if (ob.ObjectID != p.ObjectID) continue; + ob.ActionFeed.Add(new QueuedAction { Action = MirAction.Harvest, Direction = ob.Direction, Location = ob.CurrentLocation }); + return; + } + } + private void ObjectHarvested(S.ObjectHarvested p) + { + for (int i = MapControl.Objects.Count - 1; i >= 0; i--) + { + MapObject ob = MapControl.Objects[i]; + if (ob.ObjectID != p.ObjectID) continue; + return; + } + } + private void ObjectNPC(S.ObjectNPC p) + { + NPCObject ob = new NPCObject(p.ObjectID); + ob.Load(p); + } + private void NPCResponse(S.NPCResponse p) + { + NPCTime = 0; + NPCDialog.BigButtons.Clear(); + NPCDialog.BigButtonDialog.Hide(); + NPCDialog.NewText(p.Page); + + if (p.Page.Count > 0 || NPCDialog.BigButtons.Count > 0) + NPCDialog.Show(); + else + NPCDialog.Hide(); + + NPCGoodsDialog.Hide(); + NPCSubGoodsDialog.Hide(); + NPCDropDialog.Hide(); + StorageDialog.Hide(); + RefineDialog.Hide(); + StorageDialog.Hide(); + TrustMerchantDialog.Hide(); + QuestListDialog.Hide(); + } + + private void NPCUpdate(S.NPCUpdate p) + { + GameScene.NPCID = p.NPCID; //Updates the client with the correct NPC ID if it's manually called from the client + } + + private void NPCImageUpdate(S.NPCImageUpdate p) + { + for (int i = MapControl.Objects.Count - 1; i >= 0; i--) + { + MapObject ob = MapControl.Objects[i]; + if (ob.ObjectID != p.ObjectID || ob.Race != ObjectType.Merchant) continue; + + NPCObject npc = (NPCObject)ob; + npc.Image = p.Image; + npc.Colour = p.Colour; + + npc.LoadLibrary(); + return; + } + } + private void DefaultNPC(S.DefaultNPC p) + { + GameScene.DefaultNPCID = p.ObjectID; //Updates the client with the correct Default NPC ID + } + + + private void ObjectHide(S.ObjectHide p) + { + for (int i = MapControl.Objects.Count - 1; i >= 0; i--) + { + MapObject ob = MapControl.Objects[i]; + if (ob.ObjectID != p.ObjectID) continue; + ob.ActionFeed.Add(new QueuedAction { Action = MirAction.Hide, Direction = ob.Direction, Location = ob.CurrentLocation }); + return; + } + } + private void ObjectShow(S.ObjectShow p) + { + for (int i = MapControl.Objects.Count - 1; i >= 0; i--) + { + MapObject ob = MapControl.Objects[i]; + if (ob.ObjectID != p.ObjectID) continue; + ob.ActionFeed.Add(new QueuedAction { Action = MirAction.Show, Direction = ob.Direction, Location = ob.CurrentLocation }); + return; + } + } + private void Poisoned(S.Poisoned p) + { + var previousPoisons = User.Poison; + + User.Poison = p.Poison; + if (p.Poison.HasFlag(PoisonType.Stun) || p.Poison.HasFlag(PoisonType.Frozen) || p.Poison.HasFlag(PoisonType.Paralysis)) + { + User.ClearMagic(); + } + } + + private void ObjectPoisoned(S.ObjectPoisoned p) + { + for (int i = MapControl.Objects.Count - 1; i >= 0; i--) + { + MapObject ob = MapControl.Objects[i]; + if (ob.ObjectID != p.ObjectID) continue; + ob.Poison = p.Poison; + return; + } + } + private void MapChanged(S.MapChanged p) + { + var isCurrentMap = (MapControl.Index == p.MapIndex); + + if (isCurrentMap) + MapControl.ResetMap(); + else + { + MapControl.Index = p.MapIndex; + MapControl.FileName = Path.Combine(Settings.MapPath, p.FileName + ".map"); + MapControl.Title = p.Title; + MapControl.MiniMap = p.MiniMap; + MapControl.BigMap = p.BigMap; + MapControl.Lights = p.Lights; + MapControl.MapDarkLight = p.MapDarkLight; + MapControl.Music = p.Music; + MapControl.LoadMap(); + } + + MapControl.NextAction = 0; + Scene.MapControl.AutoPath = false; + Scene.MainDialog.MapLabel.Text = p.Title; + User.CurrentLocation = p.Location; + User.MapLocation = p.Location; + MapControl.AddObject(User); + + User.Direction = p.Direction; + + User.QueuedAction = null; + User.ActionFeed.Clear(); + User.ClearMagic(); + User.SetAction(); + + MapControl.FloorValid = false; + MapControl.InputDelay = CMain.Time + 400; + } + private void ObjectTeleportOut(S.ObjectTeleportOut p) + { + for (int i = MapControl.Objects.Count - 1; i >= 0; i--) + { + MapObject ob = MapControl.Objects[i]; + if (ob.ObjectID != p.ObjectID) continue; + Effect effect = null; + + bool playDefaultSound = true; + + switch (p.Type) + { + case 1: //Yimoogi + { + effect = new Effect(Libraries.Magic2, 1300, 10, 500, ob.CurrentLocation); + break; + } + default: + { + effect = new Effect(Libraries.Magic, 250, 10, 500, ob.CurrentLocation); + break; + } + } + + MapControl.Effects.Add(effect); + + return; + } + } + private void ObjectTeleportIn(S.ObjectTeleportIn p) + { + for (int i = MapControl.Objects.Count - 1; i >= 0; i--) + { + MapObject ob = MapControl.Objects[i]; + if (ob.ObjectID != p.ObjectID) continue; + + bool playDefaultSound = true; + + switch (p.Type) + { + default: + { + ob.Effects.Add(new Effect(Libraries.Magic, 260, 10, 500, ob)); + break; + } + } + + return; + } + } + + private void TeleportIn() + { + User.Effects.Add(new Effect(Libraries.Magic, 260, 10, 500, User)); + } + private void NPCGoods(S.NPCGoods p) + { + for (int i = 0; i < p.List.Count; i++) + { + p.List[i].Info = GetInfo(p.List[i].ItemIndex); + } + + NPCRate = p.Rate; + HideAddedStoreStats = p.HideAddedStats; + + if (!NPCDialog.Visible) return; + + switch (p.Type) + { + case PanelType.Buy: + NPCGoodsDialog.NewGoods(p.List); + NPCGoodsDialog.Show(); + break; + case PanelType.BuySub: + NPCSubGoodsDialog.NewGoods(p.List); + NPCSubGoodsDialog.Show(); + break; + } + } + + private void NPCSell() + { + if (!NPCDialog.Visible) return; + NPCDropDialog.PType = PanelType.Sell; + NPCDropDialog.Show(); + } + private void NPCRepair(S.NPCRepair p) + { + NPCRate = p.Rate; + if (!NPCDialog.Visible) return; + NPCDropDialog.PType = PanelType.Repair; + NPCDropDialog.Show(); + } + private void NPCStorage() + { + if (NPCDialog.Visible) + StorageDialog.Show(); + } + private void NPCRequestInput(S.NPCRequestInput p) + { + MirInputBox inputBox = new MirInputBox("Please enter the required information."); + + inputBox.OKButton.Click += (o1, e1) => + { + Network.Enqueue(new C.NPCConfirmInput { Value = inputBox.InputTextBox.Text, NPCID = p.NPCID, PageName = p.PageName }); + inputBox.Dispose(); + }; + inputBox.Show(); + } + + private void NPCSRepair(S.NPCSRepair p) + { + NPCRate = p.Rate; + if (!NPCDialog.Visible) return; + NPCDropDialog.PType = PanelType.SpecialRepair; + NPCDropDialog.Show(); + } + + private void NPCRefine(S.NPCRefine p) + { + NPCRate = p.Rate; + if (!NPCDialog.Visible) return; + NPCDropDialog.PType = PanelType.Refine; + if (p.Refining) + { + NPCDropDialog.Hide(); + NPCDialog.Hide(); + } + else + NPCDropDialog.Show(); + } + + private void NPCCheckRefine(S.NPCCheckRefine p) + { + if (!NPCDialog.Visible) return; + NPCDropDialog.PType = PanelType.CheckRefine; + NPCDropDialog.Show(); + } + + private void NPCCollectRefine(S.NPCCollectRefine p) + { + if (!NPCDialog.Visible) return; + NPCDialog.Hide(); + } + + private void NPCReplaceWedRing(S.NPCReplaceWedRing p) + { + if (!NPCDialog.Visible) return; + NPCRate = p.Rate; + NPCDropDialog.PType = PanelType.ReplaceWedRing; + NPCDropDialog.Show(); + } + + + private void SellItem(S.SellItem p) + { + MirItemCell cell = InventoryDialog.GetCell(p.UniqueID) ?? BeltDialog.GetCell(p.UniqueID); + + if (cell == null) return; + + cell.Locked = false; + + if (!p.Success) return; + + if (p.Count == cell.Item.Count) + cell.Item = null; + else + cell.Item.Count -= p.Count; + + User.RefreshStats(); + } + private void RepairItem(S.RepairItem p) + { + MirItemCell cell = InventoryDialog.GetCell(p.UniqueID) ?? BeltDialog.GetCell(p.UniqueID); + + if (cell == null) return; + + cell.Locked = false; + } + private void ItemRepaired(S.ItemRepaired p) + { + UserItem item = null; + for (int i = 0; i < User.Inventory.Length; i++) + { + if (User.Inventory[i] != null && User.Inventory[i].UniqueID == p.UniqueID) + { + item = User.Inventory[i]; + break; + } + } + + if (item == null) + { + for (int i = 0; i < User.Equipment.Length; i++) + { + if (User.Equipment[i] != null && User.Equipment[i].UniqueID == p.UniqueID) + { + item = User.Equipment[i]; + break; + } + } + } + + if (item == null) return; + + item.MaxDura = p.MaxDura; + item.CurrentDura = p.CurrentDura; + + if (HoverItem == item) + { + DisposeItemLabel(); + CreateItemLabel(item); + } + } + + private void ItemSealChanged(S.ItemSealChanged p) + { + UserItem item = null; + for (int i = 0; i < User.Inventory.Length; i++) + { + if (User.Inventory[i] != null && User.Inventory[i].UniqueID == p.UniqueID) + { + item = User.Inventory[i]; + break; + } + } + + if (item == null) + { + for (int i = 0; i < User.Equipment.Length; i++) + { + if (User.Equipment[i] != null && User.Equipment[i].UniqueID == p.UniqueID) + { + item = User.Equipment[i]; + break; + } + } + } + + if (item == null) return; + + item.SealedInfo = new SealedInfo { ExpiryDate = p.ExpiryDate }; + + if (HoverItem == item) + { + DisposeItemLabel(); + CreateItemLabel(item); + } + } + + private void ItemUpgraded(S.ItemUpgraded p) + { + UserItem item = null; + MirGridType grid = MirGridType.Inventory; + for (int i = 0; i < User.Inventory.Length; i++) + { + if (User.Inventory[i] != null && User.Inventory[i].UniqueID == p.Item.UniqueID) + { + item = User.Inventory[i]; + break; + } + } + + if (item == null) return; + + item.AddedStats.Clear(); + item.AddedStats.Add(p.Item.AddedStats); + + item.MaxDura = p.Item.MaxDura; + item.RefineAdded = p.Item.RefineAdded; + + switch (grid) + { + case MirGridType.Inventory: + InventoryDialog.DisplayItemGridEffect(item.UniqueID, 0); + break; + } + + + if (HoverItem == item) + { + DisposeItemLabel(); + CreateItemLabel(item); + } + } + + private void NewMagic(S.NewMagic p) + { + ClientMagic magic = p.Magic; + + UserObject actor = User; + + actor.Magics.Add(magic); + actor.RefreshStats(); + foreach (SkillBarDialog Bar in SkillBarDialogs) + { + Bar.Update(); + } + } + + private void RemoveMagic(S.RemoveMagic p) + { + User.Magics.RemoveAt(p.PlaceId); + User.RefreshStats(); + foreach (SkillBarDialog Bar in SkillBarDialogs) + { + Bar.Update(); + } + } + + private void MagicLeveled(S.MagicLeveled p) + { + for (int i = 0; i < User.Magics.Count; i++) + { + ClientMagic magic = User.Magics[i]; + if (magic.Spell != p.Spell) continue; + + if (magic.Level != p.Level) + { + magic.Level = p.Level; + User.RefreshStats(); + } + + magic.Experience = p.Experience; + break; + } + } + private void Magic(S.Magic p) + { + User.Spell = p.Spell; + User.Cast = p.Cast; + User.TargetID = p.TargetID; + User.TargetPoint = p.Target; + User.SpellLevel = p.Level; + User.SecondaryTargetIDs = p.SecondaryTargetIDs; + + if (!p.Cast) return; + + ClientMagic magic = User.GetMagic(p.Spell); + magic.CastTime = CMain.Time; + } + + private void MagicDelay(S.MagicDelay p) + { + ClientMagic magic; + magic = User.GetMagic(p.Spell); + magic.Delay = p.Delay; + } + + private void MagicCast(S.MagicCast p) + { + ClientMagic magic = User.GetMagic(p.Spell); + magic.CastTime = CMain.Time; + } + + private void ObjectMagic(S.ObjectMagic p) + { + if (p.SelfBroadcast == false && p.ObjectID == User.ObjectID && !Observing) return; + + for (int i = MapControl.Objects.Count - 1; i >= 0; i--) + { + MapObject ob = MapControl.Objects[i]; + if (ob.ObjectID != p.ObjectID) continue; + + QueuedAction action = new QueuedAction { Action = MirAction.Spell, Direction = p.Direction, Location = p.Location, Params = new List() }; + action.Params.Add(p.Spell); + action.Params.Add(p.TargetID); + action.Params.Add(p.Target); + action.Params.Add(p.Cast); + action.Params.Add(p.Level); + action.Params.Add(p.SecondaryTargetIDs); + + ob.ActionFeed.Add(action); + return; + } + } + + private void ObjectProjectile(S.ObjectProjectile p) + { + MapObject source = MapControl.GetObject(p.Source); + + if (source == null) return; + } + + private void ObjectEffect(S.ObjectEffect p) + { + for (int i = MapControl.Objects.Count - 1; i >= 0; i--) + { + MapObject ob = MapControl.Objects[i]; + if (ob.ObjectID != p.ObjectID) continue; + PlayerObject player; + + switch (p.Effect) + { + case SpellEffect.Teleport: + ob.Effects.Add(new Effect(Libraries.Magic, 1600, 10, 600, ob)); + break; + case SpellEffect.Healing: + SoundManager.PlaySound(20000 + (ushort)Spell.Healing * 10 + 1); + ob.Effects.Add(new Effect(Libraries.Magic, 370, 10, 800, ob)); + break; + case SpellEffect.MagicShieldUp: + if (ob.Race != ObjectType.Player) return; + player = (PlayerObject)ob; + if (player.ShieldEffect != null) + { + player.ShieldEffect.Clear(); + player.ShieldEffect.Remove(); + } + player.MagicShield = true; + player.Effects.Add(player.ShieldEffect = new Effect(Libraries.Magic, 3890, 3, 600, ob) { Repeat = true }); + break; + case SpellEffect.MagicShieldDown: + if (ob.Race != ObjectType.Player) return; + player = (PlayerObject)ob; + if (player.ShieldEffect != null) + { + player.ShieldEffect.Clear(); + player.ShieldEffect.Remove(); + } + player.ShieldEffect = null; + player.MagicShield = false; + break; + } + + return; + } + } + + private void RangeAttack(S.RangeAttack p) + { + User.TargetID = p.TargetID; + User.TargetPoint = p.Target; + User.Spell = p.Spell; + } + + private void Pushed(S.Pushed p) + { + User.ActionFeed.Add(new QueuedAction { Action = MirAction.Pushed, Direction = p.Direction, Location = p.Location }); + } + + private void ObjectPushed(S.ObjectPushed p) + { + if (p.ObjectID == User.ObjectID) return; + + for (int i = MapControl.Objects.Count - 1; i >= 0; i--) + { + MapObject ob = MapControl.Objects[i]; + if (ob.ObjectID != p.ObjectID) continue; + ob.ActionFeed.Add(new QueuedAction { Action = MirAction.Pushed, Direction = p.Direction, Location = p.Location }); + + return; + } + } + + private void ObjectName(S.ObjectName p) + { + if (p.ObjectID == User.ObjectID) return; + + for (int i = MapControl.Objects.Count - 1; i >= 0; i--) + { + MapObject ob = MapControl.Objects[i]; + if (ob.ObjectID != p.ObjectID) continue; + ob.Name = p.Name; + return; + } + } + private void UserStorage(S.UserStorage p) + { + if(Storage.Length != p.Storage.Length) + { + Array.Resize(ref Storage, p.Storage.Length); + } + + Storage = p.Storage; + + for (int i = 0; i < Storage.Length; i++) + { + if (Storage[i] == null) continue; + Bind(Storage[i]); + } + } + private void SwitchGroup(S.SwitchGroup p) + { + GroupDialog.AllowGroup = p.AllowGroup; + + if (!p.AllowGroup && GroupDialog.GroupList.Count > 0) + DeleteGroup(); + } + + private void DeleteGroup() + { + GroupDialog.GroupList.Clear(); + GroupDialog.GroupMembersMap.Clear(); + BigMapViewPort.PlayerLocations.Clear(); + ChatDialog.ReceiveChat("You have left the group.", ChatType.Group); + } + + private void DeleteMember(S.DeleteMember p) + { + GroupDialog.GroupList.Remove(p.Name); + GroupDialog.GroupMembersMap.Remove(p.Name); + BigMapViewPort.PlayerLocations.Remove(p.Name); + ChatDialog.ReceiveChat(string.Format("-{0} has left the group.", p.Name), ChatType.Group); + } + + private void GroupInvite(S.GroupInvite p) + { + MirMessageBox messageBox = new MirMessageBox(string.Format("Do you want to group with {0}?", p.Name), MirMessageBoxButtons.YesNo); + + messageBox.YesButton.Click += (o, e) => + { + Network.Enqueue(new C.GroupInvite { AcceptInvite = true }); + }; + messageBox.NoButton.Click += (o, e) => Network.Enqueue(new C.GroupInvite { AcceptInvite = false }); + messageBox.Show(); + } + private void AddMember(S.AddMember p) + { + GroupDialog.GroupList.Add(p.Name); + ChatDialog.ReceiveChat(string.Format("-{0} has joined the group.", p.Name), ChatType.Group); + } + private void GroupMembersMap(S.GroupMembersMap p) + { + if (!GroupDialog.GroupMembersMap.ContainsKey(p.PlayerName)) + GroupDialog.GroupMembersMap.Add(p.PlayerName, p.PlayerMap); + else + { + GroupDialog.GroupMembersMap.Remove(p.PlayerName); + GroupDialog.GroupMembersMap.Add(p.PlayerName, p.PlayerMap); + } + } + private void SendMemberLocation(S.SendMemberLocation p) + { + if (!BigMapViewPort.PlayerLocations.ContainsKey(p.MemberName)) + BigMapViewPort.PlayerLocations.Add(p.MemberName, p.MemberLocation); + else + { + BigMapViewPort.PlayerLocations.Remove(p.MemberName); + BigMapViewPort.PlayerLocations.Add(p.MemberName, p.MemberLocation); + } + } + private void Revived() + { + User.SetAction(); + User.Dead = false; + User.Effects.Add(new Effect(Libraries.Magic2, 1220, 20, 2000, User)); + } + private void ObjectRevived(S.ObjectRevived p) + { + for (int i = MapControl.Objects.Count - 1; i >= 0; i--) + { + MapObject ob = MapControl.Objects[i]; + if (ob.ObjectID != p.ObjectID) continue; + if (p.Effect) + { + ob.Effects.Add(new Effect(Libraries.Magic2, 1220, 20, 2000, ob)); + } + ob.Dead = false; + ob.ActionFeed.Clear(); + ob.ActionFeed.Add(new QueuedAction { Action = MirAction.Revive, Direction = ob.Direction, Location = ob.CurrentLocation }); + return; + } + } + private void SpellToggle(S.SpellToggle p) + { + UserObject actor = User; + string prefix = string.Empty; + + switch (p.Spell) + { + //Warrior + case Spell.Slaying: + actor.Slaying = p.CanUse; + break; + case Spell.Thrusting: + actor.Thrusting = p.CanUse; + ChatDialog.ReceiveChat(prefix + (actor.Thrusting ? "Use Thrusting." : "Do not use Thrusting."), ChatType.Hint); + break; + case Spell.HalfMoon: + actor.HalfMoon = p.CanUse; + ChatDialog.ReceiveChat(prefix + (actor.HalfMoon ? "Use HalfMoon." : "Do not use HalfMoon."), ChatType.Hint); + break; + case Spell.FlamingSword: + actor.FlamingSword = p.CanUse; + if (actor.FlamingSword) + ChatDialog.ReceiveChat(prefix + GameLanguage.WeaponSpiritFire, ChatType.Hint); + else + ChatDialog.ReceiveChat(prefix + GameLanguage.SpiritsFireDisappeared, ChatType.System); + break; + } + } + + private void ObjectHealth(S.ObjectHealth p) + { + for (int i = MapControl.Objects.Count - 1; i >= 0; i--) + { + MapObject ob = MapControl.Objects[i]; + if (ob.ObjectID != p.ObjectID) continue; + ob.PercentHealth = p.Percent; + ob.HealthTime = CMain.Time + p.Expire * 1000; + return; + } + } + + private void ObjectMana(S.ObjectMana p) + { + for (int i = MapControl.Objects.Count - 1; i >= 0; i--) + { + MapObject ob = MapControl.Objects[i]; + if (ob.ObjectID != p.ObjectID) continue; + ob.PercentMana = p.Percent; + return; + } + } + + private void MapEffect(S.MapEffect p) + { + switch (p.Effect) + { + } + } + + private void ObjectRangeAttack(S.ObjectRangeAttack p) + { + if (p.ObjectID == User.ObjectID && + !Observing) return; + + for (int i = MapControl.Objects.Count - 1; i >= 0; i--) + { + MapObject ob = MapControl.Objects[i]; + if (ob.ObjectID != p.ObjectID) continue; + QueuedAction action = new QueuedAction { Action = MirAction.AttackRange1, Direction = p.Direction, Location = p.Location, Params = new List() }; + action.Params.Add(p.TargetID); + action.Params.Add(p.Target); + action.Params.Add(p.Spell); + action.Params.Add(new List()); + action.Params.Add(p.Level); + + ob.ActionFeed.Add(action); + return; + } + } + + private void AddBuff(S.AddBuff p) + { + ClientBuff buff = p.Buff; + + if (!buff.Paused) + { + buff.ExpireTime += CMain.Time; + } + + if (buff.ObjectID == User.ObjectID) + { + for (int i = 0; i < BuffsDialog.Buffs.Count; i++) + { + if (BuffsDialog.Buffs[i].Type != buff.Type) continue; + + BuffsDialog.Buffs[i] = buff; + User.RefreshStats(); + return; + } + + BuffsDialog.Buffs.Add(buff); + BuffsDialog.CreateBuff(buff); + + User.RefreshStats(); + } + + if (!buff.Visible || buff.ObjectID <= 0) return; + + for (int i = MapControl.Objects.Count - 1; i >= 0; i--) + { + MapObject ob = MapControl.Objects[i]; + if (ob.ObjectID != buff.ObjectID) continue; + if ((ob is PlayerObject) || (ob is MonsterObject)) + { + if (!ob.Buffs.Contains(buff.Type)) + { + ob.Buffs.Add(buff.Type); + } + + ob.AddBuffEffect(buff.Type); + return; + } + } + } + + private void RemoveBuff(S.RemoveBuff p) + { + if (User.ObjectID == p.ObjectID) + { + for (int i = 0; i < BuffsDialog.Buffs.Count; i++) + { + if (BuffsDialog.Buffs[i].Type != p.Type) continue; + + BuffsDialog.RemoveBuff(i); + BuffsDialog.Buffs.RemoveAt(i); + } + User.RefreshStats(); + } + + if (p.ObjectID <= 0) return; + + for (int i = MapControl.Objects.Count - 1; i >= 0; i--) + { + MapObject ob = MapControl.Objects[i]; + + if (ob.ObjectID != p.ObjectID) continue; + + ob.Buffs.Remove(p.Type); + ob.RemoveBuffEffect(p.Type); + return; + } + } + + private void PauseBuff(S.PauseBuff p) + { + if (User.ObjectID == p.ObjectID) + { + for (int i = 0; i < BuffsDialog.Buffs.Count; i++) + { + if (BuffsDialog.Buffs[i].Type != p.Type) continue; + + User.RefreshStats(); + + if (BuffsDialog.Buffs[i].Paused == p.Paused) return; + + BuffsDialog.Buffs[i].Paused = p.Paused; + + if (p.Paused) + { + BuffsDialog.Buffs[i].ExpireTime -= CMain.Time; + } + else + { + BuffsDialog.Buffs[i].ExpireTime += CMain.Time; + } + } + } + } + + private void ObjectHidden(S.ObjectHidden p) + { + for (int i = MapControl.Objects.Count - 1; i >= 0; i--) + { + MapObject ob = MapControl.Objects[i]; + if (ob.ObjectID != p.ObjectID) continue; + ob.Hidden = p.Hidden; + return; + } + } + + private void ObjectLevelEffects(S.ObjectLevelEffects p) + { + for (int i = MapControl.Objects.Count - 1; i >= 0; i--) + { + MapObject ob = MapControl.Objects[i]; + if (ob.ObjectID != p.ObjectID || ob.Race != ObjectType.Player) continue; + + PlayerObject temp = (PlayerObject)ob; + + temp.LevelEffects = p.LevelEffects; + + temp.SetEffects(); + return; + } + } + + private void RefreshItem(S.RefreshItem p) + { + Bind(p.Item); + + if (SelectedCell != null && SelectedCell.Item.UniqueID == p.Item.UniqueID) + SelectedCell = null; + + if (HoverItem != null && HoverItem.UniqueID == p.Item.UniqueID) + { + DisposeItemLabel(); + CreateItemLabel(p.Item); + } + + for (int i = 0; i < User.Inventory.Length; i++) + { + if (User.Inventory[i] != null && User.Inventory[i].UniqueID == p.Item.UniqueID) + { + User.Inventory[i] = p.Item; + User.RefreshStats(); + return; + } + } + + for (int i = 0; i < User.Equipment.Length; i++) + { + if (User.Equipment[i] != null && User.Equipment[i].UniqueID == p.Item.UniqueID) + { + User.Equipment[i] = p.Item; + User.RefreshStats(); + return; + } + } + } + + private void ObjectSpell(S.ObjectSpell p) + { + SpellObject ob = new SpellObject(p.ObjectID); + ob.Load(p); + } + + private void UserDash(S.UserDash p) + { + if (User.Direction == p.Direction && User.CurrentLocation == p.Location) + { + MapControl.NextAction = 0; + return; + } + MirAction action = User.CurrentAction == MirAction.DashL ? MirAction.DashR : MirAction.DashL; + for (int i = User.ActionFeed.Count - 1; i >= 0; i--) + { + if (User.ActionFeed[i].Action == MirAction.DashR) + { + action = MirAction.DashL; + break; + } + if (User.ActionFeed[i].Action == MirAction.DashL) + { + action = MirAction.DashR; + break; + } + } + + User.ActionFeed.Add(new QueuedAction { Action = action, Direction = p.Direction, Location = p.Location }); + } + + private void UserDashFail(S.UserDashFail p) + { + MapControl.NextAction = 0; + User.ActionFeed.Add(new QueuedAction { Action = MirAction.DashFail, Direction = p.Direction, Location = p.Location }); + } + + private void ObjectDash(S.ObjectDash p) + { + if (p.ObjectID == User.ObjectID) return; + + for (int i = MapControl.Objects.Count - 1; i >= 0; i--) + { + MapObject ob = MapControl.Objects[i]; + if (ob.ObjectID != p.ObjectID) continue; + + MirAction action = MirAction.DashL; + + if (ob.ActionFeed.Count > 0 && ob.ActionFeed[ob.ActionFeed.Count - 1].Action == action) + action = MirAction.DashR; + + ob.ActionFeed.Add(new QueuedAction { Action = action, Direction = p.Direction, Location = p.Location }); + + return; + } + } + + private void ObjectDashFail(S.ObjectDashFail p) + { + if (p.ObjectID == User.ObjectID) return; + + for (int i = MapControl.Objects.Count - 1; i >= 0; i--) + { + MapObject ob = MapControl.Objects[i]; + if (ob.ObjectID != p.ObjectID) continue; + + ob.ActionFeed.Add(new QueuedAction { Action = MirAction.DashFail, Direction = p.Direction, Location = p.Location }); + + return; + } + } + private void SendOutputMessage(S.SendOutputMessage p) + { + OutputMessage(p.Message, p.Type); + } + + private void NPCConsign() + { + if (!NPCDialog.Visible) return; + NPCDropDialog.PType = PanelType.Consign; + NPCDropDialog.Show(); + } + private void NPCMarket(S.NPCMarket p) + { + for (int i = 0; i < p.Listings.Count; i++) + Bind(p.Listings[i].Item); + + TrustMerchantDialog.Show(); + TrustMerchantDialog.UserMode = p.UserMode; + TrustMerchantDialog.Listings = p.Listings; + TrustMerchantDialog.Page = 0; + TrustMerchantDialog.PageCount = p.Pages; + TrustMerchantDialog.UpdateInterface(); + } + private void NPCMarketPage(S.NPCMarketPage p) + { + if (!TrustMerchantDialog.Visible) return; + + for (int i = 0; i < p.Listings.Count; i++) + Bind(p.Listings[i].Item); + + TrustMerchantDialog.Listings.AddRange(p.Listings); + TrustMerchantDialog.Page = (TrustMerchantDialog.Listings.Count - 1) / 10; + TrustMerchantDialog.UpdateInterface(); + } + private void ConsignItem(S.ConsignItem p) + { + MirItemCell cell = InventoryDialog.GetCell(p.UniqueID) ?? BeltDialog.GetCell(p.UniqueID); + + if (cell == null) return; + + cell.Locked = false; + + if (!p.Success) return; + + cell.Item = null; + + User.RefreshStats(); + } + private void MarketFail(S.MarketFail p) + { + TrustMerchantDialog.MarketTime = 0; + switch (p.Reason) + { + case 0: + MirMessageBox.Show("You cannot use the TrustMerchant when dead."); + break; + case 1: + MirMessageBox.Show("You cannot buy from the TrustMerchant without using."); + break; + case 2: + MirMessageBox.Show("This item has already been sold."); + break; + case 3: + MirMessageBox.Show("This item has Expired and cannot be brought."); + break; + case 4: + MirMessageBox.Show(GameLanguage.LowGold); + break; + case 5: + MirMessageBox.Show("You do not have enough weight or space spare to buy this item."); + break; + case 6: + MirMessageBox.Show("You cannot buy your own items."); + break; + case 7: + MirMessageBox.Show("You are too far away from the Trust Merchant."); + break; + case 8: + MirMessageBox.Show("You cannot hold enough gold to get your sale."); + break; + case 9: + MirMessageBox.Show("This item has not met the minimum bid yet."); + break; + case 10: + MirMessageBox.Show("Auction has already ended for this item."); + break; + } + + } + private void MarketSuccess(S.MarketSuccess p) + { + TrustMerchantDialog.MarketTime = 0; + MirMessageBox.Show(p.Message); + } + + private void BaseStatsInfo(S.BaseStatsInfo p) + { + User.CoreStats = p.Stats; + User.RefreshStats(); + } + + private void UserName(S.UserName p) + { + for (int i = 0; i < UserIdList.Count; i++) + if (UserIdList[i].Id == p.Id) + { + UserIdList[i].UserName = p.Name; + break; + } + DisposeItemLabel(); + HoverItem = null; + } + + private void ChatItemStats(S.ChatItemStats p) + { + //for (int i = 0; i < ChatItemList.Count; i++) + // if (ChatItemList[i].ID == p.ChatItemId) + // { + // ChatItemList[i].ItemStats = p.Stats; + // ChatItemList[i].RecievedTick = CMain.Time; + // } + } + + private void GuildInvite(S.GuildInvite p) + { + MirMessageBox messageBox = new MirMessageBox(string.Format("Do you want to join the {0} guild?", p.Name), MirMessageBoxButtons.YesNo); + + messageBox.YesButton.Click += (o, e) => Network.Enqueue(new C.GuildInvite { AcceptInvite = true }); + messageBox.NoButton.Click += (o, e) => Network.Enqueue(new C.GuildInvite { AcceptInvite = false }); + + messageBox.Show(); + } + + private void GuildNameRequest(S.GuildNameRequest p) + { + MirInputBox inputBox = new MirInputBox("Please enter a guild name, length must be 3~20 characters."); + inputBox.InputTextBox.TextBox.KeyPress += (o, e) => + { + string Allowed = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + if (!Allowed.Contains(e.KeyChar) && e.KeyChar != (char)Keys.Back) + e.Handled = true; + }; + inputBox.OKButton.Click += (o, e) => + { + if (inputBox.InputTextBox.Text.Contains('\\')) + { + ChatDialog.ReceiveChat("You cannot use the \\ sign in a guildname!", ChatType.System); + inputBox.InputTextBox.Text = ""; + } + Network.Enqueue(new C.GuildNameReturn { Name = inputBox.InputTextBox.Text }); + inputBox.Dispose(); + }; + inputBox.Show(); + } + + private void GuildRequestWar(S.GuildRequestWar p) + { + MirInputBox inputBox = new MirInputBox("Please enter the guild you would like to go to war with."); + + inputBox.OKButton.Click += (o, e) => + { + Network.Enqueue(new C.GuildWarReturn { Name = inputBox.InputTextBox.Text }); + inputBox.Dispose(); + }; + inputBox.Show(); + } + + private void GuildNoticeChange(S.GuildNoticeChange p) + { + if (p.update == -1) + GuildDialog.NoticeChanged = true; + else + GuildDialog.NoticeChange(p.notice); + } + private void GuildMemberChange(S.GuildMemberChange p) + { + switch (p.Status) + { + case 0: // logged of + GuildDialog.MemberStatusChange(p.Name, false); + break; + case 1: // logged on + ChatDialog.ReceiveChat(String.Format("{0} logged on.", p.Name), ChatType.Guild); + GuildDialog.MemberStatusChange(p.Name, true); + break; + case 2://new member + ChatDialog.ReceiveChat(String.Format("{0} joined guild.", p.Name), ChatType.Guild); + GuildDialog.MemberCount++; + GuildDialog.MembersChanged = true; + break; + case 3://kicked member + ChatDialog.ReceiveChat(String.Format("{0} got removed from the guild.", p.Name), ChatType.Guild); + GuildDialog.MembersChanged = true; + break; + case 4://member left + ChatDialog.ReceiveChat(String.Format("{0} left the guild.", p.Name), ChatType.Guild); + GuildDialog.MembersChanged = true; + break; + case 5://rank change (name or different rank) + GuildDialog.MembersChanged = true; + break; + case 6: //new rank + if (p.Ranks.Count > 0) + GuildDialog.NewRankRecieved(p.Ranks[0]); + break; + case 7: //rank option changed + if (p.Ranks.Count > 0) + GuildDialog.RankChangeRecieved(p.Ranks[0]); + break; + case 8: //my rank changed + if (p.Ranks.Count > 0) + GuildDialog.MyRankChanged(p.Ranks[0]); + break; + case 255: + GuildDialog.NewMembersList(p.Ranks); + break; + } + } + + private void GuildStatus(S.GuildStatus p) + { + if ((User.GuildName == "") && (p.GuildName != "")) + { + GuildDialog.NoticeChanged = true; + GuildDialog.MembersChanged = true; + } + if (p.GuildName == "") + { + GuildDialog.Hide(); + } + + if ((User.GuildName == p.GuildName) && (GuildDialog.Level < p.Level)) + { + //guild leveled + } + bool GuildChange = User.GuildName != p.GuildName; + User.GuildName = p.GuildName; + User.GuildRankName = p.GuildRankName; + GuildDialog.Level = p.Level; + GuildDialog.Experience = p.Experience; + GuildDialog.MaxExperience = p.MaxExperience; + GuildDialog.Gold = p.Gold; + GuildDialog.SparePoints = p.SparePoints; + GuildDialog.MemberCount = p.MemberCount; + GuildDialog.MaxMembers = p.MaxMembers; + GuildDialog.Voting = p.Voting; + GuildDialog.ItemCount = p.ItemCount; + GuildDialog.BuffCount = p.BuffCount; + GuildDialog.StatusChanged(p.MyOptions); + GuildDialog.MyRankId = p.MyRankId; + GuildDialog.UpdateMembers(); + //reset guildbuffs + if (GuildChange) + { + GuildDialog.EnabledBuffs.Clear(); + GuildDialog.UpdateActiveStats(); + RemoveBuff(new S.RemoveBuff { ObjectID = User.ObjectID, Type = BuffType.Guild }); + User.RefreshStats(); + } + } + + private void GuildExpGain(S.GuildExpGain p) + { + //OutputMessage(string.Format("Guild Experience Gained {0}.", p.Amount)); + GuildDialog.Experience += p.Amount; + } + + private void GuildStorageGoldChange(S.GuildStorageGoldChange p) + { + switch (p.Type) + { + case 0: + ChatDialog.ReceiveChat(String.Format("{0} donated {1} gold to guild funds.", p.Name, p.Amount), ChatType.Guild); + GuildDialog.Gold += p.Amount; + break; + case 1: + ChatDialog.ReceiveChat(String.Format("{0} retrieved {1} gold from guild funds.", p.Name, p.Amount), ChatType.Guild); + if (GuildDialog.Gold > p.Amount) + GuildDialog.Gold -= p.Amount; + else + GuildDialog.Gold = 0; + break; + case 2: + if (GuildDialog.Gold > p.Amount) + GuildDialog.Gold -= p.Amount; + else + GuildDialog.Gold = 0; + break; + case 3: + GuildDialog.Gold += p.Amount; + break; + } + } + + private void GuildStorageItemChange(S.GuildStorageItemChange p) + { + MirItemCell fromCell = null; + MirItemCell toCell = null; + switch (p.Type) + { + case 0://store + toCell = GuildDialog.StorageGrid[p.To]; + + if (toCell == null) return; + + toCell.Locked = false; + toCell.Item = p.Item.Item; + Bind(toCell.Item); + if (p.User != User.Id) return; + fromCell = p.From < User.BeltIdx ? BeltDialog.Grid[p.From] : InventoryDialog.Grid[p.From - User.BeltIdx]; + fromCell.Locked = false; + if (fromCell != null) + fromCell.Item = null; + User.RefreshStats(); + break; + case 1://retrieve + fromCell = GuildDialog.StorageGrid[p.From]; + + if (fromCell == null) return; + fromCell.Locked = false; + + if (p.User != User.Id) + { + fromCell.Item = null; + return; + } + toCell = p.To < User.BeltIdx ? BeltDialog.Grid[p.To] : InventoryDialog.Grid[p.To - User.BeltIdx]; + if (toCell == null) return; + toCell.Locked = false; + toCell.Item = fromCell.Item; + fromCell.Item = null; + break; + + case 2: + toCell = GuildDialog.StorageGrid[p.To]; + fromCell = GuildDialog.StorageGrid[p.From]; + + if (toCell == null || fromCell == null) return; + + toCell.Locked = false; + fromCell.Locked = false; + fromCell.Item = toCell.Item; + toCell.Item = p.Item.Item; + + Bind(toCell.Item); + if (fromCell.Item != null) + Bind(fromCell.Item); + break; + case 3://failstore + fromCell = p.From < User.BeltIdx ? BeltDialog.Grid[p.From] : InventoryDialog.Grid[p.From - User.BeltIdx]; + toCell = GuildDialog.StorageGrid[p.To]; + + if (toCell == null || fromCell == null) return; + + toCell.Locked = false; + fromCell.Locked = false; + break; + case 4://failretrieve + toCell = p.To < User.BeltIdx ? BeltDialog.Grid[p.To] : InventoryDialog.Grid[p.To - User.BeltIdx]; + fromCell = GuildDialog.StorageGrid[p.From]; + + if (toCell == null || fromCell == null) return; + + toCell.Locked = false; + fromCell.Locked = false; + break; + case 5://failmove + fromCell = GuildDialog.StorageGrid[p.To]; + toCell = GuildDialog.StorageGrid[p.From]; + + if (toCell == null || fromCell == null) return; + + GuildDialog.StorageGrid[p.From].Locked = false; + GuildDialog.StorageGrid[p.To].Locked = false; + break; + } + } + private void GuildStorageList(S.GuildStorageList p) + { + for (int i = 0; i < p.Items.Length; i++) + { + if (i >= GuildDialog.StorageGrid.Length) break; + if (p.Items[i] == null) + { + GuildDialog.StorageGrid[i].Item = null; + continue; + } + GuildDialog.StorageGrid[i].Item = p.Items[i].Item; + Bind(GuildDialog.StorageGrid[i].Item); + } + } + + private void MarriageRequest(S.MarriageRequest p) + { + MirMessageBox messageBox = new MirMessageBox(string.Format("{0} has asked for your hand in marriage.", p.Name), MirMessageBoxButtons.YesNo); + + messageBox.YesButton.Click += (o, e) => Network.Enqueue(new C.MarriageReply { AcceptInvite = true }); + messageBox.NoButton.Click += (o, e) => { Network.Enqueue(new C.MarriageReply { AcceptInvite = false }); messageBox.Dispose(); }; + + messageBox.Show(); + } + + private void DivorceRequest(S.DivorceRequest p) + { + MirMessageBox messageBox = new MirMessageBox(string.Format("{0} has requested a divorce", p.Name), MirMessageBoxButtons.YesNo); + + messageBox.YesButton.Click += (o, e) => Network.Enqueue(new C.DivorceReply { AcceptInvite = true }); + messageBox.NoButton.Click += (o, e) => { Network.Enqueue(new C.DivorceReply { AcceptInvite = false }); messageBox.Dispose(); }; + + messageBox.Show(); + } + + private bool UpdateGuildBuff(GuildBuff buff, bool Remove = false) + { + for (int i = 0; i < GuildDialog.EnabledBuffs.Count; i++) + { + if (GuildDialog.EnabledBuffs[i].Id == buff.Id) + { + if (Remove) + { + GuildDialog.EnabledBuffs.RemoveAt(i); + } + else + GuildDialog.EnabledBuffs[i] = buff; + return true; + } + } + return false; + } + + private void GuildBuffList(S.GuildBuffList p) + { + //getting the list of all guildbuffs on server? + if (p.GuildBuffs.Count > 0) + GuildDialog.GuildBuffInfos.Clear(); + for (int i = 0; i < p.GuildBuffs.Count; i++) + { + GuildDialog.GuildBuffInfos.Add(p.GuildBuffs[i]); + } + //getting the list of all active/removedbuffs? + for (int i = 0; i < p.ActiveBuffs.Count; i++) + { + //if (p.ActiveBuffs[i].ActiveTimeRemaining > 0) + // p.ActiveBuffs[i].ActiveTimeRemaining = Convert.ToInt32(CMain.Time / 1000) + (p.ActiveBuffs[i].ActiveTimeRemaining * 60); + if (UpdateGuildBuff(p.ActiveBuffs[i], p.Remove == 1)) continue; + if (!(p.Remove == 1)) + { + GuildDialog.EnabledBuffs.Add(p.ActiveBuffs[i]); + //CreateGuildBuff(p.ActiveBuffs[i]); + } + } + + for (int i = 0; i < GuildDialog.EnabledBuffs.Count; i++) + { + if (GuildDialog.EnabledBuffs[i].Info == null) + { + GuildDialog.EnabledBuffs[i].Info = GuildDialog.FindGuildBuffInfo(GuildDialog.EnabledBuffs[i].Id); + } + } + + ClientBuff buff = BuffsDialog.Buffs.FirstOrDefault(e => e.Type == BuffType.Guild); + + if (GuildDialog.EnabledBuffs.Any(e => e.Active)) + { + if (buff == null) + { + buff = new ClientBuff { Type = BuffType.Guild, ObjectID = User.ObjectID, Caster = "Guild", Infinite = true, Values = new int[0] }; + + BuffsDialog.Buffs.Add(buff); + BuffsDialog.CreateBuff(buff); + } + + GuildDialog.UpdateActiveStats(); + } + else + { + RemoveBuff(new S.RemoveBuff { ObjectID = User.ObjectID, Type = BuffType.Guild }); + } + + User.RefreshStats(); + } + + private void TradeRequest(S.TradeRequest p) + { + MirMessageBox messageBox = new MirMessageBox(string.Format("Player {0} has requested to trade with you.", p.Name), MirMessageBoxButtons.YesNo); + + messageBox.YesButton.Click += (o, e) => Network.Enqueue(new C.TradeReply { AcceptInvite = true }); + messageBox.NoButton.Click += (o, e) => { Network.Enqueue(new C.TradeReply { AcceptInvite = false }); messageBox.Dispose(); }; + + messageBox.Show(); + } + private void TradeAccept(S.TradeAccept p) + { + GuestTradeDialog.GuestName = p.Name; + TradeDialog.TradeAccept(); + } + private void TradeGold(S.TradeGold p) + { + GuestTradeDialog.GuestGold = p.Amount; + TradeDialog.ChangeLockState(false); + TradeDialog.RefreshInterface(); + } + private void TradeItem(S.TradeItem p) + { + GuestTradeDialog.GuestItems = p.TradeItems; + TradeDialog.ChangeLockState(false); + TradeDialog.RefreshInterface(); + } + private void TradeConfirm() + { + TradeDialog.TradeReset(); + } + private void TradeCancel(S.TradeCancel p) + { + if (p.Unlock) + { + TradeDialog.ChangeLockState(false); + } + else + { + TradeDialog.TradeReset(); + + MirMessageBox messageBox = new MirMessageBox("Deal cancelled.\r\nTo deal correctly you must face the other party.", MirMessageBoxButtons.OK); + messageBox.Show(); + } + } + + private void ReceiveMail(S.ReceiveMail p) + { + NewMail = false; + NewMailCounter = 0; + User.Mail.Clear(); + + User.Mail = p.Mail.OrderByDescending(e => !e.Locked).ThenByDescending(e => e.DateSent).ToList(); + + foreach(ClientMail mail in User.Mail) + { + foreach(UserItem itm in mail.Items) + { + Bind(itm); + } + } + + //display new mail received + if (User.Mail.Any(e => e.Opened == false)) + { + NewMail = true; + } + + GameScene.Scene.MailListDialog.UpdateInterface(); + } + + private void MailLockedItem(S.MailLockedItem p) + { + MirItemCell cell = InventoryDialog.GetCell(p.UniqueID); + if (cell != null) + cell.Locked = p.Locked; + } + + private void MailSendRequest(S.MailSendRequest p) + { + MirInputBox inputBox = new MirInputBox("Please enter the name of the person you would like to mail."); + + inputBox.OKButton.Click += (o1, e1) => + { + GameScene.Scene.MailComposeParcelDialog.ComposeMail(inputBox.InputTextBox.Text); + GameScene.Scene.InventoryDialog.Show(); + + //open letter dialog, pass in name + inputBox.Dispose(); + }; + + inputBox.Show(); + } + + private void MailSent(S.MailSent p) + { + for (int i = 0; i < InventoryDialog.Grid.Length; i++) + { + if (InventoryDialog.Grid[i].Locked == true) + { + InventoryDialog.Grid[i].Locked = false; + } + } + + for (int i = 0; i < BeltDialog.Grid.Length; i++) + { + if (BeltDialog.Grid[i].Locked == true) + { + BeltDialog.Grid[i].Locked = false; + } + } + + GameScene.Scene.MailComposeParcelDialog.Hide(); + } + + private void ParcelCollected(S.ParcelCollected p) + { + switch(p.Result) + { + case -1: + MirMessageBox messageBox = new MirMessageBox(string.Format("No parcels to collect."), MirMessageBoxButtons.OK); + messageBox.Show(); + break; + case 0: + messageBox = new MirMessageBox(string.Format("All parcels have been collected."), MirMessageBoxButtons.OK); + messageBox.Show(); + break; + case 1: + GameScene.Scene.MailReadParcelDialog.Hide(); + break; + } + } + + private void ResizeInventory(S.ResizeInventory p) + { + Array.Resize(ref User.Inventory, p.Size); + } + + private void ResizeStorage(S.ResizeStorage p) + { + Array.Resize(ref Storage, p.Size); + User.HasExpandedStorage = p.HasExpandedStorage; + User.ExpandedStorageExpiryTime = p.ExpiryTime; + + //StorageDialog.RefreshStorage2(); + } + + private void MailCost(S.MailCost p) + { + if(GameScene.Scene.MailComposeParcelDialog.Visible) + { + if (p.Cost > 0) + SoundManager.PlaySound(SoundList.Gold); + + GameScene.Scene.MailComposeParcelDialog.ParcelCostLabel.Text = p.Cost.ToString(); + } + } + + public void AddQuestItem(UserItem item) + { + Redraw(); + + if (item.Info.StackSize > 1) //Stackable + { + for (int i = 0; i < User.QuestInventory.Length; i++) + { + UserItem temp = User.QuestInventory[i]; + if (temp == null || item.Info != temp.Info || temp.Count >= temp.Info.StackSize) continue; + + if (item.Count + temp.Count <= temp.Info.StackSize) + { + temp.Count += item.Count; + return; + } + item.Count -= (ushort)(temp.Info.StackSize - temp.Count); + temp.Count = temp.Info.StackSize; + } + } + + for (int i = 0; i < User.QuestInventory.Length; i++) + { + if (User.QuestInventory[i] != null) continue; + User.QuestInventory[i] = item; + return; + } + } + + private void FriendUpdate(S.FriendUpdate p) + { + GameScene.Scene.FriendDialog.Friends = p.Friends; + + if (GameScene.Scene.FriendDialog.Visible) + { + GameScene.Scene.FriendDialog.Update(false); + } + } + + private void LoverUpdate(S.LoverUpdate p) + { + GameScene.Scene.RelationshipDialog.LoverName = p.Name; + GameScene.Scene.RelationshipDialog.Date = p.Date; + GameScene.Scene.RelationshipDialog.MapName = p.MapName; + GameScene.Scene.RelationshipDialog.MarriedDays = p.MarriedDays; + GameScene.Scene.RelationshipDialog.UpdateInterface(); + } + + private void GameShopUpdate(S.GameShopInfo p) + { + p.Item.Stock = p.StockLevel; + GameShopInfoList.Add(p.Item); + if (p.Item.Date > CMain.Now.AddDays(-7)) GameShopDialog.New.Visible = true; + } + + private void GameShopStock(S.GameShopStock p) + { + for (int i = 0; i < GameShopInfoList.Count; i++) + { + if (GameShopInfoList[i].GIndex == p.GIndex) + { + if (p.StockLevel == 0) GameShopInfoList.Remove(GameShopInfoList[i]); + else GameShopInfoList[i].Stock = p.StockLevel; + + if (GameShopDialog.Visible) GameShopDialog.UpdateShop(); + } + } + } + public void AddItem(UserItem item) + { + Redraw(); + + if (item.Info.StackSize > 1) //Stackable + { + for (int i = 0; i < User.Inventory.Length; i++) + { + UserItem temp = User.Inventory[i]; + if (temp == null || item.Info != temp.Info || temp.Count >= temp.Info.StackSize) continue; + + if (item.Count + temp.Count <= temp.Info.StackSize) + { + temp.Count += item.Count; + return; + } + item.Count -= (ushort)(temp.Info.StackSize - temp.Count); + temp.Count = temp.Info.StackSize; + } + } + + if (item.Info.Type == ItemType.Potion || item.Info.Type == ItemType.Scroll || (item.Info.Type == ItemType.Script && item.Info.Effect == 1)) + { + for (int i = 0; i < User.BeltIdx - 2; i++) + { + if (User.Inventory[i] != null) continue; + User.Inventory[i] = item; + return; + } + } + else + { + for (int i = User.BeltIdx; i < User.Inventory.Length; i++) + { + if (User.Inventory[i] != null) continue; + User.Inventory[i] = item; + return; + } + } + + for (int i = 0; i < User.Inventory.Length; i++) + { + if (User.Inventory[i] != null) continue; + User.Inventory[i] = item; + return; + } + } + public static void Bind(UserItem item) + { + for (int i = 0; i < ItemInfoList.Count; i++) + { + if (ItemInfoList[i].Index != item.ItemIndex) continue; + + item.Info = ItemInfoList[i]; + + return; + } + } + + public ItemInfo GetItemInfo(int index) + { + for (var i = 0; i < ItemInfoList.Count; i++) + { + var info = ItemInfoList[i]; + if (info.Index != index) continue; + return info; + } + return null; + } + + public static void BindQuest(ClientQuestProgress quest) + { + for (int i = 0; i < QuestInfoList.Count; i++) + { + if (QuestInfoList[i].Index != quest.Id) continue; + + quest.QuestInfo = QuestInfoList[i]; + + return; + } + } + + public Color GradeNameColor(ItemGrade grade) + { + switch (grade) + { + case ItemGrade.Common: + return Color.Yellow; + case ItemGrade.YangWarrior: + return Color.DeepSkyBlue; + case ItemGrade.NegativeWarrior: + return Color.DarkOrange; + case ItemGrade.FireWizard: + return Color.Plum; + case ItemGrade.CelestialWizard: + return Color.Red; + case ItemGrade.MonkTaoist: + return Color.Red; + case ItemGrade.InstructorTaoist: + return Color.Red; + default: + return Color.Yellow; + } + } + + public void DisposeItemLabel() + { + if (ItemLabel != null && !ItemLabel.IsDisposed) + ItemLabel.Dispose(); + ItemLabel = null; + } + public void DisposeMailLabel() + { + if (MailLabel != null && !MailLabel.IsDisposed) + MailLabel.Dispose(); + MailLabel = null; + } + public void DisposeMemoLabel() + { + if (MemoLabel != null && !MemoLabel.IsDisposed) + MemoLabel.Dispose(); + MemoLabel = null; + } + public void DisposeGuildBuffLabel() + { + if (GuildBuffLabel != null && !GuildBuffLabel.IsDisposed) + GuildBuffLabel.Dispose(); + GuildBuffLabel = null; + } + + public MirControl NameInfoLabel(UserItem item, bool inspect = false, bool hideDura = false) + { + ushort level = MapObject.User.Level; + MirClass job = MapObject.User.Class; + HoverItem = item; + ItemInfo realItem = Functions.GetRealItem(item.Info, level, job, ItemInfoList); + + string GradeString = ""; + switch (HoverItem.Info.Grade) + { + case ItemGrade.None: + break; + case ItemGrade.Common: + GradeString = GameLanguage.ItemGradeCommon; + break; + case ItemGrade.YangWarrior: + GradeString = GameLanguage.ItemGradeYangWarrior; + break; + case ItemGrade.NegativeWarrior: + GradeString = GameLanguage.ItemGradeNegativeWarrior; + break; + case ItemGrade.FireWizard: + GradeString = GameLanguage.ItemGradeFireWizard; + break; + case ItemGrade.CelestialWizard: + GradeString = GameLanguage.ItemGradeCelestialWizard; + break; + case ItemGrade.MonkTaoist: + GradeString = GameLanguage.ItemGradeMonkTaoist; + break; + case ItemGrade.InstructorTaoist: + GradeString = GameLanguage.ItemGradeInstructorTaoist; + break; + } + MirLabel nameLabel = new MirLabel + { + AutoSize = true, + ForeColour = GradeNameColor(HoverItem.Info.Grade), + Location = new Point(4, 4), + OutLine = true, + Parent = ItemLabel, + Text = HoverItem.Info.Grade != ItemGrade.None ? string.Format("{0}{1}{2}", HoverItem.Info.FriendlyName, "\n", GradeString) : HoverItem.Info.FriendlyName, + }; + + if (HoverItem.RefineAdded > 0) + nameLabel.Text = "(*)" + nameLabel.Text; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, nameLabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, nameLabel.DisplayRectangle.Bottom)); + + string text = ""; + + if (HoverItem.Info.Durability > 0 && !hideDura) + { + switch (HoverItem.Info.Type) + { + case ItemType.Ore: + text += string.Format(" Purity {0}", Math.Floor(HoverItem.CurrentDura / 1000M)); + break; + case ItemType.Meat: + text += string.Format(" Quality {0}", Math.Floor(HoverItem.CurrentDura / 1000M)); + break; + case ItemType.Gem: + case ItemType.Potion: + break; + default: + text += string.Format(" {0} {1}/{2}", GameLanguage.Durability, Math.Floor(HoverItem.CurrentDura / 1000M), + Math.Floor(HoverItem.MaxDura / 1000M)); + break; + } + } + + string baseText = ""; + switch (HoverItem.Info.Type) + { + case ItemType.Nothing: + break; + case ItemType.Weapon: + baseText = GameLanguage.ItemTypeWeapon; + break; + case ItemType.Armour: + baseText = GameLanguage.ItemTypeArmour; + break; + case ItemType.Helmet: + baseText = GameLanguage.ItemTypeHelmet; + break; + case ItemType.Necklace: + baseText = GameLanguage.ItemTypeNecklace; + break; + case ItemType.Bracelet: + baseText = GameLanguage.ItemTypeBracelet; + break; + case ItemType.Ring: + baseText = GameLanguage.ItemTypeRing; + break; + case ItemType.Potion: + baseText = GameLanguage.ItemTypePotion; + break; + case ItemType.Ore: + baseText = GameLanguage.ItemTypeOre; + break; + case ItemType.Meat: + baseText = GameLanguage.ItemTypeMeat; + break; + case ItemType.Material: + baseText = GameLanguage.ItemTypeMaterial; + break; + case ItemType.Scroll: + baseText = GameLanguage.ItemTypeScroll; + break; + case ItemType.Gem: + baseText = GameLanguage.ItemTypeGem; + break; + case ItemType.Book: + baseText = GameLanguage.ItemTypeBook; + break; + case ItemType.Script: + baseText = GameLanguage.ItemTypeScript; + break; + case ItemType.Quest: + baseText = GameLanguage.ItemTypeQuest; + break; + } + + if (HoverItem.WeddingRing != -1) + { + baseText = GameLanguage.WeddingRing; + } + + baseText = string.Format(GameLanguage.ItemTextFormat, baseText, string.IsNullOrEmpty(baseText) ? "" : "\n", GameLanguage.Weight, HoverItem.Weight + text); + + MirLabel etcLabel = new MirLabel + { + AutoSize = true, + ForeColour = Color.White, + Location = new Point(4, nameLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + Text = baseText + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, etcLabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, etcLabel.DisplayRectangle.Bottom + 4)); + + #region OUTLINE + MirControl outLine = new MirControl + { + BackColour = Color.FromArgb(255, 50, 50, 50), + Border = true, + BorderColour = Color.Gray, + NotControl = true, + Parent = ItemLabel, + Opacity = 0.4F, + Location = new Point(0, 0) + }; + outLine.Size = ItemLabel.Size; + #endregion + + return outLine; + } + public MirControl AttackInfoLabel(UserItem item, bool Inspect = false, bool hideAdded = false) + { + ushort level = MapObject.User.Level; + MirClass job = MapObject.User.Class; + HoverItem = item; + ItemInfo realItem = Functions.GetRealItem(item.Info, level, job, ItemInfoList); + + ItemLabel.Size = new Size(ItemLabel.Size.Width, ItemLabel.Size.Height + 4); + + int count = 0; + int minValue = 0; + int maxValue = 0; + int addValue = 0; + string text = ""; + + #region Dura gem + minValue = realItem.Durability; + + if (minValue > 0 && realItem.Type == ItemType.Gem) + { + switch (realItem.Shape) + { + default: + text = string.Format("Adds +{0} Durability", minValue / 1000); + break; + case 8: + text = string.Format("Seals for {0}", Functions.PrintTimeSpanFromSeconds(minValue * 60)); + break; + } + + count++; + MirLabel DuraLabel = new MirLabel + { + AutoSize = true, + ForeColour = Color.White, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + Text = text + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, DuraLabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, DuraLabel.DisplayRectangle.Bottom)); + } + + #endregion + + #region DC + minValue = realItem.Stats[Stat.MinDC]; + maxValue = realItem.Stats[Stat.MaxDC]; + addValue = (!hideAdded && (!HoverItem.Info.NeedIdentify || HoverItem.Identified)) ? HoverItem.AddedStats[Stat.MaxDC] : 0; + + if (minValue > 0 || maxValue > 0 || addValue > 0) + { + count++; + if (HoverItem.Info.Type != ItemType.Gem) + text = string.Format(addValue > 0 ? GameLanguage.DC : GameLanguage.DC2, minValue, maxValue + addValue, addValue); + else + text = string.Format("Adds +{0} DC", minValue + maxValue + addValue); + MirLabel DCLabel = new MirLabel + { + AutoSize = true, + ForeColour = addValue > 0 ? Color.Cyan : Color.White, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + Text = text + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, DCLabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, DCLabel.DisplayRectangle.Bottom)); + } + + #endregion + + #region MC + + minValue = realItem.Stats[Stat.MinMC]; + maxValue = realItem.Stats[Stat.MaxMC]; + addValue = (!hideAdded && (!HoverItem.Info.NeedIdentify || HoverItem.Identified)) ? HoverItem.AddedStats[Stat.MaxMC] : 0; + + if (minValue > 0 || maxValue > 0 || addValue > 0) + { + count++; + if (HoverItem.Info.Type != ItemType.Gem) + text = string.Format(addValue > 0 ? GameLanguage.MC : GameLanguage.MC2, minValue, maxValue + addValue, addValue); + else + text = string.Format("Adds +{0} MC", minValue + maxValue + addValue); + MirLabel MCLabel = new MirLabel + { + AutoSize = true, + ForeColour = addValue > 0 ? Color.Cyan : Color.White, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + Text = text + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, MCLabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, MCLabel.DisplayRectangle.Bottom)); + } + + #endregion + + #region SC + + minValue = realItem.Stats[Stat.MinSC]; + maxValue = realItem.Stats[Stat.MaxSC]; + addValue = (!hideAdded && (!HoverItem.Info.NeedIdentify || HoverItem.Identified)) ? HoverItem.AddedStats[Stat.MaxSC] : 0; + + if (minValue > 0 || maxValue > 0 || addValue > 0) + { + count++; + if (HoverItem.Info.Type != ItemType.Gem) + text = string.Format(addValue > 0 ? GameLanguage.SC : GameLanguage.SC2, minValue, maxValue + addValue, addValue); + else + text = string.Format("Adds +{0} SC", minValue + maxValue + addValue); + MirLabel SCLabel = new MirLabel + { + AutoSize = true, + ForeColour = addValue > 0 ? Color.Cyan : Color.White, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + //Text = string.Format("SC + {0}~{1}", minValue, maxValue + addValue) + Text = text + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, SCLabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, SCLabel.DisplayRectangle.Bottom)); + } + + #endregion + + #region LUCK / SUCCESS + + minValue = realItem.Stats[Stat.Luck]; + maxValue = 0; + addValue = (!hideAdded && (!HoverItem.Info.NeedIdentify || HoverItem.Identified)) ? HoverItem.AddedStats[Stat.Luck] : 0; + + if (minValue != 0 || addValue != 0) + { + count++; + + if (realItem.Type == ItemType.Potion && realItem.Shape == 4) + { + text = string.Format("Exp + {0}% ", minValue + addValue); + } + else if (realItem.Type == ItemType.Potion && realItem.Shape == 5) + { + text = string.Format("Drop + {0}% ", minValue + addValue); + } + else + { + text = string.Format(minValue + addValue > 0 ? GameLanguage.Luck: "Curse + {0}", Math.Abs(minValue + addValue)); + } + + MirLabel LUCKLabel = new MirLabel + { + AutoSize = true, + ForeColour = addValue > 0 ? Color.Cyan : Color.White, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + Text = text + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, LUCKLabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, LUCKLabel.DisplayRectangle.Bottom)); + } + + #endregion + + #region ACC + + minValue = realItem.Stats[Stat.Accuracy]; + maxValue = 0; + addValue = (!hideAdded && (!HoverItem.Info.NeedIdentify || HoverItem.Identified)) ? HoverItem.AddedStats[Stat.Accuracy] : 0; + + if (minValue > 0 || maxValue > 0 || addValue > 0) + { + count++; + if (HoverItem.Info.Type != ItemType.Gem) + text = string.Format(addValue > 0 ? GameLanguage.Accuracy : GameLanguage.Accuracy2, minValue + addValue, addValue); + else + text = string.Format("Adds +{0} Accuracy", minValue + maxValue + addValue); + MirLabel ACCLabel = new MirLabel + { + AutoSize = true, + ForeColour = addValue > 0 ? Color.Cyan : Color.White, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + //Text = string.Format("Accuracy + {0}", minValue + addValue) + Text = text + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, ACCLabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, ACCLabel.DisplayRectangle.Bottom)); + } + + #endregion + + #region HOLY + + minValue = realItem.Stats[Stat.Holy]; + maxValue = 0; + addValue = 0; + + if (minValue > 0 || maxValue > 0 || addValue > 0) + { + count++; + MirLabel HOLYLabel = new MirLabel + { + AutoSize = true, + ForeColour = addValue > 0 ? Color.Cyan : Color.White, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + //Text = string.Format("Holy + {0}", minValue + addValue) + Text = string.Format(addValue > 0 ? GameLanguage.Holy : GameLanguage.Holy2, minValue + addValue, addValue) + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, HOLYLabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, HOLYLabel.DisplayRectangle.Bottom)); + } + + #endregion + + #region ASPEED + + minValue = realItem.Stats[Stat.AttackSpeed]; + maxValue = 0; + addValue = (!hideAdded && (!HoverItem.Info.NeedIdentify || HoverItem.Identified)) ? HoverItem.AddedStats[Stat.AttackSpeed] : 0; + + if (minValue != 0 || maxValue != 0 || addValue != 0) + { + string plus = (addValue + minValue < 0) ? "" : "+"; + + count++; + if (HoverItem.Info.Type != ItemType.Gem) + { + string negative = "+"; + if (addValue < 0) negative = ""; + text = string.Format(addValue != 0 ? "A.Speed: " + plus + "{0} ({2}{1})" : "A.Speed: " + plus + "{0}", minValue + addValue, addValue, negative); + //text = string.Format(addValue > 0 ? "A.Speed: + {0} (+{1})" : "A.Speed: + {0}", minValue + addValue, addValue); + } + else + text = string.Format("Adds +{0} A.Speed", minValue + maxValue + addValue); + MirLabel ASPEEDLabel = new MirLabel + { + AutoSize = true, + ForeColour = addValue > 0 ? Color.Cyan : Color.White, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + //Text = string.Format("A.Speed + {0}", minValue + addValue) + Text = text + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, ASPEEDLabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, ASPEEDLabel.DisplayRectangle.Bottom)); + } + + #endregion + + #region FREEZING + + minValue = realItem.Stats[Stat.Freezing]; + maxValue = 0; + addValue = (!hideAdded && (!HoverItem.Info.NeedIdentify || HoverItem.Identified)) ? HoverItem.AddedStats[Stat.Freezing] : 0; + + if (minValue > 0 || maxValue > 0 || addValue > 0) + { + count++; + if (HoverItem.Info.Type != ItemType.Gem) + text = string.Format(addValue > 0 ? "Freezing: + {0} (+{1})" : "Freezing: + {0}", minValue + addValue, addValue); + else + text = string.Format("Adds +{0} Freezing", minValue + maxValue + addValue); + MirLabel FREEZINGLabel = new MirLabel + { + AutoSize = true, + ForeColour = addValue > 0 ? Color.Cyan : Color.White, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + //Text = string.Format("Freezing + {0}", minValue + addValue) + Text = text + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, FREEZINGLabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, FREEZINGLabel.DisplayRectangle.Bottom)); + } + + #endregion + + #region POISON + + minValue = realItem.Stats[Stat.PoisonAttack]; + maxValue = 0; + addValue = (!hideAdded && (!HoverItem.Info.NeedIdentify || HoverItem.Identified)) ? HoverItem.AddedStats[Stat.PoisonAttack] : 0; + + if (minValue > 0 || maxValue > 0 || addValue > 0) + { + count++; + if (HoverItem.Info.Type != ItemType.Gem) + text = string.Format(addValue > 0 ? "Poison: + {0} (+{1})" : "Poison: + {0}", minValue + addValue, addValue); + else + text = string.Format("Adds +{0} Poison", minValue + maxValue + addValue); + MirLabel POISONLabel = new MirLabel + { + AutoSize = true, + ForeColour = addValue > 0 ? Color.Cyan : Color.White, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + //Text = string.Format("Poison + {0}", minValue + addValue) + Text = text + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, POISONLabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, POISONLabel.DisplayRectangle.Bottom)); + } + + #endregion + + #region CRITICALRATE / FLEXIBILITY + + minValue = realItem.Stats[Stat.CriticalRate]; + maxValue = 0; + addValue = (!hideAdded && (!HoverItem.Info.NeedIdentify || HoverItem.Identified)) ? HoverItem.AddedStats[Stat.CriticalRate] : 0; + + if ((minValue > 0 || maxValue > 0 || addValue > 0) && (realItem.Type != ItemType.Gem)) + { + count++; + MirLabel CRITICALRATELabel = new MirLabel + { + AutoSize = true, + ForeColour = addValue > 0 ? Color.Cyan : Color.White, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + //Text = string.Format("Critical Chance + {0}", minValue + addValue) + Text = string.Format(addValue > 0 ? "Critical Chance: + {0} (+{1})" : "Critical Chance: + {0}", minValue + addValue, addValue) + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, CRITICALRATELabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, CRITICALRATELabel.DisplayRectangle.Bottom)); + } + + #endregion + + #region CRITICALDAMAGE + + minValue = realItem.Stats[Stat.CriticalDamage]; + maxValue = 0; + addValue = (!hideAdded && (!HoverItem.Info.NeedIdentify || HoverItem.Identified)) ? HoverItem.AddedStats[Stat.CriticalDamage] : 0; + + if ((minValue > 0 || maxValue > 0 || addValue > 0) && (realItem.Type != ItemType.Gem)) + { + count++; + MirLabel CRITICALDAMAGELabel = new MirLabel + { + AutoSize = true, + ForeColour = addValue > 0 ? Color.Cyan : Color.White, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + //Text = string.Format("Critical Damage + {0}", minValue + addValue) + Text = string.Format(addValue > 0 ? "Critical Damage: + {0} (+{1})" : "Critical Damage: + {0}", minValue + addValue, addValue) + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, CRITICALDAMAGELabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, CRITICALDAMAGELabel.DisplayRectangle.Bottom)); + } + + #endregion + + #region Reflect + + minValue = realItem.Stats[Stat.Reflect]; + maxValue = 0; + addValue = 0; + + if ((minValue > 0 || maxValue > 0 || addValue > 0) && (realItem.Type != ItemType.Gem)) + { + count++; + MirLabel ReflectLabel = new MirLabel + { + AutoSize = true, + ForeColour = addValue > 0 ? Color.Cyan : Color.White, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + Text = string.Format("Reflect chance: {0}", minValue) + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, ReflectLabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, ReflectLabel.DisplayRectangle.Bottom)); + } + + #endregion + + #region Hpdrain + + minValue = realItem.Stats[Stat.HPDrainRatePercent]; + maxValue = 0; + addValue = 0; + + if ((minValue > 0 || maxValue > 0 || addValue > 0) && (realItem.Type != ItemType.Gem)) + { + count++; + MirLabel HPdrainLabel = new MirLabel + { + AutoSize = true, + ForeColour = addValue > 0 ? Color.Cyan : Color.White, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + Text = string.Format("HP Drain Rate: {0}%", minValue) + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, HPdrainLabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, HPdrainLabel.DisplayRectangle.Bottom)); + } + + #endregion + + #region Exp Rate + + minValue = realItem.Stats[Stat.ExpRatePercent]; + maxValue = 0; + addValue = (!hideAdded && (!HoverItem.Info.NeedIdentify || HoverItem.Identified)) ? HoverItem.AddedStats[Stat.ExpRatePercent] : 0; + + if (minValue != 0 || maxValue != 0 || addValue != 0) + { + string plus = (addValue + minValue < 0) ? "" : "+"; + + count++; + string negative = "+"; + if (addValue < 0) negative = ""; + text = string.Format(addValue != 0 ? "Exp Rate: " + plus + "{0}% ({2}{1}%)" : "Exp Rate: " + plus + "{0}%", minValue + addValue, addValue, negative); + + MirLabel expRateLabel = new MirLabel + { + AutoSize = true, + ForeColour = addValue > 0 ? Color.Cyan : Color.White, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + Text = text + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, expRateLabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, expRateLabel.DisplayRectangle.Bottom)); + } + + #endregion + + #region Drop Rate + + minValue = realItem.Stats[Stat.ItemDropRatePercent]; + maxValue = 0; + addValue = (!hideAdded && (!HoverItem.Info.NeedIdentify || HoverItem.Identified)) ? HoverItem.AddedStats[Stat.ItemDropRatePercent] : 0; + + if (minValue != 0 || maxValue != 0 || addValue != 0) + { + string plus = (addValue + minValue < 0) ? "" : "+"; + + count++; + string negative = "+"; + if (addValue < 0) negative = ""; + text = string.Format(addValue != 0 ? "Drop Rate: " + plus + "{0}% ({2}{1}%)" : "Drop Rate: " + plus + "{0}%", minValue + addValue, addValue, negative); + + MirLabel dropRateLabel = new MirLabel + { + AutoSize = true, + ForeColour = addValue > 0 ? Color.Cyan : Color.White, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + Text = text + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, dropRateLabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, dropRateLabel.DisplayRectangle.Bottom)); + } + + #endregion + + #region Gold Rate + + minValue = realItem.Stats[Stat.GoldDropRatePercent]; + maxValue = 0; + addValue = (!hideAdded && (!HoverItem.Info.NeedIdentify || HoverItem.Identified)) ? HoverItem.AddedStats[Stat.GoldDropRatePercent] : 0; + + if (minValue != 0 || maxValue != 0 || addValue != 0) + { + string plus = (addValue + minValue < 0) ? "" : "+"; + + count++; + string negative = "+"; + if (addValue < 0) negative = ""; + text = string.Format(addValue != 0 ? "Gold Rate: " + plus + "{0}% ({2}{1}%)" : "Gold Rate: " + plus + "{0}%", minValue + addValue, addValue, negative); + + MirLabel goldRateLabel = new MirLabel + { + AutoSize = true, + ForeColour = addValue > 0 ? Color.Cyan : Color.White, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + Text = text + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, goldRateLabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, goldRateLabel.DisplayRectangle.Bottom)); + } + + #endregion + + if (count > 0) + { + ItemLabel.Size = new Size(ItemLabel.Size.Width, ItemLabel.Size.Height + 4); + + #region OUTLINE + MirControl outLine = new MirControl + { + BackColour = Color.FromArgb(255, 50, 50, 50), + Border = true, + BorderColour = Color.Gray, + NotControl = true, + Parent = ItemLabel, + Opacity = 0.4F, + Location = new Point(0, 0) + }; + outLine.Size = ItemLabel.Size; + #endregion + + return outLine; + } + else + { + ItemLabel.Size = new Size(ItemLabel.Size.Width, ItemLabel.Size.Height - 4); + } + return null; + } + public MirControl DefenceInfoLabel(UserItem item, bool Inspect = false, bool hideAdded = false) + { + ushort level = MapObject.User.Level; + MirClass job = MapObject.User.Class; + HoverItem = item; + ItemInfo realItem = Functions.GetRealItem(item.Info, level, job, ItemInfoList); + + ItemLabel.Size = new Size(ItemLabel.Size.Width, ItemLabel.Size.Height + 4); + + int count = 0; + int minValue = 0; + int maxValue = 0; + int addValue = 0; + + string text = ""; + #region AC + + minValue = realItem.Stats[Stat.MinAC]; + maxValue = realItem.Stats[Stat.MaxAC]; + addValue = (!hideAdded && (!HoverItem.Info.NeedIdentify || HoverItem.Identified)) ? HoverItem.AddedStats[Stat.MaxAC] : 0; + + if (minValue > 0 || maxValue > 0 || addValue > 0) + { + count++; + if (HoverItem.Info.Type != ItemType.Gem) + text = string.Format(addValue > 0 ? GameLanguage.AC : GameLanguage.AC2, minValue, maxValue + addValue, addValue); + else + text = string.Format("Adds +{0} AC", minValue + maxValue + addValue); + MirLabel ACLabel = new MirLabel + { + AutoSize = true, + ForeColour = addValue > 0 ? Color.Cyan : Color.White, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + //Text = string.Format("AC + {0}~{1}", minValue, maxValue + addValue) + Text = text + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, ACLabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, ACLabel.DisplayRectangle.Bottom)); + } + + #endregion + + #region MAC + + minValue = realItem.Stats[Stat.MinMAC]; + maxValue = realItem.Stats[Stat.MaxMAC]; + addValue = (!hideAdded && (!HoverItem.Info.NeedIdentify || HoverItem.Identified)) ? HoverItem.AddedStats[Stat.MaxMAC] : 0; + + if (minValue > 0 || maxValue > 0 || addValue > 0) + { + count++; + if (HoverItem.Info.Type != ItemType.Gem) + text = string.Format(addValue > 0 ? GameLanguage.MAC : GameLanguage.MAC2, minValue, maxValue + addValue, addValue); + else + text = string.Format("Adds +{0} MAC", minValue + maxValue + addValue); + MirLabel MACLabel = new MirLabel + { + AutoSize = true, + ForeColour = addValue > 0 ? Color.Cyan : Color.White, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + //Text = string.Format("MAC + {0}~{1}", minValue, maxValue + addValue) + Text = text + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, MACLabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, MACLabel.DisplayRectangle.Bottom)); + } + + #endregion + + #region MAXHP + + minValue = realItem.Stats[Stat.HP]; + maxValue = 0; + addValue = (!hideAdded && (!HoverItem.Info.NeedIdentify || HoverItem.Identified)) ? HoverItem.AddedStats[Stat.HP] : 0; + + if (minValue > 0 || maxValue > 0 || addValue > 0) + { + count++; + MirLabel MAXHPLabel = new MirLabel + { + AutoSize = true, + ForeColour = addValue > 0 ? Color.Cyan : Color.White, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + //Text = string.Format(realItem.Type == ItemType.Potion ? "HP + {0} Recovery" : "MAXHP + {0}", minValue + addValue) + Text = string.Format(addValue > 0 ? "Max HP + {0} (+{1})" : "Max HP + {0}", minValue + addValue, addValue) + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, MAXHPLabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, MAXHPLabel.DisplayRectangle.Bottom)); + } + + #endregion + + #region MAXMP + + minValue = realItem.Stats[Stat.MP]; + maxValue = 0; + addValue = (!hideAdded && (!HoverItem.Info.NeedIdentify || HoverItem.Identified)) ? HoverItem.AddedStats[Stat.MP] : 0; + + if (minValue > 0 || maxValue > 0 || addValue > 0) + { + count++; + MirLabel MAXMPLabel = new MirLabel + { + AutoSize = true, + ForeColour = addValue > 0 ? Color.Cyan : Color.White, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + //Text = string.Format(realItem.Type == ItemType.Potion ? "MP + {0} Recovery" : "MAXMP + {0}", minValue + addValue) + Text = string.Format(addValue > 0 ? "Max MP + {0} (+{1})" : "Max MP + {0}", minValue + addValue, addValue) + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, MAXMPLabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, MAXMPLabel.DisplayRectangle.Bottom)); + } + + #endregion + + #region MAXHPRATE + + minValue = realItem.Stats[Stat.HPRatePercent]; + maxValue = 0; + addValue = 0; + + if (minValue > 0 || maxValue > 0 || addValue > 0) + { + count++; + MirLabel MAXHPRATELabel = new MirLabel + { + AutoSize = true, + ForeColour = addValue > 0 ? Color.Cyan : Color.White, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + Text = string.Format("Max HP + {0}%", minValue + addValue) + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, MAXHPRATELabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, MAXHPRATELabel.DisplayRectangle.Bottom)); + } + + #endregion + + #region MAXMPRATE + + minValue = realItem.Stats[Stat.MPRatePercent]; + maxValue = 0; + addValue = 0; + + if (minValue > 0 || maxValue > 0 || addValue > 0) + { + count++; + MirLabel MAXMPRATELabel = new MirLabel + { + AutoSize = true, + ForeColour = addValue > 0 ? Color.Cyan : Color.White, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + Text = string.Format("Max MP + {0}%", minValue + addValue) + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, MAXMPRATELabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, MAXMPRATELabel.DisplayRectangle.Bottom)); + } + + #endregion + + #region MAXACRATE + + minValue = realItem.Stats[Stat.MaxACRatePercent]; + maxValue = 0; + addValue = 0; + + if (minValue > 0 || maxValue > 0 || addValue > 0) + { + count++; + MirLabel MAXACRATE = new MirLabel + { + AutoSize = true, + ForeColour = addValue > 0 ? Color.Cyan : Color.White, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + Text = string.Format("Max AC + {0}%", minValue + addValue) + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, MAXACRATE.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, MAXACRATE.DisplayRectangle.Bottom)); + } + + #endregion + + #region MAXMACRATE + + minValue = realItem.Stats[Stat.MaxMACRatePercent]; + maxValue = 0; + addValue = 0; + + if (minValue > 0 || maxValue > 0 || addValue > 0) + { + count++; + MirLabel MAXMACRATELabel = new MirLabel + { + AutoSize = true, + ForeColour = addValue > 0 ? Color.Cyan : Color.White, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + Text = string.Format("Max MAC + {0}%", minValue + addValue) + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, MAXMACRATELabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, MAXMACRATELabel.DisplayRectangle.Bottom)); + } + + #endregion + + #region HEALTH_RECOVERY + + minValue = realItem.Stats[Stat.HealthRecovery]; + maxValue = 0; + addValue = (!hideAdded && (!HoverItem.Info.NeedIdentify || HoverItem.Identified)) ? HoverItem.AddedStats[Stat.HealthRecovery] : 0; + + if (minValue > 0 || maxValue > 0 || addValue > 0) + { + count++; + MirLabel HEALTH_RECOVERYLabel = new MirLabel + { + AutoSize = true, + ForeColour = addValue > 0 ? Color.Cyan : Color.White, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + Text = string.Format(addValue > 0 ? "Health Recovery + {0} (+{1})" : "Health Recovery + {0}", minValue + addValue, addValue) + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, HEALTH_RECOVERYLabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, HEALTH_RECOVERYLabel.DisplayRectangle.Bottom)); + } + + #endregion + + #region MANA_RECOVERY + + minValue = realItem.Stats[Stat.SpellRecovery]; + maxValue = 0; + addValue = (!hideAdded && (!HoverItem.Info.NeedIdentify || HoverItem.Identified)) ? HoverItem.AddedStats[Stat.SpellRecovery] : 0; + + if (minValue > 0 || maxValue > 0 || addValue > 0) + { + count++; + MirLabel MANA_RECOVERYLabel = new MirLabel + { + AutoSize = true, + ForeColour = addValue > 0 ? Color.Cyan : Color.White, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + //Text = string.Format("ManaRecovery + {0}", minValue + addValue) + Text = string.Format(addValue > 0 ? "Mana Recovery + {0} (+{1})" : "Mana Recovery + {0}", minValue + addValue, addValue) + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, MANA_RECOVERYLabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, MANA_RECOVERYLabel.DisplayRectangle.Bottom)); + } + + #endregion + + #region POISON_RECOVERY + + minValue = realItem.Stats[Stat.PoisonRecovery]; + maxValue = 0; + addValue = (!hideAdded && (!HoverItem.Info.NeedIdentify || HoverItem.Identified)) ? HoverItem.AddedStats[Stat.PoisonRecovery] : 0; + + if (minValue > 0 || maxValue > 0 || addValue > 0) + { + count++; + MirLabel POISON_RECOVERYabel = new MirLabel + { + AutoSize = true, + ForeColour = addValue > 0 ? Color.Cyan : Color.White, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + //Text = string.Format("Poison Recovery + {0}", minValue + addValue) + Text = string.Format(addValue > 0 ? "Poison Recovery + {0} (+{1})" : "Poison Recovery + {0}", minValue + addValue, addValue) + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, POISON_RECOVERYabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, POISON_RECOVERYabel.DisplayRectangle.Bottom)); + } + + #endregion + + #region AGILITY + + minValue = realItem.Stats[Stat.Agility]; + maxValue = 0; + addValue = (!hideAdded && (!HoverItem.Info.NeedIdentify || HoverItem.Identified)) ? HoverItem.AddedStats[Stat.Agility] : 0; + + if (minValue > 0 || maxValue > 0 || addValue > 0) + { + count++; + if (HoverItem.Info.Type != ItemType.Gem) + text = string.Format(addValue > 0 ? GameLanguage.Agility : GameLanguage.Agility2, minValue + addValue, addValue); + else + text = string.Format("Adds +{0} Agility", minValue + maxValue + addValue); + + MirLabel AGILITYLabel = new MirLabel + { + AutoSize = true, + ForeColour = addValue > 0 ? Color.Cyan : Color.White, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + Text = text + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, AGILITYLabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, AGILITYLabel.DisplayRectangle.Bottom)); + } + + #endregion + + #region STRONG + + minValue = realItem.Stats[Stat.Strong]; + maxValue = 0; + addValue = (!hideAdded && (!HoverItem.Info.NeedIdentify || HoverItem.Identified)) ? HoverItem.AddedStats[Stat.Strong] : 0; + + if (minValue > 0 || maxValue > 0 || addValue > 0) + { + count++; + MirLabel STRONGLabel = new MirLabel + { + AutoSize = true, + ForeColour = addValue > 0 ? Color.Cyan : Color.White, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + //Text = string.Format("Strong + {0}", minValue + addValue) + Text = string.Format(addValue > 0 ? "Strong + {0} (+{1})" : "Strong + {0}", minValue + addValue, addValue) + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, STRONGLabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, STRONGLabel.DisplayRectangle.Bottom)); + } + + #endregion + + #region POISON_RESIST + + minValue = realItem.Stats[Stat.PoisonResist]; + maxValue = 0; + addValue = (!hideAdded && (!HoverItem.Info.NeedIdentify || HoverItem.Identified)) ? HoverItem.AddedStats[Stat.PoisonResist] : 0; + + if (minValue > 0 || maxValue > 0 || addValue > 0) + { + count++; + if (HoverItem.Info.Type != ItemType.Gem) + text = string.Format(addValue > 0 ? "Poison Resist + {0} (+{1})" : "Poison Resist + {0}", minValue + addValue, addValue); + else + text = string.Format("Adds +{0} Poison Resist", minValue + maxValue + addValue); + MirLabel POISON_RESISTLabel = new MirLabel + { + AutoSize = true, + ForeColour = addValue > 0 ? Color.Cyan : Color.White, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + Text = text + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, POISON_RESISTLabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, POISON_RESISTLabel.DisplayRectangle.Bottom)); + } + + #endregion + + #region MAGIC_RESIST + + minValue = realItem.Stats[Stat.MagicResist]; + maxValue = 0; + addValue = (!hideAdded && (!HoverItem.Info.NeedIdentify || HoverItem.Identified)) ? HoverItem.AddedStats[Stat.MagicResist] : 0; + + if (minValue > 0 || maxValue > 0 || addValue > 0) + { + count++; + if (HoverItem.Info.Type != ItemType.Gem) + text = string.Format(addValue > 0 ? "Magic Resist + {0} (+{1})" : "Magic Resist + {0}", minValue + addValue, addValue); + else + text = string.Format("Adds +{0} Magic Resist", minValue + maxValue + addValue); + MirLabel MAGIC_RESISTLabel = new MirLabel + { + AutoSize = true, + ForeColour = addValue > 0 ? Color.Cyan : Color.White, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + //Text = string.Format("Magic Resist + {0}", minValue + addValue) + Text = text + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, MAGIC_RESISTLabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, MAGIC_RESISTLabel.DisplayRectangle.Bottom)); + } + + #endregion + + #region MAX_DC_RATE + + minValue = realItem.Stats[Stat.MaxDCRatePercent]; + maxValue = 0; + addValue = 0; + + if (minValue > 0 || maxValue > 0 || addValue > 0) + { + count++; + MirLabel MAXDCRATE = new MirLabel + { + AutoSize = true, + ForeColour = addValue > 0 ? Color.Cyan : Color.White, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + Text = string.Format("Max DC + {0}%", minValue + addValue) + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, MAXDCRATE.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, MAXDCRATE.DisplayRectangle.Bottom)); + } + #endregion + + #region MAX_MC_RATE + + minValue = realItem.Stats[Stat.MaxMCRatePercent]; + maxValue = 0; + addValue = 0; + + if (minValue > 0 || maxValue > 0 || addValue > 0) + { + count++; + MirLabel MAXMCRATE = new MirLabel + { + AutoSize = true, + ForeColour = addValue > 0 ? Color.Cyan : Color.White, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + Text = string.Format("Max MC + {0}%", minValue + addValue) + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, MAXMCRATE.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, MAXMCRATE.DisplayRectangle.Bottom)); + } + #endregion + + #region MAX_SC_RATE + + minValue = realItem.Stats[Stat.MaxSCRatePercent]; + maxValue = 0; + addValue = 0; + + if (minValue > 0 || maxValue > 0 || addValue > 0) + { + count++; + MirLabel MAXSCRATE = new MirLabel + { + AutoSize = true, + ForeColour = addValue > 0 ? Color.Cyan : Color.White, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + Text = string.Format("Max SC + {0}%", minValue + addValue) + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, MAXSCRATE.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, MAXSCRATE.DisplayRectangle.Bottom)); + } + #endregion + + #region DAMAGE_REDUCTION + + minValue = realItem.Stats[Stat.DamageReductionPercent]; + maxValue = 0; + addValue = 0; + + if (minValue > 0 || maxValue > 0 || addValue > 0) + { + count++; + MirLabel DAMAGEREDUC = new MirLabel + { + AutoSize = true, + ForeColour = addValue > 0 ? Color.Cyan : Color.White, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + Text = string.Format("All Damage Reduction + {0}%", minValue + addValue) + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, DAMAGEREDUC.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, DAMAGEREDUC.DisplayRectangle.Bottom)); + } + #endregion + if (count > 0) + { + ItemLabel.Size = new Size(ItemLabel.Size.Width, ItemLabel.Size.Height + 4); + + #region OUTLINE + MirControl outLine = new MirControl + { + BackColour = Color.FromArgb(255, 50, 50, 50), + Border = true, + BorderColour = Color.Gray, + NotControl = true, + Parent = ItemLabel, + Opacity = 0.4F, + Location = new Point(0, 0) + }; + outLine.Size = ItemLabel.Size; + #endregion + + return outLine; + } + else + { + ItemLabel.Size = new Size(ItemLabel.Size.Width, ItemLabel.Size.Height - 4); + } + return null; + } + public MirControl WeightInfoLabel(UserItem item, bool Inspect = false) + { + ushort level = MapObject.User.Level; + MirClass job = MapObject.User.Class; + HoverItem = item; + ItemInfo realItem = Functions.GetRealItem(item.Info, level, job, ItemInfoList); + + ItemLabel.Size = new Size(ItemLabel.Size.Width, ItemLabel.Size.Height + 4); + + int count = 0; + int minValue = 0; + int maxValue = 0; + int addValue = 0; + + #region HANDWEIGHT + + minValue = realItem.Stats[Stat.HandWeight]; + maxValue = 0; + addValue = 0; + + if (minValue > 0 || maxValue > 0 || addValue > 0) + { + count++; + MirLabel HANDWEIGHTLabel = new MirLabel + { + AutoSize = true, + ForeColour = addValue > 0 ? Color.Cyan : Color.White, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + //Text = string.Format("Hand Weight + {0}", minValue + addValue) + Text = string.Format(addValue > 0 ? "Hand Weight + {0} (+{1})" : "Hand Weight + {0}", minValue + addValue, addValue) + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, HANDWEIGHTLabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, HANDWEIGHTLabel.DisplayRectangle.Bottom)); + } + + #endregion + + #region WEARWEIGHT + + minValue = realItem.Stats[Stat.WearWeight]; + maxValue = 0; + addValue = 0; + + if (minValue > 0 || maxValue > 0 || addValue > 0) + { + count++; + MirLabel WEARWEIGHTLabel = new MirLabel + { + AutoSize = true, + ForeColour = addValue > 0 ? Color.Cyan : Color.White, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + //Text = string.Format("Wear Weight + {0}", minValue + addValue) + Text = string.Format(addValue > 0 ? "Wear Weight + {0} (+{1})" : "Wear Weight + {0}", minValue + addValue, addValue) + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, WEARWEIGHTLabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, WEARWEIGHTLabel.DisplayRectangle.Bottom)); + } + + #endregion + + #region BAGWEIGHT + + minValue = realItem.Stats[Stat.BagWeight]; + maxValue = 0; + addValue = 0; + + if (minValue > 0 || maxValue > 0 || addValue > 0) + { + count++; + MirLabel BAGWEIGHTLabel = new MirLabel + { + AutoSize = true, + ForeColour = addValue > 0 ? Color.Cyan : Color.White, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + //Text = string.Format("Bag Weight + {0}", minValue + addValue) + Text = string.Format(addValue > 0 ? "Bag Weight + {0} (+{1})" : "Bag Weight + {0}", minValue + addValue, addValue) + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, BAGWEIGHTLabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, BAGWEIGHTLabel.DisplayRectangle.Bottom)); + } + + #endregion + + #region TIME & RANGE + minValue = 0; + maxValue = 0; + addValue = 0; + + if (HoverItem.Info.Type == ItemType.Potion && HoverItem.Info.Durability > 0) + { + count++; + MirLabel TNRLabel = new MirLabel + { + AutoSize = true, + ForeColour = addValue > 0 ? Color.Cyan : Color.White, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + Text = string.Format("Time : {0}", Functions.PrintTimeSpanFromSeconds(HoverItem.Info.Durability * 60)) + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, TNRLabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, TNRLabel.DisplayRectangle.Bottom)); + } + + #endregion + + if (count > 0) + { + ItemLabel.Size = new Size(ItemLabel.Size.Width, ItemLabel.Size.Height + 4); + + #region OUTLINE + MirControl outLine = new MirControl + { + BackColour = Color.FromArgb(255, 50, 50, 50), + Border = true, + BorderColour = Color.Gray, + NotControl = true, + Parent = ItemLabel, + Opacity = 0.4F, + Location = new Point(0, 0) + }; + outLine.Size = ItemLabel.Size; + #endregion + + return outLine; + } + else + { + ItemLabel.Size = new Size(ItemLabel.Size.Width, ItemLabel.Size.Height - 4); + } + return null; + } + public MirControl NeedInfoLabel(UserItem item, bool Inspect = false) + { + ushort level = MapObject.User.Level; + MirClass job = MapObject.User.Class; + HoverItem = item; + ItemInfo realItem = Functions.GetRealItem(item.Info, level, job, ItemInfoList); + + ItemLabel.Size = new Size(ItemLabel.Size.Width, ItemLabel.Size.Height + 4); + + int count = 0; + + #region LEVEL + if (realItem.RequiredAmount > 0) + { + count++; + string text; + Color colour = Color.White; + switch (realItem.RequiredType) + { + case RequiredType.Level: + text = string.Format(GameLanguage.RequiredLevel, realItem.RequiredAmount); + if (MapObject.User.Level < realItem.RequiredAmount) + colour = Color.Red; + break; + case RequiredType.MaxAC: + text = string.Format("Required AC : {0}", realItem.RequiredAmount); + if (MapObject.User.Stats[Stat.MaxAC] < realItem.RequiredAmount) + colour = Color.Red; + break; + case RequiredType.MaxMAC: + text = string.Format("Required MAC : {0}", realItem.RequiredAmount); + if (MapObject.User.Stats[Stat.MaxMAC] < realItem.RequiredAmount) + colour = Color.Red; + break; + case RequiredType.MaxDC: + text = string.Format(GameLanguage.RequiredDC, realItem.RequiredAmount); + if (MapObject.User.Stats[Stat.MaxDC] < realItem.RequiredAmount) + colour = Color.Red; + break; + case RequiredType.MaxMC: + text = string.Format(GameLanguage.RequiredMC, realItem.RequiredAmount); + if (MapObject.User.Stats[Stat.MaxMC] < realItem.RequiredAmount) + colour = Color.Red; + break; + case RequiredType.MaxSC: + text = string.Format(GameLanguage.RequiredSC, realItem.RequiredAmount); + if (MapObject.User.Stats[Stat.MaxSC] < realItem.RequiredAmount) + colour = Color.Red; + break; + case RequiredType.MaxLevel: + text = string.Format("Maximum Level : {0}", realItem.RequiredAmount); + if (MapObject.User.Level > realItem.RequiredAmount) + colour = Color.Red; + break; + case RequiredType.MinAC: + text = string.Format("Required Base AC : {0}", realItem.RequiredAmount); + if (MapObject.User.Stats[Stat.MinAC] < realItem.RequiredAmount) + colour = Color.Red; + break; + case RequiredType.MinMAC: + text = string.Format("Required Base MAC : {0}", realItem.RequiredAmount); + if (MapObject.User.Stats[Stat.MinMAC] < realItem.RequiredAmount) + colour = Color.Red; + break; + case RequiredType.MinDC: + text = string.Format("Required Base DC : {0}", realItem.RequiredAmount); + if (MapObject.User.Stats[Stat.MinDC] < realItem.RequiredAmount) + colour = Color.Red; + break; + case RequiredType.MinMC: + text = string.Format("Required Base MC : {0}", realItem.RequiredAmount); + if (MapObject.User.Stats[Stat.MinMC] < realItem.RequiredAmount) + colour = Color.Red; + break; + case RequiredType.MinSC: + text = string.Format("Required Base SC : {0}", realItem.RequiredAmount); + if (MapObject.User.Stats[Stat.MinSC] < realItem.RequiredAmount) + colour = Color.Red; + break; + default: + text = "Unknown Type Required"; + break; + } + + MirLabel LEVELLabel = new MirLabel + { + AutoSize = true, + ForeColour = colour, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + Text = text + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, LEVELLabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, LEVELLabel.DisplayRectangle.Bottom)); + } + + #endregion + + #region CLASS + if (realItem.RequiredClass != RequiredClass.None) + { + count++; + Color colour = Color.White; + + switch (MapObject.User.Class) + { + case MirClass.Warrior: + if (!realItem.RequiredClass.HasFlag(RequiredClass.Warrior)) + colour = Color.Red; + break; + case MirClass.Wizard: + if (!realItem.RequiredClass.HasFlag(RequiredClass.Wizard)) + colour = Color.Red; + break; + case MirClass.Taoist: + if (!realItem.RequiredClass.HasFlag(RequiredClass.Taoist)) + colour = Color.Red; + break; + } + + MirLabel CLASSLabel = new MirLabel + { + AutoSize = true, + ForeColour = colour, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + Text = string.Format(GameLanguage.ClassRequired, realItem.RequiredClass) + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, CLASSLabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, CLASSLabel.DisplayRectangle.Bottom)); + } + + #endregion + + #region BUYING - SELLING PRICE + if (item.Price() > 0) + { + count++; + string text; + var colour = Color.White; + + text = $"Selling Price : {((long)(item.Price() / 2)).ToString("###,###,##0")} Gold"; + + var costLabel = new MirLabel + { + AutoSize = true, + ForeColour = colour, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + Text = text + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, costLabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, costLabel.DisplayRectangle.Bottom)); + } + + + #endregion + + if (count > 0) + { + ItemLabel.Size = new Size(ItemLabel.Size.Width, ItemLabel.Size.Height + 4); + + #region OUTLINE + MirControl outLine = new MirControl + { + BackColour = Color.FromArgb(255, 50, 50, 50), + Border = true, + BorderColour = Color.Gray, + NotControl = true, + Parent = ItemLabel, + Opacity = 0.4F, + Location = new Point(0, 0) + }; + outLine.Size = ItemLabel.Size; + #endregion + + return outLine; + } + else + { + ItemLabel.Size = new Size(ItemLabel.Size.Width, ItemLabel.Size.Height - 4); + } + return null; + } + public MirControl BindInfoLabel(UserItem item, bool Inspect = false, bool hideAdded = false) + { + ushort level = MapObject.User.Level; + MirClass job = MapObject.User.Class; + HoverItem = item; + ItemInfo realItem = Functions.GetRealItem(item.Info, level, job, ItemInfoList); + + ItemLabel.Size = new Size(ItemLabel.Size.Width, ItemLabel.Size.Height + 4); + + int count = 0; + + #region DONT_DEATH_DROP + + if (HoverItem.Info.Bind != BindMode.None && HoverItem.Info.Bind.HasFlag(BindMode.DontDeathdrop)) + { + count++; + MirLabel DONT_DEATH_DROPLabel = new MirLabel + { + AutoSize = true, + ForeColour = Color.Yellow, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + Text = string.Format("Can't drop on death") + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, DONT_DEATH_DROPLabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, DONT_DEATH_DROPLabel.DisplayRectangle.Bottom)); + } + + #endregion + + #region DONT_DROP + + if (HoverItem.Info.Bind != BindMode.None && HoverItem.Info.Bind.HasFlag(BindMode.DontDrop)) + { + count++; + MirLabel DONT_DROPLabel = new MirLabel + { + AutoSize = true, + ForeColour = Color.Yellow, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + Text = string.Format("Can't drop") + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, DONT_DROPLabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, DONT_DROPLabel.DisplayRectangle.Bottom)); + } + + #endregion + + #region DONT_UPGRADE + + if (HoverItem.Info.Bind != BindMode.None && HoverItem.Info.Bind.HasFlag(BindMode.DontUpgrade)) + { + count++; + MirLabel DONT_UPGRADELabel = new MirLabel + { + AutoSize = true, + ForeColour = Color.Yellow, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + Text = string.Format("Can't upgrade") + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, DONT_UPGRADELabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, DONT_UPGRADELabel.DisplayRectangle.Bottom)); + } + + #endregion + + #region DONT_SELL + + if (HoverItem.Info.Bind != BindMode.None && HoverItem.Info.Bind.HasFlag(BindMode.DontSell)) + { + count++; + MirLabel DONT_SELLLabel = new MirLabel + { + AutoSize = true, + ForeColour = Color.Yellow, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + Text = string.Format("Can't sell") + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, DONT_SELLLabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, DONT_SELLLabel.DisplayRectangle.Bottom)); + } + + #endregion + + #region DONT_TRADE + + if (HoverItem.Info.Bind != BindMode.None && HoverItem.Info.Bind.HasFlag(BindMode.DontTrade)) + { + count++; + MirLabel DONT_TRADELabel = new MirLabel + { + AutoSize = true, + ForeColour = Color.Yellow, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + Text = string.Format("Can't trade") + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, DONT_TRADELabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, DONT_TRADELabel.DisplayRectangle.Bottom)); + } + + #endregion + + #region DONT_STORE + + if (HoverItem.Info.Bind != BindMode.None && HoverItem.Info.Bind.HasFlag(BindMode.DontStore)) + { + count++; + MirLabel DONT_STORELabel = new MirLabel + { + AutoSize = true, + ForeColour = Color.Yellow, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + Text = string.Format("Can't store") + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, DONT_STORELabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, DONT_STORELabel.DisplayRectangle.Bottom)); + } + + #endregion + + #region DONT_REPAIR + + if (HoverItem.Info.Bind != BindMode.None && HoverItem.Info.Bind.HasFlag(BindMode.DontRepair)) + { + count++; + MirLabel DONT_REPAIRLabel = new MirLabel + { + AutoSize = true, + ForeColour = Color.Yellow, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + Text = string.Format("Can't repair") + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, DONT_REPAIRLabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, DONT_REPAIRLabel.DisplayRectangle.Bottom)); + } + + #endregion + + #region DONT_SPECIALREPAIR + + if (HoverItem.Info.Bind != BindMode.None && HoverItem.Info.Bind.HasFlag(BindMode.NoSRepair)) + { + count++; + MirLabel DONT_REPAIRLabel = new MirLabel + { + AutoSize = true, + ForeColour = Color.Yellow, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + Text = string.Format("Can't special repair") + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, DONT_REPAIRLabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, DONT_REPAIRLabel.DisplayRectangle.Bottom)); + } + + #endregion + + #region BREAK_ON_DEATH + + if (HoverItem.Info.Bind != BindMode.None && HoverItem.Info.Bind.HasFlag(BindMode.BreakOnDeath)) + { + count++; + MirLabel DONT_REPAIRLabel = new MirLabel + { + AutoSize = true, + ForeColour = Color.Yellow, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + Text = string.Format("Breaks on death") + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, DONT_REPAIRLabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, DONT_REPAIRLabel.DisplayRectangle.Bottom)); + } + + #endregion + + #region DONT_DESTROY_ON_DROP + + if (HoverItem.Info.Bind != BindMode.None && HoverItem.Info.Bind.HasFlag(BindMode.DestroyOnDrop)) + { + count++; + MirLabel DONT_DODLabel = new MirLabel + { + AutoSize = true, + ForeColour = Color.Yellow, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + Text = string.Format("Destroyed when dropped") + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, DONT_DODLabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, DONT_DODLabel.DisplayRectangle.Bottom)); + } + + #endregion + + #region NoWeddingRing + + if (HoverItem.Info.Bind != BindMode.None && HoverItem.Info.Bind.HasFlag(BindMode.NoWeddingRing)) + { + count++; + MirLabel No_WedLabel = new MirLabel + { + AutoSize = true, + ForeColour = Color.Yellow, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + Text = string.Format("Cannot be a Wedding Ring") + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, No_WedLabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, No_WedLabel.DisplayRectangle.Bottom)); + } + + #endregion + + #region BIND_ON_EQUIP + + if ((HoverItem.Info.Bind.HasFlag(BindMode.BindOnEquip)) & HoverItem.SoulBoundId == -1) + { + count++; + MirLabel BOELabel = new MirLabel + { + AutoSize = true, + ForeColour = Color.Yellow, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + Text = string.Format("SoulBinds on equip") + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, BOELabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, BOELabel.DisplayRectangle.Bottom)); + } + else if (HoverItem.SoulBoundId != -1) + { + count++; + MirLabel BOELabel = new MirLabel + { + AutoSize = true, + ForeColour = Color.Yellow, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + Text = "Soulbound to: " + GetUserName((uint)HoverItem.SoulBoundId) + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, BOELabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, BOELabel.DisplayRectangle.Bottom)); + } + + #endregion + + #region CURSED + + if ((!hideAdded && (!HoverItem.Info.NeedIdentify || HoverItem.Identified)) && HoverItem.Cursed) + { + count++; + MirLabel CURSEDLabel = new MirLabel + { + AutoSize = true, + ForeColour = Color.Yellow, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + Text = string.Format("Cursed") + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, CURSEDLabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, CURSEDLabel.DisplayRectangle.Bottom)); + } + + #endregion + + #region Gems + + if (HoverItem.Info.Type == ItemType.Gem) + { + #region UseOn text + count++; + string Text = ""; + if (HoverItem.Info.Unique == SpecialItemMode.None) + { + Text = "Cannot be used on any item."; + } + else + { + Text = "Can be used on: "; + } + MirLabel GemUseOn = new MirLabel + { + AutoSize = true, + ForeColour = Color.Yellow, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + Text = Text + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, GemUseOn.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, GemUseOn.DisplayRectangle.Bottom)); + #endregion + #region Weapon text + count++; + if (HoverItem.Info.Unique.HasFlag(SpecialItemMode.Paralize)) + { + MirLabel GemWeapon = new MirLabel + { + AutoSize = true, + ForeColour = Color.White, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + Text = "-Weapon" + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, GemWeapon.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, GemWeapon.DisplayRectangle.Bottom)); + } + #endregion + #region Armour text + count++; + if (HoverItem.Info.Unique.HasFlag(SpecialItemMode.Teleport)) + { + MirLabel GemArmour = new MirLabel + { + AutoSize = true, + ForeColour = Color.White, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + Text = "-Armour" + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, GemArmour.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, GemArmour.DisplayRectangle.Bottom)); + } + #endregion + #region Helmet text + count++; + if (HoverItem.Info.Unique.HasFlag(SpecialItemMode.ClearRing)) + { + MirLabel Gemhelmet = new MirLabel + { + AutoSize = true, + ForeColour = Color.White, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + Text = "-Helmet" + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, Gemhelmet.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, Gemhelmet.DisplayRectangle.Bottom)); + } + #endregion + #region Necklace text + count++; + if (HoverItem.Info.Unique.HasFlag(SpecialItemMode.Protection)) + { + MirLabel Gemnecklace = new MirLabel + { + AutoSize = true, + ForeColour = Color.White, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + Text = "-Necklace" + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, Gemnecklace.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, Gemnecklace.DisplayRectangle.Bottom)); + } + #endregion + #region Bracelet text + count++; + if (HoverItem.Info.Unique.HasFlag(SpecialItemMode.Revival)) + { + MirLabel GemBracelet = new MirLabel + { + AutoSize = true, + ForeColour = Color.White, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + Text = "-Bracelet" + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, GemBracelet.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, GemBracelet.DisplayRectangle.Bottom)); + } + #endregion + #region Ring text + count++; + if (HoverItem.Info.Unique.HasFlag(SpecialItemMode.Muscle)) + { + MirLabel GemRing = new MirLabel + { + AutoSize = true, + ForeColour = Color.White, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + Text = "-Ring" + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, GemRing.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, GemRing.DisplayRectangle.Bottom)); + } + #endregion + #region Amulet text + count++; + if (HoverItem.Info.Unique.HasFlag(SpecialItemMode.Flame)) + { + MirLabel Gemamulet = new MirLabel + { + AutoSize = true, + ForeColour = Color.White, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + Text = "-Amulet" + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, Gemamulet.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, Gemamulet.DisplayRectangle.Bottom)); + } + #endregion + #region Belt text + count++; + if (HoverItem.Info.Unique.HasFlag(SpecialItemMode.Healing)) + { + MirLabel Gembelt = new MirLabel + { + AutoSize = true, + ForeColour = Color.White, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + Text = "-Belt" + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, Gembelt.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, Gembelt.DisplayRectangle.Bottom)); + } + #endregion + #region Boots text + count++; + if (HoverItem.Info.Unique.HasFlag(SpecialItemMode.Probe)) + { + MirLabel Gemboots = new MirLabel + { + AutoSize = true, + ForeColour = Color.White, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + Text = "-Boots" + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, Gemboots.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, Gemboots.DisplayRectangle.Bottom)); + } + #endregion + #region Stone text + count++; + if (HoverItem.Info.Unique.HasFlag(SpecialItemMode.Skill)) + { + MirLabel Gemstone = new MirLabel + { + AutoSize = true, + ForeColour = Color.White, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + Text = "-Stone" + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, Gemstone.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, Gemstone.DisplayRectangle.Bottom)); + } + #endregion + #region Torch text + count++; + if (HoverItem.Info.Unique.HasFlag(SpecialItemMode.NoDuraLoss)) + { + MirLabel Gemtorch = new MirLabel + { + AutoSize = true, + ForeColour = Color.White, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + Text = "-Candle" + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, Gemtorch.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, Gemtorch.DisplayRectangle.Bottom)); + } + #endregion + } + + #endregion + + #region CANTAWAKEN + + //if ((HoverItem.Info.CanAwakening != true) && (HoverItem.Info.Type != ItemType.Gem)) + //{ + // count++; + // MirLabel CANTAWAKENINGLabel = new MirLabel + // { + // AutoSize = true, + // ForeColour = Color.Yellow, + // Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + // OutLine = true, + // Parent = ItemLabel, + // Text = string.Format("Can't awaken") + // }; + + // ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, CANTAWAKENINGLabel.DisplayRectangle.Right + 4), + // Math.Max(ItemLabel.Size.Height, CANTAWAKENINGLabel.DisplayRectangle.Bottom)); + //} + + #endregion + + #region EXPIRE + + if (HoverItem.ExpireInfo != null) + { + double remainingSeconds = (HoverItem.ExpireInfo.ExpiryDate - CMain.Now).TotalSeconds; + + count++; + MirLabel EXPIRELabel = new MirLabel + { + AutoSize = true, + ForeColour = Color.Yellow, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + Text = remainingSeconds > 0 ? string.Format("Expires in {0}", Functions.PrintTimeSpanFromSeconds(remainingSeconds)) : "Expired" + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, EXPIRELabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, EXPIRELabel.DisplayRectangle.Bottom)); + } + + #endregion + + #region SEALED + + if (HoverItem.SealedInfo != null) + { + double remainingSeconds = (HoverItem.SealedInfo.ExpiryDate - CMain.Now).TotalSeconds; + + if (remainingSeconds > 0) + { + count++; + MirLabel SEALEDLabel = new MirLabel + { + AutoSize = true, + ForeColour = Color.Red, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + Text = remainingSeconds > 0 ? string.Format("Sealed for {0}", Functions.PrintTimeSpanFromSeconds(remainingSeconds)) : "" + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, SEALEDLabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, SEALEDLabel.DisplayRectangle.Bottom)); + } + } + + #endregion + + if (count > 0) + { + ItemLabel.Size = new Size(ItemLabel.Size.Width, ItemLabel.Size.Height + 4); + + #region OUTLINE + MirControl outLine = new MirControl + { + BackColour = Color.FromArgb(255, 50, 50, 50), + Border = true, + BorderColour = Color.Gray, + NotControl = true, + Parent = ItemLabel, + Opacity = 0.4F, + Location = new Point(0, 0) + }; + outLine.Size = ItemLabel.Size; + #endregion + + return outLine; + } + else + { + ItemLabel.Size = new Size(ItemLabel.Size.Width, ItemLabel.Size.Height - 4); + } + return null; + } + public MirControl OverlapInfoLabel(UserItem item, bool Inspect = false) + { + ushort level = MapObject.User.Level; + MirClass job = MapObject.User.Class; + HoverItem = item; + ItemInfo realItem = Functions.GetRealItem(item.Info, level, job, ItemInfoList); + + ItemLabel.Size = new Size(ItemLabel.Size.Width, ItemLabel.Size.Height + 4); + + int count = 0; + + + #region GEM + + if (realItem.Type == ItemType.Gem) + { + string text = ""; + + switch (realItem.Shape) + { + case 1: + text = "Hold CTRL and left click to repair weapons."; + break; + case 2: + text = "Hold CTRL and left click to repair armour\nand accessory items."; + break; + case 3: + case 4: + text = "Hold CTRL and left click to combine with an item."; + break; + case 8: + text = "Hold CTRL and left click to seal an item."; + break; + } + count++; + MirLabel GEMLabel = new MirLabel + { + AutoSize = true, + ForeColour = Color.White, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + Text = text + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, GEMLabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, GEMLabel.DisplayRectangle.Bottom)); + } + + #endregion + + #region SPLITUP + + if (realItem.StackSize > 1 && realItem.Type != ItemType.Gem) + { + count++; + MirLabel SPLITUPLabel = new MirLabel + { + AutoSize = true, + ForeColour = Color.White, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + Text = string.Format(GameLanguage.MaxCombine, realItem.StackSize, "\n") + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, SPLITUPLabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, SPLITUPLabel.DisplayRectangle.Bottom)); + } + + #endregion + + if (count > 0) + { + ItemLabel.Size = new Size(ItemLabel.Size.Width, ItemLabel.Size.Height + 4); + + #region OUTLINE + MirControl outLine = new MirControl + { + BackColour = Color.FromArgb(255, 50, 50, 50), + Border = true, + BorderColour = Color.Gray, + NotControl = true, + Parent = ItemLabel, + Opacity = 0.4F, + Location = new Point(0, 0) + }; + outLine.Size = ItemLabel.Size; + #endregion + + return outLine; + } + else + { + ItemLabel.Size = new Size(ItemLabel.Size.Width, ItemLabel.Size.Height - 4); + } + return null; + } + public MirControl StoryInfoLabel(UserItem item, bool Inspect = false) + { + ushort level = MapObject.User.Level; + MirClass job = MapObject.User.Class; + HoverItem = item; + ItemInfo realItem = Functions.GetRealItem(item.Info, level, job, ItemInfoList); + + ItemLabel.Size = new Size(ItemLabel.Size.Width, ItemLabel.Size.Height + 4); + + int count = 0; + + #region TOOLTIP + + if (realItem.Type == ItemType.Scroll && realItem.Shape == 7)//Credit Scroll + { + HoverItem.Info.ToolTip = string.Format("Adds {0} Credits to your Account.", HoverItem.Info.Price); + } + + if (!string.IsNullOrEmpty(HoverItem.Info.ToolTip)) + { + count++; + + MirLabel IDLabel = new MirLabel + { + AutoSize = true, + ForeColour = Color.DarkKhaki, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + Text = GameLanguage.ItemDescription + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, IDLabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, IDLabel.DisplayRectangle.Bottom)); + + MirLabel TOOLTIPLabel = new MirLabel + { + AutoSize = true, + ForeColour = Color.Khaki, + Location = new Point(4, ItemLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = ItemLabel, + Text = HoverItem.Info.ToolTip + }; + + ItemLabel.Size = new Size(Math.Max(ItemLabel.Size.Width, TOOLTIPLabel.DisplayRectangle.Right + 4), + Math.Max(ItemLabel.Size.Height, TOOLTIPLabel.DisplayRectangle.Bottom)); + } + + #endregion + + if (count > 0) + { + ItemLabel.Size = new Size(ItemLabel.Size.Width, ItemLabel.Size.Height + 4); + + #region OUTLINE + MirControl outLine = new MirControl + { + BackColour = Color.FromArgb(255, 50, 50, 50), + Border = true, + BorderColour = Color.Gray, + NotControl = true, + Parent = ItemLabel, + Opacity = 0.4F, + Location = new Point(0, 0) + }; + outLine.Size = ItemLabel.Size; + #endregion + + return outLine; + } + else + { + ItemLabel.Size = new Size(ItemLabel.Size.Width, ItemLabel.Size.Height - 4); + } + return null; + } + + public void CreateItemLabel(UserItem item, bool inspect = false, bool hideDura = false, bool hideAdded = false) + { + CMain.DebugText = CMain.Random.Next(1, 100).ToString(); + + if (item == null || HoverItem != item) + { + DisposeItemLabel(); + + if (item == null) + { + HoverItem = null; + return; + } + } + + if (item == HoverItem && ItemLabel != null && !ItemLabel.IsDisposed) return; + ushort level = MapObject.User.Level; + MirClass job = MapObject.User.Class; + HoverItem = item; + ItemInfo realItem = Functions.GetRealItem(item.Info, level, job, ItemInfoList); + + ItemLabel = new MirControl + { + BackColour = Color.FromArgb(255, 0, 0, 0), + Border = true, + BorderColour = ((HoverItem.CurrentDura == 0 && HoverItem.MaxDura != 0) ? Color.Red : Color.FromArgb(255, 148, 146, 148)), + DrawControlTexture = true, + NotControl = true, + Parent = this, + Opacity = 0.8F + }; + + //Name Info Label + MirControl[] outlines = new MirControl[8]; + outlines[0] = NameInfoLabel(item, inspect, hideDura); + //Attribute Info1 Label - Attack Info + outlines[1] = AttackInfoLabel(item, inspect, hideAdded); + //Attribute Info2 Label - Defence Info + outlines[2] = DefenceInfoLabel(item, inspect, hideAdded); + //Attribute Info3 Label - Weight Info + outlines[3] = WeightInfoLabel(item, inspect); + //need Info Label + outlines[4] = NeedInfoLabel(item, inspect); + //Bind Info Label + outlines[5] = BindInfoLabel(item, inspect, hideAdded); + //Overlap Info Label + outlines[6] = OverlapInfoLabel(item, inspect); + //Story Label + outlines[7] = StoryInfoLabel(item, inspect); + + foreach (var outline in outlines) + { + if (outline != null) + { + outline.Size = new Size(ItemLabel.Size.Width, outline.Size.Height); + } + } + + //ItemLabel.Visible = true; + } + public void CreateMailLabel(ClientMail mail) + { + if (mail == null) + { + DisposeMailLabel(); + return; + } + + if (MailLabel != null && !MailLabel.IsDisposed) return; + + MailLabel = new MirControl + { + BackColour = Color.FromArgb(255, 50, 50, 50), + Border = true, + BorderColour = Color.Gray, + DrawControlTexture = true, + NotControl = true, + Parent = this, + Opacity = 0.7F + }; + + MirLabel nameLabel = new MirLabel + { + AutoSize = true, + ForeColour = Color.Yellow, + Location = new Point(4, 4), + OutLine = true, + Parent = MailLabel, + Text = mail.SenderName + }; + + MailLabel.Size = new Size(Math.Max(MailLabel.Size.Width, nameLabel.DisplayRectangle.Right + 4), + Math.Max(MailLabel.Size.Height, nameLabel.DisplayRectangle.Bottom)); + + MirLabel dateLabel = new MirLabel + { + AutoSize = true, + ForeColour = Color.White, + Location = new Point(4, MailLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = MailLabel, + Text = string.Format(GameLanguage.DateSent, mail.DateSent.ToString("dd/MM/yy H:mm:ss")) + }; + + MailLabel.Size = new Size(Math.Max(MailLabel.Size.Width, dateLabel.DisplayRectangle.Right + 4), + Math.Max(MailLabel.Size.Height, dateLabel.DisplayRectangle.Bottom)); + + if (mail.Gold > 0) + { + MirLabel goldLabel = new MirLabel + { + AutoSize = true, + ForeColour = Color.White, + Location = new Point(4, MailLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = MailLabel, + Text = "Gold: " + mail.Gold + }; + + MailLabel.Size = new Size(Math.Max(MailLabel.Size.Width, goldLabel.DisplayRectangle.Right + 4), + Math.Max(MailLabel.Size.Height, goldLabel.DisplayRectangle.Bottom)); + } + + MirLabel openedLabel = new MirLabel + { + AutoSize = true, + ForeColour = Color.Red, + Location = new Point(4, MailLabel.DisplayRectangle.Bottom), + OutLine = true, + Parent = MailLabel, + Text = mail.Opened ? "[Old]" : "[New]" + }; + + MailLabel.Size = new Size(Math.Max(MailLabel.Size.Width, openedLabel.DisplayRectangle.Right + 4), + Math.Max(MailLabel.Size.Height, openedLabel.DisplayRectangle.Bottom)); + } + public void CreateMemoLabel(ClientFriend friend) + { + if (friend == null) + { + DisposeMemoLabel(); + return; + } + + if (MemoLabel != null && !MemoLabel.IsDisposed) return; + + MemoLabel = new MirControl + { + BackColour = Color.FromArgb(255, 50, 50, 50), + Border = true, + BorderColour = Color.Gray, + DrawControlTexture = true, + NotControl = true, + Parent = this, + Opacity = 0.7F + }; + + MirLabel memoLabel = new MirLabel + { + AutoSize = true, + ForeColour = Color.White, + Location = new Point(4, 4), + OutLine = true, + Parent = MemoLabel, + Text = Functions.StringOverLines(friend.Memo, 5, 20) + }; + + MemoLabel.Size = new Size(Math.Max(MemoLabel.Size.Width, memoLabel.DisplayRectangle.Right + 4), + Math.Max(MemoLabel.Size.Height, memoLabel.DisplayRectangle.Bottom + 4)); + } + + public static ItemInfo GetInfo(int index) + { + for (int i = 0; i < ItemInfoList.Count; i++) + { + ItemInfo info = ItemInfoList[i]; + if (info.Index != index) continue; + return info; + } + + return null; + } + + public string GetUserName(uint id) + { + for (int i = 0; i < UserIdList.Count; i++) + { + UserId who = UserIdList[i]; + if (id == who.Id) + return who.UserName; + } + Network.Enqueue(new C.RequestUserName { UserID = id }); + UserIdList.Add(new UserId() { Id = id, UserName = "Unknown" }); + return ""; + } + + public class UserId + { + public long Id = 0; + public string UserName = ""; + } + + public class OutPutMessage + { + public string Message; + public long ExpireTime; + public OutputMessageType Type; + } + + public void Rankings(S.Rankings p) + { + foreach (RankCharacterInfo info in p.ListingDetails) + { + if (RankingList.ContainsKey(info.PlayerId)) + RankingList[info.PlayerId] = info; + else + RankingList.Add(info.PlayerId, info); + } + List listings = new List(); + foreach (long id in p.Listings) + listings.Add(RankingList[id]); + + RankingDialog.RecieveRanks(listings, p.RankType, p.MyRank, p.Count); + } + + private void OpenBrowser(S.OpenBrowser p) { + BrowserHelper.OpenDefaultBrowser(p.Url); + } + + public void PlaySound(S.PlaySound p) + { + SoundManager.PlaySound(p.Sound, false); + } + private void SetTimer(S.SetTimer p) + { + GameScene.Scene.TimerControl.AddTimer(p); + } + + private void ExpireTimer(S.ExpireTimer p) + { + GameScene.Scene.TimerControl.ExpireTimer(p.Key); + } + + private void SetCompass(S.SetCompass p) + { + GameScene.Scene.CompassControl.SetPoint(p.Location); + } + + private void Roll(S.Roll p) + { + GameScene.Scene.RollControl.Setup(p.Type, p.Page, p.Result, p.AutoRoll); + } + + public void ShowNotice(S.UpdateNotice p) + { + NoticeDialog.Update(p.Notice); + } + + #region Disposable + + protected override void Dispose(bool disposing) + { + if (disposing) + { + Scene = null; + User = null; + + MoveTime = 0; + AttackTime = 0; + CanMove = false; + + MapControl = null; + MainDialog = null; + ChatDialog = null; + InventoryDialog = null; + CharacterDialog = null; + StorageDialog = null; + BeltDialog = null; + OptionDialog = null; + MenuDialog = null; + NPCDialog = null; + QuestDetailDialog = null; + QuestListDialog = null; + QuestLogDialog = null; + QuestTrackingDialog = null; + GameShopDialog = null; + + RelationshipDialog = null; + + HoverItem = null; + SelectedCell = null; + PickedUpGold = false; + + UseItemTime = 0; + PickUpTime = 0; + + DisposeItemLabel(); + + AMode = 0; + PMode = 0; + Lights = 0; + + NPCTime = 0; + NPCID = 0; + DefaultNPCID = 0; + + for (int i = 0; i < OutputLines.Length; i++) + if (OutputLines[i] != null && OutputLines[i].IsDisposed) + OutputLines[i].Dispose(); + + OutputMessages.Clear(); + OutputMessages = null; + } + + base.Dispose(disposing); + } + + #endregion + + } + + public sealed class MapControl : MirControl + { + public static UserObject User + { + get { return MapObject.User; } + set { MapObject.User = value; } + } + + public static List Objects = new List(); + + public const int CellWidth = 48; + public const int CellHeight = 32; + + public static int OffSetX; + public static int OffSetY; + + public static int ViewRangeX; + public static int ViewRangeY; + + private bool _autoPath; + public bool AutoPath + { + get + { + return _autoPath; + } + set + { + if (_autoPath == value) return; + _autoPath = value; + + if (!_autoPath) + CurrentPath = null; + } + } + + public PathFinder PathFinder; + public List CurrentPath = null; + + public static Point MapLocation + { + get { return GameScene.User == null ? Point.Empty : new Point(MouseLocation.X / CellWidth - OffSetX, MouseLocation.Y / CellHeight - OffSetY).Add(GameScene.User.CurrentLocation); } + } + + public static Point ToMouseLocation(Point p) + { + return new Point((p.X - MapObject.User.Movement.X + OffSetX) * CellWidth, (p.Y - MapObject.User.Movement.Y + OffSetY) * CellHeight).Add(MapObject.User.OffSetMove); + } + + public static MouseButtons MapButtons; + public static Point MouseLocation; + public static long InputDelay; + + public static Dictionary MiniMaps = new Dictionary(); + + private static long nextAction; + public static long NextAction + { + get { return nextAction; } + set + { + if (GameScene.Observing) return; + nextAction = value; + } + } + + public CellInfo[,] M2CellInfo; + public int Width, Height; + + public int Index; + public string FileName = String.Empty; + public string Title = String.Empty; + public ushort MiniMap, BigMap, Music, SetMusic; + public LightSetting Lights; + public bool Lightning, Fire; + public byte MapDarkLight; + public long LightningTime, FireTime; + + public bool FloorValid, LightsValid; + + public long OutputDelay; + public Texture MiniMapTexture; + + public int AnimationCount; + + public static List Effects = new List(); + + public MapControl() + { + MapButtons = MouseButtons.None; + + OffSetX = Settings.ScreenWidth / 2 / CellWidth; + OffSetY = Settings.ScreenHeight / 2 / CellHeight - 1; + + ViewRangeX = OffSetX + 6; + ViewRangeY = OffSetY + 6; + + Size = new Size(Settings.ScreenWidth, Settings.ScreenHeight); + DrawControlTexture = true; + BackColour = Color.Black; + + MouseDown += OnMouseDown; + MouseMove += (o, e) => MouseLocation = e.Location; + Click += OnMouseClick; + } + + public void ResetMap() + { + GameScene.Scene.NPCDialog.Hide(); + + MapObject.MouseObjectID = 0; + MapObject.TargetObjectID = 0; + MapObject.TargetObjectID = 0; + MapObject.MagicObjectID = 0; + + if (M2CellInfo != null) + { + for (var i = Objects.Count - 1; i >= 0; i--) + { + var obj = Objects[i]; + if (obj == null) continue; + + obj.Remove(); + } + } + + Objects.Clear(); + Effects.Clear(); + + if (User != null) + Objects.Add(User); + } + + public void LoadMap() + { + ResetMap(); + + MapObject.MouseObjectID = 0; + MapObject.TargetObjectID = 0; + MapObject.MagicObjectID = 0; + MiniMaps.TryGetValue(Index, out MiniMapTexture); + + MapReader Map = new MapReader(FileName); + M2CellInfo = Map.MapCells; + Width = Map.Width; + Height = Map.Height; + + if (MiniMapTexture == null) + CreateMiniMap(); + + PathFinder = new PathFinder(this); + + try + { + if (SetMusic != Music) + { + SoundManager.Music?.Dispose(); + SoundManager.PlayMusic(Music, true); + } + } + catch (Exception) + { + // Do nothing. index was not valid. + } + + SetMusic = Music; + } + + public void CreateMiniMap() + { + var texture = new Texture(DXManager.Device, Width, Height, 1, Usage.None, Format.A8R8G8B8, Pool.Managed); + DataRectangle stream = texture.LockRectangle(0, LockFlags.Discard); + using (Bitmap image = new Bitmap(Width, Height, Width * 4, PixelFormat.Format32bppArgb, stream.Data.DataPointer)) + { + using (Graphics graphics = Graphics.FromImage(image)) + { + graphics.Clear(Color.White); + } + for (int y = 0; y < Height; y++) + for (int x = 0; x < Width; x++) + { + if (!WalkableCell(x, y)) + image.SetPixel(x, y, Color.Black); + } + } + texture.UnlockRectangle(0); + MiniMaps.Add(Index, texture); + MiniMapTexture = texture; + } + public bool WalkableCell(int x, int y) + { + if ((M2CellInfo[x, y].BackImage & 0x20000000) != 0 || (M2CellInfo[x, y].FrontImage & 0x8000) != 0) + return false; + return true; + } + + + public void Process() + { + User.Process(); + for (int i = Objects.Count - 1; i >= 0; i--) + { + MapObject ob = Objects[i]; + if (ob == User) continue; + // if (ob.ActionFeed.Count > 0 || ob.Effects.Count > 0 || GameScene.CanMove || CMain.Time >= ob.NextMotion) + ob.Process(); + } + + for (int i = Effects.Count - 1; i >= 0; i--) + Effects[i].Process(); + + if (MapObject.TargetObject != null && MapObject.TargetObject is MonsterObject && MapObject.TargetObject.AI == 64) + MapObject.TargetObjectID = 0; + if (MapObject.MagicObject != null && MapObject.MagicObject is MonsterObject && MapObject.MagicObject.AI == 64) + MapObject.MagicObjectID = 0; + + CheckInput(); + + + MapObject bestmouseobject = null; + for (int y = MapLocation.Y + 2; y >= MapLocation.Y - 2; y--) + { + if (y >= Height) continue; + if (y < 0) break; + for (int x = MapLocation.X + 2; x >= MapLocation.X - 2; x--) + { + if (x >= Width) continue; + if (x < 0) break; + CellInfo cell = M2CellInfo[x, y]; + if (cell.CellObjects == null) continue; + + for (int i = cell.CellObjects.Count - 1; i >= 0; i--) + { + MapObject ob = cell.CellObjects[i]; + if (ob == MapObject.User || !ob.MouseOver(CMain.MPoint)) continue; + + if (MapObject.MouseObject != ob) + { + if (ob.Dead) + { + if (!Settings.TargetDead && GameScene.TargetDeadTime <= CMain.Time) continue; + + bestmouseobject = ob; + //continue; + } + MapObject.MouseObjectID = ob.ObjectID; + Redraw(); + } + if (bestmouseobject != null && MapObject.MouseObject == null) + { + MapObject.MouseObjectID = bestmouseobject.ObjectID; + Redraw(); + } + return; + } + } + } + + + if (MapObject.MouseObject != null) + { + MapObject.MouseObjectID = 0; + Redraw(); + } + } + + public static MapObject GetObject(uint targetID) + { + for (int i = 0; i < Objects.Count; i++) + { + MapObject ob = Objects[i]; + if (ob.ObjectID != targetID) continue; + return ob; + } + return null; + } + + public override void Draw() + { + //Do nothing. + } + + protected override void CreateTexture() + { + if (User == null) return; + + if (!FloorValid) + DrawFloor(); + + + if (Size != TextureSize) + DisposeTexture(); + + if (ControlTexture == null || ControlTexture.Disposed) + { + DXManager.ControlList.Add(this); + ControlTexture = new Texture(DXManager.Device, Size.Width, Size.Height, 1, Usage.RenderTarget, Format.A8R8G8B8, Pool.Default); + TextureSize = Size; + } + + Surface oldSurface = DXManager.CurrentSurface; + Surface surface = ControlTexture.GetSurfaceLevel(0); + DXManager.SetSurface(surface); + DXManager.Device.Clear(ClearFlags.Target, BackColour, 0, 0); + + if (FloorValid) + { + DXManager.Draw(DXManager.FloorTexture, new Rectangle(0, 0, Settings.ScreenWidth, Settings.ScreenHeight), Vector3.Zero, Color.White); + } + + DrawObjects(); + + //Render Death, + + LightSetting setting = Lights == LightSetting.Normal ? GameScene.Scene.Lights : Lights; + + if (setting != LightSetting.Day) + { + DrawLights(setting); + } + + if (Settings.DropView || GameScene.DropViewTime > CMain.Time) + { + for (int i = 0; i < Objects.Count; i++) + { + ItemObject ob = Objects[i] as ItemObject; + if (ob == null) continue; + + if (!ob.MouseOver(MouseLocation)) + ob.DrawName(); + } + } + + if (MapObject.MouseObject != null && !(MapObject.MouseObject is ItemObject)) + MapObject.MouseObject.DrawName(); + + int offSet = 0; + + if (Settings.DisplayBodyName) + { + for (int i = 0; i < Objects.Count; i++) + { + MonsterObject ob = Objects[i] as MonsterObject; + if (ob == null) continue; + + if (!ob.MouseOver(MouseLocation)) continue; + ob.DrawName(); + } + } + + for (int i = 0; i < Objects.Count; i++) + { + ItemObject ob = Objects[i] as ItemObject; + if (ob == null) continue; + + if (!ob.MouseOver(MouseLocation)) continue; + ob.DrawName(offSet); + offSet -= ob.NameLabel.Size.Height + (ob.NameLabel.Border ? 1 : 0); + } + + if (MapObject.User.MouseOver(MouseLocation)) + MapObject.User.DrawName(); + + DXManager.SetSurface(oldSurface); + surface.Dispose(); + TextureValid = true; + + } + protected internal override void DrawControl() + { + if (!DrawControlTexture) + return; + + if (!TextureValid) + CreateTexture(); + + if (ControlTexture == null || ControlTexture.Disposed) + return; + + float oldOpacity = DXManager.Opacity; + + if (MapObject.User.Dead) DXManager.SetGrayscale(true); + + DXManager.DrawOpaque(ControlTexture, new Rectangle(0, 0, Settings.ScreenWidth, Settings.ScreenHeight), Vector3.Zero, Color.White, Opacity); + + if (MapObject.User.Dead) DXManager.SetGrayscale(false); + + CleanTime = CMain.Time + Settings.CleanDelay; + } + + private void DrawFloor() + { + if (DXManager.FloorTexture == null || DXManager.FloorTexture.Disposed) + { + DXManager.FloorTexture = new Texture(DXManager.Device, Settings.ScreenWidth, Settings.ScreenHeight, 1, Usage.RenderTarget, Format.A8R8G8B8, Pool.Default); + DXManager.FloorSurface = DXManager.FloorTexture.GetSurfaceLevel(0); + } + + Surface oldSurface = DXManager.CurrentSurface; + DXManager.SetSurface(DXManager.FloorSurface); + DXManager.Device.Clear(ClearFlags.Target, Color.Empty, 0, 0); //Color.Black + + int index; + int drawY, drawX; + + for (int y = User.Movement.Y - ViewRangeY; y <= User.Movement.Y + ViewRangeY + 5; y++) + { + if (y <= 0) continue; + if (y >= Height) break; + drawY = (y - User.Movement.Y + OffSetY) * CellHeight + User.OffSetMove.Y; //Moving OffSet + + for (int x = User.Movement.X - ViewRangeX; x <= User.Movement.X + ViewRangeX; x++) + { + if (x < 0) continue; + if (x >= Width) break; + drawX = (x - User.Movement.X + OffSetX) * CellWidth - OffSetX + User.OffSetMove.X; //Moving OffSet + + index = M2CellInfo[x, y].MiddleImage - 1; + + if ((index < 0) || (M2CellInfo[x, y].MiddleIndex == -1)) continue; + Libraries.MapLibs[M2CellInfo[x, y].MiddleIndex].Draw(index, drawX, drawY); + } + } + + DXManager.SetSurface(oldSurface); + + FloorValid = true; + } + + private void DrawObjects() + { + if (Settings.Effect) + { + for (int i = Effects.Count - 1; i >= 0; i--) + { + if (!Effects[i].DrawBehind) continue; + Effects[i].Draw(); + } + } + + for (int y = User.Movement.Y - ViewRangeY; y <= User.Movement.Y + ViewRangeY + 25; y++) + { + if (y <= 0) continue; + if (y >= Height) break; + for (int x = User.Movement.X - ViewRangeX; x <= User.Movement.X + ViewRangeX; x++) + { + if (x < 0) continue; + if (x >= Width) break; + M2CellInfo[x, y].DrawDeadObjects(); + } + } + + for (int y = User.Movement.Y - ViewRangeY; y <= User.Movement.Y + ViewRangeY + 25; y++) + { + if (y <= 0) continue; + if (y >= Height) break; + int drawY = (y - User.Movement.Y + OffSetY + 1) * CellHeight + User.OffSetMove.Y; + + for (int x = User.Movement.X - ViewRangeX; x <= User.Movement.X + ViewRangeX; x++) + { + if (x < 0) continue; + if (x >= Width) break; + int drawX = (x - User.Movement.X + OffSetX) * CellWidth - OffSetX + User.OffSetMove.X; + int index; + byte animation; + bool blend; + Size s; + + #region Draw front layer + index = (M2CellInfo[x, y].FrontImage & 0x7FFF) - 1; + + if (index < 0) continue; + + int fileIndex = M2CellInfo[x, y].FrontIndex; + if (fileIndex == -1) continue; + animation = M2CellInfo[x, y].FrontAnimationFrame; + + if ((animation & 0x80) > 0) + { + blend = true; + animation &= 0x7F; + } + else + blend = false; + + + if (animation > 0) + { + byte animationTick = M2CellInfo[x, y].FrontAnimationTick; + index += (AnimationCount % (animation + (animation * animationTick))) / (1 + animationTick); + } + + s = Libraries.MapLibs[fileIndex].GetSize(index); + + if (blend) + { + if ((fileIndex > 99) & (fileIndex < 199)) + Libraries.MapLibs[fileIndex].DrawBlend(index, new Point(drawX, drawY - (3 * CellHeight)), Color.White, true); + else + Libraries.MapLibs[fileIndex].DrawBlend(index, new Point(drawX, drawY - s.Height), Color.White, (index >= 2723 && index <= 2732)); + } + else + Libraries.MapLibs[fileIndex].Draw(index, drawX, drawY - s.Height); + #endregion + } + + for (int x = User.Movement.X - ViewRangeX; x <= User.Movement.X + ViewRangeX; x++) + { + if (x < 0) continue; + if (x >= Width) break; + M2CellInfo[x, y].DrawObjects(); + } + } + + DXManager.Sprite.Flush(); + float oldOpacity = DXManager.Opacity; + DXManager.SetOpacity(0.4F); + + //MapObject.User.DrawMount(); + + MapObject.User.DrawBody(); + + if ((MapObject.User.Direction == MirDirection.Up) || + (MapObject.User.Direction == MirDirection.UpLeft) || + (MapObject.User.Direction == MirDirection.UpRight) || + (MapObject.User.Direction == MirDirection.Right) || + (MapObject.User.Direction == MirDirection.Left)) + { + MapObject.User.DrawHead(); + MapObject.User.DrawWings(); + } + else + { + MapObject.User.DrawWings(); + MapObject.User.DrawHead(); + } + + DXManager.SetOpacity(oldOpacity); + + if (Settings.HighlightTarget) + { + if (MapObject.MouseObject != null && !MapObject.MouseObject.Dead && MapObject.MouseObject != MapObject.TargetObject && MapObject.MouseObject.Blend) + MapObject.MouseObject.DrawBlend(); + + if (MapObject.TargetObject != null) + { + Libraries.Prguse.Draw(210, MapObject.TargetObject.DrawLocation.X - 16, MapObject.TargetObject.DrawLocation.Y - 16); + MapObject.TargetObject.DrawBlend(); + } + } + + for (int i = 0; i < Objects.Count; i++) + { + Objects[i].DrawEffects(Settings.Effect); + + if (Settings.NameView && !(Objects[i] is ItemObject) && !Objects[i].Dead) + Objects[i].DrawName(); + + Objects[i].DrawChat(); + Objects[i].DrawHealth(); + Objects[i].DrawPoison(); + + Objects[i].DrawDamages(); + } + + if (Settings.Effect) + { + for (int i = Effects.Count - 1; i >= 0; i--) + { + if (Effects[i].DrawBehind) continue; + Effects[i].Draw(); + } + } + } + + private Color GetBlindLight(Color light) + { + if (MapObject.User.BlindTime <= CMain.Time && MapObject.User.BlindCount < 25) + { + MapObject.User.BlindTime = CMain.Time + 100; + MapObject.User.BlindCount++; + } + + int count = MapObject.User.BlindCount; + light = Color.FromArgb(255, Math.Max(20, light.R - (count * 10)), Math.Max(20, light.G - (count * 10)), Math.Max(20, light.B - (count * 10))); + + return light; + } + + private void DrawLights(LightSetting setting) + { + if (DXManager.Lights == null || DXManager.Lights.Count == 0) return; + + if (DXManager.LightTexture == null || DXManager.LightTexture.Disposed) + { + DXManager.LightTexture = new Texture(DXManager.Device, Settings.ScreenWidth, Settings.ScreenHeight, 1, Usage.RenderTarget, Format.A8R8G8B8, Pool.Default); + DXManager.LightSurface = DXManager.LightTexture.GetSurfaceLevel(0); + } + + Surface oldSurface = DXManager.CurrentSurface; + DXManager.SetSurface(DXManager.LightSurface); + + #region Night Lights + Color darkness; + + switch (setting) + { + case LightSetting.Night: + { + switch (MapDarkLight) + { + case 1: + darkness = Color.FromArgb(255, 20, 20, 20); + break; + case 2: + darkness = Color.LightSlateGray; + break; + case 3: + darkness = Color.SkyBlue; + break; + case 4: + darkness = Color.Goldenrod; + break; + default: + darkness = Color.Black; + break; + } + } + break; + case LightSetting.Evening: + case LightSetting.Dawn: + darkness = Color.FromArgb(255, 50, 50, 50); + break; + default: + case LightSetting.Day: + darkness = Color.FromArgb(255, 255, 255, 255); + break; + } + + DXManager.Device.Clear(ClearFlags.Target, darkness, 0, 0); + + #endregion + + int light; + Point p; + DXManager.SetBlend(true); + DXManager.Device.SetRenderState(RenderState.SourceBlend, Blend.SourceAlpha); + DXManager.Device.SetRenderState(RenderState.DestinationBlend, Blend.One); + + #region Object Lights (Player/Mob/NPC) + for (int i = 0; i < Objects.Count; i++) + { + MapObject ob = Objects[i]; + if (ob.Light > 0 && (!ob.Dead || ob == MapObject.User || ob.Race == ObjectType.Spell)) + { + light = ob.Light; + + int lightRange = light % 15; + if (lightRange >= DXManager.Lights.Count) + lightRange = DXManager.Lights.Count - 1; + + p = ob.DrawLocation; + + Color lightColour = ob.LightColour; + + if (ob.Race == ObjectType.Player) + { + switch (light / 15) + { + case 0://no light source + lightColour = Color.FromArgb(255, 60, 60, 60); + break; + case 1: + lightColour = Color.FromArgb(255, 120, 120, 120); + break; + case 2://Candle + lightColour = Color.FromArgb(255, 180, 180, 180); + break; + case 3://Torch + lightColour = Color.FromArgb(255, 240, 240, 240); + break; + default://Peddler Torch + lightColour = Color.FromArgb(255, 255, 255, 255); + break; + } + } + else if (ob.Race == ObjectType.Merchant) + { + lightColour = Color.FromArgb(255, 120, 120, 120); + } + + if (DXManager.Lights[lightRange] != null && !DXManager.Lights[lightRange].Disposed) + { + p.Offset(-(DXManager.LightSizes[lightRange].X / 2) - (CellWidth / 2), -(DXManager.LightSizes[lightRange].Y / 2) - (CellHeight / 2) -5); + DXManager.Draw(DXManager.Lights[lightRange], null, new Vector3((float)p.X, (float)p.Y, 0.0F), lightColour); + } + } + + #region Object Effect Lights + if (!Settings.Effect) continue; + for (int e = 0; e < ob.Effects.Count; e++) + { + Effect effect = ob.Effects[e]; + if (!effect.Blend || CMain.Time < effect.Start || (!(effect is Missile) && effect.Light < ob.Light)) continue; + + light = effect.Light; + + p = effect.DrawLocation; + + var lightColour = effect.LightColour; + + if (DXManager.Lights[light] != null && !DXManager.Lights[light].Disposed) + { + p.Offset(-(DXManager.LightSizes[light].X / 2) - (CellWidth / 2), -(DXManager.LightSizes[light].Y / 2) - (CellHeight / 2) - 5); + DXManager.Draw(DXManager.Lights[light], null, new Vector3((float)p.X, (float)p.Y, 0.0F), lightColour); + } + + } + #endregion + } + #endregion + + #region Map Effect Lights + if (Settings.Effect) + { + for (int e = 0; e < Effects.Count; e++) + { + Effect effect = Effects[e]; + if (!effect.Blend || CMain.Time < effect.Start) continue; + + light = effect.Light; + if (light == 0) continue; + + p = effect.DrawLocation; + + var lightColour = Color.White; + + if (DXManager.Lights[light] != null && !DXManager.Lights[light].Disposed) + { + p.Offset(-(DXManager.LightSizes[light].X / 2) - (CellWidth / 2), -(DXManager.LightSizes[light].Y / 2) - (CellHeight / 2) - 5); + DXManager.Draw(DXManager.Lights[light], null, new Vector3((float)p.X, (float)p.Y, 0.0F), lightColour); + } + } + } + #endregion + + #region Map Lights + for (int y = MapObject.User.Movement.Y - ViewRangeY - 24; y <= MapObject.User.Movement.Y + ViewRangeY + 24; y++) + { + if (y < 0) continue; + if (y >= Height) break; + for (int x = MapObject.User.Movement.X - ViewRangeX - 24; x < MapObject.User.Movement.X + ViewRangeX + 24; x++) + { + if (x < 0) continue; + if (x >= Width) break; + int imageIndex = (M2CellInfo[x, y].FrontImage & 0x7FFF) - 1; + if (M2CellInfo[x, y].Light <= 0 || M2CellInfo[x, y].Light >= 10) continue; + if (M2CellInfo[x, y].Light == 0) continue; + + Color lightIntensity; + + light = (M2CellInfo[x, y].Light % 10) * 3; + + switch (M2CellInfo[x, y].Light / 10) + { + case 1: + lightIntensity = Color.FromArgb(255, 255, 255, 255); + break; + case 2: + lightIntensity = Color.FromArgb(255, 120, 180, 255); + break; + case 3: + lightIntensity = Color.FromArgb(255, 255, 180, 120); + break; + case 4: + lightIntensity = Color.FromArgb(255, 22, 160, 5); + break; + default: + lightIntensity = Color.FromArgb(255, 255, 255, 255); + break; + } + + int fileIndex = M2CellInfo[x, y].FrontIndex; + + p = new Point( + (x + OffSetX - MapObject.User.Movement.X) * CellWidth + MapObject.User.OffSetMove.X, + (y + OffSetY - MapObject.User.Movement.Y) * CellHeight + MapObject.User.OffSetMove.Y + 32); + + + if (M2CellInfo[x, y].FrontAnimationFrame > 0) + p.Offset(Libraries.MapLibs[fileIndex].GetOffSet(imageIndex)); + + if (light >= DXManager.Lights.Count) + light = DXManager.Lights.Count - 1; + + if (DXManager.Lights[light] != null && !DXManager.Lights[light].Disposed) + { + p.Offset(-(DXManager.LightSizes[light].X / 2) - (CellWidth / 2) + 10, -(DXManager.LightSizes[light].Y / 2) - (CellHeight / 2) - 5); + DXManager.Draw(DXManager.Lights[light], null, new Vector3((float)p.X, (float)p.Y, 0.0F), lightIntensity); + } + } + } + #endregion + + DXManager.SetBlend(false); + DXManager.SetSurface(oldSurface); + + DXManager.Device.SetRenderState(RenderState.SourceBlend, Blend.Zero); + DXManager.Device.SetRenderState(RenderState.DestinationBlend, Blend.SourceColor); + + DXManager.Draw(DXManager.LightTexture, new Rectangle(0, 0, Settings.ScreenWidth, Settings.ScreenHeight), Vector3.Zero, Color.White); + + DXManager.Sprite.End(); + DXManager.Sprite.Begin(SpriteFlags.AlphaBlend); + } + + private static void OnMouseClick(object sender, EventArgs e) + { + if (!(e is MouseEventArgs me)) return; + + switch (me.Button) + { + case MouseButtons.Left: + { + GameScene.Scene.MapControl.AutoPath = false; + if (MapObject.MouseObject == null) return; + NPCObject npc = MapObject.MouseObject as NPCObject; + if (npc != null) + { + if (npc.ObjectID == GameScene.NPCID && + (CMain.Time <= GameScene.NPCTime || GameScene.Scene.NPCDialog.Visible)) + { + return; + } + + //GameScene.Scene.NPCDialog.Hide(); + + GameScene.NPCTime = CMain.Time + 5000; + GameScene.NPCID = npc.ObjectID; + Network.Enqueue(new C.CallNPC { ObjectID = npc.ObjectID, Key = "[@Main]" }); + } + } + break; + case MouseButtons.Right: + { + if (MapObject.MouseObject == null) + { + if (Settings.NewMove && MapLocation != MapObject.User.CurrentLocation && GameScene.Scene.MapControl.EmptyCell(MapLocation)) + { + var path = GameScene.Scene.MapControl.PathFinder.FindPath(MapObject.User.CurrentLocation, MapLocation, 20); + + if (path != null && path.Count > 0) + { + GameScene.Scene.MapControl.CurrentPath = path; + GameScene.Scene.MapControl.AutoPath = true; + var offset = MouseLocation.Subtract(ToMouseLocation(MapLocation)); + } + } + return; + } + } + break; + } + } + + private static void OnMouseDown(object sender, MouseEventArgs e) + { + MapButtons |= e.Button; + + if (e.Button != MouseButtons.Left) return; + + if (GameScene.SelectedCell != null) + { + MirItemCell cell = GameScene.SelectedCell; + if (cell.Item.Info.Bind.HasFlag(BindMode.DontDrop)) + { + MirMessageBox messageBox = new MirMessageBox(string.Format("You cannot drop {0}", cell.Item.FriendlyName), MirMessageBoxButtons.OK); + messageBox.Show(); + GameScene.SelectedCell = null; + return; + } + if (cell.Item.Count == 1) + { + MirMessageBox messageBox = new MirMessageBox(string.Format(GameLanguage.DropTip, cell.Item.FriendlyName), MirMessageBoxButtons.YesNo); + + messageBox.YesButton.Click += (o, a) => + { + Network.Enqueue(new C.DropItem + { UniqueID = cell.Item.UniqueID, + Count = 1 + }); + + cell.Locked = true; + }; + messageBox.Show(); + } + else + { + MirAmountBox amountBox = new MirAmountBox(GameLanguage.DropAmount, cell.Item.Info.Image, Libraries.Items, cell.Item.Count); + + amountBox.OKButton.Click += (o, a) => + { + if (amountBox.Amount <= 0) return; + Network.Enqueue(new C.DropItem + { + UniqueID = cell.Item.UniqueID, + Count = (ushort)amountBox.Amount + }); + + cell.Locked = true; + }; + + amountBox.Show(); + } + GameScene.SelectedCell = null; + + return; + } + + if (GameScene.PickedUpGold) + { + MirAmountBox amountBox = new MirAmountBox(GameLanguage.DropAmount, 38, Libraries.Prguse, GameScene.Gold); + + amountBox.OKButton.Click += (o, a) => + { + if (amountBox.Amount > 0) + { + Network.Enqueue(new C.DropGold { Amount = amountBox.Amount }); + } + }; + + amountBox.Show(); + GameScene.PickedUpGold = false; + } + + if (MapObject.MouseObject != null && !MapObject.MouseObject.Dead && !(MapObject.MouseObject is ItemObject) && + !(MapObject.MouseObject is NPCObject) && !(MapObject.MouseObject is MonsterObject && MapObject.MouseObject.AI == 64) + && !(MapObject.MouseObject is MonsterObject && MapObject.MouseObject.AI == 70)) + { + MapObject.TargetObjectID = MapObject.MouseObject.ObjectID; + if (MapObject.MouseObject is MonsterObject && MapObject.MouseObject.AI != 6) + MapObject.MagicObjectID = MapObject.TargetObject.ObjectID; + } + else + MapObject.TargetObjectID = 0; + } + + private void CheckInput() + { + if (CMain.Time < InputDelay || User.Poison.HasFlag(PoisonType.Paralysis) || User.Poison.HasFlag(PoisonType.Frozen)) return; + + if (User.NextMagic != null) + { + UseMagic(User.NextMagic, User); + return; + } + + if (MapObject.TargetObject != null && !MapObject.TargetObject.Dead) + { + if (((MapObject.TargetObject.Name.EndsWith(")") || MapObject.TargetObject is PlayerObject) && CMain.Shift) || + (!MapObject.TargetObject.Name.EndsWith(")") && MapObject.TargetObject is MonsterObject)) + { + GameScene.LogTime = CMain.Time + Globals.LogDelay; + + if (Functions.InRange(MapObject.TargetObject.CurrentLocation, User.CurrentLocation, 1)) + { + if (CMain.Time > GameScene.AttackTime) + { + User.QueuedAction = new QueuedAction { Action = MirAction.Attack1, Direction = Functions.DirectionFromPoint(User.CurrentLocation, MapObject.TargetObject.CurrentLocation), Location = User.CurrentLocation }; + return; + } + } + } + } + + MirDirection direction; + if (MouseControl == this) + { + direction = MouseDirection(); + + switch (MapButtons) + { + case MouseButtons.Left: + if (MapObject.MouseObject is NPCObject || (MapObject.MouseObject is PlayerObject && MapObject.MouseObject != User)) break; + if (MapObject.MouseObject is MonsterObject && MapObject.MouseObject.AI == 70) break; + + if (CMain.Shift) + { + if (CMain.Time > GameScene.AttackTime) + { + MapObject target = null; + if (MapObject.MouseObject is MonsterObject || MapObject.MouseObject is PlayerObject) target = MapObject.MouseObject; + + User.QueuedAction = new QueuedAction { Action = MirAction.Attack1, Direction = direction, Location = User.CurrentLocation }; + } + return; + } + + if (MapLocation == User.CurrentLocation) + { + if (CMain.Time > GameScene.PickUpTime) + { + GameScene.PickUpTime = CMain.Time + 200; + Network.Enqueue(new C.PickUp()); + } + return; + } + + if (CanWalk(direction, out direction)) + { + User.QueuedAction = new QueuedAction { Action = MirAction.Walking, Direction = direction, Location = Functions.PointMove(User.CurrentLocation, direction, 1) }; + return; + } + if (direction != User.Direction) + { + User.QueuedAction = new QueuedAction { Action = MirAction.Standing, Direction = direction, Location = User.CurrentLocation }; + return; + } + + break; + case MouseButtons.Right: + if (MapObject.MouseObject is PlayerObject && MapObject.MouseObject != User && CMain.Ctrl) break; + if (Settings.NewMove) break; + + if (Functions.InRange(MapLocation, User.CurrentLocation, 2)) + { + if (direction != User.Direction) + { + User.QueuedAction = new QueuedAction { Action = MirAction.Standing, Direction = direction, Location = User.CurrentLocation }; + } + return; + } + + if (CanWalk(direction, out direction)) + { + User.QueuedAction = new QueuedAction { Action = MirAction.Walking, Direction = direction, Location = Functions.PointMove(User.CurrentLocation, direction, 1) }; + return; + } + if (direction != User.Direction) + { + User.QueuedAction = new QueuedAction { Action = MirAction.Standing, Direction = direction, Location = User.CurrentLocation }; + return; + } + break; + } + } + + if (AutoPath) + { + if (CurrentPath == null || CurrentPath.Count == 0) + { + AutoPath = false; + return; + } + + var path = GameScene.Scene.MapControl.PathFinder.FindPath(MapObject.User.CurrentLocation, CurrentPath.Last().Location); + + if (path != null && path.Count > 0) + GameScene.Scene.MapControl.CurrentPath = path; + else + { + AutoPath = false; + return; + } + + Node currentNode = CurrentPath.SingleOrDefault(x => User.CurrentLocation == x.Location); + if (currentNode != null) + { + while (true) + { + Node first = CurrentPath.First(); + CurrentPath.Remove(first); + + if (first == currentNode) + break; + } + } + + if (CurrentPath.Count > 0) + { + MirDirection dir = Functions.DirectionFromPoint(User.CurrentLocation, CurrentPath.First().Location); + + if (CanWalk(dir)) + { + User.QueuedAction = new QueuedAction { Action = MirAction.Walking, Direction = dir, Location = Functions.PointMove(User.CurrentLocation, dir, 1) }; + + return; + } + } + } + + if (MapObject.TargetObject == null || MapObject.TargetObject.Dead) return; + if (((!MapObject.TargetObject.Name.EndsWith(")") && !(MapObject.TargetObject is PlayerObject)) || !CMain.Shift) && + (MapObject.TargetObject.Name.EndsWith(")") || !(MapObject.TargetObject is MonsterObject))) return; + if (Functions.InRange(MapObject.TargetObject.CurrentLocation, User.CurrentLocation, 1)) return; + direction = Functions.DirectionFromPoint(User.CurrentLocation, MapObject.TargetObject.CurrentLocation); + + if (!CanWalk(direction, out direction)) return; + + User.QueuedAction = new QueuedAction { Action = MirAction.Walking, Direction = direction, Location = Functions.PointMove(User.CurrentLocation, direction, 1) }; + } + + public void UseMagic(ClientMagic magic, UserObject actor) + { + if (CMain.Time < GameScene.SpellTime || actor.Poison.HasFlag(PoisonType.Stun)) + { + actor.ClearMagic(); + return; + } + + if ((CMain.Time <= magic.CastTime + magic.Delay)) + { + if (CMain.Time >= OutputDelay) + { + OutputDelay = CMain.Time + 1000; + GameScene.Scene.OutputMessage(string.Format("You cannot cast {0} for another {1} seconds.", magic.Spell.ToString(), ((magic.CastTime + magic.Delay) - CMain.Time - 1) / 1000 + 1)); + } + + actor.ClearMagic(); + return; + } + + int cost = magic.Level * magic.LevelCost + magic.BaseCost; + + if (magic.Spell == Spell.Teleport) + { + if (actor.Stats[Stat.TeleportManaPenaltyPercent] > 0) + { + cost += (cost * actor.Stats[Stat.TeleportManaPenaltyPercent]) / 100; + } + } + + if (actor.Stats[Stat.ManaPenaltyPercent] > 0) + { + cost += (cost * actor.Stats[Stat.ManaPenaltyPercent]) / 100; + } + + if (cost > actor.MP) + { + if (CMain.Time >= OutputDelay) + { + OutputDelay = CMain.Time + 1000; + GameScene.Scene.OutputMessage(GameLanguage.LowMana); + } + actor.ClearMagic(); + return; + } + + //bool isTargetSpell = true; + + MapObject target = null; + + //Targeting + switch (magic.Spell) + { + case Spell.FireBall: + case Spell.GreatFireBall: + case Spell.ElectricShock: + case Spell.Poisoning: + case Spell.ThunderBolt: + case Spell.SoulFireBall: + case Spell.FrostCrunch: + case Spell.Revelation: + case Spell.Hallucination: + if (actor.NextMagicObject != null) + { + if (!actor.NextMagicObject.Dead && actor.NextMagicObject.Race != ObjectType.Item && actor.NextMagicObject.Race != ObjectType.Merchant) + target = actor.NextMagicObject; + } + + if (target == null) target = MapObject.MagicObject; + + if (target != null && target.Race == ObjectType.Monster) MapObject.MagicObjectID = target.ObjectID; + break; + case Spell.Purification: + case Spell.Healing: + case Spell.UltimateEnhancer: + if (actor.NextMagicObject != null) + { + if (!actor.NextMagicObject.Dead && actor.NextMagicObject.Race != ObjectType.Item && actor.NextMagicObject.Race != ObjectType.Merchant) + target = actor.NextMagicObject; + } + + if (target == null) target = User; + break; + case Spell.FireBang: + case Spell.MassHiding: + case Spell.FireWall: + case Spell.TrapHexagon: + if (actor.NextMagicObject != null) + { + if (!actor.NextMagicObject.Dead && actor.NextMagicObject.Race != ObjectType.Item && actor.NextMagicObject.Race != ObjectType.Merchant) + target = actor.NextMagicObject; + } + break; + default: + break; + } + + MirDirection dir = (target == null || target == User) ? actor.NextMagicDirection : Functions.DirectionFromPoint(actor.CurrentLocation, target.CurrentLocation); + + Point location = target != null ? target.CurrentLocation : actor.NextMagicLocation; + + uint targetID = target != null ? target.ObjectID : 0; + + if ((magic.Range != 0) && (!Functions.InRange(actor.CurrentLocation, location, magic.Range))) + { + if (CMain.Time >= OutputDelay) + { + OutputDelay = CMain.Time + 1000; + GameScene.Scene.OutputMessage("Target is too far."); + } + actor.ClearMagic(); + return; + } + + GameScene.LogTime = CMain.Time + Globals.LogDelay; + + if (actor == User) + { + User.QueuedAction = new QueuedAction { Action = MirAction.Spell, Direction = dir, Location = User.CurrentLocation, Params = new List() }; + User.QueuedAction.Params.Add(magic.Spell); + User.QueuedAction.Params.Add(targetID); + User.QueuedAction.Params.Add(location); + User.QueuedAction.Params.Add(magic.Level); + } + else + { + Network.Enqueue(new C.Magic { ObjectID = actor.ObjectID, Spell = magic.Spell, Direction = dir, TargetID = targetID, Location = location, SpellTargetLock = CMain.SpellTargetLock }); + } + } + + public static MirDirection MouseDirection(float ratio = 45F) //22.5 = 16 + { + Point p = new Point(MouseLocation.X / CellWidth, MouseLocation.Y / CellHeight); + if (Functions.InRange(new Point(OffSetX, OffSetY), p, 2)) + return Functions.DirectionFromPoint(new Point(OffSetX, OffSetY), p); + + PointF c = new PointF(OffSetX * CellWidth + CellWidth / 2F, OffSetY * CellHeight + CellHeight / 2F); + PointF a = new PointF(c.X, 0); + PointF b = MouseLocation; + float bc = (float)Distance(c, b); + float ac = bc; + b.Y -= c.Y; + c.Y += bc; + b.Y += bc; + float ab = (float)Distance(b, a); + double x = (ac * ac + bc * bc - ab * ab) / (2 * ac * bc); + double angle = Math.Acos(x); + + angle *= 180 / Math.PI; + + if (MouseLocation.X < c.X) angle = 360 - angle; + angle += ratio / 2; + if (angle > 360) angle -= 360; + + return (MirDirection)(angle / ratio); + } + + public static int Direction16(Point source, Point destination) + { + PointF c = new PointF(source.X, source.Y); + PointF a = new PointF(c.X, 0); + PointF b = new PointF(destination.X, destination.Y); + float bc = (float)Distance(c, b); + float ac = bc; + b.Y -= c.Y; + c.Y += bc; + b.Y += bc; + float ab = (float)Distance(b, a); + double x = (ac * ac + bc * bc - ab * ab) / (2 * ac * bc); + double angle = Math.Acos(x); + + angle *= 180 / Math.PI; + + if (destination.X < c.X) angle = 360 - angle; + angle += 11.25F; + if (angle > 360) angle -= 360; + + return (int)(angle / 22.5F); + } + + public static double Distance(PointF p1, PointF p2) + { + double x = p2.X - p1.X; + double y = p2.Y - p1.Y; + return Math.Sqrt(x * x + y * y); + } + + public bool EmptyCell(Point p) + { + if (p.X < 0 || p.X >= Width || p.Y < 0 || p.Y >= Height) return false; + if ((M2CellInfo[p.X, p.Y].BackImage & 0x20000000) != 0 || (M2CellInfo[p.X, p.Y].FrontImage & 0x8000) != 0) // + (M2CellInfo[P.X, P.Y].FrontImage & 0x7FFF) != 0) + return false; + + for (int i = 0; i < Objects.Count; i++) + { + MapObject ob = Objects[i]; + + if (ob.CurrentLocation == p && ob.Blocking) + return false; + } + + return true; + } + + private bool CanWalk(MirDirection dir) + { + return EmptyCell(Functions.PointMove(User.CurrentLocation, dir, 1)); + } + + private bool CanWalk(MirDirection dir, out MirDirection outDir) + { + outDir = dir; + + if (EmptyCell(Functions.PointMove(User.CurrentLocation, dir, 1))) + return true; + + dir = Functions.NextDir(outDir); + if (EmptyCell(Functions.PointMove(User.CurrentLocation, dir, 1))) + { + outDir = dir; + return true; + } + + dir = Functions.PreviousDir(outDir); + if (EmptyCell(Functions.PointMove(User.CurrentLocation, dir, 1))) + { + outDir = dir; + return true; + } + + return false; + } + + public bool CanFly(Point target) + { + Point location = User.CurrentLocation; + while (location != target) + { + MirDirection dir = Functions.DirectionFromPoint(location, target); + + location = Functions.PointMove(location, dir, 1); + + if (location.X < 0 || location.Y < 0 || location.X >= GameScene.Scene.MapControl.Width || location.Y >= GameScene.Scene.MapControl.Height) return false; + + if (!GameScene.Scene.MapControl.ValidPoint(location)) return false; + } + + return true; + } + + + public bool ValidPoint(Point p) + { + return (M2CellInfo[p.X, p.Y].BackImage & 0x20000000) == 0; + } + public bool HasTarget(Point p) + { + for (int i = 0; i < Objects.Count; i++) + { + MapObject ob = Objects[i]; + + if (ob.CurrentLocation == p && ob.Blocking) + return true; + } + return false; + } + public bool CanHalfMoon(Point p, MirDirection d) + { + d = Functions.PreviousDir(d); + for (int i = 0; i < 4; i++) + { + if (HasTarget(Functions.PointMove(p, d, 1))) return true; + d = Functions.NextDir(d); + } + return false; + } + public bool CanCrossHalfMoon(Point p) + { + MirDirection dir = MirDirection.Up; + for (int i = 0; i < 8; i++) + { + if (HasTarget(Functions.PointMove(p, dir, 1))) return true; + dir = Functions.NextDir(dir); + } + return false; + } + + #region Disposable + + protected override void Dispose(bool disposing) + { + if (disposing) + { + Objects.Clear(); + + MapButtons = 0; + MouseLocation = Point.Empty; + InputDelay = 0; + NextAction = 0; + + M2CellInfo = null; + Width = 0; + Height = 0; + + Index = 0; + FileName = String.Empty; + Title = String.Empty; + MiniMap = 0; + BigMap = 0; + Lights = 0; + FloorValid = false; + LightsValid = false; + MapDarkLight = 0; + Music = 0; + + AnimationCount = 0; + Effects.Clear(); + } + + base.Dispose(disposing); + } + + #endregion + + + + public void RemoveObject(MapObject ob) + { + M2CellInfo[ob.MapLocation.X, ob.MapLocation.Y].RemoveObject(ob); + } + public void AddObject(MapObject ob) + { + M2CellInfo[ob.MapLocation.X, ob.MapLocation.Y].AddObject(ob); + } + public MapObject FindObject(uint ObjectID, int x, int y) + { + return M2CellInfo[x, y].FindObject(ObjectID); + } + public void SortObject(MapObject ob) + { + M2CellInfo[ob.MapLocation.X, ob.MapLocation.Y].Sort(); + } + } +} + diff --git a/Client/MirScenes/LoginScene.cs b/Client/MirScenes/LoginScene.cs new file mode 100644 index 0000000..c835e74 --- /dev/null +++ b/Client/MirScenes/LoginScene.cs @@ -0,0 +1,937 @@ +using System.Security.Cryptography; +using System.Text.RegularExpressions; +using Client.MirControls; +using Client.MirGraphics; +using Client.MirNetwork; +using Client.MirSounds; +using S = ServerPackets; +using C = ClientPackets; + +namespace Client.MirScenes +{ + public sealed class LoginScene : MirScene + { + private MirImageControl _background; + public MirLabel Version; + + private LoginDialog _login; + private NewAccountDialog _account; + private ChangePasswordDialog _password; + + private MirMessageBox _connectBox; + + public LoginScene() + { + SoundManager.PlayMusic(SoundList.IntroMusic, true); + Disposing += (o, e) => SoundManager.StopMusic(); + + _background = new MirImageControl + { + Index = 0, + Library = Libraries.Prguse, + Parent = this, + }; + + _login = new LoginDialog { Parent = _background, Visible = false }; + _login.AccountButton.Click += (o, e) => + { + _login.Hide(); + _account = new NewAccountDialog { Parent = _background }; + _account.Disposing += (o1, e1) => _login.Show(); + }; + + _login.PassButton.Click += (o, e) => + { + OpenPasswordChangeDialog(string.Empty, string.Empty); + }; + + Version = new MirLabel + { + AutoSize = true, + BackColour = Color.FromArgb(200, 50, 50, 50), + Border = true, + BorderColour = Color.Black, + Location = new Point(5, Settings.ScreenHeight - 20), + Parent = _background, + Text = string.Format("Build: {0}.{1}.{2}", Globals.ProductCodename, Settings.UseTestConfig ? "Debug" : "Release", Application.ProductVersion), + }; + + _connectBox = new MirMessageBox("Attempting to connect to the server.", MirMessageBoxButtons.Cancel); + _connectBox.CancelButton.Click += (o, e) => Program.Form.Close(); + Shown += (sender, args) => + { + Network.Connect(); + _connectBox.Show(); + }; + } + + public override void Process() + { + if (!Network.Connected && _connectBox.Label != null) + _connectBox.Label.Text = string.Format(GameLanguage.AttemptingConnect,"\n\n", Network.ConnectAttempt); + } + public override void ProcessPacket(Packet p) + { + switch (p.Index) + { + case (short)ServerPacketIds.Connected: + Network.Connected = true; + SendVersion(); + break; + case (short)ServerPacketIds.ClientVersion: + ClientVersion((S.ClientVersion) p); + break; + case (short)ServerPacketIds.NewAccount: + NewAccount((S.NewAccount) p); + break; + case (short)ServerPacketIds.ChangePassword: + ChangePassword((S.ChangePassword) p); + break; + case (short)ServerPacketIds.ChangePasswordBanned: + ChangePassword((S.ChangePasswordBanned) p); + break; + case (short)ServerPacketIds.Login: + Login((S.Login) p); + break; + case (short)ServerPacketIds.LoginBanned: + Login((S.LoginBanned) p); + break; + case (short)ServerPacketIds.LoginSuccess: + Login((S.LoginSuccess)p); + break; + default: + base.ProcessPacket(p); + break; + } + } + + private void SendVersion() + { + _connectBox.Label.Text = "Sending Client Version."; + + C.ClientVersion p = new C.ClientVersion(); + try + { + byte[] sum; + using (MD5 md5 = MD5.Create()) + using (FileStream stream = File.OpenRead(Application.ExecutablePath)) + sum = md5.ComputeHash(stream); + + p.VersionHash = sum; + Network.Enqueue(p); + } + catch (Exception ex) + { + if (Settings.LogErrors) CMain.SaveError(ex.ToString()); + } + } + private void ClientVersion(S.ClientVersion p) + { + switch (p.Result) + { + case 0: + MirMessageBox.Show("Wrong version, please update your game.\nGame will now Close", true); + + Network.Disconnect(); + break; + case 1: + _connectBox.Dispose(); + _login.Show(); + break; + } + } + + private void OpenPasswordChangeDialog(string autoFillID, string autoFillPassword) + { + _login.Hide(); + _password = new ChangePasswordDialog { Parent = _background }; + _password.AccountIDTextBox.Text = autoFillID; + _password.CurrentPasswordTextBox.Text = autoFillPassword; + _password.Disposing += (o1, e1) => _login.Show(); + } + private void NewAccount(S.NewAccount p) + { + _account.OKButton.Enabled = true; + switch (p.Result) + { + case 0: + MirMessageBox.Show("Account creation is currently disabled."); + _account.Dispose(); + break; + case 1: + MirMessageBox.Show("Your AccountID is not acceptable."); + _account.AccountIDTextBox.SetFocus(); + break; + case 2: + MirMessageBox.Show("Your Password is not acceptable."); + _account.Password1TextBox.SetFocus(); + break; + case 7: + MirMessageBox.Show("An Account with this ID already exists."); + _account.AccountIDTextBox.Text = string.Empty; + _account.AccountIDTextBox.SetFocus(); + break; + case 8: + MirMessageBox.Show("Your account was created successfully."); + _account.Dispose(); + break; + } + } + private void ChangePassword(S.ChangePassword p) + { + _password.OKButton.Enabled = true; + + switch (p.Result) + { + case 0: + MirMessageBox.Show("Password Changing is currently disabled."); + _password.Dispose(); + break; + case 1: + MirMessageBox.Show("Your AccountID is not acceptable."); + _password.AccountIDTextBox.SetFocus(); + break; + case 2: + MirMessageBox.Show("The current Password is not acceptable."); + _password.CurrentPasswordTextBox.SetFocus(); + break; + case 3: + MirMessageBox.Show("Your new Password is not acceptable."); + _password.NewPassword1TextBox.SetFocus(); + break; + case 4: + MirMessageBox.Show(GameLanguage.NoAccountID); + _password.AccountIDTextBox.SetFocus(); + break; + case 5: + MirMessageBox.Show(GameLanguage.IncorrectPasswordAccountID); + _password.CurrentPasswordTextBox.SetFocus(); + _password.CurrentPasswordTextBox.Text = string.Empty; + break; + case 6: + MirMessageBox.Show("Your password was changed successfully."); + _password.Dispose(); + break; + } + } + private void ChangePassword(S.ChangePasswordBanned p) + { + _password.Dispose(); + + TimeSpan d = p.ExpiryDate - CMain.Now; + MirMessageBox.Show(string.Format("This account is banned.\n\nReason: {0}\nExpiryDate: {1}\nDuration: {2:#,##0} Hours, {3} Minutes, {4} Seconds", p.Reason, + p.ExpiryDate, Math.Floor(d.TotalHours), d.Minutes, d.Seconds )); + } + private void Login(S.Login p) + { + _login.OKButton.Enabled = true; + switch (p.Result) + { + case 0: + MirMessageBox.Show("Logging in is currently disabled."); + _login.Clear(); + break; + case 1: + MirMessageBox.Show("Your AccountID is not acceptable."); + _login.AccountIDTextBox.SetFocus(); + break; + case 2: + MirMessageBox.Show("Your Password is not acceptable."); + _login.PasswordTextBox.SetFocus(); + break; + case 3: + MirMessageBox.Show(GameLanguage.NoAccountID); + _login.PasswordTextBox.SetFocus(); + break; + case 4: + MirMessageBox.Show(GameLanguage.IncorrectPasswordAccountID); + _login.PasswordTextBox.Text = string.Empty; + _login.PasswordTextBox.SetFocus(); + break; + case 5: + MirMessageBox.Show("The account's password must be changed before logging in."); + OpenPasswordChangeDialog(_login.AccountIDTextBox.Text, _login.PasswordTextBox.Text); + _login.PasswordTextBox.Text = string.Empty; + break; + } + } + private void Login(S.LoginBanned p) + { + _login.OKButton.Enabled = true; + + TimeSpan d = p.ExpiryDate - CMain.Now; + MirMessageBox.Show(string.Format("This account is banned.\n\nReason: {0}\nExpiryDate: {1}\nDuration: {2:#,##0} Hours, {3} Minutes, {4} Seconds", p.Reason, + p.ExpiryDate, Math.Floor(d.TotalHours), d.Minutes, d.Seconds)); + } + + private void Login(S.LoginSuccess p) + { + Enabled = false; + _login.Dispose(); + + Dispose(); + ActiveScene = new SelectScene(p.Characters); + } + + public sealed class LoginDialog : MirImageControl + { + public MirLabel AccountIDLabel, PassLabel; + public MirButton AccountButton, CloseButton, OKButton, PassButton; + public MirTextBox AccountIDTextBox, PasswordTextBox; + private bool _accountIDValid, _passwordValid; + + public LoginDialog() + { + Index = 185; + Library = Libraries.Prguse; + DrawImage = true; + Location = new Point(Settings.ScreenWidth / 2 - Size.Width / 2, Settings.ScreenHeight / 2 - Size.Height / 2); + PixelDetect = false; + AutoSize = false; + Size = new Size(548, 600); + + AccountIDLabel = new MirLabel + { + Border = true, + Location = new Point(168, 241), + Parent = this, + AutoSize = true, + Font = new Font(Settings.FontName, 12F, FontStyle.Bold), + Text = "Name:" + }; + + PassLabel = new MirLabel + { + Border = true, + Location = new Point(173, 263), + Parent = this, + AutoSize = true, + Font = new Font(Settings.FontName, 12F, FontStyle.Bold), + Text = "Pass:" + }; + + PasswordTextBox = new MirTextBox + { + Location = new Point(225, 265), + Parent = this, + Password = true, + Size = new Size(136, 15), + MaxLength = Globals.MaxPasswordLength + }; + + PasswordTextBox.TextBox.TextChanged += PasswordTextBox_TextChanged; + PasswordTextBox.TextBox.KeyPress += TextBox_KeyPress; + + AccountIDTextBox = new MirTextBox + { + Location = new Point(225, 242), + Parent = this, + Size = new Size(136, 15), + MaxLength = Globals.MaxAccountIDLength + }; + + AccountIDTextBox.TextBox.TextChanged += AccountIDTextBox_TextChanged; + AccountIDTextBox.TextBox.KeyPress += TextBox_KeyPress; + + OKButton = new MirButton + { + Enabled = false, + HoverIndex = 11, + Index = 10, + Library = Libraries.Prguse, + Location = new Point(362, 372), + Parent = this, + PressedIndex = 9 + }; + OKButton.Click += (o, e) => Login(); + + AccountButton = new MirButton + { + HoverIndex = 17, + Index = 16, + Library = Libraries.Prguse, + Location = new Point(362, 400), + Parent = this, + PressedIndex = 15, + }; + + PassButton = new MirButton + { + HoverIndex = 23, + Index = 22, + Library = Libraries.Prguse, + Location = new Point(362, 428), + Parent = this, + PressedIndex = 21, + }; + + CloseButton = new MirButton + { + HoverIndex = 26, + Index = 25, + Library = Libraries.Prguse, + Location = new Point(362, 456), + Parent = this, + PressedIndex = 24, + }; + CloseButton.Click += (o, e) => Program.Form.Close(); + + AccountIDTextBox.Text = Settings.AccountID; + PasswordTextBox.Text = Settings.Password; + } + + private void AccountIDTextBox_TextChanged(object sender, EventArgs e) + { + Regex reg = + new Regex(@"^[A-Za-z0-9]{" + Globals.MinAccountIDLength + "," + Globals.MaxAccountIDLength + "}$"); + + if (string.IsNullOrEmpty(AccountIDTextBox.Text) || !reg.IsMatch(AccountIDTextBox.TextBox.Text)) + { + _accountIDValid = false; + AccountIDTextBox.Border = !string.IsNullOrEmpty(AccountIDTextBox.Text); + AccountIDTextBox.BorderColour = Color.Red; + } + else + { + _accountIDValid = true; + AccountIDTextBox.Border = true; + AccountIDTextBox.BorderColour = Color.Green; + } + } + private void PasswordTextBox_TextChanged(object sender, EventArgs e) + { + Regex reg = + new Regex(@"^[A-Za-z0-9]{" + Globals.MinPasswordLength + "," + Globals.MaxPasswordLength + "}$"); + + if (string.IsNullOrEmpty(PasswordTextBox.TextBox.Text) || !reg.IsMatch(PasswordTextBox.TextBox.Text)) + { + _passwordValid = false; + PasswordTextBox.Border = !string.IsNullOrEmpty(PasswordTextBox.TextBox.Text); + PasswordTextBox.BorderColour = Color.Red; + } + else + { + _passwordValid = true; + PasswordTextBox.Border = true; + PasswordTextBox.BorderColour = Color.Green; + } + + RefreshLoginButton(); + } + public void TextBox_KeyPress(object sender, KeyPressEventArgs e) + { + if (sender == null || e.KeyChar != (char) Keys.Enter) return; + + e.Handled = true; + + if (!_accountIDValid) + { + AccountIDTextBox.SetFocus(); + return; + } + if (!_passwordValid) + { + PasswordTextBox.SetFocus(); + return; + } + + if (OKButton.Enabled) + OKButton.InvokeMouseClick(null); + } + private void RefreshLoginButton() + { + OKButton.Enabled = _accountIDValid && _passwordValid; + } + + private void Login() + { + OKButton.Enabled = false; + Network.Enqueue(new C.Login { AccountID = AccountIDTextBox.Text, Password = PasswordTextBox.Text }); + } + + public override void Show() + { + if (Visible) return; + Visible = true; + AccountIDTextBox.SetFocus(); + + if (Settings.Password != string.Empty && Settings.AccountID != string.Empty) + { + Login(); + } + } + public void Clear() + { + AccountIDTextBox.Text = string.Empty; + PasswordTextBox.Text = string.Empty; + } + + #region Disposable + + protected override void Dispose(bool disposing) + { + if (disposing) + { + AccountIDLabel = null; + PassLabel = null; + AccountButton = null; + CloseButton = null; + OKButton = null; + PassButton = null; + AccountIDTextBox = null; + PasswordTextBox = null; + + } + + base.Dispose(disposing); + } + + #endregion + } + + public sealed class NewAccountDialog : MirImageControl + { + public MirButton OKButton, CancelButton, GenderLeftButton, GenderRightButton; + public MirLabel AccountIDLabel, PassLabel, ConfirmLabel, GenderLabel, MyGenderLabel; + public MirGender Gender; + + public MirTextBox AccountIDTextBox, + Password1TextBox, + Password2TextBox; + + private bool _accountIDValid, + _password1Valid, + _password2Valid; + + + public NewAccountDialog() + { + Index = 185; + Library = Libraries.Prguse; + DrawImage = true; + Location = new Point(Settings.ScreenWidth / 2 - Size.Width / 2, Settings.ScreenHeight / 2 - Size.Height / 2); + PixelDetect = false; + AutoSize = false; + Size = new Size(548, 600); + + CancelButton = new MirButton + { + HoverIndex = 26, + Index = 25, + Library = Libraries.Prguse, + Location = new Point(362, 456), + Parent = this, + PressedIndex = 24, + }; + CancelButton.Click += (o, e) => Dispose(); + + OKButton = new MirButton + { + Enabled = false, + HoverIndex = 11, + Index = 10, + Library = Libraries.Prguse, + Location = new Point(362, 372), + Parent = this, + PressedIndex = 9 + }; + OKButton.Click += (o, e) => CreateAccount(); + + AccountIDLabel = new MirLabel + { + Border = true, + Location = new Point(168, 241), + Parent = this, + AutoSize = true, + Font = new Font(Settings.FontName, 12F, FontStyle.Bold), + Text = "Name:" + }; + + PassLabel = new MirLabel + { + Border = true, + Location = new Point(173, 263), + Parent = this, + AutoSize = true, + Font = new Font(Settings.FontName, 12F, FontStyle.Bold), + Text = "Pass:" + }; + + ConfirmLabel = new MirLabel + { + Border = true, + Location = new Point(153, 285), + Parent = this, + AutoSize = true, + Font = new Font(Settings.FontName, 12F, FontStyle.Bold), + Text = "Confirm:" + }; + + Password1TextBox = new MirTextBox + { + Location = new Point(225, 265), + MaxLength = Globals.MaxPasswordLength, + Parent = this, + Password = true, + Size = new Size(136, 18), + TextBox = { MaxLength = Globals.MaxPasswordLength }, + }; + Password1TextBox.TextBox.TextChanged += Password1TextBox_TextChanged; + + Password2TextBox = new MirTextBox + { + Location = new Point(225, 288), + MaxLength = Globals.MaxPasswordLength, + Parent = this, + Password = true, + Size = new Size(136, 18), + TextBox = { MaxLength = Globals.MaxPasswordLength }, + }; + Password2TextBox.TextBox.TextChanged += Password2TextBox_TextChanged; + + AccountIDTextBox = new MirTextBox + { + Location = new Point(225, 242), + MaxLength = Globals.MaxAccountIDLength, + Parent = this, + Size = new Size(136, 18), + }; + + AccountIDTextBox.TextBox.MaxLength = Globals.MaxAccountIDLength; + AccountIDTextBox.TextBox.TextChanged += AccountIDTextBox_TextChanged; + } + + private void AccountIDTextBox_TextChanged(object sender, EventArgs e) + { + Regex reg = new Regex(@"^[A-Za-z0-9]{" + Globals.MinAccountIDLength + "," + Globals.MaxAccountIDLength + "}$"); + + if (string.IsNullOrEmpty(AccountIDTextBox.Text) || !reg.IsMatch(AccountIDTextBox.Text)) + { + _accountIDValid = false; + AccountIDTextBox.BorderColour = Color.Red; + } + else + { + _accountIDValid = true; + AccountIDTextBox.BorderColour = Color.Green; + } + RefreshConfirmButton(); + } + private void Password1TextBox_TextChanged(object sender, EventArgs e) + { + Regex reg = new Regex(@"^[A-Za-z0-9]{" + Globals.MinPasswordLength + "," + Globals.MaxPasswordLength + "}$"); + + if (string.IsNullOrEmpty(Password1TextBox.Text) || !reg.IsMatch(Password1TextBox.Text)) + { + _password1Valid = false; + Password1TextBox.BorderColour = Color.Red; + } + else + { + _password1Valid = true; + Password1TextBox.BorderColour = Color.Green; + } + Password2TextBox_TextChanged(sender, e); + } + private void Password2TextBox_TextChanged(object sender, EventArgs e) + { + Regex reg = new Regex(@"^[A-Za-z0-9]{" + Globals.MinPasswordLength + "," + Globals.MaxPasswordLength + "}$"); + + if (string.IsNullOrEmpty(Password2TextBox.Text) || !reg.IsMatch(Password2TextBox.Text) || + Password1TextBox.Text != Password2TextBox.Text) + { + _password2Valid = false; + Password2TextBox.BorderColour = Color.Red; + } + else + { + _password2Valid = true; + Password2TextBox.BorderColour = Color.Green; + } + RefreshConfirmButton(); + } + + private void RefreshConfirmButton() + { + OKButton.Enabled = _accountIDValid && _password1Valid && _password2Valid; + } + private void CreateAccount() + { + OKButton.Enabled = false; + + Network.Enqueue(new C.NewAccount + { + AccountID = AccountIDTextBox.Text, + Password = Password1TextBox.Text + }); + } + + public override void Show() + { + if (Visible) return; + Visible = true; + AccountIDTextBox.SetFocus(); + } + + #region Disposable + protected override void Dispose(bool disposing) + { + if (disposing) + { + OKButton = null; + CancelButton = null; + + AccountIDTextBox = null; + Password1TextBox = null; + Password2TextBox = null; + } + + base.Dispose(disposing); + } + #endregion + } + + public sealed class ChangePasswordDialog : MirImageControl + { + public readonly MirButton OKButton, + CancelButton; + + public readonly MirTextBox AccountIDTextBox, + CurrentPasswordTextBox, + NewPassword1TextBox, + NewPassword2TextBox; + + public MirLabel AccountIDLabel, CurrentPassLabel, NewPassLabel, ConfirmLabel; + + private bool _accountIDValid, + _currentPasswordValid, + _newPassword1Valid, + _newPassword2Valid; + + public ChangePasswordDialog() + { + Index = 185; + Library = Libraries.Prguse; + DrawImage = true; + Location = new Point(Settings.ScreenWidth / 2 - Size.Width / 2, Settings.ScreenHeight / 2 - Size.Height / 2); + PixelDetect = false; + AutoSize = false; + Size = new Size(548, 600); + + CancelButton = new MirButton + { + HoverIndex = 26, + Index = 25, + Library = Libraries.Prguse, + Location = new Point(362, 456), + Parent = this, + PressedIndex = 24, + }; + CancelButton.Click += (o, e) => Dispose(); + + OKButton = new MirButton + { + Enabled = false, + HoverIndex = 11, + Index = 10, + Library = Libraries.Prguse, + Location = new Point(362, 372), + Parent = this, + PressedIndex = 9 + }; + OKButton.Click += (o, e) => ChangePassword(); + + AccountIDLabel = new MirLabel + { + Border = true, + Location = new Point(168, 240), + Parent = this, + AutoSize = true, + Font = new Font(Settings.FontName, 12F, FontStyle.Bold), + Text = "Name:" + }; + + CurrentPassLabel = new MirLabel + { + Border = true, + Location = new Point(112, 263), + Parent = this, + AutoSize = true, + Font = new Font(Settings.FontName, 12F, FontStyle.Bold), + Text = "Current Pass:" + }; + + NewPassLabel = new MirLabel + { + Border = true, + Location = new Point(136, 285), + Parent = this, + AutoSize = true, + Font = new Font(Settings.FontName, 12F, FontStyle.Bold), + Text = "New Pass:" + }; + + ConfirmLabel = new MirLabel + { + Border = true, + Location = new Point(151, 308), + Parent = this, + AutoSize = true, + Font = new Font(Settings.FontName, 12F, FontStyle.Bold), + Text = "Confirm:" + }; + + AccountIDTextBox = new MirTextBox + { + Location = new Point(225, 242), + MaxLength = Globals.MaxAccountIDLength, + Parent = this, + Size = new Size(136, 18), + }; + AccountIDTextBox.SetFocus(); + AccountIDTextBox.TextBox.MaxLength = Globals.MaxAccountIDLength; + AccountIDTextBox.TextBox.TextChanged += AccountIDTextBox_TextChanged; + + CurrentPasswordTextBox = new MirTextBox + { + Location = new Point(225, 265), + MaxLength = Globals.MaxPasswordLength, + Parent = this, + Password = true, + Size = new Size(136, 18), + TextBox = { MaxLength = Globals.MaxPasswordLength }, + }; + CurrentPasswordTextBox.TextBox.TextChanged += CurrentPasswordTextBox_TextChanged; + + NewPassword1TextBox = new MirTextBox + { + Location = new Point(225, 288), + MaxLength = Globals.MaxPasswordLength, + Parent = this, + Password = true, + Size = new Size(136, 18), + TextBox = { MaxLength = Globals.MaxPasswordLength }, + }; + NewPassword1TextBox.TextBox.TextChanged += NewPassword1TextBox_TextChanged; + + NewPassword2TextBox = new MirTextBox + { + Location = new Point(225, 311), + MaxLength = Globals.MaxPasswordLength, + Parent = this, + Password = true, + Size = new Size(136, 18), + TextBox = { MaxLength = Globals.MaxPasswordLength }, + }; + NewPassword2TextBox.TextBox.TextChanged += NewPassword2TextBox_TextChanged; + + } + + void RefreshConfirmButton() + { + OKButton.Enabled = _accountIDValid && _currentPasswordValid && _newPassword1Valid && _newPassword2Valid; + } + + private void AccountIDTextBox_TextChanged(object sender, EventArgs e) + { + Regex reg = new Regex(@"^[A-Za-z0-9]{" + Globals.MinAccountIDLength + "," + Globals.MaxAccountIDLength + "}$"); + + if (string.IsNullOrEmpty(AccountIDTextBox.Text) || !reg.IsMatch(AccountIDTextBox.Text)) + { + _accountIDValid = false; + AccountIDTextBox.BorderColour = Color.Red; + } + else + { + _accountIDValid = true; + AccountIDTextBox.BorderColour = Color.Green; + } + RefreshConfirmButton(); + } + private void CurrentPasswordTextBox_TextChanged(object sender, EventArgs e) + { + Regex reg = new Regex(@"^[A-Za-z0-9]{" + Globals.MinPasswordLength + "," + Globals.MaxPasswordLength + "}$"); + + if (string.IsNullOrEmpty(CurrentPasswordTextBox.Text) || !reg.IsMatch(CurrentPasswordTextBox.Text)) + { + _currentPasswordValid = false; + CurrentPasswordTextBox.BorderColour = Color.Red; + } + else + { + _currentPasswordValid = true; + CurrentPasswordTextBox.BorderColour = Color.Green; + } + RefreshConfirmButton(); + } + private void NewPassword1TextBox_TextChanged(object sender, EventArgs e) + { + Regex reg = new Regex(@"^[A-Za-z0-9]{" + Globals.MinPasswordLength + "," + Globals.MaxPasswordLength + "}$"); + + if (string.IsNullOrEmpty(NewPassword1TextBox.Text) || !reg.IsMatch(NewPassword1TextBox.Text)) + { + _newPassword1Valid = false; + NewPassword1TextBox.BorderColour = Color.Red; + } + else + { + _newPassword1Valid = true; + NewPassword1TextBox.BorderColour = Color.Green; + } + NewPassword2TextBox_TextChanged(sender, e); + } + private void NewPassword2TextBox_TextChanged(object sender, EventArgs e) + { + if (NewPassword1TextBox.Text == NewPassword2TextBox.Text) + { + _newPassword2Valid = _newPassword1Valid; + NewPassword2TextBox.BorderColour = NewPassword1TextBox.BorderColour; + } + else + { + _newPassword2Valid = false; + NewPassword2TextBox.BorderColour = Color.Red; + } + RefreshConfirmButton(); + } + + private void ChangePassword() + { + OKButton.Enabled = false; + + Network.Enqueue(new C.ChangePassword + { + AccountID = AccountIDTextBox.Text, + CurrentPassword = CurrentPasswordTextBox.Text, + NewPassword = NewPassword1TextBox.Text + }); + } + + public override void Show() + { + if (Visible) return; + Visible = true; + AccountIDTextBox.SetFocus(); + } + } + + #region Disposable + protected override void Dispose(bool disposing) + { + if (disposing) + { + _background = null; + Version = null; + + _login = null; + _account = null; + _password = null; + + _connectBox = null; + } + + base.Dispose(disposing); + } + #endregion + } +} diff --git a/Client/MirScenes/SelectScene.cs b/Client/MirScenes/SelectScene.cs new file mode 100644 index 0000000..beacf02 --- /dev/null +++ b/Client/MirScenes/SelectScene.cs @@ -0,0 +1,529 @@ +using Client.MirControls; +using Client.MirGraphics; +using Client.MirNetwork; +using Client.MirScenes.Dialogs; +using Client.MirSounds; +using C = ClientPackets; +using S = ServerPackets; +namespace Client.MirScenes +{ + public class SelectScene : MirScene + { + public MirImageControl Background; + private NewCharacterDialog _character; + + public MirImageControl CharacterDisplayBackground, CharacterDisplay, HeadDisplay, WeaponDisplay; + public MirButton StartGameButton, NewCharacterButton, DeleteCharacterButton, ExitGame, CreateCharacterButton, CancelCreateButton, CharacterLeft, CharacterRight; + public MirLabel NameLabel, DescriptionLabel; + public List Characters = new List(); + private int _selected; + + public SelectScene(List characters) + { + SoundManager.PlayMusic(SoundList.SelectMusic, true); + Disposing += (o, e) => SoundManager.StopMusic(); + + Characters = characters; + SortList(); + + KeyPress += SelectScene_KeyPress; + + Background = new MirImageControl + { + Index = 0, + Library = Libraries.Prguse, + Parent = this, + }; + + StartGameButton = new MirButton + { + Enabled = false, + HoverIndex = 11, + Index = 10, + Library = Libraries.Prguse, + Location = new Point(410, 221), + Parent = Background, + PressedIndex = 9 + }; + StartGameButton.Click += (o, e) => StartGame(); + + NewCharacterButton = new MirButton + { + HoverIndex = 17, + Index = 16, + Library = Libraries.Prguse, + Location = new Point(410, 249), + Parent = Background, + PressedIndex = 15, + }; + NewCharacterButton.Click += (o, e) => OpenNewCharacterDialog(); + + DeleteCharacterButton = new MirButton + { + HoverIndex = 20, + Index = 19, + Library = Libraries.Prguse, + Location = new Point(410, 277), + Parent = Background, + PressedIndex = 18 + }; + DeleteCharacterButton.Click += (o, e) => DeleteCharacter(); + + ExitGame = new MirButton + { + HoverIndex = 26, + Index = 25, + Library = Libraries.Prguse, + Location = new Point(410, 305), + Parent = Background, + PressedIndex = 24 + }; + ExitGame.Click += (o, e) => Program.Form.Close(); + + CreateCharacterButton = new MirButton + { + HoverIndex = 17, + Index = 16, + Library = Libraries.Prguse, + Location = new Point(410, 249), + Parent = Background, + PressedIndex = 15, + Visible = false + }; + CreateCharacterButton.Click += (o, e) => CreateCharacter(); + + CancelCreateButton = new MirButton + { + HoverIndex = 26, + Index = 25, + Library = Libraries.Prguse, + Location = new Point(410, 277), + Parent = Background, + PressedIndex = 24, + Visible = false + }; + CancelCreateButton.Click += (o, e) => CancelCreateCharacter(); + + CharacterDisplayBackground = new MirImageControl + { + Index = 136, + Library = Libraries.Prguse, + Location = new Point(Settings.ScreenWidth - 230, 200), + Parent = Background + }; + + CharacterDisplay = new MirImageControl + { + Library = Libraries.Body, + Location = new Point(57, 115), + Parent = CharacterDisplayBackground, + NotControl = true, + UseOffSet = true, + }; + HeadDisplay = new MirImageControl + { + Library = Libraries.Head, + Location = new Point(57, 115), + Parent = CharacterDisplayBackground, + NotControl = true, + UseOffSet = true, + }; + WeaponDisplay = new MirImageControl + { + Library = Libraries.Weapon, + Location = new Point(57, 115), + Parent = CharacterDisplayBackground, + NotControl = true, + UseOffSet = true, + }; + + NameLabel = new MirLabel + { + Location = new Point(31, 146), + Parent = CharacterDisplayBackground, + Size = new Size(100, 16), + DrawFormat = TextFormatFlags.HorizontalCenter, + }; + + DescriptionLabel = new MirLabel + { + Location = new Point(31, 166), + Parent = CharacterDisplayBackground, + Size = new Size(100, 16), + DrawFormat = TextFormatFlags.HorizontalCenter, + }; + + CharacterLeft = new MirButton + { + HoverIndex = 32, + Index = 33, + Library = Libraries.Prguse, + Location = new Point(65, 229), + Parent = CharacterDisplayBackground, + PressedIndex = 34 + }; + CharacterLeft.Click += (o, e) => + { + _selected = _selected == 0 ? Characters.Count - 1 : _selected - 1; + UpdateInterface(); + }; + + CharacterRight = new MirButton + { + HoverIndex = 35, + Index = 36, + Library = Libraries.Prguse, + Location = new Point(85, 229), + Parent = CharacterDisplayBackground, + PressedIndex = 37 + }; + CharacterRight.Click += (o, e) => + { + _selected = (_selected + 1) % Characters.Count; + UpdateInterface(); + }; + + UpdateInterface(); + } + + private void SelectScene_KeyPress(object sender, KeyPressEventArgs e) + { + if (e.KeyChar != (char)Keys.Enter) return; + if (StartGameButton.Enabled) + StartGame(); + e.Handled = true; + } + + + public void SortList() + { + if (Characters != null) + Characters.Sort((c1, c2) => c2.LastAccess.CompareTo(c1.LastAccess)); + } + + private void OpenNewCharacterDialog() + { + if (_character == null || _character.IsDisposed) + { + _character = new NewCharacterDialog { Parent = this }; + + _character.OnCreateCharacter += (o, e) => + { + Network.Enqueue(new C.NewCharacter + { + Name = _character.NameTextBox.Text, + Class = _character.Class, + Gender = _character.Gender, + Hair = _character.Hair + }); + }; + } + + _character.Show(); + StartGameButton.Visible = false; + NewCharacterButton.Visible = false; + DeleteCharacterButton.Visible = false; + ExitGame.Visible = false; + + CreateCharacterButton.Visible = true; + CancelCreateButton.Visible = true; + } + + private void CreateCharacter() + { + if (_character == null || _character.IsDisposed) return; + + _character.CreateCharacter(); + } + + private void CancelCreateCharacter() + { + if (_character == null || _character.IsDisposed) return; + + _character.Dispose(); + CreateCharacterButton.Visible = false; + CancelCreateButton.Visible = false; + StartGameButton.Visible = true; + NewCharacterButton.Visible = true; + DeleteCharacterButton.Visible = true; + ExitGame.Visible = true; + } + + + public void StartGame() + { + if (!Libraries.Loaded) + { + MirAnimatedControl loadProgress = new MirAnimatedControl + { + Library = Libraries.Prguse, + Index = 940, + Visible = true, + Parent = this, + Location = new Point(470, 680), + Animated = true, + AnimationCount = 9, + AnimationDelay = 100, + Loop = true, + }; + loadProgress.AfterDraw += (o, e) => + { + if (!Libraries.Loaded) return; + loadProgress.Dispose(); + StartGame(); + }; + return; + } + StartGameButton.Enabled = false; + + Network.Enqueue(new C.StartGame + { + CharacterIndex = Characters[_selected].Index + }); + } + + public override void Process() + { + + + } + public override void ProcessPacket(Packet p) + { + switch (p.Index) + { + case (short)ServerPacketIds.NewCharacter: + NewCharacter((S.NewCharacter)p); + break; + case (short)ServerPacketIds.NewCharacterSuccess: + NewCharacter((S.NewCharacterSuccess)p); + break; + case (short)ServerPacketIds.DeleteCharacter: + DeleteCharacter((S.DeleteCharacter)p); + break; + case (short)ServerPacketIds.DeleteCharacterSuccess: + DeleteCharacter((S.DeleteCharacterSuccess)p); + break; + case (short)ServerPacketIds.StartGame: + StartGame((S.StartGame)p); + break; + case (short)ServerPacketIds.StartGameBanned: + StartGame((S.StartGameBanned)p); + break; + case (short)ServerPacketIds.StartGameDelay: + StartGame((S.StartGameDelay)p); + break; + default: + base.ProcessPacket(p); + break; + } + } + + private void NewCharacter(S.NewCharacter p) + { + CreateCharacterButton.Enabled = true; + + switch (p.Result) + { + case 0: + MirMessageBox.Show("Creating new characters is currently disabled."); + _character.Dispose(); + break; + case 1: + MirMessageBox.Show("Your Character Name is not acceptable."); + _character.NameTextBox.SetFocus(); + break; + case 2: + MirMessageBox.Show("The gender you selected does not exist.\n Contact a GM for assistance."); + break; + case 3: + MirMessageBox.Show("The class you selected does not exist.\n Contact a GM for assistance."); + break; + case 4: + MirMessageBox.Show("You cannot make anymore then " + Globals.MaxCharacterCount + " Characters."); + _character.Dispose(); + break; + case 5: + MirMessageBox.Show("A Character with this name already exists."); + _character.NameTextBox.SetFocus(); + break; + } + } + private void NewCharacter(S.NewCharacterSuccess p) + { + CancelCreateCharacter(); + + MirMessageBox.Show("Your character was created successfully."); + + Characters.Insert(0, p.CharInfo); + _selected = 0; + UpdateInterface(); + } + + private void DeleteCharacter() + { + if (_selected < 0 || _selected >= Characters.Count) return; + + MirMessageBox message = new MirMessageBox(string.Format("Are you sure you want to Delete the character {0}?", Characters[_selected].Name), MirMessageBoxButtons.YesNo); + int index = Characters[_selected].Index; + + message.YesButton.Click += (o1, e1) => + { + MirInputBox inputBox = new MirInputBox("Please enter the characters name."); + inputBox.OKButton.Click += (o, e) => + { + string name = Characters[_selected].Name.ToString(); + + if (inputBox.InputTextBox.Text == name) + { + DeleteCharacterButton.Enabled = false; + Network.Enqueue(new C.DeleteCharacter { CharacterIndex = index }); + } + else + { + MirMessageBox failedMessage = new MirMessageBox(string.Format("Incorrect Entry."), MirMessageBoxButtons.OK); + failedMessage.Show(); + } + inputBox.Dispose(); + }; + inputBox.Show(); + }; + message.Show(); + } + + private void DeleteCharacter(S.DeleteCharacter p) + { + DeleteCharacterButton.Enabled = true; + switch (p.Result) + { + case 0: + MirMessageBox.Show("Deleting characters is currently disabled."); + break; + case 1: + MirMessageBox.Show("The character you selected does not exist.\n Contact a GM for assistance."); + break; + } + } + private void DeleteCharacter(S.DeleteCharacterSuccess p) + { + DeleteCharacterButton.Enabled = true; + MirMessageBox.Show("Your character was deleted successfully."); + + for (int i = 0; i < Characters.Count; i++) + if (Characters[i].Index == p.CharacterIndex) + { + Characters.RemoveAt(i); + break; + } + + UpdateInterface(); + } + + private void StartGame(S.StartGameDelay p) + { + StartGameButton.Enabled = true; + + long time = CMain.Time + p.Milliseconds; + + MirMessageBox message = new MirMessageBox(string.Format("You cannot log onto this character for another {0} seconds.", Math.Ceiling(p.Milliseconds / 1000M))); + + message.BeforeDraw += (o, e) => message.Label.Text = string.Format("You cannot log onto this character for another {0} seconds.", Math.Ceiling((time - CMain.Time) / 1000M)); + + + message.AfterDraw += (o, e) => + { + if (CMain.Time <= time) return; + message.Dispose(); + StartGame(); + }; + + message.Show(); + } + public void StartGame(S.StartGameBanned p) + { + StartGameButton.Enabled = true; + + TimeSpan d = p.ExpiryDate - CMain.Now; + MirMessageBox.Show(string.Format("This account is banned.\n\nReason: {0}\nExpiryDate: {1}\nDuration: {2:#,##0} Hours, {3} Minutes, {4} Seconds", p.Reason, + p.ExpiryDate, Math.Floor(d.TotalHours), d.Minutes, d.Seconds)); + } + public void StartGame(S.StartGame p) + { + StartGameButton.Enabled = true; + + switch (p.Result) + { + case 0: + MirMessageBox.Show("Starting the game is currently disabled."); + break; + case 1: + MirMessageBox.Show("You are not logged in."); + break; + case 2: + MirMessageBox.Show("Your character could not be found."); + break; + case 3: + MirMessageBox.Show("No active map and/or start point found."); + break; + case 4: + ActiveScene = new GameScene(); + Dispose(); + break; + } + } + private void UpdateInterface() + { + if (_selected >= 0 && _selected < Characters.Count) + { + SelectInfo character = Characters[_selected]; + StartGameButton.Enabled = true; + NameLabel.Text = character.Name; + NameLabel.Visible = true; + DescriptionLabel.Text = $"Level {character.Level} {character.Class}"; + DescriptionLabel.Visible = true; + + CharacterDisplay.Index = 74 + (character.Body * 240) + (120 * (int)character.Gender); + HeadDisplay.Index = 74 + (character.Hair * 240) + (120 * (int)character.Gender); + WeaponDisplay.Index = 74 + (character.Weapon * 240) + (120 * (int)character.Gender); + } + else + { + StartGameButton.Enabled = false; + NameLabel.Visible = false; + DescriptionLabel.Visible = false; + } + + CharacterLeft.Visible = CharacterRight.Visible = Characters.Count > 1; + } + + + #region Disposable + protected override void Dispose(bool disposing) + { + if (disposing) + { + Background = null; + _character = null; + + CharacterDisplayBackground = null; + CharacterDisplay = null; + HeadDisplay = null; + WeaponDisplay = null; + StartGameButton = null; + NewCharacterButton = null; + DeleteCharacterButton = null; + CreateCharacterButton = null; + CancelCreateButton = null; + CharacterLeft = null; + CharacterRight = null; + ExitGame = null; + Characters = null; + NameLabel = null; + DescriptionLabel = null; + _selected = 0; + } + + base.Dispose(disposing); + } + #endregion + } +} diff --git a/Client/MirSounds/Libraries/ISoundLibrary.cs b/Client/MirSounds/Libraries/ISoundLibrary.cs new file mode 100644 index 0000000..14114fd --- /dev/null +++ b/Client/MirSounds/Libraries/ISoundLibrary.cs @@ -0,0 +1,15 @@ +namespace Client.MirSounds +{ + public interface ISoundLibrary + { + int Index { get; set; } + long ExpireTime { get; set; } + + bool IsPlaying(); + void Play(int volume); + void Stop(); + void SetVolume(int vol); + + void Dispose(); + } +} diff --git a/Client/MirSounds/Libraries/NAudioLibrary.cs b/Client/MirSounds/Libraries/NAudioLibrary.cs new file mode 100644 index 0000000..a8a6b48 --- /dev/null +++ b/Client/MirSounds/Libraries/NAudioLibrary.cs @@ -0,0 +1,134 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using NAudio.Wave; + +namespace Client.MirSounds.Libraries +{ + internal class NAudioLibrary : ISoundLibrary, IDisposable + { + public int Index { get; set; } + public long ExpireTime { get; set; } + + private WaveOutEvent outputDevice; + private AudioFileReader audioFile; + + private int _unscaledVolume; + private string _fileName; + private bool _loop; + private bool _isDisposing; + + public static NAudioLibrary TryCreate(int index, string fileName, int volume, bool loop) + { + fileName = Path.Combine(Settings.SoundPath, fileName); + string fileType = Path.GetExtension(fileName); + + // attempt to find file + if (String.IsNullOrEmpty(fileType)) + { + foreach (String ext in SoundManager.SupportedFileTypes) + { + if (File.Exists($"{fileName}{ext}")) + { + fileName = $"{fileName}{ext}"; + fileType = ext; + + break; + } + } + } + + if (SoundManager.SupportedFileTypes.Contains(fileType) && + File.Exists(fileName)) + { + return new NAudioLibrary(index, fileName, volume, loop); + } + else + { + return null; + } + } + + public NAudioLibrary(int index, string fileName, int volume, bool loop) + { + Index = index; + _loop = loop; + _fileName = fileName; + + Play(volume); + } + + public bool IsPlaying() + { + return outputDevice.PlaybackState == PlaybackState.Playing; + } + + public void Play(int volume) + { + if (outputDevice?.PlaybackState == PlaybackState.Playing) + { + return; + } + + ExpireTime = CMain.Time + Settings.SoundCleanMinutes * 60 * 1000; + + if (outputDevice == null) + { + outputDevice = new WaveOutEvent(); + outputDevice.PlaybackStopped += (_,_) => OutputDevice_PlaybackStopped(); + } + + if (audioFile == null) + { + audioFile = new AudioFileReader(_fileName); + outputDevice.Init(audioFile); + } + + // loop or sound already cached + if (outputDevice?.PlaybackState == PlaybackState.Stopped) + { + audioFile.Seek(0, SeekOrigin.Begin); + } + + outputDevice.Volume = ScaleVolume(volume); + outputDevice.Play(); + } + + public void SetVolume(int vol) + { + outputDevice.Volume = ScaleVolume(vol); + } + + public void Stop() + { + Dispose(); + } + + private void OutputDevice_PlaybackStopped() + { + if (_loop && + !_isDisposing) + { + Play(_unscaledVolume); + } + } + + public void Dispose() + { + _isDisposing = true; + + outputDevice?.Dispose(); + audioFile?.Dispose(); + } + + private float ScaleVolume(int volume) + { + _unscaledVolume = volume; + + float scaled = 0.0f + (float)(volume - 0) / (100 - 0) * (1.0f - 0.0f); + return scaled; + } + } +} diff --git a/Client/MirSounds/Libraries/NullLibrary.cs b/Client/MirSounds/Libraries/NullLibrary.cs new file mode 100644 index 0000000..c2da268 --- /dev/null +++ b/Client/MirSounds/Libraries/NullLibrary.cs @@ -0,0 +1,37 @@ +namespace Client.MirSounds +{ + public class NullLibrary : ISoundLibrary, IDisposable + { + public int Index { get; set; } + public long ExpireTime { get; set; } + + public NullLibrary(int index, string fileName, bool loop) + { + Index = index; + } + public void Dispose() + { + + } + + public bool IsPlaying() + { + return false; + } + + public void Play(int volume) + { + + } + + public void SetVolume(int vol) + { + + } + + public void Stop() + { + + } + } +} diff --git a/Client/MirSounds/SoundManager.cs b/Client/MirSounds/SoundManager.cs new file mode 100644 index 0000000..14312d5 --- /dev/null +++ b/Client/MirSounds/SoundManager.cs @@ -0,0 +1,233 @@ +using Client.MirSounds.Libraries; +using SlimDX.Direct3D9; +using SlimDX.DirectSound; +using System; + +namespace Client.MirSounds +{ + static class SoundManager + { + private static readonly List Sounds = new List(); + private static readonly Dictionary IndexList = new Dictionary(); + + private static readonly List> DelayList = new List>(); + + public static readonly List SupportedFileTypes; + + public static ISoundLibrary Music; + private static long _checkSoundTime; + + private static int _vol; + public static int Vol + { + get { return _vol; } + set + { + if (_vol == value) return; + _vol = value; + AdjustAllVolumes(); + } + } + + private static int _musicVol; + public static int MusicVol + { + get { return _musicVol; } + set + { + if (_musicVol == value) return; + _musicVol = value; + AdjustMusicVolume(); + } + } + + static SoundManager() + { + SupportedFileTypes = new List + { + ".wav", + ".mp3" + }; + } + + public static void ProcessDelayedSounds() + { + if (DelayList.Count == 0) return; + + var sounds = DelayList.Where(x => x.Key <= CMain.Time).ToList(); + + foreach (var sound in sounds) + { + DelayList.Remove(sound); + + PlaySound(sound.Value); + } + } + + public static void Create() + { + if (Program.Form == null || Program.Form.IsDisposed) return; + + LoadSoundList(); + } + public static void LoadSoundList() + { + string fileName = Path.Combine(Settings.SoundPath, "SoundList.lst"); + + if (!File.Exists(fileName)) return; + + string[] lines = File.ReadAllLines(fileName); + + for (int i = 0; i < lines.Length; i++) + { + string[] split = lines[i].Replace(" ", "").Split(':', '\t'); + + int index; + if (split.Length <= 1 || !int.TryParse(split[0], out index)) continue; + + if (!IndexList.ContainsKey(index)) + IndexList.Add(index, split[split.Length - 1]); + } + } + + public static void StopSound(int index) + { + for (int i = 0; i < Sounds.Count; i++) + { + if (Sounds[i].Index != index) continue; + + Sounds[i].Stop(); + return; + } + } + + public static void PlaySound(int index, bool loop = false, int delay = 0) + { + if (delay > 0) + { + DelayList.Add(new KeyValuePair(CMain.Time + delay, index)); + return; + } + + CheckSoundTimeOut(); + + for (int i = 0; i < Sounds.Count; i++) + { + if (Sounds[i].Index != index) continue; + Sounds[i].Play(Vol); + return; + } + + string filename; + filename = string.Format(index.ToString()); + Sounds.Add(GetSound(index, filename, Vol, loop)); + } + + public static void PlayMusic(int index, bool loop = false) + { + if (IndexList.TryGetValue(index, out string value)) + { + Music = GetSound(index, value, MusicVol, loop); + } + } + + public static void StopMusic() + { + Music?.Stop(); + Music?.Dispose(); + } + + static void AdjustMusicVolume() + { + Music?.SetVolume(MusicVol); + } + + static void AdjustAllVolumes() + { + for (int i = 0; i < Sounds.Count; i++) + { + Sounds[i].SetVolume(Vol); + } + } + + static void CheckSoundTimeOut() + { + if (CMain.Time >= _checkSoundTime) + { + _checkSoundTime = CMain.Time + 30 * 1000; + + for (int i = Sounds.Count - 1; i >= 0; i--) + { + var sound = Sounds[i]; + + if (!sound.IsPlaying()) + { + if (CMain.Time >= sound.ExpireTime) + { + sound.Dispose(); + Sounds.RemoveAt(i); + continue; + } + } + } + } + } + + static ISoundLibrary GetSound(int index, string fileName, int volume, bool loop) + { + var sound = NAudioLibrary.TryCreate(index, fileName, volume, loop); + + return sound == null ? new NullLibrary(index, fileName, loop) : sound; + } + + public static void Dispose() + { + DelayList.Clear(); + + for (int i = Sounds.Count - 1; i >= 0; i--) + { + Sounds[i]?.Dispose(); + } + + Music?.Dispose(); + } + } + + public static class SoundList + { + public static int + None = 0, + + IntroMusic = 10146, + SelectMusic = 10147, + LevelUp = 10156, + + ButtonA = 10103, + ButtonB = 10104, + ButtonC = 10105, + Gold = 10106, + EatDrug = 10107, + ClickDrug = 10108, + ClickWeapon = 10111, + ClickArmour = 10112, + ClickRing = 10113, + ClickBracelet = 10114, + ClickNecklace = 10115, + ClickHelmet = 10116, + ClickItem = 10118, + + SwingWood = 20, + SwingSword = 21, + SwingFist = 30, + + StruckBodySword = 15, + StruckBodyFist = 10, + + Wolf = 2, + Deer = 3, + Bull = 4, + Doe = 5, + Hen = 6, + Tiger = 7; + } +} diff --git a/Client/Program.cs b/Client/Program.cs new file mode 100644 index 0000000..c0f066b --- /dev/null +++ b/Client/Program.cs @@ -0,0 +1,178 @@ +using System.Diagnostics; +using Launcher; +using System.Runtime.InteropServices; +using System.Runtime.CompilerServices; +using Client.Resolution; + +namespace Client +{ + internal static class Program + { + public static CMain Form; + public static AMain PForm; + + public static bool Restart; + + [STAThread] + private static void Main(string[] args) + { + if (args.Length > 0) + { + foreach (var arg in args) + { + if (arg.ToLower() == "-tc") Settings.UseTestConfig = true; + } + } + + #if DEBUG + Settings.UseTestConfig = true; + #endif + + try + { + if (UpdatePatcher()) return; + + if (RuntimePolicyHelper.LegacyV2RuntimeEnabledSuccessfully == true) { } + + Packet.IsServer = false; + Settings.Load(); + + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + + CheckResolutionSetting(); + + if (Settings.P_Patcher) Application.Run(PForm = new Launcher.AMain()); + else Application.Run(Form = new CMain()); + + Settings.Save(); + + if (Restart) + { + Application.Restart(); + } + } + catch (Exception ex) + { + CMain.SaveError(ex.ToString()); + } + } + + private static bool UpdatePatcher() + { + try + { + const string fromName = @".\AutoPatcher.gz", toName = @".\AutoPatcher.exe"; + if (!File.Exists(fromName)) return false; + + Process[] processes = Process.GetProcessesByName("AutoPatcher"); + + if (processes.Length > 0) + { + string patcherPath = Application.StartupPath + @"\AutoPatcher.exe"; + + for (int i = 0; i < processes.Length; i++) + if (processes[i].MainModule.FileName == patcherPath) + processes[i].Kill(); + + Stopwatch stopwatch = Stopwatch.StartNew(); + bool wait = true; + processes = Process.GetProcessesByName("AutoPatcher"); + + while (wait) + { + wait = false; + for (int i = 0; i < processes.Length; i++) + if (processes[i].MainModule.FileName == patcherPath) + { + wait = true; + } + + if (stopwatch.ElapsedMilliseconds <= 3000) continue; + MessageBox.Show("Failed to close AutoPatcher during update."); + return true; + } + } + + if (File.Exists(toName)) File.Delete(toName); + File.Move(fromName, toName); + Process.Start(toName, "Auto"); + + return true; + } + catch (Exception ex) + { + CMain.SaveError(ex.ToString()); + + throw; + } + } + + public static class RuntimePolicyHelper + { + public static bool LegacyV2RuntimeEnabledSuccessfully { get; private set; } + + static RuntimePolicyHelper() + { + //ICLRRuntimeInfo clrRuntimeInfo = + // (ICLRRuntimeInfo)RuntimeEnvironment.GetRuntimeInterfaceAsObject( + // Guid.Empty, + // typeof(ICLRRuntimeInfo).GUID); + + //try + //{ + // clrRuntimeInfo.BindAsLegacyV2Runtime(); + // LegacyV2RuntimeEnabledSuccessfully = true; + //} + //catch (COMException) + //{ + // // This occurs with an HRESULT meaning + // // "A different runtime was already bound to the legacy CLR version 2 activation policy." + // LegacyV2RuntimeEnabledSuccessfully = false; + //} + } + + [ComImport] + [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + [Guid("BD39D1D2-BA2F-486A-89B0-B4B0CB466891")] + private interface ICLRRuntimeInfo + { + void xGetVersionString(); + void xGetRuntimeDirectory(); + void xIsLoaded(); + void xIsLoadable(); + void xLoadErrorString(); + void xLoadLibrary(); + void xGetProcAddress(); + void xGetInterface(); + void xSetDefaultStartupFlags(); + void xGetDefaultStartupFlags(); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void BindAsLegacyV2Runtime(); + } + } + + public static void CheckResolutionSetting() + { + var parsedOK = DisplayResolutions.GetDisplayResolutions(); + if (!parsedOK) + { + MessageBox.Show("Could not get display resolutions", "Get Display Resolution Issue", MessageBoxButtons.OK, MessageBoxIcon.Error); + Environment.Exit(0); + } + + /*if (!DisplayResolutions.IsSupported(Settings.Resolution)) + { + MessageBox.Show($"Client does not support {Settings.Resolution}. Setting Resolution to 1024x768.", + "Invalid Client Resolution", + MessageBoxButtons.OK, + MessageBoxIcon.Error); + + Settings.Resolution = (int)eSupportedResolution.w1024h768; + Settings.Save(); + }*/ + } + + } +} \ No newline at end of file diff --git a/Client/Resolution/DisplayResolutions.cs b/Client/Resolution/DisplayResolutions.cs new file mode 100644 index 0000000..67e91ee --- /dev/null +++ b/Client/Resolution/DisplayResolutions.cs @@ -0,0 +1,132 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading.Tasks; + +namespace Client.Resolution +{ + internal static class DisplayResolutions + { + internal static List DisplaySupportedResolutions = new List(); + + internal static bool GetDisplayResolutions() + { + bool parsedOK = false; + + var supportedResolutions = Enum.GetNames(typeof(eSupportedResolution)); + try + { + List list = new(); + + DEVMODE vDevMode = new DEVMODE(); + int i = 0; + while (EnumDisplaySettings(null, i, ref vDevMode)) + { + string displayResolution = $"w{vDevMode.dmPelsWidth}h{vDevMode.dmPelsHeight}"; + + if(supportedResolutions.Contains(displayResolution)) + { + if (!list.Contains(displayResolution)) + { + list.Add(displayResolution); + } + } + i++; + } + + if (list.Count > 0) + { + foreach (string displayResolution in list) + { + eSupportedResolution resolution; + if (Enum.TryParse(displayResolution, true, out resolution)) + { + DisplaySupportedResolutions.Add(resolution); + } + } + } + + if (DisplaySupportedResolutions.Count > 0) + { + parsedOK = true; + } + + } + catch + { + parsedOK = false; + } + + return parsedOK; + } + + internal static bool IsSupported(int resolution) + { + return IsSupported(resolution.ToString()); + } + + internal static bool IsSupported(string resolution) + { + eSupportedResolution res; + if (!Enum.TryParse(resolution, true, out res)) + { + return false; + } + + if(!Enum.IsDefined(typeof(eSupportedResolution), res)) + { + return false; + } + return true; + } + + [DllImport("user32.dll")] + internal static extern bool EnumDisplaySettings( + string deviceName, int modeNum, ref DEVMODE devMode); + const int ENUM_CURRENT_SETTINGS = -1; + + const int ENUM_REGISTRY_SETTINGS = -2; + + [StructLayout(LayoutKind.Sequential)] + internal struct DEVMODE + { + private const int CCHDEVICENAME = 0x20; + private const int CCHFORMNAME = 0x20; + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 0x20)] + public string dmDeviceName; + public short dmSpecVersion; + public short dmDriverVersion; + public short dmSize; + public short dmDriverExtra; + public int dmFields; + public int dmPositionX; + public int dmPositionY; + public ScreenOrientation dmDisplayOrientation; + public int dmDisplayFixedOutput; + public short dmColor; + public short dmDuplex; + public short dmYResolution; + public short dmTTOption; + public short dmCollate; + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 0x20)] + public string dmFormName; + public short dmLogPixels; + public int dmBitsPerPel; + public int dmPelsWidth; + public int dmPelsHeight; + public int dmDisplayFlags; + public int dmDisplayFrequency; + public int dmICMMethod; + public int dmICMIntent; + public int dmMediaType; + public int dmDitherType; + public int dmReserved1; + public int dmReserved2; + public int dmPanningWidth; + public int dmPanningHeight; + } + } +} diff --git a/Client/Resolution/eSupportedResolution.cs b/Client/Resolution/eSupportedResolution.cs new file mode 100644 index 0000000..417f2f2 --- /dev/null +++ b/Client/Resolution/eSupportedResolution.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Client.Resolution +{ + public enum eSupportedResolution + { + w800h600 = 800, + w1280h720 = 1280, + w1366h768 = 1366, + w1920h1080 = 1920 + } +} diff --git a/Client/Resources/$this.Icon1.ico b/Client/Resources/$this.Icon1.ico new file mode 100644 index 0000000..323a639 Binary files /dev/null and b/Client/Resources/$this.Icon1.ico differ diff --git a/Client/Resources/$this.Icon11.ico b/Client/Resources/$this.Icon11.ico new file mode 100644 index 0000000..323a639 Binary files /dev/null and b/Client/Resources/$this.Icon11.ico differ diff --git a/Client/Resources/Blue Progress.png b/Client/Resources/Blue Progress.png new file mode 100644 index 0000000..c492e6c Binary files /dev/null and b/Client/Resources/Blue Progress.png differ diff --git a/Client/Resources/CheckF_Base2.png b/Client/Resources/CheckF_Base2.png new file mode 100644 index 0000000..062deaa Binary files /dev/null and b/Client/Resources/CheckF_Base2.png differ diff --git a/Client/Resources/CheckF_Hover.png b/Client/Resources/CheckF_Hover.png new file mode 100644 index 0000000..2248ac1 Binary files /dev/null and b/Client/Resources/CheckF_Hover.png differ diff --git a/Client/Resources/CheckF_Pressed.png b/Client/Resources/CheckF_Pressed.png new file mode 100644 index 0000000..2248ac1 Binary files /dev/null and b/Client/Resources/CheckF_Pressed.png differ diff --git a/Client/Resources/Config_Base.png b/Client/Resources/Config_Base.png new file mode 100644 index 0000000..c2bb15d Binary files /dev/null and b/Client/Resources/Config_Base.png differ diff --git a/Client/Resources/Config_Base1.png b/Client/Resources/Config_Base1.png new file mode 100644 index 0000000..81e3637 Binary files /dev/null and b/Client/Resources/Config_Base1.png differ diff --git a/Client/Resources/Config_Check_Off1.png b/Client/Resources/Config_Check_Off1.png new file mode 100644 index 0000000..cdd3a1c Binary files /dev/null and b/Client/Resources/Config_Check_Off1.png differ diff --git a/Client/Resources/Config_Check_On.png b/Client/Resources/Config_Check_On.png new file mode 100644 index 0000000..7a4337b Binary files /dev/null and b/Client/Resources/Config_Check_On.png differ diff --git a/Client/Resources/Config_Hover.png b/Client/Resources/Config_Hover.png new file mode 100644 index 0000000..44356a7 Binary files /dev/null and b/Client/Resources/Config_Hover.png differ diff --git a/Client/Resources/Config_Pressed.png b/Client/Resources/Config_Pressed.png new file mode 100644 index 0000000..a130b53 Binary files /dev/null and b/Client/Resources/Config_Pressed.png differ diff --git a/Client/Resources/Config_Radio_On.png b/Client/Resources/Config_Radio_On.png new file mode 100644 index 0000000..7a4337b Binary files /dev/null and b/Client/Resources/Config_Radio_On.png differ diff --git a/Client/Resources/Cross_Base.png b/Client/Resources/Cross_Base.png new file mode 100644 index 0000000..2aa449a Binary files /dev/null and b/Client/Resources/Cross_Base.png differ diff --git a/Client/Resources/Cross_Hover.png b/Client/Resources/Cross_Hover.png new file mode 100644 index 0000000..d62134c Binary files /dev/null and b/Client/Resources/Cross_Hover.png differ diff --git a/Client/Resources/Cross_Pressed.png b/Client/Resources/Cross_Pressed.png new file mode 100644 index 0000000..d62134c Binary files /dev/null and b/Client/Resources/Cross_Pressed.png differ diff --git a/Client/Resources/Green Progress.png b/Client/Resources/Green Progress.png new file mode 100644 index 0000000..10dcfb6 Binary files /dev/null and b/Client/Resources/Green Progress.png differ diff --git a/Client/Resources/Images.Designer.cs b/Client/Resources/Images.Designer.cs new file mode 100644 index 0000000..a91fdca --- /dev/null +++ b/Client/Resources/Images.Designer.cs @@ -0,0 +1,313 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Client.Resources { + 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", "17.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Images { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Images() { + } + + /// + /// 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("Client.Resources.Images", typeof(Images).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; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Blue_Progress { + get { + object obj = ResourceManager.GetObject("Blue_Progress", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap CheckF_Base2 { + get { + object obj = ResourceManager.GetObject("CheckF_Base2", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap CheckF_Hover { + get { + object obj = ResourceManager.GetObject("CheckF_Hover", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap CheckF_Pressed { + get { + object obj = ResourceManager.GetObject("CheckF_Pressed", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Config_Base { + get { + object obj = ResourceManager.GetObject("Config_Base", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Config_Base1 { + get { + object obj = ResourceManager.GetObject("Config_Base1", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Config_Check_Off1 { + get { + object obj = ResourceManager.GetObject("Config_Check_Off1", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Config_Check_On { + get { + object obj = ResourceManager.GetObject("Config_Check_On", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Config_Hover { + get { + object obj = ResourceManager.GetObject("Config_Hover", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Config_Pressed { + get { + object obj = ResourceManager.GetObject("Config_Pressed", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Config_Radio_On { + get { + object obj = ResourceManager.GetObject("Config_Radio_On", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Cross_Base { + get { + object obj = ResourceManager.GetObject("Cross_Base", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Cross_Hover { + get { + object obj = ResourceManager.GetObject("Cross_Hover", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Cross_Pressed { + get { + object obj = ResourceManager.GetObject("Cross_Pressed", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Green_Progress { + get { + object obj = ResourceManager.GetObject("Green_Progress", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Launch_Base { + get { + object obj = ResourceManager.GetObject("Launch_Base", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Launch_Base1 { + get { + object obj = ResourceManager.GetObject("Launch_Base1", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Launch_Hover { + get { + object obj = ResourceManager.GetObject("Launch_Hover", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Launch_Pressed { + get { + object obj = ResourceManager.GetObject("Launch_Pressed", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap NEW_Progress_End__Blue_ { + get { + object obj = ResourceManager.GetObject("NEW_Progress_End__Blue_", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap NEW_Progress_End__Green_ { + get { + object obj = ResourceManager.GetObject("NEW_Progress_End__Green_", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap pfffft { + get { + object obj = ResourceManager.GetObject("pfffft", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Radio_Unactive { + get { + object obj = ResourceManager.GetObject("Radio_Unactive", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap server_base { + get { + object obj = ResourceManager.GetObject("server_base", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap textboxes { + get { + object obj = ResourceManager.GetObject("textboxes", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/Client/Resources/Images.resx b/Client/Resources/Images.resx new file mode 100644 index 0000000..773a3cf --- /dev/null +++ b/Client/Resources/Images.resx @@ -0,0 +1,196 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + Blue Progress.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + CheckF_Base2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + CheckF_Hover.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + CheckF_Pressed.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Config_Base.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Config_Base1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Config_Check_Off1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Config_Check_On.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Config_Hover.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Config_Pressed.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Config_Radio_On.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Cross_Base.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Cross_Hover.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Cross_Pressed.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Green Progress.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Launch_Base.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Launch_Base1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Launch_Hover.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Launch_Pressed.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + NEW Progress End (Blue).png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + NEW Progress End (Green).png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + pfffft.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Radio_Unactive.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + server_base.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + textboxes.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/Client/Resources/Launch_Base.png b/Client/Resources/Launch_Base.png new file mode 100644 index 0000000..3d06275 Binary files /dev/null and b/Client/Resources/Launch_Base.png differ diff --git a/Client/Resources/Launch_Base1.png b/Client/Resources/Launch_Base1.png new file mode 100644 index 0000000..3d06275 Binary files /dev/null and b/Client/Resources/Launch_Base1.png differ diff --git a/Client/Resources/Launch_Hover.png b/Client/Resources/Launch_Hover.png new file mode 100644 index 0000000..ec2c5c8 Binary files /dev/null and b/Client/Resources/Launch_Hover.png differ diff --git a/Client/Resources/Launch_Pressed.png b/Client/Resources/Launch_Pressed.png new file mode 100644 index 0000000..ec2c5c8 Binary files /dev/null and b/Client/Resources/Launch_Pressed.png differ diff --git a/Client/Resources/NEW Progress End (Blue).png b/Client/Resources/NEW Progress End (Blue).png new file mode 100644 index 0000000..f0ef78c Binary files /dev/null and b/Client/Resources/NEW Progress End (Blue).png differ diff --git a/Client/Resources/NEW Progress End (Green).png b/Client/Resources/NEW Progress End (Green).png new file mode 100644 index 0000000..927a199 Binary files /dev/null and b/Client/Resources/NEW Progress End (Green).png differ diff --git a/Client/Resources/Radio_Unactive.png b/Client/Resources/Radio_Unactive.png new file mode 100644 index 0000000..cdd3a1c Binary files /dev/null and b/Client/Resources/Radio_Unactive.png differ diff --git a/Client/Resources/pfffft.png b/Client/Resources/pfffft.png new file mode 100644 index 0000000..f2fb6d3 Binary files /dev/null and b/Client/Resources/pfffft.png differ diff --git a/Client/Resources/server_base.png b/Client/Resources/server_base.png new file mode 100644 index 0000000..639d068 Binary files /dev/null and b/Client/Resources/server_base.png differ diff --git a/Client/Resources/textboxes.png b/Client/Resources/textboxes.png new file mode 100644 index 0000000..d09c7b4 Binary files /dev/null and b/Client/Resources/textboxes.png differ diff --git a/Client/Settings.cs b/Client/Settings.cs new file mode 100644 index 0000000..1a3321c --- /dev/null +++ b/Client/Settings.cs @@ -0,0 +1,388 @@ +using Client.MirSounds; + +namespace Client +{ + class Settings + { + public const long CleanDelay = 600000; + + public static int ScreenWidth = 800, ScreenHeight = 600; + private static InIReader Reader = new InIReader(@".\Mir1Config.ini"); + private static InIReader QuestTrackingReader = new InIReader(Path.Combine(UserDataPath, @".\QuestTracking.ini")); + + private static bool _useTestConfig; + public static bool UseTestConfig + { + get + { + return _useTestConfig; + } + set + { + if (value == true) + { + Reader = new InIReader(@".\Mir1Test.ini"); + } + _useTestConfig = value; + } + } + + public const string DataPath = @".\Data\", + MapPath = @".\Map\", + SoundPath = @".\Sound\", + ExtraDataPath = @".\Data\Extra\", + ShadersPath = @".\Data\Shaders\", + MouseCursorPath = @".\Data\Cursors\", + ResourcePath = @".\DirectX\", + UserDataPath = @".\Data\UserData\"; + + //Logs + public static bool LogErrors = true; + public static bool LogChat = true; + public static int RemainingErrorLogs = 100; + + //Graphics + public static bool FullScreen = true, Borderless = true, TopMost = true, MouseClip = false; + public static string FontName = "Arial"; //"MS Sans Serif" + public static float FontSize = 8F; + public static bool UseMouseCursors = true; + + public static bool FPSCap = true; + public static int MaxFPS = 100; + public static int Resolution = 800; + public static bool DebugMode = false; + + //Network + public static bool UseConfig = true; + public static string IPAddress = "127.0.0.1"; + public static int Port = 7000; + public const int TimeOut = 5000; + + //Sound + public static int SoundOverLap = 3; + private static byte _volume = 100; + public static int SoundCleanMinutes = 5; + + public static byte Volume + { + get { return _volume; } + set + { + switch (value) + { + case > 100: + _volume = (byte)100; + break; + case <= 0: + _volume = (byte)0; + break; + default: + _volume = value; + break; + } + + SoundManager.Vol = Convert.ToInt32(_volume); + } + } + + private static byte _musicVolume = 100; + public static byte MusicVolume + { + get { return _musicVolume; } + set + { + switch(value) + { + case > 100: + _musicVolume = (byte)100; + break; + case <= 0: + _musicVolume = (byte)0; + break; + default: + _musicVolume = value; + break; + } + + SoundManager.MusicVol = Convert.ToInt32(_musicVolume); + } + } + + //Game + public static string AccountID = "", + Password = ""; + + public static bool + SkillMode = false, + SkillBar = true, + //SkillSet = true, + Effect = true, + LevelEffect = true, + DropView = true, + NameView = true, + HPView = true, + TransparentChat = false, + ModeView = false, + DisplayDamage = true, + TargetDead = false, + HighlightTarget = true, + ExpandedBuffWindow = true, + ExpandedHeroBuffWindow = true, + DisplayBodyName = false, + NewMove = false; + + public static int[,] SkillbarLocation = new int[2, 2] { { 0, 0 }, { 216, 0 } }; + + //Quests + public static int[] TrackedQuests = new int[5]; + + //Chat + public static bool + ShowNormalChat = true, + ShowYellChat = true, + ShowWhisperChat = true, + ShowLoverChat = true, + ShowMentorChat = true, + ShowGroupChat = true, + ShowGuildChat = true; + + //Filters + public static bool + FilterNormalChat = false, + FilterWhisperChat = false, + FilterShoutChat = false, + FilterSystemChat = false, + FilterLoverChat = false, + FilterMentorChat = false, + FilterGroupChat = false, + FilterGuildChat = false; + + + //AutoPatcher Host removed for now + public static bool P_Patcher = false; + public static string P_Host = @"/"; + public static string P_PatchFileName = @"PList.gz"; + public static bool P_NeedLogin = false; + public static string P_Login = string.Empty; + public static string P_Password = string.Empty; + public static string P_ServerName = string.Empty; + public static string P_BrowserAddress = ""; + public static string P_Client = Application.StartupPath + "\\"; + public static bool P_AutoStart = false; + public static int P_Concurrency = 1; + + public static void Load() + { + GameLanguage.LoadClientLanguage(@".\Language.ini"); + + if (!Directory.Exists(DataPath)) Directory.CreateDirectory(DataPath); + if (!Directory.Exists(MapPath)) Directory.CreateDirectory(MapPath); + if (!Directory.Exists(SoundPath)) Directory.CreateDirectory(SoundPath); + + //Graphics + FullScreen = Reader.ReadBoolean("Graphics", "FullScreen", FullScreen); + Borderless = Reader.ReadBoolean("Graphics", "Borderless", Borderless); + MouseClip = Reader.ReadBoolean("Graphics", "MouseClip", MouseClip); + TopMost = Reader.ReadBoolean("Graphics", "AlwaysOnTop", TopMost); + FPSCap = Reader.ReadBoolean("Graphics", "FPSCap", FPSCap); + Resolution = Reader.ReadInt32("Graphics", "Resolution", Resolution); + DebugMode = Reader.ReadBoolean("Graphics", "DebugMode", DebugMode); + UseMouseCursors = Reader.ReadBoolean("Graphics", "UseMouseCursors", UseMouseCursors); + + //Network + UseConfig = Reader.ReadBoolean("Network", "UseConfig", UseConfig); + if (UseConfig) + { + IPAddress = Reader.ReadString("Network", "IPAddress", IPAddress); + Port = Reader.ReadInt32("Network", "Port", Port); + } + + //Logs + LogErrors = Reader.ReadBoolean("Logs", "LogErrors", LogErrors); + LogChat = Reader.ReadBoolean("Logs", "LogChat", LogChat); + + //Sound + Volume = Reader.ReadByte("Sound", "Volume", Volume); + SoundOverLap = Reader.ReadInt32("Sound", "SoundOverLap", SoundOverLap); + MusicVolume = Reader.ReadByte("Sound", "Music", MusicVolume); + var n = Reader.ReadInt32("Sound", "CleanMinutes", SoundCleanMinutes); + if (n < 1 || n > 60 * 3) n = SoundCleanMinutes; + SoundCleanMinutes = n; + + + //Game + AccountID = Reader.ReadString("Game", "AccountID", AccountID); + Password = Reader.ReadString("Game", "Password", Password); + + SkillMode = Reader.ReadBoolean("Game", "SkillMode", SkillMode); + SkillBar = Reader.ReadBoolean("Game", "SkillBar", SkillBar); + //SkillSet = Reader.ReadBoolean("Game", "SkillSet", SkillSet); + Effect = Reader.ReadBoolean("Game", "Effect", Effect); + LevelEffect = Reader.ReadBoolean("Game", "LevelEffect", Effect); + DropView = Reader.ReadBoolean("Game", "DropView", DropView); + NameView = Reader.ReadBoolean("Game", "NameView", NameView); + HPView = Reader.ReadBoolean("Game", "HPMPView", HPView); + ModeView = Reader.ReadBoolean("Game", "ModeView", ModeView); + FontName = Reader.ReadString("Game", "FontName", FontName); + TransparentChat = Reader.ReadBoolean("Game", "TransparentChat", TransparentChat); + DisplayDamage = Reader.ReadBoolean("Game", "DisplayDamage", DisplayDamage); + TargetDead = Reader.ReadBoolean("Game", "TargetDead", TargetDead); + HighlightTarget = Reader.ReadBoolean("Game", "HighlightTarget", HighlightTarget); + ExpandedBuffWindow = Reader.ReadBoolean("Game", "ExpandedBuffWindow", ExpandedBuffWindow); + ExpandedHeroBuffWindow = Reader.ReadBoolean("Game", "ExpandedHeroBuffWindow", ExpandedHeroBuffWindow); + DisplayBodyName = Reader.ReadBoolean("Game", "DisplayBodyName", DisplayBodyName); + NewMove = Reader.ReadBoolean("Game", "NewMove", NewMove); + + for (int i = 0; i < SkillbarLocation.Length / 2; i++) + { + SkillbarLocation[i, 0] = Reader.ReadInt32("Game", "Skillbar" + i.ToString() + "X", SkillbarLocation[i, 0]); + SkillbarLocation[i, 1] = Reader.ReadInt32("Game", "Skillbar" + i.ToString() + "Y", SkillbarLocation[i, 1]); + } + + //Chat + ShowNormalChat = Reader.ReadBoolean("Chat", "ShowNormalChat", ShowNormalChat); + ShowYellChat = Reader.ReadBoolean("Chat", "ShowYellChat", ShowYellChat); + ShowWhisperChat = Reader.ReadBoolean("Chat", "ShowWhisperChat", ShowWhisperChat); + ShowLoverChat = Reader.ReadBoolean("Chat", "ShowLoverChat", ShowLoverChat); + ShowMentorChat = Reader.ReadBoolean("Chat", "ShowMentorChat", ShowMentorChat); + ShowGroupChat = Reader.ReadBoolean("Chat", "ShowGroupChat", ShowGroupChat); + ShowGuildChat = Reader.ReadBoolean("Chat", "ShowGuildChat", ShowGuildChat); + + //Filters + FilterNormalChat = Reader.ReadBoolean("Filter", "FilterNormalChat", FilterNormalChat); + FilterWhisperChat = Reader.ReadBoolean("Filter", "FilterWhisperChat", FilterWhisperChat); + FilterShoutChat = Reader.ReadBoolean("Filter", "FilterShoutChat", FilterShoutChat); + FilterSystemChat = Reader.ReadBoolean("Filter", "FilterSystemChat", FilterSystemChat); + FilterLoverChat = Reader.ReadBoolean("Filter", "FilterLoverChat", FilterLoverChat); + FilterMentorChat = Reader.ReadBoolean("Filter", "FilterMentorChat", FilterMentorChat); + FilterGroupChat = Reader.ReadBoolean("Filter", "FilterGroupChat", FilterGroupChat); + FilterGuildChat = Reader.ReadBoolean("Filter", "FilterGuildChat", FilterGuildChat); + + //AutoPatcher + P_Patcher = Reader.ReadBoolean("Launcher", "Enabled", P_Patcher); + P_Host = Reader.ReadString("Launcher", "Host", P_Host); + P_PatchFileName = Reader.ReadString("Launcher", "PatchFile", P_PatchFileName); + P_NeedLogin = Reader.ReadBoolean("Launcher", "NeedLogin", P_NeedLogin); + P_Login = Reader.ReadString("Launcher", "Login", P_Login); + P_Password = Reader.ReadString("Launcher", "Password", P_Password); + P_AutoStart = Reader.ReadBoolean("Launcher", "AutoStart", P_AutoStart); + P_ServerName = Reader.ReadString("Launcher", "ServerName", P_ServerName); + P_BrowserAddress = Reader.ReadString("Launcher", "Browser", P_BrowserAddress); + P_Concurrency = Reader.ReadInt32("Launcher", "ConcurrentDownloads", P_Concurrency); + + + if (!P_Host.EndsWith("/")) P_Host += "/"; + if (P_Host.StartsWith("www.", StringComparison.OrdinalIgnoreCase)) P_Host = P_Host.Insert(0, "http://"); + if (P_BrowserAddress.StartsWith("www.", StringComparison.OrdinalIgnoreCase)) P_BrowserAddress = P_BrowserAddress.Insert(0, "http://"); + + //Temp check to update everyones address (Removed host for now) + //http: //mirfiles.co.uk/mir1/cmir/patch/ + if (P_Host.ToLower() == "/") + { + P_Host = "/"; + } + + if (P_Concurrency < 1) P_Concurrency = 1; + if (P_Concurrency > 100) P_Concurrency = 100; + } + + public static void Save() + { + //Graphics + Reader.Write("Graphics", "FullScreen", FullScreen); + Reader.Write("Graphics", "Borderless", Borderless); + Reader.Write("Graphics", "MouseClip", MouseClip); + Reader.Write("Graphics", "AlwaysOnTop", TopMost); + Reader.Write("Graphics", "FPSCap", FPSCap); + Reader.Write("Graphics", "Resolution", Resolution); + Reader.Write("Graphics", "DebugMode", DebugMode); + Reader.Write("Graphics", "UseMouseCursors", UseMouseCursors); + + //Sound + Reader.Write("Sound", "Volume", Volume); + Reader.Write("Sound", "SoundOverLap", SoundOverLap); + Reader.Write("Sound", "Music", MusicVolume); + Reader.Write("Sound", "CleanMinutes", SoundCleanMinutes); + + //Game + Reader.Write("Game", "AccountID", AccountID); + Reader.Write("Game", "Password", Password); + Reader.Write("Game", "SkillMode", SkillMode); + Reader.Write("Game", "SkillBar", SkillBar); + //Reader.Write("Game", "SkillSet", SkillSet); + Reader.Write("Game", "Effect", Effect); + Reader.Write("Game", "LevelEffect", LevelEffect); + Reader.Write("Game", "DropView", DropView); + Reader.Write("Game", "NameView", NameView); + Reader.Write("Game", "HPMPView", HPView); + Reader.Write("Game", "ModeView", ModeView); + Reader.Write("Game", "FontName", FontName); + Reader.Write("Game", "TransparentChat", TransparentChat); + Reader.Write("Game", "DisplayDamage", DisplayDamage); + Reader.Write("Game", "TargetDead", TargetDead); + Reader.Write("Game", "HighlightTarget", HighlightTarget); + Reader.Write("Game", "ExpandedBuffWindow", ExpandedBuffWindow); + Reader.Write("Game", "ExpandedHeroBuffWindow", ExpandedBuffWindow); + Reader.Write("Game", "DisplayBodyName", DisplayBodyName); + Reader.Write("Game", "NewMove", NewMove); + + for (int i = 0; i < SkillbarLocation.Length / 2; i++) + { + + Reader.Write("Game", "Skillbar" + i.ToString() + "X", SkillbarLocation[i, 0]); + Reader.Write("Game", "Skillbar" + i.ToString() + "Y", SkillbarLocation[i, 1]); + } + + //Chat + Reader.Write("Chat", "ShowNormalChat", ShowNormalChat); + Reader.Write("Chat", "ShowYellChat", ShowYellChat); + Reader.Write("Chat", "ShowWhisperChat", ShowWhisperChat); + Reader.Write("Chat", "ShowLoverChat", ShowLoverChat); + Reader.Write("Chat", "ShowMentorChat", ShowMentorChat); + Reader.Write("Chat", "ShowGroupChat", ShowGroupChat); + Reader.Write("Chat", "ShowGuildChat", ShowGuildChat); + + //Filters + Reader.Write("Filter", "FilterNormalChat", FilterNormalChat); + Reader.Write("Filter", "FilterWhisperChat", FilterWhisperChat); + Reader.Write("Filter", "FilterShoutChat", FilterShoutChat); + Reader.Write("Filter", "FilterSystemChat", FilterSystemChat); + Reader.Write("Filter", "FilterLoverChat", FilterLoverChat); + Reader.Write("Filter", "FilterMentorChat", FilterMentorChat); + Reader.Write("Filter", "FilterGroupChat", FilterGroupChat); + Reader.Write("Filter", "FilterGuildChat", FilterGuildChat); + + //AutoPatcher + Reader.Write("Launcher", "Enabled", P_Patcher); + Reader.Write("Launcher", "Host", P_Host); + Reader.Write("Launcher", "PatchFile", P_PatchFileName); + Reader.Write("Launcher", "NeedLogin", P_NeedLogin); + Reader.Write("Launcher", "Login", P_Login); + Reader.Write("Launcher", "Password", P_Password); + Reader.Write("Launcher", "ServerName", P_ServerName); + Reader.Write("Launcher", "Browser", P_BrowserAddress); + Reader.Write("Launcher", "AutoStart", P_AutoStart); + Reader.Write("Launcher", "ConcurrentDownloads", P_Concurrency); + } + + public static void LoadTrackedQuests(string charName) + { + //Quests + for (int i = 0; i < TrackedQuests.Length; i++) + { + TrackedQuests[i] = QuestTrackingReader.ReadInt32(charName, "Quest-" + i.ToString(), -1); + } + } + + public static void SaveTrackedQuests(string charName) + { + //Quests + for (int i = 0; i < TrackedQuests.Length; i++) + { + QuestTrackingReader.Write(charName, "Quest-" + i.ToString(), TrackedQuests[i]); + } + } + } + + +} diff --git a/Client/Utils/BrowserHelper.cs b/Client/Utils/BrowserHelper.cs new file mode 100644 index 0000000..89bafa2 --- /dev/null +++ b/Client/Utils/BrowserHelper.cs @@ -0,0 +1,125 @@ +using Microsoft.Win32; +using System.Diagnostics; + +namespace Client.Utils +{ + public class BrowserHelper + { + private static void OpenChrometBrowser(string url) + { + try + { + var openKey = @"SOFTWARE\Wow6432Node\Google\Chrome"; + if (IntPtr.Size == 4) + { + openKey = @"SOFTWARE\Google\Chrome"; + } + RegistryKey appPath = Registry.LocalMachine.OpenSubKey(openKey); + + if (appPath != null) + { + var result = Process.Start("chrome.exe", url); + if (result == null) + { + OpenIetBrowser(url); + } + } + else + { + OpenDefaultBrowser(url); + } + } + catch + { + OpenDefaultBrowser(url); + } + } + + private static void OpenIetBrowser(string url) + { + try + { + Process.Start("iexplore.exe", url); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message); + + try + { + if (File.Exists(@"C:\Program Files\Internet Explorer\iexplore.exe")) + { + ProcessStartInfo processStartInfo = new ProcessStartInfo + { + FileName = @"C:\Program Files\Internet Explorer\iexplore.exe", + Arguments = url, + UseShellExecute = false, + CreateNoWindow = true + }; + Process.Start(processStartInfo); + } + else + { + if (File.Exists(@"C:\Program Files (x86)\Internet Explorer\iexplore.exe")) + { + ProcessStartInfo processStartInfo = new ProcessStartInfo + { + FileName = @"C:\Program Files (x86)\Internet Explorer\iexplore.exe", + Arguments = url, + UseShellExecute = false, + CreateNoWindow = true + }; + Process.Start(processStartInfo); + } + else + { + if (MessageBox.Show("Internet Explorer is not installed in the system. Do you want to download and install it?", null, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) == DialogResult.Yes) + { + OpenDefaultBrowser("http://windows.microsoft.com/zh-cn/internet-explorer/download-ie"); + } + } + } + } + catch (Exception exception) + { + MessageBox.Show(exception.Message); + } + } + } + + public static void OpenDefaultBrowser(string url) + { + try + { + RegistryKey key = Registry.ClassesRoot.OpenSubKey(@"http\shell\open\command\"); + if (key != null) + { + string s = key.GetValue("").ToString(); + var lastIndex = s.IndexOf(".exe", StringComparison.Ordinal); + var path = s.Substring(1, lastIndex + 3); + var result = Process.Start(path, url); + if (result == null) + { + var result1 = Process.Start("explorer.exe", url); + if (result1 == null) + { + Process.Start(url); + } + } + } + else + { + var result1 = Process.Start("explorer.exe", url); + if (result1 == null) + { + Process.Start(url); + } + } + } + catch + { + OpenIetBrowser(url); + } + } + } +} diff --git a/Client/Utils/FileHelper.cs b/Client/Utils/FileHelper.cs new file mode 100644 index 0000000..97ae03f --- /dev/null +++ b/Client/Utils/FileHelper.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Client.Utils +{ + public class Download + { + public FileInformation Info; + public long CurrentBytes; + public bool Completed; + } + + public class FileInformation + { + public string FileName; //Relative. + public int Length, Compressed; + public DateTime Creation; + + public FileInformation() + { + + } + public FileInformation(BinaryReader reader) + { + FileName = reader.ReadString(); + Length = reader.ReadInt32(); + Compressed = reader.ReadInt32(); + + Creation = DateTime.FromBinary(reader.ReadInt64()); + } + public void Save(BinaryWriter writer) + { + writer.Write(FileName); + writer.Write(Length); + writer.Write(Compressed); + writer.Write(Creation.ToBinary()); + } + } +} diff --git a/Client/Utils/MIR1.ICO b/Client/Utils/MIR1.ICO new file mode 100644 index 0000000..f32c413 Binary files /dev/null and b/Client/Utils/MIR1.ICO differ diff --git a/Components/CustomFormControl.dll b/Components/CustomFormControl.dll new file mode 100644 index 0000000..6775714 Binary files /dev/null and b/Components/CustomFormControl.dll differ diff --git a/Components/Microsoft.VisualBasic.PowerPacks.Vs.dll b/Components/Microsoft.VisualBasic.PowerPacks.Vs.dll new file mode 100644 index 0000000..77fa750 Binary files /dev/null and b/Components/Microsoft.VisualBasic.PowerPacks.Vs.dll differ diff --git a/Components/Microsoft.VisualBasic.PowerPacks.Vs.xml b/Components/Microsoft.VisualBasic.PowerPacks.Vs.xml new file mode 100644 index 0000000..acd746f --- /dev/null +++ b/Components/Microsoft.VisualBasic.PowerPacks.Vs.xml @@ -0,0 +1,2453 @@ + + + + Microsoft.VisualBasic.PowerPacks.Vs + + + + Specifies the background transparency for an or control. + + + A transparent background. This is the default. + + + A background specified by the property. + + + Displays data in a customizable list format. + + + Initializes a new instance of the class. + + + Adds a new to the control. + The property is set to False. + + + Gets or sets a value that determines whether users can add a new row to a at run time. + true if the user can add rows; otherwise false. The default is true. + + + Occurs when the property changes. + + + Gets or sets a value that determines whether users can delete a row from a at run time. + true if the user can delete rows; otherwise false. The default is true. + + + Occurs when the property changes. + + + + + + Begins a code block that enables you to reset the for a control. + + + Allows users to cancel an edit to the current child control in the current . + + + Creates a new accessibility object for a control. + A new accessibility object. + + + This member overrides the method. + + + This member overrides . + + + Gets the current in a control. + The currently selected object. + + + Gets or sets the current in a control. + The index of the current . + + + Occurs when the changes. + + + Occurs when an external data-parsing or validation operation throws an exception, or when an attempt to commit data to a data source fails. + + + Gets or sets the name of the list or table in the data source for which the is displaying data. + The name of the table or list in the for which the is displaying data. The default is Empty. + + + Occurs when the property changes. + + + Gets or sets the data source for which the is displaying data. + The object that contains data for the to display. + + + Occurs when the property is changed. + + + This member overrides the property. + + + Occurs when a is being deleted. + + + Gets the number of items that are visible in a control, optionally including partially displayed items. + The count of displayed items. + true to include partially displayed items in the count; false to include only fully displayed items. + + + Occurs when a must be drawn. + + + Ends a code block that enables you to reset the for a control. + + + Gets the index of the first currently displayed in a control. + The index of the first displayed . + + + Gets a value that determines whether the data for a in a control has been changed by a user. + true if the data has been changed; otherwise, false. + + + Occurs after the and its controls are cloned from the . + + + Occurs before the and its controls are cloned from the . + + + Gets or sets the number of items that are in a control. + The count. + + + Gets or sets the size of the item header in a control. + The size of the item header, in pixels. The default value is 15. + + + Gets or sets a value that determines whether item headers are displayed in a control. + true if the item header will be displayed; otherwise, false. The default is true. + + + Occurs when the property changes. + + + Occurs when a new is added to a control. + + + Occurs when a is deleted from a control. + + + Gets a template that represents the for a control. + An object that determines the layout and appearance of items in the control. + + + Occurs when the property is set to True and a new value for a child control of a is needed. + + + Occurs when the property is set to True and the value of a child control in the changes. + + + Gets or sets a value that determines whether a control will be displayed with a vertical or horizontal orientation. + One of the enumeration values that specifies the layout. + + + Occurs when the property value changes. + + + Occurs when the property is set to True and the user creates a new blank . + + + Raises the event. + An object that contains the event data. + + + Raises the event. + An object that contains the event data. + + + Raises the event. + An object that contains the event data. + + + Raises the method. + + + Raises the event. + An object that contains the event data. + + + Raises the event. + An object that contains the event data. + + + Raises the event. + An object that contains the event data. + + + Raises the event. + An object that contains the event data. + + + Raises the event. + An object that contains the event data. + + + Raises the event. + An object that contains the event data. + + + Raises the event. + An object that contains the event data. + + + Raises the event. + An object that contains the event data. + + + Raises the event. + An object that contains the event data. + + + Raises the event. + An object that contains the event data. + + + Raises the event. + An object that contains the event data. + + + Raises the event. + An object that contains the event data. + + + Raises the event. + An object that contains the event data. + + + Raises the event. + An object that contains the event data. + + + Raises the event + An object that contains the event data. + + + Raises the event. + An object that contains the event data. + + + Raises the event. + An object that contains the event data. + + + Raises the event. + An object that contains the event data. + + + Raises the event. + An object that contains the event data. + + + Raises the event. + An object that contains the event data. + + + Raises the event. + An object that contains the event data. + + + Raises the event. + An object that contains the event data. + + + Raises the event. + An object that contains the event data. + + + Raises the event. + An object that contains the event data. + + + Raises the event. + An object that contains the event data. + + + + Raises the event. + An object that contains the event data. + + + This member overrides the method. + + + Removes a at the specified position from a control. + The index of the . + The value specified for is less than 0 or greater than - 1. + + + + Scrolls a specified into view in a control. + The index of the . + The value specified for is less than 0 or greater than - 1. + + + Scrolls a specified into view in a control, optionally aligning it with the top of the control. + The index of the . + true to align the top of the with the top of the control; otherwise, false. + The value specified for is less than 0 or greater than - 1. + + + This member overrides the method. + + + This member overrides the method. + + + Gets or sets the color that is displayed in the item header of a control when an item is first selected. + The color to use. The default is . + + + Occurs when the property is changed. + + + Occurs when the user adds a new by pressing the CTRL+N keyboard shortcut. + + + Occurs after the user deletes a by pressing the DELETE key. + + + Occurs when the user deletes a by pressing the DELETE key. + + + Gets or sets a value that indicates whether you have provided your own data-management operations for the control. + true if the uses data-management operations that you provide; otherwise, false. The default is false. + + + Occurs when the property is changed. + + + This member overrides the method. + + + Provides data for the and events. + + + Initializes a new instance of the class. + The index of the that is being deleted. + The number of items being deleted. + + + Gets the number of items being deleted. + A count of the items. + + + Gets the index of the item that is being deleted. + The index of the item. + + + Represents the method that handles the and events. + The source of the event. + An object that contains the event data. + + + Provides data for the , , , and events. + + + Initializes a new instance of the class. + The index of the that is being added or deleted. + The number of items being added or deleted. + + + Gets the number of items being added to or deleted from a control. + A count of the items. + + + Gets the index of the item being added or deleted. + The index of the item. + + + Represents the method that will handle the , , , and events. + The source of the event. + An object that contains the event data. + + + Provides data for the event. + + + Initializes a new instance of the class. + The on which the error occurred. + The property on which the error occurred. For most controls, this will be the property. + The exception object. + + + Gets the that raised the data error. + The control that raised the error. + + + Gets the that raised the data error. + The item that contains the control in which the error occurred. + + + Gets the that represents the error. + The exception object that represents the error. + + + Gets the name of the property of the control that raised the error. + The name of the property. + + + Gets or sets a value that indicates whether to throw an exception after code execution exits the event handler. + true if the exception is thrown; otherwise, false. The default is false. + + + Represents the method that will handle the event. + The source of the event. + An object that contains the event data. + + + Used by the control to display data at run time. + + + Initializes a new instance of the object. + + + Gets the that is assigned to the control. + The that is assigned to the control. + + + Gets or sets the default action description of the control for use by accessibility client applications. + The default action description of the control for use by accessibility client applications. + + + Gets or sets the description of the control that is used by accessibility client applications. + A string that contains the description of the control that is used by accessibility client applications. The default is a null reference (Nothing in Visual Basic). + + + Gets or sets the name of the control that is used by accessibility client applications. + A string that represents the name of the control that is used by accessibility client applications. The default is a null reference (Nothing in Visual Basic). + + + Gets or sets the accessible role of the control. + One of the values of . The default is Default. + The value assigned is not one of the values. + + + The object is used internally by the control to display data at run time. The settings of the determine how the data is displayed. + An enumeration. + + + The object is used internally by the control to display data at run time. The settings of the determine how the data is displayed. + An for the Accessibility instance. + + + The object is used internally by the control to display data at run time. The settings of the determine how the data is displayed. + A enumeration. + + + Gets a value that determines whether a is the currently selected item in a control. + true if the is the currently selected item; otherwise, false. + + + Gets a value that determines whether the data for a in a control has been changed by a user. + true if the data has been changed; otherwise, false. + + + Gets the index of a in a control. + The index of the current . + + + The object is used internally by the control to display data at run time. The settings of the determine how the data is displayed. + A that represents the location. + + + Gets or sets the name of the object. + The name of the object. The default is an empty string (""). + + + + The object is used internally by the control to display data at run time. The settings of the determine how the data is displayed. + The for the event. + + + The object is used internally by the control to display data at run time. The settings of the determine how the data is displayed. + The for the event. + + + The object is used internally by the control to display data at run time. The settings of the determine how the data is displayed. + The for the event. + + + The object is used internally by the control to display data at run time. The settings of the determine how the data is displayed. + The new property value of the control. + The new property value of the control. + The new property value of the control. + The new property value of the control. + A bitwise combination of the values. + + + The object is used internally by the control to display data at run time. The settings of the determine how the data is displayed. + An Integer that represents the index. + + + The object is used internally by the control to display data at run time. The settings of the determine how the data is displayed. + true if the control participates in the tab order; otherwise false. + + + The object is used internally by the control to display data at run time. The settings of the determine how the data is displayed. + true if the item is visible; otherwise false. + + + The object is used internally by the control to display data at run time. The settings of the determine how the data is displayed. + The for the process. + + + Provides data for the event. + + + Initializes a new instance of the class. + + + Gets or sets a value that specifies whether the cloning is handled by the developer. + true if you are handling the cloning yourself; otherwise, false. The default is false. + + + Gets the from which the new will be cloned. + The object from which the new object will be cloned. + + + Gets or sets the new that is the result of the cloning operation. + The cloned object. + + + Represents the method that will handle the event. + The source of the event. + An object that contains the event data. + + + Provides data for the event. + + + Initializes a new instance of the class. + The item to be drawn. + + + Gets a that provides the data for the event of a control + An item that contains the data, which is based on the property of the control. + + + Represents the method that will handle the event. + The source of the event. + An object that contains the event data. + + + Provides data for the and events. + + + Initializes a new instance of the class. + The index of the that contains the control that is raising the event. + The property of the control that has changed or that needs data. + The property value that has changed. + + + Gets the child control of a that is raising the or event. + The control that is raising the event. + + + Gets the index of the that contains the control that is raising the or event. + The index of the . + + + Gets the name of the data-bound property of the control that is raising a or event. + The name of the property. + + + Gets the property value that has changed to raise a or event. + The value to assign to the property or save to a data store. + + + Represents the method that will handle the and events. + The source of the event. + An object that contains the event data. + + + Provides an enumeration for specifying the orientation of items in a control. + + + Default. Items will be displayed in a vertical format. A vertical scroll bar will be displayed as necessary. + + + Items will be displayed in a horizontal format. A horizontal scroll bar will be displayed as necessary. + + + Specifies the fill gradient style for an or control. + + + A fill gradient in which the on the upper-right transitions to the on the lower-left. + + + A fill gradient in which the on the outer edges of the shape transitions to the in the center. + + + A fill gradient in which the on the upper-left transitions to the on the lower-right. + + + A fill gradient in which the on the left transitions to the on the right. + + + No fill gradient. The is displayed. This is the default. + + + A fill gradient in which the on the top transitions to the on the bottom. + + + Specifies the fill gradient style for an or control. + + + A pattern of lines that slant from upper right to lower left. + + + A pattern of horizontal and vertical lines that cross. + + + A pattern of diagonal lines that slant to the right from top points to bottom points, are spaced 50 percent closer together than lines, and are double their widths. This pattern is not antialiased. + + + A pattern of horizontal lines that are spaced 50 percent closer together than lines and are double their widths. + + + A pattern of diagonal lines that slant to the left from top points to bottom points, are spaced 50 percent closer together than lines, and are double their widths. This pattern is not antialiased. + + + A pattern of vertical lines that are spaced 50 percent closer together than lines and are double their widths. + + + A pattern of dashed diagonal lines that slant to the right from top points to bottom points. + + + A pattern of dashed horizontal lines. + + + A pattern of dashed diagonal lines that slant to the left from top points to bottom points. + + + A pattern of dashed vertical lines. + + + A pattern that has the appearance of layered bricks that slant to the left from top points to bottom points. + + + A pattern of crossing diagonal lines. + + + A pattern that has the appearance of divots. + + + A pattern of forward crossing diagonal lines, each of which is composed of dots that cross. + + + A pattern of horizontal and vertical lines, each of which is composed of dots that cross. + + + A pattern of lines that slant from upper left to lower right. + + + A pattern of horizontal lines. + + + A pattern that has the appearance of horizontally layered bricks. + + + A pattern that has the appearance of a checkerboard, with squares that are double the size of the HatchStyle.SmallCheckerBoard squares. + + + A pattern that has the appearance of confetti and is composed of larger pieces than those of . + + + A pattern of diagonal lines that slant to the right from top points to bottom points and are spaced 50 percent farther apart than those of . This pattern is not antialiased. + + + A pattern of horizontal lines that are spaced 50 percent farther apart than those of . + + + A pattern of diagonal lines that slant to the left from top points to bottom points and are spaced 50 percent farther apart than those of . This pattern is not antialiased. + + + A pattern of vertical lines that are spaced 50 percent farther apart than those of . + + + A pattern of horizontal lines that are spaced 75 percent closer together than those of (or 25 percent closer together than those of ). + + + A pattern of vertical lines that are spaced 75 percent closer together than those of (or 25 percent closer together than those of ). + + + A pattern of crossing diagonal lines that that are not antialiased. + + + A 5-percent dot pattern. The ratio of foreground color to background color is 5:100. + + + A 10-percent dot pattern. The ratio of foreground color to background color is 10:100. + + + A 20-percent dot pattern. The ratio of foreground color to background color is 20:100. + + + A 25-percent dot pattern. The ratio of foreground color to background color is 25:100. + + + A 30-percent dot pattern. The ratio of foreground color to background color is 30:100. + + + A 40-percent dot pattern. The ratio of foreground color to background color is 40:100. + + + A 50-percent dot pattern. The ratio of foreground color to background color is 50:100. + + + A 60-percent dot pattern. The ratio of foreground color to background color is 60:100. + + + A 70-percent dot pattern. The ratio of foreground color to background color is 70:100. + + + A 75-percent dot pattern. The ratio of foreground color to background color is 75:100. + + + A 80-percent dot pattern. The ratio of foreground color to background color is 80:100. + + + A 90-percent dot pattern. The ratio of foreground color to background color is 90:100. + + + A plaid pattern. + + + A pattern that has the appearance of diagonally layered shingles that slant to the right from top points to bottom points. + + + A pattern that has the appearance of a checkerboard. + + + A pattern that has the appearance of confetti. + + + A pattern of horizontal and vertical lines that cross and are spaced 50 percent closer together than those of . + + + An opaque background in the color specified by the property. + + + A pattern that has the appearance of a checkerboard positioned diagonally. + + + A pattern that has the appearance of spheres laid adjacent to each other. + + + No pattern. If the property is set to , the will be displayed. + + + A pattern that has the appearance of a trellis. + + + A pattern of vertical lines. + + + A pattern of horizontal lines that are composed of tildes (~). + + + A pattern that has the appearance of a woven material. + + + A pattern of diagonal lines that slant to the right from top points to bottom points, have the same spacing as those of , and are triple their width. This pattern is not antialiased. + + + A pattern of diagonal lines that slant to the left from top points to bottom points, have the same spacing as those of , and are triple their width. This pattern is not antialiased. + + + A pattern of horizontal lines that are composed of zigzags. + + + Represents a control displayed as a horizontal, vertical, or diagonal line. + + + Initializes a new instance of the class. + + + Initializes a new instance of the class, specifying the where it will be parented. + A where the shape will be parented + + + Initializes a new instance of the class, specifying the coordinates for the line. + The X (horizontal) coordinate of the starting point of the line. + The Y (vertical) coordinate of the starting point of the line. + The X (horizontal) coordinate of the ending point of the line. + The Y (vertical) coordinate of the ending point of the line. + + + Creates an object to provide information that accessibility applications use to adjust an application's user interface (UI) for users who have disabilities. + A class. + + + Supports drawing to the specified bitmap. + The to be drawn to. + The within which the is drawn. + + + Gets or sets the ending coordinates of a line drawn by a control. + A structure that represents the ending coordinates of the line. + + + Occurs when the property value changes. + + + Gets information about the control at the specified point on the screen. + true if the control is located at the specified coordinates; otherwise false. + The horizontal screen coordinate. + The vertical screen coordinate. + + + Raises the event. + A that contains the event data. + + + Raises the event. + A that contains the event data. + + + Raises the event. + A that contains the event data. + + + Resizes the control by the specified scaling factor. + A structure that contains the X (horizontal) and Y (vertical) scaling factors. + + + Gets or sets the starting coordinates of a line drawn by a control. + A structure that represents the starting coordinates of the line. + + + Occurs when the property value changes. + + + Gets or sets the X coordinate of the starting point of a line drawn by a control. + An Integer that represents the X (horizontal) coordinate of the starting point of the line. + + + Gets or sets the X coordinate of the ending point of a line drawn by a control. + An Integer that represents the X (horizontal) coordinate of the ending point of the line. + + + Gets or sets the Y coordinate of the starting point of a line drawn by a control. + An Integer that represents the Y (vertical) coordinate of the starting point of the line. + + + Gets or sets the Y coordinate of the ending point of a line drawn by a control. + An Integer that represents the Y (vertical) coordinate of the ending point of the line. + + + Represents a control displayed as a circle or oval. + + + Initializes a new instance of the class. + + + Initializes a new instance of the class, specifying the in which it will be contained. + A in which the will be contained. + + + Initializes a new instance of the class, specifying its location and size. + An Integer representing the width (in pixels)of the . + An Integer representing the height (in pixels)of the . + + + Represents a control displayed as a square, rectangle, rounded square, or rounded rectangle. + + + Initializes a new instance of the class. + + + Initializes a new instance of the class, specifying the that will contain it. + A that will contain the . + + + Initializes a new instance of the class, specifying its location and size. + An Integer representing the width (in pixels) of the . + An Integer representing the height (in pixels) of the . + + + Gets or sets the radius for the corners of rounded rectangle and rounded square shapes. + An Integer representing the radius. The default is 0, or no radius. + + + Implements the basic functionality common to line and shape controls. + + + Initializes a new instance of the class. + + + Initializes a new instance of the class. + The to be the parent of the shape. + + + Gets the that is assigned to the control. + The that is assigned to the control. + + + Gets or sets the default action description of the control for use by accessibility client applications. + The default action description of the control for use by accessibility client applications. For , the default action is . + + + Gets or sets the description of the control that is used by accessibility client applications. + A that contains the description of the control that is used by accessibility client applications. The default is a null reference (Nothing in Visual Basic). + + + Gets or sets the name of the control that is used by accessibility client applications. + A representing the name of the control that is used by accessibility client applications. The default is a null reference (Nothing in Visual Basic). + + + Gets or sets the accessible role of the control. + One of the values of . The default is . + The value assigned is not one of the values. + + + Gets or sets the edges of the container to which a shape is bound, and determines how a shape is resized when its parent is resized. + A bitwise combination of the values. The default is Top and Left. + + + Gets or sets the color of the border of a shape or line control. + A structure representing the color of the border of the shape or line. The default is the value of . + + + Gets or sets the border style for a shape or line control. + A value that represents the appearance of the border. The default value is Solid. + The specified value when you set this property is not a valid value. + + + Gets or sets the width of a line or shape control's border. + An Integer representing the border width in pixels. The default value is 1. + + + Brings a line or shape control to the front of the z-order. + + + Gets a value indicating whether a line or shape control can receive focus. + true if the control can receive focus; otherwise, false. The default is true. + + + Gets a value indicating whether a line or shape control can be selected. + true if the control can be selected; otherwise, false. The default is true. + + + Occurs when the focus or keyboard user interface (UI) cues change. + + + Occurs when the shape is clicked. + + + Gets the that contains the . + A null reference (Nothing in Visual Basic). + + + Gets a value indicating whether a line or shape control currently has the input focus. + true if the control currently has the input focus; otherwise, false. + + + Gets or sets the shortcut menu associated with a line or shape control. + A that represents the shortcut menu for the control, or a null reference (Nothing in Visual Basic) if there is no  assigned. The default is a null reference (Nothing in Visual Basic). + + + Occurs when the value of the property changes. + + + Gets or sets the associated with a line or shape control. + The for the control, or a null reference (Nothing in Visual Basic) if there is no assigned. The default is a null reference (Nothing in Visual Basic). + + + Occurs when the value of the property changes. + + + Creates a new accessibility object for a line or shape control. + Returns an class. + + + Gets a value indicating whether a line or shape control has been created. + true if the control has been created; otherwise, false. + + + Gets or sets the cursor that is displayed when the mouse pointer is resting on a line or shape control. + A that represents the cursor to display when the mouse pointer is resting on the control. + + + Occurs when the value of the property changes. + + + Gets the default border color for a line or shape control. + The default border of the control. The default is . + + + Releases the unmanaged resources used by a line or shape control and optionally releases the managed resources. + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + Gets a value indicating whether the base class is disposing. + true if the base class is disposing; otherwise, false. + + + Occurs when the shape is double-clicked. + + + Supports rendering to the specified bitmap. + The to be drawn to. + The within which the is rendered. + + + Gets or sets a value indicating whether a line or shape control can respond to user interaction. + true if the control can respond to user interaction; otherwise, false. The default is true. + + + Occurs when the property value has changed. + + + Occurs when the shape is entered. + + + Retrieves the form that a line or shape control is on. + The that the control is on. + + + Sets input focus to a line or shape control. + true if the input focus request was successful; otherwise, false. + + + Gets a value indicating whether a line or shape control currently has the input focus. + true if the control currently has the input focus; otherwise, false. + + + Returns the next up in a line or shape control's chain of parent controls. + An that represents the parent of the control. + + + Occurs when the shape receives focus. + + + Conceals a line or shape control from the user. + + + Gets information about a line or shape control at the specified position on the screen. + true if the line or shape control is located at the specified coordinates; otherwise, false. + The horizontal screen coordinate. + The vertical screen coordinate. + + + Invalidates a specific region of a line or shape control and causes a paint message to be sent to the control. + + + Occurs when a shape's display requires redrawing. + + + Gets or sets a value indicating whether a line or shape control is available to accessibility applications. + true if the control is available to accessibility applications; otherwise, false. The default value is true. + + + Gets a value indicating whether a line or shape control has been disposed of. + true if the control has been disposed of; otherwise, false. + + + Determines whether the CAPS LOCK, NUM LOCK, or SCROLL LOCK key is in effect. + true if the specified key or keys are in effect; otherwise, false. + The CAPS LOCK, NUM LOCK, or SCROLL LOCK member of the enumeration. + The parameter refers to a key other than the CAPS LOCK, NUM LOCK, or SCROLL LOCK key. + + + Occurs when a key is pressed and the shape has focus. + + + Occurs when a key is pressed and the shape has focus. + + + Occurs when a key is released and the shape has focus. + + + Occurs when the input focus leaves the shape. + + + Occurs when the shape loses focus. + + + Gets a value indicating which of the modifier keys (SHIFT, CTRL, and ALT) is in a pressed state. + A bitwise combination of the values. The default is None. + + + Gets a value indicating which of the mouse buttons is in a pressed state. + A bitwise combination of the enumeration values. The default is None. + + + Occurs when the shape is clicked by the mouse. + + + Occurs when the shape is double-clicked by the mouse. + + + Occurs when the mouse pointer is over the shape and a mouse button is pressed. + + + Occurs when the mouse pointer enters the shape. + + + Occurs when the mouse pointer rests on the shape. + + + Occurs when the mouse pointer leaves the shape. + + + Occurs when the mouse pointer is moved over the shape. + + + Gets the position of the pointer in screen coordinates. + The MousePosition property returns a that represents the pointer position at the time the property was referenced. + + + Occurs when the mouse pointer is over the shape and a mouse button is released. + + + Occurs when the mouse wheel moves and the shape has focus. + + + Occurs when the shape is moved. + + + Gets or sets the name of a line or shape control. + The name of the control. The default is an empty string (""). + + + Raises the event. + An that contains the event data. + + + Raises the event. + An that contains the event data. + + + Raises the event. + An that contains the event data. + + + Raises the event. + An that contains the event data. + + + Raises the event. + An that contains the event data. + + + Raises the event. + An that contains the event data. + + + Raises the event. + An that contains the event data. + + + Raises the event. + An that contains the event data. + + + Raises the event. + An that contains the event data. + + + Raises the event. + A that contains the event data. + + + Raises the event. + A that contains the event data. + + + Raises the event. + A that contains the event data. + + + Raises the event. + An that contains the event data. + + + Raises the event. + An that contains the event data. + + + Raises the event. + A that contains the event data. + + + Raises the event. + A that contains the event data. + + + Raises the event. + A that contains the event data. + + + Raises the event. + An that contains the event data. + + + Raises the event. + An that contains the event data. + + + Raises the event. + An that contains the event data. + + + Raises the event. + A that contains the event data. + + + Raises the event. + A that contains the event data. + + + Raises the event. + An that contains the event data. + + + Raises the event. + An that contains the event data. + + + Raises the event. + A that contains the event data. + + + Raises the event. + An that contains the event data. + + + Raises the event. + A that contains the event data. + + + Raises the event. + A that contains the event data. + + + Raises the event. + An that contains the event data. + + + Raises the event. + An that contains the event data. + + + Occurs when the shape is redrawn. + + + Gets or sets the parent container of a line or shape control. + A that represents the parent or container of the control. + + + Occurs when the property value changes. + + + Computes the location of the specified screen point into client coordinates. + A that represents the converted , , in client coordinates. + + + Computes the location of the specified client point into screen coordinates. + A that represents the converted , , in screen coordinates. + + + Occurs before the event when a key is pressed and focus is on the shape. + + + Occurs when an is providing Help to accessibility applications. + + + Computes the size and location of the specified screen rectangle in client coordinates. + A that represents the converted , , in client coordinates. + The screen coordinate to convert. + + + Computes the size and location of the specified client rectangle in screen coordinates. + A that represents the converted , , in screen coordinates. + The screen coordinate to convert. + + + Forces a control to invalidate its client area and immediately redraw itself and any child controls. + + + Gets or sets the window region associated with a line or shape control. + The window associated with the control. + + + Occurs when the value of the property changes. + + + Resumes usual painting logic, optionally forcing an immediate layout of pending paint requests. + true to execute pending paint requests; otherwise, false. + + + Scales a shape by the specified scaling factor. + A that contains the horizontal and vertical scaling factors. + + + Enables a control. + + + Gets or sets the selection color of a shape. + A that represents the color of the focus rectangle when a shape is selected at run time. The default is . + + + Sends a line or shape control to the back of the z-order. + + + Displays a shape to the user. + + + Suspends the painting logic for a shape. + + + Gets or sets the object that contains data about a line or shape control. + An that contains data associated with the control. The default is a null reference (Nothing in Visual Basic). + + + Causes the control to redraw the invalidated regions within its client area. + + + Gets or sets a value indicating whether to use the wait cursor for the current line or shape control. + true to use the wait cursor for the current control; otherwise, false. The default is false. + + + Gets or sets a value indicating whether a line or shape control is displayed. + true if the control is displayed; otherwise, false. The default is true. + + + Occurs when the property value changes. + + + Represents a collection of objects. + + + Initializes a new instance of the class. + The that contains the collection. + + + Adds the specified to the . + The to add to the . + + + + Adds an array of objects to the . + An array of objects to add to the collection. + + + Removes all shapes from the collection. + + + Determines whether the specified is a member of the collection. + true if the is a member of the collection; otherwise, false. + The to locate in the collection. + + + + Determines whether the contains an item with the specified key. + true if the contains an item with the specified key; otherwise, false. + The key to locate in the . + + + Copies the whole to a compatible one-dimensional , starting at the specified index of the destination array. + The one-dimensional that is the destination of the elements copied from the . The must have zero-based indexing. + The zero-based index in at which copying starts. + + + + Gets the number of shapes in the collection. + An Integer representing the number of shapes in the collection. + + + Releases the unmanaged resources used by the . + + + Retrieves the index of the specified in the . + A zero-based index value that represents the location of the specified in the . + The to search for in the . + The shape is not in the . + + + Retrieves the index of the specified in the , and optionally raises an exception if the specified is not in the . + A zero-based index value that represents the location of the specified in the . Or -1 if the specified is not found in the . + The to search for in the . + true to throw an exception if the specified in the parameter is not a control in the ; otherwise, false. + The shape is not in the and the parameter value is true. + + + Retrieves a reference to an enumerator object that is used to iterate over a . + An . + + + Retrieves the index of the specified in the . + A zero-based index value that represents the position of the specified in the . + The to locate in the collection. + + + + Retrieves the index of the first occurrence of the specified item in the collection. + The zero-based index of the first occurrence of the shape that has the specified name in the collection. + The name of the shape to search for. + + + + + Gets a value indicating whether a collection is read-only. + true if the collection is read-only; otherwise, false. + + + + Gets the at the specified indexed location in the collection. + The located at the specified index location in the . + The index of the shape to retrieve from the . + + + Gets the that owns the . + The that owns the . + + + Removes the specified from the . + The to remove from the . + + + + Removes a from the at the specified indexed location. + The index value of the to remove. + + + Sets the index of the specified in the to the specified index value. + The to search for. + The new index value of the . + The shape is not in the . + + + + Provides a container for , , controls, and for any other control that derives from . + + + Initializes a new instance of the class. + + + Gets or sets the accessible role of the . + One of the values of . The default is Default. + The value assigned is not one of the values. + + + Gets or sets the cursor that is displayed when the mouse pointer is over a . + A that represents the cursor to display when the mouse pointer is over the . + + + Gets or sets which control borders are docked to the parent control and determines how a control is resized when its parent is resized. + One of the values. The default is . + + + Gets the shape that is located at the specified coordinates. + A that represents the shape that is located at the specified point. + + + Retrieves the next or previous shape in the order of the . + The next in the order of the . + The to start the search with. + true to search forward; false to search backward. + + + Selects the next or previous shape in the order of the . + true if a shape was enabled; otherwise, false. + The to start the search with. + true to move forward in the order; false to move backward. + true to continue searching from the first shape in the order after the last shape is reached; otherwise, false. + + + Gets the collection of shapes that are contained in the . + A representing the collection of shapes that are contained in the . + + + Implements the basic functionality that is common to and controls. + + + Initializes a new instance of the class. + + + Initializes a new instance of the class, specifying a as its parent. + The that is to be the parent of the shape. + + + Initializes a new instance of the class, specifying its size and location. + An Integer that represents the width (in pixels) of the . + An Integer that represents the height (in pixels) of the . + + + Gets or sets the background color for the shape. + A that represents the background color of the shape. The default is the value of the property. + + + Occurs when the property of the shape is changed. + + + Gets or sets the image displayed in the shape. + An that represents the image to display in the background of the shape. + + + Occurs when the property of a shape is changed. + + + Gets or sets the background image layout as defined in the enumeration. + One of the values of (Center,None, Stretch, Tile, or Zoom). Tile is the default value. + + + Occurs when the property of a shape is changed. + + + Gets or sets the transparency of the shape. + One of the values of ( or ). The default is . + + + Gets or sets the width of the shape control's border. + An Integer representing the border width in pixels. The default value is 1. + + + Gets the distance, in pixels, between the bottom edge of the shape and the top edge of its container's client area. + An that represents the distance, in pixels, between the bottom edge of the shape and the top edge of its container's client area. + + + Gets or sets the size and location of the shape in pixels, relative to the parent control. + A in pixels, relative to the parent control, that represents the size and location of the shape. + + + Gets the rectangle that represents the client area of the shape. + A in pixels, relative to the parent control, that represents the size and location of the shape. + + + Gets or sets the height and width of the client area of the shape. + A that represents the dimensions of the client area of the shape. + + + Occurs when the property of a shape is changed. + + + Creates a new accessibility object for the shape control. + Returns an class. + + + Gets the default background color of the shape. + The default background of the shape. The default is . + + + Gets the default fill color of the shape. + The default fill of the shape. The default is . + + + Gets the default fill gradient color of the shape. + The default fill gradient of the shape. The default is . + + + Gets the rectangle that represents the display area of the shape. + A that represents the display area of the shape . + + + Supports rendering to the specified bitmap. + The to be drawn to. + The within which the is rendered. + + + Gets or sets the color that is used to fill the shape. + The that is used to fill the shape. + + + Gets or sets the gradient color that is used to fill the shape. + The that is used for a gradient fill. + + + Gets or sets the gradient style that is used to fill the shape. + A enumeration that determines the type and direction of a gradient fill displayed on the shape. + + + Gets or sets the pattern used to fill the shape. + A enumeration that determines the pattern to be displayed in the shape. + + + Gets or sets the height of the shape. + The height of the shape in pixels. + + + Determines whether a shape control is located at the specified point on the screen. + true if the shape control is located at the specified coordinates; otherwise, false. + The horizontal screen coordinate. + The vertical screen coordinate. + + + Gets or sets the distance, in pixels, between the left edge of the shape and the left edge of its container's client area. + An that represents the distance, in pixels, between the left edge of the shape and the left edge of its container's client area. + + + Gets or sets the coordinates of the upper-left corner of the shape relative to the upper-left corner of its container. + The that represents the upper-left corner of the shape relative to the upper-left corner of its container. + + + Occurs when the property of a shape is changed. + + + Raises the event. + An that contains the event data. + + + Raises the event. + An that contains the event data. + + + Raises the event. + An that contains the event data. + + + Raises the event. + An that contains the event data. + + + Raises the event. + An that contains the event data. + + + Raises the event. + An that contains the event data. + + + Raises the event. + An that contains the event data. + + + Raises the event. + An that contains the event data. + + + Occurs when the size of a shape is changed. + + + Gets the distance, in pixels, between the right edge of the shape and the left edge of its container's client area. + An that represents the distance, in pixels, between the right edge of the shape and the left edge of its container's client area. + + + Scales the shape by the specified scaling factor. + A that contains the horizontal and vertical scaling factors. + + + Sets the bounds of the shape to the specified location and size. + The new Width property value of the shape. + The new Height property value of the shape. + + + Gets or sets the height and width of the shape. + The that represents the height and width of the shape in pixels. + + + Occurs when the property of a shape is changed. + + + Gets or sets the distance, in pixels, between the top edge of the shape and the left edge of its container's client area. + An that represents the distance, in pixels, between the top edge of the control and the top edge of its container's client area. + + + Gets or sets the width of the shape. + The width of the shape in pixels. + + + Enables printing an image of a Windows Form at run time. + + + Initializes a new instance of the class. + + + Initializes a new instance of the class, specifying the in which it will be parented. + A in which the component will be parented. + + + Initializes a new instance of the class, specifying the where it will be parented. + + + Occurs when the method is called, before the first page of the document prints. + + + Releases the unmanaged resources used by a component and optionally releases the managed resources. + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + Gets or sets the document name to display (for example, in a print status dialog box or printer queue) while printing the document. + A String to display while printing the document. The default is "document". + + + Occurs when the last page of the document has printed. + + + Gets or sets the form to be printed. + Returns a object. + + + Raises the event. + An that contains the event data. + + + Raises the event. + An that contains the event data. + + + Raises the event. + An that contains the event data. + + + Sends an image of a Windows Form to the destination specified by the property. + + + Sends an image of a Windows Form to the destination specified by the property, specifying the form and printing options + + + Gets or sets a value indicating whether the output is directed to a printer, to a print preview window, or to a file. + Returns a enumeration. + + + Gets or sets a object that you can use to specify various properties of a printer. + Returns a object. + + + Gets or sets the file name of an Encapsulated PostScript file and the path to which the file will be saved when the property is set to . + Returns a String that contains a file path and name. + + + Occurs immediately before each page is printed. + + + The PrintOption enumeration specifies options for the method of a component. + + + Uses the compatible printing implementation to print the currently visible client area. + + + Uses the compatible printing implementation to print the currently visible form. This includes the title bar, scroll bars, and border. + + + Uses a new implementation to print the currently visible client area. + + + Uses a new implementation to print the currently visible form. This includes the title bar, scroll bars, and border. + + + Uses a new implementation to print the full client area, even if part of it is scrolled out of view. + + + Provides constants that map Visual Basic 6.0 color constants to their equivalents. + + + Maps the Visual Basic 6.0 constant vbBlack to . + + + Maps the Visual Basic 6.0 constant vbBlue to . + + + Maps the Visual Basic 6.0 constant vbCyan to . + + + Maps the Visual Basic 6.0 constant vbGreen to . + + + Maps the Visual Basic 6.0 constant vbMagenta to . + + + Maps the Visual Basic 6.0 constant vbRed to . + + + Maps the Visual Basic 6.0 constant vbWhite to . + + + Maps the Visual Basic 6.0 constant vbYellow to . + + + Provides constants that map Visual Basic 6.0 DrawStyle constants to their equivalents. + + + Maps the Visual Basic 6.0 constant vbDash to Dash. + + + Maps the Visual Basic 6.0 constant vbDashDot to DashDot. + + + Maps the Visual Basic 6.0 constant vbDashDotDot to DashDotDot. + + + Maps the Visual Basic 6.0 constant vbDot to Dot. + + + Maps the Visual Basic 6.0 constant vbDash to Solid. + + + Provides constants that map Visual Basic 6.0 FillStyle constants to their equivalents. + + + Maps the Visual Basic 6.0 constant vbCross to Cross. + + + Maps the Visual Basic 6.0 constant vbDiagonalCross to DiagonalCross. + + + Maps the Visual Basic 6.0 constant vbDownwardDiagonal to BackwardDiagonal. + + + Maps the Visual Basic 6.0 constant vbFSSolid to a solid color. + + + Maps the Visual Basic 6.0 constant vbFSTransparent to an absence of patterns. + + + Maps the Visual Basic 6.0 constant vbHorizontalLine to Horizontal. + + + Maps the Visual Basic 6.0 constant vbUpwardDiagonal to ForwardDiagonal. + + + Maps the Visual Basic 6.0 constant vbVerticalLine to Vertical. + + + This class supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This class supports the .NET Framework infrastructure and is not intended to be used directly from your code. + A for use during upgrade. + + + Provides a Printer object for use by upgraded Visual Basic 6.0 printing code. + + + Initializes a new instance of the class. + + + Prints a circle, an ellipse, or an arc on a page, specifying whether the center point is relative to the current location. + Boolean. If this parameter is set to true, the center of the circle, ellipse, or arc is printed relative to the coordinates specified in the and properties of the object. + Single value indicating the vertical coordinate for the center point of the circle, ellipse, or arc. The property determines the units of measurement used. + Single value indicating the radius of the circle or ellipse. The property determines the units of measurement used. + Single value indicating the radius of the circle or ellipse. The property determines the units of measurement used. + Optional. Integer value indicating the RGB (red-green-blue) color of the circle's outline. If this parameter is omitted, the value of is used. + Optional. Single-precision value. When an arc or a partial circle or ellipse is printed, and specify (in radians) the start and end positions of the arc. The range for both is 2 * pi radians to 2 * pi radians. The default value for is 0 radians; the default for is 2 * pi radians. + Optional. Single-precision value. When an arc or a partial circle or ellipse is printed, and specify (in radians) the start and end positions of the arc. The range for both is 2 * pi radians to 2 * pi radians. The default value for is 0 radians; the default for is 2 * pi radians. + Optional. Single-precision value indicating the aspect ratio of the circle or ellipse. The default value is 1.0, which yields a perfect (non-elliptical) circle on any screen. + + + Prints a circle, an ellipse, or an arc on a page. + Single value indicating the horizontal coordinate for the center point of the circle, ellipse, or arc. The property determines the units of measurement used. + Single value indicating the vertical coordinate for the center point of the circle, ellipse, or arc. The property determines the units of measurement used. + Single value indicating the radius of the circle or ellipse. The property determines the units of measurement used. + Optional. Integer value indicating the RGB (red-green-blue) color of the circle's outline. If this parameter is omitted, the value of is used. + Optional. Single-precision value. When an arc or a partial circle or ellipse is printed, and specify (in radians) the start and end positions of the arc. The range for both is 2 * pi radians to 2 * pi radians. The default value for is 0 radians; the default for is 2 * pi radians. + Optional. Single-precision value. When an arc or a partial circle or ellipse is printed, and specify (in radians) the start and end positions of the arc. The range for both is 2 * pi radians to 2 * pi radians. The default value for is 0 radians; the default for is 2 * pi radians. + Optional. Single-precision value indicating the aspect ratio of the circle or ellipse. The default value is 1.0, which yields a perfect (non-elliptical) circle on any screen. + + + Gets or sets a value specifying whether the output will print in color or in monochrome on a device that supports color. + Returns a Short. + + + Gets or sets a value that determines the number of copies to be printed. + A Short representing the number of copies to be printed. + + + Gets or sets the horizontal coordinates for the next printing or drawing method. + Returns a Single. + + + Gets or sets the vertical coordinates for the next printing or drawing method. + Returns a Single. + + + Gets the name of the current printer. + Returns a String. + + + Gets or sets the document name to display (for example, in a print status dialog box or printer queue) while printing the document. + A String to display while printing the document. The default is "document". + + + Gets or sets a value that determines the line style for output from graphics methods. + Returns a Short. + + + Gets or sets the line width for output from graphics methods. + Returns a Short. + + + Gets or sets a value that determines whether a page is printed on both sides (if the printer supports this feature). + Returns a Short. + + + Ends a print operation sent to the object, releasing the document to the print device or spooler. + + + Gets or sets the color that is used to fill in shapes created by using the and graphics methods. + Returns an Integer. + + + Gets or sets the pattern used to fill shapes created by using the and graphics methods. + Returns a Short. The default is 1. + + + Gets or sets a FontFamily by name. + Returns a . + + + Gets or sets the bold font style. + Returns a Boolean. + + + Returns the number of fonts available for the current display device or active printer. + Returns a Short. + + + Gets or sets the italic font style. + Returns a Boolean. + + + Gets or sets the name of the font in which text is displayed for a printing operation. + Returns a String. + + + Gets all font names that are available for the current printer. + Returns a String. + The index of the font within the collection. + + + Gets or sets the size of the font that is used for text in a run-time printing operation. + Returns a Single. + + + Gets or sets the strikethrough font style. + Returns a Boolean. + + + Gets or sets a value that determines whether background graphics on a Printer object are printed behind text characters. + Returns a Boolean. + + + Gets or sets the underlined font style. + Returns a Boolean. + + + Gets or sets the color in which text and graphics are printed. + Returns an Integer. + + + Gets or sets the height of a page. + Returns an Integer. + + + Returns a value that determines whether the currently selected printer is defined as the default printer in Control Panel. + Returns a Boolean. + + + Immediately stops the current print job. + + + Prints lines, squares, or rectangles on a page. + Boolean. If this parameter is set to true, the starting coordinates are relative to the coordinates given by the and properties of the object. + Single value indicating the horizontal coordinate of the starting point for the line being printed. + Single value indicating the vertical coordinate of the starting point for the line being printed. + Boolean. If this parameter is set to true, the ending coordinates are relative to the coordinates given by the and properties of the object. + Single value indicating the horizontal coordinate of the endpoint for the line being printed. + Single value indicating the vertical coordinate of the endpoint for the line being printed. + Optional. Integer value indicating the RGB (red-green-blue) color of the line. If this parameter is omitted, the value of is used. + Optional. Boolean. If this parameter is set to true, a rectangle is printed. The , , , and coordinates specify opposite corners of the rectangle. + Optional. Boolean. If the parameter is used and the parameter is set to true, the rectangle is filled with the same color used to print the rectangle. you cannot use without . If is used without , the current and values are used to fill the rectangle. The default value for is transparent. + + + Prints lines on a page. + Single value indicating the horizontal coordinate of the endpoint for the line being printed. The starting point for the line is determined by the and property values. + Single value indicating the vertical coordinate of the endpoint for the line being printed. The starting point for the line is determined by the and property values. + + + Prints lines, squares, or rectangles on a page. + Single value indicating the horizontal coordinate of the starting point for the line being printed. + Single value indicating the vertical coordinate of the starting point for the line being printed. + Single value indicating the horizontal coordinate of the endpoint for the line being printed. + Single value indicating the vertical coordinate of the endpoint for the line being printed. + Optional. Integer value indicating the RGB (red-green-blue) color of the line. If this parameter is omitted, the value of is used. + Optional. Boolean. If this parameter is set to true, a rectangle is printed. The , , , and coordinates specify opposite corners of the rectangle. + Optional. Boolean. If the parameter is used and the parameter is set to true, the rectangle is filled with the same color used to print the rectangle. You cannot use without . If is used without , the current and values are used to fill the rectangle. The default value for is transparent. + + + Stops the printing on the current page and resumes printing on a new page. + + + Gets or sets a value indicating whether documents are printed in portrait or landscape mode. + Returns a Short. + + + Returns the page number of the page that is currently being printed. + Returns a Short. + + + Prints the contents of an image file on a page. + + value representing the image to be printed. + Single value indicating the horizontal destination coordinates where the image will be printed. The property determines the units of measure used. + Single value indicating the vertical destination coordinates where the image will be printed. The property determines the units of measure used. + Optional. Single value indicating the destination width of the picture. The property of object determines the units of measurement used. If the destination width is larger or smaller than the source width, picture is stretched or compressed to fit. If omitted, the source width is used. + Optional. Single value indicating the destination height of the picture. The property of object determines the units of measurement used. If the destination height is larger or smaller than the source height, picture is stretched or compressed to fit. If omitted, the source height is used. + Optional. Single values indicating the coordinates (x-axis) of a clipping region within picture. The property of object determines the units of measurement used. If omitted, 0 is assumed. + Optional. Single values indicating the coordinates (y-axis) of a clipping region within picture. The property of object determines the units of measurement used. If omitted, 0 is assumed. + Optional. Single value indicating the source width of a clipping region within picture. The property of object determines the units of measurement used. If omitted, the entire source width is used. + Optional. Single value indicating the source height of a clipping region within picture. The property of object determines the units of measurement used. If omitted, the entire source height is used. + + + Gets or sets a value indicating the default paper bin on the printer from which paper is fed during print operations. + Returns a Short. + + + Gets or sets a value indicating the paper size for the current printer. + Returns a Short. + + + Prints text to a page. + A parameter array containing optional printing parameters. + + + Gets or sets a value that determines whether the print output is directed to a printer, to a print preview window, or to a file. + Returns a enumeration. + + + Gets or sets a value that specifies the file name of an Encapsulated PostScript file and the path to which the file will be saved when the property is set to PrintToFile. + Returns a String that contains a file path and name. + + + Gets or sets a value that indicates the printer resolution. + Returns a Short. + + + Prints a single point in a specified color on a page, optionally specifying a point relative to the current coordinates. + Boolean value indicating whether the coordinates are relative to the current graphics position (as set by , ). + Single value indicating the horizontal coordinates of the point to print. + Single value indicating the vertical coordinates of the point to print. + Optional. Integer value indicating the RGB (red-green-blue) color specified for the point. If this parameter is omitted, the current property setting is used. + + + Prints a single point on a page. + Single value indicating the horizontal coordinates of the point to print. + Single value indicating the vertical coordinates of the point to print. + + + Prints a single point in a specified color on a page. + Single value indicating the horizontal coordinates of the point to print. + Single value indicating the vertical coordinates of the point to print. + Optional. Integer value indicating the RGB (red-green-blue) color specified for the point. If this parameter is omitted, the current property setting is used. + + + Gets or sets a Boolean value that indicates the text display direction on a right-to-left system. + Returns a Boolean. + + + Defines the coordinate system of the object. + + + Defines the coordinate system of the object. + Single value indicating the horizontal coordinates that defines the upper-left corner of the object. Parentheses must enclose the values. + Single value indicating the vertical coordinates that defines the upper-left corner of the object. Parentheses must enclose the values. + Single value indicating the horizontal coordinates that defines the lower-right corner of the object. Parentheses must enclose the values. + Single value indicating the vertical coordinates that defines the lower-right corner of the object. Parentheses must enclose the values. + + + Gets or sets the number of units for the vertical measurement of the page when you use graphics methods. + Returns a Single. + + + Gets or sets the horizontal coordinates for the left edge of the page when you are using graphics methods. + Returns a Single. + + + Gets or sets a value indicating the unit of measurement for the coordinates of an object when you are using graphics methods. + Returns a Short. + + + Gets or sets the vertical coordinates for the top edge of the page when you are using graphics methods. + Returns a Single. + + + Gets or sets the number of units for the horizontal measurement of the page when you use graphics methods. + Returns a Single. + + + Converts the value for the width of a page from one of the units of measure of the property to another. + Returns a Single. + Specify the number of units of measure to be converted. + Optional. A constant or value specifying the coordinate system from which the width of the object is to be converted. The possible values of are the same as those for the property. + Optional. A constant or value specifying the coordinate system to which the width of the object is to be converted. The possible values of are the same as those for the property. + + + Converts the value for the height of a page from one of the units of measure of the property to another. + Returns a Single. + Specify the number of units of measure to be converted. + Optional. A constant or value specifying the coordinate system from which the height of the object is to be converted. The possible values of are the same as those for the property. + Optional. A constant or value specifying the coordinate system to which the height of the object is to be converted. The possible values of are the same as those for the property. + + + Returns the height of a text string as it would be printed in the current font. + Returns a Single. + The String to be measured. + + + Returns the width of a text string as it would be printed in the current font. + Returns a Single + The String to be measured. + + + Gets a value indicating the number of twips per pixel for an object measured horizontally. + Returns a Single. + + + Gets a value indicating the number of twips per pixel for an object measured vertically. + Returns a Single. + + + Gets or sets the width of a page. + Returns an Integer. + + + Prints text to a page without adding a carriage return. + A parameter array containing optional printing parameters. + + + Provides a collection of printers for use by upgraded Visual Basic 6.0 printing code. + + + Initializes a object. + + + Returns the number of printers in the collection. + An Integer representing the number of printers in the collection. + + + + Returns a specific member of the collection by index number. + A object. + An Integer representing the index of the printer. + + + Provides constants that map Visual Basic 6.0 Printer constants to their equivalents. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Maps the Visual Basic 6.0 Printer constant to its equivalent. + + + Provides constants that map Visual Basic 6.0 ScaleMode constants to their .NET Framework equivalents. + + + Provides an equivalent for the Visual Basic 6.0 ScaleMode constant of the same name. + + + Provides an equivalent for the Visual Basic 6.0 ScaleMode constant of the same name. + + + Provides an equivalent for the Visual Basic 6.0 ScaleMode constant of the same name. + + + Provides an equivalent for the Visual Basic 6.0 ScaleMode constant of the same name. + + + Provides an equivalent for the Visual Basic 6.0 ScaleMode constant of the same name. + + + Provides an equivalent for the Visual Basic 6.0 ScaleMode constant of the same name. + + + Provides an equivalent for the Visual Basic 6.0 ScaleMode constant of the same name. + + + Provides an equivalent for the Visual Basic 6.0 ScaleMode constant of the same name. + + + Provides an equivalent for the Visual Basic 6.0 ScaleMode constant of the same name. + + + Provides constants that map Visual Basic 6.0 color constants to their equivalents. + + + Maps the Visual Basic 6.0 SystemColor constant to its equivalent. + + + Maps the Visual Basic 6.0 SystemColor constant to its equivalent. + + + Maps the Visual Basic 6.0 SystemColor constant to its equivalent. + + + Maps the Visual Basic 6.0 SystemColor constant to its equivalent. + + + Maps the Visual Basic 6.0 SystemColor constant to its equivalent. + + + Maps the Visual Basic 6.0 SystemColor constant to its equivalent. + + + Maps the Visual Basic 6.0 SystemColor constant to its equivalent. + + + Maps the Visual Basic 6.0 SystemColor constant to its equivalent. + + + Maps the Visual Basic 6.0 SystemColor constant to its equivalent. + + + Maps the Visual Basic 6.0 SystemColor constant to its equivalent. + + + Maps the Visual Basic 6.0 SystemColor constant to its equivalent. + + + Maps the Visual Basic 6.0 SystemColor constant to its equivalent. + + + Maps the Visual Basic 6.0 SystemColor constant to its equivalent. + + + Maps the Visual Basic 6.0 SystemColor constant to its equivalent. + + + Maps the Visual Basic 6.0 SystemColor constant to its equivalent. + + + Maps the Visual Basic 6.0 SystemColor constant to its equivalent. + + + Maps the Visual Basic 6.0 SystemColor constant to its equivalent. + + + Maps the Visual Basic 6.0 SystemColor constant to its equivalent. + + + Maps the Visual Basic 6.0 SystemColor constant to its equivalent. + + + Maps the Visual Basic 6.0 SystemColor constant to its equivalent. + + + Maps the Visual Basic 6.0 SystemColor constant to its equivalent. + + + Maps the Visual Basic 6.0 SystemColor constant to its equivalent. + + + Maps the Visual Basic 6.0 SystemColor constant to its equivalent. + + + Maps the Visual Basic 6.0 SystemColor constant to its equivalent. + + + Maps the Visual Basic 6.0 SystemColor constant to its equivalent. + + + Maps the Visual Basic 6.0 SystemColor constant to its equivalent. + + + Maps the Visual Basic 6.0 SystemColor constant to its equivalent. + + + Maps the Visual Basic 6.0 SystemColor constant to its equivalent. + + + Maps the Visual Basic 6.0 SystemColor constant to its equivalent. + + + \ No newline at end of file diff --git a/Components/SlimDX.dll b/Components/SlimDX.dll new file mode 100644 index 0000000..e2304d4 Binary files /dev/null and b/Components/SlimDX.dll differ diff --git a/Components/SlimDX.xml b/Components/SlimDX.xml new file mode 100644 index 0000000..ff90b2d --- /dev/null +++ b/Components/SlimDX.xml @@ -0,0 +1,57639 @@ + + + + "SlimDX" + + + + Encapsulates all of the textures and resources needed to render a font through a Direct3D 10 device. + ID3DX10Font + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Number of annotations on this technique. + + + + +Number of passes contained in the technique. + + + + +Name of this technique. + + + + +Provides a description for effect techniques. + + D3DX11_TECHNIQUE_DESC + + + Used to generalize the process of rendering to environment maps. + ID3DXRenderToEnvMap + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Gets the surface's multisampling properties. + + + + +Gets the format of the surface. + + + + +Gets the height of the surface. + + + + +Gets the width of the surface. + + + + +Describes properties of a surface. + + DXGI_SURFACE_DESC + + + +Enables or disables data reporting in XInput. + + + true to enable XInput, false to disable it. + + + +Sets vibration information for the controller. + + Vibration settings for the controller. + A object describing the result of the operation. + + + +Gets keystroke information from the device. + + The type of the device to query. + Keystroke information from the device. + A object describing the result of the operation. + + + +Gets the state of the controller. + + A structure describing the state of the controller. + + + +Retrieves the capabilities of the controller. + + The type of the device whose capabilities are being retrieved. + A structure describing the capabilities of the controller. + + + +Retrieves battery information for the controller. + + The type of battery whose information is being retrieved. + A structure describing the battery in the controller. + + + +Initializes a new instance of the class. + + The index of the player whose controller is being represented. + + + +Gets the identifier for the sound capture device in the controller. + + + + +Gets the identifier for the sound renderer in the controller. + + + + +Gets a value indicating whether or not the controller is connected. + + + + +Represents an XInput controller. + + + + +Release all references to device objects. + + A result code. + + + +Captures the relevant state to the state block. + + A result code. + + + +Applies the relevant state from the state block. + + A result code. + + + +Constructs a new StateBlock object. + + The device to associate the state block with. + The mask describing which state properties are relevant to the state block. + + + +Gets the device the object is bound to. + + + + +Reports information about live device objects. + + Options for specifying the amount of detail in the output. + A object describing the result of the operation. + + + +Validates the device context for dispatching operations. + + The device context to validate. + A object describing the result of the operation. + + + +Validates the current pipeline state of a device context. + + The device context to validate. + A object describing the result of the operation. + + + +Initializes a new instance of the class. + + The device with which the debug interface is to be associated. + + + +Gets or sets the swap chain the runtime will use for automatic presentation. + + + + +Gets or sets the number of milliseconds to delay after a swap chain is presented. + + + + +Gets or sets the flags indicating which debug features are enabled. + + + + +An interface for controlling debug state and validating pipeline settings. + + ID3D11Debug + + + +Use this method to re-acquire resources and save initial state. + + ID3DXFont::OnResetDevice + + + +Use this method to release all references to video memory resources and delete all stateblocks. +This method should be called whenever a device is lost, or before resetting a device. + + ID3DXFont::OnLostDevice + + + Loads formatted text into video memory to improve the efficiency of rendering to the device. + ID3DXFont::PreloadText + + + Loads a series of glyphs into video memory to improve the efficiency of rendering to the device. + ID3DXFont::PreloadText + + + Loads a series of characters into video memory to improve the efficiency of rendering to the device. + ID3DXFont::PreloadText + + + Computes the bounding rectangle for a given string to be rendered using this font. + ID3DXFont::DrawText + + + Computes the bounding rectangle for a given string to be rendered using this font. + ID3DXFont::DrawText + + + Draws formatted text, optionally using a object for improved performance. + ID3DXFont::DrawText + + + Draws formatted text, optionally using a object for improved performance. + ID3DXFont::DrawText + + + Draws formatted text, optionally using a object for improved performance. + ID3DXFont::DrawText + + + Draws formatted text, optionally using a object for improved performance. + ID3DXFont::DrawText + + + Encapsulates the textures and resources needed to render a specific font on a specific device. + ID3DXFont + + + Implements line drawing using textured triangles. + ID3DXLine + + + +Returns a value indicating whether the two BufferDescriptions are equivalent. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Returns a value indicating whether this instance is equal to the specified object. + + A to compare with this instance. + + true if has the same value as this instance; otherwise, false. + + + +Returns a value indicating whether this instance is equal to the specified object. + + An object to compare with this instance. + + true if has the same value as this instance; otherwise, false. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two BufferDescriptions. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two BufferDescriptions. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Constructs a new BufferDescription object. + + The size, in bytes, of the buffer. + Identifies the usage pattern for the buffer. + Specifies how the buffer will be bound to the pipeline. + Specifies how the buffer will be accessible from the CPU. + Specifies miscellaneous resource options. + + + +Gets or sets the flags specifying miscellaneous resource options. + + + + +Gets or sets the flags specifying how the CPU will be allowed to access the buffer. + + + + +Gets or sets the flags specifying how the buffer is bound to the pipeline. + + + + +Gets or sets the intended usage pattern of the buffer. + + + + +Gets or sets the size, in bytes, of the buffer. + + + + +Describes a buffer resource. + + D3D10_BUFFER_DESC + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Loads information about the given image file in memory. + + An array of memory containing the image file. + An instance containing information about the image file, or null if the file cannot be loaded. + + + +Loads information about the given image file. + + Name of the image file. + An instance containing information about the image file, or null if the file cannot be loaded. + + + +The format of the image file. + + + + +The type of the texture stored in the file. + + + + +The original format of the image. + + + + +Flags that identifies other, less common resource options. + + + + +Number of mipmap levels in the original image. + + + + +Size of the image, in bytes. + + + + +Depth of the original image, in pixels. + + + + +Height of the original image, in pixels. + + + + +Width of the original image, in pixels. + + + + +Contains the description of the contents of an image file. + + D3DX11_IMAGE_INFO + + + +Represents a generic failure result. + + This is a failed result. + E_FAIL + + + +Represents the result of a successful operation. + + This is a successful result. + S_OK + + + + This is a failed result. + DXGI_ERROR_NOT_CURRENTLY_AVAILABLE + + + + This is a failed result. + DXGI_ERROR_NONEXCLUSIVE + + + + This is a failed result. + DXGI_ERROR_DRIVER_INTERNAL_ERROR + + + + This is a failed result. + DXGI_ERROR_WAS_STILL_DRAWING + + + + This is a failed result. + DXGI_ERROR_DEVICE_RESET + + + + This is a failed result. + DXGI_ERROR_DEVICE_HUNG + + + + This is a failed result. + DXGI_ERROR_DEVICE_REMOVED + + + + This is a failed result. + DXGI_ERROR_UNSUPPORTED + + + + This is a failed result. + DXGI_ERROR_MORE_DATA + + + + This is a failed result. + DXGI_ERROR_NOT_FOUND + + + + This is a failed result. + DXGI_ERROR_INVALID_CALL + + + + This is a successful result. + DXGI_STATUS_MODE_CHANGE_IN_PROGRESS + + + + This is a successful result. + DXGI_STATUS_MODE_CHANGED + + + + This is a successful result. + DXGI_STATUS_GRAPHICS_VIDPN_SOURCE_IN_USE + + + + This is a successful result. + DXGI_STATUS_NO_DESKTOP_ACCESS + + + + This is a successful result. + DXGI_STATUS_NO_REDIRECTION + + + + This is a successful result. + DXGI_STATUS_CLIPPED + + + +Returned when the window content is not visible. + + This is a successful result. + DXGI_STATUS_OCCLUDED + + + Defines result codes that are returned by DXGI functions. + HRESULT + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Gets or sets he noise suppression parameters of a buffer. + + + + +Sets the enumerator to its initial position, which is before the first element in the collection. + + + + +The NoiseSuppress object is used to set and retrieve parameters on a capture buffer that supports noise suppression. This object requires Microsoft Windows XP or later. + + IDirectSoundCaptureFXNoiseSuppress + + + +Gets properties about a single object on an input device. + + The name of the object whose properties are to be retrieved. + The properties of the desired object. + + + +Retrieves buffered data from the device. + + A collection of buffered input events. + + + +Retrieves the current device state. + + A object describing the result of the operation. + + + +Retrieves the current device state. + + The current device state. + + + +Constructs a new DepthStencilState based on the specified description. If the description +is identical to that of an existing DepthStencilState object, the existing DepthStencilState object +is returned instead of a new instance. + + The device to associate the state object with + The state description. + The DepthStencilState object. + + + +Gets the state's description. + + + + +A state object defining the behavior of the depth and stencil test stages of the output merger. + + ID3D10DepthStencilState + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Converts the value of the object to its equivalent string representation. + + The string representation of the value of this instance. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + The scaled vector. + + + +Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + The scaled vector. + + + +Adds two vectors. + + The first vector to add. + The second vector to add. + The sum of the two vectors. + + + +Describes instance data for a single sprite rendered by the + interface. + + D3DX10_SPRITE + + + +Represents a generic failure result. + + This is a failed result. + E_FAIL + + + +Represents the result of a successful operation. + + This is a successful result. + S_OK + + + +An audio device became unusable (possibly due to being unplugged, or some other event). + + This is a failed result. + XAUDIO2_E_DEVICE_INVALIDATED + + + +An effect failed to instantiate. + + This is a failed result. + XAUDIO2_E_XAPO_CREATION_FAILED + + + +The decoder suffered an unrecoverable error. + + This is a failed result. + XAUDIO2_E_XMA_DECODER_ERROR + + + +Returned by XAudio2 for certain API usage errors (invalid calls etc) that +are hard to avoid completely and should be handled by a title at runtime. +(API usage errors that are completely avoidable, such as invalid parameters, +cause an ASSERT in debug builds and undefined behavior in retail builds, +so no error code is defined for them.) + + This is a failed result. + XAUDIO2_E_INVALID_CALL + + + Defines result codes that are returned by XAudio 2 functions. + HRESULT + + + +Gets a value indicating whether the shader is a sample frequency shader. + + + + +Gets the number of interface slots. + + + + +Gets the number of conditional move instructions. + + + + +Gets the number of move instructions. + + + + +Gets the number of conversion instructions. + + + + +Gets the number of bitwise instructions. + + + + +Gets the shader's description. + + + + +Gets the input primitive used by the geometry shader. + + + + +Gets the minimum feature level required to use the shader. + + + + +Gets a description of the resources bound to a shader. + + The name of the bound resource. + A description of the resource bound with the given name. + + + +Gets a description of the resources bound to a shader. + + Zero-based index of the bound resource. + A description of the resource bound at the given index. + + + +Gets the description of a patch-constant parameter. + + The zero-based index of the patch-constant parameter whose description is to be retrieved. + The description of the patch-constant parameter at the given index. + + + +Gets the description of an output parameter. + + The zero-based index of the output parameter whose description is to be retrieved. + The description of the output parameter at the given index. + + + +Gets the description of an input parameter. + + The zero-based index of the input parameter whose description is to be retrieved. + The description of the input parameter at the given index. + + + +Gets a constant buffer by name. + + The name of the constant buffer to retrieve. + The constant buffer with the given name. + + + +Gets a constant buffer by index. + + The zero-based index of the constant buffer to retrieve. + The constant buffer at the given index. + + + +Initializes a new instance of the class. + + The compiled shader or effect to reflect upon. + + + +Defines an interface for reflecting on shader information and metadata. + + ID3D11ShaderReflection + + + +Represents the result of a successful operation. + + This is a successful result. + S_OK + + + +The given interface is already registered. + + This is a failed result. + DWRITE_E_ALREADYREGISTERED + + + +A font collection is obsolete due to changes in the system. + + This is a failed result. + DWRITE_E_FONTCOLLECTIONOBSOLETE + + + +A font file exists but could not be opened due to access denied, sharing violation, or similar error. + + This is a failed result. + DWRITE_E_FILEACCESS + + + +A font file could not be opened because the file, directory, network location, drive, or other storage +location does not exist or is unavailable. + + This is a failed result. + DWRITE_E_FILENOTFOUND + + + +Represents a generic failure result. + + This is a failed result. + E_FAIL + + + +Indicates the specified font does not exist. + + This is a failed result. + DWRITE_E_NOFONT + + + +Indicates an error originating in DirectWrite code, which is not expected to occur but is safe to recover from. + + This is a failed result. + DWRITE_E_UNEXPECTED + + + +Indicates an error in an input file such as a font file. + + This is a failed result. + DWRITE_E_FILEFORMAT + + + Defines result codes that are returned by DirectWrite functions. + HRESULT + + + Used to generalize the process of rendering to surfaces. + ID3DXRenderToSurface + + + +The supplied vector is vero. + + This is a failed result. + D2DERR_ZERO_VECTOR + + + +The object was not in the correct state to process the method. + + This is a failed result. + D2DERR_WRONG_STATE + + + +The resource was realized on the wrong render target. + + This is a failed result. + D2DERR_WRONG_RESOURCE_DOMAIN + + + +Objects used together must be created from the same factory instance. + + This is a failed result. + D2DERR_WRONG_FACTORY + + + +An unknown Win32 failure occurred. + + This is a failed result. + D2DERR_WIN32_ERROR + + + +The requested D2D version is not supported. + + This is a failed result. + D2DERR_UNSUPPORTED_VERSION + + + +The requested opertion is not supported. + + This is a failed result. + D2DERR_UNSUPPORTED_OPERATION + + + +Shader construction failed because it was too complex. + + This is a failed result. + D2DERR_TOO_MANY_SHADER_ELEMENTS + + + +The application is holding a reference to the IDWriteTextRenderer interface +after the corresponding DrawText or DrawTextLayout call has returned. +The TextRenderer instance will be zombied. + + This is a failed result. + D2DERR_TEXT_RENDERER_NOT_RELEASED + + + +A text client drawing effect object is of the wrong type. + + This is a failed result. + D2DERR_TEXT_EFFECT_IS_WRONG_TYPE + + + +The render target is not compatible with GDI. + + This is a failed result. + D2DERR_TARGET_NOT_GDI_COMPATIBLE + + + +Represents the result of a successful operation. + + This is a successful result. + E_FAIL + + + +Shader compilation failed. + + This is a failed result. + D2DERR_SHADER_COMPILE_FAILED + + + +D2D could not access the screen. + + This is a failed result. + D2DERR_SCREEN_ACCESS_DENIED + + + +The geometry scanner failed to process the data. + + This is a failed result. + D2DERR_SCANNER_FAILED + + + +Attempted to copy from a render target while a layer or clip rect is applied. + + This is a failed result. + D2DERR_RENDER_TARGET_HAS_LAYER_OR_CLIPRECT + + + +There has been a presentation error that may be recoverable. The caller +needs to recreate, rerender the entire frame, and reattempt present. + + This is a failed result. + D2DERR_RECREATE_TARGET + + + +The push and pop calls were unbalanced. + + This is a failed result. + D2DERR_PUSH_POP_UNBALANCED + + + +The pop call did not match the corresponding push call. + + This is a failed result. + D2DERR_POP_CALL_DID_NOT_MATCH_PUSH + + + +No HW rendering device is available for this operation. + + This is a failed result. + D2DERR_NO_HARDWARE_DEVICE + + + +Requested DX surface size exceeded maximum texture size. + + This is a failed result. + D2DERR_MAX_TEXTURE_SIZE_EXCEEDED + + + +A layer resource was used more than once. + + This is a failed result. + D2DERR_LAYER_ALREADY_IN_USE + + + +A call to this method is invalid. + + This is a failed result. + D2DERR_INVALID_CALL + + + +An internal error (D2D bug) occurred. On checked builds, we would assert. +The application should close this instance of D2D and should consider restarting its process. + + This is a failed result. + D2DERR_INTERNAL_ERROR + + + +The object has not yet been initialized. + + This is a failed result. + D2DERR_NOT_INITIALIZED + + + +The supplied buffer was too small to accomodate the data. + + This is a failed result. + D2DERR_INSUFFICIENT_BUFFER + + + +The brush types are incompatible for the call. + + This is a failed result. + D2DERR_INCOMPATIBLE_BRUSH_TYPES + + + +Represents a generic failure result. + + This is a failed result. + E_FAIL + + + +A valid display state could not be determined. + + This is a failed result. + D2DERR_DISPLAY_STATE_INVALID + + + +The display format needed to render is not supported by the hardware device. + + This is a failed result. + D2DERR_DISPLAY_FORMAT_NOT_SUPPORTED + + + +Invalid number. + + This is a failed result. + D2DERR_BAD_NUMBER + + + Defines result codes that are returned by Direct2D functions. + HRESULT + + + +Japanese J3100 keyboard. + + + + +Japanese AX keyboard. + + + + +Japanese 106-key keyboard. + + + + +Japanese NEC PC98 106-key keyboard. + + + + +Japanese NEC PC98 laptop keyboard. + + + + +Japanse NEC PC98 keyboard. + + + + +Nokia 9140 keyboard. + + + + +Nokia 1050 keyboard. + + + + +IBM PC Enhanced 101/102-key keyboard or Microsoft Natural keyboard. + + + + +IBM PC/AT 84-key keyboard. + + + + +Olivetti 102-key keyboard. + + + + +IBM PC/XT 83-key keyboard. + + + + +Standard game pad that provides the minimum number of objects for +action mapping. + + + + +A yoke for flight simulators. + + + + +A joystick for flight simulators. + + + + +Flight device based upon a remote control for model aircraft. + + + + +Steering device that reports acceleration, break, and clutch pedal values from +separate axes. + + + + +Hand-held steering device. + + + + +Steering device that reports accelerations and break pedal values from separate axes. + + + + +Steering device that reports accelerations and break pedal values from a single axis. + + + + +Unknown subtype for a control device. + + + + +Device that must use its default configuration and cannot be remapped. + + + + +Control used to make communications selections. + + + + +Device with six degrees of freedom; that is, three lateral axes and three rotation axes. + + + + +Device designed for first-person person shooter games. + + + + +Unknown subtype for a first-person device. + + + + +A device that does not provide the minimum number of device objects for +action mapping. + + + + +Specifies the sub type of a DirectInput device. + + + + +Analyzes a text range for script directionality, reading attributes +from the source and reporting levels to the sink callback SetBidiLevel. + + Source object to analyze. + Starting position within the source object. + Length to analyze. + Callback object. + 7 +Standard Result error code. + + +While the function can handle multiple paragraphs, the text range +should not arbitrarily split the middle of paragraphs. Otherwise the +returned levels may be wrong, since the Bidi algorithm is meant to +apply to the paragraph as a whole. + + +Embedded control codes (LRE/LRO/RLE/RLO/PDF) are taken into account. + + + + +Analyzes a text range for script boundaries, reading text attributes +from the source and reporting the Unicode script ID to the sink +callback SetScript. + + Source object to analyze. + Starting position within the source object. + Length to analyze. + Callback object. + +Standard Result error code. + + + + +Analyzes various text properties for complex script processing. + + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Determines whether to enable line antialiasing; only applies if doing line drawing and IsMultisampleEnabled is false. + + + + +Determines whether to enable multisample antialiasing. + + + + +Determines whether to enable scissor-rectangle culling. All pixels ouside an active scissor rectangle are culled. + + + + +Determines whether to enable clipping based on distance. + + + + +Scalar on a given pixel's slope. + + + + +Maximum depth bias of a pixel. + + + + +Depth value added to a given pixel. + + + + +Determines if a triangle is front- or back-facing. If this parameter is true, then a triangle will be considered front-facing if its vertices are counter-clockwise on the render target and considered back-facing if they are clockwise. If this parameter is false then the opposite is true. + + + + +Gets or sets which triangles are to be culled. + + + + +Gets or sets the fill mode to use when rendering. + + + + +Provides a description for rasterizer state objects. + + D3D11_RASTERIZER_DESC + + + Adds a sprite to the list of batched sprites. + The color and alpha channels of the texture are modulated by this color. + ID3DXSprite::Draw + + + Adds a sprite to the list of batched sprites. + Specifies the center position of the sprite. + Specifies the position at which to render the sprite. + The color and alpha channels of the texture are modulated by this color. + ID3DXSprite::Draw + + + Adds a sprite to the list of batched sprites. + A rectangle that specifies the portion of the source texture to use. + The color and alpha channels of the texture are modulated by this color. + ID3DXSprite::Draw + + + Adds a sprite to the list of batched sprites. + A rectangle that specifies the portion of the source texture to use. If null is passed, the entire source image will be used. + Specifies the center position of the sprite. + Specifies the position at which to render the sprite. + The color and alpha channels of the texture are modulated by this color. + ID3DXSprite::Draw + + + +Sets the right-handed world-view transform for a sprite. +A call to this method is required before billboarding or sorting sprites. + + ID3DXSprite::SetWorldViewRH + + + +Sets the left-handed world-view transform for a sprite. +A call to this method is required before billboarding or sorting sprites. + + ID3DXSprite::SetWorldViewLH + + + +Use this method to re-acquire resources and save initial state. + + ID3DXFont::OnResetDevice + + + +Use this method to release all references to video memory resources and delete all stateblocks. +This method should be called whenever a device is lost, or before resetting a device. + + ID3DXFont::OnLostDevice + + + +Forces all batched sprites to be submitted to the device. +Device states remain as they were after the last call to . +The list of batched sprites is then cleared. + + ID3DXSprite::Flush + + + Calls and restores the device state to how it was before was called. + ID3DXSprite::End + + + Prepares the object and device for drawing sprites. + ID3DXSprite::Begin + + + Initializes a new instance of a sprite object. + The device to use when creating the new sprite object. + D3DXCreateSprite + + + Provides a set of methods that simplify the process of drawing sprites. + ID3DXSprite + + + +Minimum ratio of wet (processed) signal to dry (unprocessed) signal. + + + + +Maximum ratio of wet (processed) signal to dry (unprocessed) signal. + + + + +Default ratio of wet (processed) signal to dry (unprocessed) signal. + + + + +Sine waveform shape of the LFO. By default, the waveform is a sine. + + + + +Triangular waveform shape of the LFO. By default, the waveform is a sine. + + + + +Default waveform shape of the LFO. By default, the waveform is a sine. + + + + +Positive 90 phase differential between left and right LFOs. + + + + +Positive 180 phase differential between left and right LFOs. + + + + +Zero phase differential between left and right LFOs. + + + + +Negative 90 phase differential between left and right LFOs. + + + + +Negative 180 phase differential between left and right LFOs. + + + + +Minimum phase differential between left and right LFOs. + + + + +Maximum phase differential between left and right LFOs. + + + + +Default phase differential between left and right LFOs. + + + + +Minimum frequency of the LFO(low-frequency oscillator). + + + + +Maximum frequency of the LFO(low-frequency oscillator). + + + + +Default frequency of the LFO(low-frequency oscillator). + + + + +Minimum percentage of output signal to feed back into the effect's input. + + + + +Maximum percentage of output signal to feed back into the effect's input. + + + + +Default percentage of output signal to feed back into the effect's input. + + + + +Minimum percentage by which the delay time is modulated by the low-frequency oscillator (LFO), in hundredths of a percentage point. + + + + +Maximum percentage by which the delay time is modulated by the low-frequency oscillator (LFO), in hundredths of a percentage point. + + + + +Default percentage by which the delay time is modulated by the low-frequency oscillator (LFO), in hundredths of a percentage point. + + + + +Minimum number of milliseconds the input is delayed before it is played back. + + + + +Maximum number of milliseconds the input is delayed before it is played back. + + + + +Default number of milliseconds the input is delayed before it is played back. + + + + +Ratio of wet (processed) signal to dry (unprocessed) signal. The default value is 50. + + + + +Waveform shape of the LFO. By default, the waveform is a sine. + + + + +Phase differential between left and right LFOs. + + + + +Frequency of the LFO. The default value is 0.25. + + + + +Percentage of output signal to feed back into the effect's input. The default value is -50. + + + + +Percentage by which the delay time is modulated by the low-frequency oscillator (LFO), in hundredths of a percentage point. The default value is 100. + + + + +Number of milliseconds the input is delayed before it is played back. The default value is 2 ms. + + + + +The SoundEffectFlanger object is used to set and retrieve effect parameters on a buffer that supports flange. + + IDirectSoundFXFlanger + + + +Provides scan codes for the specified Point-Of-View controller. + + + + +Provides scan codes for the specified slider. + + + + +Provides scan codes for the specified button. + + + + +The rotational X axis. + + + + +The rotational X axis. + + + + +The rotational X axis. + + + + +The rotational X axis. + + + + +The rotational X axis. + + + + +The rotational X axis. + + + + +Defines possible joystick object codes. + + + + +Refers to any button. + + + + +Refers to any point-of-view controller. + + + + +Refers to any point-of-view controller. + + + + +Refers to any point-of-view controller. + + + + +Refers to any point-of-view controller. + + + + +Refers to any z-axis. + + + + +Refers to any z-axis. + + + + +Refers to any y-axis. + + + + +Refers to any y-axis. + + + + +Refers to any x-axis. + + + + +Refers to any x-axis. + + + + +Refers to any v-axis. + + + + +Refers to any v-axis. + + + + +Refers to any u-axis. + + + + +Refers to any u-axis. + + + + +Refers to any s-axis. + + + + +Refers to any s-axis. + + + + +Refers to any r-axis. + + + + +Refers to any r-axis. + + + + +Refers to any clutch. + + + + +Refers to any clutch. + + + + +Refers to any brake. + + + + +Refers to any brake. + + + + +Refers to any accelerator. + + + + +Refers to any accelerator. + + + + +Refers to any axis. + + + + +Refers to any axis. + + + + +Refers to any axis. + + + + +Defines object codes that refer to any control type on a device. + + + + +Returns a value indicating whether the two BufferDescriptions are equivalent. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Returns a value indicating whether this instance is equal to the specified object. + + A to compare with this instance. + + true if has the same value as this instance; otherwise, false. + + + +Returns a value indicating whether this instance is equal to the specified object. + + An object to compare with this instance. + + true if has the same value as this instance; otherwise, false. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two TimestampQueryDatas. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two TimestampQueryDatas. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +If this is true, something occurred in between the query's Begin and End calls that caused the +timestamp counter to become discontinuous or disjoint, such as unplugging the AC chord on a laptop, overheating, or throttling up/down due to laptop savings events. +The timestamp returned by GetData for a timestamp query is only reliable if IsDisjointed is false. + + + + +How frequently the GPU counter increments in Hz. + + + + +Contains query information about the reliability of a timestamp query. + + D3D11_QUERY_DATA_TIMESTAMP_DISJOINT + + + +Gets properties about a single object on an input device. + + The name of the object whose properties are to be retrieved. + The properties of the desired object. + + + +Retrieves buffered data from the device. + + A collection of buffered input events. + + + +Retrieves the current device state. + + A object describing the result of the operation. + + + +Retrieves the current device state. + + The current device state. + + + +Gets the state of the mouse buttons. + + + + +Gets the Z axis of the mouse. + + + + +Gets the Y axis of the mouse. + + + + +Gets the X axis of the mouse. + + + + +Describes the state of a mouse device. + + DIMOUSESTATE2 + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Gets the relative charge level of the battery. + + + + +Gets the type of the battery. + + + + +Contains information about the battery of an XInput device. + + XINPUT_BATTERY_INFORMATION + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Number of entries in the patch constant signature. + + + + +Number of entries in the output signature. + + + + +Number of entries in the input signature. + + + + +Indicates which stream is rasterized. D3D11 geometry shaders can output up to four streams of data, one of which can be rasterized. + + + + +Stream out declarations. + + + + +The compiled shader bytecode. + + + + +Indicates whether the shader is defined inline. + + + + +The shader input signature. Only valid on a vertex shader or geometry shader. + + + + +Provides a description for an effect shader variable. + + + + + +Minimum percentage of output fed back into input. + + + + +Maximum percentage of output fed back into input. + + + + +Default percentage of output fed back into input. + + + + +Minimum value that specifies whether to swap left and right delays with each successive echo. The default value is zero, meaning no swap. + + + + +Maximum value that specifies whether to swap left and right delays with each successive echo. The default value is zero, meaning no swap. + + + + +Default value that specifies whether to swap left and right delays with each successive echo. The default value is zero, meaning no swap. + + + + +Minimum delay for right channel, in milliseconds. + + + + +Maximum delay for right channel, in milliseconds. + + + + +Default delay for right channel, in milliseconds. + + + + +Minimum delay for left channel, in milliseconds. + + + + +Maximum delay for left channel, in milliseconds. + + + + +Default delay for left channel, in milliseconds. + + + + +Minimum ratio of wet (processed) signal to dry (unprocessed) signal. + + + + +Maximum ratio of wet (processed) signal to dry (unprocessed) signal. + + + + +Default ratio of wet (processed) signal to dry (unprocessed) signal. + + + + +Ratio of wet (processed) signal to dry (unprocessed) signal. + + + + +Percentage of output fed back into input. The default value is 50. + + + + +Value that specifies whether to swap left and right delays with each successive echo. The default value is zero, meaning no swap. + + + + +Delay for left channel, in milliseconds. The default value is 500 ms. + + + + +Delay for right channel, in milliseconds. The default value is 500 ms. + + + + +The SoundEffectEcho object is used to set and retrieve effect parameters on a buffer that supports echo. + + IDirectSoundFXEcho + + + Compiles an effect from a function or a vertex shader. + ID3DXEffectCompiler + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Gets the list of curve control point positions. + + + + +Gets a value indicating the minimum range of the curve control point positions. + + + + +Gets a value indicating the maximum range of the curve control point positions. + + + + +Gets a value indicating whether gamma scale and offset transformation are supported. + + + + +Describes gamma control capabilities. + + DXGI_GAMMA_CONTROL_CAPABILITIES + + + +Performs an inverse FFT. + + The input buffer. + The last temporary buffer written to during the operation. + + + +Performs an inverse FFT. + + The input buffer. + The output buffer. + A object describing the result of the operation. + + + +Performs a forward FFT. + + The input buffer. + The last temporary buffer written to during the operation. + + + +Performs a forward FFT. + + The input buffer. + The output buffer. + A object describing the result of the operation. + + + +Attaches buffers to an FFT context and performs any required precomputations. + + Temporary buffers to attach. + Buffers to hold precomputed data. + A object describing the result of the operation. + + + +Gets or sets the inverse scale of the FFT. + + + + +Gets or sets the forward scale of the FFT. + + + + +Gets the buffer requirements for the FFT. + + + + +Creates a new three-dimensional real FFT. + + The device context used to create the FFT. + Length of the first dimension of the FFT. + Length of the second dimension of the FFT. + Length of the third dimension of the FFT. + Flag affecting the behavior of the FFT. + The newly created FFT object. + + + +Creates a new three-dimensional real FFT. + + The device context used to create the FFT. + Length of the first dimension of the FFT. + Length of the second dimension of the FFT. + Length of the third dimension of the FFT. + The newly created FFT object. + + + +Creates a new three-dimensional complex FFT. + + The device context used to create the FFT. + Length of the first dimension of the FFT. + Length of the second dimension of the FFT. + Length of the third dimension of the FFT. + Flag affecting the behavior of the FFT. + The newly created FFT object. + + + +Creates a new three-dimensional complex FFT. + + The device context used to create the FFT. + Length of the first dimension of the FFT. + Length of the second dimension of the FFT. + Length of the third dimension of the FFT. + The newly created FFT object. + + + +Creates a new two-dimensional real FFT. + + The device context used to create the FFT. + Length of the first dimension of the FFT. + Length of the second dimension of the FFT. + Flag affecting the behavior of the FFT. + The newly created FFT object. + + + +Creates a new two-dimensional real FFT. + + The device context used to create the FFT. + Length of the first dimension of the FFT. + Length of the second dimension of the FFT. + The newly created FFT object. + + + +Creates a new two-dimensional complex FFT. + + The device context used to create the FFT. + Length of the first dimension of the FFT. + Length of the second dimension of the FFT. + Flag affecting the behavior of the FFT. + The newly created FFT object. + + + +Creates a new two-dimensional complex FFT. + + The device context used to create the FFT. + Length of the first dimension of the FFT. + Length of the second dimension of the FFT. + The newly created FFT object. + + + +Creates a new one-dimensional real FFT. + + The device context used to create the FFT. + Length of the first dimension of the FFT. + Flag affecting the behavior of the FFT. + The newly created FFT object. + + + +Creates a new one-dimensional real FFT. + + The device context used to create the FFT. + Length of the first dimension of the FFT. + The newly created FFT object. + + + +Creates a new one-dimensional complex FFT. + + The device context used to create the FFT. + Length of the first dimension of the FFT. + Flag affecting the behavior of the FFT. + The newly created FFT object. + + + +Creates a new one-dimensional complex FFT. + + The device context used to create the FFT. + Length of the first dimension of the FFT. + The newly created FFT object. + + + +Initializes a new instance of the class. + + The device context used to create the FFT. + Information that describes the shape of the FFT data as well as the scaling factors that should be used for forward and inverse transforms. + Flag affecting the behavior of the FFT. + + + +Initializes a new instance of the class. + + The device context used to create the FFT. + Information that describes the shape of the FFT data as well as the scaling factors that should be used for forward and inverse transforms. + + + +An object that encapsulates forward and inverse FFTs. + + ID3DX11FFT + + + +Flag indicating the type of data being transformed. + + + + +Combination of flags indicating the the dimensions to transform. + + + + +Length of each dimension in the FFT. + + + + +Number of dimension in the FFT. + + + + +Contains a description for an FFT. + + D3DX11_FFT_DESC + + + +Determines whether the specified object instances are considered equal. + + + + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Initializes a new instance of the structure. + + The X component. + The Y component. + + + +Initializes a new instance of the structure. + + The value to set for both the X and Y components. + + + +Gets or sets the Y component of the vector. + + The Y component of the vector. + + + +Gets or sets the X component of the vector. + + The X component of the vector. + + + +Defines a two component vector, using half precision floating point coordinates. + + D3DXVECTOR2_16F + + + +Creates an instance of the type that this is associated with, using the specified context, given a set of property values for the object. + + A that provides a format context. + An that specifies the type of array for which to get properties. + An array of type that is used as a filter. + A with the properties that are exposed for this data type, or a null reference (Nothing in Visual Basic) if there are no properties. + + + +Returns whether this object supports properties, using the specified context. + + A that provides a format context. + + true if GetProperties should be called to find the properties of this object; otherwise, false. + + + +Creates an instance of the type that this is associated with, using the specified context, given a set of property values for the object. + + A that provides a format context. + An of new property values. + An representing the given , or null if the object cannot be created. + + + +Returns whether changing a value on this object requires a call to System::ComponentModel::TypeConverter::CreateInstance(System::Collections::IDictionary^) +to create a new value, using the specified context. + + A that provides a format context. + + false if changing a property on this object requires a call to System::ComponentModel::TypeConverter::CreateInstance(System::Collections::IDictionary^) to create a new value; otherwise, false. + + + +Converts the given object to the type of this converter, using the specified context and culture information. + + A that provides a format context. + A . If null is passed, the current culture is assumed. + The to convert. + An that represents the converted value. + + + +Converts the given value object to the specified type, using the specified context and culture information. + + A that provides a format context. + A . If null is passed, the current culture is assumed. + The to convert. + A that represents the type you want to convert to. + An that represents the converted value. + + + +Returns whether this converter can convert an object of the given type to the type of this converter, using the specified context. + + A that provides a format context. + A System::Type that represents the type you want to convert from. + + true if this converter can perform the conversion; otherwise, false. + + + +Returns whether this converter can convert the object to the specified type, using the specified context. + + A that provides a format context. + A that represents the type you want to convert to. + + true if this converter can perform the conversion; otherwise, false. + + + +Initializes a new instance of the class. + + + + +Provides a type converter to convert objects to and from various +other representations. + + + + +Minimum sizes (in floats) for precompute buffers. + + + + +Number of precompute buffers required. + + + + +Minimum sizes (in floats) of temporary buffers. + + + + +Number of temporary buffers needed. + + + + +Contains buffer requirements for an FFT. + + D3DX11_FFT_BUFFER_INFO + + + +Gets or sets the number of frames that the system is allowed to queue for rendering. This value defaults to 3, but can range from 1 to 16. + + + + +Initializes a new instance of the class. + + The COM object implementing the IDXGIDevice1 interface. + + + +Represents a base for objects that produces image data. + + IDXGIDevice1 + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Shader buffer properties. + + + + +Buffer size (in bytes). + + + + +The number of unique variables. + + + + +The intended use of the constant data. + + + + +The name of the buffer. + + + + +Describes a shader constant-buffer. + + D3D11_SHADER_BUFFER_DESC + + + +Gets the shader reflection variable with the given name. + + The name of the shader variable to retrieve. + The shader reflection variable with the given name. + + + +Gets the shader reflection variable at the given index. + + The zero-based index of the shader variable to retrieve. + The shader reflection variable at the given index. + + + +Gets the constant buffer's description. + + + + +Initializes a new instance of the class. + + + + +Defines an interface that provides access to a shader constant buffer. + + ID3D11ShaderReflectionConstantBuffer + + + +Get the number of wave entries in the wave bank. + + + + +Get a value representing the current state of the wave bank. + + + + +Stop playback of a wave. + + The index of the wave to stop. + + that specify how the wave is stopped. + + + +Prepare a wave for playback. + + The index of the wave to prepare. + + to indicate how the wave is to be prepared. + Play offset to use as the start of the wave. The offset can be described in milliseconds or in samples. The argument determines the offset units. + The number of loops for playback. + A object containing the newly prepared wave. + + + +Play a wave. + + The index of the wave to play. + + to indicate how the wave is to be play. + Play offset to use as the start of the wave. The offset can be described in milliseconds or in samples. The argument determines the offset units. + The number of loops for playback. + A object containing the newly playing wave. + + + +Get the properties of a wave. + + The index of the wave to get the properties of. + A object containing the properties of the wave. + + + +Get a wave index based on a string that represents the friendly name of the wave. + + A string that contains the friendly name of the wave. + The index for the wave if it exists, otherwise -1. + + + +Instantiate and manipulate XACT wave bank objects. + + IXACT3WaveBank + + + +Total number of lines. + + + + +The maximum reordering count of any line of text, used to +calculate the most number of hit-testing boxes needed. If the +layout has no bidirectional text, or no text at all, the +minimum level is 1. + + + + +Initial height given to the layout. Depending on the length of +the text, it may be larger or smaller than the text content +height. + + + + +The initial width given to the layout. It can be either larger +or smaller than the text content width, depending on whether +the text was wrapped. + + + + +The height of the formatted text. The height of an empty string +is set to the same value as that of the default font. + + + + +The width of the formatted text, taking into account the +trailing whitespace at the end of each line. + + + + +A value that indicates the width of the formatted text, while +ignoring trailing whitespace at the end of each line. + + + + +A value that indicates the top-most point of formatted text +relative to the layout box, while excluding any glyph overhang. + + + + +A value that indicates the left-most point of formatted text +relative to the layout box, while excluding any glyph overhang. + + + + +Contains the metrics associated with text after layout. All coordinates are in device independent pixels (DIPs). + + + + +Get the handle to a shared resource. The returned handle can be used to open the resource using different Direct3D devices. + + + + +Gets the resource usage. + + + + +Gets or sets the eviction priority for the resource. + + + + +Initializes a new instance of the class. + + The COM object implementing the IDXGIResource interface. + + + +Implements a base interface that allows resource sharing and identifies the memory that a resource resides in. + + + + + +Gets the set of render-target-blend descriptors describing independent blending operations for up to eight simultaneous render targets. + + + + +Gets or sets a value determining whether independent blending is enabled for simultaneous render targets. + + + + +Gets or sets a value specifying whether alpha-to-coverage is used as a multisampling technique when setting a pixel to a rendertarget. + + + + +Provides a description for blending state objects. + + D3D11_BLEND_DESC + + + +Contains system-defined identifiers for device objects. + + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +A write mask. + + + + +This defines how to combine the alpha data sources. + + + + +This specifies the second alpha data source and includes an optional pre-blend operation. Blend options that end in "Color" are not allowed. + + + + +This specifies the first alpha data source and includes an optional pre-blend operation. Blend options that end in "Color" are not allowed. + + + + +This defines how to combine the RGB data sources. + + + + +This specifies the second RGB data source and includes an optional pre-blend operation. + + + + +This specifies the first RGB data source and includes an optional pre-blend operation. + + + + +Enables or disables blending on this render target. + + + + +Provides a description for render target blending. + + D3D11_RENDER_TARGET_BLEND_DESC + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Number of annotations in the group. + + + + +Number of techniques in the group. + + + + +Name of the group. + + + + +Defines a description for effect groups. + + D3DX11_GROUP_DESC + + + +Minimum high-frequency reverb time ratio. + + + + +Maximum high-frequency reverb time ratio. + + + + +Default high-frequency reverb time ratio. + + + + +Minimum reverb time, in milliseconds. + + + + +Maximum reverb time, in milliseconds. + + + + +Default reverb time, in milliseconds. + + + + +Minimum reverb mix, in dB. + + + + +Maximum reverb mix, in dB. + + + + +Default reverb mix, in dB. + + + + +Minimum input gain of signal, in decibels (dB). + + + + +Maximum input gain of signal, in decibels (dB). + + + + +Default input gain of signal, in decibels (dB). + + + + +High-frequency reverb time ratio. + + + + +Reverb time, in milliseconds. + + + + +Reverb mix, in dB. + + + + +Input gain of signal, in decibels (dB), the default value is 0 dB. + + + + +The SoundEffectWavesReverb object is used to set and retrieve effect parameters on a buffer that supports waves reverberation. + + IDirectSoundFXWavesReverb + + + Defines the attributes of a font. + D3DXFONT_DESC + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Options for binding a raw buffer. + + + + +The number of elements in the resource. + + + + +The index of the first element to be accessed by the view. + + + + +Number of cube textures in the array. + + + + +Index of the first 2D texture to use. + + + + +Number of textures in the array. + + + + +The index of the first texture to use in an array of textures. + + + + +The maximum number of mipmap levels in the texture. + + + + +Index of the most detailed mipmap level to use; this number is between 0 and MipLevels - 1. + + + + +The total number of elements in the view. + + + + +The offset of the first element in the view to access, relative to element 0. + + + + +The resource type of the view. This should be the same as the resource type of the underlying resource. This parameter also determines which other properties are valid. + + + + +The format of the data in the shader resource. + + + + +Provides a description for a shader resource view. + + D3D11_SHADER_RESOURCE_VIEW_DESC + + + +Describes the state of a keyboard device. + + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Number of textures to use. + + + + +The index of the first texture to use in an array of textures. + + + + +The index of the first mipmap level to use. + + + + +A value that describes whether the texture is read only. + + + + +Type of resource. Specifies how a depth-stencil resource will be accessed. + + + + +Resource data format. + + + + +Specifies the subresources of a texture that are accessible from a depth-stencil view. + + D3D11_DEPTH_STENCIL_VIEW_DESC + + + +Optimizes the mesh data. + + Flags indicating which optimizations to perform. + An array of integers, one per face, that map the original mesh faces to the optimized mesh faces. + An array of integers, one per vertex, that map the original mesh vertices to the optimized mesh vertices. + A result code. + + + +Optimizes the mesh data. + + Flags indicating which optimizations to perform. + A result code. + + + +Discards data that has been committed to the device. + + Flags indicating which pieces of data to discard. + A result code. + + + +Commits changes to the mesh back to the device. + + A result code. + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Number of depth levels to use in the render-target view, starting from FirstDepthSlice. A value of -1 indicates all of the slices along the w axis, starting from FirstDepthSlice. + + + + +First depth level to use. + + + + +Number of textures to use. + + + + +The index of the first texture to use in an array of textures. + + + + +The index of the mipmap level to use mip slice. + + + + +The width of each element (in bytes). This can be determined from the format stored in the render-target-view description. + + + + +Number of bytes between the beginning of the buffer and the first element to access. + + + + +The resource type, which specifies how the render-target resource will be accessed. + + + + +The data format of the render target. + + + + +Specifies the subresources from a resource that are accessible using a render-target view. + + D3D11_RENDER_TARGET_VIEW_DESC + + + +The function called is not supported at this time. + + This is a failed result. + DSERR_UNSUPPORTED + + + +This object has not been initialized. + + This is a failed result. + DSERR_UNINITIALIZED + + + +A circular loop of send effects was detected. + + This is a failed result. + DSERR_SENDLOOP + + + +The caller does not have the priority level required for the function to succeed + + This is a failed result. + DSERR_PRIOLEVELNEEDED + + + +Another app has a higher priority level, preventing this call from succeeding. + + This is a failed result. + DSERR_OTHERAPPHASPRIO + + + +The object requested was not found. + + This is a failed result. + DSERR_OBJECTNOTFOUND + + + +The requested COM interface is not available. + + This is a failed result. + DSERR_NOINTERFACE + + + +No sound driver is available for use. + + This is a failed result. + DSERR_NODRIVER + + + +This object does not support aggregation. + + This is a failed result. + DSERR_NOAGGREGATION + + + +An invalid parameter was passed to the returning function. + + This is a failed result. + DSERR_INVALIDPARAM + + + +This call is not valid for the current state of this object. + + This is a failed result. + DSERR_INVALIDCALL + + + +An undetermined error occurred inside the DirectSound subsystem. + + This is a failed result. + DSERR_GENERIC + + + +The effects requested could not be found on the system, or they were found +but in the wrong order, or in the wrong hardware/software locations. + + This is a failed result. + + + + +Attempt to use DirectSound 8 functionality on an older DirectSound object. + + This is a failed result. + DSERR_DS8_REQUIRED + + + +The control (vol, pan, etc.) requested by the caller is not available. + + This is a failed result. + DSERR_CONTROLUNAVAIL + + + +Tried to create a ControlEffects buffer shorter than DSBSIZE_FX_MIN milliseconds. + + This is a failed result. + DSERR_BUFFERTOOSMALL + + + +The buffer memory has been lost, and must be restored. + + This is a failed result. + DSERR_BUFFERLOST + + + +The GUID specified in an audiopath file does not match a valid MIXIN buffer. + + This is a failed result. + DSERR_BADSENDBUFFERGUID + + + +The specified WAVE format is not supported. + + This is a failed result. + DSERR_BADFORMAT + + + +This object is already initialized. + + This is a failed result. + DSERR_ALREADYINITIALIZED + + + +The call failed because resources (such as a priority level) were already being used by another caller. + + This is a failed result. + DSERR_ALLOCATED + + + +Access is denied. + + This is a failed result. + DSERR_ACCESSDENIED + + + +The 3D algorithm was substituted. + + This is a successful result. + DS_NO_VIRTUALIZATION + + + +Represents a generic failure result. + + This is a failed result. + E_FAIL + + + +The function completed successfully. + + This is a successful result. + DS_OK + + + Defines result codes that are returned by DirectSound 8 functions. + HRESULT + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Gets the unmanaged HMONITOR handle for the output. + + + + +Gets rotation performed by the output on a presented image. + + + + +Gets a value indicating whether the output is attached to the desktop. + + + + +Gets output's bounds in desktop coordinates. + + + + +Gets the output's name. + + + + +Describes various properties of an Output. + + DXGI_OUTPUT_DESC + + + +An exception indicating that the appropriate DirectInput runtime could not be found or initialized. + + + + +Initializes a new instance of the class. + + The device used to create the shader. + The compiled shader bytecode. + A dynamic class linkage interface. + + + +Initializes a new instance of the class. + + The device used to create the shader. + The compiled shader bytecode. + + + +Represents a pixel shader. + + ID3D11PixelShader + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Indicates which stream the geometry shader is using for the signature parameter. + + + + +Mask which indicates whether a given component is never written (if the signature is an output signature) or always read (if the signature is an input signature). + + + + +Mask which indicates which components of a register are used. + + + + +The per-component-data type that is stored in a register. Each register can store up to four-components of data. + + + + +A predefined string that determines the functionality of certain pipeline stages. + + + + +The register that will contain this variable's data. + + + + +Semantic index that modifies the semantic. Used to differentiate different parameters that use the same semantic. + + + + +A per-parameter string that identifies how the data will be used. + + + + +Describes a parameter in a shader signature. + + D3D11_SIGNATURE_PARAMETER_DESC + + + +Creates a font file stream object that encapsulates an open file resource. +The resource is closed when the last reference to fontFileStream is released. + + Font file reference key that uniquely identifies the font file resource +within the scope of the font loader being used. + Size of font file reference key in bytes. + +Reference to the newly created font file stream. + + + + +Font file loader interface handles loading font file resources of a particular type from a key. +The font file loader interface is recommended to be implemented by a singleton object. +IMPORTANT: font file loader implementations must not register themselves with DirectWrite factory +inside their constructors and must not unregister themselves in their destructors, because +registration and underregistration operations increment and decrement the object reference count respectively. +Instead, registration and underregistration of font file loaders with DirectWrite factory should be performed +outside of the font file loader implementation as a separate step. + + + + +Converts the value of the object to its equivalent string representation. + + The string representation of the value of this instance. + + + +Halts the current thread until a vertical blank occurs. + + A object describing the result of the operation. + + + +Releases ownership of an output. + + + + +Takes ownership of an output. + + The device interface. + If true, ownership is exclusive. + A object describing the result of the operation. + + + +Copies the display surface content to the specified destination surface. + + The destination surface. + A object describing the result of the operation. + + + +Changes the current display surface to the specified surface. + + The new display surface. + A object describing the result of the operation. + + + +Sets gamma control information. + + The gamma control information. + A object describing the result of the operation. + + + +Gets the display mode that best matches the requested mode. + + The device interface. If this parameter is null, only +modes whose format matches the specified mode will be returned; otherwise, only those +formats that are supported for scan-out by the device are returned. + The description of the display mode to match. + Receives the best-matching display mode. + A object describing the result of the operation. + + + +Gets a list of display modes matching certain specifications. + + The display mode color format. + Flags indicating how the display mode scanline order and scaling. + A list of matching display mode descriptions. The list is null if an error occured. + + + +Gets a description of the output's gamma-control capabilities. + + + + +Gets statistics about recently rendered frames. + + + + +Gets the output's description. + + + + +Represents the output of an adapter (such as a monitor). + + IDXGIOutput + + + +The distance from the bottom-most visible DIP to its lower +alignment edge. + + + + +The distance from the right-most visible DIP to its right +alignment edge. + + + + +The distance from the top-most visible DIP to its top +alignment edge. + + + + +The distance from the left-most visible DIP to its left +alignment edge. + + + + +Indicates how much any visible DIPs (device independent pixels) +overshoot each side of the layout or inline objects. + +Positive overhangs indicate that the visible area extends outside +the layout box or inline object, while negative values mean there +is whitespace inside. The returned values are unaffected by +rendering transforms or pixel snapping. Additionally, they may not +exactly match the final target's pixel bounds after applying grid +fitting and hinting. + + + + +Flag indicating whether the object is to be placed upright or alongside the text baseline +for vertical text. + + + + +Distance from the top of the object to the baseline where it is lined up with the adjacent text. +If the baseline is at the bottom, baseline simply equals height. + + + + +Height of the inline object as measured from top to bottom. + + + + +Width of the inline object. + + + + +Properties describing the geometric measurement of an +application-defined inline object. + + + + +Gets or sets the position within the current stream. + + The current position within the stream. + Stream Class + + + +Gets the length in bytes of the stream. + + A long value representing the length of the stream in bytes. + + + +Gets a value indicating whether the current stream supports writing. + + Always false. + + + +Gets a value indicating whether the current stream supports seeking. + + Always true. + + + +Gets a value indicating whether the current stream supports reading. + + Always true. + + + +Not supported. + + Always ignored. + Always thrown. + + + +Not supported. + + Always thrown. + + + +Reads a sequence of bytes from the current stream and advances the position +within the stream by the number of bytes read. + + An array of values to be read from the stream. + The zero-based byte offset in buffer at which to begin storing +the data read from the current stream. + The maximum number of bytes to be read from the current stream. + The number of bytes read from the stream. + This stream does not support reading. + + is a null reference. + + or is negative. + The sum of and is greater than the buffer length. + + + +Not supported. + + Always thrown. + + + +Sets the position within the current stream. + + Attempted to seek outside of the bounds of the stream. + + + +Unmaps the texture. + + The subresource to unmap. + + + +Maps the texture, providing CPU access to its contents. + + A zero-based index into an array of subtextures; 0 indicates the first, most detailed subtexture (or mipmap level). + The zero-based index of the first texture to use (in an array of textures). + The IO operations to enable on the CPU. + Flags indicating how the CPU should respond when the GPU is busy. + A data rectangle containing the mapped data. This data stream is invalidated +when the buffer is unmapped. + + + +Maps the texture, providing CPU access to its contents. + + A zero-based index into an array of subtextures; 0 indicates the first, most detailed subtexture (or mipmap level). + The IO operations to enable on the CPU. + Flags indicating how the CPU should respond when the GPU is busy. + A data rectangle containing the mapped data. This data stream is invalidated +when the buffer is unmapped. + + + +Initializes a new instance of the class. + + The device to associate the texture with. + The description of the texture. + An array of initial texture data for each subresource. + + + +Initializes a new instance of the class. + + The device to associate the texture with. + The description of the texture. + The initial texture data. + + + +Initializes a new instance of the class. + + The device to associate the texture with. + The description of the texture. + + + +Gets the texture description. + + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Specifies whether the class was created. + + + + +The base sampler associated with an HLSL class. + + + + +The base texture associated with an HLSL class. + + + + +The base constant buffer offset associated with an HLSL class. + + + + +Describes the constant buffer associated with an HLSL class. + + + + +The type ID of an HLSL class. + + + + +The instance index of an HLSL class. + + + + +The instance ID of an HLSL class. + + + + +Provides a description for an HLSL class instance. + + D3D11_CLASS_INSTANCE_DESC + + + +An invalid pointer, usually null, was passed as a parameter. + + This is a failed result. + E_POINTER + + + +Data is not yet available. + + This is a failed result. + E_PENDING + + + +The HWND parameter is not a valid top-level window that belongs to the process. + + This is a failed result. + E_HANDLE + + + +A SUCCESS code indicating that settings cannot be modified. + + This is a successful result. + DI_WRITEPROTECT + + + +The function called is not supported at this time. + + This is a failed result. + DIERR_UNSUPPORTED + + + +The operation could not be completed because the device is not plugged in. + + This is a failed result. + DIERR_UNPLUGGED + + + +Equal to | . + + This is a successful result. + DI_TRUNCATEDANDRESTARTED + + + +The parameters of the effect were successfully updated by +, but some of them were +beyond the capabilities of the device and were truncated. + + This is a successful result. + DI_TRUNCATED + + + +The operation completed successfully. + + This is a successful result. + DI_OK + + + +The settings have been successfully applied but could not be persisted. + + This is a successful result. + DI_SETTINGSNOTSAVED + + + + failed because more information was requested +to be sent than can be sent to the device. Some devices have +restrictions on how much data can be sent to them. (For example, +there might be a limit on the number of buttons that can be +pressed at once.) + + This is a failed result. + DIERR_REPORTFULL + + + +The specified property cannot be changed. + + This is a failed result. + DIERR_READONLY + + + +The change in device properties had no effect. + + This is a successful result. + DI_PROPNOEFFECT + + + +The device is a polled device. As a result, device buffering +will not collect any data and event notifications will not be +signalled until GetCurrentState is called. + + This is a successful result. + DI_POLLEDDEVICE + + + +The DInput subsystem couldn't allocate sufficient memory to complete the caller's request. + + This is a failed result. + DIERR_OUTOFMEMORY + + + +Another app has a higher priority level, preventing this call from succeeding. + + This is a failed result. + DIERR_OTHERAPPHASPRIO + + + +The application requires a newer version of DirectInput. + + This is a failed result. + DIERR_OLDDIRECTINPUTVERSION + + + +The requested object does not exist. + + This is a failed result. + DIERR_OBJECTNOTFOUND + + + +This object has not been initialized. + + This is a failed result. + DIERR_NOTINITIALIZED + + + +The requested object does not exist. + + This is a failed result. + DIERR_NOTFOUND + + + +The operation cannot be performed unless the device is acquired in exclusive mode. + + This is a failed result. + DIERR_NOTEXCLUSIVEACQUIRED + + + +The effect is not downloaded. + + This is a failed result. + DIERR_NOTDOWNLOADED + + + +Attempted to read buffered device data from a device that is not buffered. + + This is a failed result. + DIERR_NOTBUFFERED + + + +The device exists but is not currently attached. + + This is a successful result. + DI_NOTATTACHED + + + +The operation cannot be performed unless the device is acquired. + + This is a failed result. + DIERR_NOTACQUIRED + + + +The specified interface is not supported by the object. + + This is a failed result. + DIERR_NOINTERFACE + + + +The operation had no effect. + + This is a successful result. + DI_NOEFFECT + + + +This object does not support aggregation. + + This is a failed result. + DIERR_NOAGGREGATION + + + +Not all the requested information fit into the buffer. + + This is a failed result. + DIERR_MOREDATA + + + +A mapper file function failed because reading or writing the user or IHV settings file failed. + + This is a failed result. + DIERR_MAPFILEFAIL + + + +An invalid parameter was passed to the returning function, +or the object was not in a state that allowed the function +to be called. + + This is a failed result. + DIERR_INVALIDPARAM + + + +Access to the device has been lost. It must be re-acquired. + + This is a failed result. + DIERR_INPUTLOST + + + +The effect could not be downloaded because essential information +is missing. For example, no axes have been associated with the +effect, or no type-specific information has been created. + + This is a failed result. + DIERR_INCOMPLETEEFFECT + + + +The device cannot be reinitialized because there are still effects attached to it. + + This is a failed result. + DIERR_HASEFFECTS + + + +The device already has an event notification associated with it. + + This is a failed result. + DIERR_HANDLEEXISTS + + + +An undetermined error occured inside the DInput subsystem. + + This is a failed result. + DIERR_GENERIC + + + +Represents a generic failure result. + + This is a failed result. + E_FAIL + + + +The parameters of the effect were successfully updated by +, but in order to change +the parameters, the effect needed to be restarted. + + This is a successful result. + DI_EFFECTRESTARTED + + + +An attempt was made to modify parameters of an effect while it is +playing. Not all hardware devices support altering the parameters +of an effect while it is playing. + + This is a failed result. + DIERR_EFFECTPLAYING + + + +The parameters of the effect were successfully updated by +, but the effect was not +downloaded because the device is not exclusively acquired +or because the NoDownload flag was passed. + + This is a successful result. + DI_DOWNLOADSKIPPED + + + +The device or device instance or effect is not registered with DirectInput. + + This is a failed result. + DIERR_DEVICENOTREG + + + +The device is full. + + This is a failed result. + DIERR_DEVICEFULL + + + +The device buffer overflowed. Some input was lost. + + This is a successful result. + DI_BUFFEROVERFLOW + + + +The application was written for an unsupported prerelease version of DirectInput. + + This is a failed result. + DIERR_BETADIRECTINPUTVERSION + + + +The object could not be created due to an incompatible driver version +or mismatched or incomplete driver components. + + This is a failed result. + DIERR_BADDRIVERVER + + + +This object is already initialized. + + This is a failed result. + DIERR_ALREADYINITIALIZED + + + +The operation cannot be performed while the device is acquired. + + This is a failed result. + DIERR_ACQUIRED + + + Defines result codes that are returned by DirectInput 8 functions. + HRESULT + + + +Alternate success value, indicating a successful but nonstandard completion (the precise meaning depends on context). + + This is a successful result. + S_FALSE + + + +Direct3D could not allocate sufficient memory to complete the call. + + This is a failed result. + E_OUTOFMEMORY + + + +An invalid parameter was passed to the returning function. + + This is a failed result. + E_INVALIDARG + + + +Represents a generic failure result. + + This is a failed result. + E_FAIL + + + +Represents the result of a successful operation. + + This is a successful result. + S_OK + + + +The last item cannot be deleted. + + This is a failed result. + D3DX11_ERR_CANNOT_REMOVE_LAST_ITEM + + + +A fragment with that name already exists. + + This is a failed result. + D3DX11_ERR_DUPLICATE_NAMED_FRAGMENT + + + +The mesh has no data. + + This is a failed result. + D3DX11_ERR_LOADED_MESH_HAS_NO_DATA + + + +The data is invalid. + + This is a failed result. + D3DX11_ERR_INVALID_DATA + + + +Too many influences specified. + + This is a failed result. + D3DX11_ERR_TOO_MANY_INFLUENCES + + + +Skinning is not supported. + + This is a failed result. + D3DX11_ERR_SKINNING_NOT_SUPPORTED + + + +Attribute sort is not supported as an optimization technique. + + This is a failed result. + D3DX11_ERR_CANNOT_ATTR_SORT + + + +The mesh is invalid. + + This is a failed result. + D3DX11_ERR_INVALID_MESH + + + +The index buffer cannot be modified. + + This is a failed result. + D3DX11_ERR_CANNOT_MODIFY_INDEX_BUFFER + + + +There are too many unique instances of a particular type of state object. + + This is a failed result. + D3D11_ERROR_TOO_MANY_UNIQUE_STATE_OBJECTS + + + +The file was not found. + + This is a failed result. + D3D11_ERROR_FILE_NOT_FOUND + + + +The previous blit operation that is transferring information to or from this surface is incomplete. + + This is a failed result. + D3DERR_WASSTILLDRAWING + + + +The method call is invalid. For example, a method's parameter may not be a valid pointer. + + This is a failed result. + D3DERR_INVALIDCALL + + + Defines result codes that are returned by Direct3D 11 functions. + HRESULT + + + +Get a value representing the current state of the wave. + + + + +Gets a object that contains the properties of the wave instance. + + + + +Stop the wave. + + + that specify how the wave is stopped. + + + +Set the volume of the wave. + + The volume level to set. + + + +Set the pitch of the wave. + + The value that is used to set the pitch for playback of this wave. This value may be between -1200 and 1200, which is approximately one semitone. + + + +Play the wave. + + + + +Pause playback of the wave. + + The action to take. If true, playback is paused, if false, playback is resumed. + + + +Gets a value that is true if the wave is tagged as background music, otherwise false. + + + + +Gets the properties that are common to all wave instances. + + + + +The properties of a specific wave instance. + + XACT_WAVE_INSTANCE_PROPERTIES + + + +Gets a value that is true if the wave is streaming, otherwise false. + + + + +Gets the loop region of the wave. + + + + +Gets the duration of the wave in samples. + + + + +Gets the format of the wave. + + + + +Gets the friendly name of the wave. + + + + +The properties that are common to all waves. + + XACT_WAVE_PROPERTIES + + + +Get the sample count of the region. + + + + +Get the start sample of the region. + + + + +The sample region information for an XACT wave bank. + + WAVEBANKSAMPLEREGION + + + +Gets the bytes per second index of the xWMA file. + + + + +Gets the bit depth of the wave file. + + + + +Gets the block alignment index. + + + + +Gets the sample rate of the wave file or of the decoded audio for compressed formats. + + + + +Gets the number of channels in the wave file + + + + +Gets the format of the wave file. + + + + +The mini-wave format for an XACT wave bank. + + WAVEBANKMINIWAVEFORMAT + + + +Unmaps the texture. + + The subresource to unmap. + + + +Maps the texture, providing CPU access to its contents. + + A zero-based index into an array of subtextures; 0 indicates the first, most detailed subtexture (or mipmap level). + The zero-based index of the first texture to use (in an array of textures). + The IO operations to enable on the CPU. + Flags indicating how the CPU should respond when the GPU is busy. + A data stream containing the mapped data. This data stream is invalidated +when the buffer is unmapped. + + + +Maps the texture, providing CPU access to its contents. + + A zero-based index into an array of subtextures; 0 indicates the first, most detailed subtexture (or mipmap level). + The IO operations to enable on the CPU. + Flags indicating how the CPU should respond when the GPU is busy. + A data stream containing the mapped data. This data stream is invalidated +when the buffer is unmapped. + + + +Initializes a new instance of the class. + + The device to associate the texture with. + The description of the texture. + An array of initial texture data for each subresource. + + + +Initializes a new instance of the class. + + The device to associate the texture with. + The description of the texture. + The initial texture data. + + + +Initializes a new instance of the class. + + The device to associate the texture with. + The description of the texture. + + + +Gets the texture description. + + + + Applications use the methods of the StateBlock class to encapsulate render states. + IDirect3DStateBlock9 + + + +Releases the GDI device context (DC) associated with the current surface and allows rendering using Direct3D. + + A object describing the result of the operation. + + + +Releases the GDI device context (DC) associated with the current surface and allows rendering using Direct3D. + + A pointer to a rectangle that identifies the dirty region of the surface. A dirty region is +any part of the surface that you have used for GDI rendering and that you want to preserve. This is used as a +performance hint to graphics subsystem in certain scenarios. Do not use this parameter to restrict rendering to +the specified rectangular region. The area specified by the rectangle will be used as a performance hint to indicate +what areas have been manipulated by GDI rendering. + A object describing the result of the operation. + + + +Returns a device context (DC) that allows you to render to a DXGI surface using GDI. + + If true the application will not preserve any rendering with GDI; otherwise, false. +If false, any previous rendering to the device context will be preserved. +This flag is ideal for simply reading the device context and not doing any rendering to the surface. + A pointer to an HDC handle that represents the current device context for GDI rendering. + + + +Initializes a new instance of the class. + + The COM object implementing the IDXGISurface1 interface. + + + +Extends the standard surface interface to provide GDI interop support. + + IDXGISurface1 + + + +Initializes a new instance of the class. + + The message describing the exception. + The exception that caused this exception. + + + +Initializes a new instance of the class. + + The message describing the exception. + + + +Initializes a new instance of the class. + + + + +An exception indicating that the appropriate Direct3D 9 runtime could not be found or initialized. + + + + +Minimum filter cutoff for high-frequency harmonics attenuation. + + + + +Maximum filter cutoff for high-frequency harmonics attenuation. + + + + +Default filter cutoff for high-frequency harmonics attenuation. + + + + +Minimum width of frequency band that determines range of harmonic content addition. + + + + +Maximum width of frequency band that determines range of harmonic content addition. + + + + +Default width of frequency band that determines range of harmonic content addition. + + + + +Minimum center frequency of harmonic content addition. + + + + +Maximum center frequency of harmonic content addition. + + + + +Default center frequency of harmonic content addition. + + + + +Minimum percentage of distortion intensity. + + + + +Maximum percentage of distortion intensity. + + + + + Default percentage of distortion intensity. + + + + +Minimum amount of signal change after distortion. + + + + +Maximum amount of signal change after distortion. + + + + +Default amount of signal change after distortion. + + + + +Filter cutoff for high-frequency harmonics attenuation. The default value is 8000 Hz. + + + + +Width of frequency band that determines range of harmonic content addition. The default value is 2400 Hz. + + + + +Center frequency of harmonic content addition. The default value is 2400 Hz. + + + + +Percentage of distortion intensity. The default value is 15 percent. + + + + +Amount of signal change after distortion. The default value is -18 dB. + + + + +The SoundEffectDistortion object is used to set and retrieve effect parameters on a buffer that supports distortion. + + IDirectSoundFXDistortion + + + +Returns a value indicating whether the two StateBlockMask are equivalent. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Returns a value indicating whether this instance is equal to the specified object. + + A to compare with this instance. + + true if has the same value as this instance; otherwise, false. + + + +Returns a value indicating whether this instance is equal to the specified object. + + An object to compare with this instance. + + true if has the same value as this instance; otherwise, false. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two StateBlockMasks. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two StateBlockMasks. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Clones the instance and returns a new object containing the same values. + + A new object containing the same values as the current instance. + + + +Gets or sets a value indicating whether predication state is enabled by the mask. + + + + +Gets or sets a value indicating whether stream output buffer state is enabled by the mask. + + + + +Gets or sets a value indicating whether rasterizer state is enabled by the mask. + + + + +Gets or sets a value indicating whether scissor rectangle state is enabled by the mask. + + + + +Gets or sets a value indicating whether viewport state is enabled by the mask. + + + + +Gets or sets a value indicating whether blend state is enabled by the mask. + + + + +Gets or sets a value indicating whether depth and stencil state is enabled by the mask. + + + + +Gets or sets a value indicating whether render target state is enabled by the mask. + + + + +Gets or sets a value indicating whether primitive topology state is enabled by the mask. + + + + +Gets or sets a value indicating whether input layout state is enabled by the mask. + + + + +Gets or sets a value indicating whether index bufer state is enabled by the mask. + + + + +Gets a collection of values indicating which vertex buffer state is enabled by the mask. + + + + +Gets a collection of values indicating which pixel shader constant buffer state is enabled by the mask. + + + + +Gets a collection of values indicating which pixel shader resource state is enabled by the mask. + + + + +Gets a collection of values indicating which pixel shader sampler state is enabled by the mask. + + + + +Gets or sets a value indicating whether pixel shader state is enabled by the mask. + + + + +Gets a collection of values indicating which geometry shader constant buffer state is enabled by the mask. + + + + +Gets a collection of values indicating which geometry shader resource state is enabled by the mask. + + + + +Gets a collection of values indicating which geometry shader sampler state is enabled by the mask. + + + + +Gets or sets a value indicating whether geometry shader state is enabled by the mask. + + + + +Gets a collection of values indicating which vertex shader sampler state is enabled by the mask. + + + + +Gets a collection of values indicating which vertex shader resource state is enabled by the mask. + + + + +Gets a collection of values indicating which vertex shader sampler state is enabled by the mask. + + + + +Gets or sets a value indicating whether vertex shader state is enabled by the mask. + + + + +Initializes a new instance of the class. + + The to copy initial values from. + + + +Maximum rolloff factor. The default value is (1.0). + + + + +Maximum Doppler factor. The default value is (1.0). + + + + +Maximum distance factor. The default value is (1.0). + + + + +Minimum rolloff factor. The default value is (1.0). + + + + +Minimum Doppler factor. The default value is (1.0). + + + + +Minimum distance factor. The default value is (1.0). + + + + +Default rolloff factor. The default value is (1.0). + + + + +Default Doppler factor. The default value is (1.0). + + + + +Default distance factor. The default value is (1.0). + + + + +Gets or sets the listener's velocity. + + + + +Gets or sets the listener's position. + + + + +Gets or sets the rolloff factor, which determines the rate of attenuation over distance. + + + + +Gets or sets the multiplier for the Doppler effect. + + + + +Gets or sets the distance factor, which is the number of meters in a vector unit. + + + + +Determines if settings are set immediately or deferred. + + + + +Describes the listener's top orientation. + + + + +Describes the listener's front orientation. + + + + +Commits any deferred settings made since the last call to this method. + + + + +Initializes a new instance of the class +with a previously created sound buffer. + + The SlimDX::DirectSound::SoundBuffer object. + + + +The Listener3D object is used to retrieve and set parameters that describe a listener's position, orientation, and listening environment in 3-D space. + + IDirectSound3DListener + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +The format of the image file. + + + + +The type of the texture stored in the file. + + + + +The original format of the image. + + + + +Number of mipmap levels in the original image. + + + + +Size of the image, in bytes. + + + + +Depth of the original image, in pixels. + + + + +Height of the original image, in pixels. + + + + +Width of the original image, in pixels. + + + + +Contains the description of the contents of an image file. + + + + +An application uses the methods of this interface to implement a key frame animation set. + + ID3DXKeyframedAnimationSet + + + Describes an off-screen render target used by . +D3DXRTS_DESC + + Describes an annotation used by an effect object. + D3DXFRAGMENT_DESC + + + +Gets or sets the position within the current stream. + + The current position within the stream. + Stream Class + + + +Gets the length in bytes of the stream. + + A long value representing the length of the stream in bytes. + + + +Gets a value indicating whether the current stream supports writing. + + Always false. + + + +Gets a value indicating whether the current stream supports seeking. + + Always true. + + + +Gets a value indicating whether the current stream supports reading. + + Always true. + + + +Not supported. + + Always ignored. + Always thrown. + + + +Not supported. + + Always thrown. + + + +Reads a sequence of bytes from the current stream and advances the position +within the stream by the number of bytes read. + + An array of values to be read from the stream. + The zero-based byte offset in buffer at which to begin storing +the data read from the current stream. + The maximum number of bytes to be read from the current stream. + The number of bytes read from the stream. + This stream does not support reading. + + is a null reference. + + or is negative. + The sum of and is greater than the buffer length. + + + +Not supported. + + Always thrown. + + + +Sets the position within the current stream. + + Attempted to seek outside of the bounds of the stream. + + + +Determines whether the underlying variable type is equivalent to that of the specified type. + + The type to test for equivalence. + + true if the underlying class type is equivalent to that of the specified type; otherwise, false. + + + +Determines whether the variable type is equivalent to or inherits from the given type. + + The potential parent type. + + true if the class type is equivalent to or inherits from the given type; otherwise, false. + + + +Determines whether the class type implements the given interface. + + The potential parent type. + + true if the class type implements the given interface; otherwise, false. + + + +Gets the name of a member variable type. + + The zero-based index of the member variable to retrieve. + The name of the given member variable type. + + + +Gets a member variable type by name. + + The name of the member variable to retrieve. + The member variable type with the given name. + + + +Gets a member variable type by index. + + The zero-based index of the member variable to retrieve. + The member variable type at the given index. + + + +Gets an interface by index. + + The zero-based index of the interface to retrieve. + The interface at the given index. + + + +Gets the variable's sub type. + + + + +Gets the type of this variable's base class. + + + + +Gets the variable's description. + + + + +Initializes a new instance of the class. + + + + +Defines an interface that provides access to types of shader variables. + + ID3D11ShaderReflectionType + + + +Gets the reflected type of the shader variable. + + The reflected type of the shader variable. + + + +Gets the corresponding interface slot for a variable that represents an interface pointer. + + Index of the array element to get the slot number for. For a non-array variable this value will be zero. + The index of the interface in the interface array. + + + +Gets the shader variable's description. + + + + +Initializes a new instance of the class. + + + + +Defines an interface that provides access to the reflection data for a shader variable. + + ID3D11ShaderReflectionVariable + + + +Constructs a new exception object. + + The result code that caused this exception. + + + +Constructs a new exception object. + + The message describing the exception. + The exception that caused this exception. + + + +Constructs a new exception object. + + The message describing the exception. + + + +Constructs a new exception object. + + + + +Represents errors that occur in the D3DCompiler subsystem. + + + + +Initializes a new instance of the class. + + The device used to create the shader. + The compiled shader bytecode. + A dynamic class linkage interface. + + + +Initializes a new instance of the class. + + The device used to create the shader. + The compiled shader bytecode. + + + +Represents a hull shader. + + ID3D11HullShader + + + Applications use the methods of the MatrixStack class to manipulate a matrix stack. + ID3DXMatrixStack + + + +Alternate success value, indicating a successful but nonstandard completion (the precise meaning depends on context). + + This is a successful result. + S_FALSE + + + +Direct3D could not allocate sufficient memory to complete the call. + + This is a failed result. + E_OUTOFMEMORY + + + +An invalid parameter was passed to the returning function. + + This is a failed result. + E_INVALIDARG + + + +Represents a generic failure result. + + This is a successful result. + E_FAIL + + + +Represents the result of a successful operation. + + This is a successful result. + S_OK + + + +The last item cannot be deleted. + + This is a failed result. + D3DX10_ERR_CANNOT_REMOVE_LAST_ITEM + + + +A fragment with that name already exists. + + This is a failed result. + D3DX10_ERR_DUPLICATE_NAMED_FRAGMENT + + + +The mesh has no data. + + This is a failed result. + D3DX10_ERR_LOADED_MESH_HAS_NO_DATA + + + +The data is invalid. + + This is a failed result. + D3DX10_ERR_INVALID_DATA + + + +Too many influences specified. + + This is a failed result. + D3DX10_ERR_TOO_MANY_INFLUENCES + + + +Skinning is not supported. + + This is a failed result. + D3DX10_ERR_SKINNING_NOT_SUPPORTED + + + +Attribute sort is not supported as an optimization technique. + + This is a failed result. + D3DX10_ERR_CANNOT_ATTR_SORT + + + +The mesh is invalid. + + This is a failed result. + D3DX10_ERR_INVALID_MESH + + + +The index buffer cannot be modified. + + This is a failed result. + D3DX10_ERR_CANNOT_MODIFY_INDEX_BUFFER + + + +The previous blit operation that is transferring information to or from this surface is incomplete. + + This is a failed result. + D3DERR_WASSTILLDRAWING + + + +There are too many unique instances of a particular type of state object. + + This is a failed result. + D3D10_ERROR_TOO_MANY_UNIQUE_STATE_OBJECTS + + + +The file was not found. + + This is a failed result. + D3D10_ERROR_FILE_NOT_FOUND + + + +The method call is invalid. For example, a method's parameter may not be a valid pointer. + + This is a failed result. + D3DERR_INVALIDCALL + + + Defines result codes that are returned by Direct3D 10 functions. + HRESULT + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +The default value for initializing the variable. + + + + +Flags, which identify shader-variable properties. + + + + +Size of the variable (in bytes). + + + + +Offset from the start of the parent structure, to the beginning of the variable. + + + + +The variable name. + + + + +Describes a shader variable. + + D3D11_SHADER_VARIABLE_DESC + + + +Minimum gain. + + + + +Maximum gain. + + + + +Default gain. + + + + +Minimum bandwidth, in semitones. + + + + +Maximum bandwidth, in semitones. + + + + +Default bandwidth, in semitones. + + + + +Minimum center frequency, in hertz. + + + + +Maximum center frequency, in hertz. + + + + +Default center frequency, in hertz. + + + + +Gain, The default value is 0. + + + + +Bandwidth, in semitones. The default value is 12. + + + + +Center frequency, in hertz. This value cannot exceed one-third of the frequency of the buffer. The default value is 8000. + + + + +The SoundEffectParametricEqualizer object is used to set and retrieve effect parameters on a buffer that supports parametric equalizer effects. + + IDirectSoundFXParamEq + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Gets the adapter's unique identifier. + + + + +Gets the number of bytes of system memory shared with the CPU. + + + + +Gets the number of bytes of system memory not shared with the CPU. + + + + +Gets the number of bytes of video memory not shared with the CPU. + + + + +Gets the adapter's revision number. + + + + +Gets the adapter's subsystem ID. + + + + +Gets the adapter's device ID. + + + + +Gets the adapter's vendor ID. + + + + +Gets the adapter's description. + + + + +Describes various properties of an Adapter. + + DXGI_ADAPTER_DESC + + + +Constructs a new BlendState1 based on the specified description. If the description +is identical to that of an existing BlendState object, the existing BlendState object +is returned instead of a new instance. + + The device to associate the state object with + The state description. + The BlendState object. + + + +Gets the state's description. + + + + +A state object defining the behavior of the pixel-blending stage of the output merger. + + ID3D10BlendState1 + + + +Suspend execution of the calling thread until the next vertical blank signal. + + Zero based swap chain index to specify the target chain on a multihead card. + IDirect3DDevice9Ex::WaitForVBlank + + + +Resets the device. + + A set of new presentation parameters to apply to the device. + The properties of the desired display mode, when running fullscreen. + A Object describing the result of the operation. + IDirect3DDevice9Ex::ResetEx + + + +Resets the device. + + A set of new presentation parameters to apply to the device. + The properties of the desired display mode, when running fullscreen. + A Object describing the result of the operation. + IDirect3DDevice9Ex::ResetEx + + + +Resets the device. + + A set of new presentation parameters to apply to the device. + A Object describing the result of the operation. + IDirect3DDevice9Ex::ResetEx + + + +Retrieves the display mode's spatial resolution, color resolution, refresh frequency, and rotation settings. + + The swap chain to retrieve display mode data about. + Receives the rotation setting of the adapter. + Extended display mode information about the adapter. + IDirect3DDevice9Ex::GetDisplayModeEx + + + +Retrieves the display mode's spatial resolution, color resolution, and refresh frequency. + + The swap chain to retrieve display mode data about. + Extended display mode information about the adapter. + IDirect3DDevice9Ex::GetDisplayModeEx + + + +Checks an array of resources to determine if it is likely that they will cause a large stall at +Draw time because the system must make the resources GPU-accessible. + + An array of resources to check the residency status of. + See the DirectX documentation. + See the DirectX documentation. + IDirect3DDevice9Ex::CheckResourceResidency + + + +Checks a resource to determine if it is likely that it will cause a large stall at +Draw time because the system must make the resource GPU-accessible. + + An resource to check the residency status of. + See the DirectX documentation. + See the DirectX documentation. + IDirect3DDevice9Ex::CheckResourceResidency + + + +Reports the current cooperative-level status of the Direct3D device for a windowed or full-screen application. + + The destination window handle to check for occlusion. This parameter may be IntPtr.Zero + The current status of this device. + This method replaces the .TestCooperativeLevel function, +which always returns .Success in Direct3D 9Ex applications. + IDirect3DDevice9Ex::CheckDeviceState + + + +Initializes a new instance of the class. + + The Direct3D instance to create the device from. + Ordinal number that denotes the display adapter. + Denotes the desired device type. If the desired device type is not available, device creation will fail. + Specifies the target window for Direct3D rendering. + Combination of one or more options that control device creation. + Describes the presentation parameters for the device being created. + The display mode for when the device is set to fullscreen. + + + +Initializes a new instance of the class. + + The Direct3DEx instance to create the device from. + Ordinal number that denotes the display adapter. + Denotes the desired device type. If the desired device type is not available, device creation will fail. + Specifies the target window for Direct3D rendering. + Combination of one or more options that control device creation. + Describes the presentation parameters for the device being created. + + + +Initializes a new instance of the class. + + The Direct3D instance to create the device from. + Ordinal number that denotes the display adapter. + Denotes the desired device type. If the desired device type is not available, device creation will fail. + Specifies the target window for Direct3D rendering. + Combination of one or more options that control device creation. + Describes the presentation parameters for the device being created. + The display mode for when the device is set to fullscreen. + + + +Initializes a new instance of the class. + + The Direct3DEx instance to create the device from. + Ordinal number that denotes the display adapter. + Denotes the desired device type. If the desired device type is not available, device creation will fail. + Specifies the target window for Direct3D rendering. + Combination of one or more options that control device creation. + Describes the presentation parameters for the device being created. + + + +Applications use the methods of DeviceEx to render primitives, create resources, work with +system-level variables, adjust gamma ramp levels, work with palettes, and create shaders. + + IDirect3DDevice9Ex + + + +Get a structure member type by semantic. + + The semantic of the structure member type to retrieve. + The structure member type with the given semantic. + + + +Get a structure member type by name. + + The name of the structure member type to retrieve. + The structure member type with the given name. + + + +Get a structure member type by index. + + The zero-based index of the structure member type to retrieve. + The structure member type at the specified index. + + + +Get the semantic of a type member. + + The zero-based index of the structure member type to retrieve. + The semantic of the specified member. + + + +Get the name of a type member. + + The zero-based index of the structure member type to retrieve. + The name of the specified member. + + + +Initializes a new instance of the class. + + A pointer to the unmanaged interface. + + + +Indicates whether the type represents a valid interface. + + + + +Gets the effect type's description. + + + + +Represents the type of an effect variable. + + ID3DX11EffectType + + + +Reverts a previously set rasterizer state. + + Index into an array of rasterizer-state interfaces. If there is only one rasterizer-state interface, use 0. + A object describing the result of the operation. + + + +Gets the saved backing store description. + + Index into an array of rasterizer-state interfaces. If there is only one rasterizer-state interface, use 0. + The saved backing store description. + + + +Sets the rasterizer state for the variable. + + Index into an array of rasterizer-state interfaces. If there is only one rasterizer-state interface, use 0. + The rasterizer state to set. + A object describing the result of the operation. + + + +Gets the rasterizer state from the variable. + + Index into an array of rasterizer-state interfaces. If there is only one rasterizer-state interface, use 0. + The retrieved rasterizer state. + + + +Initializes a new instance of the class. + + A pointer to the unmanaged interface. + + + +Represents a rasterizer state effect variable. + + ID3DX11EffectRasterizerVariable + + + +Constructs a new rasterizer state based on the specified description. If the description +is identical to that of an existing RasterizerState object, the existing RasterizerState object +is returned instead of a new instance. + + The device used to create the state. + The state description. + The RasterizerState object. + + + +Gets the state's description. + + + + +A state object defining the behavior of the rasterizer stage. + + ID3D11RasterizerState + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Used if the variable has been explicitly bound using the register keyword. + + + + +Offset into containing cbuffer or tbuffer (always 0 for annotations or variables not in constant buffers). + + + + +Number of annotations on this variable. + + + + +Optional flags for effect variables. + + + + +Semantic string of this variable or structure member. + + + + +Name of this variable, annotation, or structure member. + + + + +Provides a description for effect variables. + + D3DX11_EFFECT_VARIABLE_DESC + + + +Gets or sets the class instance for the variable. + + + + +Initializes a new instance of the class. + + A pointer to the unmanaged interface. + + + +Represents a class instance effect variable. + + ID3DX11EffectInterfaceVariable + + + +Sets the value of the variable. + + An array of views to set. + The offset into the array to begin setting values. + The number of values to set. + A object describing the result of the operation. + + + +Sets the value of the variable. + + An array of views to set. + A object describing the result of the operation. + + + +Sets the value of the variable. + + The view of the depth-stencil surface to set. + A object describing the result of the operation. + + + +Gets an array of views of depth-stencil surfaces from the variable. + + An array of views to hold the retrieved values. + The offset into the array to begin storing values. + The number of values to get. + A object describing the result of the operation. + + + +Gets an array of views of depth-stencil surfaces from the variable. + + An array of views to hold the retrieved values. + A object describing the result of the operation. + + + +Gets the value of the variable. + + The view of the depth-stencil variable. + + + +Initializes a new instance of the class. + + A pointer to the unmanaged interface. + + + +Represents a depth-stencil view effect variable. + + ID3DX11EffectDepthStencilViewVariable + + + +Reverts a previously set depth-stencil state. + + Index into an array of depth-stencil interfaces. If there is only one depth-stencil interface, use 0. + A object describing the result of the operation. + + + +Gets the saved backing store description. + + Index into an array of depth-stencil interfaces. If there is only one depth-stencil interface, use 0. + The saved backing store description. + + + +Sets the depth-stencil state for the variable. + + Index into an array of depth-stencil interfaces. If there is only one depth-stencil interface, use 0. + The depth-stencil state to set. + A object describing the result of the operation. + + + +Gets the depth-stencil state from the variable. + + Index into an array of depth-stencil interfaces. If there is only one depth-stencil interface, use 0. + The retrieved depth-stencil state. + + + +Initializes a new instance of the class. + + A pointer to the unmanaged interface. + + + +Represents a depth-stencil state effect variable. + + ID3DX11EffectDepthStencilVariable + + + +Gets the class instance from the variable. + + + + +Initializes a new instance of the class. + + A pointer to the unmanaged interface. + + + +Represents a class instance effect variable. + + ID3DX11EffectClassInstanceVariable + + + +Reverts a previously set blend state. + + Index into an array of blend-state interfaces. If there is only one blend-state interface, use 0. + A object describing the result of the operation. + + + +Gets the saved backing store description. + + Index into an array of blend-state interfaces. If there is only one blend-state interface, use 0. + The saved backing store description. + + + +Sets the blend state for the variable. + + Index into an array of blend-state interfaces. If there is only one blend-state interface, use 0. + The blend state to set. + A object describing the result of the operation. + + + +Gets the blend state from the variable. + + Index into an array of blend-state interfaces. If there is only one blend-state interface, use 0. + The retrieved blend state. + + + +Initializes a new instance of the class. + + A pointer to the unmanaged interface. + + + +Represents a blend state effect variable. + + ID3DX11EffectBlendVariable + + + +Constructs a new BlendState based on the specified description. If the description +is identical to that of an existing BlendState object, the existing BlendState object +is returned instead of a new instance. + + The device with which to associate the state object. + The state description. + The newly created object. + + + +Gets the state's description. + + + + +A state object defining the behavior of the pixel-blending stage of the output merger. + + ID3D11BlendState + + + +Gets an array of string values from the variable. + + An array of strings to hold the retrieved values. + The offset into the array to begin storing values. + The number of values to get. + A object describing the result of the operation. + + + +Gets an array of string values from the variable. + + An array of strings to hold the retrieved values. + A object describing the result of the operation. + + + +Gets the value of the variable. + + A string representing the value of the variable. + + + +Initializes a new instance of the class. + + A pointer to the unmanaged interface. + + + +Represents a string effect variable. + + ID3DX11EffectStringVariable + + + +Gets the value of the variable as an array of floating points. + + The number of values to get. + The array of floating point values of the variable. + + + +Gets the value of the variable as an array of integers. + + The number of values to get. + The array of integer values of the variable. + + + +Gets the value of the variable as an array of booleans. + + The number of values to get. + The array of boolean values of the variable. + + + +Gets the value of the variable as a floating point. + + The floating point value of the scalar. + + + +Gets the value of the variable as an integer. + + The integer value of the scalar. + + + +Gets the value of the variable as a boolean. + + The boolean value of the scalar. + + + +Sets the value of the scalar variable. + + The array of floating point values to set. + A object describing the result of the operation. + + + +Sets the value of the scalar variable. + + The array of integer values to set. + A object describing the result of the operation. + + + +Sets the value of the scalar variable. + + The array of boolean values to set. + A object describing the result of the operation. + + + +Sets the value of the scalar variable. + + The floating point value to set. + A object describing the result of the operation. + + + +Sets the value of the scalar variable. + + The integer value to set. + A object describing the result of the operation. + + + +Sets the value of the scalar variable. + + The boolean value to set. + A object describing the result of the operation. + + + +Initializes a new instance of the class. + + A pointer to the unmanaged interface. + + + +Represents a scalar effect variable. + + ID3DX11EffectScalarVariable + + + +Transposes and sets the matrix value of the variable. + + An array of matrices to transpose and set. + The offset into the array to begin setting values. + The number of values to set. + A object describing the result of the operation. + + + +Transposes and sets the matrix value of the variable. + + An array of matrices to transpose and set. + A object describing the result of the operation. + + + +Transposes and sets the matrix value of the variable. + + The matrix value to transpose and set. + A object describing the result of the operation. + + + +Sets the value of the variable. + + An array of matrices to set. + The offset into the array to begin setting values. + The number of values to set. + A object describing the result of the operation. + + + +Sets the value of the variable. + + An array of matrices to set. + A object describing the result of the operation. + + + +Sets the value of the variable. + + The matrix value to set. + A object describing the result of the operation. + + + +Gets an array of transposed matrix values from the variable. + + An array of matrices to hold the retrieved transposed values. + The offset into the array to begin storing values. + The number of values to get. + A object describing the result of the operation. + + + +Gets an array of transposed matrix values from the variable. + + An array of matrices to hold the retrieved transposed values. + A object describing the result of the operation. + + + +Gets the transposed value of the variable. + + When the method completes, contains the transposed value of the variable. + A object describing the result of the operation. + + + +Gets the transposed value of the variable. + + The transposed matrix value of the variable. + + + +Gets an array of matrix values from the variable. + + An array of matrices to hold the retrieved values. + The offset into the array to begin storing values. + The number of values to get. + A object describing the result of the operation. + + + +Gets an array of matrix values from the variable. + + An array of matrices to hold the retrieved values. + A object describing the result of the operation. + + + +Gets the value of the variable. + + When the method completes, contains the value of the variable. + A object describing the result of the operation. + + + +Gets the value of the variable. + + The matrix value of the variable. + + + +Initializes a new instance of the class. + + A pointer to the unmanaged interface. + + + +Represents a matrix effect variable. + + ID3DX11EffectMatrixVariable + + + +Initializes a new instance of the class. + + + + + + + +3-D output is mapped into normal left and right stereo panning. At 90 degrees to the left, the sound is coming out of only the left speaker; at 90 degrees to the right, sound is coming out of only the right speaker. The vertical axis is ignored except for scaling of volume due to distance. Doppler shift and volume scaling are still applied, but the 3-D filtering is not performed on this buffer. This is the most efficient software implementation, but provides no virtual 3-D audio effect. + + + + +The 3-D API is processed with the efficient 3-D audio algorithm. This algorithm gives a good 3-D audio effect, but uses fewer CPU cycles than Guid3DAlgorithmHrtfFull + + + + +The 3-D API is processed with the high quality 3-D audio algorithm. This algorithm gives the highest quality 3-D audio effect, but uses more CPU cycles. + + + + +Default 3-D algorithm + + + + +Contains system-defined identifiers for DirectSound 3-D Algorithms. + + None + + + +Waves reverberation effect + + + + +Standard Parametric equalizer effect + + + + +Standard Environmental reverberation effect + + + + +Standard Gargle effect + + + + +Standard Flanger effect + + + + +Standard Echo effect + + + + +Standard Distortion effect + + + + +Standard Compressor effect + + + + +Standard Chorus effect + + + + +Contains system-defined identifiers for DirectSound sound effects. + + None + + + +System default noise suppression capture effect + + + + +System default acoustic echo cancellation capture effect + + + + +Microsoft noise suppression capture effect + + + + +Microsoft acoustic echo cancellation capture effect + + + + +Noise suppression capture effect + + + + +Acoustic echo cancellation capture effect. + + + + +Contains system-defined identifiers for DirectSound capture effects. + + None + + + +Voice playback device. + + + + +Voice capture device. + + + + +Default audio playback device. + + + + +Default audio capture device. + + + + +All objects. + + + + +Contains system-defined identifiers for DirectSound default playback and capture devices. + + None + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Clones the instance and returns a new object containing the same values. + + A new object containing the same values as the current instance. + + + +Occurs when the pixel format for a texture is invalid. + + This is a failed result. + D3DERR_WRONGTEXTUREFORMAT + + + +Occurs when a previous draw operation has not yet completed at the time of a new draw call. + + This is a failed result. + D3DERR_WASSTILLDRAWING + + + +Occurs when the device does not support the requested texture filter. + + This is a failed result. + D3DERR_UNSUPPORTEDTEXTUREFILTER + + + +Occurs when the device does not support the requested texture factor value. + + This is a failed result. + D3DERR_UNSUPPORTEDFACTORVALUE + + + +Occurs when the device does not support the requested color blending operation. + + This is a failed result. + D3DERR_UNSUPPORTEDCOLOROPERATION + + + +Occurs when the device not support the requested color blending argument. + + This is a failed result. + D3DERR_UNSUPPORTEDCOLORARG + + + +Occurs when the device does not support the requested alpha blending operation. + + This is a failed result. + D3DERR_UNSUPPORTEDALPHAOPERATION + + + +Occurs when the device does not support the requested alpha blending argument. + + This is a failed result. + D3DERR_UNSUPPORTEDALPHAARG + + + +Occurs when more texture-filtering operations are requested than the device can support. + + This is a failed result. + D3DERR_TOOMANYOPERATIONS + + + +Occurs when too many vertex influences are specified. + + This is a failed result. + D3DXERR_TOOMANYINFLUENCES + + + +Represents a generic success result. + + This is a successful result. + D3D_OK + + + +Occurs when skinning is not supported. + + This is a failed result. + D3DXERR_SKINNINGNOTSUPPORTED + + + +Occurs when the resource is resident in shared memory. + + This is a successful result. + S_RESIDENT_IN_SHARED_MEMORY + + + +Occurs when the presentation area is occluded. + + This is a successful result. + S_PRESENT_OCCLUDED + + + +Occurs when the desktop display mode changes. + + This is a successful result. + S_PRESENT_MODE_CHANGED + + + +Occurs when the driver runs out of video memory. + + This is a failed result. + D3DERR_OUTOFVIDEOMEMORY + + + +Occurs when the resource is not resident in memory. + + This is a successful result. + S_NOT_RESIDENT + + + +Occurs when the requested item cannot be found. + + This is a failed result. + D3DERR_NOTFOUND + + + +Occurs when the device does not support the queried technique. + + This is a failed result. + D3DERR_NOTAVAILABLE + + + +Occurs when a method succeeds but mipmaps could not be automatically generated. + + This is a successful result. + D3DOK_NOAUTOGEN + + + +Occurs when there is more data available than the specified buffer can hold. + + This is a failed result. + D3DERR_MOREDATA + + + +Occurs when a loaded mesh has no data. + + This is a failed result. + D3DXERR_LOADEDMESHASNODATA + + + +Occurs when an invalid mesh is passed. + + This is a failed result. + D3DXERR_INVALIDMESH + + + +Occurs when a requested device type is invalid. + + This is a failed result. + D3DERR_INVALIDDEVICE + + + +Occurs when passed data is invalid. + + This is a failed result. + D3DXERR_INVALIDDATA + + + +Occurs when an invalid method call is made. This is usually do to an invalid parameter. + + This is a failed result. + D3DERR_INVALIDCALL + + + +Represents a generic failure result. + + This is a failed result. + E_FAIL + + + +Occurs when a fragment with the specified name already exists. + + This is a failed result. + D3DXERR_DUPLICATENAMEDFRAGMENT + + + +Occurs when a driver internal error is thrown. + + This is a failed result. + D3DERR_DRIVERINTERNALERROR + + + +Occurs when a device is removed from the system. + + This is a failed result. + D3DERR_DEVICEREMOVED + + + +Occurs when a lost yet resettable device has not yet been reset. + + This is a failed result. + D3DERR_DEVICENOTRESET + + + +Occurs when a device is lost. + + This is a failed result. + D3DERR_DEVICELOST + + + +Occurs when a device is hung. + + This is a failed result. + D3DERR_DEVICEHUNG + + + +Occurs when two texture palettes conflict with each other. + + This is a failed result. + D3DERR_CONFLICTINGTEXTUREPALETTE + + + +Occurs when two set texture filters conflict with each other. + + This is a failed result. + D3DERR_CONFLICTINGTEXTUREFILTER + + + +Occurs when two set render states conflict with each other. + + This is a failed result. + D3DERR_CONFLICTINGRENDERSTATE + + + +Occurs when a user tries to remove the last item in a collection. + + This is a failed result. + D3DXERR_CANNOTREMOVELASTITEM + + + +Occurs when a user tries to modify an immutable index buffer. + + This is a failed result. + D3DXERR_CANNOTMODIFYINDEXBUFFER + + + +Occurs when attribute sorting is not supported as an optimization technique. + + This is a failed result. + D3DXERR_CANNOTATTRSORT + + + Defines result codes that are returned by Direct3D 9 functions. + HRESULT + + + +Reverts a previously set sampler state. + + Index into an array of sampler-state interfaces. If there is only one sampler-state interface, use 0. + A object describing the result of the operation. + + + +Gets the saved backing store description. + + Index into an array of sampler-state interfaces. If there is only one sampler-state interface, use 0. + The saved backing store description. + + + +Sets the sampler state for the variable. + + Index into an array of sampler-state interfaces. If there is only one sampler-state interface, use 0. + The sampler state to set. + A object describing the result of the operation. + + + +Gets the sampler state from the variable. + + Index into an array of sampler-state interfaces. If there is only one sampler-state interface, use 0. + The retrieved sampler state. + + + +Initializes a new instance of the class. + + A pointer to the unmanaged interface. + + + +Represents a sampler state effect variable. + + ID3DX11EffectSamplerVariable + + + +Describes an animation event. + + D3DXEVENT_DESC + + + +Describes an animation track and specifies blending weight, speed, and position for the track at a given time. + + D3DXTRACK_DESC + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Gets a structure describing available vibration features. + + + + +Gets a structure describing available gamepad features. + + + + +Gets the features of the controller. + + + + +Gets the controller subtype. + + + + +Gets the controller type. + + + + +Describes the capabilities of a controller. + + XINPUT_CAPABILITIES + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Gets or sets the right motor speed. + + +Valid values are in the range 0 to 65,535. Zero signifies no motor use; 65,535 signifies 100% motor use. + + + + +Gets or sets the left motor speed. + + +Valid values are in the range 0 to 65,535. Zero signifies no motor use; 65,535 signifies 100% motor use. + + + + +Specifies motor speed levels for the vibration function of a controller. + + +The left motor is the low-frequency rumble motor. The right motor is the high-frequency rumble motor. +The two motors are not the same, and they create different vibration effects. + + XINPUT_VIBRATION + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Flags that identifies other, less common resource options. + + + + +Flags that specify how the CPU may access the texture. + + + + +Flags that describe how the texture can be bound to the pipeline. + + + + +Value that identifies how the texture is to be read from and written to. + + + + +Format of the data in the texture. + + + + +The maximum number of mipmap levels in the texture. Use 1 for a multisampled texture; or 0 to generate a full set of subtextures. + + + + +Texture depth (in texels). + + + + +Texture height (in texels). + + + + +Texture width (in texels). + + + + +Describes a three-dimensional texture. + + D3D11_TEXTURE3D_DESC + + + +Saves a texture to a stream. + + The device used to save the texture. + The texture to save. + The format the texture will be saved as. + Destination memory stream where the image will be saved. + A object describing the result of the operation. + + + +Saves a texture to file. + + The device used to save the texture. + The texture to save. + The format the texture will be saved as. + Name of the destination output file where the texture will be saved. + A object describing the result of the operation. + + + +Loads a texture from a stream of data. + + The device used to load the texture. + A stream containing the image data to load. + Size of the image to load. + Specifies information used to load the texture. + The loaded texture object. + + + +Loads a texture from a stream of data. + + The device used to load the texture. + A stream containing the image data to load. + Size of the image to load. + The loaded texture object. + + + +Loads a texture from an image in memory. + + The device used to load the texture. + Array of memory containing the image data to load. + Specifies information used to load the texture. + The loaded texture object. + + + +Loads a texture from an image in memory. + + The device used to load the texture. + Array of memory containing the image data to load. + The loaded texture object. + + + +Loads a texture from an image file. + + The device used to load the texture. + Path to the file on disk. + Specifies information used to load the texture. + The loaded texture object. + + + +Loads a texture from an image file. + + The device used to load the texture. + Path to the file on disk. + The loaded texture object. + + + +Initializes a new instance of the class. + + The device with which to associate the texture. + The description of the texture. + An array of initial texture data for each subresource. + + + +Initializes a new instance of the class. + + The device with which to associate the texture. + The description of the texture. + The initial texture data. + + + +Initializes a new instance of the class. + + The device with which to associate the texture. + The description of the texture. + + + +Gets the texture description. + + + + +Represents a three-dimensional texture. + + ID3D11Texture3D + + + +Converts a height map into a normal map. The (x,y,z) components of each normal are mapped to the (r,g,b) channels of the output texture. + + The device used to create the normal map. + The source height map texture. + The destination texture. + One or more flags that control generation of normal maps. + One or more flag specifying the source of height information. + Constant value multiplier that increases (or decreases) the values in the normal map. Higher values usually make bumps more visible, lower values usually make bumps less visible. + A object describing the result of the operation. + + + +Saves a texture to a stream. + + The device used to save the texture. + The texture to save. + The format the texture will be saved as. + Destination memory stream where the image will be saved. + A object describing the result of the operation. + + + +Saves a texture to file. + + The device used to save the texture. + The texture to save. + The format the texture will be saved as. + Name of the destination output file where the texture will be saved. + A object describing the result of the operation. + + + +Loads a texture from a stream of data. + + The device used to load the texture. + A stream containing the image data to load. + Size of the image to load. + Specifies information used to load the texture. + The loaded texture object. + + + +Loads a texture from a stream of data. + + The device used to load the texture. + A stream containing the image data to load. + Size of the image to load. + The loaded texture object. + + + +Loads a texture from an image in memory. + + The device used to load the texture. + Array of memory containing the image data to load. + Specifies information used to load the texture. + The loaded texture object. + + + +Loads a texture from an image in memory. + + The device used to load the texture. + Array of memory containing the image data to load. + The loaded texture object. + + + +Loads a texture from an image file. + + The device used to load the texture. + Path to the file on disk. + Specifies information used to load the texture. + The loaded texture object. + + + +Loads a texture from an image file. + + The device used to load the texture. + Path to the file on disk. + The loaded texture object. + + + +Initializes a new instance of the class. + + The device with which to associate the texture. + The description of the texture. + An array of initial texture data for each subresource. + + + +Initializes a new instance of the class. + + The device with which to associate the texture. + The description of the texture. + The initial texture data. + + + +Initializes a new instance of the class. + + The device with which to associate the texture. + The description of the texture. + + + +Gets the texture description. + + + + +Represents a two-dimensional texture. + + ID3D11Texture2D + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Flags that identifies other, less common resource options. + + + + +Flags that specify how the CPU may access the texture. + + + + +Flags that describe how the texture can be bound to the pipeline. + + + + +Value that identifies how the texture is to be read from and written to. + + + + +Format of the data in the texture. + + + + +Number of textures in the array. + + + + +The maximum number of mipmap levels in the texture. Use 1 for a multisampled texture; or 0 to generate a full set of subtextures. + + + + +Texture width (in texels). + + + + +Describes a one-dimensional texture. + + D3D11_TEXTURE1D_DESC + + + +Saves a texture to a stream. + + The device used to save the texture. + The texture to save. + The format the texture will be saved as. + Destination memory stream where the image will be saved. + A object describing the result of the operation. + + + +Saves a texture to file. + + The device used to save the texture. + The texture to save. + The format the texture will be saved as. + Name of the destination output file where the texture will be saved. + A object describing the result of the operation. + + + +Loads a texture from a stream of data. + + The device used to load the texture. + A stream containing the image data to load. + Size of the image to load. + Specifies information used to load the texture. + The loaded texture object. + + + +Loads a texture from a stream of data. + + The device used to load the texture. + A stream containing the image data to load. + Size of the image to load. + The loaded texture object. + + + +Loads a texture from an image in memory. + + The device used to load the texture. + Array of memory containing the image data to load. + Specifies information used to load the texture. + The loaded texture object. + + + +Loads a texture from an image in memory. + + The device used to load the texture. + Array of memory containing the image data to load. + The loaded texture object. + + + +Loads a texture from an image file. + + The device used to load the texture. + Path to the file on disk. + Specifies information used to load the texture. + The loaded texture object. + + + +Loads a texture from an image file. + + The device used to load the texture. + Path to the file on disk. + The loaded texture object. + + + +Initializes a new instance of the class. + + The device with which to associate the texture. + The description of the texture. + An array of initial texture data for each subresource. + + + +Initializes a new instance of the class. + + The device with which to associate the texture. + The description of the texture. + The initial texture data. + + + +Initializes a new instance of the class. + + The device with which to associate the texture. + The description of the texture. + + + +Gets the texture description. + + + + +Represents a one-dimensional texture. + + ID3D11Texture1D + + + +Initializes a new instance of the class. + + The device used to create the predicate object. + The query description. + + + +Used to determine whether geometry should be processed depending on the results of a previous draw call. + + ID3D11Predicate + + + +Initializes a new instance of the class. + + The device used to create the query. + The query description. + + + +Gets the query's description. + + + + +Defines an interface for querying information from the GPU. + + ID3D11Query + + + Creates a for accessing resource data. + The device to use when creating this . + The resource that will serve as the depth-stencil surface. This surface must have been created with the DepthStencil flag. + A structure describing the to be created. + ID3D11Device::CreateDepthStencilView + + + Creates a for accessing resource data. + The device to use when creating this . + The resource that will serve as the depth-stencil surface. This surface must have been created with the DepthStencil flag. + ID3D11Device::CreateDepthStencilView + + + Gets a structure describing this . + ID3D11DepthStencilView::GetDesc + + + Accesses a texture resource during depth/stencil testing. + ID3D11DepthStencilView + + + +Sets the unordered resource views used by the compute shader stage. + + Index into the device's zero-based array to which to begin setting views. + Number of views from the source array to set. + An array of Append/Consume buffer offsets. A value of -1 indicates the current offset should be kept. Any other values set the hidden counter for that Appendable/Consumeable UAV. + + + +Sets a single unordered access view to be used by the compute shader stage. + + Index into the device's zero-based array to which to set the view. + Initial append/consume buffer offset. A value of -1 indicates the current offset should be kept. Any other values set the hidden counter for the UAV. + + + +Sets the unordered resource views used by the compute shader stage. + + Index into the device's zero-based array to which to begin setting views. + Number of views from the source array to set. + + + +Sets a single unordered access view to be used by the compute shader stage. + + Index into the device's zero-based array to which to set the view. + + + +Sets the shader resources used by the compute shader stage. + + Index into the device's zero-based array to which to begin setting shader resources. + Number of resources from the source array to set. + + + +Sets a single shader resource to be used by the compute shader stage. + + Index into the device's zero-based array to which to set the resource. + + + +Sets the sampler states used by the compute shader stage. + + Index into the device's zero-based array to which to begin setting samplers. + Number of samplers from the source array to set. + + + +Sets a single sampler to be used by the compute shader stage. + + Index into the device's zero-based array to which to set the sampler. + + + +Sets the constant buffers used by the compute shader stage. + + Index into the device's zero-based array to which to begin setting constant buffers. + Number of buffers from the source array to set. + + + +Sets a single constant buffer to be used by the compute shader stage. + + Index into the device's zero-based array to which to set the constant buffer. + + + +Gets the unordered resource views used by the compute shader stage. + + Index into the device's zero-based array from which to begin retrieving views. + Number of views to retrieve. + An array of unordered access views. + + + +Gets the shader resources used by the compute shader stage. + + Index into the device's zero-based array from which to begin retrieving shader resources. + Number of resources to retrieve. + An array of shader resources. + + + +Gets the sampler states used by the compute shader stage. + + Index into the device's zero-based array from which to begin retrieving samplers. + Number of samplers to retrieve. + An array of sampler states. + + + +Gets the constant buffers used by the compute shader stage. + + Index into the device's zero-based array from which to begin retrieving constant buffers. + Number of buffers to retrieve. + An array of constant buffers. + + + +Gets the compute shader currently assigned to the device. + + An array that will be used to contain any class instances currently active. + The compute shader (null if no shader is assigned). + + + +Gets the compute shader currently assigned to the device. + + The compute shader (null if no shader is assigned). + + + +Assigns a compute shader to the device. + + The shader to assign to the device. Assign null to disable the compute shader. + An array of class-instance interfaces. Each interface used by a shader must have a corresponding class instance or the shader will get disabled. + + + +Assigns a compute shader to the device. + + The shader to assign to the device. Assign null to disable the compute shader. + + + +Defines a wrapper for compute shader related commands on the device. + + + + +Sets the shader resources used by the hull shader stage. + + Index into the device's zero-based array to which to begin setting shader resources. + Number of resources from the source array to set. + + + +Sets a single shader resource to be used by the hull shader stage. + + Index into the device's zero-based array to which to set the resource. + + + +Sets the sampler states used by the hull shader stage. + + Index into the device's zero-based array to which to begin setting samplers. + Number of samplers from the source array to set. + + + +Sets a single sampler to be used by the hull shader stage. + + Index into the device's zero-based array to which to set the sampler. + + + +Sets the constant buffers used by the hull shader stage. + + Index into the device's zero-based array to which to begin setting constant buffers. + Number of buffers from the source array to set. + + + +Sets a single constant buffer to be used by the hull shader stage. + + Index into the device's zero-based array to which to set the constant buffer. + + + +Gets the shader resources used by the hull shader stage. + + Index into the device's zero-based array from which to begin retrieving shader resources. + Number of resources to retrieve. + An array of shader resources. + + + +Gets the sampler states used by the hull shader stage. + + Index into the device's zero-based array from which to begin retrieving samplers. + Number of samplers to retrieve. + An array of sampler states. + + + +Gets the constant buffers used by the hull shader stage. + + Index into the device's zero-based array from which to begin retrieving constant buffers. + Number of buffers to retrieve. + An array of constant buffers. + + + +Gets the hull shader currently assigned to the device. + + An array that will be used to contain any class instances currently active. + The hull shader (null if no shader is assigned). + + + +Gets the hull shader currently assigned to the device. + + The hull shader (null if no shader is assigned). + + + +Assigns a hull shader to the device. + + The shader to assign to the device. Assign null to disable the hull shader. + An array of class-instance interfaces. Each interface used by a shader must have a corresponding class instance or the shader will get disabled. + + + +Assigns a hull shader to the device. + + The shader to assign to the device. Assign null to disable the hull shader. + + + +Defines a wrapper for hull shader related commands on the device. + + + + +Sets the shader resources used by the geometry shader stage. + + Index into the device's zero-based array to which to begin setting shader resources. + Number of resources from the source array to set. + + + +Sets a single shader resource to be used by the geometry shader stage. + + Index into the device's zero-based array to which to set the resource. + + + +Sets the sampler states used by the geometry shader stage. + + Index into the device's zero-based array to which to begin setting samplers. + Number of samplers from the source array to set. + + + +Sets a single sampler to be used by the geometry shader stage. + + Index into the device's zero-based array to which to set the sampler. + + + +Sets the constant buffers used by the geometry shader stage. + + Index into the device's zero-based array to which to begin setting constant buffers. + Number of buffers from the source array to set. + + + +Sets a single constant buffer to be used by the geometry shader stage. + + Index into the device's zero-based array to which to set the constant buffer. + + + +Gets the shader resources used by the geometry shader stage. + + Index into the device's zero-based array from which to begin retrieving shader resources. + Number of resources to retrieve. + An array of shader resources. + + + +Gets the sampler states used by the geometry shader stage. + + Index into the device's zero-based array from which to begin retrieving samplers. + Number of samplers to retrieve. + An array of sampler states. + + + +Gets the constant buffers used by the geometry shader stage. + + Index into the device's zero-based array from which to begin retrieving constant buffers. + Number of buffers to retrieve. + An array of constant buffers. + + + +Gets the geometry shader currently assigned to the device. + + An array that will be used to contain any class instances currently active. + The geometry shader (null if no shader is assigned). + + + +Gets the geometry shader currently assigned to the device. + + The geometry shader (null if no shader is assigned). + + + +Assigns a geometry shader to the device. + + The shader to assign to the device. Assign null to disable the geometry shader. + An array of class-instance interfaces. Each interface used by a shader must have a corresponding class instance or the shader will get disabled. + + + +Assigns a geometry shader to the device. + + The shader to assign to the device. Assign null to disable the geometry shader. + + + +Defines a wrapper for geometry shader related commands on the device. + + + + +Sets the shader resources used by the pixel shader stage. + + Index into the device's zero-based array to which to begin setting shader resources. + Number of resources from the source array to set. + + + +Sets a single shader resource to be used by the pixel shader stage. + + Index into the device's zero-based array to which to set the resource. + + + +Sets the sampler states used by the pixel shader stage. + + Index into the device's zero-based array to which to begin setting samplers. + Number of samplers from the source array to set. + + + +Sets a single sampler to be used by the pixel shader stage. + + Index into the device's zero-based array to which to set the sampler. + + + +Sets the constant buffers used by the pixel shader stage. + + Index into the device's zero-based array to which to begin setting constant buffers. + Number of buffers from the source array to set. + + + +Sets a single constant buffer to be used by the pixel shader stage. + + Index into the device's zero-based array to which to set the constant buffer. + + + +Gets the shader resources used by the pixel shader stage. + + Index into the device's zero-based array from which to begin retrieving shader resources. + Number of resources to retrieve. + An array of shader resources. + + + +Gets the sampler states used by the pixel shader stage. + + Index into the device's zero-based array from which to begin retrieving samplers. + Number of samplers to retrieve. + An array of sampler states. + + + +Gets the constant buffers used by the pixel shader stage. + + Index into the device's zero-based array from which to begin retrieving constant buffers. + Number of buffers to retrieve. + An array of constant buffers. + + + +Gets the pixel shader currently assigned to the device. + + An array that will be used to contain any class instances currently active. + The pixel shader (null if no shader is assigned). + + + +Gets the pixel shader currently assigned to the device. + + The pixel shader (null if no shader is assigned). + + + +Assigns a pixel shader to the device. + + The shader to assign to the device. Assign null to disable the pixel shader. + An array of class-instance interfaces. Each interface used by a shader must have a corresponding class instance or the shader will get disabled. + + + +Assigns a pixel shader to the device. + + The shader to assign to the device. Assign null to disable the pixel shader. + + + +Defines a wrapper for pixel shader related commands on the device. + + + + +Sets the shader resources used by the vertex shader stage. + + Index into the device's zero-based array to which to begin setting shader resources. + Number of resources from the source array to set. + + + +Sets a single shader resource to be used by the vertex shader stage. + + Index into the device's zero-based array to which to set the resource. + + + +Sets the sampler states used by the vertex shader stage. + + Index into the device's zero-based array to which to begin setting samplers. + Number of samplers from the source array to set. + + + +Sets a single sampler to be used by the vertex shader stage. + + Index into the device's zero-based array to which to set the sampler. + + + +Sets the constant buffers used by the vertex shader stage. + + Index into the device's zero-based array to which to begin setting constant buffers. + Number of buffers from the source array to set. + + + +Sets a single constant buffer to be used by the vertex shader stage. + + Index into the device's zero-based array to which to set the constant buffer. + + + +Gets the shader resources used by the vertex shader stage. + + Index into the device's zero-based array from which to begin retrieving shader resources. + Number of resources to retrieve. + An array of shader resources. + + + +Gets the sampler states used by the vertex shader stage. + + Index into the device's zero-based array from which to begin retrieving samplers. + Number of samplers to retrieve. + An array of sampler states. + + + +Gets the constant buffers used by the vertex shader stage. + + Index into the device's zero-based array from which to begin retrieving constant buffers. + Number of buffers to retrieve. + An array of constant buffers. + + + +Gets the vertex shader currently assigned to the device. + + An array that will be used to contain any class instances currently active. + The vertex shader (null if no shader is assigned). + + + +Gets the vertex shader currently assigned to the device. + + The vertex shader (null if no shader is assigned). + + + +Assigns a vertex shader to the device. + + The shader to assign to the device. Assign null to disable the vertex shader. + An array of class-instance interfaces. Each interface used by a shader must have a corresponding class instance or the shader will get disabled. + + + +Assigns a vertex shader to the device. + + The shader to assign to the device. Assign null to disable the vertex shader. + + + +Defines a wrapper for vertex shader related commands on the device. + + + + +Gets the set of scissor rectangles currently bound to the rasterizer stage. + + An array of bound scissor rectangles. + + + +Gets the set of scissor rectangles currently bound to the rasterizer stage. + + The array to fill with the bound scissor rectangles. + + + +Binds a set of scissor rectangles to the rasterizer stage. + + The set of scissor rectangles to bind. + + + +Binds a single scissor rectangle to the rasterizer stage. + + The scissor rectangle to bind. + + + +Gets the set of viewports currently bound to the rasterizer stage. + + An array of bound viewports. + + + +Gets the set of viewports currently bound to the rasterizer stage. + + The array to fill with the bound viewports. + + + +Binds a set of viewports to the rasterizer stage. + + The set of viewports to bind. + + + +Binds a single viewport to the rasterizer stage. + + The viewport to bind. + + + +Gets or sets the rasterizer state for the rasterizer stage of the pipeline. + + + + +Defines a wrapper for rasterizer related commands on the device. + + + + +Gets the target output buffers currently set for the stream-output stage. + + The number of targets to retrieve. + An array of stream output target buffers. + + + +Sets the target output buffers for the stream-output stage of the pipeline. + + A set of stream output buffer bindings to set. + + + +Defines a wrapper for stream-output related commands on the device. + + + + +Gets the set of currently bound unordered access views. + + Zero-based index of the first unordered access view to retrieve. + The number of views to retrieve. + An array of bound unordered access views. + + + +Gets the set of currently bound render target views. + + The number of render target views to retrieve. + An array of bound render target views. + + + +Gets the currently bound depth-stencil view. + + The currently bound depth-stencil view. + + + +Binds a depth-stencil buffer, a set of unordered access views, and a set of render targets to the output-merger stage. + + A view of the depth-stencil buffer to bind. + Index into a zero-based array to begin setting unordered access views. + A set of unordered access views to bind. + A set of render target views to bind. + An array of Append/Consume buffer offsets. A value of -1 indicates the current offset should be kept. Any other values set the hidden counter for that Appendable/Consumeable UAV. + + + +Binds a set of unordered access views and a set of render targets to the output-merger stage. + + Index into a zero-based array to begin setting unordered access views. + A set of unordered access views to bind. + A set of render target views to bind. + An array of Append/Consume buffer offsets. A value of -1 indicates the current offset should be kept. Any other values set the hidden counter for that Appendable/Consumeable UAV. + + + +Binds a depth-stencil buffer, a set of unordered access views, and a single render target to the output-merger stage. + + A view of the depth-stencil buffer to bind. + Index into a zero-based array to begin setting unordered access views. + A set of unordered access views to bind. + A view of the render target to bind. + An array of Append/Consume buffer offsets. A value of -1 indicates the current offset should be kept. Any other values set the hidden counter for that Appendable/Consumeable UAV. + + + +Binds a set of unordered access views and a single render target to the output-merger stage. + + Index into a zero-based array to begin setting unordered access views. + A set of unordered access views to bind. + A view of the render target to bind. + An array of Append/Consume buffer offsets. A value of -1 indicates the current offset should be kept. Any other values set the hidden counter for that Appendable/Consumeable UAV. + + + +Binds a depth-stencil buffer, a set of unordered access views, and a set of render targets to the output-merger stage. + + A view of the depth-stencil buffer to bind. + Index into a zero-based array to begin setting unordered access views. + A set of unordered access views to bind. + A set of render target views to bind. + + + +Binds a set of unordered access views and a set of render targets to the output-merger stage. + + Index into a zero-based array to begin setting unordered access views. + A set of unordered access views to bind. + A set of render target views to bind. + + + +Binds a depth-stencil buffer, a set of unordered access views, and a single render target to the output-merger stage. + + A view of the depth-stencil buffer to bind. + Index into a zero-based array to begin setting unordered access views. + A set of unordered access views to bind. + A view of the render target to bind. + + + +Binds a set of unordered access views and a single render target to the output-merger stage. + + Index into a zero-based array to begin setting unordered access views. + A set of unordered access views to bind. + A view of the render target to bind. + + + +Binds a depth-stencil buffer and a set of render targets to the output-merger stage. + + A view of the depth-stencil buffer to bind. + A set of render target views to bind. + + + +Binds a set of render targets to the output-merger stage. + + A set of render target views to bind. + + + +Binds a depth-stencil buffer and a single render target to the output-merger stage. + + A view of the depth-stencil buffer to bind. + A view of the render target to bind. + + + +Binds a single render target to the output-merger stage. + + A view of the render target to bind. + + + +Gets or sets the blending mask. + + + + +Gets or sets the blend factor color. + + + + +Gets or sets the blend state of the output-merger stage. + + + + +Gets or sets the depth-stencil reference value. + + + + +Gets the depth-stencil state of the output-merger stage. + + + + +Defines a wrapper for output-merger related commands on the device. + + + + +Gets the initialization flags used to create the associated device context. + + + + +Encapsulates a list of graphics commands for future play back. + + ID3D11CommandList + + + +Sets an array of shader resource values. + + An array of resource views to set. + The offset into the array to begin setting values. + The number of values to set. + A object describing the result of the operation. + + + +Sets an array of shader resource values. + + An array of resource views to set. + A object describing the result of the operation. + + + +Sets the value of the shader resource. + + A view of the resource to set. + A object describing the result of the operation. + + + +Gets an array of resource views from the variable. + + An array of resource views to hold the retrieved shader resources. + The offset into the array to begin storing values. + The number of values to get. + A object describing the result of the operation. + + + +Gets an array of resource views from the variable. + + An array of resource views to hold the retrieved shader resources. + A object describing the result of the operation. + + + +Gets the value of the variable. + + A view of the shader resource. + + + +Initializes a new instance of the class. + + A pointer to the unmanaged interface. + + + +Represents a shader resource effect variable. + + ID3DX11EffectShaderResourceVariable + + + +Minimum point at which compression begins, in decibels, in decibels (dB). + + + + +Maximum point at which compression begins, in decibels, in decibels (dB). + + + + +Default point at which compression begins, in decibels, in decibels (dB). The default value is -20 dB. + + + + +Minimum speed at which compression is stopped after input drops below Threshold, in miliseconds. + + + + +Maximum speed at which compression is stopped after input drops below Threshold, in miliseconds. + + + + +Default speed at which compression is stopped after input drops below Threshold, in miliseconds. The default value is 200 ms. + + + + +Minimum compression ratio. + + + + +Maximum compression ratio. + + + + +Default compression ratio. The default value is 3, which means 3:1 compression. + + + + +Minimum time after threshold is reached before attack phase is started, in milliseconds. + + + + +Maximum time after threshold is reached before attack phase is started, in milliseconds. + + + + +Default time after threshold is reached before attack phase is started, in milliseconds. The default value is 4 ms. + + + + +Minimum output gain of signal after compression, in decibels (dB). + + + + +Maximum output gain of signal after compression, in decibels (dB). + + + + +Default output gain of signal after compression, in decibels (dB). The default value is 0 dB. + + + + +Minimum time before compression reaches its full value, in decibels (dB). + + + + +Maximum time before compression reaches its full value, in decibels (dB). + + + + +Default time before compression reaches its full value, in decibels (dB). The default value is 10 ms. + + + + +Point at which compression begins, in decibels. + + + + +Compression ratio. The default value is 3, which means 3:1 compression. + + + + +Time after Threshold is reached before attack phase is started, in milliseconds. + + + + +Speed at which compression is stopped after input drops below Threshold. + + + + +Output gain of signal after compression. + + + + +Time before compression reaches its full value. + + + + +The SoundEffectCompressor object is used to set and retrieve effect parameters on a buffer that supports compression. + + IDirectSoundFXCompressor + + + +Determines whether the specified object instances are considered equal. + + + + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Initializes a new instance of the structure. + + The X component. + The Y component. + The Z component. + + + +Initializes a new instance of the structure. + + The value to set for the X, Y, and Z components. + + + +Gets or sets the Z component of the vector. + + The Z component of the vector. + + + +Gets or sets the Y component of the vector. + + The Y component of the vector. + + + +Gets or sets the X component of the vector. + + The X component of the vector. + + + +Defines a three component vector, using half precision floating point coordinates. + + D3DXVECTOR3_16F + + + +Creates an instance of the type that this is associated with, using the specified context, given a set of property values for the object. + + A that provides a format context. + An that specifies the type of array for which to get properties. + An array of type that is used as a filter. + A with the properties that are exposed for this data type, or a null reference (Nothing in Visual Basic) if there are no properties. + + + +Returns whether this object supports properties, using the specified context. + + A that provides a format context. + + true if GetProperties should be called to find the properties of this object; otherwise, false. + + + +Creates an instance of the type that this is associated with, using the specified context, given a set of property values for the object. + + A that provides a format context. + An of new property values. + An representing the given , or null if the object cannot be created. + + + +Returns whether changing a value on this object requires a call to System::ComponentModel::TypeConverter::CreateInstance(System::Collections::IDictionary^) +to create a new value, using the specified context. + + A that provides a format context. + + false if changing a property on this object requires a call to System.ComponentModel::TypeConverter::CreateInstance(System::Collections::IDictionary^) to create a new value; otherwise, false. + + + +Converts the given object to the type of this converter, using the specified context and culture information. + + A that provides a format context. + A . If null is passed, the current culture is assumed. + The to convert. + An that represents the converted value. + + + +Converts the given value object to the specified type, using the specified context and culture information. + + A that provides a format context. + A . If null is passed, the current culture is assumed. + The to convert. + A that represents the type you want to convert to. + An that represents the converted value. + + + +Returns whether this converter can convert an object of the given type to the type of this converter, using the specified context. + + A that provides a format context. + A System.Type that represents the type you want to convert from. + + true if this converter can perform the conversion; otherwise, false. + + + +Returns whether this converter can convert the object to the specified type, using the specified context. + + A that provides a format context. + A that represents the type you want to convert to. + + true if this converter can perform the conversion; otherwise, false. + + + +Initializes a new instance of the class. + + + + +Provides a type converter to convert objects to and from various +other representations. + + + + +Performs a segmented scan of a sequence. + + The type of element in the sequence. + The binary operation to perform. + Size of scan in elements. + Input sequence on the device. Set and to the same value for in-place scans. + Compact array of bits with one bit per element of . A set value indicates the start of a new segment. + Output sequence on the device. + A object describing the result of the operation. + + + +Sets the scan direction. + + The direction in which to perform the scans. + A object describing the result of the operation. + + + +Initializes a new instance of the class. + + The device context with which to associate the scan object. + Maximum single scan size, in elements. + + + +Represents a segmented scan context. + + ID3DX11SegmentedScan + + + +Returns a value indicating whether the two viewports are equivalent. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Returns a value indicating whether this instance is equal to the specified object. + + A to compare with this instance. + + true if has the same value as this instance; otherwise, false. + + + +Returns a value indicating whether this instance is equal to the specified object. + + An object to compare with this instance. + + true if has the same value as this instance; otherwise, false. + + + +Returns the hash code for this instance. + + A 32-bit signed floateger hash code. + + + +Converts the value of the viewport to its equivalent string representation. + + The string representation of the value of this instance. + + + +Tests for inequality between two viewports. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two viewports. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Initializes a new instance of the structure. + + The X coordinate of the viewport. + The Y coordinate of the viewport. + The width of the viewport. + The height of the viewport. + The minimum Z distance of the viewport. + The maximum Z distance of the viewport. + + + +Initializes a new instance of the structure. + + The X coordinate of the viewport. + The Y coordinate of the viewport. + The width of the viewport. + The height of the viewport. + + + +Gets or sets the viewport's maximum Z depth. + + + + +Gets or sets the viewport's minimum Z depth. + + + + +Gets or sets the viewport's height. + + + + +Gets or sets the viewport's width. + + + + +Gets or sets the viewport's Y position. + + + + +Gets or sets the viewport's X position. + + + + +Defines a rectangular region of a render-target surface onto which 3D rendering is projected. + + D3D11_VIEWPORT + + + +Returns a value indicating whether the two BufferDescriptions are equivalent. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Returns a value indicating whether this instance is equal to the specified object. + + A to compare with this instance. + + true if has the same value as this instance; otherwise, false. + + + +Returns a value indicating whether this instance is equal to the specified object. + + An object to compare with this instance. + + true if has the same value as this instance; otherwise, false. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two StreamOutputStatisticss. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two StreamOutputStatisticss. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Number of primitives that would have been written to the stream-output buffers if there had been enough space for them all. + + + + +Number of primitives (that is, points, lines, and triangles) written to the stream-output buffers. + + + + +Contains query information about the the amount of data streamed out to the stream-output buffers. + + D3D11_QUERY_DATA_SO_STATISTICS + + + +Initializes a new instance of the class. + + The message describing the exception. + The exception that caused this exception. + + + +Initializes a new instance of the class. + + The message describing the exception. + + + +Initializes a new instance of the class. + + + + +Number of texture writes in a compute shader. + + + + +Number of interlocked instructions in a compute shader. + + + + +Number of barrier instructions in a compute shader. + + + + +The tessellator domain. + + + + +The tessellator partitioning mode. + + + + +The tessellator output-primitive type. + + + + +Number of control points in the hull shader and domain shader. + + + + +Number of geometry shader instances. + + + + +Number of parameters in the patch-constant signature. + + + + +The geometry shader/hull shader input primitive. + + + + +Geometry shader maximum output vertex count. + + + + +The output topology of the geometry shader. + + + + +Number of emit instructions used. + + + + +Number of cut instructions used. + + + + +Number of array instructions used. + + + + +Number of macro instructions used. + + + + +Number of dynamic flow control instructions used. + + + + +Number of static flow control instructions used. + + + + +Number of unsigned integer arithmetic instructions used. + + + + +Number of signed integer arithmetic instructions used. + + + + +Number of floating point arithmetic instructions used. + + + + +Number of texture gradient instructions. + + + + +Number of texture bias instructions. + + + + +Number of texture comparison instructions. + + + + +Number of texture load instructions. + + + + +Number of non-categorized texture instructions. + + + + +Number of declarations (input + output). + + + + +Number of constant defines. + + + + +Number of temporary arrays used. + + + + +The number of temporary registers in the compiled shader. + + + + +The number of intermediate-language instructions in the compiled shader. + + + + +The number of parameters in the output signature. + + + + +The number of parameters in the input signature. + + + + +The number of resource (textures and buffers) bound to a shader. + + + + +The number of shader-constant buffers. + + + + +Shader compilation/parse flags. + + + + +The name of the originator of the shader. + + + + +Shader version type. + + + + +Provides a description for a shader. + + D3D11_SHADER_DESC + + + Describes an off-screen render target used by . +D3DXRTE_DESC + + +Marks a series of frames with the specified color and name in the PIXRun file. +This function is not currently supported by PIX. + + Event color. This is the color used to display the event in the event view. + Event name. + + + +Sets profiler options specified by the target platform. + + + + +Marks an instantaneous event. PIX can use this event to trigger an action. + + Event color. This is the color used to display the event in the event view. + Event name. + + + +Determined whether a performance profiler is requesting that the current frame be resubmitted to +Direct3D for performance analysis. This function is not currently supported by PIX. + + + true if the caller should repeate the same sequence of calls; otherwise, false. + + + +Determines the current state of the profiler from the target program. + + + true when PIX is profiling the target program; otherwise, false. + + + +Marks the end of a user-defined event. PIX can use this event to trigger an action. + + +The zero-based level of the hierarchy in which the event is ending. If an error occurs, +the return value will be negative. + + + + +Marks the beginning of a user-defined event. PIX can use this event to trigger an action. + + Event color. This is the color used to display the event in the event view. + Event name. + +The zero-based level of the hierarchy that this event is starting in. If an error occurs, +the return value will be negative. + + + + +Provides access to the Direct3D performance API, which allows applications to gather performance +data and integrate with PIX for Windows in order to perform detailed analysis. + + D3DPERF + + + +Represents a generic failure result. + + This is a failed result. + E_FAIL + + + +Represents the result of a successful operation. + + This is a successful result. + ERROR_SUCCESS + + + +Occurs when the result of an operation is an empty set. + + This is a failed result. + ERROR_EMPTY + + + +Occurs when the desired controller is not connected to the system. + + This is a failed result. + ERROR_DEVICE_NOT_CONNECTED + + + Defines result codes that are returned by XInput functions. + HRESULT + + + +Gets the geometry shader assigned to the device. + + The geometry shader (null if no shader is assigned). + + + +Assigns a geometry shader to the device. + + The shader to assign to the device. Assign null to disable the geometry shader. + + + +Gets the pixel shader assigned to the device. + + The pixel shader (null if no shader is assigned). + + + +Assigns a pixel shader to the device. + + The shader to assign to the device. Assign null to disable the pixel shader. + + + +Returns a value indicating whether the two viewports are equivalent. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Returns a value indicating whether this instance is equal to the specified object. + + A to compare with this instance. + + true if has the same value as this instance; otherwise, false. + + + +Returns a value indicating whether this instance is equal to the specified object. + + An object to compare with this instance. + + true if has the same value as this instance; otherwise, false. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Converts the value of the viewport to its equivalent string representation. + + The string representation of the value of this instance. + + + +Tests for inequality between two viewports. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two viewports. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Initializes a new instance of the structure. + + The X coordinate of the viewport. + The Y coordinate of the viewport. + The width of the viewport. + The height of the viewport. + The minimum Z distance of the viewport. + The maximum Z distance of the viewport. + + + +Initializes a new instance of the structure. + + The X coordinate of the viewport. + The Y coordinate of the viewport. + The width of the viewport. + The height of the viewport. + + + +Gets or sets the viewport's maximum Z depth. + + + + +Gets or sets the viewport's minimum Z depth. + + + + +Gets or sets the viewport's height. + + + + +Gets or sets the viewport's width. + + + + +Gets or sets the viewport's Y position. + + + + +Gets or sets the viewport's X position. + + + + +Defines a rectangular region of a render-target surface onto which +a 3D rendering is projected. + + D3D10_VIEWPORT + + + +Constructs a new Predicate object. + + The device to associate the predicate with. + The query description. + + + +Constructs a new Query object. + + The device to associate the query with. + The query description. + + + +Gets the query's description. + + + + +Retrieves data from the GPU asychronously. + + Flags indicating how the data should be retrieved. + The data. + + + +Retrieves data from the GPU asychronously. + + The data. + + + +Marks the end of a series of asynchronous commands. + + + + +Marks the start of a series of asynchronous commands. + + + + +Gets a value indicating whether or not data is available for consumption. + + + + +Base class for objects that perform asynchronous GPU data access. + + ID3D10Asynchronous + + + +Creates a new Direct3D 10.1 device and swap chain. + + The display adapter to associate the device with when creating a hardware device. + The device driver type. + Flags that indicate which device API layers to enable. + Swap chain properties. + The newly-created device. + The newly-created swap chain. + A result code. + + + +Constructs a new Device object. + + The display adapter to associate the device with when creating a hardware device. + The device driver type. + Flags that indicate which device API layers to enable. + + + +Constructs a new Device1 object. + + The device driver type. + Flags that indicate which device API layers to enable. + + + +Constructs a new Device1 object. + + Flags that indicate which device API layers to enable. + D + + + +A virtual adapter for performing rendering operations, using Direct3D 10.1. + + ID3D10Device1 + + + Identifies the type of the resource that will be viewed. + D3D10_1_SRV_DIMENSION + + + +Specifies possible levels of hardware acceleration features. + + D3D10_FEATURE_LEVEL1 + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Offset, in bytes, between the start of the parent structure and this variable. + + + + +Number of members in the structure; otherwise 0. + + + + +Number of elements in an array; otherwise 0. + + + + +Number of columns in a matrix. Otherwise a numeric type returns 1, any other type returns 0. + + + + +Number of rows in a matrix. Otherwise a numeric type returns 1, any other type returns 0. + + + + +The variable type. + + + + +Identifies the variable class as one of scalar, vector, matrix or object. + + + + +Describes a shader-variable type. + + D3D11_SHADER_TYPE_DESC + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +A brief description of the counter. + + + + +The name of the units the counter measures. + + + + +The name of the counter. + + + + +The number of hardware counters needed for the desired counter type to be created. All instances of the same counter type use the same hardware counters. + + + + +The data type of the counter. + + + + +Contains the results of a request for counter information. + + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Number of detectable parallel units that the counter is able to discern. Values are 1 - 4. + + + + +Number of counters that can be simultaneously supported. + + + + +The largest device-dependent counter ID that the device supports. If none are supported, this value will be 0. + + + + +Contains information about the video card's performance counter capabilities. + + D3D11_COUNTER_INFO + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Clones the instance and returns a new object containing the same values. + + A new object containing the same values as the current instance. + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Clones the instance and returns a new object containing the same values. + + A new object containing the same values as the current instance. + + + +Constructs a new BlendState based on the specified description. If the description +is identical to that of an existing BlendState object, the existing BlendState object +is returned instead of a new instance. + + The device to associate the state object with + The state description. + The BlendState object. + + + +Gets the state's description. + + + + +A state object defining the behavior of the pixel-blending stage of the output merger. + + ID3D10BlendState + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +The number of depth slices. + + + + +The zero-based index of the first depth slice to be accessed. + + + + +The number of slices in the array. + + + + +The zero-based index of the first array slice to be accessed. + + + + +The mipmap slice index. + + + + +View options for the resource. + + + + +The number of elements in the resource. For structured buffers, this is the number of structures in the buffer. + + + + +The zero-based index of the first element to be accessed. + + + + +The resource type, which specifies how the resource will be accessed. + + + + +The format of the data in the unordered access buffer. + + + + +Provides a description for an unordered access view. + + D3D11_SHADER_RESOURCE_VIEW_DESC + + + D3DXFresnelTerm + + + +Verifies that the compiled version of D3DX matches the runtime version of D3DX. + + + true if the versions match; otherwise, false. + D3DXCheckVersion + + + Generates an optimized vertex remapping for a triangle list. + D3DXOptimizeFaces + + + Generates an optimized vertex remapping for a triangle list. + D3DXOptimizeFaces + + + Generates an optimized face remapping for a triangle list. + D3DXOptimizeFaces + + + Generates an optimized face remapping for a triangle list. + D3DXOptimizeFaces + + + Turns on or off all D3DX debug output. + D3DXDebugMute + + + Generates a FOURCC Format code from the provided bytes. + MAKEFOURCC + + + Gets the size of the triangle patch. + D3DXTriPatchSize + + + Gets the size of the rectangle patch. + D3DXRectPatchSize + + + Returns the number of elements in the vertex declaration. + D3DXGetDeclLength + + + +Generates an output vertex declaration from the input declaration. +The output declaration is intended for use by the mesh tessellation functions. + + D3DXGenerateOutputDecl + + + +Retrieves a Flexible Vertex Format (FVF) code from a declarator. + + D3DXFVFFromDeclarator + + + +Retrieves a declarator from a Flexible Vertex Format (FVF) code. + + D3DXDeclaratorFromFVF + + + D3DXGetFVFVertexSize + + + + D3DXGetDeclVertexSize + + + +Indicates that the method should format from file. + + D3DFMT_FROM_FILE + + + +Indicates that the method should load from file. + + D3DX_FROM_FILE + + + +The default value for non power-of-two textures. + + D3DX_DEFAULT_NONPOW2 + + + +The value used to signify that the default value for a parameter should be used. + + D3DX_DEFAULT + + + +Contains miscellaneous constants and methods for use with D3DX. + + None + + + +Validates the current pipeline state. + + A Result code. + + + +Constructs a new Debug interface. + + The Device with which the Debug interface is to be associated. + + + +Gets or sets the swap chain the runtime will use for automatic presentation. + + + + +Gets or sets the number of milliseconds to delay after a swap chain is presented. + + + + +Gets or sets the flags indicating which debug features are enabled. + + + + +An interface for controlling debug state and validating pipeline settings. + + ID3D10Debug + + + +Constructs a new DepthStencilState based on the specified description. If the description +is identical to that of an existing DepthStencilState object, the existing DepthStencilState object +is returned instead of a new instance. + + The device to associate the state object with + The state description. + The DepthStencilState object. + + + +Gets the state's description. + + + + +A state object defining the behavior of the depth and stencil test stages of the output merger. + + ID3D11DepthStencilState + + + +Gets the residency status of a list of resources. + + The resources to query. + A list of residency status values, one for each entry in the input resources list. + + + +Initializes a new instance of the class. + + The COM object implementing the IDXGIDevice interface. + + + +Gets the adapter associated with the device. + + + + +Gets or sets the device's GPU thread priority. Values range from -7 to 7, inclusive, with 0 being normal priority. + + + + +Represents a base for objects that produces image data. + + IDXGIDevice + + + +Minimize the amount of memory required for an effect by stripping effect metadata. + + A object describing the result of the operation. + + + +Creates a copy of the effect interface. + + Indicates whether to ignore all "single" qualifiers on cbuffers. All cbuffers will have their own buffers created in the cloned effect. + The cloned effect. + + + +Creates a copy of the effect interface. + + The cloned effect. + + + +Get a variable by semantic. + + The semantic of the variable to retrieve. + The variable with the given semantic. + + + +Get a variable by name. + + The name of the variable to retrieve. + The variable with the given name. + + + +Get a variable by index. + + The zero-based index of the variable to retrieve. + The variable at the specified index. + + + +Get an effect group by name. + + The name of the effect group to retrieve. + The effect group with the given name. + + + +Get an effect group by index. + + The zero-based index of the effect group to retrieve. + The effect group at the specified index. + + + +Get a technique by name. + + The name of the technique to retrieve. + The technique with the given name. + + + +Get a technique by index. + + The zero-based index of the technique to retrieve. + The technique at the specified index. + + + +Get a constant buffer by name. + + The name of the constant buffer to retrieve. + The constant buffer with the given name. + + + +Get a constant buffer by index. + + The zero-based index of the constant buffer to retrieve. + The constant buffer at the specified index. + + + +Gets a class linkage interface for the effect. + + + + +Gets the device used to create the effect. + + + + +Indicates whether the effect contains valid syntax. + + + + +Indicates whether the effect reflection metadata has been removed from memory. + + + + +Gets the effect's description. + + + + +Initializes a new instance of the class. + + The device used to create the effect. + The compiled effect source. + + + +Manages a set of state objects, resources and shaders for implementing a rendering effect. + + ID3DX11Effect + + + +Gets the effect group's description. + + + + +Indicates whether the effect group represents a valid interface. + + + + +Get a technique by name. + + The name of the technique to retrieve. + The technique with the given name. + + + +Get a technique by index. + + The zero-based index of the technique to retrieve. + The technique at the specified index. + + + +Get an annotation by name. + + The name of the annotation to retrieve. + The annotation with the given name. + + + +Get an annotation by index. + + The zero-based index of the annotation to retrieve. + The annotation at the specified index. + + + +Initializes a new instance of the class. + + A pointer to the unmanaged interface. + + + +Represents an effect group. + + ID3DX11EffectGroup + + + +Generate a mask for state changes during the technique. + + The created state block mask. + + + +Get a pass by name. + + The name of the pass to retrieve. + The pass with the given name. + + + +Get a pass by index. + + The zero-based index of the pass to retrieve. + The pass at the specified index. + + + +Get an annotation by name. + + The name of the annotation to retrieve. + The annotation with the given name. + + + +Get an annotation by index. + + The zero-based index of the annotation to retrieve. + The annotation at the specified index. + + + +Initializes a new instance of the class. + + A pointer to the unmanaged interface. + + + +Indicates whether the technique represents a valid interface. + + + + +Gets the effect techniques's description. + + + + +Represents an effect technique, which is a collection of rendering passes. + + ID3DX11EffectTechnique + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Number of bytes to seek between elements, when laid out in a constant buffer. + + + + +Number of bytes occupied by this data type, when laid out in a constant buffer. + + + + +Number of bytes required to represent this data type, when tightly packed. + + + + +Number of columns in this type (0 if not a numeric primitive). + + + + +Number of rows in this type (0 if not a numeric primitive). + + + + +Number of members (0 if not a structure). + + + + +Number of elements in this type (0 if not an array). + + + + +The variable type. + + + + +The variable class. + + + + +Name of the type, for example "float4" or "MyStruct". + + + + +Provides a description for effect types. + + D3DX11_EFFECT_TYPE_DESC + + + +Returns a value indicating whether the two objects are equivalent. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Returns a value indicating whether this instance is equal to the specified object. + + A to compare with this instance. + + true if has the same value as this instance; otherwise, false. + + + +Returns a value indicating whether this instance is equal to the specified object. + + An object to compare with this instance. + + true if has the same value as this instance; otherwise, false. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Initializes a new instance of the struct. + + The query type. + Query options. + + + +Gets or sets the query flags. + + + + +Gets or sets the query type. + + + + +Describes a query object. + + D3D11_QUERY_DESC + + + +Gets the name of the class's type. + + + + +Gets the instance name of the class. + + + + +Gets the description of the class instance. + + + + +Gets the linkage object associated with the class. + + + + +Initializes a new instance of the class. + + The linkage object used to create the class instance. + The type name of a class to initialize. + Identifies the constant buffer that contains the class data. + The four-component vector offset from the start of the constant buffer where the class data will begin. Consequently, this is not a byte offset. + The texture slot for the first texture; there may be multiple textures following the offset. + The sampler slot for the first sampler; there may be multiple samplers following the offset. + + + +Represents an HLSL class. + + ID3D11ClassInstance + + + +Sets the shader resources used by the domain shader stage. + + Index into the device's zero-based array to which to begin setting shader resources. + Number of resources from the source array to set. + + + +Sets a single shader resource to be used by the domain shader stage. + + Index into the device's zero-based array to which to set the resource. + + + +Sets the sampler states used by the domain shader stage. + + Index into the device's zero-based array to which to begin setting samplers. + Number of samplers from the source array to set. + + + +Sets a single sampler to be used by the domain shader stage. + + Index into the device's zero-based array to which to set the sampler. + + + +Sets the constant buffers used by the domain shader stage. + + Index into the device's zero-based array to which to begin setting constant buffers. + Number of buffers from the source array to set. + + + +Sets a single constant buffer to be used by the domain shader stage. + + Index into the device's zero-based array to which to set the constant buffer. + + + +Gets the shader resources used by the domain shader stage. + + Index into the device's zero-based array from which to begin retrieving shader resources. + Number of resources to retrieve. + An array of shader resources. + + + +Gets the sampler states used by the domain shader stage. + + Index into the device's zero-based array from which to begin retrieving samplers. + Number of samplers to retrieve. + An array of sampler states. + + + +Gets the constant buffers used by the domain shader stage. + + Index into the device's zero-based array from which to begin retrieving constant buffers. + Number of buffers to retrieve. + An array of constant buffers. + + + +Gets the domain shader currently assigned to the device. + + An array that will be used to contain any class instances currently active. + The domain shader (null if no shader is assigned). + + + +Gets the domain shader currently assigned to the device. + + The domain shader (null if no shader is assigned). + + + +Assigns a domain shader to the device. + + The shader to assign to the device. Assign null to disable the domain shader. + An array of class-instance interfaces. Each interface used by a shader must have a corresponding class instance or the shader will get disabled. + + + +Assigns a domain shader to the device. + + The shader to assign to the device. Assign null to disable the domain shader. + + + +Defines a wrapper for domain shader related commands on the device. + + + + +Requests deallocation of a mesh container object. + + The mesh container to be deallocated. + + + +Requests deallocation of a frame object. + + The frame to be deallocated. + + + +Requests the allocation of a frame object. + + Name of the frame to be created. + The created frame object. + + + +Requests the allocation of a mesh container object. + + Name of the mesh. + The actual mesh data. + Set of materials used in the mesh. + Set of effects used in the mesh. + Adjancey array used in the mesh. + Skin mesh object containing skin data. + The created mesh container. + + + +Gets a global instance of the default allocator. + + + + +Initializes a new instance of the class. + + + + +Defines a default allocator for frame and mesh container objects. + + + + +Gets the list of RGB control points defining the gamma curve. + + + + +Gets or sets an offset applied to gamma RGB values. + + + + +Gets or sets a scaling factor applied to gamma RGB values. + + + + +Initializes a new instance of the class. + + + + +Describes gamma control settings. + + DXGI_GAMMA_CONTROL + + + +Determines whether the specified object instances are considered equal. + + + + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Initializes a new instance of the structure. + + The red component of the color. + The green component of the color. + The blue component of the color. + + + +Gets or sets the color's blue component. + + + + +Gets or sets the color's green component. + + + + +Gets or sets the color's red component. + + + + +A three-component (RGB) color value; each component is a float in the range [0,1]. + + + + +Creates an instance of the type that this is associated with, using the specified context, given a set of property values for the object. + + A that provides a format context. + An that specifies the type of array for which to get properties. + An array of type that is used as a filter. + A with the properties that are exposed for this data type, or a null reference (Nothing in Visual Basic) if there are no properties. + + + +Returns whether this object supports properties, using the specified context. + + A that provides a format context. + + true if GetProperties should be called to find the properties of this object; otherwise, false. + + + +Creates an instance of the type that this is associated with, using the specified context, given a set of property values for the object. + + A that provides a format context. + An of new property values. + An representing the given , or null if the object cannot be created. + + + +Returns whether changing a value on this object requires a call to System::ComponentModel::TypeConverter::CreateInstance(System::Collections::IDictionary^) +to create a new value, using the specified context. + + A that provides a format context. + + false if changing a property on this object requires a call to System::ComponentModel::TypeConverter::CreateInstance(System::Collections::IDictionary^) + + + +Converts the given object to the type of this converter, using the specified context and culture information. + + A that provides a format context. + A . If null is passed, the current culture is assumed. + The to convert. + An that represents the converted value. + + + +Converts the given value object to the specified type, using the specified context and culture information. + + A that provides a format context. + A . If null is passed, the current culture is assumed. + The to convert. + A that represents the type you want to convert to. + An that represents the converted value. + + + +Returns whether this converter can convert an object of the given type to the type of this converter, using the specified context. + + A that provides a format context. + A System::Type that represents the type you want to convert from. + + true if this converter can perform the conversion; otherwise, false. + + + +Returns whether this converter can convert the object to the specified type, using the specified context. + + A that provides a format context. + A that represents the type you want to convert to. + + true if this converter can perform the conversion; otherwise, false. + + + +Initializes a new instance of the class. + + + + +Provides a type converter to convert objects to and from various +other representations. + + + + +How many occurrences of the delimiter to step back. + + + + +Character code used as the delimiter signaling the beginning of the portion of text to be preserved, +most useful for path ellipsis, where the delimiter would be a slash. + + + + +Text granularity of which trimming applies. + + + + +Specifies the trimming option for text overflowing the layout box. + + + + +The line is trimmed. + + + + +The distance from the top of the text line to its baseline. + + + + +The height of the text line. + + + + +The number of characters in the newline sequence at the end of the text line. If the count is zero, then the text line was either wrapped or it is the end of the text. + + + + +The number of whitespace positions at the end of the text line. Newline sequences are considered whitespace. + + + + +The number of text positions in the text line. This includes any trailing whitespace and newline characters. + + + + +Contains information about a formatted line of text. + + + + +true if the region is trimmed; otherwise, false. + + + + +true if the hit region contains text; otherwise, false. + + + + +The BIDI level of the text positions within the hit region. + + + + +The height of the hit region. + + + + +The width of the hit region. + + + + +The y-coordinate of the upper-left corner of the hit region. + + + + +The x-coordinate of the upper-left corner of the hit region. + + + + +The number of text positions within the hit region. + + + + +The first text position within the hit region. + + + + +Describes the region obtained by a hit test. + + + + +Indicates whether the cluster is read from right to left. + + + + +Indicates whether the cluster corresponds to a soft hyphen character. + + + + +Indicates whether the cluster corresponds to a newline character. + + + + +Indicates whether the cluster corresponds to a whitespace character. + + + + +Indicates whether a line can be broken right after the cluster. + + + + +The number of text positions in the cluster. + + + + +The total advance width of all glyphs in the cluster. + + + + +Contains information about a glyph cluster. + + + + +Initializes a new instance of the class. + + The device used to create the shader. + The compiled shader bytecode. + A dynamic class linkage interface. + + + +Initializes a new instance of the class. + + The device used to create the shader. + The compiled shader bytecode. + + + +Represents a compute shader. + + ID3D11ComputeShader + + + +Returns a value indicating whether the two BufferDescriptions are equivalent. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Returns a value indicating whether this instance is equal to the specified object. + + A to compare with this instance. + + true if has the same value as this instance; otherwise, false. + + + +Returns a value indicating whether this instance is equal to the specified object. + + An object to compare with this instance. + + true if has the same value as this instance; otherwise, false. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two QueryDescriptions. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two QueryDescriptions. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Constructs a new QueryDescription object. + + The query type. + Query options. + + + +Gets or sets the query flags. + + + + +Gets or sets the query type. + + + + +Describes a query object. + + D3D10_QUERY_DESC + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +A write mask. + + + + +This defines how to combine the alpha data sources. + + + + +This specifies the second alpha data source and includes an optional pre-blend operation. Blend options that end in "Color" are not allowed. + + + + +This specifies the first alpha data source and includes an optional pre-blend operation. Blend options that end in "Color" are not allowed. + + + + +This defines how to combine the RGB data sources. + + + + +This specifies the second RGB data source and includes an optional pre-blend operation. + + + + +This specifies the first RGB data source and includes an optional pre-blend operation. + + + + +Enables or disables blending on this render target. + + + + +Performs a multiscan of a sequence. + + The type of element in the sequence. + The binary operation to perform. + Size of scan in elements. + Pitch of the next scan in elements. + Number of scans in the multiscan. + Input sequence on the device. Set and to the same value for in-place scans. + Output sequence on the device. + A object describing the result of the operation. + + + +Performs an unsegmented scan of a sequence. + + The type of element in the sequence. + The binary operation to perform. + Size of scan in elements. + Input sequence on the device. Set and to the same value for in-place scans. + Output sequence on the device. + A object describing the result of the operation. + + + +Sets the scan direction. + + The direction in which to perform the scans. + A object describing the result of the operation. + + + +Initializes a new instance of the class. + + The device context with which to associate the scan object. + Maximum single scan size, in elements. + Maximum number of scans in multiscan. + + + +Represents a scan context. + + ID3DX11Scan + + + +Initializes a new instance of the class. + + The device used to create the shader. + The compiled shader bytecode. + An array of instances describing the layout of the output buffers. + An array of buffer strides; each stride is the size of an element for that buffer. + The index number of the stream to be sent to the rasterizer stage. Set to NoRasterizedStream if no stream is to be rasterized. + A dynamic class linkage interface. + + + +Initializes a new instance of the class. + + The device used to create the shader. + The compiled shader bytecode. + An array of instances describing the layout of the output buffers. + An array of buffer strides; each stride is the size of an element for that buffer. + The index number of the stream to be sent to the rasterizer stage. Set to NoRasterizedStream if no stream is to be rasterized. + + + +Initializes a new instance of the class. + + The device used to create the shader. + The compiled shader bytecode. + A dynamic class linkage interface. + + + +Initializes a new instance of the class. + + The device used to create the shader. + The compiled shader bytecode. + + + +Represents a geometry shader. + + ID3D11GeometryShader + + + +Minimum rate of modulation, in Hertz. + + + + +Maximum rate of modulation, in Hertz. + + + + +Default rate of modulation, in Hertz. + + + + +Square shape of the modulation waveform. + + + + +Triangular shape of the modulation waveform. + + + + +Default shape of the modulation waveform. + + + + +Shape of the modulation waveform. By default the waveform is a triangle. + + + + +Rate of modulation, in Hertz. The default value is 20. + + + + +The SoundEffectGargle object is used to set and retrieve effect parameters on a buffer that supports amplitude modulation. + + IDirectSoundFXGargle + + + +Sets the value of the variable. + + An array of views to set. + The offset into the array to begin setting values. + The number of values to set. + A object describing the result of the operation. + + + +Sets the value of the variable. + + An array of views to set. + A object describing the result of the operation. + + + +Sets the value of the variable. + + The view of the unordered access resource to set. + A object describing the result of the operation. + + + +Gets an array of views of unordered access buffers from the variable. + + An array of views to hold the retrieved values. + The offset into the array to begin storing values. + The number of values to get. + A object describing the result of the operation. + + + +Gets an array of views of unordered access buffers from the variable. + + An array of views to hold the retrieved values. + A object describing the result of the operation. + + + +Gets the value of the variable. + + The view of the unordered access variable. + + + +Initializes a new instance of the class. + + A pointer to the unmanaged interface. + + + +Represents an unordered access buffer effect variable. + + ID3DX11EffectUnorderedAccessViewVariable + + + Creates a for accessing resource data. + The device to use when creating this . + The resource that will serve as input to a shader. + A structure describing the to be created. + ID3D11Device::CreateUnorderedAccessView + + + Creates a for accessing resource data. + The device to use when creating this . + The resource that will serve as input to a shader. + ID3D11Device::CreateUnorderedAccessView + + + Gets a structure describing this . + ID3D11UnorderedAccessView::GetDesc + + + Specifies the parts of a resource the pipeline can access during rendering. + ID3D11UnorderedAccessView + + + +Creates a shader resource view from a stream. + + The device that will own the resource. + The stream that contains the shader resource view. + Size of the shader resource, in bytes. + Identifies characteristics of the texture to be loaded. + The created resource view. + + + +Creates a shader resource view from a stream. + + The device that will own the resource. + The stream that contains the shader resource view. + Size of the shader resource, in bytes. + The created resource view. + + + +Creates a shader resource view from memory. + + The device that will own the resource. + The block of memory that contains the shader resource view. + Identifies characteristics of the texture to be loaded. + The created resource view. + + + +Creates a shader resource view from memory. + + The device that will own the resource. + The block of memory that contains the shader resource view. + The created resource view. + + + +Creates a shader resource view from a file. + + The device that will own the resource. + The name of the file that contains the shader resource view. + Identifies characteristics of the texture to be loaded. + The created resource view. + + + +Creates a shader resource view from a file. + + The device that will own the resource. + The name of the file that contains the shader resource view. + The created resource view. + + + Gets a structure describing this . + ID3D11ShaderResourceView::GetDesc + + + Creates a for accessing resource data. + The device to use when creating this . + The resource that will serve as input to a shader. This resource must have been created with the ShaderResource flag. + A structure describing the to be created. + ID3D11Device::CreateShaderResourceView + + + Creates a for accessing resource data. + The device to use when creating this . + The resource that will serve as input to a shader. This resource must have been created with the ShaderResource flag. + ID3D11Device::CreateShaderResourceView + + + Specifies the subresources that a shader can access during rendering. + ID3D11ShaderResourceView + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +The filter used when resampling mipmap levels of the texture. + + + + +The filter used when resampling the texture. + + + + +The format of the loaded texture. + + + + +Gets or sets the flags specifying miscellaneous resource options. + + + + +Gets or sets the flags specifying how the CPU will be allowed to access the loaded texture. + + + + +Gets or sets the flags specifying how the loaded texture is bound to the pipeline. + + + + +Gets or sets the intended usage pattern of the loaded texture. + + + + +Number of mipmap levels in the original image. + + + + +The highest resolution mipmap level of the texture; if greater than zero, +this mipmap level will be mapped to level 0 in the loaded texture. + + + + +Depth of the original image, in pixels. + + + + +Height of the original image, in pixels. + + + + +Width of the original image, in pixels. + + + + +The default value for load options. + + + + +Initializes a new instance of the struct using default values. + + The default image load information. + + + +Contains the description of the contents of an image file. + + D3DX11_IMAGE_LOAD_INFO + + + +Reverts a previously set texture buffer. + + A object describing the result of the operation. + + + +Reverts a previously set constant buffer. + + A object describing the result of the operation. + + + +Gets or sets the texture buffer represented by this interface. + + + + +Gets or sets the constant buffer represented by this interface. + + + + +Initializes a new instance of the class. + + A pointer to the unmanaged interface. + + + +Represents a constant buffer or texture buffer inside an effect. + + ID3DX11EffectConstantBuffer + + + +Maximum cone angle, in degrees. + + + + +Minimum cone angle, in degrees. + + + + +Default outside cone volume. Volume levels are expressed as attenuation, in hundredths of a decibel. + + + + +Default cone angle, in degrees. + + + + +Default maximum distance, in meters. + + + + +Default minimum distance, in meters. + + + + +The velocity of the sound source. + + + + +The position of the sound source. + + + + +The operation mode for 3-D sound processing. + + + + +The minimum distance, which is the distance from the listener at which sounds in this buffer begin to be attenuated. + + + + +The maximum distance, which is the distance from the listener beyond which sounds in this buffer are no longer attenuated. + + + + +Settings are not applied until the application calls the SoundListener3D.CommitDeferredSettings() if true. + + + + +The volume of the sound outside the outside angle of the sound projection cone. + + + + +The orientation of the sound projection cone. + + + + +The outside angle of the sound projection cone. + + + + +The inside angle of the sound projection cone. + + + + +Gets or sets all the parameters of a buffer + + + + +Initializes a new instance of the class. + + + + + + +The SoundBuffer3D object is used to retrieve and set parameters that describe the position, orientation, and environment of a sound buffer in 3-D space. + + IDirectSound3DBuffer + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Describes the current velocity of the 3-D sound buffer. + + + + +Describes the current position of the 3-D sound buffer. + + + + +The angle of the outside sound projection cone. + + + + +The 3-D sound processing mode to be set. + + + + +The minimum distance. + + + + +The maximum distance. + + + + +The angle of the inside sound projection cone. + + + + +The cone outside volume. + + + + +Describes the current orientation of this 3-D buffer's sound projection cone. + + + + +Contains all information necessary to uniquely describe the location, orientation, and motion of a 3-D sound buffer. + + DS3DBUFFER + + + +Initializes a new instance of the class. + + The device used to create the shader. + The compiled shader bytecode. + A dynamic class linkage interface. + + + +Initializes a new instance of the class. + + The device used to create the shader. + The compiled shader bytecode. + + + +Represents a domain shader. + + ID3D11DomainShader + + + Initializes a new instance of the class. + The device to use when creating the counter. + The kind of counter to create. + ID3D11Device::CreateCounter + + + Gets the kind of this counter. + ID3D11Counter::GetDesc + + + Encapsulates methods for measuring GPU performance. + ID3D11Counter + + + +Gets the size of the data, in bytes, of the output of the asynchronous operation. + + + + +Initializes a new instance of the class. + + + + +Base class for objects that perform asynchronous GPU data access. + + ID3D11Asynchronous + + + +Sets the value of the variable. + + An array of views to set. + The offset into the array to begin setting values. + The number of values to set. + A object describing the result of the operation. + + + +Sets the value of the variable. + + An array of views to set. + A object describing the result of the operation. + + + +Sets the value of the variable. + + The view of the render target surface to set. + A object describing the result of the operation. + + + +Gets an array of views of render target surfaces from the variable. + + An array of views to hold the retrieved values. + The offset into the array to begin storing values. + The number of values to get. + A object describing the result of the operation. + + + +Gets an array of views of render target surfaces from the variable. + + An array of views to hold the retrieved values. + A object describing the result of the operation. + + + +Gets the value of the variable. + + The view of the render target variable. + + + +Initializes a new instance of the class. + + A pointer to the unmanaged interface. + + + +Represents a render target view effect variable. + + ID3DX11EffectRenderTargetViewVariable + + + Creates a for accessing resource data. + The device to use when creating this . + The resource that represents the render-target surface. This surface must have been created with the RenderTarget flag. + A structure describing the to be created. + ID3D11Device::CreateRenderTargetView + + + Creates a for accessing resource data. + The device to use when creating this . + The resource that represents the render-target surface. This surface must have been created with the RenderTarget flag. + ID3D11Device::CreateRenderTargetView + + + Gets a structure describing this . + ID3D11RenderTargetView::GetDesc + + + Identifies the render-target subresources that can be accessed during rendering. + ID3D11RenderTargetView + + + Gets the resource that is accessed through this view. + ID3D11View::GetResource + + + Specifies the parts of a resource the pipeline can access during rendering. + ID3D11View + + + +Constructs a new RasterizerState based on the specified description. If the description +is identical to that of an existing RasterizerState object, the existing RasterizerState object +is returned instead of a new instance. + + The device to associate the state object with + The state description. + The RasterizerState object. + + + +Gets the state's description. + + + + +A state object defining the behavior of the rasterizer stage. + + ID3D10RasterizerState + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Number of groups in this effect. + + + + +Number of techniques in this effect. + + + + +Number of global interfaces in this effect. + + + + +Number of global variables in this effect. + + + + +Number of constant buffers in this effect. + + + + +Provides a description for effect objects. + + D3DX11_EFFECT_DESC + + + +Initializes a new instance of the class. + + + + + + + + + + + + +The FullDuplex object represents a full-duplex stream. + + IDirectSoundFullDuplex + + + + + + + + +Initializes a new instance of the class. + + + + + + + +The SecondarySoundBuffer object is used to manage sound buffers and effects. + + IDirectSoundBuffer8 + + + +Retrieves the capabilities of the buffer object. + + + + +True if a requested 3D algorithm was not available and stereo panning was substituted. + + + + +Retrieves the status of the sound buffer. + + + + +Retrieves or sets the relative volume of the left and right audio channels. + + + + +Retrieves or sets the attenuation of the sound. + + + + +Retrieves or sets the frequency, in samples per second, at which the buffer is playing. + + + + +Retrieves or sets the position of the play cursor. + + + + +Retrieves the position of the write cursor in the sound buffer. + + + + +Writes data to the buffer. + + + + + +Writes data to the buffer. + + + + + +Causes the sound buffer to stop playing. + + + + +Causes the sound buffer to play, starting at the play cursor. + + + + +Restores the memory allocation for a lost sound buffer. + + + + +The SoundBuffer object is used to manage sound buffers. + + IDirectSoundBuffer + + + +Enumerates the DirectSound devices installed in the system. + + A collection of the devices found. + + + +Retrieves the capabilities of the hardware device. + + + + +Ascertains whether the device driver is certified for DirectX. + + + + +Creates a duplicate of the original sound buffer that shares the originals memory. + + + + + + +Retrieves the speaker configuration of the device. + + + + + + +Sets the speaker configuration of the device. + + + + + + +Sets the cooperative level of the application for this sound device. + + + + + + +Initializes a new instance of the class. + + + + + +Initializes a new instance of the class. + + + + +The DirectSound object is used to create buffer objects, manage devices, and set up the environment. + + IDirectSound8 + + + +The rate, in kilobytes per second, at which data can be transferred to hardware static sound buffers. This and the number of bytes transferred determines the duration of a call to the Buffer.Read or Buffer.Write method. + + + + +Size, in bytes, of the amount of memory on the sound card that stores static sound buffers. + + + + +The device supports hardware-mixed stereo secondary buffers. + + + + +The device supports hardware-mixed monophonic secondary buffers. + + + + +The device supports hardware-mixed secondary sound buffers with 8-bit samples. + + + + +The device supports hardware-mixed secondary sound buffers with 16-bit samples. + + + + +The device supports stereo primary buffers. + + + + +The device supports monophonic primary buffers. + + + + +Number of primary buffers supported. This value will always be 1. + + + + +The device supports primary buffers with 8-bit samples. + + + + +The device supports a primary buffer with 16-bit samples. + + + + +The processing overhead, as a percentage of main processor cycles, needed to mix software buffers. This varies according to the bus type, the processor type, and the clock speed. + + + + +Minimum sample rate specifications that are supported by this device's hardware secondary sound buffers. + + + + +Maximum sample rate specifications that are supported by this device's hardware secondary sound buffers. + + + + +Maximum number of streaming sound buffers. + + + + +Maximum number of static buffers. + + + + +Number of buffers that can be mixed in hardware. This member can be less than the sum of MaxHardwareMixingStaticBuffers and MaxHardwareMixingStreamingBuffers. Resource tradeoffs frequently occur. + + + + +Maximum number of streaming 3-D buffers. + + + + +Maximum number of static 3-D buffers. + + + + +Maximum number of 3-D buffers. + + + + +Size, in bytes, of the largest contiguous block of free memory on the sound card. + + + + +Number of unallocated streaming buffers. + + + + +Number of unallocated static buffers. + + + + +Number of unallocated buffers. On WDM drivers, this includes FreeHardware3DAllBuffers. + + + + +Size, in bytes, of the free memory on the sound card. + + + + +Number of unallocated streaming 3-D buffers. + + + + +Number of unallocated static 3-D buffers. + + + + +Number of unallocated 3-D buffers. + + + + +The device does not have a DirectSound driver installed, so it is being emulated through the waveform-audio functions. Performance degradation should be expected. + + + + +The device supports all sample rates between the MinSecondarySampleRate and MaxSecondarySampleRate member values. Typically, this means that the actual output rate will be within +/- 10 hertz (Hz) of the requested frequency. + + + + +The driver has been tested and certified by Microsoft. This flag is always set for WDM drivers. + + + + +Describes the capabilities of a DirectSound device. + + DSCAPS + + + +Retrieves the position of the read cursor in the buffer. The capture cursor is ahead of the read cursor. The data after the read position up to and including the capture position is not necessarily valid data. + + + + +Retrieves the position of the capture cursor in the buffer. The capture cursor is ahead of the read cursor. The data after the read position up to and including the capture position is not necessarily valid data. + + + + +True if the buffer wave mapped. + + + + +The size, in bytes, of the capture buffer. + + + + +Retrieves the waveform format of the capture buffer. + + + + +True if the capture buffer is looping. + + + + +True if the buffer is currently capturing. + + + + +Stops the buffer so that it is no longer capturing data. If the buffer is not capturing, the method has no effect. + + + + +Begins capturing data into the buffer. If the buffer is already capturing, the method has no effect. + + + + +Retrieves the status of capture effects. + + + + + + +Initializes a new instance of the class. + + + + + + +The CaptureBuffer object is used to manipulate sound capture buffers. + + IDirectSoundCaptureBuffer8 + + + +Enumerates the DirectSound capture devices installed in the system. + + A collection of the devices found. + + + +Retrieves the capabilities of the capture device. + + + + +Initializes a new instance of the class. + + + + + + +Initializes a new instance of the class. + + + + +The DirectSoundCapture object is used to create sound capture buffers. + + IDirectSoundCapture8 + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Multiple capture objects can be used simultaneously on the capture device. + + + + +The driver supports the 96Khz 8 Bit Stereo format. + + + + +The driver supports the 96Khz 16 Bit Stereo format. + + + + +The driver supports the 96Khz 8 Bit Mono format. + + + + +The driver supports the 96Khz 16 Bit Mono format. + + + + +The driver supports the 48Khz 8 Bit Stereo format. + + + + +The driver supports the 48Khz 16 Bit Stereo format. + + + + +The driver supports the 48Khz 8 Bit Mono format. + + + + +The driver supports the 48Khz 16 Bit Mono format. + + + + +The driver supports the 44Khz 8 Bit Stereo format. + + + + +The driver supports the 44Khz 16 Bit Stereo format. + + + + +The driver supports the 44Khz 8 Bit Mono format. + + + + +The driver supports the 44Khz 16 Bit Mono format. + + + + +The driver supports the 22Khz 8 Bit Stereo format. + + + + +The driver supports the 22Khz 16 Bit Stereo format. + + + + +The driver supports the 22Khz 8 Bit Mono format. + + + + +The driver supports the 22Khz 16 Bit Mono format. + + + + +The driver supports the 11Khz 8 Bit Stereo format. + + + + +The driver supports the 11Khz 16 Bit Stereo format. + + + + +The driver supports the 11Khz 8 Bit Mono format. + + + + +The driver supports the 11Khz 16 Bit Mono format. + + + + +There is no DirectSoundCapture driver for the device, so the standard waveform audio functions are being used. + + + + +Number of channels supported by the device, where 1 is mono, 2 is stereo, and so on. + + + + +The driver for the device is a certified WDM driver. + + + + +Describes the capabilities of the capture device. + + DSCCAPS + + + +String that specifies the module name of the DirectSound driver corresponding to this device. + + + + +String that provides a textual description of the DirectSound device. + + + + +Identifies the DirectSound driver being enumerated + + + + +Contains information about a DirectSound device. + + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Describes effects supported by hardware for the buffer. + + + + +The format in which to capture the data. + + + + +The Win32 wave mapper will be used for formats not supported by the device. + + + + +The buffer supports effects. + + + + +Size of capture buffer to create, in bytes. + + + + +Describes a capture buffer. + + DSCBUFFERDESC + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Effect specified must be in software. + + + + +Effect specified must be in hardware. + + + + +Specifies the unique identifier of the preferred effect. + + + + +Specifies the class identifier of the effect. + + + + +Contains parameters for an effect associated with a capture buffer. + + DSCEFFECTDESC + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Unique identifier of the two-speaker virtualization algorithm to be used by DirectSound3D hardware emulation. + + + + +Structure specifying the waveform format for the buffer. + + + + +Flags specifying the capabilities of the buffer. + + + + +Size of the new buffer, in bytes. This value must be 0 when creating a buffer. + + + + +Describes the characteristics of a new buffer object. + + DSBUFFERDESC + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Gets the HID code corresponding to the input. If there is no corresponding HID code, this value is zero. + + + + +Gets the index of the signed-in gamer associated with the device. Can be a value in the range 0–3. + + + + +Gets a combination of flags that indicate the keyboard state at the time of the input event. + + + + +Gets the virtual-key code of the key, button, or stick movement. + + + + +Describes keystroke data from a device. + + XINPUT_KEYSTROKE + + + +True if the AEC algorithm ever loses convergence. + + + + +True if the AEC algorithm has converged. + + + + +True if the AEC algorithm is currently converged. + + + + +True if the AEC algorithm is in the uninitialized state. + + + + +Operation mode. + + + + +Boolean value that specifies whether to enable background comfort noise, which makes the capture signal sound more natural by preventing periods of dead silence. By default, background comfort noise is not enabled. + + + + +Boolean value that specifies whether the effect is enabled. + + + + +Sets the enumerator to its initial position, which is before the first element in the collection. + + + + +The CaptureEffectAcousticEchoCancel object is used to set and retrieve parameters on a capture buffer that supports acoustic echo cancellation. This object requires Microsoft® Windows® XP or later operating systems. + + IDirectSoundCaptureFXAec + + + +Gets the description for the given shader. + + The zero-based shader index. + The description for the given shader. + + + +Gets the description for a single element of the given shader's patch constant signature. + + The zero-based shader index. + The index of the signature element. + The description for the given shader signature element. + + + +Gets the description for a single element of the given shader's output signature. + + The zero-based shader index. + The index of the signature element. + The description for the given shader signature element. + + + +Gets the description for a single element of the given shader's input signature. + + The zero-based shader index. + The index of the signature element. + The description for the given shader signature element. + + + +Gets a compute shader. + + The zero-based index of the compute shader to retrieve. + The compute shader at the specified index. + + + +Gets a domain shader. + + The zero-based index of the domain shader to retrieve. + The domain shader at the specified index. + + + +Gets a hull shader. + + The zero-based index of the hull shader to retrieve. + The hull shader at the specified index. + + + +Gets a geometry shader. + + The zero-based index of the geometry shader to retrieve. + The geometry shader at the specified index. + + + +Gets a vertex shader. + + The zero-based index of the vertex shader to retrieve. + The vertex shader at the specified index. + + + +Gets a pixel shader. + + The zero-based index of the pixel shader to retrieve. + The pixel shader at the specified index. + + + +Initializes a new instance of the class. + + A pointer to the unmanaged interface. + + + +Represents a shader effect variable. + + ID3DX11EffectShaderVariable + + + +Gets the shader function stream. + + + + +Gets the device associated with the shader. + + + + +The maximum level of nesting of static flow control instructions. + + + + +The maximum level of nesting of static flow control instructions. + + + + +The minimum number of temporary registers supported. + + + + +The maximum number of temporary registers supported. + + + + +The minimum level of nesting of dynamic flow control instructions. + + + + +The maximum level of nesting of dynamic flow control instructions. + + + + +Releases all resources used by the . + + + + +Initializes a new instance of the class. + + The device used to create the shader. + The shader function stream. + + + +Represents a vertex shader. + + IDirect3DVertexShader9 + + + +Gets properties about a single object on an input device. + + The name of the object whose properties are to be retrieved. + The properties of the desired object. + + + +Retrieves buffered data from the device. + + A collection of buffered input events. + + + +Retrieves the current device state. + + A object describing the result of the operation. + + + +Retrieves the current device state. + + The current device state. + + + +Gets the Z-axis torque. + + + + +Gets the Y-axis torque. + + + + +Gets the X-axis torque. + + + + +Gets the Z-axis force. + + + + +Gets the Y-axis force. + + + + +Gets the X-axis force. + + + + +Gets the Z-axis angular acceleration. + + + + +Gets the Y-axis angular acceleration. + + + + +Gets the X-axis angular acceleration. + + + + +Gets the Z-axis acceleration. + + + + +Gets the Y-axis acceleration. + + + + +Gets the X-axis acceleration. + + + + +Gets the Z-axis angular velocity. + + + + +Gets the Y-axis angular velocity. + + + + +Gets the X-axis angular velocity. + + + + +Gets the Z-axis velocity. + + + + +Gets the Y-axis velocity. + + + + +Gets the X-axis velocity. + + + + +Gets the Z-axis rotation. + + + + +Gets the Y-axis rotation. + + + + +Gets the X-axis rotation. + + + + +Gets the Z-axis, often the throttle control. + + + + +Gets the Y-axis, usually the forward-backward movement of a stick. + + + + +Gets the X-axis, usually the left-right movement of a stick. + + + + +Gets the state of each button on the joystick. + + + + +Gets the force of each slider on the joystick. + + + + +Gets the acceleration of each slider on the joystick. + + + + +Gets the velocity of each slider on the joystick. + + + + +Gets the position of each slider on the joystick. + + + + +Gets the state of each point-of-view controller on the joystick. + + + + +Describes the state of a joystick device. + + DIJOYSTATE2 + + + +Sets an array of shader resource values. + + An array of resource views to set. + The offset into the array to begin setting values. + The number of values to set. + A object describing the result of the operation. + + + +Sets an array of shader resource values. + + An array of resource views to set. + A object describing the result of the operation. + + + +Sets the value of the shader resource. + + A view of the resource to set. + A object describing the result of the operation. + + + +Gets an array of resource views from the variable. + + An array of resource views to hold the retrieved shader resources. + The offset into the array to begin storing values. + The number of values to get. + A object describing the result of the operation. + + + +Gets an array of resource views from the variable. + + An array of resource views to hold the retrieved shader resources. + A object describing the result of the operation. + + + +Gets the value of the variable. + + A view of the shader resource. + + + +Gets the value of the variable in raw bytes. + + The number of bytes to retrieve. + The raw data representing the value of the variable. + + + +Sets the value of the variable using raw bytes. + + The number of bytes to set. + A object describing the result of the operation. + + + +Unmaps the texture. + + The subresource to unmap. + + + +Maps the texture, providing CPU access to its contents. + + A zero-based index into an array of subtextures; 0 indicates the first, most detailed subtexture (or mipmap level). + The zero-based index of the first texture to use (in an array of textures). + The IO operations to enable on the CPU. + Flags indicating how the CPU should respond when the GPU is busy. + A data box containing the mapped data. This data stream is invalidated +when the buffer is unmapped. + + + +Maps the texture, providing CPU access to its contents. + + A zero-based index into an array of subtextures; 0 indicates the first, most detailed subtexture (or mipmap level). + The IO operations to enable on the CPU. + Flags indicating how the CPU should respond when the GPU is busy. + A data box containing the mapped data. This data stream is invalidated +when the buffer is unmapped. + + + +Initializes a new instance of the class. + + The device to associate the texture with. + The description of the texture. + An array of initial texture data for each subresource. + + + +Initializes a new instance of the class. + + The device to associate the texture with. + The description of the texture. + The initial texture data. + + + +Initializes a new instance of the class. + + The device to associate the texture with. + The description of the texture. + + + +Gets the texture description. + + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +The filter used when resampling mipmap levels of the texture. + + + + +The filter used when resampling the texture. + + + + +The format of the loaded texture. + + + + +Gets or sets the flags specifying miscellaneous resource options. + + + + +Gets or sets the flags specifying how the CPU will be allowed to access the loaded texture. + + + + +Gets or sets the flags specifying how the loaded texture is bound to the pipeline. + + + + +Gets or sets the intended usage pattern of the loaded texture. + + + + +Number of mipmap levels in the original image. + + + + +The highest resolution mipmap level of the texture; if greater than zero, +this mipmap level will be mapped to level 0 in the loaded texture. + + + + +Depth of the original image, in pixels. + + + + +Height of the original image, in pixels. + + + + +Width of the original image, in pixels. + + + + +Contains the description of the contents of an image file. + + + + +Gets a description of the buffer. + + + + +Unlocks previously locked data. + + A object describing the result of the operation. + + + +Locks the buffer and obtains a pointer to the memory. + + Offset into the vertex data to lock, in bytes. + Size of the vertex data to lock, in bytes. + Locking flags. + A containing the vertex data. + + + +Initializes a new instance of the class. + + The device that will be used to create the buffer. + Size of the buffer, in bytes. + The requested usage of the buffer. + The vertex format of the vertices in the buffer. If set to .None, the buffer will be a non-FVF buffer. + The memory class into which the resource will be placed. + The variable that will receive the shared handle for this resource. + This method is only available in Direct3D9 Ex. + + + +Initializes a new instance of the class. + + The device that will be used to create the buffer. + Size of the buffer, in bytes. + The requested usage of the buffer. + The vertex format of the vertices in the buffer. If set to .None, the buffer will be a non-FVF buffer. + The memory class into which the resource will be placed. + + + Represents a buffer of vertex data. + IDirect3DVertexBuffer9 + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +The vertex format of the vertices in the buffer. + + + + +The size of the buffer data, in bytes. + + + + +The memory class allocated for the buffer. + + + + +The intended usage of the resource. + + + + +Identifies the resource as a vertex buffer. + + + + +Surface format of the vertex data. + + + + Describes a vertex buffer. + D3DVERTEXBUFFER_DESC + + + +Retrieves the specified surface level. + + Identifies the level whose surface is to be retrieved. + The surface of the specified level. + + + +Retrieves a level description of a texture resource. + + Identifies the level whose description is to be retrieved. + The surface description of the specified level. + + + +Marks the entire texture as dirty. + + A object describing the result of the operation. + + + +Adds a dirty region to a texture resource. + + A rectangle specifying the dirty region to add. + A object describing the result of the operation. + + + +Unlocks a previously locked region of a texture. + + The level of the texture to unlock. + A object describing the result of the operation. + + + +Locks a rectangle on a texture resource. + + The level of the texture to lock. + The region on the texture to lock. + Locking flags. + A describing the locked region. + + + +Locks a texture resource. + + The level of the texture to lock. + Locking flags. + A describing the locked region. + + + +Uses a compiled HLSL shader function to fill each texel of each mip level of a given texture. + + A texture shader object that is used to fill the texture. + A object describing the result of the operation. + + + +Uses a user-provided function to fill each texel of each mip level of a given texture. + + A function that is used to fill the texture. + A object describing the result of the operation. + + + +Converts a height map into a normal map. + + The destination texture. + The source height map texture. + Flags the control the generation of normal maps. + Flags specifying the source of height information. + Constant multiplier that increases or decreases values in the map. Higher values make bumps more visible, while lower values make them less visible. + A object describing the result of the operation. + + + +Converts a height map into a normal map. + + The destination texture. + The source height map texture. + The texture palette. + Flags the control the generation of normal maps. + Flags specifying the source of height information. + Constant multiplier that increases or decreases values in the map. Higher values make bumps more visible, while lower values make them less visible. + A object describing the result of the operation. + + + +Loads a texture from file. + + The device to be associated with the texture. + The name of the file containing the image. + The created texture object. + + + +Loads a texture from file. + + The device to be associated with the texture. + The name of the file containing the image. + The requested usage for the texture. + The memory class into which the texture should be placed. + The created texture object. + + + +Loads a texture from file. + + The device to be associated with the texture. + The name of the file containing the image. + Width of the texture, in pixels. + Height of the texture, in pixels. + Number of mipmap levels requested. If set to 0, mipmaps will automatically be generated. + The requested usage for the texture. + The surface format of the texture. + The memory class into which the texture should be placed. + Combination of flags controlling how the image is filtered. + Combination of flags controlling how the mipmaps are filtered. + Color value in the image to replace with black, or 0 to disable the color key. + The created texture object. + + + +Loads a texture from file. + + The device to be associated with the texture. + The name of the file containing the image. + Width of the texture, in pixels. + Height of the texture, in pixels. + Number of mipmap levels requested. If set to 0, mipmaps will automatically be generated. + The requested usage for the texture. + The surface format of the texture. + The memory class into which the texture should be placed. + Combination of flags controlling how the image is filtered. + Combination of flags controlling how the mipmaps are filtered. + Color value in the image to replace with black, or 0 to disable the color key. + When the method completes, contains additional information about the texture. + The created texture object. + + + +Loads a texture from file. + + The device to be associated with the texture. + The name of the file containing the image. + Width of the texture, in pixels. + Height of the texture, in pixels. + Number of mipmap levels requested. If set to 0, mipmaps will automatically be generated. + The requested usage for the texture. + The surface format of the texture. + The memory class into which the texture should be placed. + Combination of flags controlling how the image is filtered. + Combination of flags controlling how the mipmaps are filtered. + Color value in the image to replace with black, or 0 to disable the color key. + When the method completes, contains additional information about the texture. + When the method completes, contains the texture palette. + The created texture object. + + + +Creates a texture from a stream. + + The device to be associated with the texture. + The stream containing the texture data. + The created texture object. + + + +Creates a texture from a stream. + + The device to be associated with the texture. + The stream containing the texture data. + The requested usage for the texture. + The memory class into which the texture should be placed. + The created texture object. + + + +Creates a texture from a stream. + + The device to be associated with the texture. + The stream containing the texture data. + Width of the texture, in pixels. + Height of the texture, in pixels. + Number of mipmap levels requested. If set to 0, mipmaps will automatically be generated. + The requested usage for the texture. + The surface format of the texture. + The memory class into which the texture should be placed. + Combination of flags controlling how the image is filtered. + Combination of flags controlling how the mipmaps are filtered. + Color value in the image to replace with black, or 0 to disable the color key. + The created texture object. + + + +Creates a texture from a stream. + + The device to be associated with the texture. + The stream containing the texture data. + The size of the data, in bytes. + Width of the texture, in pixels. + Height of the texture, in pixels. + Number of mipmap levels requested. If set to 0, mipmaps will automatically be generated. + The requested usage for the texture. + The surface format of the texture. + The memory class into which the texture should be placed. + Combination of flags controlling how the image is filtered. + Combination of flags controlling how the mipmaps are filtered. + Color value in the image to replace with black, or 0 to disable the color key. + The created texture object. + + + +Creates a texture from a stream. + + The device to be associated with the texture. + The stream containing the texture data. + The size of the data, in bytes. + Width of the texture, in pixels. + Height of the texture, in pixels. + Number of mipmap levels requested. If set to 0, mipmaps will automatically be generated. + The requested usage for the texture. + The surface format of the texture. + The memory class into which the texture should be placed. + Combination of flags controlling how the image is filtered. + Combination of flags controlling how the mipmaps are filtered. + Color value in the image to replace with black, or 0 to disable the color key. + When the method completes, contains additional information about the texture. + The created texture object. + + + +Creates a texture from a stream. + + The device to be associated with the texture. + The stream containing the texture data. + The size of the data, in bytes. + Width of the texture, in pixels. + Height of the texture, in pixels. + Number of mipmap levels requested. If set to 0, mipmaps will automatically be generated. + The requested usage for the texture. + The surface format of the texture. + The memory class into which the texture should be placed. + Combination of flags controlling how the image is filtered. + Combination of flags controlling how the mipmaps are filtered. + Color value in the image to replace with black, or 0 to disable the color key. + When the method completes, contains additional information about the texture. + When the method completes, contains the texture palette. + The created texture object. + + + +Creates a texture from a specified block of memory. + + The device to be associated with the texture. + The memory block representing the texture. + The created texture object. + + + +Creates a texture from a specified block of memory. + + The device to be associated with the texture. + The memory block representing the texture. + The requested usage for the texture. + The memory class into which the texture should be placed. + The created texture object. + + + +Creates a texture from a specified block of memory. + + The device to be associated with the texture. + The memory block representing the texture. + Width of the texture, in pixels. + Height of the texture, in pixels. + Number of mipmap levels requested. If set to 0, mipmaps will automatically be generated. + The requested usage for the texture. + The surface format of the texture. + The memory class into which the texture should be placed. + Combination of flags controlling how the image is filtered. + Combination of flags controlling how the mipmaps are filtered. + Color value in the image to replace with black, or 0 to disable the color key. + The created texture object. + + + +Creates a texture from a specified block of memory. + + The device to be associated with the texture. + The memory block representing the texture. + Width of the texture, in pixels. + Height of the texture, in pixels. + Number of mipmap levels requested. If set to 0, mipmaps will automatically be generated. + The requested usage for the texture. + The surface format of the texture. + The memory class into which the texture should be placed. + Combination of flags controlling how the image is filtered. + Combination of flags controlling how the mipmaps are filtered. + Color value in the image to replace with black, or 0 to disable the color key. + When the method completes, contains additional information about the texture. + The created texture object. + + + +Creates a texture from a specified block of memory. + + The device to be associated with the texture. + The memory block representing the texture. + Width of the texture, in pixels. + Height of the texture, in pixels. + Number of mipmap levels requested. If set to 0, mipmaps will automatically be generated. + The requested usage for the texture. + The surface format of the texture. + The memory class into which the texture should be placed. + Combination of flags controlling how the image is filtered. + Combination of flags controlling how the mipmaps are filtered. + Color value in the image to replace with black, or 0 to disable the color key. + When the method completes, contains additional information about the texture. + When the method completes, contains the texture palette. + The created texture object. + + + +Checks texture-creation parameters. + + Device associated with the texture. + Requested width of the texture. + Requested height of the texture. + Requested number of mipmap levels for the texture. + The requested usage for the texture. + Requested format for the texture. + Memory class where the resource will be placed. + A value type containing the proposed values to pass to the texture creation functions. + + + +Releases all resources used by the . + + + + +Initializes a new instance of the class, setting it as a shared resource. + + The device used to create the texture. + The width of the texture, in pixels. + The height of the texture, in pixels. + Number of mipmap levels in the texture. If set to 0, mipmaps will automatically be generated. + The requested usage for the texture. + The surface format of the texture. + The memory class into which the texture should be placed. + The variable that will receive the shared handle for this resource. + This method is only available in Direct3D9 Ex. + + + +Initializes a new instance of the class. + + The device used to create the texture. + The width of the texture, in pixels. + The height of the texture, in pixels. + Number of mipmap levels in the texture. If set to 0, mipmaps will automatically be generated. + The requested usage for the texture. + The surface format of the texture. + The memory class into which the texture should be placed. + + + +Represents a two dimensional texture resource. + + IDirect3DTexture9 + + + +Retrieves the specified volume level. + + Identifies the level whose surface is to be retrieved. + The volume of the specified level. + + + +Retrieves a level description of a texture resource. + + Identifies the level whose description is to be retrieved. + The surface description of the specified level. + + + +Marks the entire texture as dirty. + + A object describing the result of the operation. + + + +Adds a dirty region to a texture resource. + + A box specifying the dirty region to add. + A object describing the result of the operation. + + + +Unlocks a previously locked region of a texture. + + The level of the texture to unlock. + A object describing the result of the operation. + + + +Locks a section of a texture resource. + + The level of the texture to lock. + The region on the texture to lock. + Locking flags. + A describing the locked region. + + + +Locks a texture resource. + + The level of the texture to lock. + Locking flags. + A describing the locked region. + + + +Uses a compiled HLSL shader function to fill each texel of each mip level of a given texture. + + A texture shader object that is used to fill the texture. + A object describing the result of the operation. + + + +Uses a user-provided function to fill each texel of each mip level of a given texture. + + A function that is used to fill the texture. + A object describing the result of the operation. + + + +Loads a texture from file. + + The device to be associated with the texture. + The name of the file containing the image. + The created texture object. + + + +Loads a texture from file. + + The device to be associated with the texture. + The name of the file containing the image. + The requested usage for the texture. + The memory class into which the texture should be placed. + The created texture object. + + + +Loads a texture from file. + + The device to be associated with the texture. + The name of the file containing the image. + Width of the texture, in pixels. + Height of the texture, in pixels. + Depth of the texture, in pixels. + Number of mipmap levels requested. If set to 0, mipmaps will automatically be generated. + The requested usage for the texture. + The surface format of the texture. + The memory class into which the texture should be placed. + Combination of flags controlling how the image is filtered. + Combination of flags controlling how the mipmaps are filtered. + Color value in the image to replace with black, or 0 to disable the color key. + The created texture object. + + + +Loads a texture from file. + + The device to be associated with the texture. + The name of the file containing the image. + Width of the texture, in pixels. + Height of the texture, in pixels. + Depth of the texture, in pixels. + Number of mipmap levels requested. If set to 0, mipmaps will automatically be generated. + The requested usage for the texture. + The surface format of the texture. + The memory class into which the texture should be placed. + Combination of flags controlling how the image is filtered. + Combination of flags controlling how the mipmaps are filtered. + Color value in the image to replace with black, or 0 to disable the color key. + When the method completes, contains additional information about the texture. + The created texture object. + + + +Loads a texture from file. + + The device to be associated with the texture. + The name of the file containing the image. + Width of the texture, in pixels. + Height of the texture, in pixels. + Depth of the texture, in pixels. + Number of mipmap levels requested. If set to 0, mipmaps will automatically be generated. + The requested usage for the texture. + The surface format of the texture. + The memory class into which the texture should be placed. + Combination of flags controlling how the image is filtered. + Combination of flags controlling how the mipmaps are filtered. + Color value in the image to replace with black, or 0 to disable the color key. + When the method completes, contains additional information about the texture. + When the method completes, contains the texture palette. + The created texture object. + + + +Creates a texture from a stream. + + The device to be associated with the texture. + The stream containing the texture data. + The created texture object. + + + +Creates a texture from a stream. + + The device to be associated with the texture. + The stream containing the texture data. + The requested usage for the texture. + The memory class into which the texture should be placed. + The created texture object. + + + +Creates a texture from a stream. + + The device to be associated with the texture. + The stream containing the texture data. + Width of the texture, in pixels. + Height of the texture, in pixels. + Depth of the texture, in pixels. + Number of mipmap levels requested. If set to 0, mipmaps will automatically be generated. + The requested usage for the texture. + The surface format of the texture. + The memory class into which the texture should be placed. + Combination of flags controlling how the image is filtered. + Combination of flags controlling how the mipmaps are filtered. + Color value in the image to replace with black, or 0 to disable the color key. + The created texture object. + + + +Creates a texture from a stream. + + The device to be associated with the texture. + The stream containing the texture data. + The size of the data, in bytes. + Width of the texture, in pixels. + Height of the texture, in pixels. + Depth of the texture, in pixels. + Number of mipmap levels requested. If set to 0, mipmaps will automatically be generated. + The requested usage for the texture. + The surface format of the texture. + The memory class into which the texture should be placed. + Combination of flags controlling how the image is filtered. + Combination of flags controlling how the mipmaps are filtered. + Color value in the image to replace with black, or 0 to disable the color key. + The created texture object. + + + +Creates a texture from a stream. + + The device to be associated with the texture. + The stream containing the texture data. + The size of the data, in bytes. + Width of the texture, in pixels. + Height of the texture, in pixels. + Depth of the texture, in pixels. + Number of mipmap levels requested. If set to 0, mipmaps will automatically be generated. + The requested usage for the texture. + The surface format of the texture. + The memory class into which the texture should be placed. + Combination of flags controlling how the image is filtered. + Combination of flags controlling how the mipmaps are filtered. + Color value in the image to replace with black, or 0 to disable the color key. + When the method completes, contains additional information about the texture. + The created texture object. + + + +Creates a texture from a stream. + + The device to be associated with the texture. + The stream containing the texture data. + The size of the data, in bytes. + Width of the texture, in pixels. + Height of the texture, in pixels. + Depth of the texture, in pixels. + Number of mipmap levels requested. If set to 0, mipmaps will automatically be generated. + The requested usage for the texture. + The surface format of the texture. + The memory class into which the texture should be placed. + Combination of flags controlling how the image is filtered. + Combination of flags controlling how the mipmaps are filtered. + Color value in the image to replace with black, or 0 to disable the color key. + When the method completes, contains additional information about the texture. + When the method completes, contains the texture palette. + The created texture object. + + + +Creates a texture from a specified block of memory. + + The device to be associated with the texture. + The memory block representing the texture. + The created texture object. + + + +Creates a texture from a specified block of memory. + + The device to be associated with the texture. + The memory block representing the texture. + The requested usage for the texture. + The memory class into which the texture should be placed. + The created texture object. + + + +Creates a texture from a specified block of memory. + + The device to be associated with the texture. + The memory block representing the texture. + Width of the texture, in pixels. + Height of the texture, in pixels. + Number of mipmap levels requested. If set to 0, mipmaps will automatically be generated. + The requested usage for the texture. + The surface format of the texture. + The memory class into which the texture should be placed. + Combination of flags controlling how the image is filtered. + Combination of flags controlling how the mipmaps are filtered. + Color value in the image to replace with black, or 0 to disable the color key. + The created texture object. + + + +Creates a texture from a specified block of memory. + + The device to be associated with the texture. + The memory block representing the texture. + Width of the texture, in pixels. + Height of the texture, in pixels. + Number of mipmap levels requested. If set to 0, mipmaps will automatically be generated. + The requested usage for the texture. + The surface format of the texture. + The memory class into which the texture should be placed. + Combination of flags controlling how the image is filtered. + Combination of flags controlling how the mipmaps are filtered. + Color value in the image to replace with black, or 0 to disable the color key. + When the method completes, contains additional information about the texture. + The created texture object. + + + +Creates a texture from a specified block of memory. + + The device to be associated with the texture. + The memory block representing the texture. + Width of the texture, in pixels. + Height of the texture, in pixels. + Number of mipmap levels requested. If set to 0, mipmaps will automatically be generated. + The requested usage for the texture. + The surface format of the texture. + The memory class into which the texture should be placed. + Combination of flags controlling how the image is filtered. + Combination of flags controlling how the mipmaps are filtered. + Color value in the image to replace with black, or 0 to disable the color key. + When the method completes, contains additional information about the texture. + When the method completes, contains the texture palette. + The created texture object. + + + +Checks texture-creation parameters. + + Device associated with the texture. + Requested width of the texture. + Requested height of the texture. + Requested depth of the texture. + Requested number of mipmap levels for the texture. + The requested usage for the texture. + Requested format for the texture. + Memory class where the resource will be placed. + A value type containing the proposed values to pass to the texture creation functions. + + + +Releases all resources used by the . + + + + +Initializes a new instance of the class. + + The device used to create the texture. + The width of the texture, in pixels. + The height of the texture, in pixels. + The depth of the texture, in pixels. + Number of mipmap levels in the texture. If set to 0, mipmaps will automatically be generated. + The requested usage for the texture. + The surface format of the texture. + The memory class into which the texture should be placed. + The variable that will receive the shared handle for this resource. + This method is only available in Direct3D9 Ex. + + + +Initializes a new instance of the class. + + The device used to create the texture. + The width of the texture, in pixels. + The height of the texture, in pixels. + The depth of the texture, in pixels. + Number of mipmap levels in the texture. If set to 0, mipmaps will automatically be generated. + The requested usage for the texture. + The surface format of the texture. + The memory class into which the texture should be placed. + + + +Represents a three dimensional texture resource. + + IDirect3DVolumeTexture9 + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +The suggested mip level count. + + + + +The suggested surface format. + + + + +The suggested depth of the texture, in pixels. + + + + +The suggested height of the texture, in pixels. + + + + +The suggested width of the texture, in pixels. + + + + +Contains suggested texture creation parameters for volume textures. + + None + + + +Retrieves the specified surface level. + + The cube map face to operate on. + Identifies the level whose surface is to be retrieved. + The surface of the specified level. + + + +Retrieves a level description of a texture resource. + + Identifies the level whose description is to be retrieved. + The surface description of the specified level. + + + +Marks the entire texture face as dirty. + + The cube map face to operate on. + A object describing the result of the operation. + + + +Adds a dirty region to a texture resource. + + The cube map face to operate on. + A rectangle specifying the dirty region to add. + A object describing the result of the operation. + + + +Unlocks a previously locked region of a texture. + + The cube map face to operate on. + The level of the texture to unlock. + A object describing the result of the operation. + + + +Locks a rectangle on a texture resource. + + The cube map face to operate on. + The level of the texture to lock. + The region on the texture to lock. + Locking flags. + A describing the locked region. + + + +Locks a texture resource. + + The cube map face to operate on. + The level of the texture to lock. + Locking flags. + A describing the locked region. + + + +Uses a compiled HLSL shader function to fill each texel of each mip level of a given texture. + + A texture shader object that is used to fill the texture. + A object describing the result of the operation. + + + +Uses a user-provided function to fill each texel of each mip level of a given texture. + + A function that is used to fill the texture. + A object describing the result of the operation. + + + +Loads a texture from file. + + The device to be associated with the texture. + The name of the file containing the image. + The created texture object. + + + +Loads a texture from file. + + The device to be associated with the texture. + The name of the file containing the image. + The requested usage for the texture. + The memory class into which the texture should be placed. + The created texture object. + + + +Loads a texture from file. + + The device to be associated with the texture. + The name of the file containing the image. + Size of the texture, in pixels. + Number of mipmap levels requested. If set to 0, mipmaps will automatically be generated. + The requested usage for the texture. + The surface format of the texture. + The memory class into which the texture should be placed. + Combination of flags controlling how the image is filtered. + Combination of flags controlling how the mipmaps are filtered. + Color value in the image to replace with black, or 0 to disable the color key. + The created texture object. + + + +Loads a texture from file. + + The device to be associated with the texture. + The name of the file containing the image. + Size of the texture, in pixels. + Number of mipmap levels requested. If set to 0, mipmaps will automatically be generated. + The requested usage for the texture. + The surface format of the texture. + The memory class into which the texture should be placed. + Combination of flags controlling how the image is filtered. + Combination of flags controlling how the mipmaps are filtered. + Color value in the image to replace with black, or 0 to disable the color key. + When the method completes, contains additional information about the texture. + The created texture object. + + + +Loads a texture from file. + + The device to be associated with the texture. + The name of the file containing the image. + Size of the texture, in pixels. + Number of mipmap levels requested. If set to 0, mipmaps will automatically be generated. + The requested usage for the texture. + The surface format of the texture. + The memory class into which the texture should be placed. + Combination of flags controlling how the image is filtered. + Combination of flags controlling how the mipmaps are filtered. + Color value in the image to replace with black, or 0 to disable the color key. + When the method completes, contains additional information about the texture. + When the method completes, contains the texture palette. + The created texture object. + + + +Creates a texture from a stream. + + The device to be associated with the texture. + The stream containing the texture data. + The created texture object. + + + +Creates a texture from a stream. + + The device to be associated with the texture. + The stream containing the texture data. + The requested usage for the texture. + The memory class into which the texture should be placed. + The created texture object. + + + +Creates a texture from a stream. + + The device to be associated with the texture. + The stream containing the texture data. + Size of the texture, in pixels. + Number of mipmap levels requested. If set to 0, mipmaps will automatically be generated. + The requested usage for the texture. + The surface format of the texture. + The memory class into which the texture should be placed. + Combination of flags controlling how the image is filtered. + Combination of flags controlling how the mipmaps are filtered. + Color value in the image to replace with black, or 0 to disable the color key. + The created texture object. + + + +Creates a texture from a stream. + + The device to be associated with the texture. + The stream containing the texture data. + The size of the data, in bytes. + Size of the texture, in pixels. + Number of mipmap levels requested. If set to 0, mipmaps will automatically be generated. + The requested usage for the texture. + The surface format of the texture. + The memory class into which the texture should be placed. + Combination of flags controlling how the image is filtered. + Combination of flags controlling how the mipmaps are filtered. + Color value in the image to replace with black, or 0 to disable the color key. + The created texture object. + + + +Creates a texture from a stream. + + The device to be associated with the texture. + The stream containing the texture data. + The size of the data, in bytes. + Size of the texture, in pixels. + Number of mipmap levels requested. If set to 0, mipmaps will automatically be generated. + The requested usage for the texture. + The surface format of the texture. + The memory class into which the texture should be placed. + Combination of flags controlling how the image is filtered. + Combination of flags controlling how the mipmaps are filtered. + Color value in the image to replace with black, or 0 to disable the color key. + When the method completes, contains additional information about the texture. + The created texture object. + + + +Creates a texture from a stream. + + The device to be associated with the texture. + The stream containing the texture data. + The size of the data, in bytes. + Size of the texture, in pixels. + Number of mipmap levels requested. If set to 0, mipmaps will automatically be generated. + The requested usage for the texture. + The surface format of the texture. + The memory class into which the texture should be placed. + Combination of flags controlling how the image is filtered. + Combination of flags controlling how the mipmaps are filtered. + Color value in the image to replace with black, or 0 to disable the color key. + When the method completes, contains additional information about the texture. + When the method completes, contains the texture palette. + The created texture object. + + + +Creates a texture from a specified block of memory. + + The device to be associated with the texture. + The memory block representing the texture. + The created texture object. + + + +Creates a texture from a specified block of memory. + + The device to be associated with the texture. + The memory block representing the texture. + The requested usage for the texture. + The memory class into which the texture should be placed. + The created texture object. + + + +Creates a texture from a specified block of memory. + + The device to be associated with the texture. + The memory block representing the texture. + Size of the texture, in pixels. + Number of mipmap levels requested. If set to 0, mipmaps will automatically be generated. + The requested usage for the texture. + The surface format of the texture. + The memory class into which the texture should be placed. + Combination of flags controlling how the image is filtered. + Combination of flags controlling how the mipmaps are filtered. + Color value in the image to replace with black, or 0 to disable the color key. + The created texture object. + + + +Creates a texture from a specified block of memory. + + The device to be associated with the texture. + The memory block representing the texture. + Size of the texture, in pixels. + Number of mipmap levels requested. If set to 0, mipmaps will automatically be generated. + The requested usage for the texture. + The surface format of the texture. + The memory class into which the texture should be placed. + Combination of flags controlling how the image is filtered. + Combination of flags controlling how the mipmaps are filtered. + Color value in the image to replace with black, or 0 to disable the color key. + When the method completes, contains additional information about the texture. + The created texture object. + + + +Creates a texture from a specified block of memory. + + The device to be associated with the texture. + The memory block representing the texture. + Size of the texture, in pixels. + Number of mipmap levels requested. If set to 0, mipmaps will automatically be generated. + The requested usage for the texture. + The surface format of the texture. + The memory class into which the texture should be placed. + Combination of flags controlling how the image is filtered. + Combination of flags controlling how the mipmaps are filtered. + Color value in the image to replace with black, or 0 to disable the color key. + When the method completes, contains additional information about the texture. + When the method completes, contains the texture palette. + The created texture object. + + + +Checks texture-creation parameters. + + Device associated with the texture. + Requested size of the texture. + Requested number of mipmap levels for the texture. + The requested usage for the texture. + Requested format for the texture. + Memory class where the resource will be placed. + A value type containing the proposed values to pass to the texture creation functions. + + + +Releases all resources used by the . + + + + +Initializes a new instance of the class. + + The device used to create the texture. + The length of each edge of the texture, in pixels. + Number of mipmap levels in the texture. If set to 0, mipmaps will automatically be generated. + The requested usage for the texture. + The surface format of the texture. + The memory class into which the texture should be placed. + The variable that will receive the shared handle for this resource. + This method is only available in Direct3D9 Ex. + + + +Initializes a new instance of the class. + + The device used to create the texture. + The length of each edge of the texture, in pixels. + Number of mipmap levels in the texture. If set to 0, mipmaps will automatically be generated. + The requested usage for the texture. + The surface format of the texture. + The memory class into which the texture should be placed. + + + +Represents a cubic texture resource. + + IDirect3DCubeTexture9 + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +The suggested mip level count. + + + + +The suggested surface format. + + + + +The suggested size of the texture, in pixels. + + + + +Contains suggested texture creation parameters for cube textures. + + None + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Retrieves information about an image from a stream. + + Stream containing the image. + Information about the image. + + + +Retrieves information about an image from a stream. + + Stream containing the image. + + true to preserve the stream position; false will move the stream pointer. + Information about the image. + + + +Retrieves information about an image from memory. + + A block of memory containing the image. + Information about the image. + + + +Retrieves information about an image file. + + Name of the image file. + Information about the image. + + + +The format of the image file. + + + + +The type of the texture stored in the file. + + + + +The original format of the image. + + + + +Number of mip levels in the original image. + + + + +Depth of the original image, in pixels. + + + + +Height of the original image, in pixels. + + + + +Width of the original image, in pixels. + + + + +Contains the description of the contents of an image file. + + D3DXIMAGE_INFO + + + +Gets the raw shader stream. + + + + +Gets the raw stream of constant data. + + + + +Gets the constant table description. + + + + +Resets constant values to those defined in the shader. + + A object describing the result of the operation. + + + +Sets an array of effect parameter values. + + The effect parameter. + The parameter values. + A object describing the result of the operation. + + + +Sets an effect parameter value. + + The effect parameter. + The parameter value. + A object describing the result of the operation. + + + +Sets an array of effect parameter values. + + The effect parameter. + The parameter values. + A object describing the result of the operation. + + + +Sets an effect parameter value. + + The effect parameter. + The parameter value. + A object describing the result of the operation. + + + +Sets an array of effect parameter values. + + The effect parameter. + The parameter values. + A object describing the result of the operation. + + + +Sets an effect parameter value. + + The effect parameter. + The parameter value. + A object describing the result of the operation. + + + +Sets an array of effect parameter values. + + The effect parameter. + The parameter values. + A object describing the result of the operation. + + + +Sets an effect parameter value. + + The effect parameter. + The parameter value. + A object describing the result of the operation. + + + +Sets an array of effect parameter values. + + The effect parameter. + The parameter values. + A object describing the result of the operation. + + + +Sets an effect parameter value. + + The effect parameter. + The parameter value. + A object describing the result of the operation. + + + +Sets an array of effect parameter values. + + The effect parameter. + The parameter values. + A object describing the result of the operation. + + + +Sets an effect parameter value. + + The effect parameter. + The parameter value. + A object describing the result of the operation. + + + +Sets an array of effect parameter values. + + The effect parameter. + The parameter values. + A object describing the result of the operation. + + + +Sets an effect parameter value. + + The effect parameter. + The parameter value. + A object describing the result of the operation. + + + +Gets a list of descriptions for an array constant. + + The array handle. + The list of constant descriptions. + + + +Gets a description for a constant. + + The constant handle. + The description of the constant. + + + +Gets a constant from the constant table. + + The array handle. + The index of the constant. + A handle to the constant data. + + + +Gets a constant by looking up its name. + + The parent handle. + The name of the constant. + A handle to the constant data. + + + +Gets a constant by looking up its index. + + The parent handle. + The index of the constant. + A handle to the constant data. + + + +Initializes a new instance of the class. + + A stream of compiled shader data. + + + +Represents a compiled shader designed to fill textures with image data. + + ID3DXTextureShader + + + +Gets the pool of shared effect parameters. + + + + +Gets the device associated with the effect. + + + + +Gets or sets the effect state manager. + + + + +Gets or sets the currently active technique. + + + + +Disassembles the effect. + + + true to enable color coding to make the disassembly easier to read, false to disable color coding. + +A that contains the disassembled effect. + + + + +Sets a contiguous range of shader constants. + + Handle to the value to set. + The data used to set the handle. + The starting offset into the data, in bytes. + The number of bytes of data to set. + A object describing the result of the operation. + + + Ccalled when the Direct3D device has been reset. + A object describing the result of the operation. + + + Called when the Direct3D device has been lost. + A object describing the result of the operation. + + + +Validates a technique. + + Handle of the technique. + + true if the technique is valid; otherwise, false. + + + +Searches for the next valid technique. + + The starting point for the search. + The next valid technique. + + + +Propagates state changes that occur inside of an active pass to the device before rendering. + + A object describing the result of the operation. + + + +Determines whether a parameter is used by a technique. + + Handle of the parameter. + Handle of the technique. + + true if the parameter is used by the technique; otherwise, false. + + + +Deletes a stored parameter state block. + + Handle to the parameter block. + A object describing the result of the operation. + + + +Applies a parameter state block to the effect. + + Handle to the parameter block. + A object describing the result of the operation. + + + +Stops capturing state changes. + + A handle to the parameter state block. + + + +Starts capturing state changes in a parameter block. + + A object describing the result of the operation. + + + +Ends the current effect pass. + + A object describing the result of the operation. + + + +Begins an effect pass. + + Index of the pass to start. + A object describing the result of the operation. + + + +Ends the active rendering technique. + + A object describing the result of the operation. + + + +Starts an active technique. + + The number of passes required to complete the technique. + + + +Starts an active technique. + + Rendering flags. + The number of passes required to complete the technique. + + + +Creates a copy of the effect. + + The device associated with the effect. + The cloned effect. + + + +Creates an effect from a file. + + The device used to create the effect. + The name of the source file containing the effect data. + A set of flags describing effect creation options. + The created effect object. + + + +Creates an effect from a file. + + The device used to create the effect. + The name of the source file containing the effect data. + A set of preprocessor definitions. + An include file handler. + A set of constants that will be ignored by the effect system. + A set of flags describing effect creation options. + The created effect object. + + + +Creates an effect from a file. + + The device used to create the effect. + The name of the source file containing the effect data. + A set of preprocessor definitions. + An include file handler. + A set of constants that will be ignored by the effect system. + A set of flags describing effect creation options. + The pool used for shared effect parameters. + The created effect object. + + + +Creates an effect from a file. + + The device used to create the effect. + The name of the source file containing the effect data. + A set of preprocessor definitions. + An include file handler. + A set of constants that will be ignored by the effect system. + A set of flags describing effect creation options. + The pool used for shared effect parameters. + When the method completes, contains compilation errors and warnings. + The created effect object. + + + +Creates an effect from a string. + + The device used to create the effect. + A string containing the effect data. + A set of flags describing effect creation options. + The created effect object. + + + +Creates an effect from a string. + + The device used to create the effect. + A string containing the effect data. + A set of preprocessor definitions. + An include file handler. + A set of constants that will be ignored by the effect system. + A set of flags describing effect creation options. + The created effect object. + + + +Creates an effect from a string. + + The device used to create the effect. + A string containing the effect data. + A set of preprocessor definitions. + An include file handler. + A set of constants that will be ignored by the effect system. + A set of flags describing effect creation options. + The pool used for shared effect parameters. + The created effect object. + + + +Creates an effect from a string. + + The device used to create the effect. + A string containing the effect data. + A set of preprocessor definitions. + An include file handler. + A set of constants that will be ignored by the effect system. + A set of flags describing effect creation options. + The pool used for shared effect parameters. + When the method completes, contains compilation errors and warnings. + The created effect object. + + + +Creates an effect from a stream. + + The device used to create the effect. + A stream containing the effect data. + A set of flags describing effect creation options. + The created effect object. + + + +Creates an effect from a stream. + + The device used to create the effect. + A stream containing the effect data. + A set of preprocessor definitions. + An include file handler. + A set of constants that will be ignored by the effect system. + A set of flags describing effect creation options. + The created effect object. + + + +Creates an effect from a stream. + + The device used to create the effect. + A stream containing the effect data. + A set of preprocessor definitions. + An include file handler. + A set of constants that will be ignored by the effect system. + A set of flags describing effect creation options. + The pool used for shared effect parameters. + The created effect object. + + + +Creates an effect from a stream. + + The device used to create the effect. + A stream containing the effect data. + A set of preprocessor definitions. + An include file handler. + A set of constants that will be ignored by the effect system. + A set of flags describing effect creation options. + The pool used for shared effect parameters. + When the method completes, contains compilation errors and warnings. + The created effect object. + + + +Creates an effect from a block of memory. + + The device used to create the effect. + A block of memory containing the effect data. + A set of flags describing effect creation options. + The created effect object. + + + +Creates an effect from a block of memory. + + The device used to create the effect. + A block of memory containing the effect data. + A set of preprocessor definitions. + An include file handler. + A set of constants that will be ignored by the effect system. + A set of flags describing effect creation options. + The created effect object. + + + +Creates an effect from a block of memory. + + The device used to create the effect. + A block of memory containing the effect data. + A set of preprocessor definitions. + An include file handler. + A set of constants that will be ignored by the effect system. + A set of flags describing effect creation options. + The pool used for shared effect parameters. + The created effect object. + + + +Creates an effect from a block of memory. + + The device used to create the effect. + A block of memory containing the effect data. + A set of preprocessor definitions. + An include file handler. + A set of constants that will be ignored by the effect system. + A set of flags describing effect creation options. + The pool used for shared effect parameters. + When the method completes, contains compilation errors and warnings. + The created effect object. + + + +Releases all resources used by the . + + + + +Represents a Direct3D rendering effect. + + ID3DXEffect + + + Applications use pools for parameters that are shared across effects. + ID3DXEffectPool + + + Should be called when the Direct3D device has been reset. + A object describing the result of the operation. + + + Should be called when the Direct3D device has been lost. + A object describing the result of the operation. + + + Interface for classes which can respond to device lost and reset events. + + + +Gets the effect description. + + + + +Gets a vertex shader from the effect. + + The effect parameter identifying the shader. + The requested vertex shader. + + + +Gets a pixel shader from the effect. + + The effect parameter identifying the shader. + The requested pixel shader. + + + +Sets the value of a parameter using the specified data. + + The parameter whose value is to be set. + The new value for the parameter. + A object describing the result of the operation. + + + +Gets the value of the specified parameter as a string. + + Handle of the parameter. + The string value of the parameter. + + + +Sets the value of a parameter using the specified data. + + The parameter whose value is to be set. + The new value for the parameter. + A object describing the result of the operation. + + + +Gets the value of the specified parameter as a texture. + + Handle of the parameter. + The texture value of the parameter. + + + +Sets the value of a parameter using the specified data. + + The array parameter whose value is to be set. + The array of new values for the array parameter. + A object describing the result of the operation. + + + +Sets the value of a parameter using the specified data. + + The parameter whose value is to be set. + The new value for the parameter. + A object describing the result of the operation. + + + +Gets the value of the specified parameter. + + Handle of the parameter. + The value of the parameter. + + + +Gets the value of the specified parameter. + + Handle of the parameter. + The value of the parameter. + + + +Gets the description of a pass. + + Handle to the pass. + The pass description. + + + +Gets the handle of a pass. + + Handle of the parent technique. + Name of the pass. + The handle of the pass. + + + +Gets the handle of a pass. + + Handle of the parent technique. + Pass index. + The handle of the pass. + + + +Gets a technique description. + + Handle to the technique. + The technique description. + + + +Gets the handle of a technique. + + Name of the technique. + The handle of the technique. + + + +Gets the handle of a technique. + + Technique index. + The handle of the technique. + + + +Gets a function description. + + Handle to the function. + The function description. + + + +Gets the handle of a function. + + Name of the function. + The handle of the function. + + + +Gets the handle of a function. + + Function index. + The handle of the function. + + + +Gets a parameter or annotation description. + + Handle of the parameter or annotation. + The description of the specified parameter or annotation. + + + +Gets the handle of an array element parameter. + + Handle of the array. + Array parameter index. + The handle of the parameter. + + + +Gets the handle of a parameter by looking up its semantic. + + Handle of the parameter, or null for top-level parameters. + The name of the semantic. + The handle of the parameter. + + + +Gets the handle of a parameter. + + Handle of the parameter, or null for top-level parameters. + Name of the parameter. + The handle of the parameter. + + + +Gets the handle of a parameter. + + Handle of the parameter, or null for top-level parameters. + Parameter index. + The handle of the parameter. + + + +Gets the handle of an annotation. + + Handle of a technique, pass, or top-level parameter. + Name of the annotation. + The handle of the annotation. + + + +Gets the handle of an annotation. + + Handle of a technique, pass, or top-level parameter. + Annotation index. + The handle of the annotation. + + + +Initializes a new instance of the class. + + + + +Provides methods for getting and setting effect parameters such as constants, functions, shaders, and techniques. + + ID3DXBaseEffect + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +The size of the parameter, in bytes. + + + + +Flags describing the attributes of the parameter. + + + + +Number of structure members. + + + + +Number of annotations applied to the parameter. + + + + +Number of elements in the array. + + + + +Number of columns in the array. + + + + +Number of rows in the array. + + + + +The parameter type. + + + + +The parameter class. + + + + +Semantic meaning of the parameter. + + + + +Name of the parameter. + + + + +Describes a parameter used by an effect. + + D3DXPARAMETER_DESC + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Pointer to the pixel shader function. + + + + +Pointer to the vertex shader function. + + + + +The number of annotations contained by the pass. + + + + +The name of the pass. + + + + +Describes a pass used by an effect. + + D3DXPASS_DESC + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +The number of annotations contained by the technique. + + + + +The number of passes in the technique. + + + + +The name of the technique. + + + + +Describes a technique used by an effect. + + D3DXTECHNIQUE_DESC + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +The number of annotation contained by the function. + + + + +The name of the function. + + + + +Describes a function used by an effect. + + D3DXFUNCTION_DESC + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Number of functions in the effect. + + + + +Number of techniques in the effect. + + + + +Number of parameters in the effect. + + + + +The name of the effect's creator. + + + + +Describes an effect object. + + D3DXEFFECT_DESC + + + A handle to an effect or an object inside an effect. + D3DXHANDLE + + + +Gets or sets the level of detail for the texture. + + + + +Gets the number of texture levels in a multilevel texture. + + + + +Gets or sets the filter used to automatically generate mipmaps. + + + + +Saves a texture to a file. + + The texture containing the image to save. + The name of the file to save to. + The file format to use when saving. + The texture palette. + A object describing the result of the operation. + + + +Saves a texture to a file. + + The texture containing the image to save. + The name of the file to save to. + The file format to use when saving. + A object describing the result of the operation. + + + +Saves a texture to a stream. + + The texture containing the image to save. + The file format to use when saving. + The texture palette. + A containing the texture image. + + + +Saves a texture to a stream. + + The texture containing the image to save. + The file format to use when saving. + A containing the texture image. + + + +Generates mipmap sublevels. + + + + +Filters mipmap levels of a texture. + + The mipmap level whose image is used to generate the subsequent levels. + Set of filtering options for the mipmap. + A object describing the result of the operation. + + + +Filters mipmap levels of a texture. + + The mipmap level whose image is used to generate the subsequent levels. + Set of filtering options for the mipmap. + The texture palette. + A object describing the result of the operation. + + + +Releases all resources used by the . + + + + +Initializes a new instance of the class. + + + + +Represents a base class for all texture resources. + + IDirect3DBaseTexture9 + + + Applications use the methods of the Volume class to manipulate volume resources. + IDirect3DVolume9 + + + Describes a volume. + D3DVOLUME_DESC + + + Defines a volume. + D3DBOX + + + Returns a description of the surface. + + + Unlocks a rectangle on the surface. + A result code indicating whether the unlock was successful. + + + Locks a rectangle on the surface. + The area to lock. + Combination of flags describing the type of lock to perform. + Data describing the locked area. + + + Locks a rectangle on the surface. + Combination of flags describing the type of lock to perform. + Data describing the locked area. + + + + + + + + + + + + + + . + + + Loads a surface from memory. + The destination surface that will receive the image. + The array containing the surface data + Combination of one or more flags controlling how the image is filtered. + A color value to replace with transparent black, or 0 to disable colorkey. + Pixel format of the source image. + Surface pitch of the source image, in bytes. + Specifies the dimensions of the source image. + A result code indicating success or failure.. + + + Loads a surface from memory. + The destination surface that will receive the image. + The array containing the surface data + Combination of one or more flags controlling how the image is filtered. + A color value to replace with transparent black, or 0 to disable colorkey. + Pixel format of the source image. + Surface pitch of the source image, in bytes. + Specifies the dimensions of the source image. + Specifies the destination rectangle to use. + A result code indicating success or failure. + + + Loads a surface from memory. + The destination surface that will receive the image. + The array containing the surface data + Combination of one or more flags controlling how the image is filtered. + A color value to replace with transparent black, or 0 to disable colorkey. + Pixel format of the source image. + Surface pitch of the source image, in bytes. + Specifies the dimensions of the source image. + The source image palette (256 colors). + The destination palette (256 colors). + A result code indicating success or failure. + + + Loads a surface from memory. + The destination surface that will receive the image. + The array containing the surface data + Combination of one or more flags controlling how the image is filtered. + A color value to replace with transparent black, or 0 to disable colorkey. + Pixel format of the source image. + Surface pitch of the source image, in bytes. + Specifies the dimensions of the source image. + Specifies the destination rectangle to use. + The source image palette (256 colors). + The destination palette (256 colors). + A result code indicating success or failure. + + + Creates a depth stencil surface that can optionally be shared. + The device to use when creating the surface. + The width of the surface, in pixels. + The height of the surface, in pixels. + Describes the format to use. + The multisample type of the buffer. + The multisampling quality level. + Whether or not the contents of the surface should be discarded after use. + A newly created depth-stencil surface. + IDirect3DDevice9::CreateDepthStencilSurface + + + Creates an offscreen surface that can optionally be shared. + The device to use when creating the surface. + The width of the surface, in pixels. + The height of the surface, in pixels. + Describes the format to use. + The memory pool to create the surface in. + A newly created offscreen surface.. + IDirect3DDevice9::CreateOffscreenPlainSurface + + + Creates a render target surface that can optionally be shared. + The device to use when creating the surface. + The width of the render target surface, in pixels. + The height of the render target surface, in pixels. + The format to use for this render target. + The multisample type of the buffer. + The multisampling quality level. + Specifies whether this surface should be lockable. + A newly created render target surface. + IDirect3DDevice9::CreateRenderTarget + + + Creates a depth stencil surface. + The device to use when creating the surface. + The width of the surface, in pixels. + The height of the surface, in pixels. + Describes the format to use. + The multisample type of the buffer. + The multisampling quality level. + Whether or not the contents of the surface should be discarded after use. + A newly created depth-stencil surface. + IDirect3DDevice9::CreateDepthStencilSurface + + + Creates an offscreen surface. + The device to use when creating the surface. + The width of the surface, in pixels. + The height of the surface, in pixels. + Describes the format to use. + The memory pool to create the surface in. + A newly created offscreen surface.. + IDirect3DDevice9::CreateOffscreenPlainSurface + + + Creates a render target surface. + The device to use when creating the surface. + The width of the render target surface, in pixels. + The height of the render target surface, in pixels. + The format to use for this render target. + The multisample type of the buffer. + The multisampling quality level. + Specifies whether this surface should be lockable. + A newly created render target surface. + IDirect3DDevice9::CreateRenderTarget + + + Applications use the methods of the Surface class to query and prepare surfaces. + IDirect3DSurface9 + + + Describes a surface. + D3DSURFACE_DESC + + + +Gets the containing the actual data bytes. + + + + +Gets or sets the number of bytes of data between two consecutive (1D) rows of data. + + + + +Initializes a new instance of the class. + + The row pitch, in bytes. + The data. + + + +A DataRectangle provides supporting information for a whose +data is organized within two dimensions (a rectangle). + + None + + + +Creates a new device and swap chain. + + The display adapter to associate the device with when creating a hardware device. + The device driver type. + Flags that indicate which device API layers to enable. + Swap chain properties. + The newly-created device. + The newly-created swap chain. + A result code. + + + +Sets a rendering predicate. + + The predicate to set. + If true, rendering will be affected when the predicate's conditions are met. Otherwise, +rendering will be affected when the predicate's conditions are not met. + + + +Generates mipmaps for the specified shader resource. + + A view of the resource to generate mipmaps for. + + + +Sends queued commands in the command buffer to the GPU. + + + + +Renders primitive data of an unknown size that was created by a geometry shader. + + + + +Renders indexed, instanced primitive data. + + The number of indices to use per index. + The number of instances to render. + The index of the first index. + The index of the first vertex. + The index of the first instance. + + + +Renders indexed, non-instanced primitive data. + + The number of indices to use. + The index of the first index. + The index of the first vertex. + + + +Renders non-indexed, instanced primitive data. + + The number of vertices to use per index. + The number of instances to render. + The index of the first vertex. + The index of the first instance. + + + +Renders non-indexed, non-instanced primitive data. + + The number of vertices to use. + The index of the first vertex. + + + +Copies data from the CPU to to a non-mappable subresource region. + + The source data. + The destination resource. + The destination subresource. + The destination region within the resource. + + + +Copies data from the CPU to to a non-mappable subresource region. + + The source data. + The destination resource. + The destination subresource. + + + +Copies a multisampled resource into a non-multisampled resource. + + The source resource. + The source subresource. + The destination resource. + The destination subresource. + The format that indicates how the multisampled resource will be resolved. + + + +Copies an entire region of a resource's subresource data using the GPU. + + The source resource. + The source subresource. + The destination resource. + The destination subresource. + The X offset between the source region origin and the destination location. + The Y offset between the source region origin and the destination location. + The Z offset between the source region origin and the destination location. + + + +Copies a portion of a resource's data using the GPU. + + The source resource. + The source subresource. + The source region. + The destination resource. + The destination subresource. + The X offset between the source region origin and the destination location. + The Y offset between the source region origin and the destination location. + The Z offset between the source region origin and the destination location. + + + +Copies resource data using the GPU. + + The source resource. + The destination resource. + + + +Clears all resource bindings from the device. + + A object describing the result of the operation. + + + +Restores all device state to defaults. + + + + +Clears the specified render target resource. + + The view of the resource to clear. + The color to clear to. + + + +Clears the specified depth-stencil resource. + + The view of the resource to clear. + Flags indicating which parts of the resource to clear. + The depth value to clear to, if applicable. + The stencil value to clear to, if applicable. + + + +Gives the device access to a shared resource created on a different device. + + The type of the resource. + A handle to the shared resource. + The new reference to the shared resource. + + + +Gets the number of quality levels supported during multisampling of resources using a specified format. + + The format to check support for. + The multisample count to check support for. + The number of quality levels supported. 0 if an error occured +or if the format/samplecount pair is not supported. + + + +Gets information about the supported applications of a specified format. + + The format to check support for. + FormatSupport flags indicating usage contexts in which the specified format is supported. + + + +Gets metadata (name, type, measurement units, et cetera) for a specific counter. + + The description of the counter to retrieve information about. + Metadata for the specified counter. + + + +Gets information about the device's performance counters. + + Information about the device's performance counters. + + + +Constructs a new Device object. + + The display adapter to associate the device with when creating a hardware device. + The device driver type. + Flags that indicate which device API layers to enable. + + + +Constructs a new Device object. + + The device driver type. + Flags that indicate which device API layers to enable. + + + +Constructs a new Device object. + + Flags that indicate which device API layers to enable. + + + +Gets or sets a friendly debug name for the object. This name is used in debug messages +as well as in the PIX object browser. + + + + +Gets the device's creation flags. + + + + +Gets the device's geometry shader interface. + + + + +Gets the device's pixel shader interface. + + + + +Gets the device's vertex shader interface. + + + + +Gets the device's rasterizer interface. + + + + +Gets the device's stream output interface. + + + + +Gets the device's output merger interface. + + + + +Gets the device's input assembler interface. + + + + +Gets the parent factory associated with the device. + + + + +The maximum number of multisample quality levels supported. + + + + +A virtual adapter for performing rendering. + + ID3D10Device + + + +Constructs a new exception object. + + The result code that caused this exception. + + + +Constructs a new exception object. + + The message describing the exception. + The exception that caused this exception. + + + +Constructs a new exception object. + + The message describing the exception. + + + +Constructs a new exception object. + + + + +Represents errors that occur in the Direct3D 10 subsystem. + + + + +Initializes a new instance of the class. + + The message describing the exception. + The exception that caused this exception. + + + +Initializes a new instance of the class. + + The message describing the exception. + + + +Initializes a new instance of the class. + + + + +An exception indicating that the appropriate Direct3DX 9 runtime could not be found or initialized. + + + + +Initializes a new instance of the object to describe the +input-buffer data for the input-assembler stage. + + ID3D11Device::CreateInputLayout + The device used to create the layout. + An array of input elements describing the layout of the input data. + The compiled shader used to validate the input elements. + + + +Initializes a new instance of the object to describe the +input-buffer data for the input-assembler stage. + + ID3D11Device::CreateInputLayout + The device used to create the layout. + An array of input elements describing the layout of the input data. + The shader signature used to validate the input elements. + + + +Initializes a new instance of the object to describe the +input-buffer data for the input-assembler stage. + + ID3D11Device::CreateInputLayout + The device used to create the layout. + An array of input elements describing the layout of the input data. + The shader signature used to validate the input elements. + + + Accesses the input data for the input-assembler stage. + ID3D11InputLayout + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Initializes a new instance of the struct. + + The HLSL semantic associated with this element in a shader input-signature. + The semantic index for the element. A semantic index modifies a semantic, with an integer index number. A semantic index is only needed in a case where there is more than one element with the same semantic. For example, a 4x4 matrix would have four components each with the semantic name matrix, however each of the four component would have different semantic indices (0, 1, 2, and 3). + The data type of the element data. + Offset (in bytes) between each element. Use AppendAligned for convenience to define the current element directly after the previous one, including any packing if necessary. + An integer value that identifies the input-assembler. Valid values are between 0 and 15. + Identifies the input data class for a single input slot. + The number of instances to draw using the same per-instance data before advancing in the buffer by one element. This value must be 0 for an element that contains per-vertex data. + + + +Initializes a new instance of the struct. + + The HLSL semantic associated with this element in a shader input-signature. + The semantic index for the element. A semantic index modifies a semantic, with an integer index number. A semantic index is only needed in a case where there is more than one element with the same semantic. For example, a 4x4 matrix would have four components each with the semantic name matrix, however each of the four component would have different semantic indices (0, 1, 2, and 3). + The data type of the element data. + Offset (in bytes) between each element. Use AppendAligned for convenience to define the current element directly after the previous one, including any packing if necessary. + An integer value that identifies the input-assembler. Valid values are between 0 and 15. + + + +Initializes a new instance of the struct. + + The HLSL semantic associated with this element in a shader input-signature. + The semantic index for the element. A semantic index modifies a semantic, with an integer index number. A semantic index is only needed in a case where there is more than one element with the same semantic. For example, a 4x4 matrix would have four components each with the semantic name matrix, however each of the four component would have different semantic indices (0, 1, 2, and 3). + The data type of the element data. + An integer value that identifies the input-assembler. Valid values are between 0 and 15. + + + +Returns a value that can be used for the offset parameter of an InputElement to indicate that the element +should be aligned directly after the previous element, including any packing if neccessary. + + A value used to align input elements. + D3D11_APPEND_ALIGNED_ELEMENT + + + +The number of instances to draw using the same per-instance data before advancing in the buffer by one element. +This value must be 0 for an element that contains per-vertex data. + + + + +Identifies the input data class for a single input slot. + + + + +Offset (in bytes) between each element. Use AppendAligned for convenience to define the current element directly after the previous one, including any packing if necessary. + + + + +An integer value that identifies the input-assembler. Valid values are between 0 and 15. + + + + +The data type of the element data. + + + + +The semantic index for the element. A semantic index modifies a semantic, with an integer index number. A semantic index is only needed in a +case where there is more than one element with the same semantic. For example, a 4x4 matrix would have four components each with the semantic +name matrix, however each of the four component would have different semantic indices (0, 1, 2, and 3). + + + + +The HLSL semantic associated with this element in a shader input-signature. + + + + Describes a single element for the input-assembler stage. + D3D11_INPUT_ELEMENT_DESC + + + +Gets the set of vertex buffers currently bound to the input assembler. + + The input slot of the first vertex buffer to get. + The number of vertex buffers to retrieve. + An array of bound vertex buffers. + + + +Binds an array of vertex buffers to the input assembler. + + Index of the first input slot to use for binding. The first vertex buffer is explicitly bound to the start slot; this causes each additional vertex buffer in the array to be implicitly bound to each subsequent input slot. There are 16 input slots. + An array of bindings for input vertex buffers. + + + +Binds a single vertex buffer to the input assembler. + + Index of the slot to which to bind the vertex buffer. + A binding for the input vertex buffer. + + + +Gets the index buffer currently bound to the input assembler. + + When the method completes, contains the currently bound index buffer. + When the method completes, contains the format of the data in the index buffer. + When the method completes, contains the offset in bytes from the start of the index buffer to the first index to use. + + + +Binds an index buffer to the input assembler. + + The index buffer to bind. + The format of the data in the index buffer. + The offset in bytes from the start of the index buffer to the first index to use. + + + +Gets or sets the topology of primitive data bound to the input assembler. + + + + +Gets or sets the layout of the input data currently bound to the input assembler. + + + + +Defines a wrapper for input assembler related commands on the device. + + + + +Returns a value indicating whether the two VertexBufferBindings are equivalent. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Returns a value indicating whether this instance is equal to the specified object. + + A to compare with this instance. + + true if has the same value as this instance; otherwise, false. + + + +Returns a value indicating whether this instance is equal to the specified object. + + An object to compare with this instance. + + true if has the same value as this instance; otherwise, false. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two VertexBufferBindings. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two VertexBufferBindings. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Initializes a new instance of the struct. + + The buffer being bound. + The stride between vertex element (in bytes). + The offset to the first vertex (in bytes). + + + +Gets or sets the offset from the start of the buffer of the first vertex to use (in bytes). + + + + +Gets or sets the stride between vertex elements in the buffer (in bytes). + + + + +Gets or sets the buffer being bound. + + + + +Properties defining the way a buffer (containing vertex data) is bound +to the pipeline for rendering. + + + + +This interface is implemented by applications who wish to save additional user +data embedded in .X files. D3DX calls this interface when such data is encountered. + + ID3DXSaveUserData + + + +Requests deallocation of a mesh container object. + + The mesh container to be deallocated. + + + +Requests deallocation of a frame object. + + The frame to be deallocated. + + + +Requests the allocation of a frame object. + + Name of the frame to be created. + The created frame object. + + + +Requests the allocation of a mesh container object. + + Name of the mesh. + The actual mesh data. + Set of materials used in the mesh. + Set of effects used in the mesh. + Adjancey array used in the mesh. + Skin mesh object containing skin data. + The created mesh container. + + + +Defines an interface for allocating and freeing frame and mesh container objects. Methods on this interface are called during +loading and destroying of frame hierarchies. + + ID3DXAllocateHierarchy + + + +Used to control animation functionality, connecting animation sets with the transformation frames that are being animated. + + ID3DXAnimationController + + + +Callback function used by 3D texture fill functions. + + Texture coordinate being sampled. + Dimensions of the texel. + The desired color of the specified texel. + LPD3DXFILL3D + + + +Callback function used by 2D texture fill functions. + + Texture coordinate being sampled. + Dimensions of the texel. + The desired color of the specified texel. + LPD3DXFILL2D + + + +Callback function used for animations. + + The track for which the callback is occuring. + Application defined data. + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Specifies how to use the results of the depth test and the stencil test for pixels whose surface normal is facing away from camera. + + + + +Specifies how to use the results of the depth test and the stencil test for pixels whose surface normal is facing towards the camera. + + + + +Gets or sets a write mask identifying the portion of the depth-stencil buffer that can be modified by stencil data. + + + + +Gets or sets a read mask identifying the portion of the depth-stencil buffer that can be read for stencil data. + + + + +Gets or sets a value indicating whether stencil testing is enabled. + + + + +A function that compares depth data against existing data in the buffer. + + + + +Gets or sets a write mask identifying the portion of the depth-stencil buffer that can be modified by depth data. + + + + +Gets or sets a value indicating whether depth testing is enabled. + + + + +Provides a description for depth-stencil state objects. + + D3D11_DEPTH_STENCIL_DESC + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +A function that compares stencil data against existing data in the buffer. + + + + +Gets or sets the stencil operation to perform when stencil testing and depth testing both pass. + + + + +Gets or sets the stencil operation to perform when stencil testing passes and depth testing fails. + + + + +Gets or sets the stencil operation to perform when stencil testing fails. + + + + +Specifies stencil operations that can be performed based on the results of the stencil test. + + D3D11_DEPTH_STENCILOP_DESC + + + +Represents a "Pause" action. + + + + +Represents a "Device" action. + + + + +Represents a "Back" link. + + + + +Represents a "Forward" link. + + + + +Represents a "Right" link. + + + + +Represents a "Left" link. + + + + +Represents a "Head" action. + + + + +Represents a "Control" action. + + + + +Represents a "Sprint" action. + + + + +Represents a "PassThrough" action. + + + + +Represents a "ShootHigh" action. + + + + +Represents a "ShootLow" action. + + + + +Represents a "Substitute" action. + + + + +Represents a "Glance" action. + + + + +Represents a "Menu" action. + + + + +Represents a "Select" action. + + + + +Represents a "Special1" action. + + + + +Represents a "Player" action. + + + + +Represents a "Fake" action. + + + + +Represents a "Pass" action. + + + + +Represents a "Shoot" action. + + + + +Represents a "Bend" action. + + + + +Represents a "Move" action. + + + + +Represents a "Lateral" action. + + + + +Represents the soccer offense genre. + + + + +Contains action mapping constants for soccer offense games. + + + + +Represents a "Pause" action. + + + + +Represents a "Device" action. + + + + +Represents a "Back" link. + + + + +Represents a "Forward" link. + + + + +Represents a "Right" link. + + + + +Represents a "Left" link. + + + + +Represents a "Substitute" action. + + + + +Represents a "GoalieCharge" action. + + + + +Represents a "Clear" action. + + + + +Represents a "Head" action. + + + + +Represents a "Foul" action. + + + + +Represents a "Glance" action. + + + + +Represents a "Menu" action. + + + + +Represents a "Slide" action. + + + + +Represents a "Select" action. + + + + +Represents a "Special" action. + + + + +Represents a "Player" action. + + + + +Represents a "Fake" action. + + + + +Represents a "Steal" action. + + + + +Represents a "Block" action. + + + + +Represents a "Move" action. + + + + +Represents a "Lateral" action. + + + + +Represents the soccer defense genre. + + + + +Contains action mapping constants for soccer defense games. + + + + +Represents a "Pause" action. + + + + +Represents a "Device" action. + + + + +Represents a "Slower" link. + + + + +Represents a "Faster" link. + + + + +Represents a "Right" link. + + + + +Represents a "Left" link. + + + + +Represents a "Zoom" action. + + + + +Represents a "Glance" action. + + + + +Represents a "Menu" action. + + + + +Represents a "Special2" action. + + + + +Represents a "Select" action. + + + + +Represents a "Special1" action. + + + + +Represents a "Camera" action. + + + + +Represents a "Crouch" action. + + + + +Represents a "Jump" action. + + + + +Represents a "Speed" action. + + + + +Represents a "Turn" action. + + + + +Represents the skiing genre. + + + + +Contains action mapping constants for skiing games. + + + + +Represents a "Pause" action. + + + + +Represents a "Device" action. + + + + +Represents a "Back" link. + + + + +Represents a "Forward" link. + + + + +Represents a "Right" link. + + + + +Represents a "Left" link. + + + + +Represents a "Substitute" action. + + + + +Represents a "Timeout" action. + + + + +Represents a "Glance" action. + + + + +Represents a "Menu" action. + + + + +Represents a "Select" action. + + + + +Represents a "Special" action. + + + + +Represents a "Smash" action. + + + + +Represents a "Backswing" action. + + + + +Represents a "Swing" action. + + + + +Represents a "Move" action. + + + + +Represents a "Lateral" action. + + + + +Represents the racquet genre. + + + + +Contains action mapping constants for racquet games. + + + + +Represents a "Pause" action. + + + + +Represents a "Device" action. + + + + +Represents a "BrakeButton" link. + + + + +Represents a "Slower" link. + + + + +Represents a "Faster" link. + + + + +Represents a "Right" link. + + + + +Represents a "Left" link. + + + + +Represents a "Brake" action. + + + + +Represents a "Zoom" action. + + + + +Represents a "Scroll" action. + + + + +Represents a "Menu" action. + + + + +Represents a "Special2" action. + + + + +Represents a "Select" action. + + + + +Represents a "Special1" action. + + + + +Represents a "Camera" action. + + + + +Represents a "Jump" action. + + + + +Represents a "Pedal" action. + + + + +Represents a "Turn" action. + + + + +Represents the mountain biking genre. + + + + +Contains action mapping constants for mountain biking games. + + + + +Represents a "Pause" action. + + + + +Represents a "Device" action. + + + + +Represents a "RotateRight" link. + + + + +Represents a "RotateLeft" link. + + + + +Represents a "Back" link. + + + + +Represents a "Forward" link. + + + + +Represents a "Right" link. + + + + +Represents a "Left" link. + + + + +Represents a "FireSecondary" action. + + + + +Represents a "Jump" action. + + + + +Represents a "Crouch" action. + + + + +Represents a "Rotate" action. + + + + +Represents a "Display" action. + + + + +Represents a "Glance" action. + + + + +Represents a "Menu" action. + + + + +Represents a "Special" action. + + + + +Represents a "Map" action. + + + + +Represents a "Call" action. + + + + +Represents a "Binocular" action. + + + + +Represents a "Weapon" action. + + + + +Represents a "Aim" action. + + + + +Represents a "Fire" action. + + + + +Represents a "Move" action. + + + + +Represents a "Lateral" action. + + + + +Represents the hunting genre. + + + + +Contains action mapping constants for hunting games. + + + + +Represents a "Pause" action. + + + + +Represents a "Device" action. + + + + +Represents a "Back" link. + + + + +Represents a "Forward" link. + + + + +Represents a "Right" link. + + + + +Represents a "Left" link. + + + + +Represents a "Substitute" action. + + + + +Represents a "Timeout" action. + + + + +Represents a "Strategy" action. + + + + +Represents a "Zoom" action. + + + + +Represents a "Scroll" action. + + + + +Represents a "Menu" action. + + + + +Represents a "Fake" action. + + + + +Represents a "Special" action. + + + + +Represents a "Burst" action. + + + + +Represents a "Pass" action. + + + + +Represents a "Shoot" action. + + + + +Represents a "Move" action. + + + + +Represents a "Lateral" action. + + + + +Represents the hockey offense genre. + + + + +Contains action mapping constants for hockey offense games. + + + + +Represents a "Pause" action. + + + + +Represents a "Device" action. + + + + +Represents a "Back" link. + + + + +Represents a "Forward" link. + + + + +Represents a "Right" link. + + + + +Represents a "Left" link. + + + + +Represents a "Substitute" action. + + + + +Represents a "Timeout" action. + + + + +Represents a "Strategy" action. + + + + +Represents a "Zoom" action. + + + + +Represents a "Scroll" action. + + + + +Represents a "Menu" action. + + + + +Represents a "Block" action. + + + + +Represents a "Steal" action. + + + + +Represents a "Poke" action. + + + + +Represents a "Pass" action. + + + + +Represents a "Move" action. + + + + +Represents a "Lateral" action. + + + + +Represents the hockey goalie genre. + + + + +Contains action mapping constants for hockey goalie games. + + + + +Represents a "Pause" action. + + + + +Represents a "Device" action. + + + + +Represents a "Back" link. + + + + +Represents a "Forward" link. + + + + +Represents a "Right" link. + + + + +Represents a "Left" link. + + + + +Represents a "Substitute" action. + + + + +Represents a "Timeout" action. + + + + +Represents a "Strategy" action. + + + + +Represents a "Zoom" action. + + + + +Represents a "Scroll" action. + + + + +Represents a "Menu" action. + + + + +Represents a "Fake" action. + + + + +Represents a "Block" action. + + + + +Represents a "Burst" action. + + + + +Represents a "Steal" action. + + + + +Represents a "Player" action. + + + + +Represents a "Move" action. + + + + +Represents a "Lateral" action. + + + + +Represents the hockey defense genre. + + + + +Contains action mapping constants for hockey defense games. + + + + +Represents a "Pause" action. + + + + +Represents a "Device" action. + + + + +Represents a "Back" link. + + + + +Represents a "Forward" link. + + + + +Represents a "Right" link. + + + + +Represents a "Left" link. + + + + +Represents a "Substitute" action. + + + + +Represents a "Timeout" action. + + + + +Represents a "Zoom" action. + + + + +Represents a "Scroll" action. + + + + +Represents a "Menu" action. + + + + +Represents a "Flyby" action. + + + + +Represents a "Terrain" action. + + + + +Represents a "Down" action. + + + + +Represents a "Up" action. + + + + +Represents a "Select" action. + + + + +Represents a "Swing" action. + + + + +Represents a "Move" action. + + + + +Represents a "Lateral" action. + + + + +Represents the golf genre. + + + + +Contains action mapping constants for golf games. + + + + +Represents a "Pause" action. + + + + +Represents a "Device" action. + + + + +Represents a "Back" link. + + + + +Represents a "Forward" link. + + + + +Represents a "Right" link. + + + + +Represents a "Left" link. + + + + +Represents a "Audible" action. + + + + +Represents a "Motion" action. + + + + +Represents a "FakeSnap" action. + + + + +Represents a "Menu" action. + + + + +Represents a "Fake" action. + + + + +Represents a "Pass" action. + + + + +Represents a "Slide" action. + + + + +Represents a "Jump" action. + + + + +Represents a "Snap" action. + + + + +Represents a "Select" action. + + + + +Represents a "Move" action. + + + + +Represents a "Lateral" action. + + + + +Represents the football quarterback genre. + + + + +Contains action mapping constants for football quarterback games. + + + + +Represents a "Pause" action. + + + + +Represents a "Device" action. + + + + +Represents a "Menu" action. + + + + +Represents a "Help" action. + + + + +Represents a "Select" action. + + + + +Represents a "Play" action. + + + + +Represents the football genre. + + + + +Contains action mapping constants for football games. + + + + +Represents a "Pause" action. + + + + +Represents a "Device" action. + + + + +Represents a "Back" link. + + + + +Represents a "Forward" link. + + + + +Represents a "Right" link. + + + + +Represents a "Left" link. + + + + +Represents a "Substitute" action. + + + + +Represents a "Zoom" action. + + + + +Represents a "Dive" action. + + + + +Represents a "Turbo" action. + + + + +Represents a "Shoulder" action. + + + + +Represents a "Juke" action. + + + + +Represents a "Menu" action. + + + + +Represents a "Spin" action. + + + + +Represents a "Throw" action. + + + + +Represents a "RightArm" action. + + + + +Represents a "LeftArm" action. + + + + +Represents a "Jump" action. + + + + +Represents a "Move" action. + + + + +Represents a "Lateral" action. + + + + +Represents the football offense genre. + + + + +Contains action mapping constants for football offense games. + + + + +Represents a "Pause" action. + + + + +Represents a "Device" action. + + + + +Represents a "Back" link. + + + + +Represents a "Forward" link. + + + + +Represents a "Right" link. + + + + +Represents a "Left" link. + + + + +Represents a "Substitute" action. + + + + +Represents a "Zoom" action. + + + + +Represents a "Audible" action. + + + + +Represents a "Rip" action. + + + + +Represents a "BullRush" action. + + + + +Represents a "Swim" action. + + + + +Represents a "Spin" action. + + + + +Represents a "Menu" action. + + + + +Represents a "SuperTackle" action. + + + + +Represents a "Fake" action. + + + + +Represents a "Tackle" action. + + + + +Represents a "Jump" action. + + + + +Represents a "Select" action. + + + + +Represents a "Play" action. + + + + +Represents a "Move" action. + + + + +Represents a "Lateral" action. + + + + +Represents the football defense genre. + + + + +Contains action mapping constants for football defense games. + + + + +Represents a "Pause" action. + + + + +Represents a "Device" action. + + + + +Represents a "RotateRight" link. + + + + +Represents a "RotateLeft" link. + + + + +Represents a "Back" link. + + + + +Represents a "Forward" link. + + + + +Represents a "Right" link. + + + + +Represents a "Left" link. + + + + +Represents a "Jump" action. + + + + +Represents a "Crouch" action. + + + + +Represents a "Rotate" action. + + + + +Represents a "Display" action. + + + + +Represents a "Glance" action. + + + + +Represents a "Menu" action. + + + + +Represents a "Map" action. + + + + +Represents a "Bait" action. + + + + +Represents a "Binocular" action. + + + + +Represents a "Type" action. + + + + +Represents a "Cast" action. + + + + +Represents a "Move" action. + + + + +Represents a "Lateral" action. + + + + +Represents the fishing genre. + + + + +Contains action mapping constants for fishing games. + + + + +Represents a "Pause" action. + + + + +Represents a "Device" action. + + + + +Represents a "Back" link. + + + + +Represents a "Forward" link. + + + + +Represents a "Right" link. + + + + +Represents a "Left" link. + + + + +Represents a "Substitute" action. + + + + +Represents a "Timeout" action. + + + + +Represents a "Post" action. + + + + +Represents a "Jab" action. + + + + +Represents a "Play" action. + + + + +Represents a "Screen" action. + + + + +Represents a "Glance" action. + + + + +Represents a "Menu" action. + + + + +Represents a "Call" action. + + + + +Represents a "Burst" action. + + + + +Represents a "Player" action. + + + + +Represents a "Special" action. + + + + +Represents a "Fake" action. + + + + +Represents a "Pass" action. + + + + +Represents a "Dunk" action. + + + + +Represents a "Shoot" action. + + + + +Represents a "Move" action. + + + + +Represents a "Lateral" action. + + + + +Represents the basketball offense genre. + + + + +Contains action mapping constants for basketball offense games. + + + + +Represents a "Pause" action. + + + + +Represents a "Device" action. + + + + +Represents a "Back" link. + + + + +Represents a "Forward" link. + + + + +Represents a "Right" link. + + + + +Represents a "Left" link. + + + + +Represents a "Substitute" action. + + + + +Represents a "Timeout" action. + + + + +Represents a "Glance" action. + + + + +Represents a "Menu" action. + + + + +Represents a "Play" action. + + + + +Represents a "Burst" action. + + + + +Represents a "Player" action. + + + + +Represents a "Special" action. + + + + +Represents a "Fake" action. + + + + +Represents a "Steal" action. + + + + +Represents a "Jump" action. + + + + +Represents a "Move" action. + + + + +Represents a "Lateral" action. + + + + +Represents the basketball defense genre. + + + + +Contains action mapping constants for bsketball defense games. + + + + +Represents a "Pause" action. + + + + +Represents a "Device" action. + + + + +Represents a "Back" link. + + + + +Represents a "Forward" link. + + + + +Represents a "Right" link. + + + + +Represents a "Left" link. + + + + +Represents a "Look" action. + + + + +Represents a "Walk" action. + + + + +Represents a "Menu" action. + + + + +Represents a "Fake" action. + + + + +Represents a "Throw" action. + + + + +Represents a "Base" action. + + + + +Represents a "Pitch" action. + + + + +Represents a "Select" action. + + + + +Represents a "Move" action. + + + + +Represents a "Lateral" action. + + + + +Represents the baseball pitching genre. + + + + +Contains action mapping constants for baseball pitching games. + + + + +Represents a "Pause" action. + + + + +Represents a "Device" action. + + + + +Represents a "Back" link. + + + + +Represents a "Forward" link. + + + + +Represents a "AimRight" link. + + + + +Represents a "AimLeft" link. + + + + +Represents a "ShiftOut" action. + + + + +Represents a "ShiftIn" action. + + + + +Represents a "Menu" action. + + + + +Represents a "Dive" action. + + + + +Represents a "Jump" action. + + + + +Represents a "Burst" action. + + + + +Represents a "Throw2" action. + + + + +Represents a "Throw1" action. + + + + +Represents a "Nearest" action. + + + + +Represents a "Move" action. + + + + +Represents a "Lateral" action. + + + + +Represents the baseball fielding genre. + + + + +Contains action mapping constants for baseball fielding games. + + + + +Represents a "Pause" action. + + + + +Represents a "Device" action. + + + + +Represents a "Back" link. + + + + +Represents a "Forward" link. + + + + +Represents a "Right" link. + + + + +Represents a "Left" link. + + + + +Represents a "Box" action. + + + + +Represents a "NoSteal" action. + + + + +Represents a "Menu" action. + + + + +Represents a "Contact" action. + + + + +Represents a "Slide" action. + + + + +Represents a "Burst" action. + + + + +Represents a "Steal" action. + + + + +Represents a "Bunt" action. + + + + +Represents a "Power" action. + + + + +Represents a "Normal" action. + + + + +Represents a "Select" action. + + + + +Represents a "Move" action. + + + + +Represents a "Lateral" action. + + + + +Represents the baseball batting genre. + + + + +Contains action mapping constants for baseball batting games. + + + + +Represents a "Pause" action. + + + + +Represents a "Device" action. + + + + +Represents a "Back" link. + + + + +Represents a "Forward" link. + + + + +Represents a "Right" link. + + + + +Represents a "Left" link. + + + + +Represents a "Display" action. + + + + +Represents a "Map" action. + + + + +Represents a "Zoom" action. + + + + +Represents a "Menu" action. + + + + +Represents a "Turn" action. + + + + +Represents a "Team" action. + + + + +Represents a "Apply" action. + + + + +Represents a "Instruct" action. + + + + +Represents a "Select" action. + + + + +Represents a "Move" action. + + + + +Represents a "Lateral" action. + + + + +Represents the turn based genre. + + + + +Contains action mapping constants for turn based games. + + + + +Represents a "Pause" action. + + + + +Represents a "Device" action. + + + + +Represents a "RotateRight" link. + + + + +Represents a "RotateLeft" link. + + + + +Represents a "Back" link. + + + + +Represents a "Forward" link. + + + + +Represents a "Right" link. + + + + +Represents a "Left" link. + + + + +Represents a "Rotate" action. + + + + +Represents a "Display" action. + + + + +Represents a "Map" action. + + + + +Represents a "Glance" action. + + + + +Represents a "Menu" action. + + + + +Represents a "Jump" action. + + + + +Represents a "Crouch" action. + + + + +Represents a "Cast" action. + + + + +Represents a "Attack" action. + + + + +Represents a "Select" action. + + + + +Represents a "Apply" action. + + + + +Represents a "Get" action. + + + + +Represents a "Move" action. + + + + +Represents a "Lateral" action. + + + + +Represents the role playing genre. + + + + +Contains action mapping constants for role playing games. + + + + +Represents a "Pause" action. + + + + +Represents a "Device" action. + + + + +Represents a "GlanceDown" link. + + + + +Represents a "GlanceUp" link. + + + + +Represents a "GlanceRight" link. + + + + +Represents a "GlanceLeft" link. + + + + +Represents a "TurnRight" link. + + + + +Represents a "TurnLeft" link. + + + + +Represents a "Slower" link. + + + + +Represents a "Faster" link. + + + + +Represents a "Backward" link. + + + + +Represents a "Forward" link. + + + + +Represents a "Right" link. + + + + +Represents a "Left" link. + + + + +Represents a "FireSecondary" action. + + + + +Represents a "Gear" action. + + + + +Represents a "Lower" action. + + + + +Represents a "Raise" action. + + + + +Represents a "Display" action. + + + + +Represents a "View" action. + + + + +Represents a "Rotate" action. + + + + +Represents a "Climb" action. + + + + +Represents a "Glance" action. + + + + +Represents a "Menu" action. + + + + +Represents a "Target" action. + + + + +Represents a "Weapons" action. + + + + +Represents a "Fire" action. + + + + +Represents a "Throttle" action. + + + + +Represents a "Move" action. + + + + +Represents a "Lateral" action. + + + + +Represents the space combat genre. + + + + +Contains action mapping constants for space combat games. + + + + +Represents a "Pause" action. + + + + +Represents a "Device" action. + + + + +Represents a "GlanceDown" link. + + + + +Represents a "GlanceUp" link. + + + + +Represents a "GlanceRight" link. + + + + +Represents a "GlanceLeft" link. + + + + +Represents a "Slower" link. + + + + +Represents a "Faster" link. + + + + +Represents a "FireSecondary" action. + + + + +Represents a "Gear" action. + + + + +Represents a "View" action. + + + + +Represents a "Counter" action. + + + + +Represents a "Throttle" action. + + + + +Represents a "Torque" action. + + + + +Represents a "Glance" action. + + + + +Represents a "Menu" action. + + + + +Represents a "Target" action. + + + + +Represents a "Weapons" action. + + + + +Represents a "Fire" action. + + + + +Represents a "Collective" action. + + + + +Represents a "Pitch" action. + + + + +Represents a "Bank" action. + + + + +Represents the helicopter combat genre. + + + + +Contains action mapping constants for helicopter combat games. + + + + +Represents a "Pause" action. + + + + +Represents a "Device" action. + + + + +Represents a "GlanceDown" link. + + + + +Represents a "GlanceUp" link. + + + + +Represents a "GlanceRight" link. + + + + +Represents a "GlanceLeft" link. + + + + +Represents a "Slower" link. + + + + +Represents a "Faster" link. + + + + +Represents a "Brake" link. + + + + +Represents a "FlapsDown" action. + + + + +Represents a "FlapsUp" action. + + + + +Represents a "Flaps" action. + + + + +Represents a "Rudder" action. + + + + +Represents a "Brake" action. + + + + +Represents a "Glance" action. + + + + +Represents a "Menu" action. + + + + +Represents a "Gear" action. + + + + +Represents a "Display" action. + + + + +Represents a "View" action. + + + + +Represents a "Throttle" action. + + + + +Represents a "Pitch" action. + + + + +Represents a "Bank" action. + + + + +Represents the civilian flight genre. + + + + +Contains action mapping constants for civilian flight games. + + + + +Represents a "Pause" action. + + + + +Represents a "Device" action. + + + + +Represents a "GlanceDown" link. + + + + +Represents a "GlanceUp" link. + + + + +Represents a "GlanceRight" link. + + + + +Represents a "GlanceLeft" link. + + + + +Represents a "Slower" link. + + + + +Represents a "Faster" link. + + + + +Represents a "Brake" link. + + + + +Represents a "Gear" action. + + + + +Represents a "FireSecondary" action. + + + + +Represents a "FlapsDown" action. + + + + +Represents a "FlapsUp" action. + + + + +Represents a "Flaps" action. + + + + +Represents a "Display" action. + + + + +Represents a "View" action. + + + + +Represents a "Brake" action. + + + + +Represents a "Rudder" action. + + + + +Represents a "Counter" action. + + + + +Represents a "Glance" action. + + + + +Represents a "Menu" action. + + + + +Represents a "Target" action. + + + + +Represents a "Weapons" action. + + + + +Represents a "Fire" action. + + + + +Represents a "Throttle" action. + + + + +Represents a "Pitch" action. + + + + +Represents a "Bank" action. + + + + +Represents the air combat genre. + + + + +Contains action mapping constants for air combat games. + + + + +Represents a "Pause" action. + + + + +Represents a "Device" action. + + + + +Represents a "GlanceRight" link. + + + + +Represents a "GlanceLeft" link. + + + + +Represents a "RotateRight" link. + + + + +Represents a "RotateLeft" link. + + + + +Represents a "BarrelDown" link. + + + + +Represents a "BarrelUp" link. + + + + +Represents a "SteerRight" link. + + + + +Represents a "SteerLeft" link. + + + + +Represents a "Accelerate" link. + + + + +Represents a "FireSecondary" action. + + + + +Represents a "Brake" action. + + + + +Represents a "Dashboard" action. + + + + +Represents a "View" action. + + + + +Represents a "AccelerateAndBrake" action. + + + + +Represents a "Brake" action. + + + + +Represents a "Glance" action. + + + + +Represents a "Menu" action. + + + + +Represents a "Target" action. + + + + +Represents a "Weapons" action. + + + + +Represents a "Fire" action. + + + + +Represents a "Rotate" action. + + + + +Represents a "Accelerate" action. + + + + +Represents a "Barrel" action. + + + + +Represents a "Steer" action. + + + + +Represents the tank driving genre. + + + + +Contains action mapping constants for tank driving games. + + + + +Represents a "Pause" action. + + + + +Represents a "Device" action. + + + + +Represents a "GlanceRight" link. + + + + +Represents a "GlanceLeft" link. + + + + +Represents a "SteerRight" link. + + + + +Represents a "SteerLeft" link. + + + + +Represents a "Accelerate" link. + + + + +Represents a "Pit" action. + + + + +Represents a "Boost" action. + + + + +Represents a "Map" action. + + + + +Represents a "Aids" action. + + + + +Represents a "Dashboard" action. + + + + +Represents a "Brake" action. + + + + +Represents a "Glance" action. + + + + +Represents a "AccelerateAndBrake" action. + + + + +Represents a "Menu" action. + + + + +Represents a "View" action. + + + + +Represents a "ShiftDown" action. + + + + +Represents a "ShiftUp" action. + + + + +Represents a "Brake" action. + + + + +Represents a "Accelerate" action. + + + + +Represents a "Steer" action. + + + + +Represents the racing genre. + + + + +Contains action mapping constants for racing games. + + + + +Represents a "Pause" action. + + + + +Represents a "Device" action. + + + + +Represents a "Slower" link. + + + + +Represents a "Faster" link. + + + + +Represents a "RotateRight" link. + + + + +Represents a "RotateLeft" link. + + + + +Represents a "Back" link. + + + + +Represents a "Forward" link. + + + + +Represents a "Right" link. + + + + +Represents a "Left" link. + + + + +Represents a "FireSecondary" action. + + + + +Represents a "View" action. + + + + +Represents a "Glance" action. + + + + +Represents a "Center" action. + + + + +Represents a "Menu" action. + + + + +Represents a "Jump" action. + + + + +Represents a "Zoom" action. + + + + +Represents a "Reverse" action. + + + + +Represents a "Target" action. + + + + +Represents a "Weapons" action. + + + + +Represents a "Fire" action. + + + + +Represents a "Throttle" action. + + + + +Represents a "Rotate" action. + + + + +Represents a "Torso" action. + + + + +Represents a "Steer" action. + + + + +Represents the mechanical fighting genre. + + + + +Contains action mapping constants for mechanical fighting games. + + + + +Represents a "Pause" action. + + + + +Represents a "Device" action. + + + + +Represents a "GlanceRight" link. + + + + +Represents a "GlanceLeft" link. + + + + +Represents a "SteerRight" link. + + + + +Represents a "SteerLeft" link. + + + + +Represents a "Accelerate" link. + + + + +Represents a "FireSecondary" action. + + + + +Represents a "Brake" action. + + + + +Represents a "Aids" action. + + + + +Represents a "Dashboard" action. + + + + +Represents a "ShiftDown" action. + + + + +Represents a "ShiftUp" action. + + + + +Represents a "Glance" action. + + + + +Represents a "AccelerateAndBrake" action. + + + + +Represents a "Menu" action. + + + + +Represents a "Target" action. + + + + +Represents a "Weapons" action. + + + + +Represents a "Fire" action. + + + + +Represents a "Brake" action. + + + + +Represents a "Accelerate" action. + + + + +Represents a "Steer" action. + + + + +Represents the combat racing genre. + + + + +Contains action mapping constants for combat racing games. + + + + +Represents a "Pause" action. + + + + +Represents a "Device" action. + + + + +Represents a "Digit9" action. + + + + +Represents a "Digit8" action. + + + + +Represents a "Digit7" action. + + + + +Represents a "Digit6" action. + + + + +Represents a "Digit5" action. + + + + +Represents a "Digit4" action. + + + + +Represents a "Digit3" action. + + + + +Represents a "Digit2" action. + + + + +Represents a "Digit1" action. + + + + +Represents a "Digit0" action. + + + + +Represents a "Adjust" action. + + + + +Represents a "DVD" action. + + + + +Represents a "Tuner" action. + + + + +Represents a "VCR" action. + + + + +Represents a "CD" action. + + + + +Represents a "Cable" action. + + + + +Represents a "TV" action. + + + + +Represents a "Slider2" action. + + + + +Represents a "Menu" action. + + + + +Represents a "Record" action. + + + + +Represents a "Change" action. + + + + +Represents a "Review" action. + + + + +Represents a "Cue" action. + + + + +Represents a "Play" action. + + + + +Represents a "Select" action. + + + + +Represents a "Mute" action. + + + + +Represents a "Slider" action. + + + + +Represents the remote genre. + + + + +Contains action mapping constants for remote controls. + + + + +Represents a "Pause" action. + + + + +Represents a "Device" action. + + + + +Represents a "Print" action. + + + + +Represents a "History" action. + + + + +Represents a "Previous" action. + + + + +Represents a "Next" action. + + + + +Represents a "Favorites" action. + + + + +Represents a "Home" action. + + + + +Represents a "Stop" action. + + + + +Represents a "Search" action. + + + + +Represents a "Menu" action. + + + + +Represents a "Refresh" action. + + + + +Represents a "View" action. + + + + +Represents a "Select" action. + + + + +Represents a "Move" action. + + + + +Represents a "Lateral" action. + + + + +Represents the browser genre. + + + + +Contains action mapping constants for browser controls. + + + + +Represents a "Pause" action. + + + + +Represents a "Device" action. + + + + +Represents a "Display" action. + + + + +Represents a "RotateZ" action. + + + + +Represents a "RotateY" action. + + + + +Represents a "RotateX" action. + + + + +Represents a "HatSwitch" action. + + + + +Represents a "Menu" action. + + + + +Represents a "Special2" action. + + + + +Represents a "Special" action. + + + + +Represents a "Special1" action. + + + + +Represents a "Select" action. + + + + +Represents a "InOut" action. + + + + +Represents a "Move" action. + + + + +Represents a "Lateral" action. + + + + +Represents the 3D control genre. + + + + +Contains action mapping constants for 3D objects in CAD. + + + + +Represents a "Pause" action. + + + + +Represents a "Device" action. + + + + +Represents a "Display" action. + + + + +Represents a "RotateZ" action. + + + + +Represents a "RotateY" action. + + + + +Represents a "RotateX" action. + + + + +Represents a "HatSwitch" action. + + + + +Represents a "Menu" action. + + + + +Represents a "Special2" action. + + + + +Represents a "Special" action. + + + + +Represents a "Special1" action. + + + + +Represents a "Select" action. + + + + +Represents a "InOut" action. + + + + +Represents a "Move" action. + + + + +Represents a "Lateral" action. + + + + +Represents the 3D navigation genre. + + + + +Contains action mapping constants for 3D navigation in CAD. + + + + +Represents a "Pause" action. + + + + +Represents a "Device" action. + + + + +Represents a "Display" action. + + + + +Represents a "RotateZ" action. + + + + +Represents a "RotateY" action. + + + + +Represents a "RotateX" action. + + + + +Represents a "HatSwitch" action. + + + + +Represents a "Menu" action. + + + + +Represents a "Special2" action. + + + + +Represents a "Special" action. + + + + +Represents a "Special1" action. + + + + +Represents a "Select" action. + + + + +Represents a "InOut" action. + + + + +Represents a "Move" action. + + + + +Represents a "Lateral" action. + + + + +Represents the 3D model genre. + + + + +Contains action mapping constants for 3D models in CAD. + + + + +Represents a "Pause" action. + + + + +Represents a "Device" action. + + + + +Represents a "Display" action. + + + + +Represents a "RotateZ" action. + + + + +Represents a "HatSwitch" action. + + + + +Represents a "Menu" action. + + + + +Represents a "Special2" action. + + + + +Represents a "Special" action. + + + + +Represents a "Special1" action. + + + + +Represents a "Select" action. + + + + +Represents a "InOut" action. + + + + +Represents a "Move" action. + + + + +Represents a "Lateral" action. + + + + +Represents the 2D control genre. + + + + +Contains action mapping constants for 2D objects in CAD. + + + + +Represents a "Pause" action. + + + + +Represents a "Device" action. + + + + +Represents a "ViewRight" link. + + + + +Represents a "ViewLeft" link. + + + + +Represents a "ViewDown" link. + + + + +Represents a "ViewUp" link. + + + + +Represents a "Back" link. + + + + +Represents a "Forward" link. + + + + +Represents a "Right" link. + + + + +Represents a "Left" link. + + + + +Represents a "View" action. + + + + +Represents a "Menu" action. + + + + +Represents a "Select" action. + + + + +Represents a "Special" action. + + + + +Represents a "Attack" action. + + + + +Represents a "Carry" action. + + + + +Represents a "Throw" action. + + + + +Represents a "Move" action. + + + + +Represents a "Lateral" action. + + + + +Represents the side-to-side genre. + + + + +Contains action mapping constants for side-to-side arcade games. + + + + +Represents a "Pause" action. + + + + +Represents a "Device" action. + + + + +Represents a "ViewRight" link. + + + + +Represents a "ViewLeft" link. + + + + +Represents a "ViewDown" link. + + + + +Represents a "ViewUp" link. + + + + +Represents a "Back" link. + + + + +Represents a "Forward" link. + + + + +Represents a "Right" link. + + + + +Represents a "Left" link. + + + + +Represents a "FireSecondary" action. + + + + +Represents a "View" action. + + + + +Represents a "Menu" action. + + + + +Represents a "Select" action. + + + + +Represents a "Special" action. + + + + +Represents a "Crouch" action. + + + + +Represents a "Fire" action. + + + + +Represents a "Jump" action. + + + + +Represents a "Move" action. + + + + +Represents a "Lateral" action. + + + + +Represents the platform genre. + + + + +Contains action mapping constants for platform arcade games. + + + + +Represents a "Glance" action. + + + + +Represents a "Pause" action. + + + + +Represents a "View" action. + + + + +Represents a "StepRight" action. + + + + +Represents a "StepLeft" action. + + + + +Represents a "Inventory" action. + + + + +Represents a "TurnRight" link. + + + + +Represents a "TurnLeft" link. + + + + +Represents a "GlanceRight" link. + + + + +Represents a "GlanceLeft" link. + + + + +Represents a "GlanceUp" link. + + + + +Represents a "GlanceDown" link. + + + + +Represents a "Forward" link. + + + + +Represents a "Dodge" action. + + + + +Represents a "Device" action. + + + + +Represents a "Backward" link. + + + + +Represents a "Step" action. + + + + +Represents a "Select" action. + + + + +Represents a "Menu" action. + + + + +Represents a "Jump" action. + + + + +Represents a "Run" action. + + + + +Represents a "Use" action. + + + + +Represents a "Action" action. + + + + +Represents a "Turn" action. + + + + +Represents a "Move" action. + + + + +Represents the third person genre. + + + + +Contains action mapping constants for third person fighting games. + + + + +Represents a "Glance" action. + + + + +Represents a "Pause" action. + + + + +Represents a "RotateRight" link. + + + + +Represents a "RotateLeft" link. + + + + +Represents a "GlanceRight" link. + + + + +Represents a "GlanceLeft" link. + + + + +Represents a "GlanceUp" link. + + + + +Represents a "GlanceDown" link. + + + + +Represents a "Forward" link. + + + + +Represents a "FireSecondary" action. + + + + +Represents a "Dodge" action. + + + + +Represents a "Display" action. + + + + +Represents a "Device" action. + + + + +Represents a "Backward" link. + + + + +Represents a "SideStep" action. + + + + +Represents a "Weapons" action. + + + + +Represents a "Strafe" action. + + + + +Represents a "Select" action. + + + + +Represents a "Menu" action. + + + + +Represents a "Jump" action. + + + + +Represents a "Fire" action. + + + + +Represents a "Crouch" action. + + + + +Represents a "Apply" action. + + + + +Represents a "Rotate" action. + + + + +Represents a "Move" action. + + + + +Represents a "LookUpDown" action. + + + + +Represents the shooting genre. + + + + +Contains action mapping constants for first person shooter games. + + + + +Represents a "Slide" action. + + + + +Represents a "Select" action. + + + + +Represents a "Pause" action. + + + + +Represents a "Right" link. + + + + +Represents a "Left" link. + + + + +Represents a "Forward" link. + + + + +Represents a "Dodge" action. + + + + +Represents a "Display" action. + + + + +Represents a "Device" action. + + + + +Represents a "Backward" link. + + + + +Represents a "Rotate" action. + + + + +Represents a "Special2" action. + + + + +Represents a "Special1" action. + + + + +Represents a "Punch" action. + + + + +Represents a "Menu" action. + + + + +Represents a "Kick" action. + + + + +Represents a "Jump" action. + + + + +Represents a "Crouch" action. + + + + +Represents a "Block" action. + + + + +Represents a "Move" action. + + + + +Represents a "Lateral" action. + + + + +Represents the hand-to-hand genre. + + + + +Contains action mapping constants for Hand-To-Hand fighting games. + + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Reserved. Always returns 0. + + + + +Gets a value equivalent to that returned by the unmanaged function QueryPerformanceCounter. + + + + +Gets the number of times a vertical blank has occured. + + + + +Gets the number of times a vertical blank has occured. + + + + +Gets the number of times an image has been presented to an output. + + + + +Provides basic rendering statistics. All counts are relative to machine boot. + + DXGI_FRAME_STATISTICS + + + +Determines whether the specified object instances are considered equal. + + + + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Initializes a new instance of the structure. + + The X component. + The Y component. + The Z component. + The W component. + + + +Initializes a new instance of the structure. + + The value to set for the X, Y, Z, and W components. + + + +Gets or sets the W component of the vector. + + The W component of the vector. + + + +Gets or sets the Z component of the vector. + + The Z component of the vector. + + + +Gets or sets the Y component of the vector. + + The Y component of the vector. + + + +Gets or sets the X component of the vector. + + The X component of the vector. + + + +Defines a four component vector, using half precision floating point coordinates. + + D3DXVECTOR3_16F + + + +Creates an instance of the type that this is associated with, using the specified context, given a set of property values for the object. + + A that provides a format context. + An that specifies the type of array for which to get properties. + An array of type that is used as a filter. + A with the properties that are exposed for this data type, or a null reference (Nothing in Visual Basic) if there are no properties. + + + +Returns whether this object supports properties, using the specified context. + + A that provides a format context. + + true if GetProperties should be called to find the properties of this object; otherwise, false. + + + +Creates an instance of the type that this is associated with, using the specified context, given a set of property values for the object. + + A that provides a format context. + An of new property values. + An representing the given , or null if the object cannot be created. + + + +Returns whether changing a value on this object requires a call to System::ComponentModel::TypeConverter::CreateInstance(System::Collections::IDictionary^) +to create a new value, using the specified context. + + A that provides a format context. + + false if changing a property on this object requires a call to System::ComponentModel::TypeConverter::CreateInstance(System::Collections::IDictionary^) + + + +Converts the given object to the type of this converter, using the specified context and culture information. + + A that provides a format context. + A . If null is passed, the current culture is assumed. + The to convert. + An that represents the converted value. + + + +Converts the given value object to the specified type, using the specified context and culture information. + + A that provides a format context. + A . If null is passed, the current culture is assumed. + The to convert. + A that represents the type you want to convert to. + An that represents the converted value. + + + +Returns whether this converter can convert an object of the given type to the type of this converter, using the specified context. + + A that provides a format context. + A System::Type that represents the type you want to convert from. + + true if this converter can perform the conversion; otherwise, false. + + + +Returns whether this converter can convert the object to the specified type, using the specified context. + + A that provides a format context. + A that represents the type you want to convert to. + + true if this converter can perform the conversion; otherwise, false. + + + +Initializes a new instance of the class. + + + + +Provides a type converter to convert objects to and from various +other representations. + + + + +Determines whether the specified object instances are considered equal. + + + + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Converts the value of the object to its equivalent string representation. + + The string representation of the value of this instance. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Performs an implicit conversion from to . + + The value to be converted. + The converted value. + + + +Performs an explicit conversion from to . + + The value to be converted. + The converted value. + + + +Converts an array of full precision values into half precision values. + + The values to be converted. + An array of converted values. + + + +Converts an array of half precision values into full precision values. + + The values to be converted. + An array of converted values. + + + +Gets or sets the raw 16 bit value used to back this half-float. + + + + +Initializes a new instance of the structure. + + The floating point value that should be stored in 16 bit format. + + + +Minimum value of the number. + + + + +Maximum value of the number. + + + + +Smallest such that 1.0 + epsilon != 1.0 + + + + +Additional rounding. + + + + +Exponent radix. + + + + +Minimum binary exponent. + + + + +Minimum decimal exponent. + + + + +Maximum binary exponent. + + + + +Maximum decimal exponent. + + + + +Number of bits in the mantissa. + + + + +Number of decimal digits of precision. + + + + +A half precision (16 bit) floating point value. + + D3DXFLOAT16 + + + +Converts the given object to the type of this converter, using the specified context and culture information. + + A that provides a format context. + A . If null is passed, the current culture is assumed. + The to convert. + An that represents the converted value. + + + +Converts the given value object to the specified type, using the specified context and culture information. + + A that provides a format context. + A . If null is passed, the current culture is assumed. + The to convert. + A that represents the type you want to convert to. + An that represents the converted value. + + + +Returns whether this converter can convert an object of the given type to the type of this converter, using the specified context. + + A that provides a format context. + A System::Type that represents the type you want to convert from. + + true if this converter can perform the conversion; otherwise, false. + + + +Returns whether this converter can convert the object to the specified type, using the specified context. + + A that provides a format context. + A that represents the type you want to convert to. + + true if this converter can perform the conversion; otherwise, false. + + + +Initializes a new instance of the class. + + + + +Provides a type converter to convert objects to and from various +other representations. + + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +This interface is implemented by applications who wish to load additional user +data embedded in .X files. D3DX calls this interface when such data is encountered. + + ID3DXLoadUserData + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +The suggested mip level count. + + + + +The suggested surface format. + + + + +The suggest height of the texture, in pixels. + + + + +The suggested width of the texture, in pixels. + + + + +Contains suggested texture creation parameters. + + None + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Gets the adapter's flags, describing the adapter type. + + + + +Gets the adapter's unique identifier. + + + + +Gets the number of bytes of system memory shared with the CPU. + + + + +Gets the number of bytes of system memory not shared with the CPU. + + + + +Gets the number of bytes of video memory not shared with the CPU. + + + + +Gets the adapter's revision number. + + + + +Gets the adapter's subsystem ID. + + + + +Gets the adapter's device ID. + + + + +Gets the adapter's vendor ID. + + + + +Gets the adapter's description. + + + + +Describes various properties of an Adapter1. + + DXGI_ADAPTER_DESC1 + + + +Gets the vertex shader assigned to the device. + + The vertex shader (null if no shader is assigned). + + + +Assigns a vertex shader to the device. + + The shader to assign to the device. Assign null to disable the vertex shader. + + + +Creates a shader resource view from a file. + + The device that will own the resource. + The name of the file that contains the shader resource view. + + + +Creates a shader resource view from a file. + + The device that will own the resource. + The name of the file that contains the shader resource view. + + + Gets the resource that is accessed through this view. + ID3D10View::GetResource + + + +An application uses the methods of this interface to implement a key frame +animation set stored in a compressed data format. + + ID3DXCompressedAnimationSet + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Clones the instance and returns a new object containing the same values. + + A new object containing the same values as the current instance. + + + +Gets or sets the presentation interval. + + + + +Gets or sets the fullscreen refresh rate, in hertz. + + + + +Gets or sets flags describing how the device should present its data. + + + + +Gets or sets the format of the automatic depth-stencil buffer. + + + + +Gets or sets a value indicating whether a depth-stencil surface should be automatically created for the device. + + + + +Gets or sets a value indicating whether the device will run in windowed or fullscreen mode. + + + true to run in windowed mode, false to run in fullscreen mode. + + + +Gets or sets the device's window handle. + + + + +Gets or sets the swap effect. + + + + +Gets or sets the quality of the multisampling. + + + + +Gets or sets the multisampling type. + + + + +Gets or sets the number of back buffers that will be created. + + + + +The back buffer format. + + + + +Gets or sets the height of the back buffer. + + + + +Gets or sets the width of the back buffer. + + + + +Initializes a new instance of the class. + + + + Describes the presentation parameters of a device. + D3DPRESENT_PARAMETERS + + + +Gets properties about a single object on an input device. + + The name of the object whose properties are to be retrieved. + The properties of the desired object. + + + +Retrieves buffered data from the device. + + A collection of buffered input events. + + + +Retrieves the current device state. + + A object describing the result of the operation. + + + +Retrieves the current device state. + + The current device state. + + + +Initializes a new instance of the class. + + The subsystem identifier. + + + +Gets information about the device's identity. + + + + +Gets the capabilities of the device. + + + + +Gets a set of properties that control the behavior of the device. + + + + +Sends a hardware-specific command to the force-feedback driver. + + The command to be sent. + The data to be sent to the device. + The expected size of the output buffer. + The output data of the command. + + + +Gets properties about a single object on an input device. + + The identifier of the object whose properties are to be retrieved. + The properties of the desired object. + + + +Gets properties about a single object on an input device. + + The usageCode of the object whose properties are to be retrieved. + The properties of the desired object. + + + +Retrieves a collection of objects on the device. + + A collection of all device objects on the device. + + + +Retrieves a collection of objects on the device. + + A filter for the returned device objects collection. + A collection of device objects matching the specified filter. + + + +Retrieves data from polled objects on a DirectInput device. + + A object describing the result of the operation. + + + +Runs the DirectInput control panel associated with this device. If the +device does not have a control panel associated with it, the default +device control panel is launched. + + The parent control. + A object describing the result of the operation. + + + +Runs the DirectInput control panel associated with this device. If the +device does not have a control panel associated with it, the default +device control panel is launched. + + A object describing the result of the operation. + + + +Sets the device's cooperative level. + + A control to associate with the device. + Flags that describe the cooperative level of the device. + A object describing the result of the operation. + + + +Sets the device's cooperative level. + + A handle of a window to associate with the device. + Flags that describe the cooperative level of the device. + A object describing the result of the operation. + + + +Releases access to the device. + + A object describing the result of the operation. + + + +Obtains access to the input device. + + A object describing the result of the operation. + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Gets a value indicating whether the device is a Human Interface Device. + + + + +Gets the hardware revision number. + + + + +Gets the firmware revision number. + + + + +Gets the driver version number. + + + + +Gets the minimum time, in microseconds, that the device can resolve. The device +rounds any times to the nearest supported increment. + + + + +Gets the minimum time between playback of consecutive raw force commands, in microseconds. + + + + +Gets the number of Point-Of-View controllers available on the device. + + + + +Gets the number of buttons available on the device. + + + + +Gets the number of axes available on the device. + + + + +Gets the device sub-type specifier. + + + + +Gets the device type specifier. + + + + +Gets the flags associated with the device. + + + + +Describes a DirectInput device's capabilities. + + + + +Gets the range of data returned from axis as suggested by the manufacturer. + + + + +Gets the range of raw data returned from the object. + + + + +Gets or sets the saturation zone of the object. + + + + +Gets the lower range of values that the object can possibly report. + + + + +Gets the upper range of values that the object can possibly report. + + + + +Gets the granularity of the object. + + + + +Gets or sets the dead zone for the object. + + + + +Gets or sets an application-defined value associated with the object. + + + + +Sets the object's data range. + + + + +Contains properties that define object behavior. + + + + +Gets the product identifer. + + + + +Gets the vendor identifier. + + + + +Gets the user name for a user currently assigned to the device. + + + + +Gets the type name of the device. + + + + +Gets or sets the saturation zone of a joystick device. + + + + +Gets or sets the lower range of values that the device can possibly report. + + + + +Gets or sets the upper range of values that the device can possibly report. + + + + +Gets or sets the friendly product name of the device. + + + + +Gets the instance number of a joystick device. + + + + +Gets or sets the friendly instance name of the device. + + + + +Gets the physical interface path to which the device is connected. + + + + +Gets the class identifier for the device. + + + + +Gets the input granularity for the device. + + + + +Gets the human-readable display name of the port to which the device is connected. + + + + +Gets the memory load for the device. + + + + +Gets or sets the gain of the device for force-feedback effects. + + + + +Gets or sets the dead zone for a joystick device. + + + + +Gets or sets the buffer input size. + + + + +Gets or sets the axis mode for the device. + + + + +Gets or sets a value indicating whether device objects are self centering. + + + + +Gets or sets an application-defined value associated with the device. + + + + +Sets the data range for the device. + + + + +Retrieves the scan code for the specified keyboard key. + + + + +Retrieves the localized key name for the specified keyboard key. + + + + +Contains properties that define device behavior. These +properties include input buffer size and axis mode. + + + + +Gets or sets extra flags for the object data format. + + + + +Gets or sets the device type that describes the object. + + + + +Gets or sets the object instance number. Setting this value to -1 +indicates that any object instance is permissible. + + + + +Gets or sets the unique identifier for the axis, button, or other input +source. When requesting a data format, making this member equal to + indicates that any type of object +is permissible. + + + + +Initializes a new instance of the class. + + + + +Indicates that a type is a data format specification for DirectInput. + + + + +Gets or sets the flags describing other attributes of the data format. + + + + +Initializes a new instance of the class. + + + + +Indicates that a type is a data format specification for DirectInput. + + + + +Represents errors that occur in the XInput subsystem. + + + + +Retrieves the instance identifier of a device that +has been newly attached to the system. + + + + +Gets a value indicating whether the specified device is +attached to the user's system. + + + + +Runs Control Panel to enable the user to install a new +input device or modify configurations. + + The parent control. + + + +Runs Control Panel to enable the user to install a new +input device or modify configurations. + + + + +Provides an interface to DirectInput. + + IDirectInput8W + + + +Gets a value indicating whether the device is a Human Interface Device. + + + + +If the device is a Human Interface Device, this member contains +the HID usage page code. + + + + +If the device is a Human Interface Device, this member contains +the HID usage code. + + + + +Gets the friendly name for the product. + + + + +Gets the friendly name for the instance. + + + + +Gets the secondary device type specifier. + + + + +Gets the main device type specifier. + + + + +Gets the unique identifier for the driver being used for force-feedback. The +driver's manufacturer establishes this identifier. + + + + +Gets the unique identifier for the product. This identifier is established +by the manufacturer of the device. + + + + +Gets the unique identifier for the instance of the device. Instance Guids are +specific to a particular computer. + + + + +Contains information about a device's identity. + + + + +Specifies the device type of an object data format. + + DIDFT + + + +The object must be a type defined by the manufacturer. + + + + +The object must be a toggle button. + + + + +The object must be a push button. + + + + +The object must be a Point-Of-View controller. + + + + +The object must be a valid force-feedback effect trigger. + + + + +The object must contain a force-feedback actuator. + + + + +The object must be a toggle or push button. + + + + +The object must be a relative axis. + + + + +The object must be an absolute or relative axis. + + + + +The object must be an absolute axis. + + + + +Specifies other attributes of an object data format. + + + + +The object must report velocity information. + + + + +The object must report position information. + + + + +The object must report force information. + + + + +The object must report acceleration information. + + + + +No extra flags specified. + + + + DIDOI + + + +Defines possible mouse object codes. + + + + +The Z axis. + + + + +The Y axis. + + + + +The X axis. + + + + +The eighth button. + + + + +The seventh button. + + + + +The sixth button. + + + + +The fifth button. + + + + +The fourth button. + + + + +The third button. + + + + +The second button. + + + + +The first button. + + + + +Defines possible keyboard key codes. + + + + +The Japanese Yen key. + + + + +The Web Stop key. + + + + +The Web Search key. + + + + +The Web Refresh key. + + + + +The Web Home key. + + + + +The Web Forwards key. + + + + +The Web Favorites key. + + + + +The Web Backwards key. + + + + +The Wake key. + + + + +The Volume Up key. + + + + +The Volume Down key. + + + + +The Up Arrow key. + + + + +An unlabeled key. + + + + +The Japanese Underline key. + + + + +The Tab key. + + + + +The Print Screen key. + + + + +The Stop key. + + + + +The Spacebar. + + + + +The Sleep key. + + + + +The slash key. + + + + +The semicolon key. + + + + +The Scroll Lock key. + + + + +The right Windows key. + + + + +The right Shift key. + + + + +The right Alt key. + + + + +The Right Arrow key. + + + + +The Return/Enter key. + + + + +The right Ctrl key. + + + + +The right square bracket key. + + + + +The Previous Track key. + + + + +The Power key. + + + + +The Play/Pause key. + + + + +The period key. + + + + +The Pause key. + + + + +The Page Up key. + + + + +The Page Down key. + + + + +The British and German OEM102 key. + + + + +The asterisk key on the NumberPad. + + + + +The slash key on the NumberPad. + + + + +The plus key on the NumberPad. + + + + +The period key on the NumberPad. + + + + +The minus key on the NumberPad. + + + + +The equals key on the NumberPad. + + + + +The Enter key on the NumberPad. + + + + +The comma key on the NumberPad. + + + + +The number 9 on the NumberPad. + + + + +The number 8 on the NumberPad. + + + + +The number 7 on the NumberPad. + + + + +The number 6 on the NumberPad. + + + + +The number 5 on the NumberPad. + + + + +The number 4 on the NumberPad. + + + + +The number 3 on the NumberPad. + + + + +The number 2 on the NumberPad. + + + + +The number 1 on the NumberPad. + + + + +The number 0 on the NumberPad. + + + + +The NumberLock key. + + + + +The Japanese No Convert key. + + + + +The Next Track key. + + + + +The My Computer key. + + + + +The Mute key. + + + + +The minus key. + + + + +The Media Stop key. + + + + +The Media Select key. + + + + +The Mail key. + + + + +The left Windows key. + + + + +The left Shift key. + + + + +The left Alt key. + + + + +The Left Arrow key. + + + + +The left Ctrl key. + + + + +The left square bracket key. + + + + +The Japanese Kanji key. + + + + +The Japanese Kana key. + + + + +The Insert key. + + + + +The Home key. + + + + +The grav accent (`) key. + + + + +The F15 key. + + + + +The F14 key. + + + + +The F13 key. + + + + +The F12 key. + + + + +The F11 key. + + + + +The F10 key. + + + + +The F9 key. + + + + +The F8 key. + + + + +The F7 key. + + + + +The F6 key. + + + + +The F5 key. + + + + +The F4 key. + + + + +The F3 key. + + + + +The F2 key. + + + + +The F1 key. + + + + +The Escape key. + + + + +The equals key. + + + + +The End key. + + + + +The Down Arrow key. + + + + +The Delete key. + + + + +The Japanese Convert key. + + + + +The comma key. + + + + +The colon key. + + + + +The Caps Lock key. + + + + +The calculator key. + + + + +The back slash key. + + + + +The Backspace. + + + + +The Japanese Ax key. + + + + +The Japanese At key. + + + + +The Applications key. + + + + +The apostrophe key. + + + + +The AbntC2 key on Brazillian keyboards. + + + + +The AbntC1 key on Brazillian keyboards. + + + + +The letter Z. + + + + +The letter Y. + + + + +The letter X. + + + + +The letter W. + + + + +The letter V. + + + + +The letter U. + + + + +The letter T. + + + + +The letter S. + + + + +The letter R. + + + + +The letter Q. + + + + +The letter P. + + + + +The letter O. + + + + +The letter N. + + + + +The letter M. + + + + +The letter L. + + + + +The letter K. + + + + +The letter J. + + + + +The letter I. + + + + +The letter H. + + + + +The letter G. + + + + +The letter F. + + + + +The letter E. + + + + +The letter D. + + + + +The letter C. + + + + +The letter B. + + + + +The letter A. + + + + +The number 9. + + + + +The number 8. + + + + +The number 7. + + + + +The number 6. + + + + +The number 5. + + + + +The number 4. + + + + +The number 3. + + + + +The number 2. + + + + +The number 1. + + + + +The number 0. + + + + +Specifies the main type of a DirectInput device. + + DI8DEVTYPE + + + +A specialized device with functionality unsuitable for main control of an application, +such as pedals with a wheel. + + + + +A screen pointer device. + + + + +A remote-control device. + + + + +A mouse or mouse-like device. + + + + +A keyboard or keyboard-like device. + + + + +A generic joystick. + + + + +A console game pad. + + + + +Controller for a flight simulation. + + + + +A device for steering. + + + + +Input device used to control another type of device from within the context of +the application. + + + + +A device that does not fall into any other category. + + + + +A first-person action game device. + + + + +Specifies the flags that can be associated with a DirectInput device. + + DIDC + + + +The force-feedback system supports the start delay parameter for at least one effect. + + + + +The force-feedback system supports the saturation of condition effects for at least +one condition. + + + + +The force-feedback system supports a maximum saturation for both positive and negative +force output for at least one condition. + + + + +The force-feedback system supports two coefficient values for conditions. + + + + +At least one object on the device is polled, rather than interrupt driven. + + + + +At least one object in the current data format is polled, rather than interrupt driven. + + + + +The device is a placeholder. + + + + +The device is a fictious device created by a device driver so that is can generate +mouse and keyboard events. + + + + +The force-feedback system supports the attack parameter for at least one effect. + + + + +The force-feedback system supports the fade parameter for at least one effect. + + + + +The device supports force-feedback. + + + + +Specifies that the device's data is coming from a user mode device interface. + + + + +The device supports deadband for at least one force-feedback condition. + + + + +The device is physically attached to the user's computer. + + + + +The device is a duplicate of another DirectInput device. + + + + DIEDFL + + + +The data format for a DirectInput device. + + + + +Joystick data. + + + + +Mouse data. + + + + +Keyboard data. + + + + DI8DEVCLASS + + + +Specifies the axis mode for the device. + + DIPROPAXISMODE + + + +The axis works with relative data. + + + + +The axis works with absolute data. + + + + +Specifies other attributes of a data format. + + DIDF + + + +The axes are in relative mode. + + + + +The axes are in absolute mode. + + + + +Specifies the cooperative level for a DirectInput device. + + DISCL + + + +Disables the Windows logo key. + + + + +Background operation of the device. + + + + +Foreground operation of the device. + + + + +Non exclusive access to the device. + + + + +Exclusive access to the device. + + + + +Gets the shader function stream. + + + + +Gets the device associated with the shader. + + + + +The minimum number of instructions slots supported. + + + + +The maximum number of instruction slots supported. + + + + +The minimum level of nesting of static flow control instructions. + + + + +The maximum level of nesting of static flow control instructions. + + + + +The minimum number of temporary registers supported. + + + + +The maximum number of temporary registers supported. + + + + +The minimum level of nesting of dynamic flow control instructions. + + + + +The maximum level of nesting of dynamic flow control instructions. + + + + +Releases all resources used by the . + + + + +Initializes a new instance of the class. + + The device used to create the shader. + The shader function stream. + + + +Represents a pixel shader. + + IDirect3DPixelShader9 + + + +Gets the version of the shader. + + + + +Gets the shader constant table. + + + + +Gets the raw shader function stream. + + + + +Gets the sampler names references in the shader. + + The set of referenced sampler names. + + + +Gets the set of semantics for shader outputs. + + The set of semantics for shader outputs. + + + +Gets the set of semantics for shader inputs. + + The set of semantics for shader inputs. + + + +Searches through the shader for the specified comment. + + A FOURCC code used to identify the comment. + The comment data. + + + +Disassembles the shader bytecode. + + The disassembled shader. + + + +Disassembles the shader bytecode. + + Determines whether the disassembly should be color coded for easier reading. + The disassembled shader. + + + +Disassembles the shader bytecode. + + Determines whether the disassembly should be color coded for easier reading. + A shader comment string. + The disassembled shader. + + + +Converts a shader version number into a managed object. + + The shader version number. + The parsed shader version information. + + + +Extracts the minor version component of a shader version number. + + The shader version number. + The minor version component. + + + +Extracts the major version component of a shader version number. + + The shader version number. + The major version component. + + + +Preprocesses a shader file without performing compilation. + + Name of the shader source file. + A object representing the raw shader stream. + + + +Preprocesses a shader file without performing compilation. + + Name of the shader source file. + Macro definitions. + An interface to use for handling #include directives. + A object representing the raw shader stream. + + + +Preprocesses a shader file without performing compilation. + + Name of the shader source file. + Macro definitions. + An interface to use for handling #include directives. + When the method completes, contains any compilation errors and warnings. + A object representing the raw shader stream. + + + +Preprocesses a shader without performing compilation. + + The source shader data. + A object representing the raw shader stream. + + + +Preprocesses a shader without performing compilation. + + The source shader data. + Macro definitions. + An interface to use for handling #include directives. + A object representing the raw shader stream. + + + +Preprocesses a shader without performing compilation. + + The source shader data. + Macro definitions. + An interface to use for handling #include directives. + When the method completes, contains any compilation errors and warnings. + A object representing the raw shader stream. + + + +Preprocesses a shader without performing compilation. + + The source shader data. + A object representing the raw shader stream. + + + +Preprocesses a shader without performing compilation. + + The source shader data. + Macro definitions. + An interface to use for handling #include directives. + A object representing the raw shader stream. + + + +Preprocesses a shader without performing compilation. + + The source shader data. + Macro definitions. + An interface to use for handling #include directives. + When the method completes, contains any compilation errors and warnings. + A object representing the raw shader stream. + + + +Compiles a shader from file. + + Name of the shader source file. + The name of the shader entry point. + The shader profile that determines the shader instruction set. + Compilation options. + A object representing the raw shader stream. + + + +Compiles a shader from file. + + Name of the shader source file. + Macro definitions. + An interface to use for handling #include directives. + The name of the shader entry point. + The shader profile that determines the shader instruction set. + Compilation options. + A object representing the raw shader stream. + + + +Compiles a shader from file. + + Name of the shader source file. + Macro definitions. + An interface to use for handling #include directives. + The name of the shader entry point. + The shader profile that determines the shader instruction set. + Compilation options. + When the method completes, contains any compilation errors and warnings. + A object representing the raw shader stream. + + + +Compiles a shader from the given source data. + + The source shader data. + The name of the shader entry point. + The shader profile that determines the shader instruction set. + Compilation options. + A object representing the raw shader stream. + + + +Compiles a shader from the given source data. + + The source shader data. + Macro definitions. + An interface to use for handling #include directives. + The name of the shader entry point. + The shader profile that determines the shader instruction set. + Compilation options. + A object representing the raw shader stream. + + + +Compiles a shader from the given source data. + + The source shader data. + Macro definitions. + An interface to use for handling #include directives. + The name of the shader entry point. + The shader profile that determines the shader instruction set. + Compilation options. + When the method completes, contains any compilation errors and warnings. + A object representing the raw shader stream. + + + +Compiles a shader from the given source data. + + The source shader data. + The name of the shader entry point. + The shader profile that determines the shader instruction set. + Compilation options. + A object representing the raw shader stream. + + + +Compiles a shader from the given source data. + + The source shader data. + Macro definitions. + An interface to use for handling #include directives. + The name of the shader entry point. + The shader profile that determines the shader instruction set. + Compilation options. + A object representing the raw shader stream. + + + +Compiles a shader from the given source data. + + The source shader data. + Macro definitions. + An interface to use for handling #include directives. + The name of the shader entry point. + The shader profile that determines the shader instruction set. + Compilation options. + When the method completes, contains any compilation errors and warnings. + A object representing the raw shader stream. + + + +Assembles a shader from file. + + Name of the shader file. + Compilation options. + A object representing the raw shader stream. + + + +Assembles a shader from file. + + Name of the shader file. + Macro definitions. + An interface to use for handling #include directives. + Compilation options. + A object representing the raw shader stream. + + + +Assembles a shader from file. + + Name of the shader file. + Macro definitions. + An interface to use for handling #include directives. + Compilation options. + When the method completes, contains any compilation errors and warnings. + A object representing the raw shader stream. + + + +Assembles a shader from the given source data. + + The source shader data. + Compilation options. + A object representing the raw shader stream. + + + +Assembles a shader from the given source data. + + The source shader data. + Macro definitions. + An interface to use for handling #include directives. + Compilation options. + A object representing the raw shader stream. + + + +Assembles a shader from the given source data. + + The source shader data. + Macro definitions. + An interface to use for handling #include directives. + Compilation options. + When the method completes, contains any compilation errors and warnings. + A object representing the raw shader stream. + + + +Assembles a shader from the given source data. + + The source shader data. + Compilation options. + A object representing the raw shader stream. + + + +Assembles a shader from the given source data. + + The source shader data. + Macro definitions. + An interface to use for handling #include directives. + Compilation options. + A object representing the raw shader stream. + + + +Assembles a shader from the given source data. + + The source shader data. + Macro definitions. + An interface to use for handling #include directives. + Compilation options. + When the method completes, contains any compilation errors and warnings. + A object representing the raw shader stream. + + + +Releases all resources used by the . + + + + +Represents a raw shader function stream. + + ID3DXBuffer + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +The definition of the preprocessor symbol. + + + + +The name of the preprocessor symbol. + + + + +Describes preprocessor definitions used by an effect object. + + D3DXMACRO + + + +Closes a shader #include file. + + The previously opened include stream. + + + +Opens and reads the contents of a shader #include file. + + Flags specifying the type of the include file. + Name of the include file to open. + The parent include file. + When the method completes, contains a stream pointing to the include file. + + + +Specifies an interface for handling #include directives. + + ID3DXInclude + + + +Sets the value of a parameter using the specified data. + + The array parameter whose value is to be set. + The array of new values for the array parameter. + A object describing the result of the operation. + + + +Sets the value of a parameter using the specified data. + + The parameter whose value is to be set. + The new value for the parameter. + A object describing the result of the operation. + + + +Used to access the constant table. This table contains the variables that are used by high-level language shaders and effects. + + ID3DXConstantTable + + + A description of a constant in a constant table. + D3DXCONSTANT_DESC + + + A description of the constant table. + D3DXCONSTANTTABLE_DESC + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Options that modify how the usage is interpreted. + + + + +Options that identify how the parameter will be used. + + + + +Describes the semantics of a shader parameter. + + D3DXSEMANTIC + + + +Minimum reference high frequency, in hertz. + + + + +Maximum reference high frequency, in hertz. + + + + +Default reference high frequency, in hertz. + + + + +Minimum echo density in the late reverberation decay, in percent. + + + + +Maximum echo density in the late reverberation decay, in percent. + + + + +Default echo density in the late reverberation decay, in percent. + + + + +Minimum modal density in the late reverberation decay, in percent. + + + + +Maximum modal density in the late reverberation decay, in percent. + + + + +Default modal density in the late reverberation decay, in percent. + + + + +Minimum time limit between the early reflections and the late reverberation relative to the time of the first reflection, in seconds. + + + + +Maximum time limit between the early reflections and the late reverberation relative to the time of the first reflection, in seconds. + + + + +Default time limit between the early reflections and the late reverberation relative to the time of the first reflection, in seconds. + + + + +Minimum attenuation of late reverberation relative to Room, in mB. + + + + +Maximum attenuation of late reverberation relative to Room, in mB. + + + + +Default attenuation of late reverberation relative to Room, in mB. + + + + +Minimum delay time of the first reflection relative to the direct path, in seconds. + + + + +Maximum delay time of the first reflection relative to the direct path, in seconds. + + + + +Default delay time of the first reflection relative to the direct path, in seconds. + + + + +Minimum attenuation of early reflections relative to Room, in mB. + + + + +Maximum attenuation of early reflections relative to Room, in mB. + + + + +Default attenuation of early reflections relative to Room, in mB. + + + + +Minimum ratio of the decay time at high frequencies to the decay time at low frequencies. + + + + +Maximum ratio of the decay time at high frequencies to the decay time at low frequencies. + + + + +Default ratio of the decay time at high frequencies to the decay time at low frequencies. + + + + +Minimum decay time, in seconds. + + + + +Maximum decay time, in seconds. + + + + +Default decay time, in seconds. + + + + +Minimum rolloff factor for the reflected signals. The rolloff factor for the direct path is controlled by the DirectSound listener. + + + + +Maximum rolloff factor for the reflected signals. The rolloff factor for the direct path is controlled by the DirectSound listener. + + + + +Default rolloff factor for the reflected signals. The rolloff factor for the direct path is controlled by the DirectSound listener. + + + + +Minimum attenuation of the room high-frequency effect, in mB. + + + + +Maximum attenuation of the room high-frequency effect, in mB. + + + + +Default attenuation of the room high-frequency effect, in mB. + + + + +Minimum attenuation of the room effect, in millibels (mB). + + + + +Maximum attenuation of the room effect, in millibels (mB). + + + + +Default attenuation of the room effect, in millibels (mB). + + + + +Gets or sets the standard reverberation parameters of a buffer. + + + + +Gets or sets the quality of the environmental reverberation effect. + + + + +Reference high frequency, in hertz. + + + + +Modal density in the late reverberation decay, in percent. + + + + +Echo density in the late reverberation decay, in percent. + + + + +Time limit between the early reflections and the late reverberation relative to the time of the first reflection, in seconds. + + + + +Attenuation of late reverberation relative to Room, in mB. + + + + +Delay time of the first reflection relative to the direct path, in seconds. + + + + +Attenuation of early reflections relative to Room, in mB. + + + + +Ratio of the decay time at high frequencies to the decay time at low frequencies. + + + + +Decay time, in seconds. + + + + +Rolloff factor for the reflected signals. + + + + +Attenuation of the room high-frequency effect, in mB. + + + + +Attenuation of the room effect, in millibels (mB). + + + + +The SoundEffectI3DL2Reverb object is used to set and retrieve effect parameters on a buffer that supports I3DL2 (Interactive 3D Audio Level 2) reverberation effects. + + IDirectSoundFXI3DL2Reverb + + + +Creates a font file enumerator object that encapsulates a collection of font files. +The font system calls back to this interface to create a font collection. + + Factory associated with the loader. + Font collection key that uniquely identifies the collection of font files within +the scope of the font collection loader being used. + Size of the font collection key in bytes. + +Pointer to the newly created font file enumerator. + + + + +The font collection loader interface is used to construct a collection of fonts given a particular type of key. +The font collection loader interface is recommended to be implemented by a singleton object. +IMPORTANT: font collection loader implementations must not register themselves with a DirectWrite factory +inside their constructors and must not unregister themselves in their destructors, because +registration and unregistraton operations increment and decrement the object reference count respectively. +Instead, registration and unregistration of font file loaders with DirectWrite factory should be performed +outside of the font file loader implementation as a separate step. + + + + +Specifies the word wrapping to be used in a particular multiline paragraph. + + + + +Specifies the text granularity used to trim text overflowing the layout box. + + + + +Specifies the measuring method used for text layout. + + + + +Specifies alignment of paragraph text along the reading direction axis relative to the leading and trailing edge of the layout box. + + + + +Indicates additional shaping requirements for text. + + + + +Represents a method of rendering glyphs. + + + + +Specifies the direction in which reading progresses. + + + + +Represents the internal structure of a device pixel (that is the physical arrangement of red, green, +and blue color components) that is assumed for purposes of rendering text. + + + + +Specifies alignment of paragraph text along the flow direction axis, relative to the flow's beginning and trailing edge of the layout box. + + + + +Specifies how to apply number substitution on digits and related punctuation. + + + + +The method used for line spacing in a text layout. + + + + +The informational string enumeration which identifies a string embedded in a font file. + + + + +Describes common values for degree of blackness, or thickness of strokes of characters in a font. + + + + +Represents the style of a font face as normal, italic, or oblique. + + + + +Represents the degree to which a font has been stretched compared to a font's normal aspect ratio. + + + + +Specifies algorithmic style simulations to be applied to the font face. + + + + +The type of font represented by a single font file. + + + + +Indicates the typographic feature of text supplied by the font. + + + + +Indicates the file format of a font face. + + + + +Indicates the direction of flow for placing lines of text in a paragraph. + + + + +Specifies the type of the DirectWrite factory object. + + + + +Indicates the condition at the edges of inline objects or text used to determine line-breaking behavior. + + + + +The number of samples for a multisampled texture; otherwise 0. + + + + +Identifies the amount of data in the resource. + + + + +If the input is a texture, the return type. + + + + +Shader input-parameter options. + + + + +Number of contiguous bind points for arrays. + + + + +Starting bind point. + + + + +Identifies the type of data in the resource. + + + + +Name of the shader resource. + + + + +Describes how a shader resource is bound to a shader input. + + D3D11_SHADER_INPUT_BIND_DESC + + + +Returns a value indicating whether the two objects are equivalent. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Returns a value indicating whether this instance is equal to the specified object. + + A to compare with this instance. + + true if has the same value as this instance; otherwise, false. + + + +Returns a value indicating whether this instance is equal to the specified object. + + An object to compare with this instance. + + true if has the same value as this instance; otherwise, false. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Initializes a new instance of the struct. + + The buffer being bound. + The offset to the first vertex (in bytes). + + + +Gets or sets the offset from the start of the buffer of the first vertex to use (in bytes). + + + + +Gets or sets the buffer being bound. + + + + +Properties defining the way a buffer is bound to the pipeline as a target for stream output operations. + + + + +Initializes a new instance of the class. + + The device with which to associate the buffer. + Initial data used to initialize the buffer. + The size, in bytes, of the buffer. + The usage pattern for the buffer. + Flags specifying how the buffer will be bound to the pipeline. + Flags specifying how the buffer will be accessible from the CPU. + Miscellaneous resource options. + The size (in bytes) of the structure element for structured buffers. + + + +Initializes a new instance of the class. + + The device with which to associate the buffer. + The size, in bytes, of the buffer. + The usage pattern for the buffer. + Flags specifying how the buffer will be bound to the pipeline. + Flags specifying how the buffer will be accessible from the CPU. + Miscellaneous resource options. + The size (in bytes) of the structure element for structured buffers. + + + +Initializes a new instance of the class. + + The device with which to associate the buffer. + Initial data used to initialize the buffer. + The description of the buffer. + + + +Initializes a new instance of the class. + + The device with which to associate the buffer. + The description of the buffer. + + + +Gets the buffer's description. + + + + +Represents a sequential collection of typed data elements, +typically used to contain vertices, indices, or shader constant data. + + ID3D11Buffer + + + +Generates a mipmap chain using a particular texture filter. + + The device context used to generate the mipmaps. + The texture to be filtered. + The mipmap level whose data is used to generate the rest of the mipmap chain. + Flags controlling how each miplevel is filtered. + A object describing the result of the operation. + + + +Loads a texture from a texture. + + The device context used to load the texture. + The source texture. + The destination texture. + Texture loading parameters. + A object describing the result of the operation. + + + +Calculates a subresource index. + + The index of the desired mip slice. + The index of the desired array slice. + The total number of mip levels. + The subresource index (equivalent to mipSlice + (arraySlice * mipLevels)). + + + +Gets the resource's dimension (type). + + + + +Gets or sets the resource's eviction priority. + + + + +Constructs a new instance of the class using the specified pointer to a +previously constructed unmanaged object. + + The unmanaged resource pointer. + The newly constructed object. + + + +Gets a swap chain back buffer. + + The type of the buffer. + The swap chain to get the buffer from. + The index of the desired buffer. + The buffer interface, or null on failure. + + + +Returns a DXGI Surface for this resource. + + The buffer interface, or null on failure. + + + +A base class for all resource objects. + + ID3D11Resource + + + +Filtering options when generating mip levels. + + + + +Filtering options during resampling. + + + + +Number of elements to load. + + + + +First element of the destination texture. + + + + +First element of the source texture. + + + + +Number of mipmap levels in the source texture. + + + + +Destination texture mipmap level. + + + + +Source texture mipmap level. + + + + +Destination texture region. + + + + +Source texture region. + + + + +Describes parameters used to load a texture from another texture. + + D3DX11_TEXTURE_LOAD_INFO + + + +Returns a value indicating whether the two ResourceRegions are equivalent. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Returns a value indicating whether this instance is equal to the specified object. + + A to compare with this instance. + + true if has the same value as this instance; otherwise, false. + + + +Returns a value indicating whether this instance is equal to the specified object. + + An object to compare with this instance. + + true if has the same value as this instance; otherwise, false. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two ResourceRegions. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two ResourceRegions. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Initializes a new instance of the struct. + + The left boundary of the region. + The top boundary of the region. + The front boundary of the region. + The right boundary of the region. + The bottom boundary of the region. + The back boundary of the region. + + + +Gets or sets the back boundary of the region. + + + + +Gets or sets the bottom boundary of the region. + + + + +Gets or sets the right boundary of the region. + + + + +Gets or sets the front boundary of the region. + + + + +Gets or sets the top boundary of the region. + + + + +Gets or sets the left boundary of the region. + + + + +Represents a 3D region of a resource's data. + + D3D11_BOX + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Gets or Sets whether the buffer has sticky focus. + + + + +Gets or Sets whether the buffer is in on-board hardware memory. + + + + +Gets or Sets whether the buffer is a primary buffer. + + + + +Gets or Sets whether the sound is reduced to silence at the maximum distance. The buffer will stop playing when the maximum distance is exceeded, so that processor time is not wasted. Applies only to software buffers. + + + + +Gets or Sets whether the buffer can be assigned to a hardware or software resource at play time. + + + + +Gets or Sets whether the buffer is in software memory and uses software mixing. + + + + +Gets or Sets whether the buffer uses hardware mixing. + + + + +Gets or Sets whether the buffer is a global sound buffer. + + + + +Gets or Sets whether the buffer supports effects processing. + + + + +Gets or Sets whether the buffer has position notification capability. + + + + +Gets or Sets whether the buffer has pan control capability. + + + + +Gets or Sets whether the buffer has volume control capability. + + + + +Gets or Sets whether the buffer has frequency control capability. + + + + +Gets or Sets whether the buffer has 3D control capability. + + + + +Gets or Sets whether the buffer uses the new behavior of the play cursor when retrieving the current position. + + + + +The processing overhead as a percentage of main processor cycles needed to mix this sound buffer. + + + + +The rate, in kilobytes per second, at which data is transferred to the buffer memory when SoundBuffer.Unlock is called. + + + + +Size of this buffer, in bytes. + + + + +Describes the capabilities of a DirectSound buffer object. + + DSBCAPS + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Gets a structure describing the current state of the gamepad. + + + + +Gets the state packet number. + + +The packet number indicates whether there have been any changes in the state of the controller. If the value +does not change in sequentially returned State structures, the controller state has not changed. + + + + +Represents the state of a controller. + + XINPUT_STATE + + + +Gets the class-instance object that represents the specified HLSL class. + + The name of a class for which to get the class instance. + The index of the class instance. + The specified class instance. + + + +Initializes a new instance of the class. + + The device used to create the class linkage object. + + + +Encapsulates HLSL dynamic class linkage. + + ID3D11ClassLinkage + + + +Initializes a new instance of the class. + + The device used to create the shader. + The compiled shader bytecode. + A dynamic class linkage interface. + + + +Initializes a new instance of the class. + + The device used to create the shader. + The compiled shader bytecode. + + + +Represents a vertex shader. + + ID3D11VertexShader + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Flags that identifies other, less common resource options. + + + + +Flags that specify how the CPU may access the texture. + + + + +Flags that describe how the texture can be bound to the pipeline. + + + + +Value that identifies how the texture is to be read from and written to. + + + + +Gets or sets multisampling parameters for the texture. + + + + +Format of the data in the texture. + + + + +Number of textures in the array. + + + + +The maximum number of mipmap levels in the texture. Use 1 for a multisampled texture; or 0 to generate a full set of subtextures. + + + + +Texture height (in texels). + + + + +Texture width (in texels). + + + + +Describes a two-dimensional texture. + + D3D11_TEXTURE2D_DESC + + + RefWarning message. + + + DeviceUnorderedAccessViewCounterUnsupported message. + + + ClearUnorderedAccessViewFloatInvalidFormat message. + + + DeviceCSSetUnorderedAccessViewsTooManyViews message. + + + DeviceCSSetUnorderedAccessViewsInvalidOffset message. + + + DeviceCSSetUnorderedAccessViewsInvalidView message. + + + CheckFormatSupportFormatNotSupported message. + + + CopyStructureCountInvalidSourceState message. + + + CopyStructureCountInvalidDestinationState message. + + + CopyStructureCountLargeOffset message. + + + CopyStructureCountInvalidOffset message. + + + DeviceDispatchIndirectUnsupported message. + + + DeviceDispatchUnsupported message. + + + DeviceShaderResourceViewRawUnsupported message. + + + DeviceShaderResourceViewBufferTypeMismatch message. + + + DeviceShaderResourceViewStructureStrideMismatch message. + + + DeviceDispatchThreadGroupCountZero message. + + + DeviceDispatchThreadGroupCountOverflow message. + + + DeviceDispatchBoundResourceMapped message. + + + DeviceUnorderedAccessViewAtomicUnsignedMinmaxUnsupported message. + + + DeviceUnorderedAccessViewAtomicSignedMinmaxUnsupported message. + + + DeviceUnorderedAccessViewAtomicExchangeUnsupported message. + + + DeviceUnorderedAccessViewAtomicCmpStoreCmpExchangeUnsupported message. + + + DeviceUnorderedAccessViewAtomicBitwiseOpsUnsupported message. + + + DeviceUnorderedAccessViewAtomicAddUnsupported message. + + + DeviceUnorderedAccessViewFormatStoreUnsupported message. + + + DeviceUnorderedAccessViewFormatLdUnsupported message. + + + DeviceUnorderedAccessViewRawUnsupported message. + + + DeviceUnorderedAccessViewBufferTypeMismatch message. + + + DeviceUnorderedAccessViewStructureStrideMismatch message. + + + DeviceUnorderedAccessViewAtomicsUnsupported message. + + + DeviceUnorderedAccessViewAppendUnsupported message. + + + DeviceUnorderedAccessViewDimensionMismatch message. + + + DeviceDrawUnorderedAccessViewRenderTargetViewOverlap message. + + + DeviceUnorderedAccessViewNotSet message. + + + DeviceUnorderedAccessViewReturnTypeMismatch message. + + + CheckFeatureSupportFormatDeprecated message. + + + ClearDepthStencilViewStencilReadOnly message. + + + ClearDepthStencilViewDepthReadOnly message. + + + OMSetDepthStencilUnbindDeletingObject message. + + + DeviceGetResourceMinLodInvalidResource message. + + + DeviceGetResourceMinLodInvalidContext message. + + + DeviceSetResourceMinLodInvalidMinLod message. + + + DeviceSetResourceMinLodInvalidResource message. + + + DeviceSetResourceMinLodInvalidContext message. + + + DeviceDispatchIndirectOffsetOverflow message. + + + DeviceDispatchIndirectOffsetUnaligned message. + + + DeviceDispatchIndirectInvalidArgBuffer message. + + + CreateUnorderedAccessViewInvalidFlags message. + + + DeviceCSGetUnorderedAccessViewsEmpty message. + + + DeviceCSSetUnorderedAccessViewsEmpty message. + + + ClearUnorderedAccessViewDenormalizeFlush message. + + + DeviceCSSetUnorderedAccessViewsHazard message. + + + CreateUnorderedAccessViewTooManyObjects message. + + + CreateUnorderedAccessViewOutOfMemoryReturn message. + + + CreateUnorderedAccessViewInvalidArgumentReturn message. + + + PSSetUnorderedAccessViewsUnbindDeletingObject message. + + + CSSetUnorderedAccessViewsUnbindDeletingObject message. + + + DeviceOMSetRenderTargetsAndUnorderedAccessViewsNoOp message. + + + DeviceOMSetRenderTargetsAndUnorderedAccessViewsOverlappingOldSlots message. + + + DeviceOMSetRenderTargetsAndUnorderedAccessViewsHazard message. + + + CreateUnorderedAccessViewUnrecognizedFormat message. + + + CreateUnorderedAccessViewInvalidDimensions message. + + + CreateUnorderedAccessViewInvalidFormat message. + + + CreateUnorderedAccessViewInvalidDescription message. + + + CreateUnorderedAccessViewInvalidResource message. + + + CreateShaderResourceViewInvalidFlags message. + + + CreateBufferInvalidStructureStride message. + + + DeviceCreateComputeShaderDoubleFloatOpsNotSupported message. + + + DeviceCreatePixelShaderDoubleFloatOpsNotSupported message. + + + DeviceCreateGeometryShaderWithStreamOutputDoubleFloatOpsNotSupported message. + + + DeviceCreateGeometryShaderDoubleFloatOpsNotSupported message. + + + DeviceCreateDomainShaderDoubleFloatOpsNotSupported message. + + + DeviceCreateHullShaderDoubleFloatOpsNotSupported message. + + + DeviceCreateVertexShaderDoubleFloatOpsNotSupported message. + + + DeviceCSGetSamplersSamplersEmpty message. + + + DeviceCSGetConstantBuffersBuffersEmpty message. + + + DeviceCSGetShaderResourcesViewsEmpty message. + + + DeviceCSSetSamplersSamplersEmpty message. + + + DeviceCSSetConstantBuffersBuffersEmpty message. + + + CSSetConstantBuffersInvalidBuffer message. + + + DeviceCSSetShaderResourcesViewsEmpty message. + + + CreateComputeShaderInvalidClassLinkage message. + + + CreateComputeShaderInvalidShaderType message. + + + CreateComputeShaderInvalidShaderBytecode message. + + + CreateComputeShaderOutOfMemory message. + + + CreateComputeShaderInvalidCall message. + + + CSSetConstantBuffersUnbindDeletingObject message. + + + CSSetShaderResourcesUnbindDeletingObject message. + + + DeviceCSSetConstantBuffersHazard message. + + + DeviceCSSetShaderResourcesHazard message. + + + DeviceCheckFeatureSupportInvalidArgumentReturn message. + + + DeviceCheckFeatureSupportMismatchedDataSize message. + + + DeviceCheckFeatureSupportUnrecognizedFeature message. + + + DeviceCreateShaderClassLinkageFull message. + + + DeviceSetShaderInstanceDataBindings message. + + + DeviceSetShaderUnboundInstanceData message. + + + DeviceSetShaderInvalidInstanceData message. + + + DeviceSetShaderInvalidInstanceType message. + + + DeviceSetShaderInvalidInstanceIndex message. + + + DeviceSetShaderInvalidInstance message. + + + DeviceSetShaderInterfaceCountMismatch message. + + + DeviceSetShaderInterfacesFeatureLevel message. + + + DestroyUnorderedAccessView message. + + + LiveUnorderedAccessView message. + + + CreateUnorderedAccessView message. + + + DestroyComputeShader message. + + + LiveComputeShader message. + + + CreateComputeShader message. + + + LiveObjectSummary message. + + + LiveDevice message. + + + DestroyClassLinkage message. + + + LiveClassLinkage message. + + + CreateClassLinkage message. + + + DestroyClassInstance message. + + + LiveClassInstance message. + + + CreateClassInstance message. + + + DestroyCommandList message. + + + LiveCommandList message. + + + CreateCommandList message. + + + DestroyCounter message. + + + LiveCounter message. + + + CreateCounter message. + + + DestroyPredicate message. + + + LivePredicate message. + + + CreatePredicate message. + + + DestroyQuery message. + + + LiveQuery message. + + + CreateQuery message. + + + DestroyRasterizerState message. + + + LiveRasterizerState message. + + + CreateRasterizerState message. + + + DestroyDepthStencilState message. + + + LiveDepthStencilState message. + + + CreateDepthStencilState message. + + + DestroyBlendState message. + + + LiveBlendState message. + + + CreateBlendState message. + + + DestroySampler message. + + + LiveSampler message. + + + CreateSampler message. + + + DestroyInputLayout message. + + + LiveInputLayout message. + + + CreateInputLayout message. + + + DestroyPixelShader message. + + + LivePixelShader message. + + + CreatePixelShader message. + + + DestroyGeometryShader message. + + + LiveGeometryShader message. + + + CreateGeometryShader message. + + + DestroyDomainShader message. + + + LiveDomainShader message. + + + CreateDomainShader message. + + + DestroyHullShader message. + + + LiveHullShader message. + + + CreateHullShader message. + + + DestroyVertexShader message. + + + LiveVertexShader message. + + + CreateVertexShader message. + + + DestroyDepthStencilView message. + + + LiveDepthStencilView message. + + + CreateDepthStencilView message. + + + DestroyRenderTargetView message. + + + LiveRenderTargetView message. + + + CreateRenderTargetView message. + + + DestroyShaderResourceView message. + + + LiveShaderResourceView message. + + + CreateShaderResourceView message. + + + DestroyTexture3D message. + + + LiveTexture3D message. + + + CreateTexture3D message. + + + DestroyTexture2D message. + + + LiveTexture2D message. + + + CreateTexture2D message. + + + DestroyTexture1D message. + + + LiveTexture1D message. + + + CreateTexture1D message. + + + DestroyBuffer message. + + + LiveBuffer message. + + + CreateBuffer message. + + + DestroyContext message. + + + LiveContext message. + + + CreateContext message. + + + DeviceDrawHsDsTessellatorDomainMismatch message. + + + DeviceDrawHsDsControlPointCountMismatch message. + + + DeviceDrawHullShaderInputTopologyMismatch message. + + + DeviceDrawHsDsSignatureMismatch message. + + + DeviceIASetPrimitiveTopologyUnsupported message. + + + DeviceDrawRasterizingControlPoints message. + + + ResourceUnmapNotMapped message. + + + ResourceUnmapInvalidSubresource message. + + + ResourceMapWithoutInitialDiscard message. + + + ResourceMapOutOfMemoryReturn message. + + + ResourceMapDeviceRemovedReturn message. + + + ResourceMapAlreadyMapped message. + + + ResourceMapInvalidFlags message. + + + ResourceMapInvalidSubresource message. + + + ResourceMapInvalidMapType message. + + + DeviceDrawIndirectOffsetOverflow message. + + + DeviceDrawIndirectOffsetUnaligned message. + + + DeviceDrawIndirectInvalidArgBuffer message. + + + DeferredContextRemovalProcessAtFault message. + + + DeviceDrawHsXorDsMismatch message. + + + DeviceDSGetSamplersSamplersEmpty message. + + + DeviceDSGetConstantBuffersBuffersEmpty message. + + + DeviceDSGetShaderResourcesViewsEmpty message. + + + DeviceDSSetSamplersSamplersEmpty message. + + + DeviceDSSetConstantBuffersBuffersEmpty message. + + + DSSetConstantBuffersInvalidBuffer message. + + + DeviceDSSetShaderResourcesViewsEmpty message. + + + CreateDomainShaderInvalidClassLinkage message. + + + CreateDomainShaderInvalidShaderType message. + + + CreateDomainShaderInvalidShaderBytecode message. + + + CreateDomainShaderOutOfMemory message. + + + CreateDomainShaderInvalidCall message. + + + DSSetConstantBuffersUnbindDeletingObject message. + + + DSSetShaderResourcesUnbindDeletingObject message. + + + DeviceDSSetConstantBuffersHazard message. + + + DeviceDSSetShaderResourcesHazard message. + + + DeviceHSGetSamplersSamplersEmpty message. + + + DeviceHSGetConstantBuffersBuffersEmpty message. + + + DeviceHSGetShaderResourcesViewsEmpty message. + + + DeviceHSSetSamplersSamplersEmpty message. + + + DeviceHSSetConstantBuffersBuffersEmpty message. + + + HSSetConstantBuffersInvalidBuffer message. + + + DeviceHSSetShaderResourcesViewsEmpty message. + + + CreateHullShaderInvalidClassLinkage message. + + + CreateHullShaderInvalidShaderType message. + + + CreateHullShaderInvalidShaderBytecode message. + + + CreateHullShaderOutOfMemory message. + + + CreateHullShaderInvalidCall message. + + + HSSetConstantBuffersUnbindDeletingObject message. + + + HSSetShaderResourcesUnbindDeletingObject message. + + + DeviceHSSetConstantBuffersHazard message. + + + DeviceHSSetShaderResourcesHazard message. + + + CreateGeometryShaderWithStreamOutputInvalidStrideCount message. + + + CreateGeometryShaderWithStreamOutputUnexpectedStrides message. + + + CreateGeometryShaderWithStreamOutputUnexpectedEntries message. + + + CreateGeometryShaderWithStreamOutputInvalidStream message. + + + FinishDisplayListInvalidCallReturn message. + + + FinishDisplayListOutOfMemoryReturn message. + + + FinishDisplayListOnImmediateContext message. + + + CreateDeferredContextOutOfMemoryReturn message. + + + CreateDeferredContextInvalidCallReturn message. + + + CreateDeferredContextInvalidArgumentReturn message. + + + CreateDeferredContextSingleThreaded message. + + + CreateDeferredContextInvalidCommandListFlags message. + + + CreatePixelShaderInvalidClassLinkage message. + + + CreateGeometryShaderWithStreamOutputInvalidClassLinkage message. + + + CreateGeometryShaderWithStreamOutputUnexpectedStreams message. + + + CreateGeometryShaderWithStreamOutputInvalidStreamToRasterizer message. + + + CreateGeometryShaderWithStreamOutputInvalidStreamCount message. + + + CreateGeometryShaderInvalidClassLinkage message. + + + CreateVertexShaderInvalidClassLinkage message. + + + CreateDepthStencilViewInvalidFlags message. + + + OMSetRenderTargetsNoSrgbMrt message. + + + CreateSamplerStateBorderNotSupported message. + + + CreateResourceNonPow2MipMap message. + + + SlotZeroMustBeD3D10InputPerVertexData message. + + + DeviceRSSetScissorRectanglesNegativeScissor message. + + + CreateResourceOnlySingleMipLevelDepthStencilSupported message. + + + CreateResourceDimensionExceedsFeatureLevelDefinition message. + + + SetBlendStateSampleMaskCannotBeZero message. + + + DrawIndexedPointListUnsupported message. + + + DrawIndexedInstancedNotSupportedBelow93 message. + + + DrawInstancedNotSupported message. + + + CreateSamplerStateNoMirrorOnce message. + + + CreateBlendStateOperationNotSupported message. + + + CreateBlendStateNoMrtBlend message. + + + CreateBlendStateNoSeparateAlphaBlend message. + + + TextFilterNotSupported message. + + + StreamOutNotSupported message. + + + GeometryShaderNotSupported message. + + + VSShaderResourcesNotSupported message. + + + CreateResourceDxgiFormatR8G8B8A8CannotBeShared message. + + + CreateResourceNoAutogenForVolumes message. + + + CreateResourceOnlyVbIbForBuffers message. + + + CreateResourceNoStreamOut message. + + + CreateBlendStateNoIndependentWriteMasks message. + + + CreateBlendStateNoIndependentBlendEnable message. + + + CreateResourcePresentationPrecludesShaderResource message. + + + CreateResourceMsaaPrecludesShaderResource message. + + + CreateResourceNoDwordIndexBuffer message. + + + CreateResourceNotBindableAsRenderTarget message. + + + CreateShaderResourceViewCubesMustHave6Sides message. + + + CreateShaderResourceViewFirstArraySliceMustBeZero message. + + + CreateSamplerStateMaxLodMustBeFltMax message. + + + CreateSamplerStateMinLodMustNotBeFractional message. + + + CreateShaderResourceViewMustUseLowestLod message. + + + DrawIndexedStartIndexLocationMustBePositive message. + + + CreateRasterizerStateDepthClipEnableMustBeTrue message. + + + CreateBlendStateNoAlphaToCoverage message. + + + CreateInputLayoutUnsupportedFormat message. + + + CopyResourceNoTextureOnlyReadBack message. + + + CopyResourceNoTexture3DReadBack message. + + + CopyResourceOnlyTexture2DWithinGpuMemory message. + + + DeviceRSSetScissorRectanglesTooManyScissors message. + + + DeviceIASetPrimitiveTopologyAdjacencyUnsupported message. + + + DeviceRSSetViewportsTooManyViewports message. + + + IASetVertexBuffersBadBufferIndex message. + + + OMSetRenderTargetsNoDifferingBitDepths message. + + + OMSetRenderTargetsTooManyRenderTargets message. + + + CreateResourceNotBindableAsShaderResource message. + + + CreateResourceDimensionOutOfRange message. + + + CreateResourceNoTexture1D message. + + + CreateResourceNoVBAndIBBind message. + + + CreateResourceNoArrays message. + + + PSSetSamplersTooManySamplers message. + + + VSSetSamplersTooManySamplers message. + + + VSSetSamplersNotSupported message. + + + CreateSamplerStateBorderOutOfRange message. + + + CreateSamplerStateExcessiveAnisotropy message. + + + CreateSamplerStateNoComparisonSupport message. + + + CreateRasterizerStateDepthBiasClampNotSupported message. + + + CreateDepthStencilStateStencilNoTwoSided message. + + + DeviceDrawResourceSampleCountMismatch message. + + + CreateInputLayoutEmptyLayout message. + + + DeviceIASetVertexBuffersInvalidRange message. + + + DeviceIASetVertexBuffersStrideTooLarge message. + + + DeviceDrawInvalidUseOfCenterMultisamplePattern message. + + + DeviceDrawResourceFormatGatherUnsupported message. + + + DeviceDrawPSOutputTypeMismatch message. + + + QueryGetDataInvalidCall message. + + + QueryGetDataInvalidFlags message. + + + QueryGetDataInvalidDataSize message. + + + QueryEndWithoutBegin message. + + + QueryEndAbandoningPreviousResults message. + + + PredicateEndDuringPredication message. + + + QueryBeginAbandoningPreviousResults message. + + + QueryBeginDuplicate message. + + + PredicateBeginDuringPredication message. + + + QueryBeginUnsupported message. + + + SetPredicationInvalidPredicateState message. + + + CheckCounterUnsupportedWellKnownCounter message. + + + CheckCounterOutOfRangeCounter message. + + + CreateCounterNullDescription message. + + + CreateCounterNonexclusiveReturn message. + + + CreateCounterOutOfMemoryReturn message. + + + CreateCounterUnsupportedWellKnownCounter message. + + + CreateCounterSimultaneousActiveCountersExhausted message. + + + CreateCounterOutOfRangeCounter message. + + + CreatePredicateOutOfMemoryReturn message. + + + CreateQueryOutOfMemoryReturn message. + + + ShaderResourceViewGetDescriptionLegacy message. + + + BlendStateGetDescriptionLegacy message. + + + CreateInputLayoutTypeMismatch message. + + + DeviceDrawSamplerMismatch message. + + + DeviceSetTextFilterSizeInvalidDimensions message. + + + OMSetRenderTargetsInvalidView message. + + + DeviceRSSetViewportsDenormalizeFlush message. + + + CreateGeometryShaderWithStreamOutputTrailingDigitInSemantic message. + + + CreateInputLayoutTrailingDigitInSemantic message. + + + DeviceDrawViewportNotSet message. + + + DeviceOpenSharedResourceBadInterfaceReturn message. + + + DeviceOpenSharedResourceOutOfMemoryReturn message. + + + DeviceOpenSharedResourceInvalidArgumentReturn message. + + + DeviceRemovalProcessNotAtFault message. + + + DeviceRemovalProcessPossiblyAtFault message. + + + DeviceRemovalProcessAtFault message. + + + DeviceDrawOMDualSourceBlendingCanOnlyHaveRenderTarget0 message. + + + DeviceDrawOMRenderTargetDoesNotSupportBlending message. + + + DeviceDrawSOStrideLargerThanBuffer message. + + + DeviceDrawSOTargetsBoundWithoutSource message. + + + DeviceDrawResourceMultisampleUnsupported message. + + + DeviceDrawResourceFormatSampleCUnsupported message. + + + DeviceDrawResourceFormatSampleUnsupported message. + + + DeviceDrawResourceFormatLdUnsupported message. + + + DeviceDrawOutputStreamOffsetUnaligned message. + + + DeviceDrawIndexOffsetUnaligned message. + + + DeviceDrawVertexStrideUnaligned message. + + + DeviceDrawVertexOffsetUnaligned message. + + + DeviceDrawInvalidPrimitiveTopology message. + + + DeviceDrawBoundResourceMapped message. + + + DeviceDrawOutputStreamNotSet message. + + + DeviceDrawPositionNotPresent message. + + + DeviceDrawResourceReturnTypeMismatch message. + + + DeviceDrawGSInputPrimitiveMismatch message. + + + DeviceDrawIndexBufferTooSmall message. + + + DeviceDrawIndexBufferFormatInvalid message. + + + DeviceDrawIndexBufferNotSet message. + + + DeviceDrawVertexBufferTooSmall message. + + + DeviceDrawVertexBufferStrideTooSmall message. + + + DeviceDrawViewDimensionMismatch message. + + + DeviceDrawShaderResourceViewNotSet message. + + + DeviceDrawSamplerNotSet message. + + + DeviceDrawConstantBufferTooSmall message. + + + DeviceDrawConstantBufferNotSet message. + + + DeviceDrawInputLayoutNotSet message. + + + DeviceDrawVertexBufferNotSet message. + + + DeviceShaderLinkageNeverWrittenAlwaysReads message. + + + DeviceShaderLinkageSystemValue message. + + + DeviceShaderLinkageRegisterMask message. + + + DeviceShaderLinkageComponentType message. + + + DeviceShaderLinkageRegisterIndex message. + + + DeviceShaderLinkageSemanticNameNotFound message. + + + DeviceDrawVertexShaderNotSet message. + + + DeviceDrawIndexedInstancedIndexPositionOverflow message. + + + DeviceDrawIndexedInstancedInstancePositionOverflow message. + + + DeviceDrawInstancedInstancePositionOverflow message. + + + DeviceDrawInstancedVertexPositionOverflow message. + + + DeviceDrawIndexedIndexPositionOverflow message. + + + DeviceDrawVertexPositionOverflow message. + + + RefInfo message. + + + RefOutOfMemory message. + + + RefProblemParsingShader message. + + + RefAccessingIndexableTempOutOfRange message. + + + RefHardwareException message. + + + RefKmDriverException message. + + + RefUmDriverException message. + + + RefThreadingMode message. + + + RefSimulatingInfinitelyFastHardware message. + + + SetExceptionModeDeviceRemovedReturn message. + + + SetExceptionModeInvalidArgumentReturn message. + + + SetExceptionModeUnrecognizedFlags message. + + + CheckMultisampleQualityLevelsFormatDeprecated message. + + + CheckFormatSupportFormatDeprecated message. + + + Texture3DUnmapNotMapped message. + + + Texture3DUnmapInvalidSubresource message. + + + Texture3DMapDeviceRemovedReturn message. + + + Texture3DMapAlreadyMapped message. + + + Texture3DMapInvalidFlags message. + + + Texture3DMapInvalidSubresource message. + + + Texture3DMapInvalidMapType message. + + + Texture2DUnmapNotMapped message. + + + Texture2DUnmapInvalidSubresource message. + + + Texture2DMapDeviceRemovedReturn message. + + + Texture2DMapAlreadyMapped message. + + + Texture2DMapInvalidFlags message. + + + Texture2DMapInvalidSubresource message. + + + Texture2DMapInvalidMapType message. + + + Texture1DUnmapNotMapped message. + + + Texture1DUnmapInvalidSubresource message. + + + Texture1DMapDeviceRemovedReturn message. + + + Texture1DMapAlreadyMapped message. + + + Texture1DMapInvalidFlags message. + + + Texture1DMapInvalidSubresource message. + + + Texture1DMapInvalidMapType message. + + + BufferUnmapNotMapped message. + + + BufferMapDeviceRemovedReturn message. + + + BufferMapAlreadyMapped message. + + + BufferMapInvalidFlags message. + + + BufferMapInvalidMapType message. + + + DeviceResolveSubresourceFormatInvalid message. + + + DeviceResolveSubresourceSourceSubresourceInvalid message. + + + DeviceResolveSubresourceSourceInvalid message. + + + DeviceResolveSubresourceDestinationSubresourceInvalid message. + + + DeviceResolveSubresourceDestinationInvalid message. + + + UpdateSubresourceInvalidDestinationState message. + + + UpdateSubresourceInvalidDestinationBox message. + + + UpdateSubresourceInvalidDestinationSubresource message. + + + CopyResourceInvalidSourceState message. + + + CopyResourceInvalidDestinationState message. + + + CopyResourceInvalidSource message. + + + CopySubresourceRegionInvalidSourceState message. + + + CopySubresourceRegionInvalidDestinationState message. + + + CopySubresourceRegionInvalidSource message. + + + CopySubresourceRegionInvalidSourceBox message. + + + CopySubresourceRegionInvalidSourceSubresource message. + + + CopySubresourceRegionInvalidDestinationSubresource message. + + + DeviceGenerateMipsResourceInvalid message. + + + DeviceRSGetScissorRectanglesRectsEmpty message. + + + DeviceRSGetViewportsViewportsEmpty message. + + + DevicePSGetSamplersSamplersEmpty message. + + + DevicePSGetConstantBuffersBuffersEmpty message. + + + DevicePSGetShaderResourcesViewsEmpty message. + + + DeviceSOGetTargetsBuffersEmpty message. + + + DeviceGSGetSamplersSamplersEmpty message. + + + DeviceGSGetConstantBuffersBuffersEmpty message. + + + DeviceGSGetShaderResourcesViewsEmpty message. + + + DeviceVSGetSamplersSamplersEmpty message. + + + DeviceVSGetConstantBuffersBuffersEmpty message. + + + DeviceVSGetShaderResourcesViewsEmpty message. + + + DeviceIAGetVertexBuffersBuffersEmpty message. + + + ClearDepthStencilViewInvalid message. + + + ClearDepthStencilViewDenormalizeFlush message. + + + ClearRenderTargetViewDenormalizeFlush message. + + + DeviceRSSetScissorRectanglesInvalidScissor message. + + + DeviceRSSetViewportsInvalidViewport message. + + + DevicePSSetSamplersSamplersEmpty message. + + + DevicePSSetConstantBuffersBuffersEmpty message. + + + PSSetConstantBuffersInvalidBuffer message. + + + DevicePSSetShaderResourcesViewsEmpty message. + + + DeviceSOSetTargetsOffsetUnaligned message. + + + SOSetTargetsInvalidBuffer message. + + + DeviceGSSetSamplersSamplersEmpty message. + + + DeviceGSSetConstantBuffersBuffersEmpty message. + + + GSSetConstantBuffersInvalidBuffer message. + + + DeviceGSSetShaderResourcesViewsEmpty message. + + + DeviceVSSetSamplersSamplersEmpty message. + + + DeviceVSSetConstantBuffersBuffersEmpty message. + + + VSSetConstantBuffersInvalidBuffer message. + + + DeviceVSSetShaderResourcesViewsEmpty message. + + + DeviceIASetIndexBufferOffsetUnaligned message. + + + DeviceIASetIndexBufferOffsetTooLarge message. + + + DeviceIASetIndexBufferFormatInvalid message. + + + IASetIndexBufferInvalidBuffer message. + + + DeviceIASetVertexBuffersBuffersEmpty message. + + + DeviceIASetVertexBuffersOffsetTooLarge message. + + + IASetVertexBuffersInvalidBuffer message. + + + DeviceIASetPrimitiveTopologyUndefined message. + + + DeviceIASetPrimitiveTopologyUnrecognized message. + + + CreateQueryOrPredicateNullDescription message. + + + CreateQueryOrPredicateUnexpectedMiscellaneousFlag message. + + + CreateQueryOrPredicateInvalidMiscellaneousFlags message. + + + CreateQueryOrPredicateInvalidQuery message. + + + CreateSamplerStateNullDescription message. + + + CreateSamplerStateTooManyObjects message. + + + CreateSamplerStateInvalidMaxLod message. + + + CreateSamplerStateInvalidMinLod message. + + + CreateSamplerStateInvalidComparisonFunction message. + + + CreateSamplerStateInvalidMaxAnisotropy message. + + + CreateSamplerStateInvalidMipLodBias message. + + + CreateSamplerStateInvalidAddressW message. + + + CreateSamplerStateInvalidAddressV message. + + + CreateSamplerStateInvalidAddressU message. + + + CreateSamplerStateInvalidFilter message. + + + CreateBlendStateNullDescription message. + + + CreateBlendStateTooManyObjects message. + + + CreateBlendStateInvalidRenderTargetWriteMask message. + + + CreateBlendStateInvalidBlendOperationAlpha message. + + + CreateBlendStateInvalidDestinationBlendAlpha message. + + + CreateBlendStateInvalidSourceBlendAlpha message. + + + CreateBlendStateInvalidBlendOperation message. + + + CreateBlendStateInvalidDestinationBlend message. + + + CreateBlendStateInvalidSourceBlend message. + + + CreateDepthStencilStateNullDescription message. + + + CreateDepthStencilStateTooManyObjects message. + + + CreateDepthStencilStateInvalidBackFaceStencilFunction message. + + + CreateDepthStencilStateInvalidBackFaceStencilPassOp message. + + + CreateDepthStencilStateInvalidBackFaceStencilZFailOp message. + + + CreateDepthStencilStateInvalidBackFaceStencilFailOp message. + + + CreateDepthStencilStateInvalidFrontFaceStencilFunction message. + + + CreateDepthStencilStateInvalidFrontFaceStencilPassOp message. + + + CreateDepthStencilStateInvalidFrontFaceStencilZFailOp message. + + + CreateDepthStencilStateInvalidFrontFaceStencilFailOp message. + + + CreateDepthStencilStateInvalidDepthFunction message. + + + CreateDepthStencilStateInvalidDepthWriteMask message. + + + CreateRasterizerStateNullDescription message. + + + CreateRasterizerStateTooManyObjects message. + + + CreateRasterizerStateInvalidSlopeScaledDepthBias message. + + + CreateRasterizerStateInvalidDepthBiasClamp message. + + + CreateRasterizerStateInvalidCullMode message. + + + CreateRasterizerStateInvalidFillMode message. + + + CreatePixelShaderInvalidShaderType message. + + + CreatePixelShaderInvalidShaderBytecode message. + + + CreatePixelShaderOutOfMemory message. + + + CreateGeometryShaderWithStreamOutputMissingOutputSignature message. + + + CreateGeometryShaderWithStreamOutputDeclarationTooComplex message. + + + CreateGeometryShaderWithStreamOutputCantHaveOnlyGaps message. + + + CreateGeometryShaderWithStreamOutputMaskMismatch message. + + + CreateGeometryShaderWithStreamOutputMissingSemantic message. + + + CreateGeometryShaderWithStreamOutputInvalidOutputStreamStride message. + + + CreateGeometryShaderWithStreamOutputRepeatedOutput message. + + + CreateGeometryShaderWithStreamOutputInvalidGapDefinition message. + + + CreateGeometryShaderWithStreamOutputInvalidStartComponentAndComponentCount message. + + + CreateGeometryShaderWithStreamOutputInvalidComponentCount message. + + + CreateGeometryShaderWithStreamOutputOnlyOneElementPerSlot message. + + + CreateGeometryShaderWithStreamOutputInvalidOutputSlot message. + + + CreateGeometryShaderWithStreamOutputOutputSlot0Expected message. + + + CreateGeometryShaderWithStreamOutputExpectedDeclaration message. + + + CreateGeometryShaderWithStreamOutputUnexpectedDeclaration message. + + + CreateGeometryShaderWithStreamOutputOutputStreamStrideUnused message. + + + CreateGeometryShaderWithStreamOutputInvalidEntryCount message. + + + CreateGeometryShaderWithStreamOutputInvalidShaderType message. + + + CreateGeometryShaderWithStreamOutputInvalidShaderBytecode message. + + + CreateGeometryShaderWithStreamOutputOutOfMemory message. + + + CreateGeometryShaderInvalidShaderType message. + + + CreateGeometryShaderInvalidShaderBytecode message. + + + CreateGeometryShaderOutOfMemory message. + + + CreateVertexShaderInvalidShaderType message. + + + CreateVertexShaderInvalidShaderBytecode message. + + + CreateVertexShaderOutOfMemory message. + + + CreateInputLayoutNullDescription message. + + + CreateInputLayoutMissingElement message. + + + CreateInputLayoutNullSemantic message. + + + CreateInputLayoutUnparseableInputSignature message. + + + CreateInputLayoutDuplicateSemantic message. + + + CreateInputLayoutInvalidAlignment message. + + + CreateInputLayoutInvalidStepRateChange message. + + + CreateInputLayoutInvalidSlotClassChange message. + + + CreateInputLayoutStepRateSlotClassMismatch message. + + + CreateInputLayoutInvalidInputSlotClass message. + + + CreateInputLayoutInvalidSlot message. + + + CreateInputLayoutIncompatibleFormat message. + + + CreateInputLayoutInvalidFormat message. + + + CreateInputLayoutTooManyElements message. + + + CreateInputLayoutOutOfMemory message. + + + CreateDepthStencilViewOutOfMemoryReturn message. + + + CreateDepthStencilViewInvalidArgumentReturn message. + + + CreateDepthStencilViewTooManyObjects message. + + + CreateDepthStencilViewInvalidResource message. + + + CreateDepthStencilViewInvalidDimensions message. + + + CreateDepthStencilViewInvalidFormat message. + + + CreateDepthStencilViewInvalidDescription message. + + + CreateDepthStencilViewUnrecognizedFormat message. + + + CreateRenderTargetViewOutOfMemoryReturn message. + + + CreateRenderTargetViewInvalidArgumentReturn message. + + + CreateRenderTargetViewTooManyObjects message. + + + CreateRenderTargetViewInvalidResource message. + + + CreateRenderTargetViewInvalidDimensions message. + + + CreateRenderTargetViewInvalidFormat message. + + + CreateRenderTargetViewInvalidDescription message. + + + CreateRenderTargetViewUnsupportedFormat message. + + + CreateRenderTargetViewUnrecognizedFormat message. + + + CreateShaderResourceViewOutOfMemoryReturn message. + + + CreateShaderResourceViewInvalidArgumentReturn message. + + + CreateShaderResourceViewTooManyObjects message. + + + CreateShaderResourceViewInvalidResource message. + + + CreateShaderResourceViewInvalidDimensions message. + + + CreateShaderResourceViewInvalidFormat message. + + + CreateShaderResourceViewInvalidDescription message. + + + CreateShaderResourceViewUnrecognizedFormat message. + + + CreateTexture3DLargeAllocation message. + + + CreateTexture3DNullDescription message. + + + CreateTexture3DOutOfMemoryReturn message. + + + CreateTexture3DInvalidArgumentReturn message. + + + CreateTexture3DInvalidMiscellaneousFlags message. + + + CreateTexture3DInvalidMipLevels message. + + + CreateTexture3DInvalidDimensions message. + + + CreateTexture3DInvalidInitialData message. + + + CreateTexture3DInvalidBindFlags message. + + + CreateTexture3DInvalidCPUAccessFlags message. + + + CreateTexture3DUnrecognizedMiscellaneousFlags message. + + + CreateTexture3DUnrecognizedCPUAccessFlags message. + + + CreateTexture3DUnrecognizedBindFlags message. + + + CreateTexture3DUnrecognizedUsage message. + + + CreateTexture3DInvalidSamples message. + + + CreateTexture3DUnsupportedFormat message. + + + CreateTexture3DUnrecognizedFormat message. + + + CreateTexture2DLargeAllocation message. + + + CreateTexture2DNullDescription message. + + + CreateTexture2DOutOfMemoryReturn message. + + + CreateTexture2DInvalidArgumentReturn message. + + + CreateTexture2DInvalidMiscellaneousFlags message. + + + CreateTexture2DInvalidMipLevels message. + + + CreateTexture2DInvalidDimensions message. + + + CreateTexture2DInvalidInitialData message. + + + CreateTexture2DInvalidBindFlags message. + + + CreateTexture2DInvalidCPUAccessFlags message. + + + CreateTexture2DUnrecognizedMiscellaneousFlags message. + + + CreateTexture2DUnrecognizedCPUAccessFlags message. + + + CreateTexture2DUnrecognizedBindFlags message. + + + CreateTexture2DUnrecognizedUsage message. + + + CreateTexture2DInvalidSamples message. + + + CreateTexture2DUnsupportedFormat message. + + + CreateTexture2DUnrecognizedFormat message. + + + CreateTexture1DLargeAllocation message. + + + CreateTexture1DNullDescription message. + + + CreateTexture1DOutOfMemoryReturn message. + + + CreateTexture1DInvalidArgumentReturn message. + + + CreateTexture1DInvalidMiscellaneousFlags message. + + + CreateTexture1DInvalidMipLevels message. + + + CreateTexture1DInvalidDimensions message. + + + CreateTexture1DInvalidInitialData message. + + + CreateTexture1DInvalidBindFlags message. + + + CreateTexture1DInvalidCPUAccessFlags message. + + + CreateTexture1DUnrecognizedMiscellaneousFlags message. + + + CreateTexture1DUnrecognizedCPUAccessFlags message. + + + CreateTexture1DUnrecognizedBindFlags message. + + + CreateTexture1DUnrecognizedUsage message. + + + CreateTexture1DInvalidSamples message. + + + CreateTexture1DUnsupportedFormat message. + + + CreateTexture1DUnrecognizedFormat message. + + + CreateBufferLargeAllocation message. + + + CreateBufferInvalidConstantBufferBindings message. + + + CreateBufferNullDescription message. + + + CreateBufferOutOfMemoryReturn message. + + + CreateBufferInvalidArgumentReturn message. + + + CreateBufferInvalidMiscellaneousFlags message. + + + CreateBufferInvalidMipLevels message. + + + CreateBufferInvalidDimensions message. + + + CreateBufferInvalidInitialData message. + + + CreateBufferInvalidBindFlags message. + + + CreateBufferInvalidCPUAccessFlags message. + + + CreateBufferUnrecognizedMiscellaneousFlags message. + + + CreateBufferUnrecognizedCPUAccessFlags message. + + + CreateBufferUnrecognizedBindFlags message. + + + CreateBufferUnrecognizedUsage message. + + + CreateBufferInvalidSamples message. + + + CreateBufferUnrecognizedFormat message. + + + SetPrivateDataOutOfMemory message. + + + SetPrivateDataChangingParameters message. + + + SetPrivateDataInvalidFlags message. + + + SetPrivateDataInvalidIUnknown message. + + + SetPrivateDataInvalidFreeData message. + + + GetPrivateDataMoreData message. + + + SetPredicationUnbindDeletingObject message. + + + OMSetRenderTargetsUnbindDeletingObject message. + + + OMSetDepthStencilStateUnbindDeletingObject message. + + + OMSetBlendStateUnbindDeletingObject message. + + + RSSetStateUnbindDeletingObject message. + + + PSSetSamplersUnbindDeletingObject message. + + + PSSetConstantBuffersUnbindDeletingObject message. + + + PSSetShaderResourcesUnbindDeletingObject message. + + + PSSetShaderUnbindDeletingObject message. + + + SOSetTargetsUnbindDeletingObject message. + + + GSSetSamplersUnbindDeletingObject message. + + + GSSetConstantBuffersUnbindDeletingObject message. + + + GSSetShaderResourcesUnbindDeletingObject message. + + + GSSetShaderUnbindDeletingObject message. + + + VSSetSamplersUnbindDeletingObject message. + + + VSSetConstantBuffersUnbindDeletingObject message. + + + VSSetShaderResourcesUnbindDeletingObject message. + + + VSSetShaderUnbindDeletingObject message. + + + IASetIndexBufferUnbindDeletingObject message. + + + IASetVertexBuffersUnbindDeletingObject message. + + + IASetInputLayoutUnbindDeletingObject message. + + + MessageReportingOutOfMemory message. + + + CorruptedMultithreading message. + + + CorruptedParameter15 message. + + + CorruptedParameter14 message. + + + CorruptedParameter13 message. + + + CorruptedParameter12 message. + + + CorruptedParameter11 message. + + + CorruptedParameter10 message. + + + CorruptedParameter9 message. + + + CorruptedParameter8 message. + + + CorruptedParameter7 message. + + + CorruptedParameter6 message. + + + CorruptedParameter5 message. + + + CorruptedParameter4 message. + + + CorruptedParameter3 message. + + + CorruptedParameter2 message. + + + CorruptedParameter1 message. + + + CorruptedThis message. + + + StringFromApplication message. + + + DeviceSOSetTargetsHazard message. + + + DeviceOMSetRenderTargetsHazard message. + + + DevicePSSetConstantBuffersHazard message. + + + DevicePSSetShaderResourcesHazard message. + + + DeviceGSSetConstantBuffersHazard message. + + + DeviceGSSetShaderResourcesHazard message. + + + DeviceVSSetConstantBuffersHazard message. + + + DeviceVSSetShaderResourcesHazard message. + + + DeviceIASetIndexBufferHazard message. + + + DeviceIASetVertexBuffersHazard message. + + + Unknown message. + + + +Gets a description of the buffer. + + + + +Unlocks previously locked data. + + A object describing the result of the operation. + + + +Locks the buffer and obtains a pointer to the memory. + + Offset into the index data to lock, in bytes. + Size of the index data to lock, in bytes. + Locking flags. + A containing the index data. + + + +Initializes a new instance of the class. + + The device that will be used to create the buffer. + Size of the buffer, in bytes. + The requested usage of the buffer. + The memory class into which the resource will be placed. + + true to create a buffer of 16-bit indices; false to create a buffer of 32-bit indices. + The variable that will receive the shared handle for this resource. + This method is only available in Direct3D9 Ex. + + + +Initializes a new instance of the class. + + The device that will be used to create the buffer. + Size of the buffer, in bytes. + The requested usage of the buffer. + The memory class into which the resource will be placed. + + true to create a buffer of 16-bit indices; false to create a buffer of 32-bit indices. + + + Represents a buffer of index data. + IDirect3DIndexBuffer9 + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +The size of the buffer data, in bytes. + + + + +The memory class allocated for the buffer. + + + + +The intended usage of the resource. + + + + +Identifies the resource as an index buffer. + + + + +Surface format of the index data. + + + + Describes an index buffer. + D3DINDEXBUFFER_DESC + + + +Gets or sets a friendly debug name for the object. This name is used in debug messages +as well as in the PIX object browser. + + + + +Gets the type of the resource. + + + + +Gets or sets the resource's priority. + + + + +Gets the device associated with the resource. + + + + +The resource has the maximum priority possible. + + + + +The resource is scheduled with high priority. + + + + +The resource is scheduled with normal priority. + + + + +The resource is scheduled with low priority. + + + + +The resource has the lowest priority possible. + + + + +Preloads a managed resource. + + + + +Initializes a new instance of the class. + + + + Represents a base class for all Direct3D resources. + IDirect3DResource9 + + + +Constructs a new exception object. + + The result code that caused this exception. + + + +Constructs a new exception object. + + The message describing the exception. + The exception that caused this exception. + + + +Constructs a new exception object. + + The message describing the exception. + + + +Constructs a new exception object. + + + + +Represents errors that occur in the DirectWrite subsystem. + + + + +Constructs a new sampler state based on the specified description. If the description +is identical to that of an existing SamplerState object, the existing SamplerState object +is returned instead of a new instance. + + The device used to create the state. + The state description. + The SamplerState object. + + + +Gets the state's description. + + + + +A state object defining the behavior of texture sampling. + + ID3D11SamplerState + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Upper end of the mipmap range to clamp access to, where 0 is the largest and most detailed mipmap level and any level higher than that is less detailed. This value must be greater than or equal to MinimumLod. To have no upper limit on LOD set this to a large value such as float.MaxValue. + + + + +Lower end of the mipmap range to clamp access to, where 0 is the largest and most detailed mipmap level and any level higher than that is less detailed. + + + + +Border color to use if using border addressing mode. + + + + +A function that compares sampled data against existing sampled data. + + + + +Clamping value used if performing anisotropic filtering. Valid values are between 1 and 16. + + + + +Offset from the calculated mipmap level. For example, if Direct3D calculates that a texture should be sampled at mipmap level 3 and MipLODBias is 2, then the texture will be sampled at mipmap level 5. + + + + +Method to use for resolving a w texture coordinate that is outside the 0 to 1 range. + + + + +Method to use for resolving a v texture coordinate that is outside the 0 to 1 range. + + + + +Method to use for resolving a u texture coordinate that is outside the 0 to 1 range. + + + + +Filtering method to use when sampling a texture. + + + + +Provides a description for sampler state objects. + + D3D11_SAMPLER_DESC + + + +Initializes a new instance of the class. + + The result code that caused this exception. + + + +Initializes a new instance of the class. + + The message describing the exception. + The exception that caused this exception. + + + +Initializes a new instance of the class. + + The message describing the exception. + + + +Initializes a new instance of the class. + + + + +Represents errors that occur in the XInput subsystem. + + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +This constant may be used as the value which and must be greater than to register as pressed. + + + + +Can be used as a positive and negative value to filter the right thumbstick input. + + + + +Can be used as a positive and negative value to filter the left thumbstick input. + + + + +Gets the right thumbstick y-axis value. The value is between -32768 and 32767. + + + + +Gets the right thumbstick x-axis value. The value is between -32768 and 32767. + + + + +Gets the left thumbstick y-axis value. The value is between -32768 and 32767. + + + + +Gets the left thumbstick y-axis value. The value is between -32768 and 32767. + + + + +Gets the current value of the right trigger analog control. The value is between 0 and 255. + + + + +Gets the current value of the left trigger analog control. The value is between 0 and 255. + + + + +Gets a set of flags describing the pressed buttons on the gamepad. + + + + +Describes the current state of the Xbox 360 Controller. + + +Each of the thumbstick axis members is a signed value between -32768 and 32767 describing the position of the thumbstick. +A value of 0 is centered. Negative values signify down or to the left. Positive values signify up or to the right. +The constants GamepadLeftThumbDeadZone or GamepadRightThumbDeadZone can be used as a positive and negative value to filter +thumbstick input. + + XINPUT_GAMEPAD + + + +Specifies the index of a user's controller. + + + + +Player four. + + + + +Player three. + + + + +Player two. + + + + +Player one. + + + + +The index of the user is unimportant. + + + + +Defines flags that indicate the keyboard state at the time of an input event. + + + + +A repeat of a held key. + + + + +The key was released. + + + + +The key was pressed. + + + + +No extra keystroke flags. + + + + +Specifies possible key codes for gamepad buttons. + + + + +Pushing the right thumb stick down and to the right. + + + + +Pushing the right thumb stick down and to the left. + + + + +Pushing the right thumb stick up and to the right. + + + + +Pushing the right thumb stick up and to the left. + + + + +Pushing the right thumb stick right. + + + + +Pushing the right thumb stick left. + + + + +Pushing the right thumb stick down. + + + + +Pushing the right thumb stick up. + + + + +Pushing the left thumb stick down and to the right. + + + + +Pushing the left thumb stick down and to the left. + + + + +Pushing the left thumb stick up and to the right. + + + + +Pushing the left thumb stick up and to the left. + + + + +Pushing the left thumb stick right. + + + + +Pushing the left thumb stick left. + + + + +Pushing the left thumb stick down. + + + + +Pushing the left thumb stick up. + + + + +A complete press of the right thumb stick. + + + + +A complete press of the left thumb stick. + + + + +The back button. + + + + +The start button. + + + + +The Right button on the D-Pad. + + + + +The Left button on the D-Pad. + + + + +The Down button on the D-Pad. + + + + +The Up button on the D-Pad. + + + + +The right trigger button. + + + + +The left trigger button. + + + + +The left shoulder button. + + + + +The right shoulder button. + + + + +The Y button. + + + + +The X button. + + + + +The B button. + + + + +The A button. + + + + +Describes a set of pressed buttons on a gamepad. + + + + +The Y button is pressed. + + + + +The X button is pressed. + + + + +The B button is pressed. + + + + +The A button is pressed. + + + + +The right shoulder button is pressed. + + + + +The left shoulder button is pressed. + + + + +The right thumb button is pressed. + + + + +The left thumb button is pressed. + + + + +The back button is pressed. + + + + +The start button is pressed. + + + + +The Right button on the D-Pad is pressed. + + + + +The Left button on the D-Pad is pressed. + + + + +The Down button on the D-Pad is pressed. + + + + +The Up button on the D-Pad is pressed. + + + + +No buttons are pressed. + + + + +Specifies possible sub-types for XInput devices. + + + + +The device is a flight stick. + + + + +The device is a dancing pad. + + + + +The device is a racing wheel. + + + + +The device is a generic gamepad. + + + + +The device is an arcade stick. + + + + +Defines the type of devices that will be returned by a query. + + + + +Query for gamepads only. + + + + +Return any and all devices. + + + + +Specifies possible controller types. + + + + +The device is a game controller. + + + + +Specifies capabilities for XInput devices. + + + + +The device has an integrated voice device. + + + + +No extra capabilities specfied. + + + + +Specifies possible battery types. + + + + +The device's battery type is unknown. + + + + +The device is using a Nickel Metal Hydride battery. + + + + +The device is using an Alkaline battery. + + + + +The device is wired, and therefore does not have a battery. + + + + +The device is disconnected, and therefore the battery type cannot be determined. + + + + +Specifies possible values indicating the amount of charge remaining in a battery. + + +These are only valid for wireless, connected devices, with known battery types. The amount of use time remaining depends on the type of device. + + + + +The battery is fully charged. + + + + +The battery is at a medium charge. + + + + +The battery is running low. + + + + +The battery is completely empty. + + + + +Specifies possible XInput devices that can use batteries. + + + + +An XInput headset. + + + + +An XInput gamepad. + + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Initializes a new instance of the struct. + + Zero-based stream index. + Type of output element; possible values include: "POSITION", "NORMAL", or "TEXCOORD0". Note that if SemanticName is null then ComponentCount can be greater than 4 and the described entry will be a gap in the stream out where no data will be written. + Output element's zero-based index. Should be used if, for example, you have more than one texture coordinate stored in each vertex. + Which component of the entry to begin writing out to. Valid values are 0 to 3. For example, if you only wish to output to the y and z components of a position, then StartComponent should be 1 and ComponentCount should be 2. + The number of components of the entry to write out to. Valid values are 1 to 4. For example, if you only wish to output to the y and z components of a position, then StartComponent should be 1 and ComponentCount should be 2. Note that if SemanticName is null then ComponentCount can be greater than 4 and the described entry will be a gap in the stream out where no data will be written. + The associated stream output buffer that is bound to the pipeline. Valid values range from 0 to 3. + + + +The associated stream output buffer that is bound to the pipeline. Valid values range from 0 to 3. + + + + +The number of components of the entry to write out to. Valid values are 1 to 4. For example, if you only wish to output to the y and z components of a position, +then StartComponent should be 1 and ComponentCount should be 2. Note that if SemanticName is null then ComponentCount can be greater than 4 and the described entry will be a gap in the stream out where no data will be written. + + + + +Which component of the entry to begin writing out to. Valid values are 0 to 3. For example, if you only wish to output to the y and z components of a position, then StartComponent should be 1 and ComponentCount should be 2. + + + + +Output element's zero-based index. Should be used if, for example, you have more than one texture coordinate stored in each vertex. + + + + +Type of output element; possible values include: "POSITION", "NORMAL", or "TEXCOORD0". Note that if SemanticName is null then +ComponentCount can be greater than 4 and the described entry will be a gap in the stream out where no data will be written. + + + + +Zero-based stream index. + + + + Describes a single element in a vertex buffer in an output slot. + D3D11_SO_DECLARATION_ENTRY + + + +This overload has been deprecated. Use one of the alternatives that does not take both an adapter and a driver type. + + + + +This overload has been deprecated. Use one of the alternatives that does not take both an adapter and a driver type. + + + + +Initializes a new instance of the class along with a new used for rendering. + + The type of device to create. + A list of runtime layers to enable. + A list of feature levels which determine the order of feature levels to attempt to create. + Details used to create the swap chain. + When the method completes, contains the created device instance. + When the method completes, contains the created swap chain instance. + A object describing the result of the operation. + + + +Initializes a new instance of the class along with a new used for rendering. + + The type of device to create. + A list of runtime layers to enable. + Details used to create the swap chain. + When the method completes, contains the created device instance. + When the method completes, contains the created swap chain instance. + A object describing the result of the operation. + + + +Initializes a new instance of the class along with a new used for rendering. + + The video adapter on which the device should be created. + A list of runtime layers to enable. + A list of feature levels which determine the order of feature levels to attempt to create. + Details used to create the swap chain. + When the method completes, contains the created device instance. + When the method completes, contains the created swap chain instance. + A object describing the result of the operation. + + + +Initializes a new instance of the class along with a new used for rendering. + + The video adapter on which the device should be created. + A list of runtime layers to enable. + Details used to create the swap chain. + When the method completes, contains the created device instance. + When the method completes, contains the created swap chain instance. + A object describing the result of the operation. + + + +Gets the highest supported hardware feature level of the given adapter. + + The adapter for which the feature level is to be retrieved. + The highest supported hardware feature level. + + + +Gets the highest supported hardware feature level of the primary adapter. + + The highest supported hardware feature level. + + + +Gives the device access to a shared resource created on a different device. + + The type of the resource. + A handle to the shared resource. + The new reference to the shared resource. + + + +Gets the number of quality levels supported during multisampling of resources using a specified format. + + The format to check support for. + The multisample count for which to check support. + The number of quality levels supported. 0 if an error occured or if the format/sampleCount pair is not supported. + + + +Checks the level of hardware multithreading supported by this device. + + When the method completes, contains a value indicating whether resources can be created concurrently on multiple threads while drawing. + When the method completes, contains a value indicating whether command lists are supported by the current driver. + A object describing the result of the operation. + + + +Checks for hardware support of the specified device feature. + + + true if the specified feature is supported; otherwise, false. + + + +Gets information about the supported compute shader applications of a specified format. + + The format for which to check support. + Flags indicating usage contexts in which the specified format is supported. + + + +Gets information about the supported applications of a specified format. + + The format for which to check support. + Flags indicating usage contexts in which the specified format is supported. + + + +Gets metadata (name, type, measurement units, et cetera) for a specific counter. + + The type of the counter to retrieve information about. + Metadata for the specified counter. + + + +Gets information about the device's performance counters. + + Information about the device's performance counters. + + + +Initializes a new instance of the class. + + The type of device to create. + A list of runtime layers to enable. + A list of feature levels which determine the order of feature levels to attempt to create. + + + +Initializes a new instance of the class using the highest supported feature level. + + The type of device to create. + A list of runtime layers to enable. + + + +Initializes a new instance of the class using the highest supported feature level. + + The type of device to create. + + + +Initializes a new instance of the class. + + The video adapter on which the device should be created. + A list of runtime layers to enable. + A list of feature levels which determine the order of feature levels to attempt to create. + + + +Initializes a new instance of the class using the highest supported feature level. + + The video adapter on which the device should be created. + A list of runtime layers to enable. + + + +Initializes a new instance of the class using the highest supported feature level. + + The video adapter on which the device should be created. + + + +Gets or sets a friendly debug name for the object. This name is used in debug messages +as well as in the PIX object browser. + + + + +Gets a value indicating whether the current device is using the reference rasterizer. + + + + +Gets the intrinsic immediate context for the device. + + + + +Gets the feature level of the hardware device. + + + + +Gets the reason why the device was removed. + + + + +Gets the flags used to create the device. + + + + +Gets the parent factory associated with the device. + + + + +The maximum number of multisample quality levels supported. + + + + +Represents a virtual adapter used to perform rendering and create resources. + + ID3D11Device + + + +Gets or sets swap chain options. + + + + +Gets or sets swapping effect behavior. + + + + +Gets or sets a value indicating whether or not the swap chain is in windowed mode. + + + + +Gets or sets the swap chain's output handle. + + + + +Gets or sets the number of buffers in the swap chain. + + + + +Gets or sets swap chain's surface usage. + + + + +Gets or sets the swap chain's multisampling properties. + + + + +Gets or sets the swap chain's display mode properties. + + + + +Describes properties of a swap chain. + + DXGI_SWAP_CHAIN_DESC + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Converts the value of the object to its equivalent string representation. + + The string representation of the value of this instance. + + + +Initializes a new instance of the structure. + + The sample count. + The sample quality. + + + +Gets or sets the sample quality. + + + + +Gets or sets the number of samples per pixel. + + + + +Describes multisample parameters. + + DXGI_SAMPLE_DESC + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Converts the value of the object to its equivalent string representation. + + The string representation of the value of this instance. + + + +Initializes a new instance of the structure. + + The width. + The height. + The refresh rate. + The format. + + + +Gets or sets the display mode scaling. + + + + +Gets or sets the scanline ordering. + + + + +Gets or sets the display mode format. + + + + +Gets or sets the display mode refresh rate. + + + + +Gets or sets the display mode height. + + + + +Gets or sets the display mode width. + + + + +Describes a display mode. + + DXGI_MODE_DESC + + + +Determines whether the specified object instances are considered equal. + + + + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Initializes a new instance of the structure. + + The numerator of the rational pair. + The denominator of the rational pair. + + + +Gets or sets the denominator of the rational pair. + + + + +Gets or sets the numerator of the rational pair. + + + + +Defines a rational number as a numerator / denominator pair. + + + + +Creates an instance of the type that this is associated with, using the specified context, given a set of property values for the object. + + A that provides a format context. + An that specifies the type of array for which to get properties. + An array of type that is used as a filter. + A with the properties that are exposed for this data type, or a null reference (Nothing in Visual Basic) if there are no properties. + + + +Returns whether this object supports properties, using the specified context. + + A that provides a format context. + + true if GetProperties should be called to find the properties of this object; otherwise, false. + + + +Creates an instance of the type that this is associated with, using the specified context, given a set of property values for the object. + + A that provides a format context. + An of new property values. + An representing the given , or null if the object cannot be created. + + + +Returns whether changing a value on this object requires a call to System::ComponentModel::TypeConverter::CreateInstance(System::Collections::IDictionary^) +to create a new value, using the specified context. + + A that provides a format context. + + false if changing a property on this object requires a call to System::ComponentModel::TypeConverter::CreateInstance(System::Collections::IDictionary^) to create a new value; otherwise, false. + + + +Converts the given object to the type of this converter, using the specified context and culture information. + + A that provides a format context. + A . If null is passed, the current culture is assumed. + The to convert. + An that represents the converted value. + + + +Converts the given value object to the specified type, using the specified context and culture information. + + A that provides a format context. + A . If null is passed, the current culture is assumed. + The to convert. + A that represents the type you want to convert to. + An that represents the converted value. + + + +Returns whether this converter can convert an object of the given type to the type of this converter, using the specified context. + + A that provides a format context. + A System::Type that represents the type you want to convert from. + + true if this converter can perform the conversion; otherwise, false. + + + +Returns whether this converter can convert the object to the specified type, using the specified context. + + A that provides a format context. + A that represents the type you want to convert to. + + true if this converter can perform the conversion; otherwise, false. + + + +Initializes a new instance of the class. + + + + +Provides a type converter to convert objects to and from various +other representations. + + + + +This interface encapsulates the minimum functionality required of an animation set by an animation +controller. Advanced users might want to implement this interface themselves to suit their +specialized needs; for most users, however, the derived CompressedAnimationSet and +KeyframedAnimationSet interfaces should suffice. + + ID3DXAnimationSet + + + Describes a vector translation key for use in key frame animation. + D3DXKEY_VECTOR3 + + + Describes a vector scale key for use in key frame animation. + D3DXKEY_VECTOR3 + + + Describes a quaternion rotation key for use in key frame animation. + D3DXKEY_QUATERNION + + + Describes a callback key for use in key frame animation. + D3DXKEY_CALLBACK + + + +Determines whether the specified object instances are considered equal. + + + + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Converts the value of the object to its equivalent string representation. + + The string representation of the value of this instance. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Reverses the direction of a given quaternion. + + The quaternion to negate. + A quaternion facing in the opposite direction. + + + +Subtracts two quaternions. + + The first quaternion to subtract. + The second quaternion to subtract. + The difference of the two quaternions. + + + +Adds two quaternions. + + The first quaternion to add. + The second quaternion to add. + The sum of the two quaternions. + + + +Divides a quaternion by another. + + The first quaternion to divide. + The second quaternion to divide. + The divided quaternion. + + + +Scales a quaternion by the given value. + + The quaternion to scale. + The amount by which to scale the quaternion. + The scaled quaternion. + + + +Scales a quaternion by the given value. + + The quaternion to scale. + The amount by which to scale the quaternion. + The scaled quaternion. + + + +Multiplies a quaternion by another. + + The first quaternion to multiply. + The second quaternion to multiply. + The multiplied quaternion. + + + +Subtracts two quaternions. + + The first quaternion to subtract. + The second quaternion to subtract. + When the method completes, contains the difference of the two quaternions. + + + +Subtracts two quaternions. + + The first quaternion to subtract. + The second quaternion to subtract. + The difference of the two quaternions. + + + +Sets up control points for spherical quadrangle interpolation. + + First source quaternion. + Second source quaternion. + Third source quaternion. + Fourth source quaternion. + An array of three quaternions that represent control points for spherical quadrangle interpolation. + + + +Interpolates between quaternions, using spherical quadrangle interpolation. + + First source quaternion. + Second source quaternion. + Thrid source quaternion. + Fourth source quaternion. + Value between 0 and 1 indicating the weight of interpolation. + When the method completes, contains the spherical quadrangle interpolation of the quaternions. + + + +Interpolates between quaternions, using spherical quadrangle interpolation. + + First source quaternion. + Second source quaternion. + Thrid source quaternion. + Fourth source quaternion. + Value between 0 and 1 indicating the weight of interpolation. + The spherical quadrangle interpolation of the quaternions. + + + +Interpolates between two quaternions, using spherical linear interpolation. + + Start quaternion. + End quaternion. + Value between 0 and 1 indicating the weight of . + When the method completes, contains the spherical linear interpolation of the two quaternions. + + + +Interpolates between two quaternions, using spherical linear interpolation. + + Start quaternion. + End quaternion. + Value between 0 and 1 indicating the weight of . + The spherical linear interpolation of the two quaternions. + + + +Creates a quaternion given a yaw, pitch, and roll value. + + The yaw of rotation. + The pitch of rotation. + The roll of rotation. + When the method completes, contains the newly created quaternion. + + + +Creates a quaternion given a yaw, pitch, and roll value. + + The yaw of rotation. + The pitch of rotation. + The roll of rotation. + The newly created quaternion. + + + +Creates a quaternion given a rotation matrix. + + The rotation matrix. + When the method completes, contains the newly created quaternion. + + + +Creates a quaternion given a rotation matrix. + + The rotation matrix. + The newly created quaternion. + + + +Creates a quaternion given a rotation and an axis. + + The axis of rotation. + The angle of rotation. + When the method completes, contains the newly created quaternion. + + + +Creates a quaternion given a rotation and an axis. + + The axis of rotation. + The angle of rotation. + The newly created quaternion. + + + +Converts the quaternion into a unit quaternion. + + The quaternion to normalize. + When the method completes, contains the normalized quaternion. + + + +Converts the quaternion into a unit quaternion. + + The quaternion to normalize. + The normalized quaternion. + + + +Reverses the direction of a given quaternion. + + The quaternion to negate. + When the method completes, contains a quaternion facing in the opposite direction. + + + +Reverses the direction of a given quaternion. + + The quaternion to negate. + A quaternion facing in the opposite direction. + + + +Scales a quaternion by the given value. + + The quaternion to scale. + The amount by which to scale the quaternion. + When the method completes, contains the scaled quaternion. + + + +Scales a quaternion by the given value. + + The quaternion to scale. + The amount by which to scale the quaternion. + The scaled quaternion. + + + +Modulates a quaternion by another. + + The first quaternion to modulate. + The second quaternion to modulate. + When the moethod completes, contains the modulated quaternion. + + + +Modulates a quaternion by another. + + The first quaternion to modulate. + The second quaternion to modulate. + The modulated quaternion. + + + +Calculates the natural logarithm of the specified quaternion. + + The quaternion whose logarithm will be calculated. + When the method completes, contains the natural logarithm of the quaternion. + + + +Calculates the natural logarithm of the specified quaternion. + + The quaternion whose logarithm will be calculated. + The natural logarithm of the quaternion. + + + +Performs a linear interpolation between two quaternions. + + Start quaternion. + End quaternion. + Value between 0 and 1 indicating the weight of . + When the method completes, contains the linear interpolation of the two quaternions. + +This method performs the linear interpolation based on the following formula. +start + (end - start) * amount +Passing a value of 0 will cause to be returned; a value of 1 will cause to be returned. + + + + +Performs a linear interpolation between two quaternion. + + Start quaternion. + End quaternion. + Value between 0 and 1 indicating the weight of . + The linear interpolation of the two quaternions. + +This method performs the linear interpolation based on the following formula. +start + (end - start) * amount +Passing a value of 0 will cause to be returned; a value of 1 will cause to be returned. + + + + +Conjugates and renormalizes the quaternion. + + The quaternion to conjugate and renormalize. + When the method completes, contains the conjugated and renormalized quaternion. + + + +Conjugates and renormalizes the quaternion. + + The quaternion to conjugate and renormalize. + The conjugated and renormalized quaternion. + + + +Exponentiates a quaternion. + + The quaternion to exponentiate. + When the method completes, contains the exponentiated quaternion. + + + +Exponentiates a quaternion. + + The quaternion to exponentiate. + The exponentiated quaternion. + + + +Calculates the dot product of two quaternions. + + First source quaternion. + Second source quaternion. + The dot product of the two quaternions. + + + +Divides a quaternion by another. + + The first quaternion to divide. + The second quaternion to divide. + The divided quaternion. + + + +Divides a quaternion by another. + + The first quaternion to divide. + The second quaternion to divide. + The divided quaternion. + + + +Conjugates a quaternion. + + The quaternion to conjugate. + When the method completes, contains the conjugated quaternion. + + + +Conjugates a quaternion. + + The quaternion to conjugate. + The conjugated quaternion. + + + +Returns a containing the 4D Cartesian coordinates of a point specified in Barycentric coordinates relative to a 2D triangle. + + A containing the 4D Cartesian coordinates of vertex 1 of the triangle. + A containing the 4D Cartesian coordinates of vertex 2 of the triangle. + A containing the 4D Cartesian coordinates of vertex 3 of the triangle. + Barycentric coordinate b2, which expresses the weighting factor toward vertex 2 (specified in ). + Barycentric coordinate b3, which expresses the weighting factor toward vertex 3 (specified in ). + When the method completes, contains a new containing the 4D Cartesian coordinates of the specified point. + + + +Returns a containing the 4D Cartesian coordinates of a point specified in Barycentric coordinates relative to a 2D triangle. + + A containing the 4D Cartesian coordinates of vertex 1 of the triangle. + A containing the 4D Cartesian coordinates of vertex 2 of the triangle. + A containing the 4D Cartesian coordinates of vertex 3 of the triangle. + Barycentric coordinate b2, which expresses the weighting factor toward vertex 2 (specified in ). + Barycentric coordinate b3, which expresses the weighting factor toward vertex 3 (specified in ). + A new containing the 4D Cartesian coordinates of the specified point. + + + +Adds two quaternions. + + The first quaternion to add. + The second quaternion to add. + When the method completes, contains the sum of the two quaternions. + + + +Adds two quaternions. + + The first quaternion to add. + The second quaternion to add. + The sum of the two quaternions. + + + +Conjugates and renormalizes the quaternion. + + + + +Conjugates the quaternion. + + + + +Converts the quaternion into a unit quaternion. + + + + +Calculates the squared length of the quaternion. + + The squared length of the quaternion. + + + +Calculates the length of the quaternion. + + The length of the quaternion. + + + +Gets the angle of the quaternion. The quaternion must be normalized. + + + + +Gets the axis components of the quaternion. The quaternion must be normalized. + + + + +Gets a value indicating whether this instance is an identity . + + + + +Gets the identity (0, 0, 0, 1). + + + + +Initializes a new instance of the structure. + + A containing the first three values of the quaternion. + The W component of the quaternion. + + + +Initializes a new instance of the structure. + + The X component of the quaternion. + The Y component of the quaternion. + The Z component of the quaternion. + The W component of the quaternion. + + + +Gets or sets the W component of the quaternion. + + The W component of the quaternion. + + + +Gets or sets the Z component of the quaternion. + + The Z component of the quaternion. + + + +Gets or sets the Y component of the quaternion. + + The Y component of the quaternion. + + + +Gets or sets the X component of the quaternion. + + The X component of the quaternion. + + + +Defines a four dimensional mathematical quaternion. + + D3DXQUATERNION + + + +Creates an instance of the type that this is associated with, using the specified context, given a set of property values for the object. + + A that provides a format context. + An that specifies the type of array for which to get properties. + An array of type that is used as a filter. + A with the properties that are exposed for this data type, or a null reference (Nothing in Visual Basic) if there are no properties. + + + +Returns whether this object supports properties, using the specified context. + + A that provides a format context. + + true if GetProperties should be called to find the properties of this object; otherwise, false. + + + +Creates an instance of the type that this is associated with, using the specified context, given a set of property values for the object. + + A that provides a format context. + An of new property values. + An representing the given , or null if the object cannot be created. + + + +Returns whether changing a value on this object requires a call to System::ComponentModel::TypeConverter::CreateInstance(System::Collections::IDictionary^) +to create a new value, using the specified context. + + A that provides a format context. + + false if changing a property on this object requires a call to System::ComponentModel::TypeConverter::CreateInstance(System::Collections::IDictionary^) + + + +Converts the given object to the type of this converter, using the specified context and culture information. + + A that provides a format context. + A . If null is passed, the current culture is assumed. + The to convert. + An that represents the converted value. + + + +Converts the given value object to the specified type, using the specified context and culture information. + + A that provides a format context. + A . If null is passed, the current culture is assumed. + The to convert. + A that represents the type you want to convert to. + An that represents the converted value. + + + +Returns whether this converter can convert an object of the given type to the type of this converter, using the specified context. + + A that provides a format context. + A System::Type that represents the type you want to convert from. + + true if this converter can perform the conversion; otherwise, false. + + + +Returns whether this converter can convert the object to the specified type, using the specified context. + + A that provides a format context. + A that represents the type you want to convert to. + + true if this converter can perform the conversion; otherwise, false. + + + +Initializes a new instance of the class. + + + + +Provides a type converter to convert objects to and from various +other representations. + + + + Describes a transform frame in a transformation hierarchy. + D3DXFRAME + + + +Get the number of sound cues in the sound bank. + + + + +Get a value representing the current state of the sound bank. + + + + +Stop playback of a cue. + + The index of the cue to stop. + + that specify how the cue is stopped. + + + +Prepare a cue for playback. + + The index of the cue to prepare. + The time offset into the cue to start from, in milliseconds. + A object containing the newly prepared cue. + + + +Play a cue. + + The index of the cue to play. + The time offset into the cue to start from, in milliseconds. + A object containing the newly playing cue. + + + +Get the properties of a cue. + + The index of the cue to get the properties of. + A object containing the properties of the cue. + + + +Get a sound cue index based on a string that represents the friendly name of the cue. + + A string that contains the friendly name of the cue. + The index for the cue if it exists, otherwise -1. + + + +Instantiate and manipulate XACT sound bank objects. + + IXACT3SoundBank + + + +Get a value representing the current state of the cue. + + + + +Gets a object that contains the properties of the cue instance. + + + + +Stop the cue. + + + that specify how the cue is stopped. + + + +Set the value of a variable. + + The index of the variable. + The new value of the variable. + + + +Play the cue. + + + + +Pause playback of the cue. + + The action to take. If true, playback is paused, if false, playback is resumed. + + + +Get the corresponding index for a variable name string. + + A string that contains the friendly name of the variable. + The index for the variable if it exists, otherwise -1. + + + +Get the value for a variable. + + The index of the variable. + The value that is currently held by the variable. + + + +Gets the properties the current cue variation. + + + + +Gets the properties of a cue that are shared by all instances of the cue. + + + + +The properties of an active cue instance. + + XACT_CUE_INSTANCE_PROPERTIES + + + +Gets the properties of the sound that the active variation references. + + + + +Gets the properties of the currently active variation. + + + + +The properties of the sound variation that is currently active in a cue instance. + + XACT_SOUND_VARIATION_PROPERTIES + + + +Gets an array of tracks contained in this sound. + + + + +Gets the current volume of the sound. + + + + +Gets the current pitch of the sound. + + + + +Gets the priority that is assigned to this sound. + + + + +Gets the category that this sound belongs to. + + + + +The properties for a sound that is referenced by the active variation. + + XACT_SOUND_PROPERTIES + + + +Gets the current loop count on the track. + + + + +Gets the index of the currently active wave variation. + + + + +Gets the number of channels that are required to play the track. + + + + +Gets the number of wave variations in the track. + + + + +Gets the duration of the track in milliseconds. + + + + +The properties of a track in an active sound variation in a cue instance. + + XACT_TRACK_PROPERTIES + + + +Gets a value that indicates if the variation should linger. + + + + +Gets the upper bound of the interactive variable that controls the variation. + + + + +Gets the lower bound of the interactive variable that controls the variation. + + + + +Gets the weight that is assigned to the variation. For non-interactive variations only. + + + + +Gets the index of the variation in the parent variation list. + + + + +The properties for the variation that is currently active in a cue instance. + + XACT_VARIATION_PROPERTIES + + + +Gets a object that represents the final mix format. + + + + +Gets the total number of audio rendering devices that are available in the system. + + + + +Stop a sound category. + + Index of the category to stop, as returned by . + + that specify how the cetegory is stopped. + + + +Shut down the XACT engine and free any resources in use. + + + + +Set the volume of a sound category. + + Index of the category for which to set the volume, as returned by . + The volume level to set. This is a floating point scale where 0.0 means -96db, 1.0 means 0db and 2.0 means +6db. + + + +Set the value of a global variable. + + The index of the global variable. + The new value of the global variable. + + + +Pause a sound category. + + Index of the category to pause, as returned by . + The action to take. If true, playback is paused, if false, playback is resumed. + + + +Initialize the XACT engine using common default settings. + + + + +Gets details about a specific renderer. + + Index of the renderer to retrieve information from. + A new object that contains details of the renderer. + + + +Get the corresponding index for a global variable name string. + + A string that contains the friendly name of the global variable. + The index for the global variable if it exists, otherwise -1. + + + +Get the value for a global variable. + + The index of the global variable. + The value that is currently held by the global variable. + + + +Get the sound category index that corresponds to a friendly name string. + + A string describing the category's friendly name. + The category index for the friendly name if successful, otherwise -1. + + + +Performs periodic work that is required by the XACT engine. Typically this should be called every 30 to 100 milliseconds. + + + + +Initializes a new instance of the class. + + + + +Gets the id of the renderer. + + + + +Gets the name of the renderer. + + + + +Gets a value that is true if this is the default audio renderer, otherwise false. + + + + +Information about a particular renderer. + + XACT_RENDERER_DETAILS + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Gets or sets flags for the voice send target. + + + + +Gets or sets the voice send target. + + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Clones the instance and returns a new object containing the same values. + + A new object containing the same values as the current instance. + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Clones the instance and returns a new object containing the same values. + + A new object containing the same values as the current instance. + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Clones the instance and returns a new object containing the same values. + + A new object containing the same values as the current instance. + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Clones the instance and returns a new object containing the same values. + + A new object containing the same values as the current instance. + + + +Specifies possible speaker combinations for audio devices. + + + + +A combination of speakers will be used that provides 7.1 surround sound output. + + + + +A combination of speakers will be used that provides 5.1 surround sound output. + + + + +A combination of speakers will be used that provides 7.1 sound output. + + + + +A combination of speakers will be used that provides 5.1 sound output. + + + + +A combination of speakers will be used that provides 4.1 sound output. + + + + +A combination of speakers will be used that provides quadrophonic sound output. + + + + +A combination of speakers will be used that provides surround sound output. + + + + +A combination of speakers will be used that provides 2.1 sound output. + + + + +Two or more speakers will be used. + + + + +A single speaker will be used. + + + + +All possible speakers will be used. + + + + +A reserved speaker will be used. + + + + +A top back right speaker will be used. + + + + +A top back center speaker will be used. + + + + +A top back left speaker will be used. + + + + +A top front right speaker will be used. + + + + +A top front center speaker will be used. + + + + +A top front left speaker will be used. + + + + +A top center speaker will be used. + + + + +A right side speaker will be used. + + + + +A left side speaker will be used. + + + + +A back center speaker will be used. + + + + +A front right-of-center speaker will be used. + + + + +A front left-of-center speaker will be used. + + + + +A back right speaker will be used. + + + + +A back left speaker will be used. + + + + +A low frequency speaker will be used. + + + + +A front center speaker will be used. + + + + +A front right speaker will be used. + + + + +A front left speaker will be used. + + + + +Represents possible usage page identifiers for human interface devices. + + + + +Represents magnetic strip reading devices. + + + + +Represents scale pages. + + + + +Represents bar code scanners. + + + + +Represents power page 3. + + + + +Represents power page 2. + + + + +Represents power page 1. + + + + +Represents power page 0. + + + + +Represents monitor page 3. + + + + +Represents monitor page 2. + + + + +Represents monitor page 1. + + + + +Represents monitor page 0. + + + + +Represents medical instruments. + + + + +Represents alphanumeric displays. + + + + +Represents Unicode devices. + + + + +Represents physical interface devices. + + + + +Represents digitizer controls. + + + + +Represents consumer controls. + + + + +Represents telephony controls. + + + + +Represents ordinal controls. + + + + +Represents button controls. + + + + +Represents LED controls. + + + + +Represents keyboard controls. + + + + +Represents games controls. + + + + +Represents sports controls. + + + + +Represents virtual reality controls. + + + + +Represents simulation controls. + + + + +Represents generic desktop controls. + + + + +Represents undefined devices. + + + + +Represents possible usage identifiers for human interface devices. + + + + +Represents a throttle for a simulation device. + + + + +Represents a rudder for a simulation device. + + + + +Represents programmable buttons for a telephony device. + + + + +Represents a keypad telephony device. + + + + +Represents a headset telephony device. + + + + +Represents a handset telephony device. + + + + +Represents message controls for a telephony device. + + + + +Represents an answering machine telephony device. + + + + +Represents a phone telephony device. + + + + +Represents a generic indicator LED. + + + + +Represents an amber LED. + + + + +Represents a green LED. + + + + +Represents a red LED. + + + + +Represents an indicator color LED. + + + + +Represents a fast-blink-off-time LED. + + + + +Represents a fast-blink-on-time LED. + + + + +Represents a slow-blink-off-time LED. + + + + +Represents a slow-blink-on-time LED. + + + + +Represents a flash-on-time LED. + + + + +Represents an indicator off LED. + + + + +Represents an indicator fast blink LED. + + + + +Represents an indicator slow blink LED. + + + + +Represents an indicator flash LED. + + + + +Represents an indicator on LED. + + + + +Represents a nmultimode indicator LED. + + + + +Represents an in-use indicator LED. + + + + +Represents a selected indicator LED. + + + + +Represents an error LED. + + + + +Represents a record LED. + + + + +Represents a pause LED. + + + + +Represents a play LED. + + + + +Represents a fast forward LED. + + + + +Represents a rewind LED. + + + + +Represents a stop LED. + + + + +Represents a reverse LED. + + + + +Represents a forward LED. + + + + +Represents a remote LED. + + + + +Represents a paper jam LED. + + + + +Represents a paper out LED. + + + + +Represents a ready LED. + + + + +Represents a busy LED. + + + + +Represents an offline LED. + + + + +Represents an onlineLED. + + + + +Represents a camera off LED. + + + + +Represents a camera on LED. + + + + +Represents a standby LED. + + + + +Represents a conference LED. + + + + +Represents a call pickup LED. + + + + +Represents a send calls LED. + + + + +Represents a night mode LED. + + + + +Represents a coverage LED. + + + + +Represents a microphone LED. + + + + +Represents a hold LED. + + + + +Represents a headset LED. + + + + +Represents a speaker LED. + + + + +Represents a battery low LED. + + + + +Represents a battery OK LED. + + + + +Represents a battery operation LED. + + + + +Represents a data mode LED. + + + + +Represents a message waiting LED. + + + + +Represents a ring LED. + + + + +Represents an off-the-hook LED. + + + + +Represents a recording format LED. + + + + +Represents a CLV LED. + + + + +Represents a CAV LED. + + + + +Represents a spinning LED. + + + + +Represents a direct sampling rate LED. + + + + +Represents a stereo LED. + + + + +Represents a repeat LED. + + + + +Represents a surround field on LED. + + + + +Represents a sound field on LED. + + + + +Represents an equalizer enable LED. + + + + +Represents a low cut filter LED. + + + + +Represents a high cut filter LED. + + + + +Represents a tone enable LED. + + + + +Represents a mute LED. + + + + +Represents a do not disturb LED. + + + + +Represents a shift LED. + + + + +Represents a power LED. + + + + +Represents a kana LED. + + + + +Represents a compose LED. + + + + +Represents a scroll lock LED. + + + + +Represents a number lock LED. + + + + +Represents a number lock LED. + + + + +Represents a keyboard that provides a print screen key. + + + + +Represents a keyboard that provides a delete key. + + + + +Represents a keyboard that provides an escape key. + + + + +Represents a keyboard that provides a return key. + + + + +Represents a keyboard that provides an F12 key. + + + + +Represents a keyboard that provides an F1 key. + + + + +Represents a keyboard that provides a caps lock key. + + + + +Represents a keyboard that provides a number lock key. + + + + +Represents a keyboard that provides a scroll lock key. + + + + +Represents a keyboard that provides a right GUI key. + + + + +Represents a keyboard that provides a right alt key. + + + + +Represents a keyboard that provides a right shift key. + + + + +Represents a keyboard that provides a right control key. + + + + +Represents a keyboard that provides a left GUI key. + + + + +Represents a keyboard that provides a left alt key. + + + + +Represents a keyboard that provides a left shift key. + + + + +Represents a keyboard that provides a left control key. + + + + +Represents a generic keyboard device. + + + + +Represents a generic keyboard device. + + + + +Represents a device that provides keyboard alpha events. + + + + +Represents a device that provides keyboard alpha events. + + + + +Represents a device that provides keyboard undefined events. + + + + +Represents a device that provides keyboard post fail events. + + + + +Represents a device that provides keyboard rollover events. + + + + +Represents a device that provides keyboard events. + + + + +Represents a device that controls menu down. + + + + +Represents a device that controls menu up. + + + + +Represents a device that controls menu left. + + + + +Represents a device that controls menu right. + + + + +Represents a device that controls menu select. + + + + +Represents a device that controls menu exit. + + + + +Represents a device that controls system help menus. + + + + +Represents a device that controls system application menus. + + + + +Represents a device that controls system menus. + + + + +Represents a device that controls system context menus. + + + + +Represents a device that controls system wake. + + + + +Represents a device that controls system sleep. + + + + +Represents a device that controls system power. + + + + +Represents a device that provides VNO controls. + + + + +Represents a device that provides VBRZ controls. + + + + +Represents a device that provides VBRY controls. + + + + +Represents a device that provides VBRX controls. + + + + +Represents a device that provides VZ controls. + + + + +Represents a device that provides VY controls. + + + + +Represents a device that provides VX controls. + + + + +Represents a device that provides wakeup on motion support. + + + + +Represents a device that maintains a byte count. + + + + +Represents a device that maintains a counted buffer. + + + + +Represents a device that provides a hat switch. + + + + +Represents a wheel device. + + + + +Represents a device that provides a dial. + + + + +Represents a device that provides a slider. + + + + +Represents a device that provides relative Z coordinates. + + + + +Represents a device that provides relative Y coordinates. + + + + +Represents a device that provides relative X coordinates. + + + + +Represents a device that provides Z coordinates. + + + + +Represents a device that provides Y coordinates. + + + + +Represents a device that provides X coordinates. + + + + +Represents a system control device. + + + + +Represents a keypad device. + + + + +Represents a keyboard device. + + + + +Represents a gamepad device. + + + + +Represents a joystick device. + + + + +Represents a mouse device. + + + + +Represents a pointer device. + + + + +Flags that indicate the state of a wave. + + + + +Indicates that wave preparation failed. + + + + +Indicates that the wave is in use. + + + + +The wave is paused. + + + + +The wave is stopped. + + + + +The wave is stopping. + + + + +The wave is playing, but can be paused. + + + + +The wave is prepared, but not yet played. + + + + +The wave is preparing to play. + + + + +The wave is created, but nothing else. + + + + +Flags that indicate the state of a sound bank. + + + + +The wave is prepared for use by a cue instance. + + + + +Indicates that the wave bank is referenced by at least one valid cue instance or other client. + + + + +The format types of the wave bank. + + + + +WMA format. + + + + +ADPCM wave format. + + + + +XMA format. + + + + +PCM wave format. + + + + +Flags that affect how playback is stopped. + + + + +Stops playback immediately. + + + + +Plays a sound to completion, then stops after the release (or tail) phase of a song is played. + + + + +Flags that indicate the state of a sound bank. + + + + +Indicates that the sound bank is referenced by at least one valid cue instance or other client. + + + + +Flags that indicate the state of a cue. + + + + +The cue is paused. + + + + +The cue is stopped. + + + + +The cue is stopping. + + + + +The cue is playing, but can be paused. + + + + +The cue is prepared, but not yet played. + + + + +The cue is preparing to play. + + + + +The cue is created, but nothing else. + + + + +Flags that affect content wave preparation. + + + + +Indicates that the units that are passed in are in samples. + + + + +Indicates that the units that are passed in are measured in milliseconds. + + + + +Initializes a new instance of the class. + + The result code that caused this exception. + + + +Initializes a new instance of the class. + + The message describing the exception. + The exception that caused this exception. + + + +Initializes a new instance of the class. + + The message describing the exception. + + + +Initializes a new instance of the class. + + + + +Represents errors that occur in the XACT3 subsystem. + + + + +Minimum ratio of wet (processed) signal to dry (unprocessed) signal. + + + + +Maximum ratio of wet (processed) signal to dry (unprocessed) signal. + + + + +Default ratio of wet (processed) signal to dry (unprocessed) signal. + + + + +Triangle waveform shape of the LFO. + + + + +Sine waveform shape of the LFO. + + + + +Default waveform shape of the LFO. By default, the waveform is a sine. + + + + +Zero phase differential between left and right LFOs. + + + + +Negative 90 phase differential between left and right LFOs. + + + + +Negative 180 phase differential between left and right LFOs. + + + + +Minimum phase differential between left and right LFOs. + + + + +Maximum phase differential between left and right LFOs. + + + + +Default phase differential between left and right LFOs. The default value is Phase90. + + + + +Positive 90 phase differential between left and right LFOs. + + + + +Positive 180 phase differential between left and right LFOs. + + + + +Minimum frequency of the LFO. + + + + +Maximum frequency of the LFO. + + + + +Default frequency of the LFO. The default value is 1.1. + + + + +Minimum percentage of output signal to feed back into the effect's input. + + + + +Maximum percentage of output signal to feed back into the effect's input. + + + + +Default percentage of output signal to feed back into the effect's input. The default value is 25. + + + + +Minimum percentage by which the delay time is modulated by the low-frequency oscillator, in hundredths of a percentage point. + + + + +Maximum percentage by which the delay time is modulated by the low-frequency oscillator, in hundredths of a percentage point. + + + + +Default percentage by which the delay time is modulated by the low-frequency oscillator, in hundredths of a percentage point. The default value is 10. + + + + +Minimum number of milliseconds the input is delayed before it is played back. + + + + +Maximum number of milliseconds the input is delayed before it is played back. + + + + +Default number of milliseconds the input is delayed before it is played back. The default value is 50. + + + + +Ratio of wet (processed) signal to dry (unprocessed) signal. + + + + +Waveform shape of the LFO. + + + + +Phase differential between left and right LFOs. + + + + +Frequency of the LFO. + + + + +Percentage of output signal to feed back into the effect's input. + + + + +Percentage by which the delay time is modulated by the low-frequency oscillator, in hundredths of a percentage point. + + + + +Number of milliseconds the input is delayed before it is played back. + + + + +The SoundEffectChorus object is used to set and retrieve effect parameters on a buffer that supports chorus. + + IDirectSoundFXChorus + + + +Predefined audio volume attenuation values. + + + + +Represents the original, unadjusted volume of the stream. + + + + +Indicates an audio volume attenuated by 100 dB, which, for all practical purposes, is silence. + + + + +Flags specifying the play behavior of the buffer. + + + + +If the hardware has no available voices, a currently playing buffer will be stopped to make room for the new buffer. +The buffer prematurely terminated will be the one with the lowest priority as set by the priority parameter passed to SecondarySoundBuffer::Play for the buffer. + + + + +If the hardware has no available voices, a currently playing buffer will be stopped to make room for the new buffer. +The buffer prematurely terminated will be selected from buffers that have the buffer's BufferFlags::Mute3DAtMaxDistance flag set and are beyond their maximum distance. If there are no such buffers, the method fails. + + + + +If the hardware has no available voices, a currently playing nonlooping buffer will be stopped to make room for the new buffer. +The buffer prematurely terminated is the one with the least time left to play. + + + + +Play this voice in a software buffer only. + + + + +Play this voice in a hardware buffer only. + + + + +Play continues until explicitly stopped. This flag must be set when playing a primary buffer. + + + + + + + +Values that specify a standard reverberation preset. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Various speaker configurations. + + + + +The speakers are directed over an arc of 180 degrees. + + + + +The speakers are directed over an arc of 20 degrees. + + + + +The speakers are directed over an arc of 10 degrees. + + + + +The speakers are directed over an arc of 5 degrees. + + + + +same as SevenPointOne + + + + +correct 7.1 Home Theater setting + + + + +obsolete 7.1 setting + + + + +obsolete 5.1 setting + + + + +The audio is played through surround speakers. +This specifies a four-channel PCM format in which the channels are +mapped to left, right, center, and back speakers. + + + + +The audio is played through stereo speakers (default value). + + + + +The audio is played through quadraphonic speakers. + + + + +The audio is played through a single speaker. + + + + +The audio is played through (stereo) headphones. + + + + +The audio is passed through directly, without being configured for +speakers. This specifies a speakerless configuration in which the +channels in the playback stream from the application are output +directly to the audio adapter without being interpreted as speaker +positions. However, the input stream can still be modified by +sample-rate conversion, attenuation, filtering, and other types of +processing that require no assumptions about the assignment of speakers +to channels. + + + + +Indicates the result of the attempt to set an effect in the buffer. + + + + +Effect is not registered on the system, and the method failed as a result. + + + + +No effect was created because resources weren't available. + + + + +Effect has not yet been assigned to hardware or software. +This value is returned if the buffer was created with the BufferFlags::Defer flag in Flags. + + + + +Effect is instantiated in software. + + + + +Effect is instantiated in hardware. + + + + +Effect is available but was not created because one of the other effects requested could not be created. +If any of the effects requested cannot be created, none of them are, and the call fails. + + + + +The 3-D sound processing mode to be set. + + + + +Processing of 3D sound is disabled. The sound seems to originate from the center of the listener's head. + + + + +Sound parameters (position, velocity, and orientation) are relative to the listener's parameters. +In this mode, the absolute parameters of the sound are updated automatically as the listener's parameters change, so that the relative parameters remain constant. + + + + +Normal processing. This is the default mode. + + + + +Various sound buffer locking flags. + + + + +Lock the entire buffer. + + + + +Start the lock at the write cursor. + + + + +Values specifying the cooperative level of the device. + + + + +Sets the write-primary level. The application has write access to the primary buffer. No secondary buffers can be played. + + + + +Sets the priority level. + + + + +Sets the normal level. +This level has the smoothest multitasking and resource-sharing behavior, +but because it does not allow the primary buffer format to change, output is restricted to the default 8-bit format. + + + + +Return values for Capture effects. + + + + +Effect is instantiated in software. + + + + +Effect is instantiated in hardware. + + + + +Flags specifying the status of the buffer. + + + + +The buffer was prematurely terminated by the voice manager and is not playing. +Set only for buffers created with the BufferFlags::Defer flag. + + + + +The buffer is playing in software. Set only for buffers created with the BufferFlags::Defer flag. + + + + +The buffer is playing in hardware. Set only for buffers created with the BufferFlags::Defer flag. + + + + +The buffer is being looped. If this value is not set, the buffer will stop when it reaches the end of the sound data. +This value is returned only in combination with BufferStatus::Playing. + + + + +The buffer is lost and must be restored before it can be played or locked. + + + + +The buffer is playing. If this value is not set, the buffer is stopped. + + + + +Flags specifying the capabilities of the buffer. + + + + +The buffer can be assigned to a hardware or software resource at play time. + + + + +The sound is reduced to silence at the maximum distance. +The buffer will stop playing when the maximum distance is exceeded, so that processor time is not wasted. +Applies only to software buffers. + + + + +The buffer uses the new behavior of the play cursor when retrieving the current position. + + + + +The buffer is a global sound buffer. +With this flag set, an application using DirectSound can continue to play its buffers if the user switches focus to another application, +even if the new application uses DirectSound. + + + + +The buffer has sticky focus. +If the user switches to another application not using DirectSound, the buffer is still audible. +However, if the user switches to another DirectSound application, the buffer is muted. + + + + +The buffer supports effects processing. + + + + +The buffer has position notification capability. + + + + +The buffer has volume control capability. + + + + +The buffer has pan control capability. + + + + +The buffer has frequency control capability. + + + + +The buffer has 3D control capability. + + + + +The buffer is in software memory and uses software mixing. + + + + +The buffer uses hardware mixing. + + + + +The buffer is in on-board hardware memory. + + + + +The buffer is a primary buffer. + + + + +Values indicating the acoustic echo cancellation operation mode. + + + + +The effect is running in full duplex mode. + + + + +The effect is running in half duplex mode. Not presently supported. + + + + +The effect is passing capture and render data through without modifying it. + + + + +Initializes a new instance of the object to describe the +input-buffer data for the input-assembler stage. + + ID3D10Device::CreateInputLayout + + + +Returns a value that can be used for the offset parameter of an InputElement to indicate that the element +should be aligned directly after the previous element, including any packing if neccessary. + + A value used to align input elements. + D3D10_APPEND_ALIGNED_ELEMENT + + + +Returns a value indicating whether the two VertexBufferBindings are equivalent. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Returns a value indicating whether this instance is equal to the specified object. + + A to compare with this instance. + + true if has the same value as this instance; otherwise, false. + + + +Returns a value indicating whether this instance is equal to the specified object. + + An object to compare with this instance. + + true if has the same value as this instance; otherwise, false. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two VertexBufferBindings. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two VertexBufferBindings. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Constructs a new VertexBufferBinding object. + + The buffer being bound. + The stride between vertex element (in bytes). + The offset to the first vertex (in bytes). + + + +Gets or sets the offset from the start of the buffer of the first vertex to use (in bytes). + + + + +Gets or sets the stride between vertex elements in the buffer (in bytes). + + + + +Gets or sets the buffer being bound. + + + + +Properties defining the way a buffer (containing vertex data) is bound +to the pipeline for rendering. + + + + +Unmaps the buffer. + + + + +Maps the buffer, providing CPU access to its contents. + + The IO operations to enable on the CPU. + Flags indicating how the CPU should respond when the GPU +is busy. + A data stream containing the mapped data. This data stream is invalidated +when the buffer is unmapped. + + + +Constructs a new Buffer object. + + The device to associate the buffer with. + Initial data to fill the buffer with on creation. + The size, in bytes, of the buffer. + Identifies the usage pattern for the buffer. + Specifies how the buffer will be bound to the pipeline. + Specifies how the buffer will be accessible from the CPU. + Specifies miscellaneous resource options. + + + +Constructs a new Buffer object. + + The device to associate the buffer with. + The size, in bytes, of the buffer. + Identifies the usage pattern for the buffer. + Specifies how the buffer will be bound to the pipeline. + Specifies how the buffer will be accessible from the CPU. + Specifies miscellaneous resource options. + + + +Constructs a new Buffer object. + + The device to associate the buffer with. + Initial data to fill the buffer with on creation. + The description of the buffer. + + + +Constructs a new Buffer object. + + The device to associate the buffer with. + The description of the buffer. + + + +Gets the buffer's description. + + + + +A buffer resource. A buffer is a sequential collection of typed data elements, +typically used to contain vertex, index or shader constant data. + + ID3D10Buffer + + + +Calculates a subresource index. + + The index of the desired mip slice. + The index of the desired array slice. + The total number of mip levels. + The subresource index (equivalent to mipSlice + (arraySlice * mipLevels)). + + + +Gets the resource's dimension (type). + + + + +Gets or sets the resource's eviction priority. + + + + +Gets a swap chain back buffer. + + The type of the buffer. + The swap chain to get the buffer from. + The index of the desired buffer. + The buffer interface, or null on failure. + + + +Returns a DXGI Surface for this resource. + + The buffer interface, or null on failure. + + + +A resource object. + + ID3D10Resource + + + +Returns a value indicating whether the two ResourceRegions are equivalent. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Returns a value indicating whether this instance is equal to the specified object. + + A to compare with this instance. + + true if has the same value as this instance; otherwise, false. + + + +Returns a value indicating whether this instance is equal to the specified object. + + An object to compare with this instance. + + true if has the same value as this instance; otherwise, false. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two ResourceRegions. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two ResourceRegions. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Gets or sets the back boundary of the region. + + + + +Gets or sets the bottom boundary of the region. + + + + +Gets or sets the right boundary of the region. + + + + +Gets or sets the front boundary of the region. + + + + +Gets or sets the top boundary of the region. + + + + +Gets or sets the left boundary of the region. + + + + +Represents a 3D region of a resource's data. + + D3D10_BOX + + + +Relinquishes access to the surface data. + + A object describing the result of the operation. + + + +Acquires access to the surface data. + + Flags specifying CPU access permissions. + A for accessing the mapped data, or null on failure.. + + + +Gets the surface's description. + + + + +Gets a swap chain back buffer. + + The swap chain to get the buffer from. + The index of the desired buffer. + The buffer interface, or null on failure. + + + +A implements methods for image-data objects. + + IDXGISurface + + + +Presents a rendered image to the attached output. + + Specified how to synchronize the presentation with the vertical blank interrupt. 0 +indicates that presentation should occur immediately, without synchronization. Any other value indicates that +presentation should be synchonized with the specified next vertical blank. + Flags controlling presentation behavior. + A object describing the result of the operation. + + + +Changes the output target's size. + + Properties of the new output display mode. + A object describing the result of the operation. + + + +Changes the swap chain's back buffer size, format, and count. + + The new back buffer count. + The new back buffer width. + The new back buffer height. + The new back buffer format. + Flags controlling swap chain functionality. + A object describing the result of the operation. + + + +Sets the full screen state. + + Set to true for full screen mode, false for windowed mode. + If the current display mode is full screen, this parameter must be the +output containing the swap chain; otherwise, this parameter is ignored. If you set this parameter +to null, DXGI will choose the output based on the swap-chain's device and the output window's placement. + A object describing the result of the operation. + + + +Gets the full screen state. + + Receives a value indicating if the swap chain is running in full screen mode. + Receives the full screen output if the swap chain is in full screen mode. Otherwise ignored. + A object describing the result of the operation. + + + +Releases all resources used by the . + + + + +Initializes a new instance of the class. + + The factory used to create the swap chain. + The device used to present images to the swap chain. + Swap chain properties. + + + +Gets or sets a value indicating whether the swap chain is rendering in full screen mode. + + + + +Gets the output (the display monitor) that contains the majority of the client area of the target window. + + + + +Gets the number of times this swap chain's Present method has been called. + + + + +Get performance statistics about the last render frame. + + + + +Gets the swap chain's description. + + + + +Holds one or more surfaces that store rendered data prior to presenting +that data to an output. + + IDXGISwapChain + + + +Gets or sets a friendly debug name for the object. This name is used in debug messages +as well as in the PIX object browser. + + + + +Gets the device the object is bound to. + + + + +An object that is bound to a Device. + + ID3D10DeviceChild + + + +Gets the number of currently active instances of this cue. + + + + +Gets the maximum number of instances that are allowed for this cue. + + + + +Gets the number of sound variations for this cue. + + + + +Gets the index of the variable to control the cue. This is only relevant for interactive audio cues. + + + + +Gets a value that is true if the cue is an interactive audio cue, otherwise false. + + + + +Gets the friendly name of the cue. + + + + +The instance independent properties of a cue. + + XACT_CUE_PROPERTIES + + + +Constructs a new exception object. + + The result code that caused this exception. + + + +Constructs a new exception object. + + The message describing the exception. + The exception that caused this exception. + + + +Constructs a new exception object. + + The message describing the exception. + + + +Constructs a new exception object. + + + + +Represents errors that occur in the Direct2D subsystem. + + + + +Get presentation performance statistics. + + + + +Retrieves the display mode's spatial resolution, color resolution, refresh frequency, and rotation settings. + + Receives the rotation setting of the adapter. + Extended display mode information about the adapter. + IDirect3DSwapChain9Ex::GetDisplayModeEx + + + +Retrieves the display mode's spatial resolution, color resolution, and refresh frequency. + + Extended display mode information about the adapter. + IDirect3DSwapChain9Ex::GetDisplayModeEx + + + +Provides extended support for swap chains in Direct3D9Ex. + + IDirect3DSwapChain9Ex + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Reserved. Always returns 0. + + + + +Gets a value equivalent to that returned by the unmanaged function QueryPerformanceCounter. + + + + +Gets the number of times a vertical blank has occured. + + + + +Gets the number of times a vertical blank has occured. + + + + +Gets the number of times an image has been presented to an output. + + + + +Provides basic rendering statistics. + + D3DPRESENTSTATS + + + Applications use the methods of the SwapChain9 class to manipulate a swap chain. + IDirect3DSwapChain9 + + + +Using a key, releases exclusive rendering access to a shared resource. + + A value that indicates which device to give access to. This method will succeed when the device that currently owns the surface +calls the KeyedMutex.ReleaseSync method using the same value. This key can be any arbitrary value. + A object describing the result of the operation. + + + +Using a key, acquires exclusive rendering access to a shared resource. + + A value that indicates which device to give access to. This method will succeed when the device that currently owns the surface +calls the KeyedMutex.Release method using the same value. This key can be any arbitrary value. + The time-out interval, in milliseconds. This method will return if the interval elapses, and the keyed mutex +has not been released using the specified key. If this value is set to zero, the Acquire method will test to see if the keyed mutex has been +released and returns immediately. If this value is set to the maximum integral value, the time-out interval will never elapse. + A object describing the result of the operation. + + + +Initializes a new instance of the class. + + The COM object implementing the IDXGIKeyedMutex interface. + + + +Represents a keyed mutex, which allows exclusive access to a shared resource that is used by multiple devices. + + IDXGIKeyedMutex + + + +Gets the device to which the object is bound. + + + + +An object that is bound to a Device. + + IDXGIDeviceSubObject + + + Applications use the methods of the SkinInfo class to manipulate bone matrices, +which are used to skin vertex data for animation. + ID3DXSkinInfo + + + Describes a subset of the mesh that has the same attribute and bone combination. + D3DXBONECOMBINATION + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Gets or sets the basis of the patch. + + + + +Gets or sets the degree of the patch. + + + + +Gets or sets the patch type. + + + + Structure that contains the attributes of a patch mesh. + D3DXPATCHINFO + + + +Provides an interface to manipulate mesh objects. + + ID3DXMesh + + + Specifies mesh weight attributes. + D3DXATTRIBUTEWEIGHTS + + + Contains information about the placement and orientation of a glyph in a character cell. + GLYPHMETRICSFLOAT + + + Effect default parameters. + D3DXEFFECTDEFAULT + + + +Provides an interface to manipulate mesh and progressive mesh objects. + + ID3DXBaseMesh + + + Stores an attribute table entry. + D3DXATTRIBUTERANGE + + + +Returns the instance of the Direct3D object that created this device. + + + + +Gets or sets the currently active pixel shader. + + + + +Gets or sets the currently active vertex shader. + + + + +Gets or sets the current index data. + + + + +Gets or sets the current depth-stencil surface. + + + + +Gets the pixel shader version. + + + + +Gets the vertex shader version. + + + + +Gets the current driver version. + + + + +Gets or sets the index of the current texture palette. + + An index into the list of possible texture palettes. + + + +Gets or sets the current N-patch mode segments. + + The number of subdivision segments. If the value is less than 1.0, N-patches are disabled. + + + +Gets the number of implicitly created swap chains. + + + + +Gets or sets a value indicating whether the cursor should be shown. + + + + +Gets an estimate of the amount of available texture memory. + + The amount of available texture memory, rounded to the nearest MB. + + + +Gets or sets the current scissor rectangle. + + + + +Gets or sets the currently active viewport. + + + + +Gets or sets the current material properties used by the device. + + + + +Gets or sets the vertex processing mode. + + + true if the device is using software vertex processing; otherwise, false. + + + +Gets or sets the current vertex declaration. + + A object describing the result of the operation. + + + +Gets or sets the current fixed-function vertex format. + + + + +Gets the current clip status. + + + + +Gets the parameters used to create the device. + + + + +Gets the capabilities of the rendering device. + + + + +Unbinds a previously bound vertex buffer as a render target. + + The vertex stream that should be unbound. + A object describing the result of the operation. + This functionality is only available on ATI cards which support render to vertex buffer. + + + +Binds a render target to a vertex stream. + + The sampler that will be used to bind the render target. + The target of the binding operation. + The stream index that will be bound to the texture. + The stride of the vertex data. + A vertex buffer that is used to fill a required parameter in . + A object describing the result of the operation. + This functionality is only available on ATI cards which support render to vertex buffer. + + + +Enables or disables render-to-vertex-buffer mode. + + + true to enable render-to-vertex-buffer mode, false to disable it. + A object describing the result of the operation. + This functionality is only available on ATI cards which support render to vertex buffer. + + + +Fills a rectangular area of a surface with the specified color. + + The surface that will be filled. + The color used for filling. + A object describing the result of the operation. + IDirect3DDevice9::ColorFill + + + +Fills a rectangular area of a surface with the specified color. + + The surface that will be filled. + The area on the surface that will be filled. + The color used for filling. + A object describing the result of the operation. + IDirect3DDevice9::ColorFill + + + +Updates the dirty portions of a texture. + + The source texture. + The destination texture. + A object describing the result of the operation. + IDirect3DDevice9::UpdateTexture + + + +Copies rectangular subsets of pixels from one surface to another. + + The source surface. + The destination surface. + A object describing the result of the operation. + IDirect3DDevice9::UpdateSurface + + + +Copies rectangular subsets of pixels from one surface to another. + + The source surface. + The area on the source surface that is to be copied. + The destination surface. + The location on the destination surface where data will be copied. + A object describing the result of the operation. + IDirect3DDevice9::UpdateSurface + + + +Copys the contents of the source surface to the destination surface. + + The source surface. + The destination surface. + The filter that will be used when the data is being stretched. + A object describing the result of the operation. + IDirect3DDevice9::StretchRect + + + +Copys the contents of the source surface to the destination surface. + + The source surface. + The area on the source surface that is to be copied. + The destination surface. + The area on the destination surface where data will be copied. + The filter that will be used when the data is being stretched. + A object describing the result of the operation. + IDirect3DDevice9::StretchRect + + + +Frees a cached high-order patch. + + Handle of the cached high-order patch to delete. + A object describing the result of the operation. + IDirect3DDevice9::DeletePatch + + + +Draws a rectangular patch using the currently set streams. + + Handle to the rectangular patch to draw. + An array of four floating point values that identify the number of segments on each edge of the rectangular patch. + A object describing the result of the operation. + IDirect3DDevice9::DrawRectPatch + + + +Draws a rectangular patch using the currently set streams. + + Handle to the rectangular patch to draw. + An array of four floating point values that identify the number of segments on each edge of the rectangular patch. + Information on how to draw the rectangular patch. + A object describing the result of the operation. + IDirect3DDevice9::DrawRectPatch + + + +Draws a triangular patch using the currently set streams. + + Handle to the triangular patch to draw. + An array of three floating point values that identify the number of segments on each edge of the triangular patch. + A object describing the result of the operation. + IDirect3DDevice9::DrawTriPatch + + + +Draws a triangular patch using the currently set streams. + + Handle to the triangular patch to draw. + An array of three floating point values that identify the number of segments on each edge of the triangular patch. + Information on how to draw the triangular patch. + A object describing the result of the operation. + IDirect3DDevice9::DrawTriPatch + + + +Renders the specified geometric primitive using user-supplied data. + + The type of the data contained in the index data. + The type of the data contained in the vertex data. + Specifies the type of primitive to render. + Index of the first index in the array to use. + Index of the first vertex in the array to use. + Minimum vertex index for vertices used during this call. + The number of vertices to render. + The number of primitives to render. The number of vertices used is a function of the primitive count and the primitive type. + User-supplied index data. + The format of the supplied index data. + User-supplied vertex data. + The number of bytes of data for each vertex. + A object describing the result of the operation. + IDirect3DDevice9::DrawIndexedPrimitiveUP + + + +Renders the specified geometric primitive using user-supplied data. + + The type of the data contained in the index data. + The type of the data contained in the vertex data. + Specifies the type of primitive to render. + Index of the first index in the array to use. + Minimum vertex index for vertices used during this call. + The number of vertices to render. + The number of primitives to render. The number of vertices used is a function of the primitive count and the primitive type. + User-supplied index data. + The format of the supplied index data. + User-supplied vertex data. + The number of bytes of data for each vertex. + A object describing the result of the operation. + IDirect3DDevice9::DrawIndexedPrimitiveUP + + + +Renders the specified geometric primitive using user-supplied data. + + The type of the data contained in the index data. + The type of the data contained in the vertex data. + Specifies the type of primitive to render. + Minimum vertex index for vertices used during this call. + The number of vertices to render. + The number of primitives to render. The number of vertices used is a function of the primitive count and the primitive type. + User-supplied index data. + The format of the supplied index data. + User-supplied vertex data. + The number of bytes of data for each vertex. + A object describing the result of the operation. + IDirect3DDevice9::DrawIndexedPrimitiveUP + + + +Renders non-indexed geometric primitives using user-supplied data. + + The type of the user-supplied vertices. + Specifies the type of primitive to render. + Index of the first vertex in the array to use. + The number of primitives to render. The number of vertices used is a function of the primitive count and the primitive type. + User-supplied vertex data. + A object describing the result of the operation. + IDirect3DDevice9::DrawPrimitiveUP + + + +Renders non-indexed geometric primitives using user-supplied data. + + The type of the user-supplied vertices. + Specifies the type of primitive to render. + The number of primitives to render. The number of vertices used is a function of the primitive count and the primitive type. + User-supplied vertex data. + A object describing the result of the operation. + IDirect3DDevice9::DrawPrimitiveUP + + + +Renders the specified geometric primitive using data from the current input streams. + + Specifies the type of primitive to render. + Offset from the start of the vertex buffer to the first vertex. + Minimum vertex index for vertices used during this call. This is a zero-based index relative to . + The number of vertices to render. + Index of the first index to use when accessing the vertex buffer. + The number of primitives to render. The number of vertices used is a function of the primitive count and the primitive type. + A object describing the result of the operation. + IDirect3DDevice9::DrawIndexedPrimitive + + + +Renders non-indexed geometric primitives using data from the current input streams. + + Specifies the type of primitive to render. + Index of the first vertex to use. + The number of primitives to render. The number of vertices used is a function of the primitive count and the primitive type. + A object describing the result of the operation. + IDirect3DDevice9::DrawPrimitive + + + +Applies the vertex processing defined by the vertex shader to the set of input data streams, +generating a single stream of interleaved vertex data to the destination vertex buffer. + + Index of the first vertex to load. + Index of the first vertex in the destination vertex buffer into which the results are placed. + Number of vertices to process. + The destination for the output vertex stream. + The output vertex declaration. + Vertex processing options. + A object describing the result of the operation. + IDirect3DDevice9::ProcessVertices + + + +Signals Direct3D to stop recording a device-state block. + + The recorded device-state block. + IDirect3DDevice9::EndStateBlock + + + +Signals Direct3D to begin recording a device-state block. + + A object describing the result of the operation. + IDirect3DDevice9::BeginStateBlock + + + +Sets a vertex shader constant. + + Register number that will contain the first constant value. + The constant data. + A object describing the result of the operation. + IDirect3DDevice9::SetPixelShaderConstantF + + + +Sets a pixel shader constant. + + Register number that will contain the first constant value. + The constant data. + The offset into the data where constants will start being retrieved. + The number of four constant vectors to set. + A object describing the result of the operation. + IDirect3DDevice9::SetPixelShaderConstantF + + + +Sets a pixel shader constant. + + Register number that will contain the first constant value. + The constant data. + A object describing the result of the operation. + IDirect3DDevice9::SetPixelShaderConstantF + + + +Sets a pixel shader constant. + + Register number that will contain the first constant value. + The constant data. + The number of matrices to set. + A object describing the result of the operation. + IDirect3DDevice9::SetPixelShaderConstantF + + + +Sets a pixel shader constant. + + Register number that will contain the first constant value. + The constant data. + A object describing the result of the operation. + IDirect3DDevice9::SetPixelShaderConstantF + + + +Sets a pixel shader constant. + + Register number that will contain the first constant value. + The constant data. + A object describing the result of the operation. + IDirect3DDevice9::SetPixelShaderConstantI + + + +Sets a pixel shader constant. + + Register number that will contain the first constant value. + The constant data. + A object describing the result of the operation. + IDirect3DDevice9::SetPixelShaderConstantF + + + +Sets a pixel shader constant. + + Register number that will contain the first constant value. + The constant data. + A object describing the result of the operation. + IDirect3DDevice9::SetPixelShaderConstantF + + + +Sets a pixel shader constant. + + Register number that will contain the first constant value. + The constant data. + A object describing the result of the operation. + IDirect3DDevice9::SetPixelShaderConstantB + + + +Sets a pixel shader constant. + + Register number that will contain the first constant value. + The constant data. + The offset into the data where constants will start being retrieved. + The number of four constant vectors to set. + A object describing the result of the operation. + IDirect3DDevice9::SetPixelShaderConstantI + + + +Sets a pixel shader constant. + + Register number that will contain the first constant value. + The constant data. + The offset into the data where constants will start being retrieved. + The number of four constant vectors to set. + A object describing the result of the operation. + IDirect3DDevice9::SetPixelShaderConstantF + + + +Sets a pixel shader constant. + + Register number that will contain the first constant value. + The constant data. + The offset into the data where constants will start being retrieved. + The number of four constant vectors to set. + A object describing the result of the operation. + IDirect3DDevice9::SetPixelShaderConstantF + + + +Sets a pixel shader constant. + + Register number that will contain the first constant value. + The constant data. + The offset into the data where constants will start being retrieved. + The number of constants to set. + A object describing the result of the operation. + IDirect3DDevice9::SetPixelShaderConstantB + + + +Sets a vertex shader constant. + + Register number that will contain the first constant value. + The constant data. + A object describing the result of the operation. + IDirect3DDevice9::SetVertexShaderConstantF + + + +Sets a vertex shader constant. + + Register number that will contain the first constant value. + The constant data. + The offset into the data where constants will start being retrieved. + The number of four constant vectors to set. + A object describing the result of the operation. + IDirect3DDevice9::SetVertexShaderConstantF + + + +Sets a vertex shader constant. + + Register number that will contain the first constant value. + A pointer to the constant data. + A object describing the result of the operation. + IDirect3DDevice9::SetVertexShaderConstantF + + + +Sets a vertex shader constant. + + Register number that will contain the first constant value. + A pointer to the constant data. + The number of matrices to set. + A object describing the result of the operation. + IDirect3DDevice9::SetVertexShaderConstantF + + + +Sets a vertex shader constant. + + Register number that will contain the first constant value. + The constant data. + A object describing the result of the operation. + IDirect3DDevice9::SetVertexShaderConstantF + + + +Sets a vertex shader constant. + + Register number that will contain the first constant value. + The constant data. + A object describing the result of the operation. + IDirect3DDevice9::SetVertexShaderConstantI + + + +Sets a vertex shader constant. + + Register number that will contain the first constant value. + The constant data. + A object describing the result of the operation. + IDirect3DDevice9::SetVertexShaderConstantF + + + +Sets a vertex shader constant. + + Register number that will contain the first constant value. + The constant data. + A object describing the result of the operation. + IDirect3DDevice9::SetVertexShaderConstantF + + + +Sets a vertex shader constant. + + Register number that will contain the first constant value. + The constant data. + A object describing the result of the operation. + IDirect3DDevice9::SetVertexShaderConstantB + + + +Sets a vertex shader constant. + + Register number that will contain the first constant value. + The constant data. + The offset into the data where constants will start being retrieved. + The number of four constant vectors to set. + A object describing the result of the operation. + IDirect3DDevice9::SetVertexShaderConstantI + + + +Sets a vertex shader constant. + + Register number that will contain the first constant value. + The constant data. + The offset into the data where constants will start being retrieved. + The number of four constant vectors to set. + A object describing the result of the operation. + IDirect3DDevice9::SetVertexShaderConstantF + + + +Sets a vertex shader constant. + + Register number that will contain the first constant value. + The constant data. + The offset into the data where constants will start being retrieved. + The number of four constant vectors to set. + A object describing the result of the operation. + IDirect3DDevice9::SetVertexShaderConstantF + + + +Sets a vertex shader constant. + + Register number that will contain the first constant value. + The constant data. + The offset into the data where constants will start being retrieved. + The number of constants to set. + A object describing the result of the operation. + IDirect3DDevice9::SetVertexShaderConstantB + + + +Gets an integer pixel shader constant. + + The register number containing the first constant value. + Number of values in the constant. + An array of integer constants. + IDirect3DDevice9::GetPixelShaderConstantI + + + +Gets a floating point pixel shader constant. + + The register number containing the first constant value. + Number of values in the constant. + An array of floating point constants. + IDirect3DDevice9::GetPixelShaderConstantF + + + +Gets a boolean pixel shader constant. + + The register number containing the first constant value. + Number of values in the constant. + An array of boolean constants. + IDirect3DDevice9::GetPixelShaderConstantB + + + +Gets an integer vertex shader constant. + + The register number containing the first constant value. + Number of values in the constant. + An array of integer constants. + IDirect3DDevice9::GetVertexShaderConstantI + + + +Gets a floating point vertex shader constant. + + The register number containing the first constant value. + Number of values in the constant. + An array of floating point constants. + IDirect3DDevice9::GetVertexShaderConstantF + + + +Gets a boolean vertex shader constant. + + The register number containing the first constant value. + Number of values in the constant. + An array of boolean constants. + IDirect3DDevice9::GetVertexShaderConstantB + + + +Sets the current user-defined clip plane. + + The index of the clipping plane to set. + The new clipping plane data. + A object describing the result of the operation. + IDirect3DDevice9::SetClipPlane + + + +This method allows the use of GDI dialog boxes in full-screen mode applications. + + + true to enable GDI dialogs, false to disable them. + A object describing the result of the operation. + IDirect3DDevice9::SetDialogBoxMode + + + +Sets a new render target for the device. + + Index of the render target. + The new render target. + A object describing the result of the operation. + IDirect3DDevice9::SetRenderTarget + + + +Assigns a texture to a stage. + + Zero-based sampler index. + The texture that is to be bound. + A object describing the result of the operation. + IDirect3DDevice9::SetTexture + + + +Resets the stream source frequency divider to its initial state. + + The stream index. + A object describing the result of the operation. + IDirect3DDevice9::SetStreamSourceFreq + + + +Sets the stream source frequency divider value. This may be used to draw several instances of geometry. + + The stream index. + The new frequency divider. + The type of data being set. + A object describing the result of the operation. + IDirect3DDevice9::SetStreamSourceFreq + + + +Binds a vertex buffer to a device data stream. + + The stream index to bind. + The stream data to bind. + Offset from the beginning of the stream to the beginning of the vertex data, in bytes. + The stride of the vertex data. + A object describing the result of the operation. + IDirect3DDevice9::SetStreamSource + + + +Multiplies a device's world, view, or projection matrix by the specified matrix. + + The transformation state whose matrix is to be modified. + The matrix to multiply with the device transform. + A object describing the result of the operation. + IDirect3DDevice9::MultiplyTransform + + + +Retrieves a matrix describing the transformation state. + + The device state variable that is being retrieved. + The transformation matrix for the specified state. + IDirect3DDevice9::GetTransform + + + +Retrieves a matrix describing the transformation state. + + The device state variable that is being retrieved. + The transformation matrix for the specified state. + IDirect3DDevice9::GetTransform + + + +Sets a single device transformation state. + + The transformation state which is to be set. + The new value for the transformation state. + A object describing the result of the operation. + IDirect3DDevice9::SetTransform + + + +Sets a single device transformation state. + + The transformation state which is to be set. + The new value for the transformation state. + A object describing the result of the operation. + IDirect3DDevice9::SetTransform + + + +Sets a single device transformation state. + + The transformation state which is to be set. + The new value for the transformation state. + A object describing the result of the operation. + IDirect3DDevice9::SetTransform + + + +Sets a single device transformation state. + + The transformation state which is to be set. + The new value for the transformation state. + A object describing the result of the operation. + IDirect3DDevice9::SetTransform + + + +Sets properties for the cursor. + + The offset (in pixels) that marks the center of the cursor. + The image data used to draw the cursor. + A object describing the result of the operation. + IDirect3DDevice9::SetCursorProperties + + + +Sets properties for the cursor. + + X-coordinate offset (in pixels) that marks the center of the cursor. + Y-coordinate offset (in pixels) that marks the center of the cursor. + The image data used to draw the cursor. + A object describing the result of the operation. + IDirect3DDevice9::SetCursorProperties + + + +Sets the current cursor position. + + The position of the cursor, in virtual desktop coordinates. + + true to force the cursor to update every time the monitor refreshes; otherwise, false to have the cursor update whenever is called. + IDirect3DDevice9::SetCursorPosition + + + +Sets the current cursor position. + + The new X-position of the cursor, in virtual desktop coordinates. + The new Y-position of the cursor, in virtual desktop coordinates. + + true to force the cursor to update every time the monitor refreshes; otherwise, false to have the cursor update whenever is called. + IDirect3DDevice9::SetCursorPosition + + + +Sets a Windows Forms cursor as the device cursor. + + The cursor to set. + + true to add a watermark to the cursor; otherwise, false. + A object describing the result of the operation. + IDirect3DDevice9::SetCursor + + + +Retrievs a set of lighting properties that are used by the device. + + Index of the light to be retrieved. + A structure describing the requested light. + IDirect3DDevice9::GetLight + + + +Assigns a set of lighting properties to the device. + + Index of the light whose properties are to be set. + A structure which represents the light properties. + A object describing the result of the operation. + IDirect3DDevice9::SetLight + + + +Gets a value indicating whether the specified light is enabled. + + The index of the light whose status is to be queried. + + true if the specified light is enabled; otherwise, false. + IDirect3DDevice9::IsLightEnabled + + + +Enables or disables a set of lighting parameters. + + The index of the light whose state is to be changed. + + true if the light should be enabled; otherwise, false. + A object describing the result of the operation. + IDirect3DDevice9::EnableLight + + + +Sets a sampler state's value. + + The sampler stage index. + The sampler state whose value is to be set. + The new value for the sampler state. + A object describing the result of the operation. + IDirect3DDevice9::SetSamplerState + + + +Sets a sampler state's value. + + The sampler stage index. + The sampler state whose value is to be set. + The new value for the sampler state. + A object describing the result of the operation. + IDirect3DDevice9::SetSamplerState + + + +Sets a sampler state's value. + + The sampler stage index. + The sampler state whose value is to be set. + The new value for the sampler state. + A object describing the result of the operation. + IDirect3DDevice9::SetSamplerState + + + +Sets a sampler state's value. + + The sampler stage index. + The sampler state whose value is to be set. + The new value for the sampler state. + A object describing the result of the operation. + IDirect3DDevice9::SetSamplerState + + + +Sets the state value for the currently assigned texture. + + Zero-based stage identifier for the texture. Devices can have up to eight textures, so the maximum value allowed is 7. + The texture state to set. + The new value for the state. + A object describing the result of the operation. + IDirect3DDevice9::SetTextureStageState + + + +Sets the state value for the currently assigned texture. + + Zero-based stage identifier for the texture. Devices can have up to eight textures, so the maximum value allowed is 7. + The texture state to set. + The new value for the state. + A object describing the result of the operation. + IDirect3DDevice9::SetTextureStageState + + + +Sets the state value for the currently assigned texture. + + Zero-based stage identifier for the texture. Devices can have up to eight textures, so the maximum value allowed is 7. + The texture state to set. + The new value for the state. + A object describing the result of the operation. + IDirect3DDevice9::SetTextureStageState + + + +Sets the state value for the currently assigned texture. + + Zero-based stage identifier for the texture. Devices can have up to eight textures, so the maximum value allowed is 7. + The texture state to set. + The new value for the state. + A object describing the result of the operation. + IDirect3DDevice9::SetTextureStageState + + + +Sets the state value for the currently assigned texture. + + Zero-based stage identifier for the texture. Devices can have up to eight textures, so the maximum value allowed is 7. + The texture state to set. + The new value for the state. + A object describing the result of the operation. + IDirect3DDevice9::SetTextureStageState + + + +Sets the gamma correction ramp for the specified swap chain. + + The swap chain whose gamma ramp is to be set. + The gamma correction ramp. + + true to calibrate the gamma data, false to just submit it to the device. + IDirect3DDevice9::SetGammaRamp + + + +Retrives the gamma correction ramp for the specified swap chain. + + The swap chain whose gamma ramp is to be retrieved. + The requested gamma correction ramp. + IDirect3DDevice9::GetGammaRamp + + + +Sets palette entries. + + An ordinal number identifying the particular palette upon which the operation is to be performed. + The individual entries of the palette that are to be set. The length of the array is assumed to be 256. + A object describing the result of the operation. + IDirect3DDevice9::SetPaletteEntries + + + +Gets the individual color elements of the specified palette. + + The palette whose color elements will be retrieved. + The individual color elements of the specified palette. + IDirect3DDevice9::GetPaletteEntries + + + +Sets a single device render-state parameter. + + The type of the render state value. + The render state that is being modified. + The new value for the state. + A object describing the result of the operation. + IDirect3DDevice9::SetRenderState + + + +Sets a single device render-state parameter. + + The render state that is being modified. + The new value for the state. + A object describing the result of the operation. + IDirect3DDevice9::SetRenderState + + + +Sets a single device render-state parameter. + + The render state that is being modified. + The new value for the state. + A object describing the result of the operation. + IDirect3DDevice9::SetRenderState + + + +Sets a single device render-state parameter. + + The render state that is being modified. + The new value for the state. + A object describing the result of the operation. + IDirect3DDevice9::SetRenderState + + + +Copies the render-target data from device memory to system memory. + + A surface representing the render target. + The surface which will receive the copy of the render target. + A object describing the result of the operation. + IDirect3DDevice9::GetRenderTargetData + + + +Generates a copy of the device's front buffer and places that copy into the specified surface. + + Index of the swap chain whose front buffer is to be copied. + The surface that will receive the copy of the front buffer. + A object describing the result of the operation. + IDirect3DDevice9::GetFrontBufferData + + + +Gets the stream source frequency divider value. + + A zero-based index specifying the data stream. + The frequency divider value. + IDirect3DDevice9::GetStreamSourceFrequency + + + +Retrieves a vertex buffer bound to the specified data stream. + + A zero-based index specifying the data stream. + A vertex buffer representing the data stream. + The offset from the beginning of the stream to the beginning of vertex data, measured in bytes. + The stride of the vertex data, in bytes. + A object describing the result of the operation. + IDirect3DDevice9::GetStreamSource + + + +Gets the texture assigned to the specified stage. + + The texture assigned to the specified stage. + IDirect3DDevice9::GetTexture + + + +Retrieves a texture stage state value for the device. + + The texture stage. + The texture stage state whose value is being requested. + The value of the requested texture stage state. + IDirect3DDevice9::GetTextureStageState + + + +Retrieves a texture stage state value for the device. + + The type of the data being returned. + The texture stage. + The texture stage state whose value is being requested. + The value of the requested texture stage state. + IDirect3DDevice9::GetTextureStageState + + + +Retrieves a sampler state value for the device. + + The sampler stage index. + The sampler state whose value is being requested. + The value of the requested sampler state. + IDirect3DDevice9::GetSamplerState + + + +Retrieves a sampler state value for the device. + + The type of the data being returned. + The sampler stage index. + The sampler state whose value is being requested. + The value of the requested sampler state. + IDirect3DDevice9::GetSamplerState + + + +Retrieves a render-state value for the device. + + The render state whose value is being requested. + The value of the requested render state. + IDirect3DDevice9::GetRenderState + + + +Retrieves a render-state value for the device. + + The type of the data being returned. + The render state whose value is being requested. + The value of the requested render state. + IDirect3DDevice9::GetRenderState + + + +Gets the currently set user-defined clipping plane. + + Index of the desired clipping plane. + The requested clipping plane. + IDirect3DDevice9::GetClipPlane + + + +Retrieve's the display mode's spatial resolution, color resolution, and refresh frequency. + + The index of the swap chain whose display mode is to be retrieved. + A object describing the result of the operation. + IDirect3DDevice9::GetDisplayMode + + + +Gets information describing the raster of the monitor on which the swap chain is presented. + + The swap chain whose raster status is to be retrieved. + The raster status of the specified swap chain. + IDirect3DDevice9::GetRasterStatus + + + +Gets a reference to the specified swap chain. + + The index of the desired swap chain. + The requested swap chain reference. + IDirect3DDevice9::GetSwapChain + + + +Retrieves a render target surface. + + The index of the render target. + A surface representing the desired render target. + IDirect3DDevice9::GetRenderTarget + + + +Retrieves a back buffer from the device's swap chain. + + The desired swap chain. + Index of the back buffer object to return. + The requested back buffer surface. + IDirect3DDevice9::GetBackBuffer + + + +Presents the contents of the next buffer in the sequence of back buffers to the screen. + + The area of the back buffer that should be presented. + The area of the front buffer that should receive the result of the presentation. + The destination window whose client area is taken as the target for this presentation. + Specifies a region on the back buffer that contains the minimal amount of pixels that need to be updated. + A object describing the result of the operation. + IDirect3DDevice9::Present + + + +Presents the contents of the next buffer in the sequence of back buffers to the screen. + + The area of the back buffer that should be presented. + The area of the front buffer that should receive the result of the presentation. + The destination window whose client area is taken as the target for this presentation. + A object describing the result of the operation. + IDirect3DDevice9::Present + + + +Presents the contents of the next buffer in the sequence of back buffers to the screen. + + The area of the back buffer that should be presented. + The area of the front buffer that should receive the result of the presentation. + A object describing the result of the operation. + IDirect3DDevice9::Present + + + +Presents the contents of the first swap chain in the device. + + Flags used to specify how the swap chain should be presented. + A object describing the result of the operation. + IDirect3DDevice9::Present + + + +Presents the contents of the next buffer in the sequence of back buffers to the screen. + + A object describing the result of the operation. + IDirect3DDevice9::Present + + + +Ends a scene. + + A object describing the result of the operation. + IDirect3DDevice9::EndScene + + + +Begins a scene. + + A object describing the result of the operation. + IDirect3DDevice9::BeginScene + + + +Clears one or more surfaces such as a render target, a stencil buffer, and a depth buffer. + + Flags that specify which surfaces will be cleared. + The color that will be used to fill the cleared render target. + The value that will be used to fill the cleared depth buffer. + The value that will be used to fill the cleared stencil buffer. + A object describing the result of the operation. + IDirect3DDevice9::Clear + + + +Clears one or more surfaces such as a render target, a stencil buffer, and a depth buffer. + + Flags that specify which surfaces will be cleared. + The color that will be used to fill the cleared render target. + The value that will be used to fill the cleared depth buffer. + The value that will be used to fill the cleared stencil buffer. + A object describing the result of the operation. + IDirect3DDevice9::Clear + + + +Clears one or more surfaces such as a render target, a stencil buffer, and a depth buffer. + + Flags that specify which surfaces will be cleared. + The color that will be used to fill the cleared render target. + The value that will be used to fill the cleared depth buffer. + The value that will be used to fill the cleared stencil buffer. + The areas on the surfaces that will be cleared. + A object describing the result of the operation. + IDirect3DDevice9::Clear + + + +Clears one or more surfaces such as a render target, a stencil buffer, and a depth buffer. + + Flags that specify which surfaces will be cleared. + The color that will be used to fill the cleared render target. + The value that will be used to fill the cleared depth buffer. + The value that will be used to fill the cleared stencil buffer. + The areas on the surfaces that will be cleared. + A object describing the result of the operation. + IDirect3DDevice9::Clear + + + +Resets the device. + + A set of new presentation parameters to apply to the device. + A object describing the result of the operation. + IDirect3DDevice9::Reset + + + +Reports the current cooperative-level status of the device. + + +This function always returns the result of the TestCooperativeLevel call. +It will not generate an exception for a failed result, or write to . +As a result, it is important to actually check the returned value. + + A object describing the result of the operation. + IDirect3DDevice9::TestCooperativeLevel + + + +Reports on the device's ability to render the current texture-blending operations and arguments in a single pass. + + The number of passes required to complete the desired effect. + IDirect3DDevice9::ValidateDevice + + + +Evicts all managed resources, including both Direct3D and driver-managed resources. + + A object describing the result of the operation. + IDirect3DDevice9::EvictManagedResources + + + +Determines whether the specified query type is supported by the device. + + The query type to check. + + true if the query is supported; otherwise, false. + IDirect3DDevice9::CreateQuery + + + +Initializes a new instance of the class. + + Ordinal number that denotes the display adapter. + Denotes the desired device type. If the desired device type is not available, device creation will fail. + Specifies the target window for Direct3D rendering. + Combination of one or more options that control device creation. + Describes the presentation parameters for the device being created. + + + +Applications use the methods of the Device to perform DrawPrimitive-based rendering, create resources, +work with system-level variables, adjust gamma ramp levels, work with palettes, and create shaders. + + IDirect3DDevice9 + + + Describes the raster status. + D3DRASTER_STATUS + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Gets or sets the behavior flags used to create the device. + + + + +Gets or sets the rendering window. + + + + +Gets or sets the device type. + + + + +Gets or sets an ordinal denoting the display adapter. + + + + Describes the creation parameters for a device. + D3DDEVICE_CREATION_PARAMETERS + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Gets or sets flags describing the current clipping intersection. + + + + +Gets or sets flags describing the current clipping union. + + + + Describes the current clip status. + D3DCLIPSTATUS9 + + + +Gets a collection of the blue components of the gamma ramp. + + + + +Gets a collection of the green components of the gamma ramp. + + + + +Gets a collection of the red components of the gamma ramp. + + + + +Initializes a new instance of the class. + + + + Contains red, green, and blue ramp data. + D3DGAMMARAMP + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Gets or sets a value that determines the sharpness of specular highlights. The higher the value, the sharper the highlight. + + + + +Gets or sets the emissive color of the material. + + + + +Gets or sets the specular color of the material. + + + + +Gets or sets the ambient color of the material. + + + + +Gets or sets the diffuse color of the material. + + + + Specifies material properties. + D3DMATERIAL9 + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Gets or sets the degree type for the patch. + + + + +Gets or sets the basis for the patch. + + + + +Gets or sets the width of the imaginary two-dimensional vertex array. + + + + +Gets or sets the height of each vertex, in number of vertices. + + + + +Gets or sets the width of each vertex, in number of vertices. + + + + +Gets or sets the starting vertex offset height, in number of vertices. + + + + +Gets or sets the starting vertex offset width, in number of vertices. + + + + Describes a rectangular high-order patch. + D3DRECTPATCH_INFO + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Gets or sets the degree type for the patch. + + + + +Gets or sets the basis type for the patch. + + + + +Gets or sets the number of vertices in the patch. + + + + +Gets or sets the starting vertex offset, in number of vertices. + + + + Describes a triangular high-order patch. + D3DTRIPATCH_INFO + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Gets or sets the angle, in radians, of the spotlight's outer cone. + + + + +Gets or sets angle, in radians, of the spotlight's inner cone. + + + + +Gets or sets the third value in the equation that determines how the light intensity changes over distance. + + + + +Gets or sets the second value in the equation that determines how the light intensity changes over distance. + + + + +Gets or sets the first value in the equation that determines how the light intensity changes over distance. + + + + +Gets or sets the decrease in illumination between a spotlight's inner cone and the outer edge of the outer cone. + + + + +Gets or sets the distance beyond which the light has no effect. This member does not affect directional lights. + + + + +Gets or sets the direction of the light. This vector need not be normalized, but should have a non-zero length. + + + + +Gets or sets the position of the light in world space. This member does not affect directional lights. + + + + +Gets or sets the ambient color of the light. + + + + +Gets or sets the specular color of the light. + + + + +Gets or sets the diffuse color of the light. + + + + +Gets or sets the type of the light source. + + + + Defines a set of lighting properties. + D3DLIGHT9 + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Gets or sets the alpha component of the palette entry. + + + + +Gets or sets the blue component of the palette entry. + + + + +Gets or sets the green component of the palette entry. + + + + +Gets or sets the red component of the palette entry. + + + + Specifies the color and usage of an entry in a logical palette. + PALETTEENTRY + + + +Returns a value indicating whether the two viewports are equivalent. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Returns a value indicating whether this instance is equal to the specified object. + + A to compare with this instance. + + true if has the same value as this instance; otherwise, false. + + + +Returns a value indicating whether this instance is equal to the specified object. + + An object to compare with this instance. + + true if has the same value as this instance; otherwise, false. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Converts the value of the viewport to its equivalent string representation. + + The string representation of the value of this instance. + + + +Tests for inequality between two viewports. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two viewports. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Initializes a new instance of the structure. + + The X coordinate of the viewport. + The Y coordinate of the viewport. + The width of the viewport. + The height of the viewport. + The minimum Z distance of the viewport. + The maximum Z distance of the viewport. + + + +Initializes a new instance of the structure. + + The X coordinate of the viewport. + The Y coordinate of the viewport. + The width of the viewport. + The height of the viewport. + + + +Gets or sets the viewport's maximum Z depth. + + + + +Gets or sets the viewport's minimum Z depth. + + + + +Gets or sets the viewport's height. + + + + +Gets or sets the viewport's width. + + + + +Gets or sets the viewport's Y position. + + + + +Gets or sets the viewport's X position. + + + + +Defines a rectangular region of a render-target surface onto which +a 3D rendering is projected. + + D3DVIEWPORT9 + + + +Determines whether the specified object instances are considered equal. + + + + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Converts the value of the object to its equivalent string representation. + + The string representation of the value of this instance. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Scales a matrix by a given value. + + The matrix to scale. + The amount by which to scale. + The scaled matrix. + + + +Scales a matrix by a given value. + + The matrix to scale. + The amount by which to scale. + The scaled matrix. + + + +Multiplies two matricies. + + The first matrix to multiply. + The second matrix to multiply. + The product of the two matricies. + + + +Scales a matrix by a given value. + + The matrix to scale. + The amount by which to scale. + The scaled matrix. + + + +Divides two matricies. + + The first matrix to divide. + The second matrix to divide. + The quotient of the two matricies. + + + +Subtracts two matricies. + + The first matrix to subtract. + The second matrix to subtract. + The difference between the two matricies. + + + +Adds two matricies. + + The first matrix to add. + The second matrix to add. + The sum of the two matricies. + + + +Negates a matrix. + + The matrix to negate. + The negated matrix. + + + +Creates a 2D transformation matrix. + + Center point of the scaling operation. + Scaling rotation amount. + Scaling factor. + The center of the rotation. + The rotation of the transformation. + The translation factor of the transformation. + When the method completes, contains the created transformation matrix. + + + +Creates a 2D transformation matrix. + + Center point of the scaling operation. + Scaling rotation amount. + Scaling factor. + The center of the rotation. + The rotation of the transformation. + The translation factor of the transformation. + The created transformation matrix. + + + +Creates a transformation matrix. + + Center point of the scaling operation. + Scaling rotation amount. + Scaling factor. + The center of the rotation. + The rotation of the transformation. + The translation factor of the transformation. + When the method completes, contains the created transformation matrix. + + + +Creates a transformation matrix. + + Center point of the scaling operation. + Scaling rotation amount. + Scaling factor. + The center of the rotation. + The rotation of the transformation. + The translation factor of the transformation. + The created transformation matrix. + + + +Creates a 2D affine transformation matrix. + + Scaling factor. + The center of the rotation. + The rotation of the transformation. + The translation factor of the transformation. + When the method completes, contains the created affine transformation matrix. + + + +Creates a 2D affine transformation matrix. + + Scaling factor. + The center of the rotation. + The rotation of the transformation. + The translation factor of the transformation. + The created affine transformation matrix. + + + +Creates a 3D affine transformation matrix. + + Scaling factor. + The center of the rotation. + The rotation of the transformation. + The translation factor of the transformation. + When the method completes, contains the created affine transformation matrix. + + + +Creates a 3D affine transformation matrix. + + Scaling factor. + The center of the rotation. + The rotation of the transformation. + The translation factor of the transformation. + The created affine transformation matrix. + + + +Calculates the transpose of the specified matrix. + + The matrix whose transpose is to be calculated. + When the method completes, contains the transpose of the specified matrix. + + + +Calculates the transpose of the specified matrix. + + The matrix whose transpose is to be calculated. + The transpose of the specified matrix. + + + +Calculates the inverse of the specified matrix. + + The matrix whose inverse is to be calculated. + When the method completes, contains the inverse of the specified matrix. + + + +Calculates the inverse of the specified matrix. + + The matrix whose inverse is to be calculated. + The inverse of the specified matrix. + + + +Creates a translation matrix using the specified offsets. + + The offset for all three coordinate planes. + When the method completes, contains the created translation matrix. + + + +Creates a translation matrix using the specified offsets. + + The offset for all three coordinate planes. + The created translation matrix. + + + +Creates a translation matrix using the specified offsets. + + X-coordinate offset. + Y-coordinate offset. + Z-coordinate offset. + When the method completes, contains the created translation matrix. + + + +Creates a translation matrix using the specified offsets. + + X-coordinate offset. + Y-coordinate offset. + Z-coordinate offset. + The created translation matrix. + + + +Creates a matrix that flattens geometry into a plane. + + Position of the shadow light. + The plane into which the geometry will be flattened. + When the method completes, contains the created shadow matrix. + + + +Creates a matrix that flattens geometry into a plane. + + Position of the shadow light. + The plane into which the geometry will be flattened. + The created shadow matrix. + + + +Creates a matrix that scales along the x-axis, y-axis, and y-axis. + + Scaling factor for all three axes. + When the method completes, contains the created scaling matrix. + + + +Creates a matrix that scales along the x-axis, y-axis, and y-axis. + + Scaling factor for all three axes. + The created scaling matrix. + + + +Creates a matrix that scales along the x-axis, y-axis, and y-axis. + + Scaling factor that is applied along the x-axis. + Scaling factor that is applied along the y-axis. + Scaling factor that is applied along the z-axis. + When the method completes, contains the created scaling matrix. + + + +Creates a matrix that scales along the x-axis, y-axis, and y-axis. + + Scaling factor that is applied along the x-axis. + Scaling factor that is applied along the y-axis. + Scaling factor that is applied along the z-axis. + The created scaling matrix. + + + +Creates a matrix that reflects the coordinate system about a plane. + + The plane about which the coordinate system will be reflected. + When the method completes, contains the created reflection matrix. + + + +Creates a matrix that reflects the coordinate system about a plane. + + The plane about which the coordinate system will be reflected. + The created reflection matrix. + + + +Creates a right-handed, customized perspective projection matrix. + + Minimum x-value of the viewing volume. + Maximum x-value of the viewing volume. + Minimum y-value of the viewing volume. + Maximum y-value of the viewing volume. + Minimum z-value of the viewing volume. + Maximum z-value of the viewing volume. + When the method completes, contains the created projection matrix. + + + +Creates a right-handed, customized perspective projection matrix. + + Minimum x-value of the viewing volume. + Maximum x-value of the viewing volume. + Minimum y-value of the viewing volume. + Maximum y-value of the viewing volume. + Minimum z-value of the viewing volume. + Maximum z-value of the viewing volume. + The created projection matrix. + + + +Creates a left-handed, customized perspective projection matrix. + + Minimum x-value of the viewing volume. + Maximum x-value of the viewing volume. + Minimum y-value of the viewing volume. + Maximum y-value of the viewing volume. + Minimum z-value of the viewing volume. + Maximum z-value of the viewing volume. + When the method completes, contains the created projection matrix. + + + +Creates a left-handed, customized perspective projection matrix. + + Minimum x-value of the viewing volume. + Maximum x-value of the viewing volume. + Minimum y-value of the viewing volume. + Maximum y-value of the viewing volume. + Minimum z-value of the viewing volume. + Maximum z-value of the viewing volume. + The created projection matrix. + + + +Creates a right-handed, perspective projection matrix based on a field of view. + + Field of view in the y direction, in radians. + Aspect ratio, defined as view space width divided by height. + Minimum z-value of the viewing volume. + Maximum z-value of the viewing volume. + When the method completes, contains the created projection matrix. + + + +Creates a right-handed, perspective projection matrix based on a field of view. + + Field of view in the y direction, in radians. + Aspect ratio, defined as view space width divided by height. + Minimum z-value of the viewing volume. + Maximum z-value of the viewing volume. + The created projection matrix. + + + +Creates a left-handed, perspective projection matrix based on a field of view. + + Field of view in the y direction, in radians. + Aspect ratio, defined as view space width divided by height. + Minimum z-value of the viewing volume. + Maximum z-value of the viewing volume. + When the method completes, contains the created projection matrix. + + + +Creates a left-handed, perspective projection matrix based on a field of view. + + Field of view in the y direction, in radians. + Aspect ratio, defined as view space width divided by height. + Minimum z-value of the viewing volume. + Maximum z-value of the viewing volume. + The created projection matrix. + + + +Creates a right-handed, perspective projection matrix. + + Width of the viewing volume. + Height of the viewing volume. + Minimum z-value of the viewing volume. + Maximum z-value of the viewing volume. + When the method completes, contains the created projection matrix. + + + +Creates a right-handed, perspective projection matrix. + + Width of the viewing volume. + Height of the viewing volume. + Minimum z-value of the viewing volume. + Maximum z-value of the viewing volume. + The created projection matrix. + + + +Creates a left-handed, perspective projection matrix. + + Width of the viewing volume. + Height of the viewing volume. + Minimum z-value of the viewing volume. + Maximum z-value of the viewing volume. + When the method completes, contains the created projection matrix. + + + +Creates a left-handed, perspective projection matrix. + + Width of the viewing volume. + Height of the viewing volume. + Minimum z-value of the viewing volume. + Maximum z-value of the viewing volume. + The created projection matrix. + + + +Creates a right-handed, customized orthographic projection matrix. + + Minimum x-value of the viewing volume. + Maximum x-value of the viewing volume. + Minimum y-value of the viewing volume. + Maximum y-value of the viewing volume. + Minimum z-value of the viewing volume. + Maximum z-value of the viewing volume. + When the method completes, contains the created projection matrix. + + + +Creates a right-handed, customized orthographic projection matrix. + + Minimum x-value of the viewing volume. + Maximum x-value of the viewing volume. + Minimum y-value of the viewing volume. + Maximum y-value of the viewing volume. + Minimum z-value of the viewing volume. + Maximum z-value of the viewing volume. + The created projection matrix. + + + +Creates a left-handed, customized orthographic projection matrix. + + Minimum x-value of the viewing volume. + Maximum x-value of the viewing volume. + Minimum y-value of the viewing volume. + Maximum y-value of the viewing volume. + Minimum z-value of the viewing volume. + Maximum z-value of the viewing volume. + When the method completes, contains the created projection matrix. + + + +Creates a left-handed, customized orthographic projection matrix. + + Minimum x-value of the viewing volume. + Maximum x-value of the viewing volume. + Minimum y-value of the viewing volume. + Maximum y-value of the viewing volume. + Minimum z-value of the viewing volume. + Maximum z-value of the viewing volume. + The created projection matrix. + + + +Creates a right-handed, orthographic projection matrix. + + Width of the viewing volume. + Height of the viewing volume. + Minimum z-value of the viewing volume. + Maximum z-value of the viewing volume. + When the method completes, contains the created projection matrix. + + + +Creates a right-handed, orthographic projection matrix. + + Width of the viewing volume. + Height of the viewing volume. + Minimum z-value of the viewing volume. + Maximum z-value of the viewing volume. + The created projection matrix. + + + +Creates a left-handed, orthographic projection matrix. + + Width of the viewing volume. + Height of the viewing volume. + Minimum z-value of the viewing volume. + Maximum z-value of the viewing volume. + When the method completes, contains the created projection matrix. + + + +Creates a left-handed, orthographic projection matrix. + + Width of the viewing volume. + Height of the viewing volume. + Minimum z-value of the viewing volume. + Maximum z-value of the viewing volume. + The created projection matrix. + + + +Creates a right-handed, look-at matrix. + + The position of the viewer's eye. + The camera look-at target. + The camera's up vector. + When the method completes, contains the created look-at matrix. + + + +Creates a right-handed, look-at matrix. + + The position of the viewer's eye. + The camera look-at target. + The camera's up vector. + The created look-at matrix. + + + +Creates a left-handed, look-at matrix. + + The position of the viewer's eye. + The camera look-at target. + The camera's up vector. + When the method completes, contains the created look-at matrix. + + + +Creates a left-handed, look-at matrix. + + The position of the viewer's eye. + The camera look-at target. + The camera's up vector. + The created look-at matrix. + + + +Creates a rotation matrix with a specified yaw, pitch, and roll. + + Yaw around the y-axis, in radians. + Pitch around the x-axis, in radians. + Roll around the z-axis, in radians. + When the method completes, contains the created rotation matrix. + + + +Creates a rotation matrix with a specified yaw, pitch, and roll. + + Yaw around the y-axis, in radians. + Pitch around the x-axis, in radians. + Roll around the z-axis, in radians. + The created rotation matrix. + + + +Creates a rotation matrix from a quaternion. + + The quaternion to use to build the matrix. + The created rotation matrix. + + + +Creates a rotation matrix from a quaternion. + + The quaternion to use to build the matrix. + The created rotation matrix. + + + +Creates a matrix that rotates around an arbitary axis. + + The axis around which to rotate. + Angle of rotation in radians. Angles are measured clockwise when looking along the rotation axis toward the origin. + When the method completes, contains the created rotation matrix. + + + +Creates a matrix that rotates around an arbitary axis. + + The axis around which to rotate. + Angle of rotation in radians. Angles are measured clockwise when looking along the rotation axis toward the origin. + The created rotation matrix. + + + +Creates a matrix that rotates around the z-axis. + + Angle of rotation in radians. Angles are measured clockwise when looking along the rotation axis toward the origin. + When the method completes, contains the created rotation matrix. + + + +Creates a matrix that rotates around the z-axis. + + Angle of rotation in radians. Angles are measured clockwise when looking along the rotation axis toward the origin. + The created rotation matrix. + + + +Creates a matrix that rotates around the y-axis. + + Angle of rotation in radians. Angles are measured clockwise when looking along the rotation axis toward the origin. + When the method completes, contains the created rotation matrix. + + + +Creates a matrix that rotates around the y-axis. + + Angle of rotation in radians. Angles are measured clockwise when looking along the rotation axis toward the origin. + The created rotation matrix. + + + +Creates a matrix that rotates around the x-axis. + + Angle of rotation in radians. Angles are measured clockwise when looking along the rotation axis toward the origin. + When the method completes, contains the created rotation matrix. + + + +Creates a matrix that rotates around the x-axis. + + Angle of rotation in radians. Angles are measured clockwise when looking along the rotation axis toward the origin. + The created rotation matrix. + + + +Creates a spherical billboard that rotates around a specified object position. + + The position of the object around which the billboard will rotate. + The position of the camera. + The up vector of the camera. + The forward vector of the camera. + When the method completes, contains the created billboard matrix. + + + +Creates a spherical billboard that rotates around a specified object position. + + The position of the object around which the billboard will rotate. + The position of the camera. + The up vector of the camera. + The forward vector of the camera. + The created billboard matrix. + + + +Performs a linear interpolation between two matricies. + + Start matrix. + End matrix. + Value between 0 and 1 indicating the weight of . + When the method completes, contains the linear interpolation of the two matricies. + +This method performs the linear interpolation based on the following formula. +start + (end - start) * amount +Passing a value of 0 will cause to be returned; a value of 1 will cause to be returned. + + + + +Performs a linear interpolation between two matricies. + + Start matrix. + End matrix. + Value between 0 and 1 indicating the weight of . + The linear interpolation of the two matrices. + +This method performs the linear interpolation based on the following formula. +start + (end - start) * amount +Passing a value of 0 will cause to be returned; a value of 1 will cause to be returned. + + + + +Negates a matrix. + + The matrix to be negated. + When the method completes, contains the negated matrix. + + + +Negates a matrix. + + The matrix to be negated. + The negated matrix. + + + +Scales a matrix by the given value. + + The matrix to scale. + The amount by which to scale. + When the method completes, contains the scaled matrix. + + + +Scales a matrix by the given value. + + The matrix to scale. + The amount by which to scale. + The scaled matrix. + + + +Determines the quotient of two matrices. + + The first matrix to divide. + The second matrix to divide. + When the method completes, contains the quotient of the two matrices. + + + +Determines the quotient of two matrices. + + The first matrix to divide. + The second matrix to divide. + The quotient of the two matrices. + + + +Scales a matrix by the given value. + + The matrix to scale. + The amount by which to scale. + When the method completes, contains the scaled matrix. + + + +Scales a matrix by the given value. + + The matrix to scale. + The amount by which to scale. + The scaled matrix. + + + +Determines the products of of an array of matrices by a single matrix. + + The first matrix array to multiply. + The matrix to multiply the matrices in the array by. + The array of products of the matrices. + + + +Determines the products of of an array of matrices by a single matrix. + + The first matrix array to multiply. + The matrix to multiply the matrices in the array by. + The array of products of the matrices. + The offset at which to begin the multiplication. + The number of matrices to multiply, or 0 to process the entire array. + + + +Determines the products of two arrays of matrices. + + The first matrix array to multiply. + The second matrix array to multiply. + The array of products of the two matrices. + + + +Determines the products of two arrays of matrices. + + The first matrix array to multiply. + The second matrix array to multiply. + The array of products of the two matrices. + The offset at which to begin the multiplication. + The number of matrices to multiply, or 0 to process the entire array. + + + +Determines the products of two arrays of matrices. + + The first matrix array to multiply. + The second matrix array to multiply. + The array of products of the two matrices. + + + +Determines the product of two matrices. + + The first matrix to multiply. + The second matrix to multiply. + The product of the two matrices. + + + +Determines the product of two matrices. + + The first matrix to multiply. + The second matrix to multiply. + The product of the two matrices. + + + +Determines the difference between two matrices. + + The first matrix to subtract. + The second matrix to subtract. + When the method completes, contains the difference between the two matrices. + + + +Determines the difference between two matrices. + + The first matrix to subtract. + The second matrix to subtract. + The difference between the two matrices. + + + +Determines the sum of two matrices. + + The first matrix to add. + The second matrix to add. + When the method completes, contains the sum of the two matrices. + + + +Determines the sum of two matrices. + + The first matrix to add. + The second matrix to add. + The sum of the two matrices. + + + +Calculates the determinant of the matrix. + + The determinant of the matrix. + + + +Decomposes the matrix into its scalar, rotational, and translational elements. + + When the method completes, contains the scalar element of the matrix. + When the method completes, contains the translational element of the matrix. + When the method completes, contains the rotational element of the matrix. + + true if the decomposition was successful; otherwise, false. + + + +Inverts the matrix. + + + + +Gets a value indicating whether this instance is an identity matrix. + + + + +Gets a that represents an identity matrix. + + + + +Gets or sets the element of the matrix that exists in the fourth row and fourth column. + + + + +Gets or sets the element of the matrix that exists in the fourth row and third column. + + + + +Gets or sets the element of the matrix that exists in the fourth row and second column. + + + + +Gets or sets the element of the matrix that exists in the fourth row and first column. + + + + +Gets or sets the element of the matrix that exists in the third row and fourth column. + + + + +Gets or sets the element of the matrix that exists in the third row and third column. + + + + +Gets or sets the element of the matrix that exists in the third row and second column. + + + + +Gets or sets the element of the matrix that exists in the third row and first column. + + + + +Gets or sets the element of the matrix that exists in the second row and fourth column. + + + + +Gets or sets the element of the matrix that exists in the second row and third column. + + + + +Gets or sets the element of the matrix that exists in the second row and second column. + + + + +Gets or sets the element of the matrix that exists in the second row and first column. + + + + +Gets or sets the element of the matrix that exists in the first row and fourth column. + + + + +Gets or sets the element of the matrix that exists in the first row and third column. + + + + +Gets or sets the element of the matrix that exists in the first row and second column. + + + + +Gets or sets the element of the matrix that exists in the first row and first column. + + + + +Defines a 4x4 matrix. + + D3DXMATRIX + + + +Creates an instance of the type that this is associated with, using the specified context, given a set of property values for the object. + + A that provides a format context. + An that specifies the type of array for which to get properties. + An array of type that is used as a filter. + A with the properties that are exposed for this data type, or a null reference (Nothing in Visual Basic) if there are no properties. + + + +Returns whether this object supports properties, using the specified context. + + A that provides a format context. + + true if GetProperties should be called to find the properties of this object; otherwise, false. + + + +Creates an instance of the type that this is associated with, using the specified context, given a set of property values for the object. + + A that provides a format context. + An of new property values. + An representing the given , or null if the object cannot be created. + + + +Returns whether changing a value on this object requires a call to System::ComponentModel::TypeConverter::CreateInstance(System::Collections::IDictionary^) +to create a new value, using the specified context. + + A that provides a format context. + + false if changing a property on this object requires a call to System::ComponentModel::TypeConverter::CreateInstance(System::Collections::IDictionary^) to create a new value; otherwise, false. + + + +Converts the given object to the type of this converter, using the specified context and culture information. + + A that provides a format context. + A . If null is passed, the current culture is assumed. + The to convert. + An that represents the converted value. + + + +Converts the given value object to the specified type, using the specified context and culture information. + + A that provides a format context. + A . If null is passed, the current culture is assumed. + The to convert. + A that represents the type you want to convert to. + An that represents the converted value. + + + +Returns whether this converter can convert an object of the given type to the type of this converter, using the specified context. + + A that provides a format context. + A System::Type that represents the type you want to convert from. + + true if this converter can perform the conversion; otherwise, false. + + + +Returns whether this converter can convert the object to the specified type, using the specified context. + + A that provides a format context. + A that represents the type you want to convert to. + + true if this converter can perform the conversion; otherwise, false. + + + +Initializes a new instance of the class. + + + + +Provides a type converter to convert objects to and from various +other representations. + + None + + + Applications use the methods of the VertexDeclaration class to encapsulate the vertex shader declaration. + IDirect3DVertexDeclaration9 + + + Defines the vertex data layout. Each vertex can contain one or more data types, +and each data type is described by a vertex element. + D3DVERTEXELEMENT9 + + + +Determines whether the specified object instances are considered equal. + + + + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Converts the value of the object to its equivalent string representation. + + The string representation of the value of this instance. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Scales the plane by the given scaling factor. + + The source plane. + The scaling factor. + The scaled plane. + + + +Scales the plane by the given scaling factor. + + The source plane. + The scaling factor. + The scaled plane. + + + +Scales the plane by the given scaling factor. + + The source plane. + The scaling factor. + When the method completes, contains the scaled plane. + + + +Scales the plane by the given scaling factor. + + The source plane. + The scaling factor. + The scaled plane. + + + +Finds the intersection between a plane and a sphere. + + The source plane. + The sphere to check for intersection. + A value from the enumeration describing the result of the intersection test. + + + +Finds the intersection between a plane and a box. + + The source plane. + The box to check for intersection. + A value from the enumeration describing the result of the intersection test. + + + +Finds the intersection between a plane and a line. + + The source plane. + The start point of the line. + The end point of the line. + If an intersection is found, contains the intersection point between the line and the plane. + + true if an intersection is found; false otherwise. + + + +Transforms an array of normalized planes by a quaternion rotation. + + The normalized source planes. + The quaternion rotation. + The transformed planes. + + + +Transforms a normalized plane by a quaternion rotation. + + The normalized source plane. + The quaternion rotation. + When the method completes, contains the transformed plane. + + + +Transforms a normalized plane by a quaternion rotation. + + The normalized source plane. + The quaternion rotation. + The transformed plane. + + + +Transforms an array of normalized planes by a matrix. + + The normalized source planes. + The transformation matrix. + The transformed planes. + + + +Transforms a normalized plane by a matrix. + + The normalized source plane. + The transformation matrix. + When the method completes, contains the transformed plane. + + + +Transforms a normalized plane by a matrix. + + The normalized source plane. + The transformation matrix. + The transformed plane. + + + +Changes the coefficients of the normal vector of the plane to make it of unit length. + + The source plane. + When the method completes, contains the normalized plane. + + + +Changes the coefficients of the normal vector of the plane to make it of unit length. + + The source plane. + The normalized plane. + + + +Changes the coefficients of the normal vector of the plane to make it of unit length. + + + + +Calculates the dot product of the specified vector and the normal of the plane. + + The source plane. + The source vector. + The dot product of the specified vector and the normal of the plane. + + + +Calculates the dot product of a specified vector and the normal of the plane plus the distance value of the plane. + + The source plane. + The source vector. + The dot product of a specified vector and the normal of the Plane plus the distance value of the plane. + + + +Calculates the dot product of the specified vector and plane. + + The source plane. + The source vector. + The dot product of the specified vector and plane. + + + +Initializes a new instance of the class. + + +A vector with the X, Y, and Z components defining the normal to the plane. +The W component defines the distance of the plane along its normal from the origin. + + + + +Initializes a new instance of the class. + + First point of a triangle defining the plane. + Second point of a triangle defining the plane. + Third point of a triangle defining the plane. + + + +Initializes a new instance of the class. + + Any point that lies along the plane. + The normal vector to the plane. + + + +Initializes a new instance of the class. + + The normal vector to the plane. + Distance of the plane along its normal from the origin. + + + +Initializes a new instance of the class. + + X component of the normal defining the plane. + Y component of the normal defining the plane. + Z component of the normal defining the plane. + Distance of the plane along its normal from the origin. + + + +The distance of the plane along its normal from the origin. + + + + +The normal vector of the plane. + + + + +Defines a plane in three dimensions. + + D3DXPLANE + + + +Creates an instance of the type that this is associated with, using the specified context, given a set of property values for the object. + + A that provides a format context. + An that specifies the type of array for which to get properties. + An array of type that is used as a filter. + A with the properties that are exposed for this data type, or a null reference (Nothing in Visual Basic) if there are no properties. + + + +Returns whether this object supports properties, using the specified context. + + A that provides a format context. + + true if GetProperties should be called to find the properties of this object; otherwise, false. + + + +Creates an instance of the type that this is associated with, using the specified context, given a set of property values for the object. + + A that provides a format context. + An of new property values. + An representing the given , or null if the object cannot be created. + + + +Returns whether changing a value on this object requires a call to System::ComponentModel::TypeConverter::CreateInstance(System::Collections::IDictionary^) +to create a new value, using the specified context. + + A that provides a format context. + + false if changing a property on this object requires a call to System::ComponentModel::TypeConverter::CreateInstance(System::Collections::IDictionary^) to create a new value; otherwise, false. + + + +Converts the given object to the type of this converter, using the specified context and culture information. + + A that provides a format context. + A . If null is passed, the current culture is assumed. + The to convert. + An that represents the converted value. + + + +Converts the given value object to the specified type, using the specified context and culture information. + + A that provides a format context. + A . If null is passed, the current culture is assumed. + The to convert. + A that represents the type you want to convert to. + An that represents the converted value. + + + +Returns whether this converter can convert an object of the given type to the type of this converter, using the specified context. + + A that provides a format context. + A System::Type that represents the type you want to convert from. + + true if this converter can perform the conversion; otherwise, false. + + + +Returns whether this converter can convert the object to the specified type, using the specified context. + + A that provides a format context. + A that represents the type you want to convert to. + + true if this converter can perform the conversion; otherwise, false. + + + +Initializes a new instance of the class. + + + + +Provides a type converter to convert objects to and from various +other representations. + + + + +Determines whether the specified object instances are considered equal. + + + + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Converts the value of the object to its equivalent string representation. + + The string representation of the value of this instance. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Determines whether a ray intersects the specified object. + + The ray which will be tested for intersection. + A sphere that will be tested for intersection. + When the method completes, contains the distance at which the ray intersected the plane. + + true if the ray intersects the plane; otherwise, false. + + + +Determines whether a ray intersects the specified object. + + The ray which will be tested for intersection. + A box that will be tested for intersection. + When the method completes, contains the distance at which the ray intersected the plane. + + true if the ray intersects the plane; otherwise, false. + + + +Determines whether a ray intersects the specified object. + + The ray which will be tested for intersection. + The first vertex of a triangle that will be tested for intersection. + The second vertex of a triangle that will be tested for intersection. + The third vertex of a triangle that will be tested for intersection. + When the method completes, contains the distance at which the ray intersected the plane. + When the method completes, contains the U component of the barycentric hit coordinates. + When the method completes, contains the V component of the barycentric hit coordinates. + + true if the ray intersects the plane; otherwise, false. + + + +Determines whether a ray intersects the specified object. + + The ray which will be tested for intersection. + The first vertex of a triangle that will be tested for intersection. + The second vertex of a triangle that will be tested for intersection. + The third vertex of a triangle that will be tested for intersection. + When the method completes, contains the distance at which the ray intersected the plane. + + true if the ray intersects the plane; otherwise, false. + + + +Determines whether a ray intersects the specified object. + + The ray which will be tested for intersection. + A plane that will be tested for intersection. + When the method completes, contains the distance at which the ray intersected the plane. + + true if the ray intersects the plane; otherwise, false. + + + +Initializes a new instance of the structure. + + The location of the ray's origin. + A unit vector specifying the direction in which the ray is pointing. + + + +A unit vector specifying the direction in which the ray is pointing. + + + + +Specifies the location of the ray's origin. + + + + +Defines a ray in three dimensions, specified by a starting position and a direction. + + + + +Creates an instance of the type that this is associated with, using the specified context, given a set of property values for the object. + + A that provides a format context. + An that specifies the type of array for which to get properties. + An array of type that is used as a filter. + A with the properties that are exposed for this data type, or a null reference (Nothing in Visual Basic) if there are no properties. + + + +Returns whether this object supports properties, using the specified context. + + A that provides a format context. + + true if GetProperties should be called to find the properties of this object; otherwise, false. + + + +Creates an instance of the type that this is associated with, using the specified context, given a set of property values for the object. + + A that provides a format context. + An of new property values. + An representing the given , or null if the object cannot be created. + + + +Returns whether changing a value on this object requires a call to System::ComponentModel::TypeConverter::CreateInstance(System::Collections::IDictionary^) +to create a new value, using the specified context. + + A that provides a format context. + + false if changing a property on this object requires a call to System::ComponentModel::TypeConverter::CreateInstance(System::Collections::IDictionary^) to create a new value; otherwise, false. + + + +Converts the given object to the type of this converter, using the specified context and culture information. + + A that provides a format context. + A . If null is passed, the current culture is assumed. + The to convert. + An that represents the converted value. + + + +Converts the given value object to the specified type, using the specified context and culture information. + + A that provides a format context. + A . If null is passed, the current culture is assumed. + The to convert. + A that represents the type you want to convert to. + An that represents the converted value. + + + +Returns whether this converter can convert an object of the given type to the type of this converter, using the specified context. + + A that provides a format context. + A System::Type that represents the type you want to convert from. + + true if this converter can perform the conversion; otherwise, false. + + + +Returns whether this converter can convert the object to the specified type, using the specified context. + + A that provides a format context. + A that represents the type you want to convert to. + + true if this converter can perform the conversion; otherwise, false. + + + +Initializes a new instance of the class. + + + + +Provides a type converter to convert objects to and from various +other representations. + + + + +Determines whether the specified object instances are considered equal. + + + + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Converts the value of the object to its equivalent string representation. + + The string representation of the value of this instance. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Finds the intersection between a plane and a sphere. + + The sphere to check for intersection. + The source plane. + A value from the enumeration describing the result of the intersection test. + + + +Determines whether a sphere intersects the specified object. + + The sphere which will be tested for intersection. + The ray that will be tested for intersection. + When the method completes, contains the distance from the ray's origin in which the intersection with the sphere occured. + + true if the two objects are intersecting; otherwise, false. + + + +Determines whether a sphere intersects the specified object. + + The first sphere which will be tested for intersection. + The second sphere that will be tested for intersection. + + true if the two objects are intersecting; otherwise, false. + + + +Determines whether a sphere intersects the specified object. + + The sphere which will be tested for intersection. + The box that will be tested for intersection. + + true if the two objects are intersecting; otherwise, false. + + + +Constructs a that is the as large as the total combined area of the two specified spheres. + + The first sphere to merge. + The second sphere to merge. + The newly constructed bounding sphere. + + + +Constructs a that fully contains the given points. + + The points that will be contained by the sphere. + The newly constructed bounding sphere. + + + +Constructs a from a given box. + + The box that will designate the extents of the sphere. + The newly constructed bounding sphere. + + + +Determines whether the sphere contains the specified point. + + The sphere that will be checked for containment. + The point that will be checked for containment. + A member of the enumeration indicating whether the two objects intersect, are contained, or don't meet at all. + + + +Determines whether the sphere contains the specified sphere. + + The first sphere that will be checked for containment. + The second sphere that will be checked for containment. + A member of the enumeration indicating whether the two objects intersect, are contained, or don't meet at all. + + + +Determines whether the sphere contains the specified box. + + The sphere that will be checked for containment. + The box that will be checked for containment. + A member of the enumeration indicating whether the two objects intersect, are contained, or don't meet at all. + + + +Initializes a new instance of the structure. + + The center of the bounding sphere. + The radius of the sphere. + + + +The radius of the sphere. + + + + +Specifies the center point of the sphere. + + + + +A bounding sphere, specified by a center vector and a radius. + + None + + + +Creates an instance of the type that this is associated with, using the specified context, given a set of property values for the object. + + A that provides a format context. + An that specifies the type of array for which to get properties. + An array of type that is used as a filter. + A with the properties that are exposed for this data type, or a null reference (Nothing in Visual Basic) if there are no properties. + + + +Returns whether this object supports properties, using the specified context. + + A that provides a format context. + + true if GetProperties should be called to find the properties of this object; otherwise, false. + + + +Creates an instance of the type that this is associated with, using the specified context, given a set of property values for the object. + + A that provides a format context. + An of new property values. + An representing the given , or null if the object cannot be created. + + + +Returns whether changing a value on this object requires a call to System::ComponentModel::TypeConverter::CreateInstance(System::Collections::IDictionary^) +to create a new value, using the specified context. + + A that provides a format context. + + false if changing a property on this object requires a call to System::ComponentModel::TypeConverter::CreateInstance(System::Collections::IDictionary^) to create a new value; otherwise, false. + + + +Converts the given object to the type of this converter, using the specified context and culture information. + + A that provides a format context. + A . If null is passed, the current culture is assumed. + The to convert. + An that represents the converted value. + + + +Converts the given value object to the specified type, using the specified context and culture information. + + A that provides a format context. + A . If null is passed, the current culture is assumed. + The to convert. + A that represents the type you want to convert to. + An that represents the converted value. + + + +Returns whether this converter can convert an object of the given type to the type of this converter, using the specified context. + + A that provides a format context. + A System::Type that represents the type you want to convert from. + + true if this converter can perform the conversion; otherwise, false. + + + +Returns whether this converter can convert the object to the specified type, using the specified context. + + A that provides a format context. + A that represents the type you want to convert to. + + true if this converter can perform the conversion; otherwise, false. + + + +Initializes a new instance of the class. + + + + +Provides a type converter to convert objects to and from various +other representations. + + + + +Determines whether the specified object instances are considered equal. + + + + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Converts the value of the object to its equivalent string representation. + + The string representation of the value of this instance. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Finds the intersection between a plane and a box. + + The box to check for intersection. + The source plane. + A value from the enumeration describing the result of the intersection test. + + + +Determines whether a box intersects the specified object. + + The box which will be tested for intersection. + The ray that will be tested for intersection. + When the method completes, contains the distance from the ray's origin in which the intersection with the box occured. + + true if the two objects are intersecting; otherwise, false. + + + +Determines whether a box intersects the specified object. + + The box which will be tested for intersection. + The sphere that will be tested for intersection. + + true if the two objects are intersecting; otherwise, false. + + + +Determines whether a box intersects the specified object. + + The first box which will be tested for intersection. + The second box that will be tested for intersection. + + true if the two objects are intersecting; otherwise, false. + + + +Constructs a that is the as large as the total combined area of the two specified boxes. + + The first box to merge. + The second box to merge. + The newly constructed bounding box. + + + +Constructs a from a given sphere. + + The sphere that will designate the extents of the box. + The newly constructed bounding box. + + + +Constructs a that fully contains the given points. + + The points that will be contained by the box. + The number of vertices in the stream. + The number of bytes between vertices. + The newly constructed bounding box. + + + +Constructs a that fully contains the given points. + + The points that will be contained by the box. + The newly constructed bounding box. + + + +Determines whether the box contains the specified point. + + The box that will be checked for containment. + The point that will be checked for containment. + A member of the enumeration indicating whether the two objects intersect, are contained, or don't meet at all. + + + +Determines whether the box contains the specified sphere. + + The box that will be checked for containment. + The sphere that will be checked for containment. + A member of the enumeration indicating whether the two objects intersect, are contained, or don't meet at all. + + + +Determines whether the box contains the specified box. + + The first box that will be checked for containment. + The second box that will be checked for containment. + A member of the enumeration indicating whether the two objects intersect, are contained, or don't meet at all. + + + +Retrieves the eight corners of the bounding box. + + An array of points representing the eight corners of the bounding box. + + + +Initializes a new instance of the structure. + + The lowest corner of the box. + The highest corner of the box. + + + +The lowest corner of the box. + + + + +The highest corner of the box. + + + + +An axis aligned bounding box, specified by minimum and maximum vectors. + + None + + + +Describes the result of an intersection with a plane in three dimensions. + + + + +The object is intersecting the plane. + + + + +The object is in front of the plane. + + + + +The object is behind the plane. + + + + +Describes how one bounding volume contains another. + + + + +The two bounding volumes overlap. + + + + +One bounding volume completely contains another. + + + + +The two bounding volumes don't intersect at all. + + + + +Creates an instance of the type that this is associated with, using the specified context, given a set of property values for the object. + + A that provides a format context. + An that specifies the type of array for which to get properties. + An array of type that is used as a filter. + A with the properties that are exposed for this data type, or a null reference (Nothing in Visual Basic) if there are no properties. + + + +Returns whether this object supports properties, using the specified context. + + A that provides a format context. + + true if GetProperties should be called to find the properties of this object; otherwise, false. + + + +Creates an instance of the type that this is associated with, using the specified context, given a set of property values for the object. + + A that provides a format context. + An of new property values. + An representing the given , or null if the object cannot be created. + + + +Returns whether changing a value on this object requires a call to System::ComponentModel::TypeConverter::CreateInstance(System::Collections::IDictionary^) +to create a new value, using the specified context. + + A that provides a format context. + + false if changing a property on this object requires a call to System::ComponentModel::TypeConverter::CreateInstance(System::Collections::IDictionary^) to create a new value; otherwise, false. + + + +Converts the given object to the type of this converter, using the specified context and culture information. + + A that provides a format context. + A . If null is passed, the current culture is assumed. + The to convert. + An that represents the converted value. + + + +Converts the given value object to the specified type, using the specified context and culture information. + + A that provides a format context. + A . If null is passed, the current culture is assumed. + The to convert. + A that represents the type you want to convert to. + An that represents the converted value. + + + +Returns whether this converter can convert an object of the given type to the type of this converter, using the specified context. + + A that provides a format context. + A System::Type that represents the type you want to convert from. + + true if this converter can perform the conversion; otherwise, false. + + + +Returns whether this converter can convert the object to the specified type, using the specified context. + + A that provides a format context. + A that represents the type you want to convert to. + + true if this converter can perform the conversion; otherwise, false. + + + +Initializes a new instance of the class. + + + + +Provides a type converter to convert objects to and from various +other representations. + + + + Gets the internal pointer to the current stream's backing store. + An IntPtr to the buffer being used as a backing store. + + + Gets or sets the position within the current stream. + The current position within the stream. + Stream Class + + + Gets the length in bytes of the stream. + A long value representing the length of the stream in bytes. + + + Gets a value indicating whether the current stream supports writing. + + true if the stream supports writing; otherwise, false. + + + Gets a value indicating whether the current stream supports seeking. + Always true. + + + Gets a value indicating whether the current stream supports reading. + + true if the stream supports reading; otherwise, false. + + + +Not supported. + + Always ignored. + Always thrown. + + + +Not supported. + + Always thrown. + + + +Reads an array of values from the current stream, and advances the current position +within this stream by the number of bytes written. + + The type of the values to be read from the stream. + An array of values that was read from the current stream. + This stream does not support reading. + + is negative. + + + +Reads a sequence of elements from the current stream into a target buffer and +advances the position within the stream by the number of bytes read. + + An array of values to be read from the stream. + The zero-based byte offset in buffer at which to begin storing +the data read from the current stream. + The number of values to be read from the current stream. + The number of bytes read from the stream. + This stream does not support reading. + + is a null reference. + + or is negative. + The sum of and is greater than the buffer length. + + + +Reads a sequence of bytes from the current stream and advances the position +within the stream by the number of bytes read. + + An array of values to be read from the stream. + The zero-based byte offset in buffer at which to begin storing +the data read from the current stream. + The maximum number of bytes to be read from the current stream. + The number of bytes read from the stream. + This stream does not support reading. + + is a null reference. + + or is negative. + The sum of and is greater than the buffer length. + + + +Reads a single value from the current stream and advances the current +position within this stream by the number of bytes read. + + The type of the value to be read from the stream. + The value that was read. + This stream does not support reading. + There is not enough space in the current +stream to read a value of this type. + + + +Writes a range of bytes to the current stream, and advances the current position +within this stream by the number of bytes written. + + A pointer to the location to start copying from. + The number of bytes to copy from source to the current stream. + This stream does not support writing. + + is a zero pointer. + + is negative. + + + +Writes an array of values to the current stream, and advances the current position +within this stream by the number of bytes written. + + An array of values to be written to the current stream. + This stream does not support writing. + + is a null reference. + + + +Writes an array of values to the current stream, and advances the current position +within this stream by the number of bytes written. + + The type of the values to be written to the stream. + An array of values to be written to the stream. + The zero-based offset in data at which to begin copying values to the current stream. + The number of values to be written to the current stream. If this is zero, +all of the contents will be written. + This stream does not support writing. + + is a null reference. + + or is negative. + The sum of and is greater than the buffer length. + + + +Writes a sequence of bytes to the current stream and advances the current +position within this stream by the number of bytes written. + + An array of bytes. This method copies count bytes from buffer to the current stream. + The zero-based byte offset in buffer at which to begin copying bytes to the current stream. + The number of bytes to be written to the current stream. + This stream does not support writing. + + is a null reference. + + or is negative. + The sum of and is greater than the buffer length. + + + +Writes a single value to the stream, and advances the current position +within this stream by the number of bytes written. + + The type of the value to be written to the stream. + The value to write to the stream. + The stream does not support writing. + There is not enough space +remaining in the stream to write this type of value. + + + Sets the position within the current stream. + Attempted to seek outside of the bounds of the stream. + + + +Releases unmanaged resources and performs other cleanup operations before the is reclaimed by garbage collection. + + + + +Releases all resources used by the . + + + + +Initializes a new instance of the class, using a managed buffer as a backing store. + + A managed array to be used as a backing store. + + true if reading from the buffer should be allowed; otherwise, false. + + true if writing to the buffer should be allowed; otherwise, false. + + + +Initializes a new instance of the class, using an unmanaged buffer as a backing store. + + A pointer to the buffer to be used as a backing store. + The size of the buffer provided, in bytes. + + true if reading from the buffer should be allowed; otherwise, false. + + true if writing to the buffer should be allowed; otherwise, false. + + is a zero pointer. + + is less than 1. + + + +Initializes a new instance of the class, and allocates a new buffer to use as a backing store. + + The size of the buffer to be allocated, in bytes. + + true if reading from the buffer should be allowed; otherwise, false. + + true if writing to the buffer should be allowed; otherwise, false. + + is less than 1. + + + +Provides a stream interface to a buffer located in unmanaged memory. + + None + + + The stencil operations that can be performed during depth-stencil testing. + D3D10_STENCIL_OP + + + +Flags that control the behavior of rendering. + + D3DX10_SPRITE_FLAG + + + +Increases the reference count of textures when DrawSpritesBuffered is called. + + + + +Saves render state when sprites are rendered, and restores the previous state once rendering +is complete. + + + + +Sort the sprites from front to back based on their depth; sprites closer to the +camera will be rendered first. + + + + +Sort the sprites from back to front based on their depth; sprites further away from the +camera will be rendered first. + + + + +Group sprites by texture before rendering; improves performance when many sprites +share textures. + + + + +No flags. + + + + Identifies the type of the resource that will be viewed. + D3D10_SRV_DIMENSION + + + + D3D10_RTV_DIMENSION + + + + D3D10_USAGE + + + + D3D10_RESOURCE_MISC_FLAG + + + + D3D10_RESOURCE_DIMENSION + + + + D3D10_RTV_DIMENSION + + + +Values which description query types. + + D3D10_QUERY + + + +Flags for describing query options and behavior. + + D3D10_QUERY_MISC_FLAG + + + Specifies how the pipeline should interpret vertex data bound to the input assembler stage. + D3D10_PRIMITIVE_TOPOLOGY + + + +Interpret the vertex data as triangle strip with adjacency data. + + + + +Interpret the vertex data as list of triangles with adjacency data. + + + + +Interpret the vertex data as line strip with adjacency data. + + + + +Interpret the vertex data as list of lines with adjacency data. + + + + +Interpret the vertex data as a triangle strip. + + + + +Interpret the vertex data as a list of triangles. + + + + +Interpret the vertex data as a line strip. + + + + +Interpret the vertex data as a list of lines. + + + + +Interpret the vertex data as a list of points. + + + + +The IA stage has not been initialized with a primitive topology. The IA stage will not function properly unless a primitive topology is defined. + + + + +Normal maps generation constants. + + D3DX10_NORMALMAP_FLAG + + + +Computes the per-pixel occlusion term and encodes it into the alpha. An alpha of 1 means that the +pixel is not obscured in any way, and an alpha of 0 means that the pixel is completely obscured. + + + + +Inverts the direction of each normal. + + + + +Same as specifying the MirrorU and MirrorV flags. + + + + +Indicates that pixels off the edge of the texture on the v-axis should be mirrored, not wrapped. + + + + +Indicates that pixels off the edge of the texture on the u-axis should be mirrored, not wrapped. + + + + +Values that indicate how to alter mesh data during an optimization operation. + + D3DX10_MESHOPT + + + +Affects the vertex cache size. Using this flag specifies a default vertex cache size that works well on legacy hardware. + + + + +While attribute sorting, do not split vertices that are shared between attribute groups. + + + + +Optimize the faces only; do not optimize the vertices. + + + + +Reorders faces to maximize length of adjacent triangles. + + + + +Reorders faces to increase the cache hit rate of vertex caches. + + + + +Reorders faces to optimize for fewer attribute bundle state changes and enhanced draw performance. + + + + +Reorders faces to remove unused vertices and faces. + + + + Specifies which types of mesh data to discard from the device. + D3DX10_MESH_DISCARD_FLAGS + + + +Indicates that any buffers committed to the device should be discarded. + + + + +Indicates that the adjacency buffer should be discarded. + + + + +Indicates that the point representation buffer should be discarded. + + + + +Indicates that the attribute table should be discarded. + + + + +Indicates that the attribute buffer should be discarded. + + + + Specifies creation options for a mesh. + D3DX10_MESH + + + +Indicates that the mesh should contain adjacency information. + + + + +Indicates that the mesh should use 32-bit indices rather than 16-bit indices. + + + + +Indicates standard mesh creation options.. + + + + Specifies how the CPU should respond when Map() is called on a resource being used by the GPU. + D3D10_MAP_FLAG + + + +Do not wait for the resource to become available. The map method will return WasStillRendering when the GPU blocks the CPU from +accessing a resource. + + + + +Wait for the resource to become available. + + + + Identifies a resource to be accessed for reading and writing by the CPU. + D3D10_MAP + + + +Resource is mapped for writing; the existing contents of the resource cannot be overwritten. This flag is only valid on +vertex and index buffers. The resource must have been created with write access. + + + + +Resource is mapped for writing; the previous contents of the resource will be undefined. The resource must have been created with write access. + + + + +Resource is mapped for reading and writing. The resource must have been created with read and write access. + + + + +Resource is mapped for writing. The resource must have been created with write access. + + + + +Resource is mapped for reading. The resource must have been created with read access. + + + + Type of data contained in an input slot. + D3D10_INPUT_CLASSIFICATION + + + +The data in the input slot is per-instance data. + + + + +The data in the input slot is per-vertex data. + + + + Specifies image file formats supported by runtime. + D3DX10_IMAGE_FILE_FORMAT + + + +Windows Media Player format (WMP). + + + + +Graphics Interchange Format (GIF). + + + + +Tagged Image File Format (TIFF). + + + + +DirectDraw surface (DDS) file format. Stores textures, volume textures, and cubic environment maps, with or without +mipmap levels, and with or without pixel compression. + + + + +Portable Network Graphics (PNG) file format. A non-proprietary bitmap format using lossless compression. + + + + +Joint Photographic Experts Group (JPEG) compressed file format. Specifies variable compression of 24-bit RGB color +and 8-bit gray-scale Tagged Image File Format (TIFF) image document files. + + + + +Windows bitmap (BMP) file format. Contains a header that describes the resolution of the device on which the +rectangle of pixels was created, the dimensions of the rectangle, the size of the array of bits, a logical palette, +and an array of bits that defines the relationship between pixels in the bitmapped image and entries in the logical palette. + + + + Identifies which resources are supported for a given format and given device. + D3D10_FORMAT_SUPPORT + + + +The format can be used as a multisample texture and read into a shader with the HLSL "load" function. + + + + +The format can be used as a multisample render target. + + + + +The format can be cast to another format. + + + + +The format can be displayed on screen. + + + + +Multisampling resolution is supported. + + + + +CPU locking is supported. + + + + +Depth-stencil surfaces are supported. + + + + +Blend operations are supported. + + + + +Rendertargets are supported. + + + + +Automatic generation of mipmaps is supported. + + + + +Mipmaps are supported. + + + + +The intrinsic HLSL "samplecmp" and "samplecmplevelzero" are supported. + + + + +The intrinsic HLSL "sample" function is supported. + + + + +The intrinsic HLSL "load" function is supported. + + + + +Cube textures are supported. + + + + +3D textures are supported. + + + + +2D textures are supported. + + + + +1D textures are supported. + + + + +Streaming output buffers are supported. + + + + +Index buffers are supported. + + + + +Vertex buffers are supported. + + + + +Buffer resources are supported. + + + + +No features are supported. + + + + +Specifies weights for font rendering. + + FW + + + +Use a black weight. + + + + +Use a heavy weight. + + + + +Use an ultra bold weight. + + + + +Use an extra bold weight. + + + + +Use a bold weight. + + + + +Use a demi-bold weight. + + + + +Use a semi-bold weight. + + + + +Use a medium weight. + + + + +Use a regular weight. + + + + +Use a normal weight. + + + + +Make the font light. + + + + +Make the font ultra light. + + + + +Make the font extra light. + + + + +Make the font thin. + + + + +The font weight doesn't matter. + + + + +Specifies quality options for font rendering. + + QUALITY + + + +Clear type natural quality. + + + + +Clear type quality. + + + + +Antialiased quality. + + + + +Non-antialiased quality. + + + + +Proof quality. + + + + +Draft quality. + + + + +Default quality levels. + + + + +Defines precision levels for font rendering. + + OutPrecision + + + +PostScript only precision. + + + + +Screen outline precision. + + + + +Outline precision. + + + + +TrueType only precision. + + + + +Raster precision. + + + + +Device precision. + + + + +TrueType precision. + + + + +Stroke-level precision. + + + + +Character-level precision. + + + + +String-level precision. + + + + +Default precision. + + + + +Defines pitch and family settings for fonts. + + (various font constants) + + + +Use the Decorative family. + + + + +Use the Script family. + + + + +Use the Modern family. + + + + +Use the Swiss family. + + + + +Use the Roman family. + + + + +The font family doesn't matter. + + + + +Mono pitch. + + + + +Variable pitch. + + + + +Fixed pitch. + + + + +Default pitch. + + + + +Specifies formatting options for text rendering. + + DT + + + +Rendering the text in right-to-left reading order. + + + + +Don't clip the text. + + + + +Expand tab characters. + + + + +Force all text to a single line. + + + + +Allow word breaks. + + + + +Align the text to the bottom. + + + + +Vertically align the text to the center. + + + + +Align the text to the right. + + + + +Align the text to the center. + + + + +Align the text to the left. + + + + +Align the text to the top. + + + + +Defines possible character sets for fonts. + + CHARSET + + + +The Mac character set. + + + + +The Baltic character set. + + + + +The Russian character set. + + + + +The East Europe character set. + + + + +The Thai character set. + + + + +The Vietnamese character set. + + + + +The Turkish character set. + + + + +The Greek character set. + + + + +The Arabic character set. + + + + +The Hebrew character set. + + + + +The Johab character set. + + + + +The OEM character set. + + + + +The Chinese character set. + + + + +The GB2312 character set. + + + + +The Hangul character set. + + + + +The ShiftJIS character set. + + + + +The symbol character set. + + + + +The default system character set. + + + + +The ANSI character set. + + + + Specifies possible texture filtering flags. + D3DX10_FILTER_FLAG + + + +Combines the StandardRgbIn and StandardRgbOut flags. + + + + +Output data is in standard RGB (sRGB) color space. + + + + +Input data is in standard RGB (sRGB) color space. + + + + +Do diffuse dithering on the image when changing from one format to another. + + + + +The resulting image must be dithered using a 4x4 ordered dither algorithm. This happens when converting from one format to another. + + + + +Combines the MirrorU, MirrorV, and MirrorW flags. + + + + +Pixels off the edge of the texture on the w-axis should be mirrored, not wrapped. + + + + +Pixels off the edge of the texture on the v-axis should be mirrored, not wrapped. + + + + +Pixels off the edge of the texture on the u-axis should be mirrored, not wrapped. + + + + +Each pixel is computed by averaging a 2x2(x2) box of pixels from the source image. This filter works only when the +dimensions of the destination are half those of the source, as is the case with mipmaps. + + + + +Every pixel in the source image contributes equally to the destination image. This is the slowest of the filters. + + + + +Each destination pixel is computed by sampling the four nearest pixels from the source image. This filter +works best when the scale on both axes is less than two. + + + + +Each destination pixel is computed by sampling the nearest pixel from the source image. + + + + +No scaling or filtering will take place. Pixels outside the bounds of the source image are assumed to be transparent black. + + + + Specifies filtering options used during texture sampling. + D3D10_FILTER + + + +For use with pixel shaders utilizing textures in the R1_UNorm format. + + + + +Use anisotropic interpolation for minification, magnification, and mip-level sampling. Compare the result to the comparison value. + + + + +Use linear interpolation for minification, magnification, and mip-level sampling. Compare the result to the comparison value. + + + + +Use linear interpolation for minification and magnification; use point sampling for mip-level sampling. Compare the result to the comparison value. + + + + +Use linear interpolation for minification; use point sampling for magnification; use linear interpolation for mip-level sampling. Compare the result to the comparison value. + + + + +Use linear interpolation for minification; use point sampling for magnification and mip-level sampling. Compare the result to the comparison value. + + + + +Use point sampling for minification; use linear interpolation for magnification and mip-level sampling. Compare the result to the comparison value. + + + + +Use point sampling for minification; use linear interpolation for magnification; use point sampling for mip-level sampling. Compare the result to the comparison value. + + + + +Use point sampling for minification and magnification; use linear interpolation for mip-level sampling. +Compare the result to the comparison value. + + + + +Use point sampling for minification, magnification, and mip-level sampling. Compare the result to the comparison value. + + + + +Use anisotropic interpolation for minification, magnification, and mip-level sampling. + + + + +Use linear interpolation for minification, magnification, and mip-level sampling. + + + + +Use linear interpolation for minification and magnification; use point sampling for mip-level sampling. + + + + +Use linear interpolation for minification; use point sampling for magnification; use linear interpolation for mip-level sampling. + + + + +Use linear interpolation for minification; use point sampling for magnification and mip-level sampling. + + + + +Use point sampling for minification; use linear interpolation for magnification and mip-level sampling. + + + + +Use point sampling for minification; use linear interpolation for magnification; use point sampling for mip-level sampling. + + + + +Use point sampling for minification and magnification; use linear interpolation for mip-level sampling. + + + + +Use point sampling for minification, magnification, and mip-level sampling. + + + + Determines the fill mode to use when rendering triangles. + D3D10_FILL_MODE + + + +Fill the triangles formed by the vertices. Adjacent vertices are not drawn. + + + + +Draw lines connecting the vertices. Adjacent vertices are not drawn. + + + + Specifies detailed information about Effect variables. + D3D10_EFFECT_VARIABLE + + + +Indicates the variable has been explicitly bound using the register keyword in the effect code. + + + + +Indicates that the variable or constant buffer resides in an effect pool. + + + + +Indicates that the variable is an annotation or global. + + + + +Standard effect variable. + + + + Specifies a device driver type. + D3D10_DRIVER_TYPE + + + +A WARP high performance software rasterizer. + + + + +Reserved. Do not use. + + + + +A null device (a REF device with no rendering capability). + + + + +A software reference (REF) device. + + + + +A hardware (HAL) device. + + + + Flags controlling the creation of a device. + D3D10_CREATE_DEVICE_FLAG + + + +Reserved. Do not use. + + + + +Indicates that both a REF and HAL device should be created, allowing the application to toggle +between them. + + + + +Indicates that the device should support the debug layer. + + + + +Indicates that a single-threaded device should be created; by default, Direct3D 10 devices are +thread-safe. Specifying this flag causes thread-safety to be disabled. + + + + +Indicates no specific behavior. + + + + Identifies mask values for writing to a depth-stencil buffer. + D3D10_DEPTH_WRITE_MASK + + + +Enables all writes to the depth-stencil buffer. + + + + +Disables all writes to the depth-stencil buffer. + + + + Specified the dimension (and access methodology) for depth-stencil resource views. + D3D10_DSV_DIMENSION + + + +The resource will be accessed as an array of 2D textures with multisampling support. + + + + +The resource will be accessed as a 2D texture with multisampling support. + + + + +The resource will be accessed as an array of 2D textures. + + + + +The resource will be accessed as a 2D texture. + + + + +The resource will be accessed as an array of 1D textures. + + + + +The resource will be accessed as a 1D texture. + + + + +The resource will be accessed according to its type, determined by the actual resource specified +during the creation of the view. + + + + Specifies which parts of the depth stencil buffer to clear. + D3D10_CLEAR_FLAG + + + +Indicates the stencil buffer should be cleared. + + + + +Indicates the depth buffer should be cleared. + + + + Flags controlling which debug features are enabled. + D3D10_DEBUG_FEATURE + + + +The runtime will call SwapChain.Present after the render operation. +Presentation of buffers will occur according to the settings specified by the +Debug.SwapChain and Debug.PresentDelay properties. + + + + +The runtime will call Device.Flush after the render operation. + + + + +The application will wait for the GPU to complete the render operation before continuing. + + + + Indicates triangles facing a particular direction are not drawn. + D3D10_CULL_MODE + + + +Cull triangles that are back-facing. + + + + +Cull triangles that are front-facing. + + + + +Do not cull; all triangles are rendered. + + + + Specifies the types of CPU access allowed for a resource. + D3D10_CPU_ACCESS_FLAG + + + +Read access is required on the CPU. + + + + +Write access is required on the CPU. + + + + +No access is required on the CPU. + + + + Data type of a performance counter. + D3D10_COUNTER_TYPE + + + +64-bit unsigned integer. + + + + +32-bit unsigned integer. + + + + +16-bit unsigned integer. + + + + +32-bit floating point. + + + + Performance counter types. + D3D10_COUNTER + + + +The counter for the percentage of texel data that was read from the cache. + + + + +The counter for the percentage of vertex data that was read from the cache. + + + + +The counter for the percentage of time the pixel shader spends performing computations. + + + + +The counter for the percentage of time the pixel shader spends sampling resources. + + + + +The counter for the percentage of time the geometry shader spends performing computations. + + + + +The counter for the percentage of time the geometry shader spends sampling resources. + + + + +The counter for the percentage of time the vertex shader spends performing computations. + + + + +The counter for the percentage of time the vertex shader spends sampling resources. + + + + +The counter for the percentage of throughput used for fillrate. + + + + +The counter for the percentage of throughput used for triangle setup. + + + + +The counter for the percentage of throughput for vertices. + + + + +The counter for the percentage of bandwidth used by local video memory. + + + + +The counter for the percentage of bandwidth used on a host adapter. + + + + +The counter for the percentage of time the GPU is performing processing that is not vertex, pixel or geometry processing. + + + + +The counter for the percentage of time the GPU is processing pixels. + + + + +The counter for the percentage of time the GPU is processing geometry. + + + + +The counter for the percentage of time the GPU is processing vertices. + + + + +The counter for the percentage of time the GPU is idle. + + + + Comparison options. + D3D10_COMPARISON_FUNC + + + +The test always passes. + + + + +The test passes if (source >= destination). + + + + +The test passes if (source != destination). + + + + +The test passes if (source > destination). + + + + +The test passes if (source <= destination). + + + + +The test passes if (source == destination). + + + + +The test passes if (source < destination). + + + + +The test never passes. + + + + Identifies mask values for writing to a render target. + D3D10_COLOR_WRITE_ENABLE + + + +Indicates that writes to all components should be enabled. + + + + +Indicates that writes to the alpha component should be enabled. + + + + +Indicates that writes to the blue component should be enabled. + + + + +Indicates that writes to the green component should be enabled. + + + + +Indicates that writes to the red component should be enabled. + + + + +The following flags are used to specify which channels in a texture to operate on. + + D3DX10_CHANNEL_FLAG + + + +Indicates the luminances of the red, green, and blue channels should be used. + + + + +Indicates the alpha channel should be used. + + + + +Indicates the green channel should be used. + + + + +Indicates the blue channel should be used. + + + + +Indicates the red channel should be used. + + + + Blend options. A blend option identifies the data source and an optional pre-blend operation. + D3D10_BLEND + + + +The sources are both alpha (A) outputs from a pixel shader. There is an inverting pre-blend (1 - A). This option +allows for dual-source blending. + + + + +The sources are both alpha (A) outputs from a pixel shader. There is no pre-blend. This option +allows for dual-source blending. + + + + +The sources are both color (RGB) outputs from a pixel shader. There is an inverting pre-blend (1 - RGB). This option +allows for dual-source blending. + + + + +The sources are both color (RGB) outputs from a pixel shader. There is no pre-blend operation. This option +allows for dual-source blending. + + + + +The source is the blend factor (F) from the current blend state with an inverting pre-blend (1 - F). + + + + +The source is the blend factor (F) from the current blend state with no pre-blend operation. + + + + +The source is the alpha (A) from a render target with a saturation pre-blend (clamping to 1 or less). + + + + +The source is the color (RGB) from a rendertarget with an inverting pre-blend (1 - A). + + + + +The source is the color (RGB) from a rendertarget with no pre-blend. + + + + +The source is the alpha (A) from a rendertarget with an inverting pre-blend (1 - A). + + + + +The source is the alpha (A) from a rendertarget with no pre-blend. + + + + +The source is the alpha (A) from a pixel shader with an inverting pre-blend (1 - A). + + + + +The source is the alpha (A) from a pixel shader with no pre-blend. + + + + +The source is the color (RGB) from a pixel shader with an inverting pre-blend (1 - RGB). + + + + +The source is the color (RGB) from a pixel shader with no pre-blend. + + + + +The source is the color (1,1,1,1) with no pre-blend. + + + + +The source is the color (0,0,0,0) with no pre-blend. + + + + RGB or alpha blending operation. + D3D10_BLEND_OP + + + +Takes the greater of the source and destination values. + + + + +Takes the lesser of the source and destination values. + + + + +Subtracts the destination from the source. + + + + +Subtracts the source from the destination. + + + + +Adds the source to the destination. + + + + Identifies how to bind a resource to the pipeline. + D3D10_BIND_FLAG + + + +Indicates the resource can be bound to the output-merger stage as a depth-stencil target. + + + + +Indicates the resource can be bound to the output-merger stage as a render target. + + + + +Indicates the resource can be bound to the stream-output stage as an output buffer. + + + + +Indicates the resource can be bound to the shader stage as a buffer or texture. +Note that it is invalid to specify this flag and subsequently map the resource +using MapMode.WriteNoOverwrite. + + + + +Indicates the resource can be bound to the shader stage as a constant buffer + + + + +Indicates the resource can be bound to the input-assembler stage as an index buffer + + + + +Indicates the resource can be bound to the input-assembler stage as a vertex buffer. + + + + +Indicates no specific behavior. + + + + Optional flags that control the behavior of Asynchronous.GetData. + D3D10_ASYNC_GETDATA_FLAG + + + +Indicates the command buffer should not be flushed. +Note that this can cause an infinite loop if GetData() is called repeatedly until +returning successfully: there may still be commands in the buffer than need +to be processed in order for GetData() to return successfully. Since the buffer +will not be flushed, those commands will not be processed and GetData() will never +return successfully. + + + + +Indicates no specific behavior. + + + + +Returns a value indicating whether the two BufferDescriptions are equivalent. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Returns a value indicating whether this instance is equal to the specified object. + + A to compare with this instance. + + true if has the same value as this instance; otherwise, false. + + + +Returns a value indicating whether this instance is equal to the specified object. + + An object to compare with this instance. + + true if has the same value as this instance; otherwise, false. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two BufferDescriptions. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two BufferDescriptions. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Initializes a new instance of the struct. + + The size, in bytes, of the buffer. + The usage pattern for the buffer. + Flags specifying how the buffer will be bound to the pipeline. + Flags specifying how the buffer will be accessible from the CPU. + Miscellaneous resource options. + The size (in bytes) of the structure for a structured buffer. + + + +Gets or sets the size (in bytes) of the structure used for elements of a structured buffer. + + + + +Gets or sets the flags specifying miscellaneous resource options. + + + + +Gets or sets the flags specifying how the CPU will be allowed to access the buffer. + + + + +Gets or sets the flags specifying how the buffer is bound to the pipeline. + + + + +Gets or sets the intended usage pattern of the buffer. + + + + +Gets or sets the size, in bytes, of the buffer. + + + + +Describes a buffer resource. + + D3D11_BUFFER_DESC + + + +Gets the value of the variable as an array of integer vectors. + + The number of 4-element vectors to get. + The integer vector values of the variable. + + + +Gets the value of the variable as an array of boolean vectors. + + The number of 4-element vectors to get. + The boolean vector values of the variable. + + + +Gets the value of the variable as an array of color values. + + The number of values to get. + The color values of the variable. + + + +Gets the value of the variable as an array of floating point vectors. + + The number of values to get. + The floating point vector values of the variable. + + + +Gets the value of the variable as a color value. + + The color value of the variable. + + + +Gets the value of the variable as a floating point vector. + + The floating point vector value of the variable. + + + +Sets the value of the vector variable. + + The array of four-element boolean vectors to set. + A object describing the result of the operation. + + + +Sets the value of the vector variable. + + The array of four-element integer vectors to set. + A object describing the result of the operation. + + + +Sets the value of the vector variable. + + The array of color values to set. + A object describing the result of the operation. + + + +Sets the value of the vector variable. + + The array of floating point vectors to set. + A object describing the result of the operation. + + + +Sets the value of the vector variable. + + The color value to set. + A object describing the result of the operation. + + + +Sets the value of the vector variable. + + The X-component of the vector. + The Y-component of the vector. + The Z-component of the vector. + The W-component of the vector. + A object describing the result of the operation. + + + +Sets the value of the vector variable. + + The X-component of the vector. + The Y-component of the vector. + The Z-component of the vector. + The W-component of the vector. + A object describing the result of the operation. + + + +Sets the value of the vector variable. + + The floating point vector value to set. + A object describing the result of the operation. + + + +Sets the value of the vector variable. + + The floating point vector value to set. + A object describing the result of the operation. + + + +Sets the value of the vector variable. + + The floating point vector value to set. + A object describing the result of the operation. + + + +Initializes a new instance of the class. + + A pointer to the unmanaged interface. + + + +Represents a vector effect variable. + + ID3DX11EffectVectorVariable + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Converts the value of the object to its equivalent string representation. + + The string representation of the value of this instance. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + The scaled vector. + + + +Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + The scaled vector. + + + +Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + The scaled vector. + + + +Reverses the direction of a given vector. + + The vector to negate. + A vector facing in the opposite direction. + + + +Subtracts two vectors. + + The first vector to subtract. + The second vector to subtract. + The difference of the two vectors. + + + +Adds two vectors. + + The first vector to add. + The second vector to add. + The sum of the two vectors. + + + +Returns a vector containing the smallest components of the specified vectors. + + The first source vector. + The second source vector. + When the method completes, contains an new vector composed of the largest components of the source vectors. + + + +Returns a vector containing the largest components of the specified vectors. + + The first source vector. + The second source vector. + A vector containing the largest components of the source vectors. + + + +Returns a vector containing the smallest components of the specified vectors. + + The first source vector. + The second source vector. + When the method completes, contains an new vector composed of the smallest components of the source vectors. + + + +Returns a vector containing the smallest components of the specified vectors. + + The first source vector. + The second source vector. + A vector containing the smallest components of the source vectors. + + + +Projects a 3D vector from screen space into object space. + + The vector to project. + The X position of the viewport. + The Y position of the viewport. + The width of the viewport. + The height of the viewport. + The minimum depth of the viewport. + The maximum depth of the viewport. + The combined world-view-projection matrix. + When the method completes, contains the vector in object space. + + + +Projects a 3D vector from screen space into object space. + + The vector to project. + The X position of the viewport. + The Y position of the viewport. + The width of the viewport. + The height of the viewport. + The minimum depth of the viewport. + The maximum depth of the viewport. + The combined world-view-projection matrix. + The vector in object space. + + + +Projects a 3D vector from object space into screen space. + + The vector to project. + The X position of the viewport. + The Y position of the viewport. + The width of the viewport. + The height of the viewport. + The minimum depth of the viewport. + The maximum depth of the viewport. + The combined world-view-projection matrix. + When the method completes, contains the vector in screen space. + + + +Projects a 3D vector from object space into screen space. + + The vector to project. + The X position of the viewport. + The Y position of the viewport. + The width of the viewport. + The height of the viewport. + The minimum depth of the viewport. + The maximum depth of the viewport. + The combined world-view-projection matrix. + The vector in screen space. + + + +Performs a normal transformation using the given . + + The normal vectors to transform. + The transformation . + The transformed normals. + + + +Performs a normal transformation using the given . + + The source vectors. + The transformation . + The transformed s. + + + +Performs a normal transformation using the given . + + The source vectors. + The transformation . + The transformed s. + The offset at which to begin transforming. + The number of vectors to transform, or 0 to process the whole array. + + + +Performs a normal transformation using the given . + + The source normals to transform. + The transformation . + The transformed s. + The number of vectors to transform. + + + +Performs a normal transformation using the given . + + The source normals to transform. + The stride in bytes between normals in the input. + The transformation . + The transformed s. + The stride in bytes between vectors in the output. + The number of vectors to transform. + + + +Performs a normal transformation using the given . + + The normal vector to transform. + The transformation . + When the method completes, contains the transformed normal. + + + +Performs a normal transformation using the given . + + The normal vector to transform. + The transformation . + The transformed normal. + + + +Performs a coordinate transformation using the given . + + The coordinate vectors to transform. + The transformation . + The transformed coordinates. + + + +Performs a coordinate transformation using the given . + + The source coordinate vectors. + The transformation . + The transformed coordinate s. + + + +Performs a coordinate transformation using the given . + + The source coordinate vectors. + The transformation . + The transformed coordinate s. + The offset at which to begin transforming. + The number of coordinate vectors to transform, or 0 to process the whole array. + + + +Performs a coordinate transformation using the given . + + The source coordinate vectors. + The transformation . + The transformed coordinate s. + The number of coordinate vectors to transform. + + + +Performs a coordinate transformation using the given . + + The source coordinate vectors. + The stride in bytes between vectors in the input. + The transformation . + The transformed coordinate s. + The stride in bytes between vectors in the output. + The number of coordinate vectors to transform. + + + +Performs a coordinate transformation using the given . + + The coordinate vector to transform. + The transformation . + When the method completes, contains the transformed coordinates. + + + +Performs a coordinate transformation using the given . + + The coordinate vector to transform. + The transformation . + The transformed coordinates. + + + +Transforms an array of 3D vectors by the given rotation. + + The vectors to rotate. + The rotation to apply. + The transformed . + + + +Transforms a 3D vector by the given rotation. + + The vector to rotate. + The rotation to apply. + When the method completes, contains the transformed . + + + +Transforms a 3D vector by the given rotation. + + The vector to rotate. + The rotation to apply. + The transformed . + + + +Transforms an array of 3D vectors by the given . + + The source vectors. + The transformation . + The transformed s. + + + +Transforms an array of 3D vectors by the given . + + The source vectors. + The transformation . + The transformed s. + + + +Transforms an array of 3D vectors by the given . + + The source vectors. + The transformation . + The transformed s. + The offset at which to begin transforming. + The number of vectors to transform, or 0 to process the whole array. + + + +Transforms an array of 3D vectors by the given . + + The source vectors. + The transformation . + The transformed s. + The number of vectors to transform. + + + +Transforms an array of 3D vectors by the given . + + The source vectors. + The stride in bytes between vectors in the input. + The transformation . + The transformed s. + The stride in bytes between vectors in the output. + The number of vectors to transform. + + + +Transforms a 3D vector by the given . + + The source vector. + The transformation . + When the method completes, contains the transformed . + + + +Transforms a 3D vector by the given . + + The source vector. + The transformation . + The transformed . + + + +Converts the vector into a unit vector. + + The vector to normalize. + When the method completes, contains the normalized vector. + + + +Converts the vector into a unit vector. + + The vector to normalize. + The normalized vector. + + + +Returns the reflection of a vector off a surface that has the specified normal. + + The source vector. + Normal of the surface. + When the method completes, contains the reflected vector. + Reflect only gives the direction of a reflection off a surface, it does not determine +whether the original vector was close enough to the surface to hit it. + + + +Returns the reflection of a vector off a surface that has the specified normal. + + The source vector. + Normal of the surface. + The reflected vector. + Reflect only gives the direction of a reflection off a surface, it does not determine +whether the original vector was close enough to the surface to hit it. + + + +Calculates the cross product of two vectors. + + First source vector. + Second source vector. + The cross product of the two vectors. + + + +Calculates the cross product of two vectors. + + First source vector. + Second source vector. + The cross product of the two vectors. + + + +Calculates the dot product of two vectors. + + First source vector. + Second source vector. + The dot product of the two vectors. + + + +Calculates the squared distance between two vectors. + + The first vector. + The second vector. + The squared distance between the two vectors. + Distance squared is the value before taking the square root. +Distance squared can often be used in place of distance if relative comparisons are being made. +For example, consider three points A, B, and C. To determine whether B or C is further from A, +compare the distance between A and B to the distance between A and C. Calculating the two distances +involves two square roots, which are computationally expensive. However, using distance squared +provides the same information and avoids calculating two square roots. + + + + +Calculates the distance between two vectors. + + The first vector. + The second vector. + The distance between the two vectors. + + + +Performs a cubic interpolation between two vectors. + + Start vector. + End vector. + Value between 0 and 1 indicating the weight of . + When the method completes, contains the cubic interpolation of the two vectors. + + + +Performs a cubic interpolation between two vectors. + + Start vector. + End vector. + Value between 0 and 1 indicating the weight of . + The cubic interpolation of the two vectors. + + + +Performs a linear interpolation between two vectors. + + Start vector. + End vector. + Value between 0 and 1 indicating the weight of . + When the method completes, contains the linear interpolation of the two vectors. + +This method performs the linear interpolation based on the following formula. +start + (end - start) * amount +Passing a value of 0 will cause to be returned; a value of 1 will cause to be returned. + + + + +Performs a linear interpolation between two vectors. + + Start vector. + End vector. + Value between 0 and 1 indicating the weight of . + The linear interpolation of the two vectors. + +This method performs the linear interpolation based on the following formula. +start + (end - start) * amount +Passing a value of 0 will cause to be returned; a value of 1 will cause to be returned. + + + + +Performs a Hermite spline interpolation. + + First source position vector. + First source tangent vector. + Second source position vector. + Second source tangent vector. + Weighting factor. + When the method completes, contains the result of the Hermite spline interpolation. + + + +Performs a Hermite spline interpolation. + + First source position vector. + First source tangent vector. + Second source position vector. + Second source tangent vector. + Weighting factor. + The result of the Hermite spline interpolation. + + + +Restricts a value to be within a specified range. + + The value to clamp. + The minimum value. + The maximum value. + When the method completes, contains the clamped value. + + + +Restricts a value to be within a specified range. + + The value to clamp. + The minimum value. + The maximum value. + The clamped value. + + + +Performs a Catmull-Rom interpolation using the specified positions. + + The first position in the interpolation. + The second position in the interpolation. + The third position in the interpolation. + The fourth position in the interpolation. + Weighting factor. + When the method completes, contains the result of the Catmull-Rom interpolation. + + + +Performs a Catmull-Rom interpolation using the specified positions. + + The first position in the interpolation. + The second position in the interpolation. + The third position in the interpolation. + The fourth position in the interpolation. + Weighting factor. + A vector that is the result of the Catmull-Rom interpolation. + + + +Returns a containing the 3D Cartesian coordinates of a point specified in Barycentric coordinates relative to a 3D triangle. + + A containing the 3D Cartesian coordinates of vertex 1 of the triangle. + A containing the 3D Cartesian coordinates of vertex 2 of the triangle. + A containing the 3D Cartesian coordinates of vertex 3 of the triangle. + Barycentric coordinate b2, which expresses the weighting factor toward vertex 2 (specified in ). + Barycentric coordinate b3, which expresses the weighting factor toward vertex 3 (specified in ). + When the method completes, contains the 3D Cartesian coordinates of the specified point. + + + +Returns a containing the 3D Cartesian coordinates of a point specified in Barycentric coordinates relative to a 3D triangle. + + A containing the 3D Cartesian coordinates of vertex 1 of the triangle. + A containing the 3D Cartesian coordinates of vertex 2 of the triangle. + A containing the 3D Cartesian coordinates of vertex 3 of the triangle. + Barycentric coordinate b2, which expresses the weighting factor toward vertex 2 (specified in ). + Barycentric coordinate b3, which expresses the weighting factor toward vertex 3 (specified in ). + A new containing the 3D Cartesian coordinates of the specified point. + + + +Reverses the direction of a given vector. + + The vector to negate. + When the method completes, contains a vector facing in the opposite direction. + + + +Reverses the direction of a given vector. + + The vector to negate. + A vector facing in the opposite direction. + + + +Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + When the method completes, contains the scaled vector. + + + +Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + The scaled vector. + + + +Modulates a vector by another. + + The first vector to modulate. + The second vector to modulate. + When the moethod completes, contains the modulated vector. + + + +Modulates a vector by another. + + The first vector to modulate. + The second vector to modulate. + The modulated vector. + + + +Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + When the method completes, contains the scaled vector. + + + +Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + The scaled vector. + + + +Subtracts two vectors. + + The first vector to subtract. + The second vector to subtract. + When the method completes, contains the difference of the two vectors. + + + +Subtracts two vectors. + + The first vector to subtract. + The second vector to subtract. + The difference of the two vectors. + + + +Adds two vectors. + + The first vector to add. + The second vector to add. + When the method completes, contains the sum of the two vectors. + + + +Adds two vectors. + + The first vector to add. + The second vector to add. + The sum of the two vectors. + + + +Converts the vector into a unit vector. + + + + +Calculates the squared length of the vector. + + The squared length of the vector. + + + +Calculates the length of the vector. + + The length of the vector. + + + +Initializes a new instance of the class. + + Initial value for the X component of the vector. + Initial value for the Y component of the vector. + Initial value for the Z component of the vector. + + + +Initializes a new instance of the class. + + A vector containing the values with which to initialize the X and Y components + Initial value for the Z component of the vector. + + + +Initializes a new instance of the class. + + The value that will be assigned to all components. + + + +Gets the size of the type, in bytes. + + + + +Gets the Z unit (0, 0, 1). + + A that has a value of (0, 0, 1). + + + +Gets the Y unit (0, 1, 0). + + A that has a value of (0, 1, 0). + + + +Gets the X unit (1, 0, 0). + + A that has a value of (1, 0, 0). + + + +Gets a with all of its components set to zero. + + A that has all of its components set to zero. + + + +Gets or sets the Z component of the vector. + + The Z component of the vector. + + + +Gets or sets the Y component of the vector. + + The Y component of the vector. + + + +Gets or sets the X component of the vector. + + The X component of the vector. + + + +Defines a three component vector. + + D3DXVECTOR3 + + + +Creates an instance of the type that this is associated with, using the specified context, given a set of property values for the object. + + A that provides a format context. + An that specifies the type of array for which to get properties. + An array of type that is used as a filter. + A with the properties that are exposed for this data type, or a null reference (Nothing in Visual Basic) if there are no properties. + + + +Returns whether this object supports properties, using the specified context. + + A that provides a format context. + + true if GetProperties should be called to find the properties of this object; otherwise, false. + + + +Creates an instance of the type that this is associated with, using the specified context, given a set of property values for the object. + + A that provides a format context. + An of new property values. + An representing the given , or null if the object cannot be created. + + + +Returns whether changing a value on this object requires a call to System::ComponentModel::TypeConverter::CreateInstance(System::Collections::IDictionary^) +to create a new value, using the specified context. + + A that provides a format context. + + false if changing a property on this object requires a call to System.ComponentModel::TypeConverter::CreateInstance(System::Collections::IDictionary^) to create a new value; otherwise, false. + + + +Converts the given object to the type of this converter, using the specified context and culture information. + + A that provides a format context. + A . If null is passed, the current culture is assumed. + The to convert. + An that represents the converted value. + + + +Converts the given value object to the specified type, using the specified context and culture information. + + A that provides a format context. + A . If null is passed, the current culture is assumed. + The to convert. + A that represents the type you want to convert to. + An that represents the converted value. + + + +Returns whether this converter can convert an object of the given type to the type of this converter, using the specified context. + + A that provides a format context. + A System.Type that represents the type you want to convert from. + + true if this converter can perform the conversion; otherwise, false. + + + +Returns whether this converter can convert the object to the specified type, using the specified context. + + A that provides a format context. + A that represents the type you want to convert to. + + true if this converter can perform the conversion; otherwise, false. + + + +Initializes a new instance of the class. + + + + +Provides a type converter to convert objects to and from various +other representations. + + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Converts the value of the object to its equivalent string representation. + + The string representation of the value of this instance. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + The scaled vector. + + + +Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + The scaled vector. + + + +Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + The scaled vector. + + + +Reverses the direction of a given vector. + + The vector to negate. + A vector facing in the opposite direction. + + + +Subtracts two vectors. + + The first vector to subtract. + The second vector to subtract. + The difference of the two vectors. + + + +Adds two vectors. + + The first vector to add. + The second vector to add. + The sum of the two vectors. + + + +Returns a vector containing the smallest components of the specified vectors. + + The first source vector. + The second source vector. + When the method completes, contains an new vector composed of the largest components of the source vectors. + + + +Returns a vector containing the largest components of the specified vectors. + + The first source vector. + The second source vector. + A vector containing the largest components of the source vectors. + + + +Returns a vector containing the smallest components of the specified vectors. + + The first source vector. + The second source vector. + When the method completes, contains an new vector composed of the smallest components of the source vectors. + + + +Returns a vector containing the smallest components of the specified vectors. + + The first source vector. + The second source vector. + A vector containing the smallest components of the source vectors. + + + +Performs a normal transformation using the given . + + The normal vectors to transform. + The transformation . + The transformed normals. + + + +Performs a normal transformation using the given . + + The normal vector to transform. + The transformation . + When the method completes, contains the transformed normal. + + + +Performs a normal transformation using the given . + + The normal vector to transform. + The transformation . + The transformed normal. + + + +Performs a coordinate transformation using the given . + + The coordinate vectors to transform. + The transformation . + The transformed coordinates. + + + +Performs a coordinate transformation using the given . + + The coordinate vector to transform. + The transformation . + When the method completes, contains the transformed coordinates. + + + +Performs a coordinate transformation using the given . + + The coordinate vector to transform. + The transformation . + The transformed coordinates. + + + +Transforms an array of 2D vectors by the given rotation. + + The vectors to rotate. + The rotation to apply. + The transformed . + + + +Transforms a 2D vector by the given rotation. + + The vector to rotate. + The rotation to apply. + When the method completes, contains the transformed . + + + +Transforms a 2D vector by the given rotation. + + The vector to rotate. + The rotation to apply. + The transformed . + + + +Transforms an array of 2D vectors by the given . + + The source vectors. + The transformation . + The transformed s. + + + +Transforms a 2D vector by the given . + + The source vector. + The transformation . + When the method completes, contains the transformed . + + + +Transforms a 2D vector by the given . + + The source vector. + The transformation . + The transformed . + + + +Converts the vector into a unit vector. + + The vector to normalize. + When the method completes, contains the normalized vector. + + + +Converts the vector into a unit vector. + + The vector to normalize. + The normalized vector. + + + +Calculates the dot product of two vectors. + + First source vector. + Second source vector. + The dot product of the two vectors. + + + +Calculates the squared distance between two vectors. + + The first vector. + The second vector. + The squared distance between the two vectors. + Distance squared is the value before taking the square root. +Distance squared can often be used in place of distance if relative comparisons are being made. +For example, consider three points A, B, and C. To determine whether B or C is further from A, +compare the distance between A and B to the distance between A and C. Calculating the two distances +involves two square roots, which are computationally expensive. However, using distance squared +provides the same information and avoids calculating two square roots. + + + + +Calculates the distance between two vectors. + + The first vector. + The second vector. + The distance between the two vectors. + + + +Performs a cubic interpolation between two vectors. + + Start vector. + End vector. + Value between 0 and 1 indicating the weight of . + When the method completes, contains the cubic interpolation of the two vectors. + + + +Performs a cubic interpolation between two vectors. + + Start vector. + End vector. + Value between 0 and 1 indicating the weight of . + The cubic interpolation of the two vectors. + + + +Performs a linear interpolation between two vectors. + + Start vector. + End vector. + Value between 0 and 1 indicating the weight of . + When the method completes, contains the linear interpolation of the two vectors. + +This method performs the linear interpolation based on the following formula. +start + (end - start) * amount +Passing a value of 0 will cause to be returned; a value of 1 will cause to be returned. + + + + +Performs a linear interpolation between two vectors. + + Start vector. + End vector. + Value between 0 and 1 indicating the weight of . + The linear interpolation of the two vectors. + +This method performs the linear interpolation based on the following formula. +start + (end - start) * amount +Passing a value of 0 will cause to be returned; a value of 1 will cause to be returned. + + + + +Performs a Hermite spline interpolation. + + First source position vector. + First source tangent vector. + Second source position vector. + Second source tangent vector. + Weighting factor. + When the method completes, contains the result of the Hermite spline interpolation. + + + +Performs a Hermite spline interpolation. + + First source position vector. + First source tangent vector. + Second source position vector. + Second source tangent vector. + Weighting factor. + The result of the Hermite spline interpolation. + + + +Restricts a value to be within a specified range. + + The value to clamp. + The minimum value. + The maximum value. + When the method completes, contains the clamped value. + + + +Restricts a value to be within a specified range. + + The value to clamp. + The minimum value. + The maximum value. + The clamped value. + + + +Performs a Catmull-Rom interpolation using the specified positions. + + The first position in the interpolation. + The second position in the interpolation. + The third position in the interpolation. + The fourth position in the interpolation. + Weighting factor. + When the method completes, contains the result of the Catmull-Rom interpolation. + + + +Performs a Catmull-Rom interpolation using the specified positions. + + The first position in the interpolation. + The second position in the interpolation. + The third position in the interpolation. + The fourth position in the interpolation. + Weighting factor. + A vector that is the result of the Catmull-Rom interpolation. + + + +Returns a containing the 2D Cartesian coordinates of a point specified in Barycentric coordinates relative to a 2D triangle. + + A containing the 2D Cartesian coordinates of vertex 1 of the triangle. + A containing the 2D Cartesian coordinates of vertex 2 of the triangle. + A containing the 2D Cartesian coordinates of vertex 3 of the triangle. + Barycentric coordinate b2, which expresses the weighting factor toward vertex 2 (specified in ). + Barycentric coordinate b3, which expresses the weighting factor toward vertex 3 (specified in ). + When the method completes, contains the 2D Cartesian coordinates of the specified point. + + + +Returns a containing the 2D Cartesian coordinates of a point specified in Barycentric coordinates relative to a 2D triangle. + + A containing the 2D Cartesian coordinates of vertex 1 of the triangle. + A containing the 2D Cartesian coordinates of vertex 2 of the triangle. + A containing the 2D Cartesian coordinates of vertex 3 of the triangle. + Barycentric coordinate b2, which expresses the weighting factor toward vertex 2 (specified in ). + Barycentric coordinate b3, which expresses the weighting factor toward vertex 3 (specified in ). + A new containing the 2D Cartesian coordinates of the specified point. + + + +Reverses the direction of a given vector. + + The vector to negate. + When the method completes, contains a vector facing in the opposite direction. + + + +Reverses the direction of a given vector. + + The vector to negate. + A vector facing in the opposite direction. + + + +Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + When the method completes, contains the scaled vector. + + + +Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + The scaled vector. + + + +Modulates a vector by another. + + The first vector to modulate. + The second vector to modulate. + When the moethod completes, contains the modulated vector. + + + +Modulates a vector by another. + + The first vector to modulate. + The second vector to modulate. + The modulated vector. + + + +Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + When the method completes, contains the scaled vector. + + + +Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + The scaled vector. + + + +Subtracts two vectors. + + The first vector to subtract. + The second vector to subtract. + When the method completes, contains the difference of the two vectors. + + + +Subtracts two vectors. + + The first vector to subtract. + The second vector to subtract. + The difference of the two vectors. + + + +Adds two vectors. + + The first vector to add. + The second vector to add. + When the method completes, contains the sum of the two vectors. + + + +Adds two vectors. + + The first vector to add. + The second vector to add. + The sum of the two vectors. + + + +Converts the vector into a unit vector. + + + + +Calculates the squared length of the vector. + + The squared length of the vector. + + + +Calculates the length of the vector. + + The length of the vector. + + + +Initializes a new instance of the class. + + Initial value for the X component of the vector. + Initial value for the Y component of the vector. + + + +Initializes a new instance of the class. + + The value that will be assigned to all components. + + + +Gets the size of the type, in bytes. + + + + +Gets the Y unit (0, 1). + + A that has a value of (0, 1). + + + +Gets the X unit (1, 0). + + A that has a value of (1, 0). + + + +Gets a with all of its components set to zero. + + A that has all of its components set to zero. + + + +Gets or sets the Y component of the vector. + + The Y component of the vector. + + + +Gets or sets the X component of the vector. + + The X component of the vector. + + + +Defines a two component vector. + + D3DXVECTOR2 + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Converts the value of the object to its equivalent string representation. + + The string representation of the value of this instance. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + The scaled vector. + + + +Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + The scaled vector. + + + +Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + The scaled vector. + + + +Reverses the direction of a given vector. + + The vector to negate. + A vector facing in the opposite direction. + + + +Subtracts two vectors. + + The first vector to subtract. + The second vector to subtract. + The difference of the two vectors. + + + +Adds two vectors. + + The first vector to add. + The second vector to add. + The sum of the two vectors. + + + +Returns a vector containing the smallest components of the specified vectors. + + The first source vector. + The second source vector. + When the method completes, contains an new vector composed of the largest components of the source vectors. + + + +Returns a vector containing the largest components of the specified vectors. + + The first source vector. + The second source vector. + A vector containing the largest components of the source vectors. + + + +Returns a vector containing the smallest components of the specified vectors. + + The first source vector. + The second source vector. + When the method completes, contains an new vector composed of the smallest components of the source vectors. + + + +Returns a vector containing the smallest components of the specified vectors. + + The first source vector. + The second source vector. + A vector containing the smallest components of the source vectors. + + + +Transforms an array of 4D vectors by the given rotation. + + The vectors to rotate. + The rotation to apply. + The transformed . + + + +Transforms a 4D vector by the given rotation. + + The vector to rotate. + The rotation to apply. + When the method completes, contains the transformed . + + + +Transforms a 4D vector by the given rotation. + + The vector to rotate. + The rotation to apply. + The transformed . + + + +Transforms an array of 4D vectors by the given . + + The source vectors. + The transformation . + The transformed s. + + + +Transforms a 4D vector by the given . + + The source vector. + The transformation . + When the method completes, contains the transformed . + + + +Transforms a 4D vector by the given . + + The source vector. + The transformation . + The transformed . + + + +Converts the vector into a unit vector. + + The vector to normalize. + When the method completes, contains the normalized vector. + + + +Converts the vector into a unit vector. + + The vector to normalize. + The normalized vector. + + + +Calculates the dot product of two vectors. + + First source vector. + Second source vector. + The dot product of the two vectors. + + + +Calculates the squared distance between two vectors. + + The first vector. + The second vector. + The squared distance between the two vectors. + Distance squared is the value before taking the square root. +Distance squared can often be used in place of distance if relative comparisons are being made. +For example, consider three points A, B, and C. To determine whether B or C is further from A, +compare the distance between A and B to the distance between A and C. Calculating the two distances +involves two square roots, which are computationally expensive. However, using distance squared +provides the same information and avoids calculating two square roots. + + + + +Calculates the distance between two vectors. + + The first vector. + The second vector. + The distance between the two vectors. + + + +Performs a cubic interpolation between two vectors. + + Start vector. + End vector. + Value between 0 and 1 indicating the weight of . + When the method completes, contains the cubic interpolation of the two vectors. + + + +Performs a cubic interpolation between two vectors. + + Start vector. + End vector. + Value between 0 and 1 indicating the weight of . + The cubic interpolation of the two vectors. + + + +Performs a linear interpolation between two vectors. + + Start vector. + End vector. + Value between 0 and 1 indicating the weight of . + When the method completes, contains the linear interpolation of the two vectors. + +This method performs the linear interpolation based on the following formula. +start + (end - start) * amount +Passing a value of 0 will cause to be returned; a value of 1 will cause to be returned. + + + + +Performs a linear interpolation between two vectors. + + Start vector. + End vector. + Value between 0 and 1 indicating the weight of . + The linear interpolation of the two vectors. + +This method performs the linear interpolation based on the following formula. +start + (end - start) * amount +Passing a value of 0 will cause to be returned; a value of 1 will cause to be returned. + + + + +Performs a Hermite spline interpolation. + + First source position vector. + First source tangent vector. + Second source position vector. + Second source tangent vector. + Weighting factor. + When the method completes, contains the result of the Hermite spline interpolation. + + + +Performs a Hermite spline interpolation. + + First source position vector. + First source tangent vector. + Second source position vector. + Second source tangent vector. + Weighting factor. + The result of the Hermite spline interpolation. + + + +Restricts a value to be within a specified range. + + The value to clamp. + The minimum value. + The maximum value. + When the method completes, contains the clamped value. + + + +Restricts a value to be within a specified range. + + The value to clamp. + The minimum value. + The maximum value. + The clamped value. + + + +Performs a Catmull-Rom interpolation using the specified positions. + + The first position in the interpolation. + The second position in the interpolation. + The third position in the interpolation. + The fourth position in the interpolation. + Weighting factor. + When the method completes, contains the result of the Catmull-Rom interpolation. + + + +Performs a Catmull-Rom interpolation using the specified positions. + + The first position in the interpolation. + The second position in the interpolation. + The third position in the interpolation. + The fourth position in the interpolation. + Weighting factor. + A vector that is the result of the Catmull-Rom interpolation. + + + +Returns a containing the 4D Cartesian coordinates of a point specified in Barycentric coordinates relative to a 4D triangle. + + A containing the 4D Cartesian coordinates of vertex 1 of the triangle. + A containing the 4D Cartesian coordinates of vertex 2 of the triangle. + A containing the 4D Cartesian coordinates of vertex 3 of the triangle. + Barycentric coordinate b2, which expresses the weighting factor toward vertex 2 (specified in ). + Barycentric coordinate b3, which expresses the weighting factor toward vertex 3 (specified in ). + When the method completes, contains the 4D Cartesian coordinates of the specified point. + + + +Returns a containing the 4D Cartesian coordinates of a point specified in Barycentric coordinates relative to a 4D triangle. + + A containing the 4D Cartesian coordinates of vertex 1 of the triangle. + A containing the 4D Cartesian coordinates of vertex 2 of the triangle. + A containing the 4D Cartesian coordinates of vertex 3 of the triangle. + Barycentric coordinate b2, which expresses the weighting factor toward vertex 2 (specified in ). + Barycentric coordinate b3, which expresses the weighting factor toward vertex 3 (specified in ). + A new containing the 4D Cartesian coordinates of the specified point. + + + +Reverses the direction of a given vector. + + The vector to negate. + When the method completes, contains a vector facing in the opposite direction. + + + +Reverses the direction of a given vector. + + The vector to negate. + A vector facing in the opposite direction. + + + +Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + When the method completes, contains the scaled vector. + + + +Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + The scaled vector. + + + +Modulates a vector by another. + + The first vector to modulate. + The second vector to modulate. + When the moethod completes, contains the modulated vector. + + + +Modulates a vector by another. + + The first vector to modulate. + The second vector to modulate. + The modulated vector. + + + +Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + When the method completes, contains the scaled vector. + + + +Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + The scaled vector. + + + +Subtracts two vectors. + + The first vector to subtract. + The second vector to subtract. + When the method completes, contains the difference of the two vectors. + + + +Subtracts two vectors. + + The first vector to subtract. + The second vector to subtract. + The difference of the two vectors. + + + +Adds two vectors. + + The first vector to add. + The second vector to add. + When the method completes, contains the sum of the two vectors. + + + +Adds two vectors. + + The first vector to add. + The second vector to add. + The sum of the two vectors. + + + +Converts the vector into a unit vector. + + + + +Calculates the squared length of the vector. + + The squared length of the vector. + + + +Calculates the length of the vector. + + The length of the vector. + + + +Initializes a new instance of the class. + + Initial value for the X component of the vector. + Initial value for the Y component of the vector. + Initial value for the Z component of the vector. + Initial value for the W component of the vector. + + + +Initializes a new instance of the class. + + A vector containing the values with which to initialize the X, Y, and Z components + Initial value for the W component of the vector. + + + +Initializes a new instance of the class. + + A vector containing the values with which to initialize the X and Y components + Initial value for the Z component of the vector. + Initial value for the W component of the vector. + + + +Initializes a new instance of the class. + + The value that will be assigned to all components. + + + +Gets the size of the type, in bytes. + + + + +Gets the W unit (0, 0, 0, 1). + + A that has a value of (0, 0, 0, 1). + + + +Gets the Z unit (0, 0, 1, 0). + + A that has a value of (0, 0, 1, 0). + + + +Gets the Y unit (0, 1, 0, 0). + + A that has a value of (0, 1, 0, 0). + + + +Gets the X unit (1, 0, 0, 0). + + A that has a value of (1, 0, 0, 0). + + + +Gets a with all of its components set to zero. + + A that has all of its components set to zero. + + + +Gets or sets the W component of the vector. + + The W component of the vector. + + + +Gets or sets the Z component of the vector. + + The Z component of the vector. + + + +Gets or sets the Y component of the vector. + + The Y component of the vector. + + + +Gets or sets the X component of the vector. + + The X component of the vector. + + + +Defines a four component vector. + + D3DXVECTOR4 + + + +Creates an instance of the type that this is associated with, using the specified context, given a set of property values for the object. + + A that provides a format context. + An that specifies the type of array for which to get properties. + An array of type that is used as a filter. + A with the properties that are exposed for this data type, or a null reference (Nothing in Visual Basic) if there are no properties. + + + +Returns whether this object supports properties, using the specified context. + + A that provides a format context. + + true if GetProperties should be called to find the properties of this object; otherwise, false. + + + +Creates an instance of the type that this is associated with, using the specified context, given a set of property values for the object. + + A that provides a format context. + An of new property values. + An representing the given , or null if the object cannot be created. + + + +Returns whether changing a value on this object requires a call to System::ComponentModel::TypeConverter::CreateInstance(System::Collections::IDictionary^) +to create a new value, using the specified context. + + A that provides a format context. + + false if changing a property on this object requires a call to System::ComponentModel::TypeConverter::CreateInstance(System::Collections::IDictionary^) + + + +Converts the given object to the type of this converter, using the specified context and culture information. + + A that provides a format context. + A . If null is passed, the current culture is assumed. + The to convert. + An that represents the converted value. + + + +Converts the given value object to the specified type, using the specified context and culture information. + + A that provides a format context. + A . If null is passed, the current culture is assumed. + The to convert. + A that represents the type you want to convert to. + An that represents the converted value. + + + +Returns whether this converter can convert an object of the given type to the type of this converter, using the specified context. + + A that provides a format context. + A System::Type that represents the type you want to convert from. + + true if this converter can perform the conversion; otherwise, false. + + + +Returns whether this converter can convert the object to the specified type, using the specified context. + + A that provides a format context. + A that represents the type you want to convert to. + + true if this converter can perform the conversion; otherwise, false. + + + +Initializes a new instance of the class. + + + + +Provides a type converter to convert objects to and from various +other representations. + + + + +Creates an instance of the type that this is associated with, using the specified context, given a set of property values for the object. + + A that provides a format context. + An that specifies the type of array for which to get properties. + An array of type that is used as a filter. + A with the properties that are exposed for this data type, or a null reference (Nothing in Visual Basic) if there are no properties. + + + +Returns whether this object supports properties, using the specified context. + + A that provides a format context. + + true if GetProperties should be called to find the properties of this object; otherwise, false. + + + +Creates an instance of the type that this is associated with, using the specified context, given a set of property values for the object. + + A that provides a format context. + An of new property values. + An representing the given , or null if the object cannot be created. + + + +Returns whether changing a value on this object requires a call to System::ComponentModel::TypeConverter::CreateInstance(System::Collections::IDictionary^) +to create a new value, using the specified context. + + A that provides a format context. + + false if changing a property on this object requires a call to System::ComponentModel::TypeConverter::CreateInstance(System::Collections::IDictionary^) to create a new value; otherwise, false. + + + +Converts the given object to the type of this converter, using the specified context and culture information. + + A that provides a format context. + A . If null is passed, the current culture is assumed. + The to convert. + An that represents the converted value. + + + +Converts the given value object to the specified type, using the specified context and culture information. + + A that provides a format context. + A . If null is passed, the current culture is assumed. + The to convert. + A that represents the type you want to convert to. + An that represents the converted value. + + + +Returns whether this converter can convert an object of the given type to the type of this converter, using the specified context. + + A that provides a format context. + A System::Type that represents the type you want to convert from. + + true if this converter can perform the conversion; otherwise, false. + + + +Returns whether this converter can convert the object to the specified type, using the specified context. + + A that provides a format context. + A that represents the type you want to convert to. + + true if this converter can perform the conversion; otherwise, false. + + + +Initializes a new instance of the class. + + + + +Provides a type converter to convert objects to and from various +other representations. + + + + +Gets the value of the variable in raw bytes. + + The number of bytes to retrieve. + The raw data representing the value of the variable. + + + +Sets the value of the variable using raw bytes. + + The number of bytes to set. + A object describing the result of the operation. + + + +Gets information about the variable type. + + A type descriptor containing information about the variable type. + + + +Reinterprets the effect variable as a more specialized vector variable. + + The specialized effect variable. + + + +Reinterprets the effect variable as a more specialized unordered access view variable. + + The specialized effect variable. + + + +Reinterprets the effect variable as a more specialized string variable. + + The specialized effect variable. + + + +Reinterprets the effect variable as a more specialized shader variable. + + The specialized effect variable. + + + +Reinterprets the effect variable as a more specialized scalar variable. + + The specialized effect variable. + + + +Reinterprets the effect variable as a more specialized shader resource variable. + + The specialized effect variable. + + + +Reinterprets the effect variable as a more specialized sampler state variable. + + The specialized effect variable. + + + +Reinterprets the effect variable as a more specialized render target view variable. + + The specialized effect variable. + + + +Reinterprets the effect variable as a more specialized rasterizer-state variable. + + The specialized effect variable. + + + +Reinterprets the effect variable as a more specialized matrix variable. + + The specialized effect variable. + + + +Reinterprets the effect variable as a more specialized interface variable. + + The specialized effect variable. + + + +Reinterprets the effect variable as a more specialized depth-stencil view variable. + + The specialized effect variable. + + + +Reinterprets the effect variable as a more specialized depth-stencil-state variable. + + The specialized effect variable. + + + +Reinterprets the effect variable as a more specialized constant buffer variable. + + The specialized effect variable. + + + +Reinterprets the effect variable as a more specialized class instance variable. + + The specialized effect variable. + + + +Reinterprets the effect variable as a more specialized blend-state variable. + + The specialized effect variable. + + + +Get a structure member by semantic. + + The semantic of the structure member to retrieve. + The structure member with the given semantic. + + + +Get a structure member by name. + + The name of the structure member to retrieve. + The structure member with the given name. + + + +Get a structure member by index. + + The zero-based index of the structure member to retrieve. + The structure member at the specified index. + + + +Gets an element of an array variable. + + The zero-based index of the element to retrieve. + The element at the specified index in the array. + + + +Get an annotation by name. + + The name of the annotation to retrieve. + The annotation with the given name. + + + +Get an annotation by index. + + The zero-based index of the annotation to retrieve. + The annotation at the specified index. + + + +Gets the parent constant buffer for this variable. + + + + +Indicates whether the data type matches the data stored after casting to a specific interface. + + + + +Gets the effect variable's description. + + + + +Initializes a new instance of the class. + + A pointer to the unmanaged interface. + + + +Defines a base class for all effect variables. + + ID3DX11EffectVariable + + + +Indicates whether predication state is enabled by the mask. + + + + +Indicates whether stream output buffer state is enabled by the mask. + + + + +Indicates whether rasterizer state is enabled by the mask. + + + + +Indicates whether scissor rectangle state is enabled by the mask. + + + + +Indicates whether viewport state is enabled by the mask. + + + + +Indicates whether blend state is enabled by the mask. + + + + +Indicates whether depth-stencil state is enabled by the mask. + + + + +Indicates whether render target state is enabled by the mask. + + + + +Indicates whether primitive topology state is enabled by the mask. + + + + +Indicates whether input layout state is enabled by the mask. + + + + +Indicates whether index bufer state is enabled by the mask. + + + + +A set of values indicating which vertex buffers are enabled by the mask. + + + + +Indicates whether compute shader unordered access views are enabled by the mask. + + + + +A set of values indicating which compute shader interfaces are enabled by the mask. + + + + +A set of values indicating which compute shader constant buffers are enabled by the mask. + + + + +A set of values indicating which compute shader resources are enabled by the mask. + + + + +A set of values indicating which compute shader sampler states are enabled by the mask. + + + + +Indicates whether compute shader state is enabled by the mask. + + + + +Indicates whether pixel shader unordered access views are enabled by the mask. + + + + +A set of values indicating which pixel shader interfaces are enabled by the mask. + + + + +A set of values indicating which pixel shader constant buffers are enabled by the mask. + + + + +A set of values indicating which pixel shader resources are enabled by the mask. + + + + +A set of values indicating which pixel shader sampler states are enabled by the mask. + + + + +Indicates whether pixel shader state is enabled by the mask. + + + + +A set of values indicating which geometry shader interfaces are enabled by the mask. + + + + +A set of values indicating which geometry shader constant buffers are enabled by the mask. + + + + +A set of values indicating which geometry shader resources are enabled by the mask. + + + + +A set of values indicating which geometry shader sampler states are enabled by the mask. + + + + +Indicates whether geometry shader state is enabled by the mask. + + + + +A set of values indicating which domain shader interfaces are enabled by the mask. + + + + +A set of values indicating which domain shader constant buffers are enabled by the mask. + + + + +A set of values indicating which domain shader resources are enabled by the mask. + + + + +A set of values indicating which domain shader sampler states are enabled by the mask. + + + + +Indicates whether domain shader state is enabled by the mask. + + + + +A set of values indicating which hull shader interfaces are enabled by the mask. + + + + +A set of values indicating which hull shader constant buffers are enabled by the mask. + + + + +A set of values indicating which hull shader resources are enabled by the mask. + + + + +A set of values indicating which hull shader sampler states are enabled by the mask. + + + + +Indicates whether hull shader state is enabled by the mask. + + + + +A set of values indicating which vertex shader interfaces are enabled by the mask. + + + + +A set of values indicating which vertex shader constant buffers are enabled by the mask. + + + + +A set of values indicating which vertex shader resources are enabled by the mask. + + + + +A set of values indicating which vertex shader sampler states are enabled by the mask. + + + + +Indicates whether vertex shader state is enabled by the mask. + + + + +Indicates settings for various bits of device state. + + D3DX11_STATE_BLOCK_MASK + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +The element of Variable (if an array) or 0 if not applicable. + + + + +The variable that this shader came from. + + + + +Provides a description for an effect pass shader. + + D3DX11_PASS_SHADER_DESC + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +The per-component blend factors (RGBA) for the blend state. + + + + +The sample mask for the blend state. + + + + +The stencil-reference value used in the depth-stencil state. + + + + +Signature from the vertex shader or geometry shader (if there is no vertex shader) or null if neither exists. + + + + +Number of annotations on this pass. + + + + +The name of the pass. + + + + +Provides a description for effect passes. + + D3DX11_PASS_DESC + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Gets the raw data of the shader signature. + + + + +Extracts the input and output signatures from a compiled shader or effect. + + The bytecode of the compiled shader or effect. + The input and output signatures of the shader or effect. + + + +Extracts the output signature from a compiled shader or effect. + + The bytecode of the compiled shader or effect. + The output signature of the shader or effect. + + + +Extracts the input signature from a compiled shader or effect. + + The bytecode of the compiled shader or effect. + The input signature of the shader or effect. + + + +Releases all resources used by the . + + + + +Initializes a new instance of the class. + + A containing the raw bytes of the shader signature. + + + +Represents a shader signature. + + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Strips extraneous information from a compiled shader or effect. + + Options specifying what to remove from the shader. + The stripped shader bytecode. + + + +Disassembles compiled HLSL code back into textual source. + + Flags affecting the output of the disassembly. + Commenting information to embed in the disassembly. + The textual source of the shader or effect. + + + +Disassembles compiled HLSL code back into textual source. + + Flags affecting the output of the disassembly. + The textual source of the shader or effect. + + + +Disassembles compiled HLSL code back into textual source. + + The textual source of the shader or effect. + + + +Gets the raw data of the compiled bytecode. + + + + +Preprocesses a shader or effect from a file on disk. + + The name of the source file to compile. + A set of macros to define during preprocessing. + An interface for handling include files. + When the method completes, contains a string of compilation errors, or an empty string if preprocessing succeeded. + The preprocessed shader source. + + + +Preprocesses a shader or effect from a file on disk. + + The name of the source file to compile. + A set of macros to define during preprocessing. + An interface for handling include files. + The preprocessed shader source. + + + +Preprocesses a shader or effect from a file on disk. + + The name of the source file to compile. + The preprocessed shader source. + + + +Preprocesses the provided shader or effect source. + + An array of bytes containing the raw source of the shader or effect to preprocess. + A set of macros to define during preprocessing. + An interface for handling include files. + When the method completes, contains a string of compilation errors, or an empty string if preprocessing succeeded. + The preprocessed shader source. + + + +Preprocesses the provided shader or effect source. + + An array of bytes containing the raw source of the shader or effect to preprocess. + A set of macros to define during preprocessing. + An interface for handling include files. + The preprocessed shader source. + + + +Preprocesses the provided shader or effect source. + + An array of bytes containing the raw source of the shader or effect to preprocess. + The preprocessed shader source. + + + +Preprocesses the provided shader or effect source. + + A string containing the source of the shader or effect to preprocess. + A set of macros to define during preprocessing. + An interface for handling include files. + When the method completes, contains a string of compilation errors, or an empty string if preprocessing succeeded. + The preprocessed shader source. + + + +Preprocesses the provided shader or effect source. + + A string containing the source of the shader or effect to preprocess. + A set of macros to define during preprocessing. + An interface for handling include files. + The preprocessed shader source. + + + +Preprocesses the provided shader or effect source. + + A string containing the source of the shader or effect to preprocess. + The preprocessed shader source. + + + +Compiles a shader or effect from a file on disk. + + The name of the source file to compile. + The name of the shader entry-point function, or null for an effect file. + The shader target or set of shader features to compile against. + Shader compilation options. + Effect compilation options. + A set of macros to define during compilation. + An interface for handling include files. + When the method completes, contains a string of compilation errors, or an empty string if compilation succeeded. + The compiled shader bytecode, or null if the method fails. + + + +Compiles a shader or effect from a file on disk. + + The name of the source file to compile. + The name of the shader entry-point function, or null for an effect file. + The shader target or set of shader features to compile against. + Shader compilation options. + Effect compilation options. + A set of macros to define during compilation. + An interface for handling include files. + The compiled shader bytecode, or null if the method fails. + + + +Compiles a shader or effect from a file on disk. + + The name of the source file to compile. + The name of the shader entry-point function, or null for an effect file. + The shader target or set of shader features to compile against. + Shader compilation options. + Effect compilation options. + The compiled shader bytecode, or null if the method fails. + + + +Compiles a shader or effect from a file on disk. + + The name of the source file to compile. + The shader target or set of shader features to compile against. + Shader compilation options. + Effect compilation options. + A set of macros to define during compilation. + An interface for handling include files. + When the method completes, contains a string of compilation errors, or an empty string if compilation succeeded. + The compiled shader bytecode, or null if the method fails. + + + +Compiles a shader or effect from a file on disk. + + The name of the source file to compile. + The shader target or set of shader features to compile against. + Shader compilation options. + Effect compilation options. + A set of macros to define during compilation. + An interface for handling include files. + The compiled shader bytecode, or null if the method fails. + + + +Compiles a shader or effect from a file on disk. + + The name of the source file to compile. + The shader target or set of shader features to compile against. + Shader compilation options. + Effect compilation options. + The compiled shader bytecode, or null if the method fails. + + + +Compiles a shader or effect from a file on disk. + + The name of the source file to compile. + The shader target or set of shader features to compile against. + The compiled shader bytecode, or null if the method fails. + + + +Compiles the provided shader or effect source. + + An array of bytes containing the raw source of the shader or effect to compile. + The name of the shader entry-point function, or null for an effect file. + The shader target or set of shader features to compile against. + Shader compilation options. + Effect compilation options. + A set of macros to define during compilation. + An interface for handling include files. + The name of the source being compiled. This is only used for error reporting purposes. + When the method completes, contains a string of compilation errors, or an empty string if compilation succeeded. + The compiled shader bytecode, or null if the method fails. + + + +Compiles the provided shader or effect source. + + An array of bytes containing the raw source of the shader or effect to compile. + The name of the shader entry-point function, or null for an effect file. + The shader target or set of shader features to compile against. + Shader compilation options. + Effect compilation options. + A set of macros to define during compilation. + An interface for handling include files. + When the method completes, contains a string of compilation errors, or an empty string if compilation succeeded. + The compiled shader bytecode, or null if the method fails. + + + +Compiles the provided shader or effect source. + + An array of bytes containing the raw source of the shader or effect to compile. + The name of the shader entry-point function, or null for an effect file. + The shader target or set of shader features to compile against. + Shader compilation options. + Effect compilation options. + A set of macros to define during compilation. + An interface for handling include files. + The compiled shader bytecode, or null if the method fails. + + + +Compiles the provided shader or effect source. + + An array of bytes containing the raw source of the shader or effect to compile. + The name of the shader entry-point function, or null for an effect file. + The shader target or set of shader features to compile against. + Shader compilation options. + Effect compilation options. + The compiled shader bytecode, or null if the method fails. + + + +Compiles the provided shader or effect source. + + An array of bytes containing the raw source of the shader or effect to compile. + The shader target or set of shader features to compile against. + Shader compilation options. + Effect compilation options. + A set of macros to define during compilation. + An interface for handling include files. + The name of the source being compiled. This is only used for error reporting purposes. + When the method completes, contains a string of compilation errors, or an empty string if compilation succeeded. + The compiled shader bytecode, or null if the method fails. + + + +Compiles the provided shader or effect source. + + An array of bytes containing the raw source of the shader or effect to compile. + The shader target or set of shader features to compile against. + Shader compilation options. + Effect compilation options. + A set of macros to define during compilation. + An interface for handling include files. + When the method completes, contains a string of compilation errors, or an empty string if compilation succeeded. + The compiled shader bytecode, or null if the method fails. + + + +Compiles the provided shader or effect source. + + An array of bytes containing the raw source of the shader or effect to compile. + The shader target or set of shader features to compile against. + Shader compilation options. + Effect compilation options. + A set of macros to define during compilation. + An interface for handling include files. + The compiled shader bytecode, or null if the method fails. + + + +Compiles the provided shader or effect source. + + An array of bytes containing the raw source of the shader or effect to compile. + The shader target or set of shader features to compile against. + Shader compilation options. + Effect compilation options. + The compiled shader bytecode, or null if the method fails. + + + +Compiles the provided shader or effect source. + + An array of bytes containing the raw source of the shader or effect to compile. + The shader target or set of shader features to compile against. + The compiled shader bytecode, or null if the method fails. + + + +Compiles the provided shader or effect source. + + A string containing the source of the shader or effect to compile. + The name of the shader entry-point function, or null for an effect file. + The shader target or set of shader features to compile against. + Shader compilation options. + Effect compilation options. + A set of macros to define during compilation. + An interface for handling include files. + The name of the source being compiled. This is only used for error reporting purposes. + When the method completes, contains a string of compilation errors, or an empty string if compilation succeeded. + The compiled shader bytecode, or null if the method fails. + + + +Compiles the provided shader or effect source. + + A string containing the source of the shader or effect to compile. + The name of the shader entry-point function, or null for an effect file. + The shader target or set of shader features to compile against. + Shader compilation options. + Effect compilation options. + A set of macros to define during compilation. + An interface for handling include files. + When the method completes, contains a string of compilation errors, or an empty string if compilation succeeded. + The compiled shader bytecode, or null if the method fails. + + + +Compiles the provided shader or effect source. + + A string containing the source of the shader or effect to compile. + The name of the shader entry-point function, or null for an effect file. + The shader target or set of shader features to compile against. + Shader compilation options. + Effect compilation options. + A set of macros to define during compilation. + An interface for handling include files. + The compiled shader bytecode, or null if the method fails. + + + +Compiles the provided shader or effect source. + + A string containing the source of the shader or effect to compile. + The name of the shader entry-point function, or null for an effect file. + The shader target or set of shader features to compile against. + Shader compilation options. + Effect compilation options. + The compiled shader bytecode, or null if the method fails. + + + +Compiles the provided shader or effect source. + + A string containing the source of the shader or effect to compile. + The shader target or set of shader features to compile against. + Shader compilation options. + Effect compilation options. + A set of macros to define during compilation. + An interface for handling include files. + The name of the source being compiled. This is only used for error reporting purposes. + When the method completes, contains a string of compilation errors, or an empty string if compilation succeeded. + The compiled shader bytecode, or null if the method fails. + + + +Compiles the provided shader or effect source. + + A string containing the source of the shader or effect to compile. + The shader target or set of shader features to compile against. + Shader compilation options. + Effect compilation options. + A set of macros to define during compilation. + An interface for handling include files. + When the method completes, contains a string of compilation errors, or an empty string if compilation succeeded. + The compiled shader bytecode, or null if the method fails. + + + +Compiles the provided shader or effect source. + + A string containing the source of the shader or effect to compile. + The shader target or set of shader features to compile against. + Shader compilation options. + Effect compilation options. + A set of macros to define during compilation. + An interface for handling include files. + The compiled shader bytecode, or null if the method fails. + + + +Compiles the provided shader or effect source. + + A string containing the source of the shader or effect to compile. + The shader target or set of shader features to compile against. + Shader compilation options. + Effect compilation options. + The compiled shader bytecode, or null if the method fails. + + + +Compiles the provided shader or effect source. + + A string containing the source of the shader or effect to compile. + The shader target or set of shader features to compile against. + The compiled shader bytecode, or null if the method fails. + + + +Initializes a new instance of the class. + + A containing the compiled bytecode. + + + +Represents the compiled bytecode of a shader or effect. + + ID3D10Blob + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +The macro definition value. + + + + +The macro name. + + + + +Initializes a new instance of the struct. + + The macro name. + The macro definition value. + + + +Initializes a new instance of the struct. + + The macro name. + + + +Defines a shader macro. + + D3D10_SHADER_MACRO + + + +Closes an included file. + + The previously opened include stream. + + + +Opens and reads the contents of an included file. + + Flags specifying the type of the include file. + Name of the include file to open. + The parent include file. + When the method completes, contains a stream pointing to the include file. + + + +Specifies an interface for handling #include directives in shader or effect files. + + ID3DInclude + + + +Specifies tessellator partitioning options. + + D3D11_TESSELLATOR_PARTITIONING + + + +Partition with an even, fractional number. + + + + +Partition with an odd, fractional number. + + + + +Partition with a power-of-two number only. + + + + +Partition with integers only. + + + + +The partitioning type is undefined. + + + + +Specifies output primitive types for the tessellator. + + D3D11_TESSELLATOR_OUTPUT_PRIMITIVE + + + +The output primitive type is a counter clockwise triangle. + + + + +The output primitive type is a clockwise triangle. + + + + +The output primitive type is a line. + + + + +The output primitive type a point. + + + + +The output primitive type is undefined. + + + + +Specifies domain options for tessellator data. + + D3D11_TESSELLATOR_DOMAIN + + + +Quad data. + + + + +Triangle data. + + + + +Isoline data. + + + + +The data type is undefined. + + + + Identifies shader parameters that use system-value semantics. + D3D10_NAME + + + +This parameter contains the tessellation factor that corresponds to the amount of lines that are created within the patch. This flag is used to tessellate an isolines patch. + + + + +This parameter contains the tessellation factor that corresponds to the amount of lines broken into within the patch. This flag is used to tessellate an isolines patch. + + + + +This parameter contains the tessellation factor that corresponds to the amount of parts that a tri patch is broken into within the patch. +This flag is used to tessellate a tri patch. + + + + +This parameter contains one of three tessellation factors that correspond to the amount of parts that a tri patch is broken into +along the given edge. This flag is used to tessellate a tri patch. + + + + +This parameter contains one of two tessellation factors that correspond to the amount of parts that a quad patch is broken into vertically +and horizontally within the patch. This flag is used to tessellate a quad patch. + + + + +his parameter contains one of four tessellation factors that correspond to the amount of parts that a quad patch is broken into along +the given edge. This flag is used to tessellate a quad patch. + + + + +This parameter signifies that the value is less than or equal to a reference value. This flag is used to specify conservative depth for a pixel shader. + + + + +This parameter signifies that the value is greater than or equal to a reference value. This flag is used to specify conservative depth for a pixel shader. + + + + +This parameter contains alpha-coverage data. + + + + +This parameter contains depth data. + + + + +This parameter contains render-target data. + + + + +This parameter contains a sampler-array index. + + + + +This parameter contains data that identifies whether or not the primitive faces the camera. + + + + +This parameter contains a instance ID. + + + + +This parameter contains a primitive ID. + + + + +This parameter contains a vertex ID. + + + + +This parameter contains a viewport-array index. + + + + +This parameter contains a render-target-array index. + + + + +This parameter contains cull distance data. + + + + +This parameter contains clip-distance data. + + + + +This parameter contains position data. + + + + +This parameter does not use a predefined system-value semantic. + + + + +Specifies options for stripping data from a shader or effect. + + D3DCOMPILER_STRIP_FLAGS + + + +Remove test blob data. + + + + +Remove debug information. + + + + +Remove reflection data. + + + + +No extra stripping options. + + + + +Indicates possible shader types. + + D3D11_SHADER_VERSION_TYPE + + + +A compute shader. + + + + +A domain shader. + + + + +A hull shader. + + + + +A geometry shader. + + + + +A vertex shader. + + + + +A pixel shader. + + + + +Identifies possible shader variable types. + + D3D10_SHADER_VARIABLE_TYPE + + + +The variable is a consume structured buffer. + + + + +The variable is an append structured buffer. + + + + +The variable is a read and write structured buffer. + + + + +he variable is a structured buffer. + + + + +The variable is a read and write byte-address buffer. + + + + +The variable is a byte-address buffer. + + + + +The variable is a read and write buffer. + + + + +he variable is a 3D read and write texture. + + + + +The variable is an array of 2D read and write textures. + + + + +The variable is a 2D read and write texture. + + + + +The variable is an array of 1D read and write textures. + + + + +The variable is a 1D read and write texture. + + + + +The variable is a double precision (64-bit) floating-point number. + + + + +The variable holds a compiled compute-shader binary. + + + + +The variable is an interface. + + + + +The variable holds a compiled domain-shader binary. + + + + +The variable holds a compiled hull-shader binary. + + + + +The variable is a texture-cube array. + + + + +The variable is a 2D-multisampled-texture array. + + + + +The variable is a 2D-multisampled texture. + + + + +The variable is a depth-stencil view. + + + + +The variable is a render-target view. + + + + +The variable is a 2D-texture array. + + + + +The variable is a 1D-texture array. + + + + +The variable is a texture buffer. + + + + +The variable is a constant buffer. + + + + +The variable is a buffer. + + + + +The variable is a blend-state object. + + + + +The variable is a depth-stencil-state object. + + + + +The variable is a rasterizer-state object. + + + + +The variable is a geometry shader. + + + + +The variable is an 8-bit unsigned integer. + + + + +The variable is an unsigned integer. + + + + +The variable is a vertex shader. + + + + +The variable is a pixel shader. + + + + +The variable is a sampler. + + + + +The variable is a texture cube. + + + + +The variable is a 3D texture. + + + + +The variable is a 2D texture. + + + + +The variable is a 1D texture. + + + + +The variable is a texture. + + + + +The variable is a string. + + + + +The variable is a floating-point number. + + + + +The variable is an integer. + + + + +The variable is a boolean. + + + + +The variable is a void pointer. + + + + +Indicates additional information about a shader variable. + + D3D10_SHADER_VARIABLE_FLAGS + + + +Indicates that this variable is used by this shader. This value confirms that a particular shader variable +(which can be common to many different shaders) is indeed used by a particular shader. + + + + +Indicates that the registers assigned to this shader variable were explicitly declared in shader code (instead of automatically assigned by the compiler). + + + + +Identifies shader variable classes. + + D3D10_SHADER_VARIABLE_CLASS + + + +The shader variable is an interface pointer. + + + + +The shader variable is a class. + + + + +The shader variable is a structure. + + + + +The shader variable is an object. + + + + +The shader variable is a column-major matrix. + + + + +The shader variable is a row-major matrix. + + + + +The shader variable is a vector. + + + + +The shader variable is a scalar. + + + + +Identifies shader resource types. + + D3D10_SHADER_INPUT_TYPE + + + +The shader resource is a read and write structured buffer that uses the built-in counter to append or consume. + + + + +The shader resource is a consume-structured buffer. + + + + +The shader resource is an append-structured buffer. + + + + +The shader resource is a read and write byte-address buffer. + + + + +The shader resource is a byte-address buffer. + + + + +The shader resource is a read and write structured buffer. + + + + +The shader resource is a structure buffer. + + + + +The shader resource is a sampler. + + + + +The shader resource is a texture. + + + + +The shader resource is a texture buffer. + + + + +The shader resource is a constant buffer. + + + + +Identifies shader input options. + + D3D10_SHADER_INPUT_FLAGS + + + +A 2-bit value for encoding texture components. + + + + +A 2-bit value for encoding texture components. + + + + +A 2-bit value for encoding texture components. + + + + +Use a comparison sampler, which uses the SampleCmp and SampleCmpLevelZero sampling functions. + + + + +Assign a shader input to a register based on the register assignment in the HLSL code (instead of letting the compiler choose the register). + + + + Provides various shader compilation flags. + D3D10_SHADER + + + +Inform the HLSL compiler to treat all warnings as errors when compiling the shader code. For new shader code, you should use this +option so you can resolve all warnings and ensure the fewest possible hard-to-find code defects. + + + + +Highest optimization level. Will produce best possible code but may take significantly longer to do so. This will be useful for +final builds of an application where performance is the most important factor. + + + + +Second highest optimization level. + + + + +Second lowest optimization level. + + + + +Lowest optimization level. May produce slower code but will do so more quickly. This may be useful in a highly iterative shader development cycle. + + + + +Enables IEEE floating point strictness. + + + + +This enables older shaders to compile to 4_0 targets. + + + + +By default, the HLSL compiler disables strictness on deprecated syntax. Specifying this flag enables strictness which may not allow for legacy syntax. + + + + +Tells the compiler to use flow-control (when possible). + + + + +Tells the compiler to not allow flow-control (when possible). + + + + +Disables Preshaders. Using this flag will cause the compiler to not pull out static expression for evaluation. + + + + +Compile a pixel shader for the next highest shader profile. This option turns debugging on (and optimizations off). + + + + +Compile a vertex shader for the next highest shader profile. This option turns debugging on (and optimizations off). + + + + +Force all computations to be done with partial precision; this may run faster on some hardware. + + + + +Unless explicitly specified, matrices will be packed in column-major order on input and output from the shader. This is generally +more efficient, since it allows vector-matrix multiplication to be performed using a series of dot-products. + + + + +Unless explicitly specified, matrices will be packed in row-major order on input and output from the shader. + + + + +Skip optimization during code generation; generally recommended for debug only. + + + + +Do not validate the generated code against known capabilities and constraints. Only use this with shaders that have been successfully +compiled in the past. Shaders are always validated by DirectX before they are set to the device. + + + + +Insert debug file/line/type/symbol information into the resulting shader. + + + + +No specific compilation options. + + + + +Indicates return value types. + + D3D11_RESOURCE_RETURN_TYPE + + + +Return type is a multiple-dword type, such as a double or uint64, and the component is continued from the +previous component that was declared. The first component represents the lower bits. + + + + +Return type of double precision floating point value. + + + + +Return type is unknown. + + + + +Return type of single precision floating point value. + + + + +Return type of unsigned integer. + + + + +Return type of signed integer. + + + + +Return type of signed normalized integer. + + + + +Return type of unsigned normalized integer. + + + + Defines possible register component types. + D3D10_REGISTER_COMPONENT_TYPE + + + +32-bit floating-point number. + + + + +32-bit signed integer. + + + + +32-bit unsigned integer. + + + + +Unknown data type. + + + + +Flags that indicate which components of a value are valid. + + + + +Indicates that all components are valid. + + + + +Indicates that the W (or A) component is valid. + + + + +Indicates that the Z (or B) component is valid. + + + + +Indicates that the Y (or G) component is valid. + + + + +Indicates that the X (or R) component is valid. + + + + +Indicates that no components are valid. + + + + +Indicates how the pipeline interprets geometry or hull shader input primitives. + + D3D11_PRIMITIVE + + + +Interpret the input primitive as a control point patch with 32 control points. + + + + +Interpret the input primitive as a control point patch with 31 control points. + + + + +Interpret the input primitive as a control point patch with 30 control points. + + + + +Interpret the input primitive as a control point patch with 29 control points. + + + + +Interpret the input primitive as a control point patch with 28 control points. + + + + +Interpret the input primitive as a control point patch with 27 control points. + + + + +Interpret the input primitive as a control point patch with 26 control points. + + + + +Interpret the input primitive as a control point patch with 25 control points. + + + + +Interpret the input primitive as a control point patch with 24 control points. + + + + +Interpret the input primitive as a control point patch with 23 control points. + + + + +Interpret the input primitive as a control point patch with 22 control points. + + + + +Interpret the input primitive as a control point patch with 21 control points. + + + + +Interpret the input primitive as a control point patch with 20 control points. + + + + +Interpret the input primitive as a control point patch with 19 control points. + + + + +Interpret the input primitive as a control point patch with 18 control points. + + + + +Interpret the input primitive as a control point patch with 17 control points. + + + + +Interpret the input primitive as a control point patch with 16 control points. + + + + +Interpret the input primitive as a control point patch with 15 control points. + + + + +Interpret the input primitive as a control point patch with 14 control points. + + + + +Interpret the input primitive as a control point patch with 13 control points. + + + + +Interpret the input primitive as a control point patch with 12 control points. + + + + +Interpret the input primitive as a control point patch with 11 control points. + + + + +Interpret the input primitive as a control point patch with ten control points. + + + + +Interpret the input primitive as a control point patch with nine control points. + + + + +Interpret the input primitive as a control point patch with eight control points. + + + + +Interpret the input primitive as a control point patch with seven control points. + + + + +Interpret the input primitive as a control point patch with six control points. + + + + +Interpret the input primitive as a control point patch with five control points. + + + + +Interpret the input primitive as a control point patch with four control points. + + + + +Interpret the input primitive as a control point patch with three control points. + + + + +Interpret the input primitive as a control point patch with two control points. + + + + +Interpret the input primitive as a control point patch with one control point. + + + + +Interpret the input primitive as a triangle with adjacency data. + + + + +Interpret the input primitive as a line with adjacency data. + + + + +Interpret the input primitive as a triangle. + + + + +Interpret the input primitive as a line. + + + + +Interpret the input primitive as a point. + + + + +The shader has not been initialized with an input primitive type. + + + + +Flags that indicate the location of an include file. + + D3D10_INCLUDE_TYPE + + + +Indicates that the include is in the system path (or paths). + + + + +Indicates that the include is in the local path (or paths). + + + + Specifies compile- or run-time options during effect creation. + D3D10_EFFECT + + + +Do not attempt to synchronize with other threads loading effects into the same pool. + + + + +Allow mutable state objects (non-literal expressions may appear in state object definitions). This +has a negative impact on run-time performance. + + + + +Compile the .fx file to a child effect. Child effects do not initialize shared values +(as those values are instead initialized by the effect pool). + + + + +Standard compile- and run-time behavior. + + + + +Specifies flags that affect the output of shader disassembly. + + + + +Enable instruction numbering. + + + + +Enable the output of default values. + + + + +Enable the output of color codes. + + + + +No specific flags specified. + + + + +Indicates a constant buffer's type. + + D3D11_CBUFFER_TYPE + + + +A buffer containing binding information. + + + + +A buffer containing interface pointers. + + + + +A buffer containing texture data. + + + + +A buffer containing scalar constants. + + + + +Generate a mask for state changes during the pass. + + The created state block mask. + + + +Set the state contained in a pass to the device. + + The device context to use to set the state. + A object describing the result of the operation. + + + +Get an annotation by name. + + The name of the annotation to retrieve. + The annotation with the given name. + + + +Get an annotation by index. + + The zero-based index of the annotation to retrieve. + The annotation at the specified index. + + + +Initializes a new instance of the class. + + A pointer to the unmanaged interface. + + + +Gets a description for the pass's compute shader. + + + + +Gets a description for the pass's domain shader. + + + + +Gets a description for the pass's hull shader. + + + + +Gets a description for the pass's pixel shader. + + + + +Gets a description for the pass's vertex shader. + + + + +Gets a description for the pass's geometry shader. + + + + +Indicates whether the pass represents a valid interface. + + + + +Gets the effect pass's description. + + + + +Encapsulates state assignments within a technique. + + ID3DX11EffectPass + + + +Gets the device's compute shader interface. + + + + +Gets the device's hull shader interface. + + + + +Gets the device's domain shader interface. + + + + +Gets the device's geometry shader interface. + + + + +Gets the device's pixel shader interface. + + + + +Gets the device's vertex shader interface. + + + + +Gets the device's rasterizer interface. + + + + +Gets the device's stream output interface. + + + + +Gets the device's output merger interface. + + + + +Gets the device's input assembler interface. + + + + +Gets the type of the device context. + + + + +Sets a rendering predicate. + + The predicate to set. + If true, rendering will be affected when the predicate's conditions are met. Otherwise, +rendering will be affected when the predicate's conditions are not met. + + + +Releases a previously mapped resource. + + The resource to unmap. + Index of the subresource to unmap. + + + +Maps a GPU resource into CPU-accessible memory. + + The resource to map. + Index of the subresource level to lock. + Specifies the CPU's read and write permissions for the resource. + Flags that specify what the CPU should do when the GPU is busy. + The mapped resource data. + + + +Maps a GPU resource into CPU-accessible memory. + + The resource to map. + Specifies the CPU's read and write permissions for the resource. + Flags that specify what the CPU should do when the GPU is busy. + The mapped resource data. + + + +Maps a GPU resource into CPU-accessible memory. + + The resource to map. + A zero-based index into an array of subtextures; 0 indicates the first, most detailed subtexture (or mipmap level). + The zero-based index of the first texture to use (in an array of textures). + Specifies the CPU's read and write permissions for the resource. + Flags that specify what the CPU should do when the GPU is busy. + The mapped resource data. + + + +Maps a GPU resource into CPU-accessible memory. + + The resource to map. + A zero-based index into an array of subtextures; 0 indicates the first, most detailed subtexture (or mipmap level). + The zero-based index of the first texture to use (in an array of textures). + Specifies the CPU's read and write permissions for the resource. + Flags that specify what the CPU should do when the GPU is busy. + The mapped resource data. + + + +Maps a GPU resource into CPU-accessible memory. + + The resource to map. + A zero-based index into an array of subtextures; 0 indicates the first, most detailed subtexture (or mipmap level). + The zero-based index of the first texture to use (in an array of textures). + Specifies the CPU's read and write permissions for the resource. + Flags that specify what the CPU should do when the GPU is busy. + The mapped resource data. + + + +Gets the rendering predicate state. + + When the method completes, contains the predicate interface currently in use. + When the method completes, contains the predicate comparison value. + + + +Gets data from the GPU asynchronously. + + The asynchronous data provider. + Flags specifying how the command should operate. + The data retrieved from the GPU. + + + +Gets data from the GPU asynchronously. + + The asynchronous data provider. + The data retrieved from the GPU. + + + +Gets data from the GPU asynchronously. + + The asynchronous data provider. + Flags specifying how the command should operate. + The data retrieved from the GPU. + + + +Gets data from the GPU asynchronously. + + The asynchronous data provider. + The data retrieved from the GPU. + + + +Determines if data is available for an asynchronous object. + + The asynchronous data provider. + Flags specifying how the command should operate. + + true if query data is available for retrieval; otherwise, false. + + + +Determines if data is available for an asynchronous object. + + The asynchronous data provider. + + true if query data is available for retrieval; otherwise, false. + + + +Sets the minimum level-of-detail for a resource. + + The resource for which level-of-detail information is to be set. + The level-of-detail for the resource. + + + +Gets the minimum level-of-detail for a resource. + + The resource for which level-of-detail information is to be retrieved. + The minimum level-of-detail for the specified resource. + + + +Generates mipmaps for the specified shader resource. + + A view of the resource for which to generate mipmaps. + + + +Sends queued commands in the command buffer to the GPU. + + + + +Create a command list and record graphics commands into it. + + A flag indicating whether the immediate context state is saved (prior) and restored (after) the execution of a command list. + The created command list containing the queued rendering commands. + + + +Queues commands from a command list onto a device. + + The list of commands to execute. + A flag indicating whether the immediate context state is saved (prior) and restored (after) the execution of a command list. + + + +Marks the end of a series of asynchronous commands. + + An asynchronous data provider. + + + +Renders primitive data of an unknown size that was created by a geometry shader. + + + + +Renders indexed, instanced, GPU-generated primitive data. + + A buffer containing arguments for the draw call. + A byte-aligned offset between the start of the buffer and the arguments. + + + +Renders indexed, instanced primitive data. + + The number of indices to use per instance. + The number of instances to render. + The index of the first index. + The index of the first vertex. + The index of the first instance. + + + +Renders indexed, non-instanced primitive data. + + The number of indices to use. + The index of the first index. + The index of the first vertex. + + + +Renders non-indexed, instanced, GPU-generated primitive data. + + A buffer containing arguments for the draw call. + A byte-aligned offset between the start of the buffer and the arguments. + + + +Renders non-indexed, instanced primitive data. + + The number of vertices to use per instance. + The number of instances to render. + The index of the first vertex. + The index of the first instance. + + + +Renders non-indexed, non-instanced primitive data. + + The number of vertices to use. + The index of the first vertex. + + + +Execute a command list to draw GPU-generated primitives over one of more thread groups. + + A buffer containing arguments for the thread groups. + A byte-aligned offset between the start of the buffer and the arguments. + + + +Executes a command list from a thread group. + + The number of groups dispatched in the x direction. + The number of groups dispatched in the y direction. + The number of groups dispatched in the z direction. + + + +Copies data from the CPU to to a non-mappable subresource region. + + The source data. + The destination resource. + The destination subresource. + The destination region within the resource. + + + +Copies data from the CPU to to a non-mappable subresource region. + + The source data. + The destination resource. + The destination subresource. + + + +Copies a multisampled resource into a non-multisampled resource. + + The source resource. + The source subresource. + The destination resource. + The destination subresource. + The format that indicates how the multisampled resource will be resolved. + + + +Copies an entire region of a resource's subresource data using the GPU. + + The source resource. + The source subresource. + The destination resource. + The destination subresource. + The X offset between the source region origin and the destination location. + The Y offset between the source region origin and the destination location. + The Z offset between the source region origin and the destination location. + + + +Copies a portion of a resource's data using the GPU. + + The source resource. + The source subresource. + The source region. + The destination resource. + The destination subresource. + The X offset between the source region origin and the destination location. + The Y offset between the source region origin and the destination location. + The Z offset between the source region origin and the destination location. + + + +Copies data from a buffer holding variable length data. + + The view of the source resource. + The destination buffer. + Aligned byte offset from the start of the destination buffer to which data will be copied. + + + +Copies resource data using the GPU. + + The source resource. + The destination resource. + + + +Clears an unordered access resource with the given values. + + The view of the resource to clear. + Values that will be copied to corresponding channels on the resource. + + + +Clears an unordered access resource with the given values. + + The view of the resource to clear. + Values that will be copied to corresponding channels on the resource. + + + +Restores all device state to defaults. + + + + +Clears the specified render target resource. + + The view of the resource to clear. + The color to clear to. + + + +Clears the specified depth-stencil resource. + + The view of the resource to clear. + Flags indicating which parts of the resource to clear. + The depth value to clear to, if applicable. + The stencil value to clear to, if applicable. + + + +Marks the beginning of a series of asynchronous commands. + + An asynchronous data provider. + + + +Initializes a new instance of the class. This instance will be a deferred rendering context. + + The device used to create the context. + + + Represents a device context which generates rendering commands. + ID3D11DeviceContext + + + Identifies the type of the resource that will be viewed. + D3D11_UAV_DIMENSION + + + +The resource will be accessed as a 3D texture. + + + + +The resource will be accessed as an array of 2D textures. + + + + +The resource will be accessed as a 2D texture. + + + + +The resource will be accessed as an array of 1D textures. + + + + +The resource will be accessed as a 1D texture. + + + + +The resource will be accessed as a buffer. + + + + +The type of the resource is unknown. + + + + Specifies unordered-access-view buffer options. + D3D11_BUFFER_UAV_FLAG + + + +Adds a counter to the unordered-access-view buffer. + + + + +Allow data to be appended to the end of the buffer. + + + + +Resource contains raw, unstructured data. + + + + +No specific flags specified. + + + + Identifies techniques for resolving texture coordinates that are outside of the boundaries of a texture. + D3D11_TEXTURE_ADDRESS_MODE + + + +Similar to Mirror and Clamp. Takes the absolute value of the texture coordinate (thus, mirroring around 0), and then +clamps to the maximum value. + + + + +Texture coordinates outside the range [0.0, 1.0] are set to the border color. + + + + +Texture coordinates outside the range [0.0, 1.0] are set to the texture color at 0.0 or 1.0, respectively. + + + + +Flip the texture at every (u,v) integer junction. For u values between 0 and 1, for example, the texture is addressed normally; +between 1 and 2, the texture is flipped (mirrored); between 2 and 3, the texture is normal again; and so on. + + + + +Tile the texture at every (u,v) integer junction. For example, for u values between 0 and 3, the texture is repeated three times. + + + + Specifies the stencil operations that can be performed during depth-stencil testing. + D3D11_STENCIL_OP + + + +Decrement the stencil value by 1, and wrap the result if necessary. + + + + +Increment the stencil value by 1, and wrap the result if necessary. + + + + +Invert the stencil data. + + + + +Decrement the stencil value by 1, and clamp the result. + + + + +Increment the stencil value by 1, and clamp the result. + + + + +Set the stencil data to the reference value. + + + + +Set the stencil data to 0. + + + + +Keep the existing stencil data. + + + + Specifies shader resource view extended buffer options. + D3D11_BUFFEREX_SRV_FLAG + + + +Resource contains raw, unstructured data. + + + + +No specific flags specified. + + + + Identifies the type of the resource that will be viewed. + D3D11_SRV_DIMENSION + + + +The resource will be accessed as an extended buffer. + + + + +The resource will be accessed as an array of cube textures. + + + + +The resource will be accessed as a cube texture. + + + + +The resource will be accessed as a 3D texture. + + + + +The resource will be accessed as an array of 2D textures with multisampling. + + + + +The resource will be accessed as a 2D texture with multisampling. + + + + +The resource will be accessed as an array of 2D textures. + + + + +The resource will be accessed as a 2D texture. + + + + +The resource will be accessed as an array of 1D textures. + + + + +The resource will be accessed as a 1D texture. + + + + +The resource will be accessed as a buffer. + + + + +The type of the resource is unknown. + + + + Identifies the operation for a scan. + D3DX11_SCAN_OPCODE + + + +The operation is XOR. + + + + +The operation is or. + + + + +The operation is and. + + + + +The operation is mul. + + + + +The operation is max. + + + + +The operation is min. + + + + +The operation is add. + + + + Identifies the direction of scanning. + D3DX11_SCAN_DIRECTION + + + +The direction is backward. + + + + +The direction is forward. + + + + Identifies the type for scan data. + D3DX11_SCAN_DATA_TYPE + + + +The type of the scan is uint. + + + + +The type of the scan is int. + + + + +The type of the scan is float. + + + + +Identifies expected resource use during rendering. The usage directly reflects whether a resource is +accessible by the CPU and/or the GPU. + + D3D11_USAGE + + + +A resource that supports data transfer (copy) from the GPU to the CPU. + + + + +A resource that is accessible by both the GPU (read only) and the CPU (write only). A dynamic resource is a good choice +for a resource that will be updated by the CPU at least once per frame. There are two ways to update a dynamic resource: +if your data is laid exactly the way the resource stores it, use DeviceContext.UpdateSubresource, otherwise, use a Map method. + + + + +A resource that can only be read by the GPU. It cannot be written by the GPU, and cannot be accessed at all by the CPU. +This type of resource must be initialized when it is created, since it cannot be changed after creation. + + + + +A resource that requires read and write access by the GPU. This is likely to be the most common usage choice. + + + + Identifies other, less common options for resources. + D3D11_RESOURCE_MISC_FLAG + + + +Renders a resource compatible with GDI. + + + + +Enables a resource as a keyed mutex. + + + + +Enables a resource with a clamped depth bias. + + + + +Enables a resource as a structured buffer. + + + + +Enables a resource as a byte address buffer. + + + + +Enables instancing of GPU-generated content. + + + + +Enables a resource to be a cube texture created from a Texture2DArray that contains 6 textures. + + + + +Enables resource data sharing between two or more Direct3D devices. The only resources that can be shared are 2D non-mipmapped textures. + + + + +Enables mipmap generation on a texture resource. The resource must be created with the bind flags that specify that the +resource is a render target and a shader resource. + + + + +No additional options specified. + + + + Identifies the type of resource being used. + D3D11_RESOURCE_DIMENSION + + + +Resource is a 3D texture. + + + + +Resource is a 2D texture. + + + + +Resource is a 1D texture. + + + + +Resource is a buffer. + + + + +Resource is of unknown type. + + + + +Options for the amount of information returned about live device objects. + + D3D11_RLDO_FLAGS + + + +Gives a detailed report of the device information. + + + + +Reports only a summary of the device information. + + + + Identifies the type of resource that will be viewed as a render target. + D3D11_RTV_DIMENSION + + + +The resource will be accessed as a 3D texture. + + + + +The resource will be accessed as an array of 2D textures with multisampling. + + + + +The resource will be accessed as a 2D texture with multisampling. + + + + +The resource will be accessed as an array of 2D textures. + + + + +The resource will be accessed as a 2D texture. + + + + +The resource will be accessed as an array of 1D textures. + + + + +The resource will be accessed as a 1D texture. + + + + +The resource will be accessed as a buffer. + + + + +Defines possible query types. + + D3D11_QUERY + + + +Determines whether or not any of the streaming output buffers overflowed in between DeviceContext.Begin and DeviceContext.End. +DeviceContext.GetData returns a boolean; true meaning there was an overflow, and false meaning there was not an overflow. +If streaming output writes to multiple buffers, and one of the buffers overflows, then it will stop writing to all the output buffers. +When an overflow is detected by Direct3D it is prevented from happening - no memory is corrupted. This predication may be used +in conjunction with a StreamOutputStatistics query so that when an overflow occurs the query will let the application know how +much memory was needed to prevent an overflow. + + + + +Get streaming output statistics, such as the number of primitives streamed out in between DeviceContext.Begin and DeviceContext.End. +DeviceContext.GetData will return a structure. + + + + +Similar to an occlusion query, except DeviceContext.GetData returns a boolean indicating whether or not any samples passed + + + + +Get pipeline statistics, such as the number of pixel shader invocations in between DeviceContext.Begin and DeviceContext.End. +DeviceContext.GetData will return a instance. + + + + +Determines whether or not a Timestamp query is returning reliable values, and also gives the frequency of the processor +enabling you to convert the number of elapsed ticks into seconds. DeviceContext.GetData will return a instance. +This type of query should only be invoked once per frame or less. + + + + +Get a timestamp value where DeviceContext.GetData returns a long. This kind of query is only useful if two timestamp queries +are done in the middle of a TimestampDisjoint query. The difference of two timestamps can be used to determine how many +ticks have elapsed, and the TimestampDisjoint query will determine if that difference is a reliable value and also +has a value that shows how to convert the number of ticks into seconds. When using this type of query, +DeviceContext.Begin is disabled. + + + + +Get the number of samples that passed the depth and stencil tests in between DeviceContext.Begin and DeviceContext.End. +DeviceContext.GetData returns a long. If a depth or stencil test is disabled, then each of those tests will be counted as a pass. + + + + +Determines whether or not the GPU is finished processing commands. When the GPU is finished processing commands +DeviceContext.GetData will return success, and the result will be a boolean with a value of true. +When using this type of query, DeviceContext.Begin is disabled. + + + + +Specifies flags for describing query options and behavior. + + D3D11_QUERY_MISC_FLAG + + + +Tell the hardware that if it is not yet sure if something is hidden or not to draw it anyway. This is only used with +an occlusion predicate. Predication data cannot be returned to your application +via DeviceContext.GetData when using this flag. + + + + +No particular flags specified. + + + + Specifies how the pipeline should interpret vertex data bound to the input assembler stage. + D3D11_PRIMITIVE_TOPOLOGY + + + +Interpret the vertex data as a patch list with 32 control points. + + + + +Interpret the vertex data as a patch list with 31 control points. + + + + +Interpret the vertex data as a patch list with 30 control points. + + + + +Interpret the vertex data as a patch list with 29 control points. + + + + +Interpret the vertex data as a patch list with 28 control points. + + + + +Interpret the vertex data as a patch list with 27 control points. + + + + +Interpret the vertex data as a patch list with 26 control points. + + + + +Interpret the vertex data as a patch list with 25 control points. + + + + +Interpret the vertex data as a patch list with 24 control points. + + + + +Interpret the vertex data as a patch list with 23 control points. + + + + +Interpret the vertex data as a patch list with 22 control points. + + + + +Interpret the vertex data as a patch list with 21 control points. + + + + +Interpret the vertex data as a patch list with 20 control points. + + + + +Interpret the vertex data as a patch list with 19 control points. + + + + +Interpret the vertex data as a patch list with 18 control points. + + + + +Interpret the vertex data as a patch list with 17 control points. + + + + +Interpret the vertex data as a patch list with 16 control points. + + + + +Interpret the vertex data as a patch list with 15 control points. + + + + +Interpret the vertex data as a patch list with 14 control points. + + + + +Interpret the vertex data as a patch list with 13 control points. + + + + +Interpret the vertex data as a patch list with 12 control points. + + + + +Interpret the vertex data as a patch list with 11 control points. + + + + +Interpret the vertex data as a patch list with 10 control points. + + + + +Interpret the vertex data as a patch list with 9 control points. + + + + +Interpret the vertex data as a patch list with 8 control points. + + + + +Interpret the vertex data as a patch list with 7 control points. + + + + +Interpret the vertex data as a patch list with 6 control points. + + + + +Interpret the vertex data as a patch list with 5 control points. + + + + +Interpret the vertex data as a patch list with 4 control points. + + + + +Interpret the vertex data as a patch list with 3 control points. + + + + +Interpret the vertex data as a patch list with 2 control points. + + + + +Interpret the vertex data as a patch list with 1 control point. + + + + +Interpret the vertex data as triangle strip with adjacency data. + + + + +Interpret the vertex data as list of triangles with adjacency data. + + + + +Interpret the vertex data as line strip with adjacency data. + + + + +Interpret the vertex data as list of lines with adjacency data. + + + + +Interpret the vertex data as a triangle strip. + + + + +Interpret the vertex data as a list of triangles. + + + + +Interpret the vertex data as a line strip. + + + + +Interpret the vertex data as a list of lines. + + + + +Interpret the vertex data as a list of points. + + + + +The IA stage has not been initialized with a primitive topology. The IA stage will not function properly unless a primitive topology is defined. + + + + +Normal maps generation constants. + + D3DX11_NORMALMAP_FLAG + + + +Computes the per-pixel occlusion term and encodes it into the alpha. An alpha of 1 means that the +pixel is not obscured in any way, and an alpha of 0 means that the pixel is completely obscured. + + + + +Inverts the direction of each normal. + + + + +Same as specifying the MirrorU and MirrorV flags. + + + + +Indicates that pixels off the edge of the texture on the v-axis should be mirrored, not wrapped. + + + + +Indicates that pixels off the edge of the texture on the u-axis should be mirrored, not wrapped. + + + + +Specifies debug message severity levels for an information queue. + + D3D11_MESSAGE_SEVERITY + + + +The message contains generic debug information. + + + + +The message indicates that a warning has occurred. + + + + +The message indicates that an error has occurred. + + + + +The message indicates that some type of corruption has occured. + + + + +Specifies various categories of debug messages. + + D3D11_MESSAGE_CATEGORY + + + +The message pertains to application execution. + + + + +The message pertains to resource manipulation. + + + + +The message pertains to the getting of state. + + + + +The message pertains to the setting of state. + + + + +The message pertains to state creation. + + + + +The message pertains to compilation. + + + + +The message pertains to cleanup. + + + + +The message pertains to initialization. + + + + +The message is contains miscellaneous information. + + + + +The message is a custom application-defined message. + + + + Identifies modes in which a resource can be accessed by the CPU. + D3D11_MAP + + + +Resource is mapped for writing; the existing contents of the resource cannot be overwritten. This flag is only valid on +vertex and index buffers. The resource must have been created with write access. + + + + +Resource is mapped for writing; the previous contents of the resource will be undefined. The resource must have been created with write access. + + + + +Resource is mapped for reading and writing. The resource must have been created with read and write access. + + + + +Resource is mapped for writing. The resource must have been created with write access. + + + + +Resource is mapped for reading. The resource must have been created with read access. + + + + Specifies how the CPU should respond when Map() is called on a resource being used by the GPU. + D3D11_MAP_FLAG + + + +Do not wait for the resource to become available. The map method will return WasStillRendering when the GPU blocks the CPU from +accessing a resource. + + + + +Wait for the resource to become available. + + + + Specifies possible types of data contained in an input slot. + D3D11_INPUT_CLASSIFICATION + + + +Input data is per-instance data. + + + + +Input data is per-vertex data. + + + + Specifies image file formats supported by runtime. + D3DX11_IMAGE_FILE_FORMAT + + + +Windows Media Player format (WMP). + + + + +Graphics Interchange Format (GIF). + + + + +Tagged Image File Format (TIFF). + + + + +DirectDraw surface (DDS) file format. Stores textures, volume textures, and cubic environment maps, with or without +mipmap levels, and with or without pixel compression. + + + + +Portable Network Graphics (PNG) file format. A non-proprietary bitmap format using lossless compression. + + + + +Joint Photographic Experts Group (JPEG) compressed file format. Specifies variable compression of 24-bit RGB color +and 8-bit gray-scale Tagged Image File Format (TIFF) image document files. + + + + +Windows bitmap (BMP) file format. Contains a header that describes the resolution of the device on which the +rectangle of pixels was created, the dimensions of the rectangle, the size of the array of bits, a logical palette, +and an array of bits that defines the relationship between pixels in the bitmapped image and entries in the logical palette. + + + + Identifies which resources are supported for a given format and given device. + D3D11_FORMAT_SUPPORT + + + +The format can be used with the HLSL "gather" and "compare" functions. + + + + +The format can be used for an unordered access view. + + + + +The format supports casting when the resource is used as a back buffer. + + + + +The intrinsic HLSL "gather" function is supported. Available in Direct3D 10.1 or higher. + + + + +The format can be used as a multisample texture and read into a shader with the HLSL "load" function. + + + + +The format can be used as a multisample render target. + + + + +The format can be cast to another format. + + + + +The format can be displayed on screen. + + + + +Multisampling resolution is supported. + + + + +CPU locking is supported. + + + + +Depth-stencil surfaces are supported. + + + + +Blend operations are supported. + + + + +Rendertargets are supported. + + + + +Automatic generation of mipmaps is supported. + + + + +Mipmaps are supported. + + + + +The intrinsic HLSL "samplecmp" and "samplecmplevelzero" are supported. + + + + +The intrinsic HLSL "sample" function is supported. + + + + +The intrinsic HLSL "load" function is supported. + + + + +Cube textures are supported. + + + + +3D textures are supported. + + + + +2D textures are supported. + + + + +1D textures are supported. + + + + +Streaming output buffers are supported. + + + + +Index buffers are supported. + + + + +Vertex buffers are supported. + + + + +Buffer resources are supported. + + + + +No features are supported. + + + + Specifies possible texture filtering flags. + D3DX11_FILTER_FLAG + + + +Combines the StandardRgbIn and StandardRgbOut flags. + + + + +Output data is in standard RGB (sRGB) color space. + + + + +Input data is in standard RGB (sRGB) color space. + + + + +Do diffuse dithering on the image when changing from one format to another. + + + + +The resulting image must be dithered using a 4x4 ordered dither algorithm. This happens when converting from one format to another. + + + + +Combines the MirrorU, MirrorV, and MirrorW flags. + + + + +Pixels off the edge of the texture on the w-axis should be mirrored, not wrapped. + + + + +Pixels off the edge of the texture on the v-axis should be mirrored, not wrapped. + + + + +Pixels off the edge of the texture on the u-axis should be mirrored, not wrapped. + + + + +Each pixel is computed by averaging a 2x2(x2) box of pixels from the source image. This filter works only when the +dimensions of the destination are half those of the source, as is the case with mipmaps. + + + + +Every pixel in the source image contributes equally to the destination image. This is the slowest of the filters. + + + + +Each destination pixel is computed by sampling the four nearest pixels from the source image. This filter +works best when the scale on both axes is less than two. + + + + +Each destination pixel is computed by sampling the nearest pixel from the source image. + + + + +No scaling or filtering will take place. Pixels outside the bounds of the source image are assumed to be transparent black. + + + + Specifies filtering options used during texture sampling. + D3D11_FILTER + + + +Use anisotropic interpolation for minification, magnification, and mip-level sampling. Compare the result to the comparison value. + + + + +Use linear interpolation for minification, magnification, and mip-level sampling. Compare the result to the comparison value. + + + + +Use linear interpolation for minification and magnification; use point sampling for mip-level sampling. Compare the result to the comparison value. + + + + +Use linear interpolation for minification; use point sampling for magnification; use linear interpolation for mip-level sampling. Compare the result to the comparison value. + + + + +Use linear interpolation for minification; use point sampling for magnification and mip-level sampling. Compare the result to the comparison value. + + + + +Use point sampling for minification; use linear interpolation for magnification and mip-level sampling. Compare the result to the comparison value. + + + + +Use point sampling for minification; use linear interpolation for magnification; use point sampling for mip-level sampling. Compare the result to the comparison value. + + + + +Use point sampling for minification and magnification; use linear interpolation for mip-level sampling. +Compare the result to the comparison value. + + + + +Use point sampling for minification, magnification, and mip-level sampling. Compare the result to the comparison value. + + + + +Use anisotropic interpolation for minification, magnification, and mip-level sampling. + + + + +Use linear interpolation for minification, magnification, and mip-level sampling. + + + + +Use linear interpolation for minification and magnification; use point sampling for mip-level sampling. + + + + +Use linear interpolation for minification; use point sampling for magnification; use linear interpolation for mip-level sampling. + + + + +Use linear interpolation for minification; use point sampling for magnification and mip-level sampling. + + + + +Use point sampling for minification; use linear interpolation for magnification and mip-level sampling. + + + + +Use point sampling for minification; use linear interpolation for magnification; use point sampling for mip-level sampling. + + + + +Use point sampling for minification and magnification; use linear interpolation for mip-level sampling. + + + + +Use point sampling for minification, magnification, and mip-level sampling. + + + + Determines the fill mode to use when rendering triangles. + D3D11_FILL_MODE + + + +Fill the triangles formed by the vertices. Adjacent vertices are not drawn. + + + + +Draw lines connecting the vertices. Adjacent vertices are not drawn. + + + + Describes the set of features targeted by a Direct3D device. + D3D_FEATURE_LEVEL + + + +Targets features supported by Direct3D 9.3 including shader shader model 3. + + + + +Targets features supported by Direct3D 9.2 including shader shader model 2. + + + + +Targets features supported by Direct3D 9.1 including shader shader model 2. + + + + +Targets features supported by Direct3D 10.1 including shader shader model 4. + + + + +Targets features supported by Direct3D 10.0 including shader shader model 4. + + + + +Targets features supported by Direct3D 11.0 including shader shader model 5. + + + + Identifies device features that can be queried for support. + D3D11_FEATURE + + + +The device supports compute shaders along with raw and structured buffers via shader 4.X. + + + + +The device supports the use of doubles in HLSL. + + + + Specifies detailed information about effect variables. + D3DX11_EFFECT_VARIABLE + + + +Indicates the variable has been explicitly bound using the register keyword in the effect code. + + + + +Indicates that the variable is an annotation or global. + + + + +Standard effect variable. + + + + Specifies possible driver types. + D3D_DRIVER_TYPE + + + +A WARP driver, which is a high-performance software rasterizer. The rasterizer supports all current feature levels +(level 9.1 through level 10.1) with a high performance software implementation when hardware is not available. + + + + +A software driver, which is a driver implemented completely in software. The software implementation is not intended +for a high-performance application due to its very slow performance. + + + + +A NULL driver, which is a reference driver without render capability. This driver is commonly used for debugging +non-rendering API calls, it is not appropriate for retail applications. This driver is installed by the DirectX SDK. + + + + +A reference driver, which is a software implementation that supports every Direct3D feature. A reference driver is designed +for accuracy rather than speed and as a result is slow but accurate. The rasterizer portion of the driver does make use of special +CPU instructions whenever it can, but it is not intended for retail applications; use it only for feature testing, demonstration +of functionality, debugging, or verifying bugs in other drivers. This driver is installed by the DirectX SDK. +This driver may be referred to as a REF driver, a reference driver or a reference rasterizer. + + + + +A hardware driver, which implements Direct3D features in hardware. This is the primary driver that you should use +in your Direct3D applications because it provides the best performance. A hardware driver uses hardware acceleration +(on supported hardware) but can also use software for parts of the pipeline that are not supported in hardware. This driver +type is often referred to as a hardware abstraction layer or HAL. + + + + +The driver type is unknown. + + + + Describes parameters that are used to create a device. + D3D11_CREATE_DEVICE_FLAG + + + +Prevents multiple threads from being created. This flag is not recommended for general use. + + + + +Creates a device that supports the debug layer. + + + + +Use this flag if an application will only be calling D3D11 from a single thread. If this flag is not specified, the default +behavior of D3D11 is to enter a lock during each API call to prevent multiple threads altering internal state. By using this flag +no locks will be taken which can slightly increase performance, but could result in undefine behavior if D3D11 is called from +multiple threads. + + + + +Indicates no specific behavior. + + + + Specifies possible device context types. + D3D11_DEVICE_CONTEXT_TYPE + + + +The device context is a deferred context. + + + + +The device context is an immediate context. + + + + Identifies the portion of a depth-stencil buffer for writing depth data. + D3D11_DEPTH_WRITE_MASK + + + +Turn on writes to the depth-stencil buffer. + + + + +Turn off writes to the depth-stencil buffer. + + + + Specifies how to access a resource used in a depth-stencil view. + D3D11_DSV_DIMENSION + + + +The resource will be accessed as an array of 2D textures with multisampling. + + + + +The resource will be accessed as a 2D texture with multisampling. + + + + +The resource will be accessed as an array of 2D textures. + + + + +The resource will be accessed as a 2D texture. + + + + +The resource will be accessed as an array of 1D textures. + + + + +The resource will be accessed as a 1D texture. + + + + +The resource will be accessed according to its type as determined from the actual instance this enumeration is +paired with when the depth-stencil view is created. + + + + Specifies the parts of the depth stencil surface to clear. + D3D11_CLEAR_FLAG + + + +Clear the stencil buffer. + + + + +Clear the depth buffer. + + + + +Contains debug features that can be enabled and disabled. + + D3D11_DEBUG_FEATURE + + + +Runtime will call SwapChain.Present. Presentation of render buffers will occur according to the settings established by prior calls +to Debug.SwapChain and Debug.PresentDelay. + + + + +Runtime will additionally call DeviceContext.Flush. + + + + +Application will wait for the GPU to finish processing the rendering operation before continuing. + + + + Specifies possible culling modes. + D3D11_CULL_MODE + + + +Do not draw triangles that are back-facing. + + + + +Do not draw triangles that are front-facing. + + + + +Always draw all triangles. + + + + Specifies the types of CPU access allowed for a resource. + D3D11_CPU_ACCESS_FLAG + + + +The resource is to be mappable so that the CPU can read its contents. Resources created with this flag cannot be set as either +inputs or outputs to the pipeline and must be created with staging usage. + + + + +The resource is to be mappable so that the CPU can change its contents. Resources created with this flag cannot be set as +outputs of the pipeline and must be created with either dynamic or staging usage. + + + + +Indicates no specific behavior. + + + + Defines data types for performance counters. + D3D11_COUNTER_TYPE + + + +64-bit unsigned integer counter. + + + + +32-bit unsigned integer counter. + + + + +16-bit unsigned integer counter. + + + + +32-bit floating point counter. + + + + Specifies possible performance counter types. + D3D11_COUNTER + + + +A performance counter that is dependent on a hardware device. + + + + Specifies unordered resource support options for a compute shader resource. + D3D11_FORMAT_SUPPORT2 + + + +Format supports a typed store. + + + + +Format supports a typed load. + + + + +Format supports atomic unsigned min and max. + + + + +Format supports atomic min and max. + + + + +Format supports atomic exchange. + + + + +Format supports atomic compare with store or exchange. + + + + +Format supports atomic bitwise operations. + + + + +Format supports atomic add. + + + + +No specific options supported. + + + + Specifies possible comparison functions. + D3D11_COMPARISON_FUNC + + + +Always pass the comparison. + + + + +Pass the comparison if the source data is greater than or equal to the destination data. + + + + +Pass the comparison if the source data is not equal to the destination data. + + + + +Pass the comparison if the source data is greater than the destination data. + + + + +Pass the comparison if the source data is less than or equal to the destination data. + + + + +Pass the comparison if the source data is equal to the destination data. + + + + +Pass the comparison if the source data is less than the destination data. + + + + +Never pass the comparison. + + + + Identifies which components of each pixel of a render target are writable during blending. + D3D11_COLOR_WRITE_ENABLE + + + +Allow data to be stored in all components. + + + + +Allow data to be stored in the alpha component. + + + + +Allow data to be stored in the blue component. + + + + +Allow data to be stored in the green component. + + + + +Allow data to be stored in the red component. + + + + +Indicates no specific behavior. + + + + +The following flags are used to specify which channels in a texture to operate on. + + D3DX11_CHANNEL_FLAG + + + +Indicates the luminances of the red, green, and blue channels should be used. + + + + +Indicates the alpha channel should be used. + + + + +Indicates the green channel should be used. + + + + +Indicates the blue channel should be used. + + + + +Indicates the red channel should be used. + + + + Blend options. A blend option identifies the data source and an optional pre-blend operation. + D3D11_BLEND + + + +The data sources are both alpha data from a pixel shader. The pre-blend operation inverts the data, generating 1 - A. This option supports dual-source blending. + + + + +The data sources are both alpha data from a pixel shader. No pre-blend operation. This option supports dual-source blending. + + + + +The data sources are both color data from a pixel shader. The pre-blend operation inverts the data, generating 1 - RGB. This option supports dual-source blending. + + + + +The data sources are both color data from a pixel shader. No pre-blend operation. This option supports dual-source blending. + + + + +The data source is the blend factor set in the output-merger blend state. The pre-blend operation inverts the data, generating 1 - blend_factor. + + + + +The data source is the blend factor set in the output-merger blend state. No pre-blend operation. + + + + +The data source is alpha data from a pixel shader. The pre-blend operation clamps the data to 1 or less. + + + + +The data source is color data from a render target. The pre-blend operation inverts the data, generating 1 - RGB. + + + + +The data source is color data from a render target. No pre-blend operation. + + + + +The data source is alpha data from a render target. The pre-blend operation inverts the data, generating 1 - A. + + + + +The data source is alpha data from a render target. No pre-blend operation. + + + + +The data source is alpha data from a pixel shader. The pre-blend operation inverts the data, generating 1 - A. + + + + +The data source is alpha data from a pixel shader. No pre-blend operation. + + + + +The data source is color data from a pixel shader. The pre-blend operation inverts the data, generating 1 - RGB. + + + + +The data source is color data from a pixel shader. No pre-blend operation. + + + + +The data source is the color white (1, 1, 1, 1). No pre-blend operation. + + + + +The data source is the color black (0, 0, 0, 0). No pre-blend operation. + + + + RGB or alpha blending operation. + D3D11_BLEND_OP + + + +Find the maximum of source 1 and source 2. + + + + +Find the minimum of source 1 and source 2. + + + + +Subtract source 2 from source 1. + + + + +Subtract source 1 from source 2. + + + + +Add source 1 and source 2. + + + + Identifies how to bind a resource to the pipeline. + D3D11_BIND_FLAG + + + +Indicates the resource can be bound as an unordered access resource. + + + + +Indicates the resource can be bound to the output-merger stage as a depth-stencil target. + + + + +Indicates the resource can be bound to the output-merger stage as a render target. + + + + +Indicates the resource can be bound to the stream-output stage as an output buffer. + + + + +Indicates the resource can be bound to the shader stage as a buffer or texture. +Note that it is invalid to specify this flag and subsequently map the resource +using MapMode.WriteNoOverwrite. + + + + +Indicates the resource can be bound to the shader stage as a constant buffer + + + + +Indicates the resource can be bound to the input-assembler stage as an index buffer + + + + +Indicates the resource can be bound to the input-assembler stage as a vertex buffer. + + + + +Indicates no specific behavior. + + + + Optional flags that control the behavior of Asynchronous.GetData. + D3D11_ASYNC_GETDATA_FLAG + + + +Indicates the command buffer should not be flushed. +Note that this can cause an infinite loop if GetData() is called repeatedly until +returning successfully: there may still be commands in the buffer than need +to be processed in order for GetData() to return successfully. Since the buffer +will not be flushed, those commands will not be processed and GetData() will never +return successfully. + + + + +Indicates no specific behavior. + + + + +Gets or sets a friendly debug name for the object. This name is used in debug messages +as well as in the PIX object browser. + + + + +Gets the device to which the object is bound. + + + + +An object that is bound to a device. + + ID3D11DeviceChild + + + +Gets the containing the actual data bytes. + + + + +Gets or sets the number of bytes of data between two consecutive (2D) slices of data. + + + + +Gets or sets the number of bytes of data between two consecutive (1D) rows of data. + + + + +Initializes a new instance of the class. + + The row pitch, in bytes. + The slice pitch, in bytes. + The data. + + + +A DataBox provides supporting information for a whose +data is organized within three dimensions (a box). + + None + + + +Determines whether the specified object instances are considered equal. + + + + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Converts the value of the object to its equivalent string representation. + + The string representation of the value of this instance. + + + +Performs an implicit conversion from to . + + The value to be converted. + The converted value. + + + +Performs an implicit conversion from to . + + The value to be converted. + The converted value. + + + +Performs an explicit conversion from to . + + The value to be converted. + The converted value. + + + +Performs an explicit conversion from to . + + The value to be converted. + The converted value. + + + +Performs an explicit conversion from to . + + The value to be converted. + The converted value. + + + +Performs an explicit conversion from to . + + The value to be converted. + The converted value. + + + +Performs an explicit conversion from to . + + The value to be converted. + The converted value. + + + +Performs an explicit conversion from to . + + The value to be converted. + The converted value. + + + +Performs an explicit conversion from to . + + The value to be converted. + The converted value. + + + +Performs an explicit conversion from to . + + The value to be converted. + The converted value. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Modulates two colors. + + The first color to modulate. + The second color to modulate. + The modulation of the two colors. + + + +Scales a color by the specified amount. + + The color to scale. + The amount by which to scale. + The scaled color. + + + +Scales a color by the specified amount. + + The color to scale. + The amount by which to scale. + The scaled color. + + + +Negates a color. + + The color to negate. + The negated color. + + + +Subtracts two colors. + + The first color to subtract. + The second color to subtract. + The difference between the two colors. + + + +Adds two colors. + + The first color to add. + The second color to add. + The sum of the two colors. + + + +Adjusts the saturation of a color. + + The color whose saturation is to be adjusted. + The amount by which to adjust the saturation. + When the method completes, contains the adjusted color. + + + +Adjusts the saturation of a color. + + The color whose saturation is to be adjusted. + The amount by which to adjust the saturation. + The adjusted color. + + + +Adjusts the contrast of a color. + + The color whose contrast is to be adjusted. + The amount by which to adjust the contrast. + When the method completes, contains the adjusted color. + + + +Adjusts the contrast of a color. + + The color whose contrast is to be adjusted. + The amount by which to adjust the contrast. + The adjusted color. + + + +Scales a color by the specified amount. + + The color to scale. + The amount by which to scale. + When the method completes, contains the scaled color. + + + +Scales a color by the specified amount. + + The color to scale. + The amount by which to scale. + The scaled color. + + + +Negates a color. + + The color to negate. + When the method completes, contains the negated color. + + + +Negates a color. + + The color to negate. + The negated color. + + + +Performs a linear interpolation between two colors. + + Start color. + End color. + Value between 0 and 1 indicating the weight of . + When the method completes, contains the linear interpolation of the two colors. + +This method performs the linear interpolation based on the following formula. +color1 + (color2 - color1) * amount +Passing a value of 0 will cause to be returned; a value of 1 will cause to be returned. + + + + +Performs a linear interpolation between two colors. + + Start color. + End color. + Value between 0 and 1 indicating the weight of . + The linear interpolation of the two colors. + +This method performs the linear interpolation based on the following formula. +color1 + (color2 - color1) * amount +Passing a value of 0 will cause to be returned; a value of 1 will cause to be returned. + + + + +Modulates two colors. + + The first color to modulate. + The second color to modulate. + When the method completes, contains the modulation of the two colors. + + + +Modulates two colors. + + The first color to modulate. + The second color to modulate. + The modulation of the two colors. + + + +Subtracts two colors. + + The first color to subtract. + The second color to subtract. + When the method completes, contains the difference between the two colors. + + + +Subtracts two colors. + + The first color to subtract. + The second color to subtract. + The difference between the two colors. + + + +Adds two colors. + + The first color to add. + The second color to add. + When the method completes, contains the sum of the two colors. + + + +Adds two colors. + + The first color to add. + The second color to add. + The sum of the two colors. + + + +Converts the color into a four component vector. + + A four component vector containing all four color components. + + + +Converts the color into a three component vector. + + A three component vector containing the red, green, and blue components of the color. + + + +Converts the color into a packed integer. + + A packed integer containing all four color components. + + + +Converts the color to a . + + The that is equivalent to this instance. + + + +Converts the color to a a 3 component (RGB) color. + + The 3 component (RGB) color that is equivalent to this instance, without the alpha channel. + + + +Initializes a new instance of the structure. + + A packed integer containing all four color components. + + + +Initializes a new instance of the structure. + + The color whose components should be converted. + + + +Initializes a new instance of the structure. + + The color whose components should be converted. + + + +Initializes a new instance of the structure. + + The color whose components should be converted. + + + +Initializes a new instance of the structure. + + The color whose components should be converted. + + + +Initializes a new instance of the structure. + + The red component of the color. + The green component of the color. + The blue component of the color. + + + +Initializes a new instance of the structure. + + The alpha component of the color. + The red component of the color. + The green component of the color. + The blue component of the color. + + + +Gets or sets the color's alpha component. + + + + +Gets or sets the color's blue component. + + + + +Gets or sets the color's green component. + + + + +Gets or sets the color's red component. + + + + +A four-component (RGBA) color value; each component is a float in the range [0,1]. + + + + +Creates an instance of the type that this is associated with, using the specified context, given a set of property values for the object. + + A that provides a format context. + An that specifies the type of array for which to get properties. + An array of type that is used as a filter. + A with the properties that are exposed for this data type, or a null reference (Nothing in Visual Basic) if there are no properties. + + + +Returns whether this object supports properties, using the specified context. + + A that provides a format context. + + true if GetProperties should be called to find the properties of this object; otherwise, false. + + + +Creates an instance of the type that this is associated with, using the specified context, given a set of property values for the object. + + A that provides a format context. + An of new property values. + An representing the given , or null if the object cannot be created. + + + +Returns whether changing a value on this object requires a call to System::ComponentModel::TypeConverter::CreateInstance(System::Collections::IDictionary^) +to create a new value, using the specified context. + + A that provides a format context. + + false if changing a property on this object requires a call to System::ComponentModel::TypeConverter::CreateInstance(System::Collections::IDictionary^) + + + +Converts the given object to the type of this converter, using the specified context and culture information. + + A that provides a format context. + A . If null is passed, the current culture is assumed. + The to convert. + An that represents the converted value. + + + +Converts the given value object to the specified type, using the specified context and culture information. + + A that provides a format context. + A . If null is passed, the current culture is assumed. + The to convert. + A that represents the type you want to convert to. + An that represents the converted value. + + + +Returns whether this converter can convert an object of the given type to the type of this converter, using the specified context. + + A that provides a format context. + A System::Type that represents the type you want to convert from. + + true if this converter can perform the conversion; otherwise, false. + + + +Returns whether this converter can convert the object to the specified type, using the specified context. + + A that provides a format context. + A that represents the type you want to convert to. + + true if this converter can perform the conversion; otherwise, false. + + + +Initializes a new instance of the class. + + + + +Provides a type converter to convert objects to and from various +other representations. + + + + +Constructs a new exception object. + + The result code that caused this exception. + + + +Constructs a new exception object. + + The message describing the exception. + The exception that caused this exception. + + + +Constructs a new exception object. + + The message describing the exception. + + + +Constructs a new exception object. + + + + +Represents errors that occur in the Direct3D 11 subsystem. + + + + +Gets the adapter's extended description. + + + + +Represents a display subsystem (one or more GPUs, DACs, and video memory). + + IDXGIAdapter1 + + + +Converts the value of the object to its equivalent string representation. + + The string representation of the value of this instance. + + + +Determines if a device interface for a graphics component is supported by the adapter. + + The device interface type. + Receives the user-mode driver version of the interface. + + true if the device interface is supported; otherwise, false. + + + +Determines if a device interface for a graphics component is supported by the adapter. + + The device interface type. + + true if the device interface is supported; otherwise, false. + + + +Gets the specified output. + + The desired output, or null on failure. + + + +Gets the number of outputs on the adapter. + + The number of outputs on the adapter. + + + +Gets the adapter's description. + + + + +Represents a display subsystem (one or more GPUs, DACs, and video memory). + + IDXGIAdapter + + + +Gets a value indicating the possible need to re-enumerate adapters -- new adapter(s) have become available, current adapter(s) have become unavailable. + + + + +Gets the adapter at the specified index. + + The index of the desired adapter. + The specified adapter, or null on failure. + + + +Gets the number of available adapters, including remote adapters and those without visible outputs. + + The total number of available adapters. + + + +Initializes a new instance of the class. + + + + +Implements methods for generating DXGI objects. + + IDXGIFactory1 + + + +Sets the window handle associated with the factory (the window through which the user signals fullscreen transitions). + + The window handle. + Flags controlling window association behavior. + A object describing the result of the operation. + + + +Gets the window handle associated with the factory (the window through which the user signals fullscreen transitions). + + The window handle. + + + +Creates a software adapater interface. + + The module for the software adapter DLL. + The specified adapter, or null on failure. + + + +Creates a software adapter interface. + + The unmanaged HMODULE for the software adapter DLL. + The specified adapter, or null on failure. + + + +Gets the specified adapter. + + The index of the desired adapter. + The specified adapter, or null on failure. + + + +Gets the number of available adapters. + + The number of available adapters. + + + +Initializes a new instance of the class. + + + + +Implements methods for generating DXGI objects. + + IDXGIFactory + + + +Gets or sets a friendly debug name for the object. This name is used in debug messages +as well as in the PIX object browser. + + + + +Gets the parent of the object. + + The type of the parent object. + + + +Base class for all DXGI objects + + + + +Specifies values which control a swap chain's window association behavior. + + + + Not Supported below DirectX 11. + + + Not Supported below DirectX 11. + + + Not Supported below DirectX 11. + + + Not Supported below DirectX 11. + + + Not Supported below DirectX 11. + + + Not Supported below DirectX 11. + + + Not Supported below DirectX 11. + + + Not Supported below DirectX 11. + + + Not Supported below DirectX 11. + + + Not Supported below DirectX 11. + + + Not Supported below DirectX 11. + + + +Initializes a new instance of the class. + + The result code that caused this exception. + + + +Initializes a new instance of the class. + + The message describing the exception. + The exception that caused this exception. + + + +Initializes a new instance of the class. + + The message describing the exception. + + + +Initializes a new instance of the class. + + + + +Represents errors that occur in the DXGI subsystem. + + + + +Returns the actual display mode info based on the given mode index. + + Index of the adapter to use. + The desired characteristics of the display mode. + Index of the desired display mode. + The extended display mode that matches the specified information. + + + +Returns the number of display modes available on the specified adapter. + + Index of the adapter to use. + The desired characteristics of the display mode. + The number of display modes available on the specified adapter. + + + +Returns a unique identifier for the adapter that is specific to the adapter hardware. +Applications can use this identifier to define robust mappings across various APIs (Direct3D 9, DXGI). + + Index of the adapter to use. + A unique identifier for the given adapter. + + + +Retrieves the current extended display mode for the specified adapter. + + Index of the adapter to use. + The current extended display mode for the specified adapter. + + + +Retrieves the current extended display mode for the specified adapter. + + Index of the adapter to use. + The current extended display mode for the specified adapter. + + + +Gets a collection of installed extended adapters. + + + + +Gets or sets the adapter details. + + + + +Gets the capabilities of the adapter. + + The desired device type. + A object containing the capabilities of the adapter. + + + +Gets a list of all possible display modes for the adapter. + + The desired characteristics of the display mode. + A collection of possibly display modes. + + + +Gets the current extended display mode of the adapter. + + + + +Gets the monitor associated with the adapter. + + + + +Gets the adapter ordinal. + + + + Dscribes the capabilities and properties of an available adapter. + None + + + +Gets the default item. + + + + Implements a read-only collection of instances. + + + Implements a read-only collection of instances. + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +The scanline ordering used by the display mode. + + + + +The surface format of the display mode. + + + + +Refresh rate of the monitor. + + + + +Screen height, in pixels. + + + + +Screen width, in pixels. + + + + Describes an extended display mode. + D3DDISPLAYMODEEX + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +The scanline ordering used by the display mode. + + + + +The surface format of the display mode. + + + + Describes an extended display mode. + D3DDISPLAYMODEFILTER + + + +Determines whether the device supports Render-To-Vertex-Buffer (R2VB). + + Index of the adapter to use. + The desired device type. + + true if the adapter supports R2VB; otherwise, false. + + + +Retrieves device-specific information about a device. + + Index of the adapter to use. + Desired device type. + A object containing the capabilities of the adapter. + + + +Returns the handle of the monitor associated with the Direct3D object. + + Index of the adapter to use. + Handle of the monitor associated with the Direct3D object. + + + +Queries the device to determine whether the specified adapter supports the requested +format and display mode. + + Index of the adapter to use. + Desired surface format. + Index of the desired display mode. + The display mode that matches the specified information. + + + +Returns the number of display modes available on the specified adapter. + + Index of the adapter to use. + Desired surface format. + The number of display modes available on the specified adapter. + + + +Retrieves information about the specified adapter. + + Index of the adapter to use. + Information about the specified adapter. + + + +Retrieves the current display mode for the specified adapter. + + Index of the adapter to use. + The current display mode for the specified adapter. + + + +Determines if a multisampling technique is available on this device. + + Index of the adapter to use. + The desired device type. + Format of the surface to be multisampled. + + true to inquire about windowed multisampling, false to inquire about fullscreen multisampling. + The multisampling technique to test. + + true if the device can perform the specified multisampling method; otherwise, false. + + + +Determines if a multisampling technique is available on this device. + + Index of the adapter to use. + The desired device type. + Format of the surface to be multisampled. + + true to inquire about windowed multisampling, false to inquire about fullscreen multisampling. + The multisampling technique to test. + When the method completes, contains the number of quality stops available for a given multisample type. + + true if the device can perform the specified multisampling method; otherwise, false. + + + +Determines if a multisampling technique is available on this device. + + Index of the adapter to use. + The desired device type. + Format of the surface to be multisampled. + + true to inquire about windowed multisampling, false to inquire about fullscreen multisampling. + The multisampling technique to test. + When the method completes, contains the number of quality stops available for a given multisample type. + When the method completes, contains a object describing the result of the operation. + + true if the device can perform the specified multisampling method; otherwise, false. + + + +Determines whether a depth-stencil format is compatible with a render-target format in a particular display mode. + + Index of the adapter to use. + The desired device type. + Format of the display mode into which the adapter will be placed. + Format of the render target surface. + Format of the depth-stencil surface. + + true if the depth-stencil surface is compatible with the render target format; otherwise, false. + + + +Determines whether a depth-stencil format is compatible with a render-target format in a particular display mode. + + Index of the adapter to use. + The desired device type. + Format of the display mode into which the adapter will be placed. + Format of the render target surface. + Format of the depth-stencil surface. + When the method completes, contains a object describing the result of the operation. + + true if the depth-stencil surface is compatible with the render target format; otherwise, false. + + + +Verifies whether a hardware accelerated device type can be used on this adapter. + + Index of the adapter to use. + The desired device type. + Format of the display mode into which the adapter will be placed. + Format of the back buffer. + Value indicating whether the device type will be used in full-screen or windowed mode. + + true if the device can be used with the specified settings; otherwise, false. + + + +Verifies whether a hardware accelerated device type can be used on this adapter. + + Index of the adapter to use. + The desired device type. + Format of the display mode into which the adapter will be placed. + Format of the back buffer. + Value indicating whether the device type will be used in full-screen or windowed mode. + When the method completes, contains a object describing the result of the operation. + + true if the device can be used with the specified settings; otherwise, false. + + + +Determines whether a surface format is available as a specified resource type and can be +used as a texture, depth-stencil buffer, or render target, or any combination of the three, +on a device representing this adapter. + + Index of the adapter to use. + The desired device type. + Format of the display mode into which the adapter will be placed. + Requested usage options for the surface. + Resource type requested for use with the queried format. + The format that will be checked for compatibility. + + true if the format is compatible with the specified device; otherwise, false. + + + +Determines whether a surface format is available as a specified resource type and can be +used as a texture, depth-stencil buffer, or render target, or any combination of the three, +on a device representing this adapter. + + Index of the adapter to use. + The desired device type. + Format of the display mode into which the adapter will be placed. + Requested usage options for the surface. + Resource type requested for use with the queried format. + The format that will be checked for compatibility. + When the method completes, contains a object describing the result of the operation. + + true if the format is compatible with the specified device; otherwise, false. + + + +Tests the device to see if it supports conversion from one display format to another. + + Index of the adapter to use. + The desired device type. + Source adapter format. + Destination adapter format. + + true if the conversion is possible; otherwise, false. + + + +Tests the device to see if it supports conversion from one display format to another. + + Index of the adapter to use. + The desired device type. + Source adapter format. + Destination adapter format. + When the method completes, contains a object describing the result of the operation. + + true if the conversion is possible; otherwise, false. + + + +Gets the number of adapters on the system. + + + + +Gets a collection of installed adapters. + + + + +Gets or sets a value indicating whether Direct3D should check WHQL levels. If this value +is set to true, Direct3D can connect to the internet in order to download +new Microsoft Windows Hardware Quality Labs (WHQL) certificates. + + + + +Used to create Microsoft Direct3D objects and set up the environment. This class +includes methods for enumerating and retrieving capabilities of the device. + + IDirect3D9 + + + +Gets or sets the adapter details. + + + + +Gets the capabilities of the adapter. + + The desired device type. + A object containing the capabilities of the adapter. + + + +Gets a list of all possible display modes for the adapter. + + The desired pixel format. + A collection of possibly display modes. + + + +Gets the current display mode of the adapter. + + + + +Gets the monitor associated with the adapter. + + + + +Gets the adapter ordinal. + + + + Dscribes the capabilities and properties of an available adapter. + None + + + +Gets the default item. + + + + Implements a read-only collection of instances. + + + +Gets a value indicating when the adapter was WHQL certified. +A value of DateTime.MinValue indicates that the adapter is certified, but no specific date +information is available. A value of DateTime.MaxValue indicates that the driver is not +WHQL certified. + + + + +Gets a value indicating whether the adapter is WHQL certified. + + + + +The Windows Hardware Quality Labs validation level for the driver/device pair. + + + + +Gets the manufacturer identifier. + + + + +Gets the subsystem identifier for the chip set. + + + + +Gets the revision level of the chip set. + + + + +Gets the version of the driver running on the adapter. + + + + +Gets the name of the driver running on the adapter. + + + + +Gets the name of the adapter. + + + + +Gets a unique identifier for the adapter/chip set pair. + + + + +Gets the identifier of the adapter chip set. + + + + +Gets a friendly description string for the adapter. + + + + +Gets the adapter ordinal. + + + + Contains information identifying an adapter. + D3DADAPTER_IDENTIFIER9 + + + Implements a read-only collection of instances. + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +The surface format of the display mode. + + + + +Refresh rate of the monitor. + + + + +Screen height, in pixels. + + + + +Screen width, in pixels. + + + + Describes a display mode. + D3DDISPLAYMODE + + + +Initializes a new instance of the class. + + The result code that caused this exception. + + + +Initializes a new instance of the class. + + The message describing the exception. + The exception that caused this exception. + + + +Initializes a new instance of the class. + + The message describing the exception. + + + +Initializes a new instance of the class. + + + + +Represents errors that occur in the XInput subsystem. + + + + +Releases all resources used by the . + + + + +Extra tag data stored along with the object. This member is intended for use by users of SlimDX +and has no internal meaning to the library. + + + + +Gets or sets a value indicating whether or not the object is in the default allocation pool. + + + + +Gets the timestamp, in milliseconds, of the object'ss creation. + + + + +Gets a to the location where the object was created. + + + + +Gets an IntPtr to the underlying native COM interface. + + + + +Gets a value that indicates whether the object has been disposed. + + + + +The base class for all SlimDX types which represent COM interfaces. + + IUnknown + + + +Checks that a range to be read is within the boundaries of a source array, and fills in the number of elements to read if necessary. + + The source array to be read from. + The index at which the caller intends to begin reading from the source. + The number of elements intended to be read from the source. If 0 is passed, count will be adjusted to be size - offset. + + is a null reference. + + or is negative. + The sum of and is greater than the buffer length. + + + +Checks that a range to be read are within the boundaries of a source. + + The minimum bound that can be read from the source, and fills in the number of elements to read if necessary. + The total size of the source. + The index at which the caller intends to begin reading from the source. + The number of elements intended to be read from the source. If 0 is passed, count will be adjusted to be size - offset. + + is less than . + + is negative. + The sum of and is greater than the buffer length. + + + +Generates a report of all outstanding COM objects (objects that have not been disposed) +tracked by SlimDX. The report includes the object's type and a stack trace to its creation point. + + A string containing the leak report. + + + +Removes a COM object from the table. + + The object to remove. + + true if the object was in the table and was removed; otherwise, false. + + + +Adds a COM object to the table. This will set the object's ::CreationSource property if +::EnableObjectTrackingobject tracking is on. + + The object to add. + + + +Gets the synchronization object used by the ObjectTable. This object can be used to safely +access the internal object list. + + +This member should only be used if it is necesssary to access the property +in a thread-safe manner, and should not be used as anything other than a parameter for +functions in . + + + + +Occurs after an object has been removed from the object table. + + + + +Occurs after a new object has been added to the object table. + + + + +Gets a list of all the COM objects tracked by SlimDX. + + +Access through this member is NOT thread-safe. Use +to protect multithreaded access if necessary. + + + + +Maintains a list of all the COM objects managed by SlimDX. + + + + +The COM object that this notification refers to. + + + + +Initializes a new instance of the class. + + The result code that caused this exception. + + + +Initializes a new instance of the class. + + The message describing the exception. + The exception that caused this exception. + + + +Initializes a new instance of the class. + + The message describing the exception. + + + +Initializes a new instance of the class. + + + + +Represents errors that occur in the XAudio2 subsystem. + + + + +When overridden in a derived class, sets the with information about the exception. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + + + +Initializes a new instance of the class. + + The result code that caused this exception. + + + +Initializes a new instance of the class. + + The message describing the exception. + The exception that caused this exception. + + + +Initializes a new instance of the class. + + The message describing the exception. + + + +Initializes a new instance of the class. + + + + +Gets the Result code for the exception. This value indicates +the specific type of failure that occured within SlimDX. + + + + +The base class for errors that occur in SlimDX. + + None + + + +Clears out all watches on all result codes. + + + + +Removes a watch on the specified result code. +If no watch was set, this call is ignored. + + The result code to stop watching. + + + +Adds a watch indicating the action to be taken when a method returns the +specified result code. + + The result code to watch for. + The action to take when the specified result code occurs. + + + +Gets or sets the SlimDX wide timer object. + + This Timer is automatically created and started when SlimDX is loaded. + + + +Gets or sets whether SlimDX detects double disposal of objects. If set to true, SlimDX will throw +an when an already disposed object is disposed. If set to false, double +disposals will be silently ignored. The default value is false. + + + + +Gets or sets whether SlimDX defaults to throwing exceptions when a shader or effect compilation fails. The default value is true. + + + + +Gets or sets whether SlimDX defaults to throwing exceptions on result codes +that indicate errors. The default value is true. + + + + +Gets or sets whether SlimDX is currently tracking call stacks from object creation. If set to false, +objects will not carry a call stack from when they were created. The default value is false. + + Object tracking is a useful debugging facility, but may have a significant negative +impact on performance. The default value is false. + + + +Used to control global options that affect all of SlimDX. + + + + +Returns a value indicating whether the two results are equivalent. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Returns a value indicating whether this instance is equal to the specified result. + + A to compare with this instance. + + true if has the same value as this instance; otherwise, false. + + + +Returns a value indicating whether this instance is equal to the specified object. + + An object to compare with this instance. + + true if has the same value as this instance; otherwise, false. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Converts the value of the result to its equivalent string representation. + + The string representation of the value of this instance. + + + +Tests for inequality between two results. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two results. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Gets the last recorded result of a method or operation. + + + + +Gets a value indicating whether or not the result represents a failed operation. + + + + +Gets a value indicating whether or not the result represents a successful operation. + + + + +Gets the friendly description of the result. + + + + +Gets the name of the result. + + + + +Gets the actual HRESULT result code. + + + + +Represents the result of a method or operation. + + HRESULT + + + +Specifies possible behaviors of result watches. + + + + +Throw an exception whenever the result occurs. + + + + +Break whenever the result occurs. + + + + +Always ignore the result. + + + + +Specifies possible performance profiling options. + + + + +Do not allow performance profiling. + + + + +No performance options specified. + + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Maximum number of pixel shader instruction slots. + + + + +Maximum number of vertex shader instruction slots. + + + + +Maximum number of pixel shader instructions that can be run when using flow control. + + + + +Maximum number of vertex shader instructions that can be run when using flow control. + + + + +Vertex shader texture filtering capabilities. + + + + +Extended capabilities for pixel shader version 2.0. + + + + +Extended capabilities for vertex shader version 2.0. + + + + +Describes the operations supported by Device.StretchRectangle. + + + + +Number of simultaenous render targets. + + + + +Possible data types contained in a vertex declaration. + + + + +The number of adapters in the group. + + + + +Indicates the order in which heads are referenced by the API. + + + + +Indicates which device is master for this subordinate. + + + + +Maximum tessellation level for N-patches. + + + + +Device driver capabilities for adaptive tessellation. + + + + +Maximum value of the pixel shader arithmetic component. + + + + +The pixel shader version. + + + + +The number of vertex shaders registers that are reserved for constants. + + + + +The vertex shader version. + + + + +Maximum stride for data streams. + + + + +Maximum number of concurrent data streams. + + + + +Maximum size of indices supported for hardware vertex processing. + + + + +Maximum number of primitives for each Device.DrawPrimitive call. + + + + +Maximum size of a point primitive. + + + + +Maximum matrix index that can be indexed into using the per-vertex indices. + + + + +Maximum number of matrices that the device can apply when performing multimatrix vertex blending. + + + + +Maximum number of user defined clip planes supported. + + + + +Maximum number of lights that can be activated simultaneously. + + + + +Specifies the vertex processing capabilities of the device. + + + + +Maximum number of textures that can be simulatenously bound to the fixed function pipeline +sampler stages. + + + + +Maximum number of texture blending stages supported in the fixed function pipeline. In +the programmable pipeline, this corresponds to the number of unique texture registers +used by pixel shader instructions. + + + + +Describes the texture operations supported by the device. + + + + +Capabilities of the flexible vertex format system. + + + + +Specifies supported stencil buffer operations. Stencil operations are assumed to be +valid for all three stencil-buffer operation render states. + + + + +Number of pixels to adjust the extents rectangle outward to accommodate antialiasing kernels. + + + + +Screen space coordinate of the guard band clipping region. Coordinates inside this rectangle +but outside the viewport rectangle are automatically clipped. + + + + +Screen space coordinate of the guard band clipping region. Coordinates inside this rectangle +but outside the viewport rectangle are automatically clipped. + + + + +Screen space coordinate of the guard band clipping region. Coordinates inside this rectangle +but outside the viewport rectangle are automatically clipped. + + + + +Screen space coordinate of the guard band clipping region. Coordinates inside this rectangle +but outside the viewport rectangle are automatically clipped. + + + + +Maximum W-based depth value that the device supports. + + + + +Maximum valid value for the anisotropy texture-stage state. + + + + +Maximum texture aspect ratio supported by the hardware, typically a power of two. + + + + +Represents the maximum range of the integer bits of the post-normalized texture coordinates. + + + + +Maximum value for any of the three dimensions (width, height, and depth) of a volume texture. + + + + +Maximum possible texture height. + + + + +Maximum possible texture width. + + + + +Defines capabilities for line drawing primitives. + + + + +Texture-addressing capabilities for volume texture objects. + + + + +Texture-addressing capabilities for texture objects. + + + + +Specifies volume texture filtering capabilities. + + + + +Specifies cube texture filtering capabilities. + + + + +Specifies texture filtering capabilities. + + + + +Miscellaneous texture mapping capabilities. + + + + +Shading operations capabilities. + + + + +Alpah test comparison capabilities. + + + + +Specifies possible destination blending capabilities. + + + + +Specifies possible source blending capabilities. + + + + +Z-Buffer comparison capabilities. + + + + +Information on raster-drawing capabilities. + + + + +Miscellaneous driver primitive capabilities. + + + + +A set of flags describing the general capabilities of the device. + + + + +Indicates the amount of hardware support available for cursors. + + + + +Specifies the set of presentation swap chain intervals that are allowed on the device. + + + + +Driver-specific capabilities for the device. + + + + +Driver-specific capabilities for the device. + + + + +Driver-specific capabilities for the device. + + + + +The ordinal of the adapter on which the device resides. + + + + +Specifies the type of the device, which identifies which type of resources are used to process vertices. + + + + Represents the capabilities of the hardware exposed through the Direct3D object. + D3DCAPS9 + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Number of supported instruction slots. + + + + +The depth of static flow control nesting. + + + + +The number of temporary registers supported. + + + + +The depth of dynamic flow control nesting. + + + + +Generic pixel shader caps. + + + + Describes the pixel shader capabilities of a device. + D3DPSHADERCAPS2_0 + + + +Determines whether the specified object instances are considered equal. + + The first value to compare. + The second value to compare. + + true if is the same instance as or +if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + +Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +The depth of static flow control nesting. + + + + +The number of temporary registers supported. + + + + +The depth of dynamic flow control nesting. + + + + +Generic vertex shader capabilities. + + + + Describes the vertex shader capabilities of a device. + D3DVSHADERCAPS2_0 + + + +Identifies texture samplers used by vertex shaders. + + D3DVERTEXTEXTURESAMPLER + + + +Texture stage states define multi-blender texture operations. Some sampler states set up +vertex processing, and some set up pixel processing. Texture stage states can be saved and +restored using stateblocks. + + D3DTEXTURESTAGESTATETYPE + + + +Per-stage constant color. Use packed integer colors to set this state. + + + + +Setting to select the destination register for the result of this stage. Use values from + to set this state. The default value is .Current. + + + + +Settings for the third alpha operand for triadic operations. Use values from +to set this state. The default value is .Current. + + + + +Settings for the third color operand for triadic operations. Use values from +to set this state. The default value is .Current. + + + + +Specifies transformation options for texture coordinates. Use values from +to set this state. The default value is .Disable. + + + + +Floating-point offset value for bump-map luminance. The default value is 0.0f. + + + + +Floating-point scale value for bump-map luminance. The default value is 0.0f. + + + + +Index of the texture coordinate set to use with this texture stage. You can specify up to +eight sets of texture coordinates per vertex. If a vertex does not include a set of texture +coordinates at the specified index, the system defaults to the u and v coordinates (0,0). + + + + +Texture-stage state is a floating-point value for the [1][1] coefficient in a bump-mapping +matrix. The default value is 0.0f. + + + + +Texture-stage state is a floating-point value for the [1][0] coefficient in a bump-mapping +matrix. The default value is 0.0f. + + + + +Texture-stage state is a floating-point value for the [0][1] coefficient in a bump-mapping +matrix. The default value is 0.0f. + + + + +Texture-stage state is a floating-point value for the [0][0] coefficient in a bump-mapping +matrix. The default value is 0.0f. + + + + +Texture-stage state is the second alpha argument for the stage. Use values from +to set this state. The default value is .Current. + + + + +Texture-stage state is the first alpha argument for the stage. Use values from +to set this state. The default value is .Texture. + + + + +Texture-stage state is a texture alpha blending operation. Use values from +to set this state. The default value for the first stage is .SelectArg1; +for all other stages the default is .Disable"/>. + + + + +Texture-stage state is the second color argument for the stage. Use values from +to set this state. The default value is .Current. + + + + +Texture-stage state is the first color argument for the stage. Use values from +to set this state. The default value is .Texture. + + + + +Texture-stage state is a texture color blending operation. Use values from +to set this state. The default value for the first stage is .Modulate; +for all other stages the default is .Disable. + + + + +Specifies the texture operations supported by the device. + + D3DTEXOPCAPS + + + +The device supports .Lerp. + + + + +The device supports .MultiplyAdd. + + + + +The device supports .DotProduct3. + + + + +The device supports .BumpEnvironmentMapLuminance. + + + + +The device supports .BumpEnvironmentMap. + + + + +The device supports .ModulateInvColorAddAlpha. + + + + +The device supports .ModulateInvAlphaAddColor. + + + + +The device supports .ModulateColorAddAlpha. + + + + +The device supports .ModulateAlphaAddColor. + + + + +The device supports .Premodulate. + + + + +The device supports .BlendCurrentAlpha. + + + + +The device supports .BlendTextureAlphaPM. + + + + +The device supports .BlendFactorAlpha. + + + + +The device supports .BlendTextureAlpha. + + + + +The device supports .BlendDiffuseAlpha. + + + + +The device supports .AddSmooth. + + + + +The device supports .Subtract. + + + + +The device supports .AddSigned2X. + + + + +The device supports .AddSigned. + + + + +The device supports .Add. + + + + +The device supports .Modulate4X. + + + + +The device supports .Modulate2X. + + + + +The device supports .Modulate. + + + + +The device supports .SelectArg2. + + + + +The device supports .SelectArg1. + + + + +The device supports .Disable. + + + + +Defines per-stage texture blending operations. + + D3DTEXTUREOP + + + +Linearly interpolates between the second and third source arguments by a proportion specified +in the first source argument. + + + + +Performs a multiply-accumulate operation. It takes the last two arguments, multiplies them +together, and adds them to the remaining input/source argument, and places that into the result. + + + + +Modulate the components of each argument as signed components, add their products; then +replicate the sum to all color channels, including alpha. + + + + +Perform per-pixel bump mapping, using the environment map in the next stage, with luminance. + + + + +Perform per-pixel bump mapping, using the environment map in the next stage. + + + + +Modulate the arguments, inverting the first argument, then add the alpha of the first argument. + + + + +Modulate the color of the second argument, using the inverted alpha from the first argument, and then +add the result to argument one. + + + + +Modulate the arguments, then add the alpha of the first argument. + + + + +Modulate the color of the second argument, using the alpha from the first argument, and then +add the result to argument one. + + + + +Premodulate the arguments with the next stage's values. + + + + +Linearly blend the current stage, using the alpha from the previous stage. + + + + +Linearly blend the current stage, using a premultiplied alpha. + + + + +Linearly blend the current stage, using the current texture factor. + + + + +Linearly blend the current stage, using the alpha from the stage's texture. + + + + +Linearly blend the current stage, using the interpolated alpha from each vertex. + + + + +Add the first and second arguments, and then subtract their product from the sum. + + + + +Subtract the components of the second argument from the components of the first argument. + + + + +Add the components of the arguments with a -0.5 bias, and then multiply them by 2. + + + + +Add the components of the arguments with a -0.5 bias. + + + + +Add the components of the arguments. + + + + +Multiply the components of the arguments, and then multiply them by 2. + + + + +Multiply the components of the arguments, and then multiply them by 2. + + + + +Multiply the components of the arguments. + + + + +Use the current stage's second color or alpha argument, unmodified, as the output. + + + + +Use the current stage's first color or alpha argument, unmodified, as the output. + + + + +Disabled output from the current stage and all higher stages. + + + + +Driver texture coordinate capability flags. + + D3DTSS_TCI + + + +Use the specified coordinates for sphere mapping. + + + + +Use the reflection vector, transformed to camera space, as the input texture coordinates. + + + + +Use the vertex position, transformed to camera space, as the input texture coordinates. + + + + +Use the vertex normal, transformed to camera space, as the input texture coordinates. + + + + +Use the specified texture coordinates contained in the vertex format. + + + + +Specifies miscellaneous texture mapping capabilities supported by the device. + + D3DPTEXTURECAPS + + + +Specifies that the device does not support a projected bump environment lookup operation. + + + + +Specifies whether volume textures must have powers of 2 sizes. + + + + +Specifies whether cube maps must have powers of 2 sizes. + + + + +Device supports mipmaps for cube textures. + + + + +Device supports mipmaps for volume textures. + + + + +Device supports mipmaps. + + + + +Supports volume textures. + + + + +Supports cube map textures. + + + + +The device supports the .Projected texture transformation flag. + + + + +Determines whether power of 2 texture sizes are required by the device. + + + + +Device can draw alpha from texture palettes. + + + + +Texture indices are not scaled by their size prior to rendering. + + + + +Specifies that all textures must be square. + + + + +Alpha in texture pixels is supported. + + + + +Specifies that the device requires power of 2 texture sizes. + + + + +Perspective correction is supported. + + + + +Specifies possible texture arguments. + + D3DTA + + + +Replicate the alpha information to all channels before the method completes. + + + + +Specifies that the function should take the complement of the argument. + + + + +Selects a constant from a texture stage. + + + + +The texture argument is a temporary color register. + + + + +The texture argument is the specular color. + + + + +The texture argument is the texture factor. + + + + +The texture argument is the texture color. + + + + +The texture argument is the result of the previous blending stage. + + + + +The texture argument is the diffuse color. + + + + +Mask value for all arguments. + + + + +Specifies the set of texture addressing modes supported by the device. + + D3DPTADDRESSCAPS + + + +The device supports .MirrorOnce. + + + + +The device can separate the texture-addressing modes of the u and v coordinates of the texture. + + + + +The device supports .Border. + + + + +The device supports .Clamp. + + + + +The device supports .Mirror. + + + + +The device supports .Wrap. + + + + +Specifies possible stream frequencies. + + D3DSTREAMSOURCE + + + +The stream uses instance data. + + + + +The stream uses indexed data. + + + + +Defines a set of stencil operations supported by a device. + + D3DSTENCILCAPS + + + +The device supports .TwoSided. + + + + +The device supports .Decrement. + + + + +The device supports .Increment. + + + + +The device supports .Invert. + + + + +The device supports .DecrementClamp. + + + + +The device supports .IncrementClamp. + + + + +The device supports .Replace. + + + + +The device supports .Zero. + + + + +The device supports .Keep. + + + + +Predefined sets of pipeline states used by state blocks. + + D3DSTATEBLOCKTYPE + + + +Capture the current vertex state. + + + + +Capture the current pixel state. + + + + +Capture the current device state. + + + + +Flags indicating the method the rasterizer uses to create an image on a surface. + + D3DSCANLINEORDERING + + + +Every other line is interlaced with the previous one to build the final image. + + + + +All scanlines are used to build the final image. + + + + +Specifies the shading operations that a device supports. + + D3DPSHADECAPS + + + +Device supports Gouraud fog. + + + + +Device supports Gouraud-blended transparency. + + + + +Device supports Gouraud shading of specular highlights. + + + + +Device supports colored Gouraud shading. + + + + +Sampler states define texture sampling operations such as texture addressing and texture filtering. +Some sampler states set-up vertex processing, and some set-up pixel processing. Sampler states can +be saved and restored using stateblocks + + D3DSAMPLERSTATETYPE + + + +An integer value that specifies the vertex offset into a presampled displacement map. The default value is 0. + + + + +An integer value that specifies which element of a multielement texture to use. The default value is 0. + + + + +An integer value that specifies sRGB gamma correction. The default value is 0. + + + + +An integer value that specifies the maximum anisotropy level. The default value is 1. + + + + +An integer value that specifies the maximum mipmap level. The default value is 0. + + + + +An integer value that specifies the level-of-detail bias. The default value is 0. + + + + +Specifies the mipmap filter. Use values from to set this +state. The default value is .Point. + + + + +Specifies the minification filter. Use values from to set this +state. The default value is .Point. + + + + +Specifies the magnification filter. Use values from to set this +state. The default value is .Point. + + + + +Specifies the texture border color. Use packed integer color values to set this state. +The default value is 0 (black). + + + + +Specifies the texture address mode for the W coordinate. Use values from +to set this state. The default value is .Wrap. + + + + +Specifies the texture address mode for the V coordinate. Use values from +to set this state. The default value is .Wrap. + + + + +Specifies the texture address mode for the U coordinate. Use values from +to set this state. The default value is .Wrap. + + + + +Defines resource types. + + D3DRESOURCETYPE + + + +Index buffer resource. + + + + +Vertex buffer resource. + + + + +Cube texture resource. + + + + +Volume texture resource. + + + + +Texture resource. + + + + +Volume resource. + + + + +Surface resource. + + + + +Render states define set-up states for all kinds of vertex and pixel processing. +Some render states set up vertex processing, and some set up pixel processing. +Render states can be saved and restored using stateblocks. + + D3DRENDERSTATETYPE + + + +Specifies the operation to perform for separate alpha blending. Use values from +to set this state. The default value is .Add. + + + + +Specifies the destination alpha blending function. Use values from to set this state. +The default value is .Zero. + + + + +Specifies the source alpha blending function. Use values from to set this state. +The default value is .One. + + + + +Set this state to true to enable separate blending modes for the alpha channel, and false +to disable them. The default value is false. + + + + +A floating point value that is used for comparison of depth values. + + + + +Set this state to true to enable sRGB gamma correction, and false +to disable it. The default value is false. + + + + +Specifies a color to use as a constant blend factor for alpha blending. Use integer color values +to set this state. The default value is 0xFFFFFFFF (white). + + + + +Specifies additional color write enable settings for the device. Use values from +to set this state. The default value is .All". + + + + +Specifies additional color write enable settings for the device. Use values from +to set this state. The default value is .All". + + + + +Specifies additional color write enable settings for the device. Use values from +to set this state. The default value is .All". + + + + +Specifies the comparison function for stencil tests.. Use values from + to set the state. The default value is .Always". + + + + +Specifies the operation to perform if both the stencil and depth tests pass. Use values from + to set the state. The default value is .Keep". + + + + +Specifies the operation to perform if the stencil test passes and depth test fails. Use values from + to set the state. The default value is .Keep". + + + + +Specifies the operation to perform if the stencil test fails. Use values from + to set the state. The default value is .Keep". + + + + +Set this state to true to enable two sided stenciling, and false +to disable it. The default value is false. + + + + +Set this state to true to enable adaptive tessellation, and false +to disable it. The default value is false. + + + + +A floating point value that specifies the amount to adaptively tessellate, in the W direction. +The default value is 1.0f. + + + + +A floating point value that specifies the amount to adaptively tessellate, in the Z direction. +The default value is 0.0f. + + + + +A floating point value that specifies the amount to adaptively tessellate, in the Y direction. +The default value is 0.0f. + + + + +A floating point value that specifies the amount to adaptively tessellate, in the X direction. +The default value is 0.0f. + + + + +A floating point value that specifies the maximum tessellation level. The default value is 1.0f. + + + + +A floating point value that specifies the minium tessellation level. The default value is 1.0f. + + + + +Set this state to true to enable antialiased lines, and false +to disable them. The default value is false. + + + + +An integer value that specifies how much bias can be applied to co-planar primitives to reduce +Z-fighting. The default value is 0. + + + + +Set this state to true to enable scissor testing, and false +to disable it. The default value is false. + + + + +Specifies the N-patch normal interpolation degree. Use values from to +set this state. The default value is .Linear". + + + + +Specifies the N-patch position interpolation degree. Use values from to +set this state. The default value is .Cubic". + + + + +Specifies the blending operation to use when alpha blending is enabled. Use values from + to set this state. The default value is .Add". + + + + +A floating point value that specifies the tweening factor. The default value is 0.0f. + + + + +Specifies the current color write state of the device. Use values from +to set this state. The default value is .All". + + + + +Set this state to true to enable indexed vertex blending, and false +to disable it. The default value is false. + + + + +A floating point value that specifies the maximum size of point primitives. + + + + +Specifies the current debug monitor token. Use values from to +set this state. The default value is .Enable". + + + + +Specifies the current patch edge style. Use values from to +set this state. The default value is .Discrete". + + + + +An integer mask that controls the samples in a multisampling render target. + + + + +Set this state to true to enable point multisampling, and false +to disable it. The default value is false. + + + + +A floating point value that specifies attenuation when point scaling is applied. The default +value is 0.0f. + + + + +A floating point value that specifies attenuation when point scaling is applied. The default +value is 0.0f. + + + + +A floating point value that specifies attenuation when point scaling is applied. The default +value is 1.0f. + + + + +Set this state to true to enable point scaling, and false +to disable it. The default value is false. + + + + +Set this state to true to enable point sprites, and false +to disable them. The default value is false. + + + + +A floating point value that specifies the minimum size of point primitives. + + + + +A floating point value that specifies the size of points. + + + + +An integer value that specifies which user-defined clip planes are active. Use + + + + +An integer value that specifies the number of matrices to use to perform geometry blending. +Use values from to set this state. The default value is +.Disable. + + + + +Specifies the source for emissive colors. Use values from to set +this state. The default value is .Material. + + + + +Specifies the source for ambient colors. Use values from to set +this state. The default value is .Material. + + + + +Specifies the source for specular colors. Use values from to set +this state. The default value is .Color2. + + + + +Specifies the source for diffuse colors. Use values from to set +this state. The default value is .Color1. + + + + +Set this state to true to enable automatic normalization of vertex normals, and false +to disable it. The default value is false. + + + + +Set this state to true to enable camera-relative specular highlights, and false +to use orthogonal specular highlights. The default value is true. + + + + +Set this state to true to enable colored vertices, and false +to disable them. The default value is true. + + + + +Specifies the current fog formula to be used for vertex fog. Use values from +to set this state. The default value is .None. + + + + +Specifies the ambient light color. Use integer color values to set this state. The default value +is 0 (black). + + + + +Set this state to true to enable lighting, and false +to disable it. The default value is true. + + + + +Set this state to true to enable primitive clipping, and false +to disable it. The default value is true. + + + + +Texture wrapping behavior for multiple sets of texture coordinates. Use values from + to set this state. The default value for this state is .None. + + + + +Texture wrapping behavior for multiple sets of texture coordinates. Use values from + to set this state. The default value for this state is .None. + + + + +Texture wrapping behavior for multiple sets of texture coordinates. Use values from + to set this state. The default value for this state is .None. + + + + +Texture wrapping behavior for multiple sets of texture coordinates. Use values from + to set this state. The default value for this state is .None. + + + + +Texture wrapping behavior for multiple sets of texture coordinates. Use values from + to set this state. The default value for this state is .None. + + + + +Texture wrapping behavior for multiple sets of texture coordinates. Use values from + to set this state. The default value for this state is .None. + + + + +Texture wrapping behavior for multiple sets of texture coordinates. Use values from + to set this state. The default value for this state is .None. + + + + +Texture wrapping behavior for multiple sets of texture coordinates. Use values from + to set this state. The default value for this state is .None. + + + + +Texture wrapping behavior for multiple sets of texture coordinates. Use values from + to set this state. The default value for this state is .None. + + + + +Texture wrapping behavior for multiple sets of texture coordinates. Use values from + to set this state. The default value for this state is .None. + + + + +Texture wrapping behavior for multiple sets of texture coordinates. Use values from + to set this state. The default value for this state is .None. + + + + +Texture wrapping behavior for multiple sets of texture coordinates. Use values from + to set this state. The default value for this state is .None. + + + + +Texture wrapping behavior for multiple sets of texture coordinates. Use values from + to set this state. The default value for this state is .None. + + + + +Texture wrapping behavior for multiple sets of texture coordinates. Use values from + to set this state. The default value for this state is .None. + + + + +Texture wrapping behavior for multiple sets of texture coordinates. Use values from + to set this state. The default value for this state is .None. + + + + +Texture wrapping behavior for multiple sets of texture coordinates. Use values from + to set this state. The default value for this state is .None. + + + + +Specifies the color used for multiple texture blending. Use integer color values to set this +state. The default value is 0xFFFFFFFF (white). + + + + +An integer value that specifies the write mask used for values written into the stencil buffer. +The default value is 0xFFFFFFFF. + + + + +An integer value that specifies the mask for stencil values. The default value is 0xFFFFFFFF. + + + + +An integer value that specifies the reference value against which pixels are tested when +stencil testing is enabled. The default value is 0. + + + + +Specifies the comparison function for stencil tests. Use values from +to set this state. The default value is .Always. + + + + +Specifies the stencil operation to perform if both the stencil and depth tests pass. Use values from + to set this state. The default value is .Keep. + + + + +Specifies the stencil operation to perform if the stencil test passes and the depth test fails. +Use values from to set this state. The default value is +.Keep. + + + + +Specifies the stencil operation to perform if the stencil test fails. Use values from + to set this state. The default value is .Keep. + + + + +Set this state to true to enable stenciling, and false to disable it. +The default value is false. + + + + +Set this state to true to enable range based fog, and false to use depth based fog. +The default value is false. + + + + +A floating point value that defines the density of fog used in exponential fog modes. +The default value is 1.0f. + + + + +A floating point value that defines the depth at which pixel or vertex fog effects end. +The default value is 1.0f. + + + + +A floating point value that defines the depth at which pixel or vertex fog effects begin. +The default value is 0.0f. + + + + +Specifies the current fog formula to be used for pixel fog. Use values from +to set this state. The default value is .None. + + + + +Specifies current fog color. Use integer color values to set this state. The default value is +0 (black). + + + + +Set this state to true to enable specular highlights, and false to disable them. +The default value is false. + + + + +Set this state to true to enable fog blending, and false to disable it. The default +value is false. + + + + +Set this state to true to enable alpha blending, and false to disable it. The default +value is false. + + + + +Set this state to true to enable dithering, and false to disable it. The default +value is false. + + + + +Specifies the current alpha testing function. Use values from to +set this state. The default value is .Always. + + + + +An integer value that specifies the reference alpha against which pixels are tested when +alpha blending is enabled. The default value is 0. + + + + +Specifies the current depth testing function. Use values from to +set this state. The default value is .LessEqual. + + + + +Specifies how back-facing triangles are culled. Use values from to +set this state. The default value is .Counterclockwise. + + + + +Defines the current destination blending mode of the device. Use values from to +set this state. The default value is .Zero. + + + + +Defines the current source blending mode of the device. Use values from to +set this state. The default value is .One. + + + + +Set this state to true to enable drawing of the last pixel in a line, and false +to disable it. The default value is true. + + + + +Set this state to true to enable alpha testing, and false to disable it. The +default value is false. + + + + +Set this state to true to enable writes to the depth buffer, and false to disable +them. The default value is true. + + + + +Defines the current shade mode of the device. Use values from to set this state. +The default value is .Gouraud. + + + + +Defines the current fill mode of the device. Use values from to set this state. +The default value is .Solid. + + + + +Depth-buffering state. Use values from to set this state. The +default value for this state is .UseZBuffer if a depth stencil was created +along with the device, or .DontUseZBuffer otherwise. + + + + +Specifies information about raster capabilities of the device. + + D3DPRASTERCAPS + + + +Device supports toggling multisampling on and off. + + + + +Device supports legacy depth bias. + + + + +Device performs true slope-scale depth bias. + + + + +Device supports scissor testing. + + + + +Device iterates colors perspective correctly. + + + + +Device supports z-based fog. + + + + +Device supports w-based fog. + + + + +Device supports depth buffering using w. + + + + +Device supports anisotropic filtering. + + + + +Device supports range-based fog. + + + + +Device can perform hidden surface removal (HSR) without requiring the application to +sort polygons and without requiring the allocation of a depth buffer. + + + + +Device supports level-of-detail bias adjustments. + + + + +Device calculates the fog value by referring to a lookup table. + + + + +Device calculates the fog value during the lighting operation and interpolates the value during rasterization. + + + + +Device can perform Z-test operations. + + + + +Device can dither to improve color resolution. + + + + +Specifies sampler values for Render-To-Vertex-Buffer (R2VB). + + R2VB_VSMP + + + +Number of available texture samplers. + + + + +Override the stream with vertex texture 3 sampler. + + + + +Override the stream with vertex texture 2 sampler. + + + + +Override the stream with vertex texture 1 sampler. + + + + +Override the stream with vertex texture 0 sampler. + + + + +Override the stream with displacement map sampler. + + + + +Identifies possible query types. + + D3DQUERYTYPE + + + +Measure the cache hit-rate performance for textures and indexed vertices. + + + + +Query for bandwidth timings. + + + + +Query for pixel shader timings. + + + + +Query for vertex shader timings. + + + + +Query for interface timings. + + + + +Query for pipeline timings. + + + + +Queries the device to see if timestamp frequencies can change mid-call. + + + + +Notifies the application that the timestamp frequency has changed. + + + + +Queryies the 64-bit timestamp. + + + + +Query for occluded pixels. + + + + +Query for any and all asynchronous events that have been issued from API calls. + + + + +Query vertex statistics. + + + + +Query the resource manager. + + + + +Query for driver hints about data layout for vertex caching. + + + + +Defines the primitives supported by Direct3D. + + D3DPRIMITIVETYPE + + + +Renders the vertices as a triangle fan. + + + + +Renders the vertices as a triangle strip. + + + + +Renders the vertices as a sequence of isolated triangles. + + + + +Renders the vertices as a single polyline. + + + + +Renders the vertices as a list of isolated line segments. + + + + +Renders the vertices as a collection of isolated points. + + + + +Specifies miscellaneous capabilities for primitive rendering supported by the device. + + D3DPMISCCAPS + + + +Device clamps fog blend factor per vertex. + + + + +Device supports post pixel shader operations for multiple render targets. + + + + +Device supports different bit depths for multiple render targets. + + + + +Device supports separate blend settings for the alpha channel. + + + + +Device supports fog and specular alpha. + + + + +Device supports conversion to sRGB after blending. Available for Direct3D9Ex only. + + + + +Device supports per-stage constants. + + + + +Device supports independent write masks for multiple render targets. + + + + +A reference device that does not render. + + + + +Device supports alpha blending operations. + + + + +Device supports temporary texture arguments. + + + + +Device clips post-transformed vertex primitives. + + + + +Device correctly clips scaled points of size greater than 1.0. + + + + +Device supports per-channel writes of the color buffer. + + + + +The driver supports counterclockwise culling. + + + + +The driver supports clockwise culling. + + + + +The driver does not perform triangle culling. + + + + +Device can enabled and disable modification of the depth buffer on pixel operations. + + + + +Specifies presentation intervals. + + D3DPRESENT + + + +Present operations will not be affected more than four times every screen refresh. + + + + +Present operations will not be affected more than three times every screen refresh. + + + + +Present operations will not be affected more than twice every screen refresh. + + + + +The device will wait for the vertical retrace period. + + + + +The device will present immediately without waiting for the refresh. + + + + +The device will wait for the vertical retrace period. + + + + +Specifies possible presentation flags. + + D3DPRESENTFLAG + + + +Indicates that the driver should restrict access to any shared +resources that are created for DWM interaction. The caller must create an authenticated +channel with the driver. The driver should then allow access to processes that attempt to +open those shared resources. Available in Direct3D9Ex only. + + + + +Indicates that the swapchain contains protected content and automatically causes +the runtime to restrict access to the swapchain so that only the Desktop Windows Manager +(DWM) can use the swapchain. Available in Direct3D9Ex only. + + + + +Indicates that the overlay is extended YCbCr (xvYCC). Available in Direct3D9Ex only. + + + + +Indicates that the overlay is BT.709, for high-definition TV (HDTV). Available in Direct3D9Ex only. + + + + +Indicates limited range RGB. In limited range RGB, the RGB range is compressed such that +16:16:16 is black and 235:235:235 is white. Available in Direct3D9Ex only. + + + + +This is a hint to the driver that the back buffers will contain video data. + + + + +Allows the device to use invalid display modes as if they were valid. Available in Direct3D9Ex only. + + + + +Specifies that the application will perform its own display rotation. Available in Direct3D9Ex only. + + + + +No extra presentation flags specified. + + + + +Set when the application requires the ability to lock the back buffer. + + + + +Discards the contents of the depth/stencil surface after each presentation. + + + + +Clips the presentation to the device. + + + + +Defines flags for presentation calls. + + D3DPRESENT + + + +Redraws the colorkey data. Available in Direct3D9Ex only. + + + + +Turns off the overlay hardware. Available in Direct3D9Ex only. + + + + +Updates the overlay position or the colorkey data without causing an actual flip and without +changing the duration with which the image is displayed. Available in Direct3D9Ex only. + + + + +PresentInterval.Immediate is enforced on this Present call. This flag can only be specified when +using SwapEffect.FlipEx. Windowed and fullscreen presentation behaviors are the same. This is +especially useful for media apps that want to discard frames that have been detected as late and +present subsequent frames at composition time. An invalid parameter error will be returned if this +flag is improperly specified. When multiple consecutive frames with Present.ForceImmediate are +queued, only the last frame is displayed, for both windowed and fullscreen presentation. +Available in Direct3D9Ex on Windows 7 only + + + + +The content of the backbuffer to be presented is in linear color space. + + + + +Clips the rendered content to the monitor/device that the adapter is targetting. Available in +Direct3D9Ex only. + + + + +The application will discard all previously queued frames and present the current frame next. +Available in Direct3D9Ex only. + + + + +Specifies that the application should not wait for rendering to finish. + + + + +Use the front buffer as both the source and the target surface during rendering. +Available for Direct3D9Ex only. + + + + +No extra presentation flags. + + + + +Defines precision levels for font rendering. + + OutPrecision + + + +PostScript only precision. + + + + +Screen outline precision. + + + + +Outline precision. + + + + +TrueType only precision. + + + + +Raster precision. + + + + +Device precision. + + + + +TrueType precision. + + + + +Stroke-level precision. + + + + +Character-level precision. + + + + +String-level precision. + + + + +Default precision. + + + + +Defines the memory class that holds the buffers for a resource. + + D3DPOOL + + + +Resources are placed in scratch memory. These resources cannot be used as textures or render +targets. + + + + +Resources are placed in system memory that is not accessable by the device. These resources +do not need to be recreated when the device is lost. + + + + +Resources are copied automatically to device-accessable memory as needed. Managed resources are +backed by system memory and do not need to be recreated when the device is lost. + + + + +Resources are placed in the memory pool most appropriate for the set of usages requested for the resource. + + + + +Specifies pixel shader capabilities supported by the device. + + D3DPS20CAPS + + + +There is no limit on the number of texture instructions. + + + + +There is no limit on the number of dependent reads. + + + + +Instruction predication is supported. + + + + +Gradient instructions are supported. + + + + +Arbitrary swizzling is supported. + + + + +No extra pixel shader capabilities specified. + + + + +Defines pitch and family settings for fonts. + + (various font constants) + + + +Use the Decorative family. + + + + +Use the Script family. + + + + +Use the Modern family. + + + + +Use the Swiss family. + + + + +Use the Roman family. + + + + +The font family doesn't matter. + + + + +Mono pitch. + + + + +Variable pitch. + + + + +Fixed pitch. + + + + +Default pitch. + + + + +Defines whether the current tessellation mode is discrete or continuous. + + D3DPATCHEDGESTYLE + + + +Continuous edge style. + + + + +Discrete edge style. + + + + +Defines the levels of full-scene multisampling that the device can apply. + + D3DMULTISAMPLE_TYPE + + + +Level of full-scene multisampling using 16 samples. + + + + +Level of full-scene multisampling using 15 samples. + + + + +Level of full-scene multisampling using 14 samples. + + + + +Level of full-scene multisampling using 13 samples. + + + + +Level of full-scene multisampling using 12 samples. + + + + +Level of full-scene multisampling using 11 samples. + + + + +Level of full-scene multisampling using 10 samples. + + + + +Level of full-scene multisampling using 9 samples. + + + + +Level of full-scene multisampling using 8 samples. + + + + +Level of full-scene multisampling using 7 samples. + + + + +Level of full-scene multisampling using 6 samples. + + + + +Level of full-scene multisampling using 5 samples. + + + + +Level of full-scene multisampling using 4 samples. + + + + +Level of full-scene multisampling using 3 samples. + + + + +Level of full-scene multisampling using 2 samples. + + + + +Enables the multisampling quality value. + + + + +No level of multisampling is available. + + + + +Defines flags for buffer locking. + + D3DLOCK + + + +The application will not write to the buffer. + + + + +Prevents the allocation of a system wide resource lock. + + + + +Indicates that the last set of data written will not be modified during this lock call. + + + + +No locking flags specified. + + + + +Prevents any changes to the dirty state of the resource. + + + + +Allows the application to gain back CPU cycles if the driver cannot lock the surface immediately. + + + + +The application discards all memory within the locked region. + + + + +Specifies the line drawing capabilities of a device. + + D3DLINECAPS + + + +Supports antialiasing. + + + + +Supports fog. + + + + +Supports alpha test comparisons. + + + + +Supports source-blending. + + + + +Supports depth test. + + + + +Supports texture-mapping. + + + + +Defines possible light types. + + D3DLIGHTTYPE + + + +Light is a directional light source. This is equivalent to using a point light source at an infinite distance. + + + + +Light is a spotlight source. Illumination is limited to a cone. + + + + +Light is a point source. The light has a position in space and radiates in all directions. + + + + +Defines constants for query issues. + + D3DISSUE + + + +End a query issue. + + + + +Start a query issue. + + + + +Defines the various types of surface formats. + + D3DFORMAT + + + +Unknown surface format. + + + + +Surface format for Render-To-Vertex-Buffer (R2VB). + + + + +Binary buffer format indicating that the data has no inherent type. Available for Direct3D9Ex only. + + + + +1-bit monochrome format. Available for Direct3D9Ex only. + + + + +8-bit format using 4 bits each for alpha and luminance. + + + + +16-bit format using 8 bits each for alpha and luminance. + + + + +8-bit luminance. + + + + +16-bit luminance. + + + + +8-bit color indexed. + + + + +8-bit color indexed with 8 bits of alpha. + + + + +64-bit pixel ABGR format using 16 bits for each channel. + + + + +32-bit pixel format using 16 bits each for green and red. + + + + +32-bit BGR format using 8 bits for each color channel. + + + + +32-bit ABGR format using 8 bits for each channel. + + + + +32-bit ABGR format using 2 bits for alpha and 10 bits for each color component. + + + + +16-bit RGB format using 4 bits for each color channel. + + + + +16-bit ARGB format using 8 bits for alpha, 3 bits for red and green, and 2 bits for blue. + + + + +8-bit alpha format. + + + + +8-bit RGB format using 3 bits for red and green and 2 bits for blue. + + + + +16-bit ARGB format using 4 bits for each channel. + + + + +24-bit RGB format using 8 bits per channel. + + + + +16-bit normal compression format. + + + + +64-bit bump map format using 16 bits for each channel (Q, W, V, U). + + + + +32-bit bump map format using 16 bits each for V and U. + + + + +32-bit bump map format using 8 bits for each channel (Q, W, V, U). + + + + +16-bit bump map format using 8 bits each for U and V. + + + + +32-bit bump map format using 2 bits for alpha and 10 bits each for W, V, and U. + + + + +32-bit bump map format using 8 bits for each channel (luminance, V, U). + + + + +16-bit bump map format using 6 bits for luminance and 5 bits each for V and U. + + + + +128-bit floating point format using 32 bits for each channel (alpha, blue, green, red). + + + + +64-bit floating point format using 32 bits for the red channel and 32 bits for the green channel. + + + + +32-bit floating point format using 32 bits for the red channel. + + + + +YUY2 format (PC98 compliance). + + + + +UYUV format (PC98 compliance). + + + + +16-bit packed RGB format consisting of pixel pairs to express color. + + + + +16-bit packed RGB format consisting of pixel pairs to express color. + + + + +Multielement texture. + + + + +64-bit floating point format using 16 bits for each channel (alpha, blue, green, red). + + + + +32-bit floating point format using 16 bits for the red channel and 16 bits for the green channel. + + + + +16-bit floating point format using 16 bits for the red channel. + + + + +DXT5 compression texture format. + + + + +DXT4 compression texture format. + + + + +DXT3 compression texture format. + + + + +DXT2 compression texture format. + + + + +DXT1 compression texture format. + + + + +32-bit index buffer bit depth. + + + + +16-bit index buffer bit depth. + + + + +Describes a vertex buffer surface. + + + + +16-bit z-buffer format with 16 bits for depth. + + + + +Lockable 8-bit stencil buffer. Available for Direct3D9Ex only. + + + + +Lockable 32-bit depth buffer. Available for Direct3D9Ex only. + + + + +32-bit z-buffer format with 24 bits for depth (in 24-bit floating point format) and 8 bits for stencil. + + + + +32-bit z-buffer lockable format with 32 bits for depth (in standard IEEE floating point format). + + + + +32-bit z-buffer format with 24 bits for depth and 4 bits for stencil. + + + + +32-bit z-buffer format with 24 bits for depth. + + + + +32-bit z-buffer format with 24 bits for depth and 8 bits for stencil. + + + + +16-bit z-buffer format with 15 bits for depth and 1 bit for stencil. + + + + +32-bit z-buffer format with 32 bits for depth. + + + + +16-bit z-buffer lockable format with 16 bits for depth. + + + + +16-bit surface format using 5 bits for red and blue and 6 bits for green. + + + + +16-bit surface format using 5 bits for each color component (red, green, blue). + + + + +16-bit surface format using 1 bit for alpha and 5 bits for each channel (red, green, blue). + + + + +32-bit surface format using 8 bits for each color component (red, green, blue). + + + + +32-bit surface format using 8 bits for each channel (alpha, red, green, blue). + + + + +32-bit surface format using 2 bits for alpha and 10 bits for color components (red, green, blue). + + + + +Specifies weights for font rendering. + + FW + + + +Use a black weight. + + + + +Use a heavy weight. + + + + +Use an ultra bold weight. + + + + +Use an extra bold weight. + + + + +Use a bold weight. + + + + +Use a demi-bold weight. + + + + +Use a semi-bold weight. + + + + +Use a medium weight. + + + + +Use a regular weight. + + + + +Use a normal weight. + + + + +Make the font light. + + + + +Make the font ultra light. + + + + +Make the font extra light. + + + + +Make the font thin. + + + + +The font weight doesn't matter. + + + + +Specifies quality options for font rendering. + + QUALITY + + + +Clear type natural quality. + + + + +Clear type quality. + + + + +Antialiased quality. + + + + +Non-antialiased quality. + + + + +Proof quality. + + + + +Draft quality. + + + + +Default quality levels. + + + + +Device constants that describe the fog mode. + + D3DFOGMODE + + + +Fog effect intesifies linearly between the start and end points. + + + + +Fog effect intesifies exponentially with the square of the distance. + + + + +Fog effect intensifies exponentially. + + + + +No fog effect. + + + + +Defines the filter capabilities of the device. + + D3DPTFILTERCAPS + + + +Device supports per-stage Gaussian quad filtering for magnifying textures. + + + + +Device supports per-stage pyramidal sample filtering for magnifying textures. + + + + +Device supports per-stage anisotropic filtering for magnifying textures. + + + + +Device supports per-stage linaer filtering for magnifying textures. + + + + +Device supports per-stage point-sample filtering for magnifying textures. + + + + +Device supports per-stage linear filtering for mipmaps. + + + + +Device supports per-stage point-sample filtering for mipmaps. + + + + +Device supports per-stage Gaussian quad filtering for minifying textures. + + + + +Device supports per-stage pyramidal sample filtering for minifying textures. + + + + +Device supports per-stage anisotropic filtering for minifying textures. + + + + +Device supports per-stage linear filtering for minifying textures. + + + + +Device supports per-stage point-sample filtering for minifying textures. + + + + +Defines constants describing the fill mode. + + D3DFILLMODE + + + +Fill solid. + + + + +Fill wireframe. + + + + +Fill points. + + + + +Specifies how the monitor being used to display a fullscreen application is rotated. + + D3DDISPLAYROTATION + + + +Display is rotated 270 degrees. + + + + +Display is rotated 180 degrees. + + + + +Display is rotated 90 degrees. + + + + +Display is not rotated. + + + + +Specifies possible driver levels. + + None + + + +The driver supports at least Direct3D9. + + + + +The driver supports at least Direct3D8. + + + + +The driver supports at least Direct3D7. + + + + +Specifies formatting options for text rendering. + + DT + + + +Rendering the text in right-to-left reading order. + + + + +Don't clip the text. + + + + +Expand tab characters. + + + + +Force all text to a single line. + + + + +Allow word breaks. + + + + +Align the text to the bottom. + + + + +Vertically align the text to the center. + + + + +Align the text to the right. + + + + +Align the text to the center. + + + + +Align the text to the left. + + + + +Align the text to the top. + + + + Defines device types. + D3DDEVTYPE + + + +A pluggable software renderer has been registered. Not supported by SlimDX. + + + + +Direct3D features are implemented in software. + + + + +Initialize Direct3D on a computer that has neither hardware nor reference rasterization available. + + + + +Hardware rasterization. + + + + +Flags identifying the capabilities of the device. + + D3DDEVCAPS + + + +Device supports N-patches. + + + + +The device does not require caching of any patch information. + + + + +Device supports rectangular and triangular patches. + + + + +Device supports quintic bezier curves and b-splines. + + + + +Device can support rasterization, transform, lighting, and shading in hardware. + + + + +Device has hardware acceleration for scene rasterization. + + + + +Device supports blits from system-memory textures to nonlocal video-memory textures. + + + + +Device can support hardware transformation and lighting. + + + + +Device can support at least a DirectX 7-compliant driver. + + + + +Device is texturing from separate memory pools. + + + + +Device can support at least a DirectX 5-compliant driver. + + + + +Device can retrieve textures from non-local video memory. + + + + +Device can queue rendering commands after a page flip. + + + + +Device exports a DrawPrimitive aware HAL. + + + + +Device can retrieve textures from video memory. + + + + +Device can retrieve textures from system memory. + + + + +Device can use buffers from video memory for transformed and lit vertices. + + + + +Device can use buffers from system memory for transformed and lit vertices. + + + + +Device can use execute buffers from video memory. + + + + +Device can use execute buffers from system memory. + + + + Driver capability flags. + D3DDEVCAPS2 + + + +Multiple vertex elements can share the same stream offset in a stream. + + + + +Devices supports presampled displacement maps for N-patches. + + + + +Device supports texture stretching using a texture as the source. + + + + +Device supports adaptive tessellation of N-patches. + + + + +Device supports adaptive tessellation of RT-patches. + + + + +Device supports displacement maps for N-patches. + + + + +Device supports stream offsets. + + + + Defines the degree of the variables in the equation that describes a curve. + D3DDEGREETYPE + + + +Curve is described by variables of fourth order. + + + + +Curve is described by variables of third order. + + + + +Curve is described by variables of second order. + + + + +Curve is described by variables of first order. + + + + Identifies the intended use of vertex data. + D3DDECLUSAGE + + + +Vertex data contains sampler data. + + + + +Vertex data contains depth data. + + + + +Vertex data contains fog data. + + + + +Vertex data contains transformed position data ranging from (0, 0) to (viewport width, viewport height). + + + + +Single positive floating point value. + + + + +Vertex binormal data. + + + + +Vertex tangent data. + + + + +Texture coordinate data. + + + + +Point size data. + + + + +Vertex normal data. + + + + +Blending indices data. + + + + +Blending weight data. + + + + +Position data ranging from (-1, -1) to (1, 1). + + + + +Specifies the declaration types supported by the device. + + D3DDTCAPS + + + +The device supports .HalfFour. + + + + +The device supports .HalfTwo. + + + + +The device supports .Dec3N. + + + + +The device supports .UDec3. + + + + +The device supports .UShort4N. + + + + +The device supports .UShort2N. + + + + +The device supports .Short4N. + + + + +The device supports .Short2N. + + + + +The device supports .UByte4N. + + + + +The device supports .UByte4. + + + + Defines a vertex declaration data type. + D3DDECLTYPE + + + +Type field in the declaration is unused. + + + + +Four component, 16 bit, floating point. + + + + +Two component, 16 bit, floating point. + + + + +Three component, signed, 10 10 10 format normalized by dividing by 511.0f. + + + + +Three component, unsigned, 10 10 10 format. + + + + +Normalized, four component, unsigned short normalized by dividing by 65535.0f. + + + + +Normalized, two component, unsigned short normalized by dividing by 65535.0f. + + + + +Normalized, four component, signed short normalized by dividing by 32767.0f. + + + + +Normalized, two component, signed short normalized by dividing by 32767.0f. + + + + +Four component byte with each byte normalized by dividing by 255.0f. + + + + +Four component, signed short. + + + + +Two component, signed short. + + + + +Four component, unsigned byte. + + + + +Four component, packed, unsigned bytes mapped to the 0 to 1 range. Input is a color +and is expanded to RGBA order. + + +Vertex data contains diffuse or specular color. + + + + +Four component float. + + + + +Three component float. + + + + +Two component float. + + + + +One component float. + + + + +Defines the vertex declaration method which is a predefined operation performed by the +tessellator (or any procedural geometry routine on the vertex data during tessellation). + + D3DDECLMETHOD + + + +Lookup a presampled displacement map. + + + + +Look up a displacement map. + + + + +Copies out the U and V values at a point on the rectangle or triangle patch. + + + + +Computes the normal at a point on the rectangle or triangle patch by taking the cross product of the two tangents. + + + + +Computes the tangent at a point on the rectangle or triangle patch in the V direction. + + + + +Computes the tangent at a point on the rectangle or triangle patch in the U direction. + + + + +Default value. The tessellator copies the vertex data as is, with no additional calculations. + + + + +Defines settings for debug monitor tokens. + + D3DDEBUGMONITORTOKENS + + + +Disable the debug monitor. + + + + +Enable the debug monitor. + + + + Driver cursor capability flags. + D3DCURSORCAPS + + + +The driver supports cursors in low resolution modes. + + + + +The driver supports color cursors. + + + + Defines the supported culling modes. + D3DCULL + + + +Do not cull back faces. + + + + +Cull back faces with counterclockwise vertices. + + + + +Cull back faces with clockwise vertices. + + + + Defines the faces of a cubemap. + D3DCUBEMAP_FACES + + + +Negative z-face of the cubemap. + + + + +Positive z-face of the cubemap. + + + + +Negative y-face of the cubemap. + + + + +Positive y-face of the cubemap. + + + + +Negative x-face of the cubemap. + + + + +Positive x-face of the cubemap. + + + + +Specifies how to combine glyph data from the source and destination surfaces in a ComposeRect operation. + + D3DCOMPOSERECTSOP + + + +Copy the negated source to the destination. + + + + +Bitwise AND the source and the destination. + + + + +Bitwise OR the source and the destination. + + + + +Copy the source to the destination. + + + + A combination of one or more flags that control the device creation behavior. + D3DCREATE + + + +Tells the device to use software vertex processing. + + + + +Allows screensavers during a fullscreen application. + + + + +Specifies that the device does not support Get* calls for anything that can be stored +in state blocks. + + + + +Indicates that Direct3D must not alter the focus window in any way. + + + + +Indicates that the application requests Direct3D to be multithread safe. + + + + +Tells the device to use mixed vertex processing. + + + + +Tells the device to use hardware vertex processing. + + + + +Preserve the floating point precision used in the calling thread. + + + + +Enables the gathering of presentation statistics. Only available in Direct3D9Ex. + + + + +Restrict computation to the main application thread. Only available on Windows Vista. + + + + +Causes the runtime to not register hotkeys for print screen. Only available in Direct3D9Ex. + + + + +Direct3D will managed resources instead of the driver. Errors will still be thrown +for conditions such as insufficient video memory. + + + + +Direct3D will managed resources instead of the driver. + + + + +Asks the device to drive all heads that the master adapter owns. + + + + +No extra creation flags specified. + + + + +Specifies a set of flags that describe the supported compare capabilities of the device. + + D3DPCMPCAPS + + + +The device supports .Always. + + + + +The device supports .GreaterEqual. + + + + +The device supports .NotEqual. + + + + +The device supports .Greater. + + + + +The device supports .lessEqual. + + + + +The device supports .Equal. + + + + +The device supports .Less. + + + + +The device supports .Never. + + + + Specifies possible compare functions. + D3DCMPFUNC + + + +Always pass the test. + + + + +Accept the new pixel if its value is greater than or equal to the value of the current pixel. + + + + +Accept the new pixel if its value does not equal the value of the current pixel. + + + + +Accept the new pixel if its value is greater than the value of the current pixel. + + + + +Accept the new pixel if its value is less than or equal to the value of the current pixel. + + + + +Accept the new pixel if its value equals the value of the current pixel. + + + + +Accept the new pixel if its value is less than the value of the current pixel. + + + + +Always fail the test. + + + + +Flags that enable a per-channel write for the render target color buffer. + + D3DCOLORWRITEENABLE + + + +Allow writes to all channels. + + + + +Allow writes to the red channel. + + + + +Allow writes to the green channel. + + + + +Allow writes to the blue channel. + + + + +Allow writes to the alpha channel. + + + + +Defines the location at which a color or color component must be accessed for lighting calculations. + + D3DMATERIALCOLORSOURCE + + + +Use the specular vertex color. + + + + +Use the diffuse vertex color. + + + + +Use the color from the current material. + + + + +Specifies a set of values that describe the current clip status. + + D3DCS + + + +Application defined clipping plane. + + + + +Application defined clipping plane. + + + + +Application defined clipping plane. + + + + +Application defined clipping plane. + + + + +Application defined clipping plane. + + + + +Application defined clipping plane. + + + + +All vertices are clipped by the back plane of the viewing frustum. + + + + +All vertices are clipped by the front plane of the viewing frustum. + + + + +All vertices are clipped by the bottom plane of the viewing frustum. + + + + +All vertices are clipped by the top plane of the viewing frustum. + + + + +All vertices are clipped by the right plane of the viewing frustum. + + + + +All vertices are clipped by the left plane of the viewing frustum. + + + + +Combination of all clip flags. + + + + +These flags identify a surface to reset when calling Device.Clear. + + D3DCLEAR + + + +Clear the depth buffer. + + + + +Clear the render target. + + + + +Clear the stencil surface. + + + + +Don't clear any surfaces. + + + + +Defines possible character sets for fonts. + + CHARSET + + + +The Mac character set. + + + + +The Baltic character set. + + + + +The Russian character set. + + + + +The East Europe character set. + + + + +The Thai character set. + + + + +The Vietnamese character set. + + + + +The Turkish character set. + + + + +The Greek character set. + + + + +The Arabic character set. + + + + +The Hebrew character set. + + + + +The Johab character set. + + + + +The OEM character set. + + + + +The Chinese character set. + + + + +The GB2312 character set. + + + + +The Hangul character set. + + + + +The ShiftJIS character set. + + + + +The symbol character set. + + + + +The default system character set. + + + + +The ANSI character set. + + + + Driver-specific capability flags. + D3DCAPS3 + + + +Device can accelerate a memory copy from local video memory to system memory. + + + + +Device can accelerate a memory copy from system memory to local video memory. + + + + +Indicates that the device can perform gamma correction from a windowed back buffer to +an sRGB desktop. + + + + +Indicates that the device can respect the AlphaBlendEnable render state in fullscreen mode +while using the Flip or Discard swap effect. + + + + +No extra capabilities defined. + + + + Driver-specific capability flags. + D3DCAPS2 + + + +The driver is capable of automatically generating mipmaps. + + + + +The driver supports dynamic textures. + + + + +The driver is capable of managing resources. + + + + +The system has a calibrator installed that can automatically adjust the gamma ramp so that +the result is identical on all systems that have a calibrator. + + + + +The driver supports dynamic gamma ramp adjustment in fullscreen mode. + + + + +No extra capabilities defined. + + + + Driver-specific capability flags. + D3DCAPS + + + +Display hardware is capable of returning the current scan line. + + + + +No extra capabilities defined. + + + + Defines the supported blend operations. + D3DBLENDOP + + + +The result is the maximum of the source and destination. + + + + +The result is the minimum of the source and destination. + + + + +The result is the source subtracted from the destination. + + + + +The result is the destination subtracted from the source. + + + + +The result is the destination added to the source. + + + + +Defines possible source blending capabilities. + + D3DPBLENDCAPS + + + +The device supports .BlendFactor and .InverseBlendFactor. + + + + +The device supports .BothInverseSourceAlpha. + + + + +The device supports .SourceAlphaSaturated. + + + + +The device supports .InverseDestinationColor. + + + + +The device supports .DestinationColor. + + + + +The device supports .InverseDestinationAlpha. + + + + +The device supports .DestinationAlpha. + + + + +The device supports .InverseSourceAlpha. + + + + +The device supports .SourceAlpha. + + + + +The device supports .InverseSourceColor. + + + + +The device supports .SourceColor. + + + + +The device supports .One. + + + + +The device supports .Zero. + + + + Defines the supported blend mode. + D3DBLEND + + + +Blend factor is one minus the output color of the pixel shader. Only available in Direct3D9Ex. + + + + +Blend factor is the output color of the pixel shader. Only available in Direct3D9Ex. + + + + +Inverted constant color blending factor used by the frame-buffer blender. + + + + +Constant color blending factor used by the frame-buffer blender. + + + + +Source blend factor is one minus the source alpha, and destination blend factor +is one minus the destination alpha. + + + + +Blend factor is (f, f, f, 1); where f = min(As, 1 - Ad). + + + + +Blend factor is one minus the destination color. + + + + +Blend factor is the destination color. + + + + +Blend factor is one minus the destination alpha. + + + + +Blend factor is the destination alpha. + + + + +Blend factor is one minus the source alpha. + + + + +Blend factor is the source alpha. + + + + +Blend factor is one minus the source color. + + + + +Blend factor is the source color. + + + + +Blend factor is (1, 1, 1, 1). + + + + +Blend factor is (0, 0, 0, 0). + + + + Defines the basis type of a high-order patch surface. + D3DBASISTYPE + + + +An interpolation basis defines the surface so that the surface goes through all the input vertices specified. + + + + +Input vertices are treated as control points of a B-spline surface. + + + + +Input vertices are treated as a series of Bezier patches. + + + + +Z-buffer usage types. + + D3DZBUFFERTYPE + + + +Used to enable a W-buffer. + + + + +Used to disable the depth buffer. + + + + +Used to enable the depth buffer. + + + + +Specifies possible XFile formats. + + D3DXF_FILEFORMAT + + + +Compressed file. + + + + +Text file format. + + + + +Legacy file format. + + + + +Specifies vertex shader capabilities supported by the device. + + D3DVS20CAPS + + + +Instruction predication is supported. + + + + +No extra vertex shader capabilities specified. + + + + +Specifies vertex processing capabilities supported by the device. + + D3DVTXCAPS + + + +Device does not support texture generation in non-local viewer mode. + + + + +Device supports sphere maps. + + + + +Device supports vertex tweening. + + + + +Device supports local viewer. + + + + +Device can support positional lights. + + + + +Device can support directional lights. + + + + +Indicates that the device supports the color material states. + + + + +Device can do texture generation. + + + + +Specifies the flexible vertex format capabilities of the device. + + D3DFVFCAPS + + + +Point size is determined by either the render state or the vertex data. If an FVF is used, +point size can come from point size data in the vertex declaration. + + + + +It is preferable that vertex elements not be stripped. That is, if the vertex format contains +elements that are not used with the current render states, there is no need to regenerate the +vertices. If this capability flag is not present, stripping extraneous elements from the vertex +format provides better performance. + + + + +Masks the low WORD of FVFCaps. These bits, cast to the WORD data type, describe the total +number of texture coordinate sets that the device can simultaneously use for multiple texture +blending. + + + + +Specifies codes that can be used to define Flexible-Vertex-Formats (FVF). + + D3DFVF + + + +The last beta field in the vertex position data will be of type Color. The data in the beta +fields are used with matrix palette skinning to specify matrix indices. + + + + +The last beta field in the vertex position data will be of type UByte4. The data in the beta +fields are used with matrix palette skinning to specify matrix indices. + + + + +The number of bits by which to shift an integer value that identifies the number of texture +coordinates for a vertex. + + + + +Mask for texture flag bits. + + + + +Mask for position bits. + + + + +Vertex format contains 8 texture coordinate sets. + + + + +Vertex format contains 7 texture coordinate sets. + + + + +Vertex format contains 6 texture coordinate sets. + + + + +Vertex format contains 5 texture coordinate sets. + + + + +Vertex format contains 4 texture coordinate sets. + + + + +Vertex format contains 3 texture coordinate sets. + + + + +Vertex format contains 2 texture coordinate sets. + + + + +Vertex format contains 1 texture coordinate set. + + + + +Vertex format contains no texture coordinate sets. + + + + +Vertex format contains a position and a normal. + + + + +Vertex format contains transformed and clipped data. + + + + +Vertex format contains position and weighting values for multimatrix blending operations. + + + + +Vertex format contains position and weighting values for multimatrix blending operations. + + + + +Vertex format contains position and weighting values for multimatrix blending operations. + + + + +Vertex format contains position and weighting values for multimatrix blending operations. + + + + +Vertex format contains position and weighting values for multimatrix blending operations. + + + + +Vertex format includes the position of a transformed vertex. + + + + +Vertex format includes the position of an untransformed vertex. + + + + +Vertex format includes a specular color component. + + + + +Vertex format includes a diffuse color component. + + + + +Vertex format contains a point size. + + + + +Vertex format includes a vertex normal vector. + + + + +No vertex format defined. + + + + +Defines flags used to control the number or matrices that the system applies when performing +multimatrix vertex blending. + + D3DVERTEXBLENDFLAGS + + + +Vertex blending is performed using vertex tweening. + + + + +Enable vertex blending between one matrix and a weight of 1.0. + + + + +Enable vertex blending between four matrices. + + + + +Enable vertex blending between three matrices. + + + + +Enable vertex blending between two matrices. + + + + +Disable vertex blending. + + + + +Usage options that identify how resources are to be used. + + D3DUSAGE + + + +The resource will be a Render-To-Vertex-Buffer (R2VB) target. + + + + +Query the resource to verify support for texture wrapping and mip-mapping. + + + + +Query the resource to verify support for vertex shader texture sampling. + + + + +Query the resource to verify support for post pixel shader blending support. + + + + +Query the resource to verify if a texture supports gamma correction during a write operation. + + + + +Query the resource format to see if it supports texture filters. + + + + +Query the resource to verify if a texture supports gamma correction during a read operation. + + + + +Query the resource abour a legacy bump map. + + + + +Indicates that the resource will be used for composition. Available for Direct3D9Ex only. + + + + +Indicates that vertex processing for this resource should be done in software. + + + + +Informs the system that the application will only ever write to the buffer. + + + + +Indicates that the vertex buffer is to be used for drawing high-order primitives. + + + + +The resource will be a render target. + + + + +Indicates that the buffer will be used to draw points. + + + + +Indicates that the vertex buffer is to be used for drawing N-patches. + + + + +Allow a shared surface created by a secure application to be opened by a non-secure +application that has the shared handle. Available for Direct3D9Ex only. + + + + +Indicates that the resource requires dynamic memory use. + + + + +Set to indicate that the vertex buffer content will never require clipping. + + + + +The resource will be a displacement map. + + + + +The resource will be a depth/stencil buffer. + + + + +The resource will automatically generate mipmaps. + + + + +No specified usage options. + + + + +Specifies wrapping options for texture coordinates. + + D3DWRAPCOORD + + + +Wrap all coordinates. + + + + +Wrap the 3 coordinate. + + + + +Wrap the 2 coordinate. + + + + +Wrap the 1 coordinate. + + + + +Wrap the 0 coordinate. + + + + +No wrapping is performed. + + + + +Defines possible transformation states. + + D3DTRANSFORMSTATETYPE + + + +Identifies the transformation matrix being set for the specified texture stage. + + + + +Identifies the transformation matrix being set for the specified texture stage. + + + + +Identifies the transformation matrix being set for the specified texture stage. + + + + +Identifies the transformation matrix being set for the specified texture stage. + + + + +Identifies the transformation matrix being set for the specified texture stage. + + + + +Identifies the transformation matrix being set for the specified texture stage. + + + + +Identifies the transformation matrix being set for the specified texture stage. + + + + +Identifies the transformation matrix being set for the specified texture stage. + + + + +Identifies the transformation matrix being set as a world transformation matrix. + + + + +Identifies the transformation matrix being set as a world transformation matrix. + + + + +Identifies the transformation matrix being set as a world transformation matrix. + + + + +Identifies the transformation matrix being set as a world transformation matrix. + + + + +Identifies the transformation matrix being set as the projection transformation matrix. + + + + +Identifies the transformation matrix being set as the view transformation matrix. + + + + +Defines texture coordinate transformation values. + + D3DTEXTURETRANSFORMFLAGS + + + +Forces all coordinates to be projected before being sent to the rasterizer. + + + + +The rasterizer should expect 4D coordinates. + + + + +The rasterizer should expect 3D coordinates. + + + + +The rasterizer should expect 2D coordinates. + + + + +The rasterizer should expect 1D coordinates. + + + + +Texture coordinates are passed directly to the rasterizer. + + + + +Defines the possible shading modes. + + D3DSHADEMODE + + + +Gouraud shading. + + + + +Flat shading. + + + + +Defines the texture-addressing modes. + + D3DTEXTUREADDRESS + + + +Similar to a combination of Wrap, Mirror, and Clamp. + + + + +Texture coordinates outside the range are set to the border color. + + + + +Texture coordinates outside the range are clamped to the maximum values. + + + + +The texture is flipped at every integer junction. + + + + +Tile the texture at every integer junction. + + + + +Defines swap effects. + + D3DSWAPEFFECT + + + +Designates when an application is adopting flip mode, during which time an application's frame +is passed instead of copied to the Desktop Window Manager(DWM) for composition when the application +is presenting in windowed mode. Flip mode allows an application to more efficiently use memory +bandwidth as well as enabling an application to take advantage of full-screen-present statistics. +Flip mode does not affect full-screen behavior. Available in Direct3D 9Ex on Windows 7 only. + + + + +Use a dedicated area of video memory that can be overlayed on the primary surface. No copy is performed +when the overlay is displayed. The overlay operation is performed in hardware, without modifying +the data in the primary surface. Available in Direct3D 9Ex on Windows 7 only. + + + + +Copies the data between back buffers. + + + + +Flips between multiple back buffers. + + + + +Discards the data in the back buffers and render targets after a presentation. + + + + +Defines stencil buffer operations. + + D3DSTENCILOP + + + +Decrement the stencil value. + + + + +Increment the stencil value. + + + + +Invert the stencil value. + + + + +Decrement and clamp the stencil value. + + + + +Increment and clamp the stencil value. + + + + +Replace the stencil value. + + + + +Zero the stencil value. + + + + +Keep the current stencil value. + + + + +Defines texture filtering modes for a texture stage. + + D3DTEXTUREFILTERTYPE + + + +Convolution filter for monochrome textures. Available for Direct3D9Ex only. + + + + +A 4 sample Guassian filter is used. + + + + +A 4 sample tent filter is used. + + + + +Anisotropic interpolation is used. + + + + +Bilinear interpolation is used. + + + + +Point filtering is used. + + + + +Mipmapping is disabled. + + + + +Defines stream sources for hardware instancing. + + D3DSTREAMSOURCE + + + +Instance data. + + + + +Indexed data. + + + + +Specifies options for welding together vertices. + + D3DXWELDEPSILONSFLAGS + + + +Instructs the weld not to split vertices that are in separate attribute groups. + + + + +Instructs the weld to allow only modifications to vertices and not removal. This flag is +valid only if WeldPartialMatches is set. It is useful to modify vertices to be equal, +but not to allow vertices to be removed. + + + + +If a given vertex component is within epsilon, modify partially matched vertices so that both components are identical. +If all components are equal, remove one of the vertices. + + + + +Weld together all vertices that are at the same location. + + + + +Defines the transition style between values of a mesh animation. + + D3DXTRANSITION_TYPE + + + +Ease-in, ease-out spline transition between values. + + + + +Linear transition between values. + + + + +Defines the priority type to which an animation track is assigned. + + D3DXPRIORITY_TYPE + + + +Track should be blended with all the high-priority tracks before the +high-priority blend is mixed with the low-priority blend. + + + + +Track should be blended with all the low-priority tracks before the +low-priority blend is mixed with the high-priority blend. + + + + +Defines settings used for mesh tangent frame computations. + + D3DXTANGENT + + + +The results are stored in the original input mesh, and the output mesh is not used. + + + + +Compute the per-vertex normal vector for each triangle of the input mesh, +and ignore any normal vectors already in the input mesh. + + + + +Vertices are ordered in a clockwise direction around each triangle. +The computed normal vector direction is therefore inverted 180 degrees from +the direction computed using counterclockwise vertex ordering. + + + + +Compute a unit-length normal vector for each triangle of the input mesh. +Mutually exclusive with WeightByArea. + + + + +Weight the direction of the computed per-vertex normal or partial derivative vector according to the areas +of triangles attached to that vertex. Mutually exclusive with WeightEqual. + + + + +Compute the partial derivative with respect to texture coordinate u independently for each vertex, +and then compute the partial derivative with respect to V as the cross product of the normal vector +and the partial derivative with respect to U. Mutually exclusive with DontOrthogonalize and OrthogonalizeFromV. + + + + +Compute the partial derivative with respect to texture coordinate V independently for each vertex, +and then compute the partial derivative with respect to U as the cross product of the partial derivative +with respect to V and the normal vector. Mutually exclusive with DontOrthogonalize and OrthogonalizeFromU. + + + + +Do not transform texture coordinates to orthogonal Cartesian coordinates. Mutually exclusive +with OrthogonalizeFromU and OrthogonalizeFromV. + + + + +Do not normalize partial derivatives with respect to texture coordinates. If not normalized, +the scale of the partial derivatives is proportional to the scale of the 3D model divided by the +scale of the triangle in (U, V) space. This scale value provides a measure of how much the +texture is stretched in a given direction. The resulting vector length is a weighted sum of +the lengths of the partial derivatives. + + + + +Texture coordinate values in both U and V directions are between 0 and 1. In this case a texture +coordinate set will be chosen that minimizes the perimeter of the triangle. + + + + +Texture coordinate values in the V direction are between 0 and 1. In this case a texture +coordinate set will be chosen that minimizes the perimeter of the triangle. + + + + +Texture coordinate values in the U direction are between 0 and 1. In this case a texture +coordinate set will be chosen that minimizes the perimeter of the triangle. + + + + +No options. + + + + +Flags used to specify sprite rendering options to the flags parameter in the Sprite.Begin method. + + D3DXSPRITE + + + +Disables calling AddRef() on every draw, and Release() on Flush() for better performance. + + + + +Sprites are sorted by depth in back-to-front order prior to drawing. This procedure is +recommended when drawing transparent sprites of varying depths. You may combine SortDepthBackToFront +with SortTexture to sort first by depth, and second by texture. + + + + +Sprites are sorted by depth in front-to-back order prior to drawing. This procedure is +recommended when drawing opaque sprites of varying depths. You may combine SortDepthFrontToBack +with SortTexture to sort first by depth, and second by texture. + + + + +Sort sprites by texture prior to drawing. This can improve performance when drawing +non-overlapping sprites of uniform depth. You may also combine SortTexture with either +SortDepthFrontToBack or SortDepthBackToFront. This will sort the list of sprites by depth +first and texture second. + + + + +Enables alpha blending with RenderState.AlphaTestEnable set to true (for nonzero alpha). +Blend.SourceAlpha will be the source blend state, and Blend.InverseSourceAlpha will be the destination +blend state in calls to Device.SetRenderState. Font expects this flag to be set when drawing text. + + + + +Each sprite will be rotated about its center so that it is facing the viewer. +Sprite.SetWorldViewLH or Sprite.SetWorldViewRH must be called first. + + + + +The world, view, and projection transforms are not modified. The transforms currently set to the +device are used to transform the sprites when the batched sprites are drawn (when Sprite.Flush or +Sprite.End is called). If this flag is not specified, then world, view, and projection +transforms are modified so that sprites are drawn in screen-space coordinates. + + + + +The device render state is not to be changed when Sprite.Begin is called. The device is assumed +to be in a valid state to draw vertices containing UsageIndex = 0 in the DeclarationUsage.Position, +DeclarationUsage.TexCoord, and DeclarationUsage.Color data. + + + + +The device state is not to be saved or restored when Sprite.Begin or Sprite.End is called. + + + + +No flags. + + + + +Flags used for parsing, compiling, or assembling shaders. + + D3DXSHADER + + + +Enable the use of the original Direct3D 9 HLSL compiler. OCT2006_d3dx9_31_x86.cab or +OCT2006_d3dx9_31_x64.cab must be included as part of the applications redist. This flag +is required to compile ps_1_x shaders without using the promotion flag to ps_2_0. Specifying +this flag when obtaining an EffectCompiler interface causes subsequent calls to +EffectCompiler.CompileEffect and EffectCompiler/CompileShader through this object +to use the legacy compiler. + + + + +Do not validate the generated code against known capabilities and constraints. +This option is recommended only when compiling shaders that are known to work +(that is, shaders that have compiled before without this option). Shaders are +always validated by the runtime before they are set to the device. + + + + +Instruct the compiler to skip optimization steps during code generation. +Unless you are trying to isolate a problem in your code and you suspect the +compiler, using this option is not recommended. + + + + +This is a hint to the compiler to prefer using flow-control instructions. + + + + +Force all computations in the resulting shader to occur at partial precision +This may result in faster evaluation of shaders on some hardware. + + + + +Highest optimization level. Will produce best possible code but may take significantly longer to do so. +This will be useful for final builds of an application where performance is the most important factor. + + + + +Second highest optimization level. + + + + +Second lowest optimization level. + + + + +Lowest optimization level. May produce slower code but will do so more quickly. +This may be useful in a highly iterative shader development cycle. + + + + +Disables preshaders. The compiler will not pull out static expressions for evaluation on the host CPU. +Additionally, the compiler will not loft any expressions when compiling stand-alone functions. + + + + +Disable optimizations that may cause the output of a compiled shader program to differ from the output +of a program compiled with the DirectX 9 shader compiler due to small precision erros in floating point math. + + + + +Force the compiler to compile against the next highest available software target for vertex shaders. +This flag also turns optimizations off and debugging on. + + + + +Force the compiler to compile against the next highest available software target for pixel shaders. +This flag also turns optimizations off and debugging on. + + + + +Compile ps_1_x shaders as ps_2_0. Effects that specify ps_1_x targets will instead compile to ps_2_0 +targets because this is the minimum shader version supported by the DirectX 10 shader compiler. This flag +has no effect when used with higher level compile targets. + + + + +Insert debug filename, line numbers, and type and symbol information during shader compile. + + + + +This is a hint to the compiler to avoid using flow-control instructions. + + + + +Unless explicitly specified, matrices will be packed in row-major order (each vector will be in a single +row) when passed to or from the shader. + + + + +Unless explicitly specified, matrices will be packed in column-major order (each vector will be in a single +column) when passed to and from the shader. This is generally more efficient because it allows vector-matrix +multiplication to be performed using a series of dot products. + + + + +No flags. + + + + +Data type of the register. + + D3DXREGISTER_SET + + + +The register contains 4D sampler data. + + + + +4D floating-point number. + + + + +4D integer number. + + + + +Boolean value. + + + + +Defines the type of animation set looping modes used for playback. + + D3DXPLAYBACK_TYPE + + + +The animation alternates endlessly between playing forward and playing backward. + + + + +The animation plays once, and then it stops on the last frame. + + + + +The animation repeats endlessly. + + + + +Mesh patch types. + + D3DXPATCHMESHTYPE + + + +N-patch mesh type. + + + + +Triangle patch mesh type. + + + + +Rectangle patch mesh type. + + + + +Describes the data contained by the enumeration. + + D3DXPARAMETER_TYPE + + + +Parameter is not supported. + + + + +Parameter is a vertex shader fragment. + + + + +Parameter is a pixel shader fragment. + + + + +Parameter is a vertex shader. + + + + +Parameter is a pixel shader. + + + + +Parameter is a cube sampler. + + + + +Parameter is a 3D sampler. + + + + +Parameter is a 2D sampler. + + + + +Parameter is a 1D sampler. + + + + +Parameter is a sampler. + + + + +Parameter is a cube texture. + + + + +Parameter is a DD texture. + + + + +Parameter is a 2D texture. + + + + +Parameter is a 1D texture. + + + + +Parameter is a texture. + + + + +Parameter is a string. + + + + +Parameter is a floating-point number. + + + + +Parameter is an integer. Any floating-point values passed into ConstantTable.SetValue, +ConstantTable.SetVector, or ConstantTable::SetVectorArray will be rounded off (to zero decimal places) +before being written into the constant table. + + + + +Parameter is a Boolean. Any non-zero value passed into ConstantTable.SetBool, ConstantTable.SetBoolArray, +ConstantTable.SetValue, ConstantTable.SetVector, or ConstantTable.SetVectorArray will be mapped to 1 (true) +before being written into the constant table; otherwise, the value will be set to 0 in the constant table. + + + + +Parameter is a void pointer. + + + + +These flags provide additional information about effect parameters. + + D3DX_PARAMETER + + + +This parameter is marked as an annotation. + + + + +This parameter is marked as a literal value. + + + + +The value of a parameter will be shared by all effects in the same namespace. +Changing the value in one effect will change it in all shared effects. + + + + +This parameter is not marked. + + + + +The type of object. + + D3DXPARAMETER_CLASS + + + +Constant is a structure. + + + + +Constant is either a texture, shader, or a string. + + + + +Constant is a column major matrix. + + + + +Constant is a row major matrix. + + + + +Constant is a vector. + + + + +Constant is a scalar. + + + + +Normal maps generation constants. + + D3DX_NORMALMAP + + + +Computes the per-pixel occlusion term and encodes it into the alpha. An alpha of 1 means that the +pixel is not obscured in any way, and an alpha of 0 means that the pixel is completely obscured. + + + + +Inverts the direction of each normal. + + + + +Same as specifying the MirrorU and MirrorV flags. + + + + +Indicates that pixels off the edge of the texture on the v-axis should be mirrored, not wrapped. + + + + +Indicates that pixels off the edge of the texture on the u-axis should be mirrored, not wrapped. + + + + +Specifies simplification options for a mesh. + + D3DXMESHSIMP + + + +The mesh will be simplified by the number of faces specified in the MinValue parameter. + + + + +The mesh will be simplified by the number of vertices specified in the MinValue parameter. + + + + +Specifies the type of mesh optimization to be performed. + + D3DXMESHOPT + + + +Affects the vertex cache size. Using this flag specifies a default vertex cache size that works well on legacy hardware. + + + + +While attribute sorting, do not split vertices that are shared between attribute groups. + + + + +Optimize the faces only; do not optimize the vertices. + + + + +Reorders faces to maximize length of adjacent triangles. + + + + +Reorders faces to increase the cache hit rate of vertex caches. + + + + +Reorders faces to optimize for fewer attribute bundle state changes and enhanced BaseMesh.DrawSubset performance. + + + + +Reorders faces to remove unused vertices and faces. + + + + +Flags used to specify creation options for a mesh. + + D3DXMESH + + + +Equivalent to specifying both D3DXMESH_VB_SOFTWAREPROCESSING and D3DXMESH_IB_SOFTWAREPROCESSING. + + + + +Equivalent to specifying both D3DXMESH_VB_DYNAMIC and D3DXMESH_IB_DYNAMIC. + + + + +Equivalent to specifying both VertexBufferDynamic and IndexBufferDynamic. + + + + +Equivalent to specifying both VertexBufferManaged and IndexBufferManaged. + + + + +Equivalent to specifying both VertexBufferSystemMemory and IndexBufferSystemMemory. + + + + +Use hardware processing only. For mixed-mode device, this flag will cause the system +to use hardware (if supported in hardware) or will default to software processing. + + + + +Forces the cloned meshes to share vertex buffers. + + + + +Use the SoftwareProcessing usage flag for index buffers. + + + + +Use the Dynamic usage flag for index buffers. + + + + +Use the WriteOnly usage flag for index buffers. + + + + +Use the Managed usage flag for index buffers. + + + + +Use the SystemMemory usage flag for index buffers. + + + + +Use the SoftwareProcessing usage flag for vertex buffers. + + + + +Use the Dynamic usage flag for vertex buffers. + + + + +Use the WriteOnly usage flag for vertex buffers. + + + + +Use the Managed usage flag for vertex buffers. + + + + +Use the SystemMemory usage flag for vertex buffers. + + + + +Specifying this flag causes the vertex and index buffer of the mesh to be created with the NPatches +flag. This is required if the mesh object is to be rendered using N-patch enhancement using Direct3D. + + + + +Use the RTPatches usage flag for vertex and index buffers. + + + + +Use the Points usage flag for vertex and index buffers. + + + + +Use the DoNotClip usage flag for vertex and index buffers. + + + + +The mesh has 32-bit indices instead of 16-bit indices. + + + + +Defines the type of mesh data present in MeshData. + + D3DXMESHDATATYPE + + + +The data type is a patch mesh. See PatchMesh. + + + + +The data type is a progressive mesh. See ProgressiveMesh. + + + + +The data type is a mesh. See Mesh. + + + + +Describes the location for the include file. + + D3DXINCLUDE_TYPE + + + +Look in the system path for the include file. + + + + +Look in the local project for the include file. + + + + +Describes the supported image file formats. + + D3DXIMAGE_FILEFORMAT + + + +Portable float map file format. + + + + +High dynamic range (HDR) file format. + + + + +Windows device-independent bitmap (DIB) file format. + + + + +Portable pixmap (PPM) file format. + + + + +DirectDraw surface (DDS) file format. + + + + +Portable Network Graphics (PNG) file format. + + + + +Truevision (Targa, or TGA) image file format. + + + + +Joint Photographics Experts Group (JPEG) compressed file format. + + + + +Windows bitmap (BMP) file format. + + + + +Options for saving and creating effects. + + D3DXFX + + + +A stateblock saves state (except shaders and shader constants) when +calling Effect.Begin and restores state when calling Effect.End. + + + + +A stateblock saves state when calling Effect.Begin and restores state when calling Effect.End. + + + + +No state is saved when calling Effect.Begin or restored when calling Effect.End. + + + + +No flags. + + + + +Flags used to specify what filters to use when processing an image. + + D3DX_FILTER + + + +The output data is in sRGB (gamma 2.2) color space. + + + + +Input data is in sRGB (gamma 2.2) color space. + + + + +Specifying this flag is the same as specifying the SrgbIn and SrgbOut flags. + + + + +The resulting image must be dithered using a 4x4 ordered dither algorithm. + + + + +Specifying this flag is the same as specifying the MirrorU, MirrorV, and MirrorW flags. + + + + +Pixels off the edge of the texture on the w-axis should be mirrored, not wrapped. + + + + +Pixels off the edge of the texture on the v-axis should be mirrored, not wrapped. + + + + +Pixels off the edge of the texture on the u-axis should be mirrored, not wrapped. + + + + +Each pixel is computed by averaging a 2x2(x2) box of pixels from the source image. +This filter works only when the dimensions of the destination are half those of the source, +as is the case with mipmaps. + + + + +Every pixel in the source image contributes equally to the destination image. This is the slowest of the filters. + + + + +Each destination pixel is computed by sampling the four nearest pixels from the source +image. This filter works best when the scale on both axes is less than two. + + + + +Each destination pixel is computed by sampling the nearest pixel from the source image. + + + + +No scaling or filtering will take place. Pixels outside the bounds of the source image are assumed to be transparent black. + + + + +Uses the default behavior. + + + + +Describes the type of events that can be keyed by the animation controller. + + D3DXEVENT_TYPE + + + +Priority blend value. + + + + +Enable flag. + + + + +Track position. + + + + +Track weight. + + + + +Track speed. + + + + +Effect data types. The data is contained in the Value member of EffectDefault. + + D3DXEFFECTDEFAULTTYPE + + + +The data type is a DWORD. + + + + +The data type is an array of type float. The number of float types in +the array is specified by Value.Length in EffectDefault. + + + + +The data type is a NULL-terminated ASCII text string. + + + + +Defines operations to perform on vertices in preparation for mesh cleaning. + + D3DXCLEANTYPE + + + +Use this flag to prevent infinite loops during mesh simplification operations. + + + + +Use this flag to prevent infinite loops during mesh optimization operations. + + + + +Use this flag to prevent infinite loops during skinning setup mesh operations. + + + + +If a vertex is the apex of two triangle fans (a bowtie) and mesh operations will affect +one of the fans, then split the shared vertex into two new vertices. Bowties can cause problems +for operations such as mesh simplification that remove vertices, because removing one vertex +affects two distinct sets of triangles. + + + + +Merge triangles that share the same vertex indices but have face normals pointing +in opposite directions (back-facing triangles). Unless the triangles are not split by +adding a replicated vertex, mesh adjacency data from the two triangles may conflict. + + + + +The following flags are used to specify which channels in a texture to operate on. + + D3DX_CHANNEL + + + +Indicates the luminances of the red, green, and blue channels should be used. + + + + +Indicates the alpha channel should be used. + + + + +Indicates the green channel should be used. + + + + +Indicates the blue channel should be used. + + + + +Indicates the red channel should be used. + + + + +Flags used to obtain callback information. + + D3DXCALLBACK_SEARCH_FLAGS + + + +Reverse the callback search direction. + + + + +Exclude callbacks located at the initial position from the search. + + + + +Specifies which members of the structure are valid. + + None + + + +The rotation member is valid. + + + + +The scale member is valid. + + + + +The translation member is valid. + + + + +The transformation member is valid. + + + + +None of the members are valid. + + + + +Returns a value indicating whether the two BufferDescriptions are equivalent. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Returns a value indicating whether this instance is equal to the specified object. + + A to compare with this instance. + + true if has the same value as this instance; otherwise, false. + + + +Returns a value indicating whether this instance is equal to the specified object. + + An object to compare with this instance. + + true if has the same value as this instance; otherwise, false. + + + +Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + +Tests for inequality between two PipelineStatisticss. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + +Tests for equality between two PipelineStatisticss. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + +Number of times a compute shader was invoked. + + + + +Number of times a domain shader was invoked. + + + + +Number of times a hull shader was invoked. + + + + +Number of times a pixel shader was invoked. + + + + +Number of primitives that were rendered. This may be larger or smaller than CInvocations because after a primitive is clipped sometimes it is either broken up into more than one primitive or completely culled. + + + + +Number of primitives that were sent to the rasterizer. When the rasterizer is disabled, this will not increment. + + + + +Number of primitives output by a geometry shader. + + + + +Number of times a geometry shader was invoked. When the geometry shader is set to null, this statistic may or may not increment depending on the hardware manufacturer. + + + + +Number of times a vertex shader was invoked. Direct3D invokes the vertex shader once per vertex. + + + + +Number of primitives read by the input assembler. This number can be different depending on the primitive topology used. For example, a triangle strip with 6 vertices will produce 4 triangles, however a triangle list with 6 vertices will produce 2 triangles. + + + + +Number of vertices read by input assembler. + + + + +Contains query information about graphics pipeline activity. + + D3D11_QUERY_DATA_PIPELINE_STATISTICS + + + \ No newline at end of file diff --git a/Components/Squish 2.0/ManagedSquish.XML b/Components/Squish 2.0/ManagedSquish.XML new file mode 100644 index 0000000..be54c14 --- /dev/null +++ b/Components/Squish 2.0/ManagedSquish.XML @@ -0,0 +1,164 @@ + + + + ManagedSquish + + + + + Flags used when compressing/decompressing DXT data. These are the same values as defined in squish.h. + + + + + Use DXT1 compression. + + + + + Use DXT3 compression. + + + + + Use DXT5 compression. + + + + + Use a very slow but very high quality colour compressor. + + + + + Use a slow but high quality colour compressor (the default). + + + + + Use a fast but low quality colour compressor. + + + + + Use a perceptual metric for colour error (the default). + + + + + Use a uniform metric for colour error. + + + + + Weight the colour by alpha during cluster fit (disabled by default). + + + + + Wrapper for libsquish DXT compression/decompression library. + + + + + Returns the final size in bytes of DXT data compressed with the parameters specified in . + + Source image width. + Source image height. + Compression parameters. + Size in bytes of the DXT data. + + + + Compress a 4x4 pixel block using the parameters specified in . + + Source RGBA block. + Output DXT compressed block. + Compression flags. + + + + Compress a 4x4 pixel block using the parameters specified in . + + Source RGBA block. + Compression flags. + Output DXT compressed block. + + + + Compress a 4x4 pixel block using the parameters specified in . The parameter is a used as + a bit mask to specifify what pixels are valid for compression, corresponding the lowest bit to the first pixel. + + Source RGBA block. + Pixel bit mask. + Output DXT compressed block. + Compression flags. + + + + Compress a 4x4 pixel block using the parameters specified in . The parameter is a used as + a bit mask to specifify what pixels are valid for compression, corresponding the lowest bit to the first pixel. + + Source RGBA block. + Pixel bit mask. + Compression flags. + Output DXT compressed block. + + + + Decompresses a 4x4 pixel block using the parameters specified in . + + Output RGBA decompressed block. + Source DXT block. + Decompression flags. + + + + Decompresses a 4x4 pixel block using the parameters specified in . + + Source DXT block. + Decompression flags. + Output RGBA decompressed block. + + + + Compresses an image using the parameters specified in . + + Source RGBA image. + Width of the image. + Height of the image. + Output DXT compressed image. + Compression flags. + + + + Compresses an image using the parameters specified in . + + Source RGBA image. + Width of the image. + Height of the image. + Compression flags. + Output DXT compressed image. + + + + Decompresses an image using the parameters specified in . + + Output RGBA decompressed image. + Width of the image. + Height of the image. + Source DXT compressed image. + Decompression flags. + + + + Decompresses an image using the parameters specified in . + + Source DXT compressed image. + Width of the image. + Height of the image. + Decompression flags. + Output RGBA decompressed image. + + + diff --git a/Components/Squish 2.0/ManagedSquish.dll b/Components/Squish 2.0/ManagedSquish.dll new file mode 100644 index 0000000..91a3941 Binary files /dev/null and b/Components/Squish 2.0/ManagedSquish.dll differ diff --git a/Components/Squish 2.0/NativeSquish_x64.dll b/Components/Squish 2.0/NativeSquish_x64.dll new file mode 100644 index 0000000..a993150 Binary files /dev/null and b/Components/Squish 2.0/NativeSquish_x64.dll differ diff --git a/Components/Squish 2.0/NativeSquish_x86.dll b/Components/Squish 2.0/NativeSquish_x86.dll new file mode 100644 index 0000000..3c7e2aa Binary files /dev/null and b/Components/Squish 2.0/NativeSquish_x86.dll differ diff --git a/Components/dotnet zlib/Ionic.Zlib.dll b/Components/dotnet zlib/Ionic.Zlib.dll new file mode 100644 index 0000000..0afce7f Binary files /dev/null and b/Components/dotnet zlib/Ionic.Zlib.dll differ diff --git a/Controls/FixedListViewControl/CustomFormControl.csproj b/Controls/FixedListViewControl/CustomFormControl.csproj new file mode 100644 index 0000000..8a799e9 --- /dev/null +++ b/Controls/FixedListViewControl/CustomFormControl.csproj @@ -0,0 +1,16 @@ + + + + net7.0-windows + enable + true + enable + ..\..\Components\ + + + + false + false + + + diff --git a/Controls/FixedListViewControl/FixedListView.cs b/Controls/FixedListViewControl/FixedListView.cs new file mode 100644 index 0000000..7688a97 --- /dev/null +++ b/Controls/FixedListViewControl/FixedListView.cs @@ -0,0 +1,80 @@ +using System.Collections; + +namespace CustomFormControl +{ + public class FixedListView : ListView + { + private int _lastItemIndexClicked1 = -1; + private int _lastItemIndexClicked2 = -1; + private bool _shiftOn; + + protected override void OnKeyDown(KeyEventArgs e) + { + _shiftOn = e.Shift; + base.OnKeyDown(e); + } + + protected override void OnKeyUp(KeyEventArgs e) + { + _shiftOn = false; + base.OnKeyUp(e); + } + + protected override void OnMouseDown(MouseEventArgs e) + { + ListViewItem it = GetItemAt(e.X, e.Y); + + if (it == null) + { + //lastItemIndexClicked2 = -1; + } + else + { + _lastItemIndexClicked2 = it.Index; + } + if (!_shiftOn || (_lastItemIndexClicked1 < 0)) + { + _lastItemIndexClicked1 = _lastItemIndexClicked2; + } + base.OnMouseDown(e); + } + + protected override void OnVirtualItemsSelectionRangeChanged( + ListViewVirtualItemsSelectionRangeChangedEventArgs e) + { + try + { + int start = _lastItemIndexClicked1; + int end = _lastItemIndexClicked2; + if (end < start) + { + int temp = start; + start = end; + end = temp; + } + if ((start >= 0) && (end >= 0)) + { + ArrayList toRemove = new ArrayList(); + foreach (int index in SelectedIndices) + { + if ((index < start) || (index > end)) + toRemove.Add(index); + } + if (toRemove.Count > 0) + { + foreach (int index in toRemove) + { + SelectedIndices.Remove(index); + } + } + } + ListViewVirtualItemsSelectionRangeChangedEventArgs te = + new ListViewVirtualItemsSelectionRangeChangedEventArgs(start, end, e.IsSelected); + base.OnVirtualItemsSelectionRangeChanged(te); + } + catch + { + } + } + } +} \ No newline at end of file diff --git a/Controls/FixedListViewControl/ListViewNF.cs b/Controls/FixedListViewControl/ListViewNF.cs new file mode 100644 index 0000000..4e0f2c6 --- /dev/null +++ b/Controls/FixedListViewControl/ListViewNF.cs @@ -0,0 +1,154 @@ +using System.Collections; +using Timer = System.Windows.Forms.Timer; + +namespace CustomFormControl +{ + public partial class ListViewNF : ListView + { + public class ListViewColumnSorter : IComparer + { + private int _columnToSort; + + private SortOrder _orderOfSort; + + private readonly CaseInsensitiveComparer _objectCompare; + + public ListViewColumnSorter() + { + // Initialize the column to '0' + _columnToSort = 0; + + // Initialize the sort order to 'none' + _orderOfSort = SortOrder.None; + + // Initialize the CaseInsensitiveComparer object + _objectCompare = new CaseInsensitiveComparer(); + } + + public int Compare(object x, object y) + { + // Cast the objects to be compared to ListViewItem objects + ListViewItem listviewX = (ListViewItem)x; + ListViewItem listviewY = (ListViewItem)y; + + // Compare the two items + int compareResult = _objectCompare.Compare(listviewX.SubItems[_columnToSort].Text, listviewY.SubItems[_columnToSort].Text); + + // Calculate correct return value based on object comparison + if (_orderOfSort == SortOrder.Ascending) + { + // Ascending sort is selected, return normal result of compare operation + return compareResult; + } + if (_orderOfSort == SortOrder.Descending) + { + // Descending sort is selected, return negative result of compare operation + return (-compareResult); + } + // Return '0' to indicate they are equal + return 0; + } + + public int SortColumn + { + set => _columnToSort = value; + get => _columnToSort; + } + + public SortOrder Order + { + set => _orderOfSort = value; + get => _orderOfSort; + } + + } + private readonly Timer _itemSelectionChangedTimer = new(); + private readonly Timer _selectedIndexChangedTimer = new(); + + private ListViewItemSelectionChangedEventArgs? _itemSelectionChangedEventArgs; + private EventArgs? _selectedIndexChangedEventArgs; + private readonly ListViewColumnSorter _sorter; + + public ListViewNF() + { + _itemSelectionChangedTimer.Interval = 1; + _selectedIndexChangedTimer.Interval = 1; + + _itemSelectionChangedTimer.Tick += (_, e) => + { + OnItemSelectionChanged(e: _itemSelectionChangedEventArgs); + _itemSelectionChangedEventArgs = null; + }; + _selectedIndexChangedTimer.Tick += (_, e) => + { + OnSelectedIndexChanged(e: _selectedIndexChangedEventArgs); + _selectedIndexChangedEventArgs = null; + }; + + //Activate double buffering + SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true); + + //Enable the OnNotifyMessage event so we get a chance to filter out + // Windows messages before they get to the form's WndProc + SetStyle(ControlStyles.EnableNotifyMessage, true); + + _sorter = new ListViewColumnSorter(); + ListViewItemSorter = _sorter; + ColumnClick += ListViewNF_ColumnClick; + } + + void ListViewNF_ColumnClick(object sender, ColumnClickEventArgs e) + { + if (e.Column == _sorter.SortColumn) + { + _sorter.Order = _sorter.Order == SortOrder.Ascending ? SortOrder.Descending : SortOrder.Ascending; + } + else + { + _sorter.SortColumn = e.Column; + _sorter.Order = SortOrder.Ascending; + } + Sort(); + } + + protected override void OnNotifyMessage(Message m) + { + //Filter out the WM_ERASEBKGND message + if (m.Msg != 0x14) + { + base.OnNotifyMessage(m); + } + } + + + + protected override void OnItemSelectionChanged(ListViewItemSelectionChangedEventArgs e) + { + if (_itemSelectionChangedTimer.Enabled) + { + _itemSelectionChangedTimer.Stop(); + base.OnItemSelectionChanged(e); + } + else + { + _itemSelectionChangedEventArgs = e; + _itemSelectionChangedTimer.Start(); + } + } + + protected override void OnSelectedIndexChanged(EventArgs e) + { + if (_selectedIndexChangedTimer.Enabled) + { + _selectedIndexChangedTimer.Stop(); + base.OnSelectedIndexChanged(e); + } + else + { + _selectedIndexChangedEventArgs = e; + _selectedIndexChangedTimer.Start(); + } + } + + } +} diff --git a/LOM Log Viewer/LOM Log Viewer.csproj b/LOM Log Viewer/LOM Log Viewer.csproj new file mode 100644 index 0000000..8c41b50 --- /dev/null +++ b/LOM Log Viewer/LOM Log Viewer.csproj @@ -0,0 +1,11 @@ + + + + Exe + net8.0 + LOM_Log_Viewer + enable + enable + + + diff --git a/LOM Log Viewer/Program.cs b/LOM Log Viewer/Program.cs new file mode 100644 index 0000000..3751555 --- /dev/null +++ b/LOM Log Viewer/Program.cs @@ -0,0 +1,2 @@ +// See https://aka.ms/new-console-template for more information +Console.WriteLine("Hello, World!"); diff --git a/Legend of Mir.sln b/Legend of Mir.sln new file mode 100644 index 0000000..63f8164 --- /dev/null +++ b/Legend of Mir.sln @@ -0,0 +1,110 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.5.33424.131 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Client", "Client\Client.csproj", "{520C78C8-1838-4A22-B024-08C044ADE635}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Shared", "Shared\Shared.csproj", "{ABB9A7A2-DB8C-497F-B67E-C522F812117E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Server.Library", "Server\Server.Library.csproj", "{5B5CAC11-D4DE-44EC-9175-0D2BB7A9603C}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Server", "Server.MirForms\Server.csproj", "{884D7004-37B4-4C38-AA64-F73BF64E9CB4}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Notes", "Notes", "{F75359D0-CBBC-49F2-9BB7-3AAC3B4D775F}" + ProjectSection(SolutionItems) = preProject + ..\crystal-mir2\MonsterAttackMethods.txt = ..\crystal-mir2\MonsterAttackMethods.txt + ..\crystal-mir2\MonsterReferenceVideos.txt = ..\crystal-mir2\MonsterReferenceVideos.txt + SoundRules.txt = SoundRules.txt + EndProjectSection +EndProject +Project("{E24C65DC-7377-472B-9ABA-BC803B73C61A}") = "PatcherWebSite", "PatcherWebSite\", "{C1F2FAE3-485C-4BF4-8939-B44EAD5619D4}" + ProjectSection(WebsiteProperties) = preProject + TargetFrameworkMoniker = ".NETFramework,Version%3Dv4.8" + Debug.AspNetCompiler.VirtualPath = "/localhost_50790" + Debug.AspNetCompiler.PhysicalPath = "PatcherWebSite\" + Debug.AspNetCompiler.TargetPath = "PrecompiledWeb\localhost_50790\" + Debug.AspNetCompiler.Updateable = "true" + Debug.AspNetCompiler.ForceOverwrite = "true" + Debug.AspNetCompiler.FixedNames = "false" + Debug.AspNetCompiler.Debug = "True" + Release.AspNetCompiler.VirtualPath = "/localhost_50790" + Release.AspNetCompiler.PhysicalPath = "PatcherWebSite\" + Release.AspNetCompiler.TargetPath = "PrecompiledWeb\localhost_50790\" + Release.AspNetCompiler.Updateable = "true" + Release.AspNetCompiler.ForceOverwrite = "true" + Release.AspNetCompiler.FixedNames = "false" + Release.AspNetCompiler.Debug = "False" + VWDPort = "50790" + SlnRelativePath = "PatcherWebSite\" + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Utils", "Utils", "{02FF090B-782B-49FD-BFEC-E4B50DCFF698}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AutoPatcherAdmin", "AutoPatcherAdmin\AutoPatcherAdmin.csproj", "{6312929E-6CD5-48FE-A147-C10C09983A00}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Controls", "Controls", "{8E10D0C3-2E10-468B-BD77-C717ED6C7754}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CustomFormControl", "Controls\FixedListViewControl\CustomFormControl.csproj", "{297E115E-AC0A-48CC-8FD7-059FED59BA73}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LibraryEditor", "LibraryEditor\LibraryEditor.csproj", "{A3B8CA9F-5C91-49CB-902D-62A38DF4EF93}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Map Editor", "MapEditor\Map Editor\Map Editor.csproj", "{667362DB-5C56-4B9F-9FD5-0797D13C8766}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {520C78C8-1838-4A22-B024-08C044ADE635}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {520C78C8-1838-4A22-B024-08C044ADE635}.Debug|Any CPU.Build.0 = Debug|Any CPU + {520C78C8-1838-4A22-B024-08C044ADE635}.Release|Any CPU.ActiveCfg = Release|Any CPU + {520C78C8-1838-4A22-B024-08C044ADE635}.Release|Any CPU.Build.0 = Release|Any CPU + {ABB9A7A2-DB8C-497F-B67E-C522F812117E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {ABB9A7A2-DB8C-497F-B67E-C522F812117E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {ABB9A7A2-DB8C-497F-B67E-C522F812117E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {ABB9A7A2-DB8C-497F-B67E-C522F812117E}.Release|Any CPU.Build.0 = Release|Any CPU + {5B5CAC11-D4DE-44EC-9175-0D2BB7A9603C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5B5CAC11-D4DE-44EC-9175-0D2BB7A9603C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5B5CAC11-D4DE-44EC-9175-0D2BB7A9603C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5B5CAC11-D4DE-44EC-9175-0D2BB7A9603C}.Release|Any CPU.Build.0 = Release|Any CPU + {884D7004-37B4-4C38-AA64-F73BF64E9CB4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {884D7004-37B4-4C38-AA64-F73BF64E9CB4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {884D7004-37B4-4C38-AA64-F73BF64E9CB4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {884D7004-37B4-4C38-AA64-F73BF64E9CB4}.Release|Any CPU.Build.0 = Release|Any CPU + {C1F2FAE3-485C-4BF4-8939-B44EAD5619D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C1F2FAE3-485C-4BF4-8939-B44EAD5619D4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C1F2FAE3-485C-4BF4-8939-B44EAD5619D4}.Release|Any CPU.ActiveCfg = Debug|Any CPU + {C1F2FAE3-485C-4BF4-8939-B44EAD5619D4}.Release|Any CPU.Build.0 = Debug|Any CPU + {6312929E-6CD5-48FE-A147-C10C09983A00}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6312929E-6CD5-48FE-A147-C10C09983A00}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6312929E-6CD5-48FE-A147-C10C09983A00}.Release|Any CPU.Build.0 = Release|Any CPU + {297E115E-AC0A-48CC-8FD7-059FED59BA73}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {297E115E-AC0A-48CC-8FD7-059FED59BA73}.Debug|Any CPU.Build.0 = Debug|Any CPU + {297E115E-AC0A-48CC-8FD7-059FED59BA73}.Release|Any CPU.ActiveCfg = Release|Any CPU + {297E115E-AC0A-48CC-8FD7-059FED59BA73}.Release|Any CPU.Build.0 = Release|Any CPU + {A3B8CA9F-5C91-49CB-902D-62A38DF4EF93}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A3B8CA9F-5C91-49CB-902D-62A38DF4EF93}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A3B8CA9F-5C91-49CB-902D-62A38DF4EF93}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A3B8CA9F-5C91-49CB-902D-62A38DF4EF93}.Release|Any CPU.Build.0 = Release|Any CPU + {667362DB-5C56-4B9F-9FD5-0797D13C8766}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {667362DB-5C56-4B9F-9FD5-0797D13C8766}.Debug|Any CPU.Build.0 = Debug|Any CPU + {667362DB-5C56-4B9F-9FD5-0797D13C8766}.Release|Any CPU.ActiveCfg = Release|Any CPU + {667362DB-5C56-4B9F-9FD5-0797D13C8766}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {C1F2FAE3-485C-4BF4-8939-B44EAD5619D4} = {02FF090B-782B-49FD-BFEC-E4B50DCFF698} + {6312929E-6CD5-48FE-A147-C10C09983A00} = {02FF090B-782B-49FD-BFEC-E4B50DCFF698} + {8E10D0C3-2E10-468B-BD77-C717ED6C7754} = {02FF090B-782B-49FD-BFEC-E4B50DCFF698} + {297E115E-AC0A-48CC-8FD7-059FED59BA73} = {8E10D0C3-2E10-468B-BD77-C717ED6C7754} + {A3B8CA9F-5C91-49CB-902D-62A38DF4EF93} = {02FF090B-782B-49FD-BFEC-E4B50DCFF698} + {667362DB-5C56-4B9F-9FD5-0797D13C8766} = {02FF090B-782B-49FD-BFEC-E4B50DCFF698} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {72BECBF0-1873-44F4-AC66-1E923AD0937A} + EndGlobalSection +EndGlobal diff --git a/LibraryEditor/Functions/Function.cs b/LibraryEditor/Functions/Function.cs new file mode 100644 index 0000000..e0b7e03 --- /dev/null +++ b/LibraryEditor/Functions/Function.cs @@ -0,0 +1,298 @@ +using System; +using System.Drawing; +using System.Drawing.Imaging; +using System.Windows.Forms; + +namespace ShadowMerger +{ + class Function + { + // int dimension = 500 - Image manipulation area, increase for larger images but must be static for while library + public static Bitmap combineIMG(string image, string shadow, int[] imageOffsets, int[] shadowOffsets, int dimension = 500) + { + Bitmap finalImage = new Bitmap(dimension, dimension); + + int center = finalImage.Width / 2; + using (Graphics g = Graphics.FromImage(finalImage)) + { + //set background color + g.Clear(Color.Black); + + Bitmap shadowImage = new Bitmap(shadow); + + g.DrawImage(shadowImage, new Rectangle(shadowOffsets[0] + center, shadowOffsets[1] + center, shadowImage.Width, shadowImage.Height)); + } + + finalImage = MirStyleTransparentBitLock(finalImage); + finalImage = ChangeColorBitLock(finalImage); + + using (Graphics gr = Graphics.FromImage(finalImage)) + { + Bitmap mobImage = new Bitmap(image); + mobImage.MakeTransparent(Color.Black); + + gr.DrawImage(mobImage, new Rectangle(imageOffsets[0] + center, imageOffsets[1] + center, mobImage.Width, mobImage.Height)); + } + + return finalImage; + } + + // Remove region fat + public static Bitmap Crop(Bitmap bmp) + { + int w = bmp.Width, h = bmp.Height; + + Func allWhiteRow = row => + { + for (int i = 0; i < w; ++i) + if (bmp.GetPixel(i, row).R != 0) + return false; + return true; + }; + + Func allWhiteColumn = col => + { + for (int i = 0; i < h; ++i) + if (bmp.GetPixel(col, i).R != 0) + return false; + return true; + }; + + int topmost = 0; + for (int row = 0; row < h; ++row) + { + if (allWhiteRow(row)) + topmost = row; + else break; + } + + int bottommost = 0; + for (int row = h - 1; row >= 0; --row) + { + if (allWhiteRow(row)) + bottommost = row; + else break; + } + + int leftmost = 0, rightmost = 0; + for (int col = 0; col < w; ++col) + { + if (allWhiteColumn(col)) + leftmost = col; + else + break; + } + + for (int col = w - 1; col >= 0; --col) + { + if (allWhiteColumn(col)) + rightmost = col; + else + break; + } + + int croppedWidth = rightmost - leftmost; + int croppedHeight = bottommost - topmost; + try + { + Bitmap target = new Bitmap(croppedWidth, croppedHeight); + using (Graphics g = Graphics.FromImage(target)) + { + g.DrawImage(bmp, + new RectangleF(0, 0, croppedWidth, croppedHeight), + new RectangleF(leftmost, topmost, croppedWidth, croppedHeight), + GraphicsUnit.Pixel); + } + return target; + } + catch (Exception ex) + { + throw new Exception( + string.Format("Values are topmost={0} btm={1} left={2} right={3}", topmost, bottommost, leftmost, rightmost), + ex); + } + } + + public static bool IsOdd(int value) + { + return value % 2 != 0; + } + + // Mir 2 standard colour + public static Bitmap ChangeColor(Bitmap scrBitmap) + { + Color newColor = Color.FromArgb(16, 8, 8); + + for (int i = 0; i < scrBitmap.Width; i++) + { + for (int j = 0; j < scrBitmap.Height; j++) + { + if (scrBitmap.GetPixel(i, j) != Color.FromArgb(0, 0, 0)) //8 12 8 + { + scrBitmap.SetPixel(i, j, newColor); + } + } + } + return scrBitmap; + } + + // Convert Mir 3 shadow to Mir 2 + public static Bitmap MirStyleTransparent(Bitmap bmp) + { + Bitmap myBitmap = new Bitmap(bmp); + for (int i = 0; i < myBitmap.Width - 1; i++) + { + for (int j = 0; j < myBitmap.Height - 1; j++) + { + if (IsOdd(i) & IsOdd(j)) + { + myBitmap.SetPixel(i, j, Color.Black); + } + else if (!IsOdd(i) & !IsOdd(j)) + { + myBitmap.SetPixel(i, j, Color.Black); + } + } + } + + return myBitmap; + } + + // Extra pish + public static Bitmap ChangeColorBitLock(Bitmap scrBitmap) + { + Color newColor = Color.FromArgb(16, 8, 8); + + LockBitmap lockBitmap = new LockBitmap(scrBitmap); + lockBitmap.LockBits(); + + for (int i = 0; i < lockBitmap.Width; i++) + { + for (int j = 0; j < lockBitmap.Height; j++) + { + if (lockBitmap.GetPixel(i, j) != Color.FromArgb(0, 0, 0)) //8 12 8 + { + lockBitmap.SetPixel(i, j, newColor); + } + } + } + lockBitmap.UnlockBits(); + return scrBitmap; + } + + public static Bitmap MirStyleTransparentBitLock(Bitmap bmp) + { + LockBitmap lockBitmap = new LockBitmap(bmp); + lockBitmap.LockBits(); + + for (int i = 0; i < lockBitmap.Width - 1; i++) + { + for (int j = 0; j < lockBitmap.Height - 1; j++) + { + if (IsOdd(i) & IsOdd(j)) + { + lockBitmap.SetPixel(i, j, Color.Black); + } + else if (!IsOdd(i) & !IsOdd(j)) + { + lockBitmap.SetPixel(i, j, Color.Black); + } + } + } + lockBitmap.UnlockBits(); + return bmp; + } + // End Extra pish + + public static Bitmap Mir3StyleShadow(Color colour, Image Path) + { + Bitmap mi; + mi = new Bitmap(Path); + int tempWidth = mi.Width;//trueSize.Width + int tempHeight = mi.Height;//trueSize.Height + + Bitmap Temp = new Bitmap(tempWidth + tempHeight / 2, tempHeight); + + // Render Mir 3 Shadow / Far + int DestY, DestX; + for (int Y = 0; Y < tempHeight; Y++) + { + if (Y % 2 == 1) continue; + DestY = Y / 2 + Temp.Height / 2 - 3; + for (int X = 0; X < tempWidth; X++) + { + if (mi.GetPixel(X, Y).Name == "0") continue; + DestX = X + (Temp.Height - Y) / 2; + Temp.SetPixel(DestX, DestY, colour); + } + } + + // Cut out shadow behind mob + for (int X = 0; X < mi.Width; X++) + { + for (int Y = 0; Y < mi.Height; Y++) + { + if (mi.GetPixel(X, Y).Name != "0") + Temp.SetPixel(X, Y, Color.Transparent); + } + } + return Temp; + } + + // Set image opacity, utter + /// + /// method for changing the opacity of an image + /// + /// image to set opacity on + /// percentage of opacity + /// + public static Image SetImageOpacity(Image image, float opacity) + { + try + { + //create a Bitmap the size of the image provided + Bitmap bmp = new Bitmap(image.Width, image.Height); + + //create a graphics object from the image + using (Graphics gfx = Graphics.FromImage(bmp)) + { + + //create a color matrix object + ColorMatrix matrix = new ColorMatrix(); + + //set the opacity + matrix.Matrix33 = opacity; + + //create image attributes + ImageAttributes attributes = new ImageAttributes(); + + //set the color(opacity) of the image + attributes.SetColorMatrix(matrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap); + + //now draw the image + gfx.DrawImage(image, new Rectangle(0, 0, bmp.Width, bmp.Height), 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, attributes); + } + return bmp; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message); + return null; + } + } + + public class Benchmark + { + private static DateTime startDate = DateTime.MinValue; + private static DateTime endDate = DateTime.MinValue; + public static TimeSpan Span { get { return endDate.Subtract(startDate); } } + public static void Start() { startDate = DateTime.Now; } + public static void End() { endDate = DateTime.Now; } + public static double GetSeconds() + { + if (endDate == DateTime.MinValue) return 0.0; + else return Span.TotalSeconds; + } + } + } +} diff --git a/LibraryEditor/Functions/LockBitmap.cs b/LibraryEditor/Functions/LockBitmap.cs new file mode 100644 index 0000000..fad47e6 --- /dev/null +++ b/LibraryEditor/Functions/LockBitmap.cs @@ -0,0 +1,141 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Drawing.Imaging; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading.Tasks; + +namespace ShadowMerger +{ + public class LockBitmap + { + Bitmap source = null; + IntPtr Iptr = IntPtr.Zero; + BitmapData bitmapData = null; + + public byte[] Pixels { get; set; } + public int Depth { get; private set; } + public int Width { get; private set; } + public int Height { get; private set; } + + public LockBitmap(Bitmap source) + { + this.source = source; + } + + public void LockBits() + { + try + { + Width = source.Width; + Height = source.Height; + + int PixelCount = Width * Height; + + Rectangle rect = new Rectangle(0, 0, Width, Height); + + Depth = System.Drawing.Bitmap.GetPixelFormatSize(source.PixelFormat); + + if (Depth != 8 && Depth != 24 && Depth != 32) + { + throw new ArgumentException("Only 8, 24 and 32 bpp images are supported."); + } + + bitmapData = source.LockBits(rect, ImageLockMode.ReadWrite, + source.PixelFormat); + + int step = Depth / 8; + Pixels = new byte[PixelCount * step]; + Iptr = bitmapData.Scan0; + + Marshal.Copy(Iptr, Pixels, 0, Pixels.Length); + } + catch + { + throw; + } + } + + public void UnlockBits() + { + try + { + Marshal.Copy(Pixels, 0, Iptr, Pixels.Length); + + source.UnlockBits(bitmapData); + } + catch + { + throw; + } + } + + public Color GetPixel(int x, int y) + { + Color clr = Color.Empty; + + int + cCount = Depth / 8, + i = ((y * Width) + x) * cCount; + + if (i > Pixels.Length - cCount) + throw new IndexOutOfRangeException(); + + if (Depth == 32) + { + byte + b = Pixels[i], + g = Pixels[i + 1], + r = Pixels[i + 2], + a = Pixels[i + 3]; + + clr = Color.FromArgb(a, r, g, b); + } + + if (Depth == 24) + { + byte b = Pixels[i], + g = Pixels[i + 1], + r = Pixels[i + 2]; + + clr = Color.FromArgb(r, g, b); + } + + if (Depth == 8) + { + byte c = Pixels[i]; + + clr = Color.FromArgb(c, c, c); + } + + return clr; + } + + public void SetPixel(int x, int y, Color color) + { + int + cCount = Depth / 8, + i = ((y * Width) + x) * cCount; + + if (Depth == 32) + { + Pixels[i] = color.B; + Pixels[i + 1] = color.G; + Pixels[i + 2] = color.R; + Pixels[i + 3] = color.A; + } + if (Depth == 24) + { + Pixels[i] = color.B; + Pixels[i + 1] = color.G; + Pixels[i + 2] = color.R; + } + if (Depth == 8) + { + Pixels[i] = color.B; + } + } + } +} diff --git a/LibraryEditor/Graphics/MLibraryV2.cs b/LibraryEditor/Graphics/MLibraryV2.cs new file mode 100644 index 0000000..fc25f2e --- /dev/null +++ b/LibraryEditor/Graphics/MLibraryV2.cs @@ -0,0 +1,448 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Drawing.Imaging; +using System.IO; +using System.IO.Compression; +using System.Runtime.InteropServices; +using System.Text; +using System.Windows.Forms; + +namespace LibraryEditor +{ + public sealed class MLibraryV2 + { + public const int LibVersion = 1; + + public static bool Load = true; + public string FileName; + + public List Images = new List(); + + public List IndexList = new List(); + public int Count; + private bool _initialized; + + private BinaryReader _reader; + private FileStream _stream; + + public MLibraryV2(string filename) + { + FileName = filename; + Initialize(); + Close(); + } + + public void Initialize() + { + int CurrentVersion; + _initialized = true; + + if (!File.Exists(FileName)) + return; + + _stream = new FileStream(FileName, FileMode.Open, FileAccess.ReadWrite); + _reader = new BinaryReader(_stream); + CurrentVersion = _reader.ReadInt32(); + + if (CurrentVersion != 1) + { + MessageBox.Show("Wrong version, expecting lib version: " + LibVersion.ToString() + " found version: " + CurrentVersion.ToString() + ".", "Failed to open", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1); + return; + } + + Count = _reader.ReadInt32(); + + Images = new List(); + IndexList = new List(); + + for (int i = 0; i < Count; i++) + IndexList.Add(_reader.ReadInt32()); + + for (int i = 0; i < Count; i++) + Images.Add(null); + + for (int i = 0; i < Count; i++) + CheckImage(i); + } + + public void Close() + { + if (_stream != null) + _stream.Dispose(); + } + + public void Save() + { + Close(); + + MemoryStream stream = new MemoryStream(); + BinaryWriter writer = new BinaryWriter(stream); + + Count = Images.Count; + IndexList.Clear(); + + int offSet = (4 + 4) + (Count * 4); + for (int i = 0; i < Count; i++) + { + IndexList.Add((int)stream.Length + offSet); + Images[i].Save(writer); + } + + writer.Flush(); + byte[] fBytes = stream.ToArray(); + + _stream = File.Create(FileName); + writer = new BinaryWriter(_stream); + + writer.Write(LibVersion); + + writer.Write(Count); + + for (int i = 0; i < Count; i++) + writer.Write(IndexList[i]); + + writer.Write(fBytes); + + writer.Flush(); + writer.Close(); + writer.Dispose(); + Close(); + } + + private void CheckImage(int index) + { + if (!_initialized) + Initialize(); + + if (Images == null || index < 0 || index >= Images.Count) + return; + + if (Images[index] == null) + { + _stream.Position = IndexList[index]; + Images[index] = new MImage(_reader); + } + + if (!Load) return; + + MImage mi = Images[index]; + if (!mi.TextureValid) + { + _stream.Seek(IndexList[index] + 12, SeekOrigin.Begin); + mi.CreateTexture(_reader); + } + } + + public Point GetOffSet(int index) + { + if (!_initialized) + Initialize(); + + if (Images == null || index < 0 || index >= Images.Count) + return Point.Empty; + + if (Images[index] == null) + { + _stream.Seek(IndexList[index], SeekOrigin.Begin); + Images[index] = new MImage(_reader); + } + + return new Point(Images[index].X, Images[index].Y); + } + + public Size GetSize(int index) + { + if (!_initialized) + Initialize(); + if (Images == null || index < 0 || index >= Images.Count) + return Size.Empty; + + if (Images[index] == null) + { + _stream.Seek(IndexList[index], SeekOrigin.Begin); + Images[index] = new MImage(_reader); + } + + return new Size(Images[index].Width, Images[index].Height); + } + + public MImage GetMImage(int index) + { + if (index < 0 || index >= Images.Count) + return null; + + return Images[index]; + } + + public Bitmap GetPreview(int index) + { + if (index < 0 || index >= Images.Count) + return new Bitmap(1, 1); + + MImage image = Images[index]; + + if (image == null || image.Image == null) + return new Bitmap(1, 1); + + if (image.Preview == null) + image.CreatePreview(); + + return image.Preview; + } + + public void AddImage(Bitmap image, short x, short y, bool removeBlack = true) + { + MImage mImage = new MImage(image, removeBlack) { X = x, Y = y }; + + Count++; + Images.Add(mImage); + } + + public void ReplaceImage(int Index, Bitmap image, short x, short y, bool removeBlack = true) + { + MImage mImage = new MImage(image, removeBlack) { X = x, Y = y }; + + Images[Index] = mImage; + } + + public void InsertImage(int index, Bitmap image, short x, short y, bool removeBlack = true) + { + MImage mImage = new MImage(image, removeBlack) { X = x, Y = y }; + + Count++; + Images.Insert(index, mImage); + } + + public void RemoveImage(int index) + { + if (Images == null || Count <= 1) + { + Count = 0; + Images = new List(); + return; + } + Count--; + + Images.RemoveAt(index); + } + + public static bool CompareBytes(byte[] a, byte[] b) + { + if (a == b) return true; + + if (a == null || b == null || a.Length != b.Length) return false; + + for (int i = 0; i < a.Length; i++) if (a[i] != b[i]) return false; + + return true; + } + + public void RemoveBlanks(bool safe = false) + { + for (int i = Count - 1; i >= 0; i--) + { + if (Images[i].FBytes == null || Images[i].FBytes.Length <= 24) + { + if (!safe) + RemoveImage(i); + else if (Images[i].X == 0 && Images[i].Y == 0) + RemoveImage(i); + } + } + } + + public sealed class MImage + { + public short Width, Height, X, Y, ShadowX, ShadowY; + public byte Shadow; + public int Length; + public byte[] FBytes; + public bool TextureValid; + public Bitmap Image, Preview; + + //layer 2: + public short MaskWidth, MaskHeight, MaskX, MaskY; + + public int MaskLength; + public byte[] MaskFBytes; + public Bitmap MaskImage; + public Boolean HasMask; + + public MImage(BinaryReader reader) + { + Width = reader.ReadInt16(); + Height = reader.ReadInt16(); + X = reader.ReadInt16(); + Y = reader.ReadInt16(); + Length = reader.ReadInt32(); + FBytes = reader.ReadBytes(Length); + } + + public MImage(byte[] image, short Width, short Height)//only use this when converting from old to new type! + { + FBytes = image; + this.Width = Width; + this.Height = Height; + } + + public MImage(Bitmap image, bool removeBlack = true) + { + if (image == null) + { + FBytes = new byte[0]; + return; + } + + Width = (short)image.Width; + Height = (short)image.Height; + + Image = image;// FixImageSize(image); + FBytes = ConvertBitmapToArray(Image, removeBlack); + } + + private Bitmap FixImageSize(Bitmap input) + { + int w = input.Width + (4 - input.Width % 4) % 4; + int h = input.Height + (4 - input.Height % 4) % 4; + + if (input.Width != w || input.Height != h) + { + Bitmap temp = new Bitmap(w, h); + using (Graphics g = Graphics.FromImage(temp)) + { + g.Clear(Color.Transparent); + g.InterpolationMode = InterpolationMode.NearestNeighbor; + g.DrawImage(input, 0, 0); + g.Save(); + } + input.Dispose(); + input = temp; + } + + return input; + } + + private unsafe byte[] ConvertBitmapToArray(Bitmap input, bool removeBlack = true) + { + BitmapData data = input.LockBits(new Rectangle(0, 0, input.Width, input.Height), ImageLockMode.ReadOnly, + PixelFormat.Format32bppArgb); + + byte[] pixels = new byte[input.Width * input.Height * 4]; + + Marshal.Copy(data.Scan0, pixels, 0, pixels.Length); + + input.UnlockBits(data); + + if (removeBlack) + { + for (int i = 0; i < pixels.Length; i += 4) + { + if (pixels[i] == 0 && pixels[i + 1] == 0 && pixels[i + 2] == 0) + pixels[i + 3] = 0; //Make Transparent + } + } + + byte[] compressedBytes; + compressedBytes = Compress(pixels); + + return compressedBytes; + } + + public unsafe void CreateTexture(BinaryReader reader) + { + int w = Width;// +(4 - Width % 4) % 4; + int h = Height;// +(4 - Height % 4) % 4; + + if (w < 2 || h < 2) return; + + Image = new Bitmap(w, h); + + BitmapData data = Image.LockBits(new Rectangle(0, 0, w, h), ImageLockMode.ReadWrite, + PixelFormat.Format32bppArgb); + + byte[] dest = Decompress(FBytes); + + Marshal.Copy(dest, 0, data.Scan0, dest.Length); + + Image.UnlockBits(data); + + dest = null; + + dest = null; + } + + + public void Save(BinaryWriter writer) + { + writer.Write(Width); + writer.Write(Height); + writer.Write(X); + writer.Write(Y); + writer.Write(FBytes.Length); + writer.Write(FBytes); + } + + public static byte[] Compress(byte[] raw) + { + using (MemoryStream memory = new MemoryStream()) + { + using (GZipStream gzip = new GZipStream(memory, + CompressionMode.Compress, true)) + { + gzip.Write(raw, 0, raw.Length); + } + return memory.ToArray(); + } + } + + static byte[] Decompress(byte[] gzip) + { + // Create a GZIP stream with decompression mode. + // ... Then create a buffer and write into while reading from the GZIP stream. + using (GZipStream stream = new GZipStream(new MemoryStream(gzip), CompressionMode.Decompress)) + { + const int size = 4096; + byte[] buffer = new byte[size]; + using (MemoryStream memory = new MemoryStream()) + { + int count = 0; + do + { + count = stream.Read(buffer, 0, size); + if (count > 0) + { + memory.Write(buffer, 0, count); + } + } + while (count > 0); + return memory.ToArray(); + } + } + } + + public void CreatePreview() + { + if (Image == null) + { + Preview = new Bitmap(1, 1); + return; + } + + Preview = new Bitmap(64, 64); + + using (Graphics g = Graphics.FromImage(Preview)) + { + g.InterpolationMode = InterpolationMode.Low;//HighQualityBicubic + g.Clear(Color.Transparent); + int w = Math.Min((int)Width, 64); + int h = Math.Min((int)Height, 64); + g.DrawImage(Image, new Rectangle((64 - w) / 2, (64 - h) / 2, w, h), new Rectangle(0, 0, Width, Height), GraphicsUnit.Pixel); + + g.Save(); + } + } + } + } +} \ No newline at end of file diff --git a/LibraryEditor/InputDialog.cs b/LibraryEditor/InputDialog.cs new file mode 100644 index 0000000..8e2220e --- /dev/null +++ b/LibraryEditor/InputDialog.cs @@ -0,0 +1,86 @@ +using System; +using System.Windows.Forms; + +public class InputDialog : Form +{ + private Label _label1; + private Label _label2; + private NumericUpDown _numericUpDown1; + private NumericUpDown _numericUpDown2; + private Button _buttonOk; + private Button _buttonCancel; + + public InputDialog() + { + InitializeComponent(); + } + + private void InitializeComponent() + { + _label1 = new Label(); + _label2 = new Label(); + _numericUpDown1 = new NumericUpDown(); + _numericUpDown2 = new NumericUpDown(); + _buttonOk = new Button(); + _buttonCancel = new Button(); + + // Label 1 + _label1.Text = "Offset X:"; + _label1.AutoSize = true; + _label1.Location = new System.Drawing.Point(12, 20); + + // Numeric Up-Down 1 + _numericUpDown1.Location = new System.Drawing.Point(70, 18); + _numericUpDown1.Width = 120; + _numericUpDown1.Maximum = 1000; + _numericUpDown1.Minimum = -1000; + + // Label 2 + _label2.Text = "Offset Y:"; + _label2.AutoSize = true; + _label2.Location = new System.Drawing.Point(12, 50); + + // Numeric Up-Down 2 + _numericUpDown2.Location = new System.Drawing.Point(70, 48); + _numericUpDown2.Width = 120; + _numericUpDown1.Maximum = 1000; + _numericUpDown2.Minimum = -1000; + + // Button Ok + _buttonOk.Text = "Ok"; + _buttonOk.DialogResult = DialogResult.OK; + _buttonOk.Location = new System.Drawing.Point(24, 90); + + // Button Cancel + _buttonCancel.Text = "Cancel"; + _buttonCancel.DialogResult = DialogResult.Cancel; + _buttonCancel.Location = new System.Drawing.Point(100, 90); + + // Form + this.Text = "Input Dialog"; + this.ClientSize = new System.Drawing.Size(200, 130); + this.Controls.Add(_label1); + this.Controls.Add(_label2); + this.Controls.Add(_numericUpDown1); + this.Controls.Add(_numericUpDown2); + this.Controls.Add(_buttonOk); + this.Controls.Add(_buttonCancel); + this.FormBorderStyle = FormBorderStyle.FixedDialog; + this.StartPosition = FormStartPosition.CenterParent; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.AcceptButton = _buttonOk; + this.CancelButton = _buttonCancel; + this.ShowInTaskbar = false; + } + + public decimal Value1 + { + get { return _numericUpDown1.Value; } + } + + public decimal Value2 + { + get { return _numericUpDown2.Value; } + } +} \ No newline at end of file diff --git a/LibraryEditor/InputDialog.resx b/LibraryEditor/InputDialog.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/LibraryEditor/InputDialog.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/LibraryEditor/LMain.Designer.cs b/LibraryEditor/LMain.Designer.cs new file mode 100644 index 0000000..c7b9944 --- /dev/null +++ b/LibraryEditor/LMain.Designer.cs @@ -0,0 +1,1201 @@ +using System; + +namespace LibraryEditor +{ + partial class LMain + { + /// + /// 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() + { + components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LMain)); + ImageList = new ImageList(components); + OpenLibraryDialog = new OpenFileDialog(); + SaveLibraryDialog = new SaveFileDialog(); + ImportImageDialog = new OpenFileDialog(); + OpenWeMadeDialog = new OpenFileDialog(); + toolTip = new ToolTip(components); + pictureBox = new PictureBox(); + statusStrip = new StatusStrip(); + toolStripStatusLabel = new ToolStripStatusLabel(); + toolStripProgressBar = new ToolStripProgressBar(); + FolderLibraryDialog = new FolderBrowserDialog(); + fileToolStripMenuItem = new ToolStripMenuItem(); + newToolStripMenuItem = new ToolStripMenuItem(); + openToolStripMenuItem = new ToolStripMenuItem(); + toolStripMenuItem1 = new ToolStripSeparator(); + openReferenceFileToolStripMenuItem = new ToolStripMenuItem(); + openReferenceImageToolStripMenuItem = new ToolStripMenuItem(); + toolStripSeparator1 = new ToolStripSeparator(); + saveToolStripMenuItem = new ToolStripMenuItem(); + saveAsToolStripMenuItem = new ToolStripMenuItem(); + toolStripMenuItem2 = new ToolStripSeparator(); + closeToolStripMenuItem = new ToolStripMenuItem(); + functionsToolStripMenuItem = new ToolStripMenuItem(); + copyToToolStripMenuItem = new ToolStripMenuItem(); + countBlanksToolStripMenuItem = new ToolStripMenuItem(); + removeBlanksToolStripMenuItem = new ToolStripMenuItem(); + safeToolStripMenuItem = new ToolStripMenuItem(); + convertToolStripMenuItem = new ToolStripMenuItem(); + importShadowsToolStripMenuItem = new ToolStripMenuItem(); + skinToolStripMenuItem = new ToolStripMenuItem(); + MainMenu = new MenuStrip(); + tabControl = new TabControl(); + tabImages = new TabPage(); + PreviewListView = new CustomFormControl.FixedListView(); + splitContainer2 = new SplitContainer(); + BtnYPlusTen = new Button(); + BtnYPlusFive = new Button(); + BtnYPlusOne = new Button(); + BtnYMinusOne = new Button(); + BtnYMinusFive = new Button(); + BtnYMinusTen = new Button(); + BtnXPlusTen = new Button(); + BtnXPlusFive = new Button(); + BtnXPlusOne = new Button(); + BtnXMinusOne = new Button(); + BtnXMinusFive = new Button(); + BtnXMinusTen = new Button(); + MobBackgroundPicBox = new PictureBox(); + MobChkBox = new CheckBox(); + LockOffsetChkBox = new CheckBox(); + numericUpDownY = new NumericUpDown(); + numericUpDownX = new NumericUpDown(); + groupBox1 = new GroupBox(); + RButtonOverlay = new RadioButton(); + RButtonImage = new RadioButton(); + checkboxRemoveBlackOnImport = new CheckBox(); + nudJump = new NumericUpDown(); + checkBoxPreventAntiAliasing = new CheckBox(); + checkBoxQuality = new CheckBox(); + buttonSkipPrevious = new Button(); + buttonSkipNext = new Button(); + buttonReplace = new Button(); + ZoomTrackBar = new TrackBar(); + ExportButton = new Button(); + InsertImageButton = new Button(); + DeleteButton = new Button(); + AddButton = new Button(); + label10 = new Label(); + label8 = new Label(); + HeightLabel = new Label(); + label6 = new Label(); + WidthLabel = new Label(); + label1 = new Label(); + panel = new Panel(); + ImageBox = new PictureBox(); + BackgroundPicBox1 = new PictureBox(); + splitContainer1 = new SplitContainer(); + splitContainer3 = new SplitContainer(); + splitContainer4 = new SplitContainer(); + OpenBtn = new Button(); + PathTxtBox = new TextBox(); + label2 = new Label(); + TreeBrowser = new TreeView(); + ((System.ComponentModel.ISupportInitialize)pictureBox).BeginInit(); + statusStrip.SuspendLayout(); + MainMenu.SuspendLayout(); + tabControl.SuspendLayout(); + tabImages.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)splitContainer2).BeginInit(); + splitContainer2.Panel1.SuspendLayout(); + splitContainer2.Panel2.SuspendLayout(); + splitContainer2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)MobBackgroundPicBox).BeginInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownY).BeginInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownX).BeginInit(); + groupBox1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)nudJump).BeginInit(); + ((System.ComponentModel.ISupportInitialize)ZoomTrackBar).BeginInit(); + panel.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)ImageBox).BeginInit(); + ((System.ComponentModel.ISupportInitialize)BackgroundPicBox1).BeginInit(); + ((System.ComponentModel.ISupportInitialize)splitContainer1).BeginInit(); + splitContainer1.Panel1.SuspendLayout(); + splitContainer1.Panel2.SuspendLayout(); + splitContainer1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)splitContainer3).BeginInit(); + splitContainer3.Panel1.SuspendLayout(); + splitContainer3.Panel2.SuspendLayout(); + splitContainer3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)splitContainer4).BeginInit(); + splitContainer4.Panel1.SuspendLayout(); + splitContainer4.Panel2.SuspendLayout(); + splitContainer4.SuspendLayout(); + SuspendLayout(); + // + // ImageList + // + ImageList.ColorDepth = ColorDepth.Depth32Bit; + ImageList.ImageSize = new Size(64, 64); + ImageList.TransparentColor = Color.Transparent; + // + // OpenLibraryDialog + // + OpenLibraryDialog.Filter = "Library|*.Lib"; + // + // SaveLibraryDialog + // + SaveLibraryDialog.Filter = "Library|*.Lib"; + // + // ImportImageDialog + // + ImportImageDialog.Filter = "Images (*.BMP;*.JPG;*.GIF;*.PNG)|*.BMP;*.JPG;*.GIF;*.PNG|All files (*.*)|*.*"; + ImportImageDialog.Multiselect = true; + // + // OpenWeMadeDialog + // + OpenWeMadeDialog.Filter = "WeMade|*.Wil;*.Wtl|Shanda|*.Wzl;*.Miz|Lib|*.Lib"; + OpenWeMadeDialog.Multiselect = true; + // + // pictureBox + // + pictureBox.Image = (Image)resources.GetObject("pictureBox.Image"); + pictureBox.Location = new Point(10, 9); + pictureBox.Margin = new Padding(4, 3, 4, 3); + pictureBox.Name = "pictureBox"; + pictureBox.Size = new Size(16, 16); + pictureBox.SizeMode = PictureBoxSizeMode.AutoSize; + pictureBox.TabIndex = 14; + pictureBox.TabStop = false; + toolTip.SetToolTip(pictureBox, "Switch from Black to White background."); + pictureBox.Click += pictureBox_Click; + // + // statusStrip + // + statusStrip.Items.AddRange(new ToolStripItem[] { toolStripStatusLabel, toolStripProgressBar }); + statusStrip.LayoutStyle = ToolStripLayoutStyle.HorizontalStackWithOverflow; + statusStrip.Location = new Point(0, 706); + statusStrip.Name = "statusStrip"; + statusStrip.Padding = new Padding(1, 0, 16, 0); + statusStrip.Size = new Size(1369, 24); + statusStrip.TabIndex = 2; + statusStrip.Text = "statusStrip"; + // + // toolStripStatusLabel + // + toolStripStatusLabel.Name = "toolStripStatusLabel"; + toolStripStatusLabel.Size = new Size(90, 19); + toolStripStatusLabel.Text = "Selected Image:"; + // + // toolStripProgressBar + // + toolStripProgressBar.Alignment = ToolStripItemAlignment.Right; + toolStripProgressBar.Name = "toolStripProgressBar"; + toolStripProgressBar.Size = new Size(233, 18); + toolStripProgressBar.Step = 1; + toolStripProgressBar.Style = ProgressBarStyle.Continuous; + // + // FolderLibraryDialog + // + FolderLibraryDialog.ShowNewFolderButton = false; + // + // fileToolStripMenuItem + // + fileToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { newToolStripMenuItem, openToolStripMenuItem, toolStripMenuItem1, openReferenceFileToolStripMenuItem, openReferenceImageToolStripMenuItem, toolStripSeparator1, saveToolStripMenuItem, saveAsToolStripMenuItem, toolStripMenuItem2, closeToolStripMenuItem }); + fileToolStripMenuItem.Image = (Image)resources.GetObject("fileToolStripMenuItem.Image"); + fileToolStripMenuItem.Name = "fileToolStripMenuItem"; + fileToolStripMenuItem.Size = new Size(53, 20); + fileToolStripMenuItem.Text = "File"; + // + // newToolStripMenuItem + // + newToolStripMenuItem.Image = (Image)resources.GetObject("newToolStripMenuItem.Image"); + newToolStripMenuItem.Name = "newToolStripMenuItem"; + newToolStripMenuItem.Size = new Size(194, 22); + newToolStripMenuItem.Text = "New"; + newToolStripMenuItem.ToolTipText = "New .Lib"; + newToolStripMenuItem.Click += newToolStripMenuItem_Click; + // + // openToolStripMenuItem + // + openToolStripMenuItem.Image = (Image)resources.GetObject("openToolStripMenuItem.Image"); + openToolStripMenuItem.Name = "openToolStripMenuItem"; + openToolStripMenuItem.Size = new Size(194, 22); + openToolStripMenuItem.Text = "Open"; + openToolStripMenuItem.ToolTipText = "Open Shanda or Wemade files."; + openToolStripMenuItem.Click += openToolStripMenuItem_Click; + // + // toolStripMenuItem1 + // + toolStripMenuItem1.Name = "toolStripMenuItem1"; + toolStripMenuItem1.Size = new Size(191, 6); + // + // openReferenceFileToolStripMenuItem + // + openReferenceFileToolStripMenuItem.Name = "openReferenceFileToolStripMenuItem"; + openReferenceFileToolStripMenuItem.Size = new Size(194, 22); + openReferenceFileToolStripMenuItem.Text = "Open Reference File"; + openReferenceFileToolStripMenuItem.Click += openReferenceFileToolStripMenuItem_Click; + // + // openReferenceImageToolStripMenuItem + // + openReferenceImageToolStripMenuItem.Name = "openReferenceImageToolStripMenuItem"; + openReferenceImageToolStripMenuItem.Size = new Size(194, 22); + openReferenceImageToolStripMenuItem.Text = "Open Reference Image"; + openReferenceImageToolStripMenuItem.Click += openReferenceImageToolStripMenuItem_Click; + // + // toolStripSeparator1 + // + toolStripSeparator1.Name = "toolStripSeparator1"; + toolStripSeparator1.Size = new Size(191, 6); + // + // saveToolStripMenuItem + // + saveToolStripMenuItem.Image = (Image)resources.GetObject("saveToolStripMenuItem.Image"); + saveToolStripMenuItem.Name = "saveToolStripMenuItem"; + saveToolStripMenuItem.Size = new Size(194, 22); + saveToolStripMenuItem.Text = "Save"; + saveToolStripMenuItem.ToolTipText = "Saves currently open .Lib"; + saveToolStripMenuItem.Click += saveToolStripMenuItem_Click; + // + // saveAsToolStripMenuItem + // + saveAsToolStripMenuItem.Image = (Image)resources.GetObject("saveAsToolStripMenuItem.Image"); + saveAsToolStripMenuItem.Name = "saveAsToolStripMenuItem"; + saveAsToolStripMenuItem.Size = new Size(194, 22); + saveAsToolStripMenuItem.Text = "Save As"; + saveAsToolStripMenuItem.ToolTipText = ".Lib Only."; + saveAsToolStripMenuItem.Click += saveAsToolStripMenuItem_Click; + // + // toolStripMenuItem2 + // + toolStripMenuItem2.Name = "toolStripMenuItem2"; + toolStripMenuItem2.Size = new Size(191, 6); + // + // closeToolStripMenuItem + // + closeToolStripMenuItem.Image = (Image)resources.GetObject("closeToolStripMenuItem.Image"); + closeToolStripMenuItem.Name = "closeToolStripMenuItem"; + closeToolStripMenuItem.Size = new Size(194, 22); + closeToolStripMenuItem.Text = "Close"; + closeToolStripMenuItem.ToolTipText = "Exit Application."; + closeToolStripMenuItem.Click += closeToolStripMenuItem_Click; + // + // functionsToolStripMenuItem + // + functionsToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { copyToToolStripMenuItem, countBlanksToolStripMenuItem, removeBlanksToolStripMenuItem, convertToolStripMenuItem, importShadowsToolStripMenuItem }); + functionsToolStripMenuItem.Image = (Image)resources.GetObject("functionsToolStripMenuItem.Image"); + functionsToolStripMenuItem.Name = "functionsToolStripMenuItem"; + functionsToolStripMenuItem.Size = new Size(87, 20); + functionsToolStripMenuItem.Text = "Functions"; + // + // copyToToolStripMenuItem + // + copyToToolStripMenuItem.Image = (Image)resources.GetObject("copyToToolStripMenuItem.Image"); + copyToToolStripMenuItem.Name = "copyToToolStripMenuItem"; + copyToToolStripMenuItem.Size = new Size(160, 22); + copyToToolStripMenuItem.Text = "Copy To.."; + copyToToolStripMenuItem.ToolTipText = "Copy to a new .Lib or to the end of an exsisting one."; + copyToToolStripMenuItem.Click += copyToToolStripMenuItem_Click; + // + // countBlanksToolStripMenuItem + // + countBlanksToolStripMenuItem.Image = (Image)resources.GetObject("countBlanksToolStripMenuItem.Image"); + countBlanksToolStripMenuItem.Name = "countBlanksToolStripMenuItem"; + countBlanksToolStripMenuItem.Size = new Size(160, 22); + countBlanksToolStripMenuItem.Text = "Count Blanks"; + countBlanksToolStripMenuItem.ToolTipText = "Counts the blank images in the .Lib"; + countBlanksToolStripMenuItem.Click += countBlanksToolStripMenuItem_Click; + // + // removeBlanksToolStripMenuItem + // + removeBlanksToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { safeToolStripMenuItem }); + removeBlanksToolStripMenuItem.Image = (Image)resources.GetObject("removeBlanksToolStripMenuItem.Image"); + removeBlanksToolStripMenuItem.Name = "removeBlanksToolStripMenuItem"; + removeBlanksToolStripMenuItem.Size = new Size(160, 22); + removeBlanksToolStripMenuItem.Text = "Remove Blanks"; + removeBlanksToolStripMenuItem.ToolTipText = "Quick removal of blanks."; + removeBlanksToolStripMenuItem.Click += removeBlanksToolStripMenuItem_Click; + // + // safeToolStripMenuItem + // + safeToolStripMenuItem.Image = (Image)resources.GetObject("safeToolStripMenuItem.Image"); + safeToolStripMenuItem.Name = "safeToolStripMenuItem"; + safeToolStripMenuItem.Size = new Size(96, 22); + safeToolStripMenuItem.Text = "Safe"; + safeToolStripMenuItem.ToolTipText = "Use the safe method of removing blanks."; + safeToolStripMenuItem.Click += safeToolStripMenuItem_Click; + // + // convertToolStripMenuItem + // + convertToolStripMenuItem.Image = (Image)resources.GetObject("convertToolStripMenuItem.Image"); + convertToolStripMenuItem.Name = "convertToolStripMenuItem"; + convertToolStripMenuItem.Size = new Size(160, 22); + convertToolStripMenuItem.Text = "Converter"; + convertToolStripMenuItem.ToolTipText = "Convert Wil/Wzl/Miz to .Lib"; + convertToolStripMenuItem.Visible = false; + convertToolStripMenuItem.Click += convertToolStripMenuItem_Click; + // + // importShadowsToolStripMenuItem + // + importShadowsToolStripMenuItem.Name = "importShadowsToolStripMenuItem"; + importShadowsToolStripMenuItem.Size = new Size(160, 22); + importShadowsToolStripMenuItem.Text = "Import Shadows"; + importShadowsToolStripMenuItem.Click += importShadowsToolStripMenuItem_Click; + // + // skinToolStripMenuItem + // + skinToolStripMenuItem.Alignment = ToolStripItemAlignment.Right; + skinToolStripMenuItem.Image = (Image)resources.GetObject("skinToolStripMenuItem.Image"); + skinToolStripMenuItem.Name = "skinToolStripMenuItem"; + skinToolStripMenuItem.Size = new Size(57, 20); + skinToolStripMenuItem.Text = "Skin"; + skinToolStripMenuItem.Visible = false; + // + // MainMenu + // + MainMenu.Items.AddRange(new ToolStripItem[] { fileToolStripMenuItem, functionsToolStripMenuItem, skinToolStripMenuItem }); + MainMenu.Location = new Point(0, 0); + MainMenu.Name = "MainMenu"; + MainMenu.Padding = new Padding(7, 2, 0, 2); + MainMenu.RenderMode = ToolStripRenderMode.Professional; + MainMenu.Size = new Size(1369, 24); + MainMenu.TabIndex = 0; + MainMenu.Text = "menuStrip1"; + // + // tabControl + // + tabControl.Controls.Add(tabImages); + tabControl.Dock = DockStyle.Fill; + tabControl.Location = new Point(0, 0); + tabControl.Margin = new Padding(4, 3, 4, 3); + tabControl.Name = "tabControl"; + tabControl.SelectedIndex = 0; + tabControl.Size = new Size(1367, 187); + tabControl.TabIndex = 0; + // + // tabImages + // + tabImages.Controls.Add(PreviewListView); + tabImages.Location = new Point(4, 24); + tabImages.Margin = new Padding(4, 3, 4, 3); + tabImages.Name = "tabImages"; + tabImages.Padding = new Padding(4, 3, 4, 3); + tabImages.Size = new Size(1359, 159); + tabImages.TabIndex = 0; + tabImages.Text = "Images"; + tabImages.UseVisualStyleBackColor = true; + // + // PreviewListView + // + PreviewListView.Activation = ItemActivation.OneClick; + PreviewListView.BackColor = Color.GhostWhite; + PreviewListView.Dock = DockStyle.Fill; + PreviewListView.ForeColor = Color.FromArgb(142, 152, 156); + PreviewListView.LargeImageList = ImageList; + PreviewListView.Location = new Point(4, 3); + PreviewListView.Margin = new Padding(4, 3, 4, 3); + PreviewListView.Name = "PreviewListView"; + PreviewListView.Size = new Size(1351, 153); + PreviewListView.TabIndex = 0; + PreviewListView.UseCompatibleStateImageBehavior = false; + PreviewListView.VirtualMode = true; + PreviewListView.RetrieveVirtualItem += PreviewListView_RetrieveVirtualItem; + PreviewListView.SelectedIndexChanged += PreviewListView_SelectedIndexChanged; + PreviewListView.VirtualItemsSelectionRangeChanged += PreviewListView_VirtualItemsSelectionRangeChanged; + // + // splitContainer2 + // + splitContainer2.BorderStyle = BorderStyle.FixedSingle; + splitContainer2.Dock = DockStyle.Fill; + splitContainer2.FixedPanel = FixedPanel.Panel1; + splitContainer2.Location = new Point(0, 0); + splitContainer2.Margin = new Padding(4, 3, 4, 3); + splitContainer2.Name = "splitContainer2"; + // + // splitContainer2.Panel1 + // + splitContainer2.Panel1.Controls.Add(BtnYPlusTen); + splitContainer2.Panel1.Controls.Add(BtnYPlusFive); + splitContainer2.Panel1.Controls.Add(BtnYPlusOne); + splitContainer2.Panel1.Controls.Add(BtnYMinusOne); + splitContainer2.Panel1.Controls.Add(BtnYMinusFive); + splitContainer2.Panel1.Controls.Add(BtnYMinusTen); + splitContainer2.Panel1.Controls.Add(BtnXPlusTen); + splitContainer2.Panel1.Controls.Add(BtnXPlusFive); + splitContainer2.Panel1.Controls.Add(BtnXPlusOne); + splitContainer2.Panel1.Controls.Add(BtnXMinusOne); + splitContainer2.Panel1.Controls.Add(BtnXMinusFive); + splitContainer2.Panel1.Controls.Add(BtnXMinusTen); + splitContainer2.Panel1.Controls.Add(MobBackgroundPicBox); + splitContainer2.Panel1.Controls.Add(MobChkBox); + splitContainer2.Panel1.Controls.Add(LockOffsetChkBox); + splitContainer2.Panel1.Controls.Add(numericUpDownY); + splitContainer2.Panel1.Controls.Add(numericUpDownX); + splitContainer2.Panel1.Controls.Add(groupBox1); + splitContainer2.Panel1.Controls.Add(checkboxRemoveBlackOnImport); + splitContainer2.Panel1.Controls.Add(nudJump); + splitContainer2.Panel1.Controls.Add(checkBoxPreventAntiAliasing); + splitContainer2.Panel1.Controls.Add(checkBoxQuality); + splitContainer2.Panel1.Controls.Add(buttonSkipPrevious); + splitContainer2.Panel1.Controls.Add(buttonSkipNext); + splitContainer2.Panel1.Controls.Add(buttonReplace); + splitContainer2.Panel1.Controls.Add(pictureBox); + splitContainer2.Panel1.Controls.Add(ZoomTrackBar); + splitContainer2.Panel1.Controls.Add(ExportButton); + splitContainer2.Panel1.Controls.Add(InsertImageButton); + splitContainer2.Panel1.Controls.Add(DeleteButton); + splitContainer2.Panel1.Controls.Add(AddButton); + splitContainer2.Panel1.Controls.Add(label10); + splitContainer2.Panel1.Controls.Add(label8); + splitContainer2.Panel1.Controls.Add(HeightLabel); + splitContainer2.Panel1.Controls.Add(label6); + splitContainer2.Panel1.Controls.Add(WidthLabel); + splitContainer2.Panel1.Controls.Add(label1); + splitContainer2.Panel1.ForeColor = Color.Black; + splitContainer2.Panel1MinSize = 240; + // + // splitContainer2.Panel2 + // + splitContainer2.Panel2.Controls.Add(panel); + splitContainer2.Size = new Size(963, 486); + splitContainer2.SplitterDistance = 247; + splitContainer2.SplitterWidth = 5; + splitContainer2.TabIndex = 0; + // + // BtnYPlusTen + // + BtnYPlusTen.Location = new Point(192, 149); + BtnYPlusTen.Name = "BtnYPlusTen"; + BtnYPlusTen.Size = new Size(35, 26); + BtnYPlusTen.TabIndex = 42; + BtnYPlusTen.Text = "+10"; + BtnYPlusTen.UseVisualStyleBackColor = true; + BtnYPlusTen.Click += BtnYPlusTen_Click; + // + // BtnYPlusFive + // + BtnYPlusFive.Location = new Point(156, 149); + BtnYPlusFive.Name = "BtnYPlusFive"; + BtnYPlusFive.Size = new Size(35, 26); + BtnYPlusFive.TabIndex = 41; + BtnYPlusFive.Text = "+5"; + BtnYPlusFive.UseVisualStyleBackColor = true; + BtnYPlusFive.Click += BtnYPlusFive_Click; + // + // BtnYPlusOne + // + BtnYPlusOne.Location = new Point(120, 149); + BtnYPlusOne.Name = "BtnYPlusOne"; + BtnYPlusOne.Size = new Size(35, 26); + BtnYPlusOne.TabIndex = 40; + BtnYPlusOne.Text = "+1"; + BtnYPlusOne.UseVisualStyleBackColor = true; + BtnYPlusOne.Click += BtnYPlusOne_Click; + // + // BtnYMinusOne + // + BtnYMinusOne.Location = new Point(84, 149); + BtnYMinusOne.Name = "BtnYMinusOne"; + BtnYMinusOne.Size = new Size(35, 26); + BtnYMinusOne.TabIndex = 39; + BtnYMinusOne.Text = "-1"; + BtnYMinusOne.UseVisualStyleBackColor = true; + BtnYMinusOne.Click += BtnYMinusOne_Click; + // + // BtnYMinusFive + // + BtnYMinusFive.Location = new Point(48, 149); + BtnYMinusFive.Name = "BtnYMinusFive"; + BtnYMinusFive.Size = new Size(35, 26); + BtnYMinusFive.TabIndex = 38; + BtnYMinusFive.Text = "-5"; + BtnYMinusFive.UseVisualStyleBackColor = true; + BtnYMinusFive.Click += BtnYMinusFive_Click; + // + // BtnYMinusTen + // + BtnYMinusTen.Location = new Point(12, 149); + BtnYMinusTen.Name = "BtnYMinusTen"; + BtnYMinusTen.Size = new Size(35, 26); + BtnYMinusTen.TabIndex = 37; + BtnYMinusTen.Text = "-10"; + BtnYMinusTen.UseVisualStyleBackColor = true; + BtnYMinusTen.Click += BtnYMinusTen_Click; + // + // BtnXPlusTen + // + BtnXPlusTen.Location = new Point(192, 91); + BtnXPlusTen.Name = "BtnXPlusTen"; + BtnXPlusTen.Size = new Size(35, 26); + BtnXPlusTen.TabIndex = 36; + BtnXPlusTen.Text = "+10"; + BtnXPlusTen.UseVisualStyleBackColor = true; + BtnXPlusTen.Click += BtnXPlusTen_Click; + // + // BtnXPlusFive + // + BtnXPlusFive.Location = new Point(156, 91); + BtnXPlusFive.Name = "BtnXPlusFive"; + BtnXPlusFive.Size = new Size(35, 26); + BtnXPlusFive.TabIndex = 35; + BtnXPlusFive.Text = "+5"; + BtnXPlusFive.UseVisualStyleBackColor = true; + BtnXPlusFive.Click += BtnXPlusFive_Click; + // + // BtnXPlusOne + // + BtnXPlusOne.Location = new Point(120, 91); + BtnXPlusOne.Name = "BtnXPlusOne"; + BtnXPlusOne.Size = new Size(35, 26); + BtnXPlusOne.TabIndex = 34; + BtnXPlusOne.Text = "+1"; + BtnXPlusOne.UseVisualStyleBackColor = true; + BtnXPlusOne.Click += BtnXPlusOne_Click; + // + // BtnXMinusOne + // + BtnXMinusOne.Location = new Point(84, 91); + BtnXMinusOne.Name = "BtnXMinusOne"; + BtnXMinusOne.Size = new Size(35, 26); + BtnXMinusOne.TabIndex = 33; + BtnXMinusOne.Text = "-1"; + BtnXMinusOne.UseVisualStyleBackColor = true; + BtnXMinusOne.Click += BtnXMinusOne_Click; + // + // BtnXMinusFive + // + BtnXMinusFive.Location = new Point(48, 91); + BtnXMinusFive.Name = "BtnXMinusFive"; + BtnXMinusFive.Size = new Size(35, 26); + BtnXMinusFive.TabIndex = 32; + BtnXMinusFive.Text = "-5"; + BtnXMinusFive.UseVisualStyleBackColor = true; + BtnXMinusFive.Click += BtnXMinusFive_Click; + // + // BtnXMinusTen + // + BtnXMinusTen.Location = new Point(12, 91); + BtnXMinusTen.Name = "BtnXMinusTen"; + BtnXMinusTen.Size = new Size(35, 26); + BtnXMinusTen.TabIndex = 3; + BtnXMinusTen.Text = "-10"; + BtnXMinusTen.UseVisualStyleBackColor = true; + BtnXMinusTen.Click += BtnXMinusTen_Click; + // + // MobBackgroundPicBox + // + MobBackgroundPicBox.Image = (Image)resources.GetObject("MobBackgroundPicBox.Image"); + MobBackgroundPicBox.Location = new Point(10, 29); + MobBackgroundPicBox.Name = "MobBackgroundPicBox"; + MobBackgroundPicBox.Size = new Size(16, 16); + MobBackgroundPicBox.SizeMode = PictureBoxSizeMode.StretchImage; + MobBackgroundPicBox.TabIndex = 31; + MobBackgroundPicBox.TabStop = false; + MobBackgroundPicBox.Click += MobBackgroundPicBox_Click; + // + // MobChkBox + // + MobChkBox.AutoSize = true; + MobChkBox.Location = new Point(95, 461); + MobChkBox.Margin = new Padding(4, 3, 4, 3); + MobChkBox.Name = "MobChkBox"; + MobChkBox.Size = new Size(56, 19); + MobChkBox.TabIndex = 30; + MobChkBox.Text = "Mob?"; + MobChkBox.UseVisualStyleBackColor = true; + // + // LockOffsetChkBox + // + LockOffsetChkBox.AutoSize = true; + LockOffsetChkBox.Location = new Point(11, 461); + LockOffsetChkBox.Margin = new Padding(4, 3, 4, 3); + LockOffsetChkBox.Name = "LockOffsetChkBox"; + LockOffsetChkBox.Size = new Size(86, 19); + LockOffsetChkBox.TabIndex = 29; + LockOffsetChkBox.Text = "Lock Offset"; + LockOffsetChkBox.UseVisualStyleBackColor = true; + // + // numericUpDownY + // + numericUpDownY.Location = new Point(79, 123); + numericUpDownY.Maximum = new decimal(new int[] { 1000, 0, 0, 0 }); + numericUpDownY.Minimum = new decimal(new int[] { 1000, 0, 0, int.MinValue }); + numericUpDownY.Name = "numericUpDownY"; + numericUpDownY.Size = new Size(65, 23); + numericUpDownY.TabIndex = 27; + numericUpDownY.ValueChanged += numericUpDownY_ValueChanged; + // + // numericUpDownX + // + numericUpDownX.Location = new Point(79, 65); + numericUpDownX.Maximum = new decimal(new int[] { 1000, 0, 0, 0 }); + numericUpDownX.Minimum = new decimal(new int[] { 1000, 0, 0, int.MinValue }); + numericUpDownX.Name = "numericUpDownX"; + numericUpDownX.Size = new Size(65, 23); + numericUpDownX.TabIndex = 26; + numericUpDownX.ValueChanged += numericUpDownX_ValueChanged; + // + // groupBox1 + // + groupBox1.Controls.Add(RButtonOverlay); + groupBox1.Controls.Add(RButtonImage); + groupBox1.Location = new Point(11, 368); + groupBox1.Margin = new Padding(4, 3, 4, 3); + groupBox1.Name = "groupBox1"; + groupBox1.Padding = new Padding(4, 3, 4, 3); + groupBox1.Size = new Size(215, 38); + groupBox1.TabIndex = 23; + groupBox1.TabStop = false; + groupBox1.Text = "View Mode"; + // + // RButtonOverlay + // + RButtonOverlay.AutoSize = true; + RButtonOverlay.Location = new Point(79, 17); + RButtonOverlay.Margin = new Padding(4, 3, 4, 3); + RButtonOverlay.Name = "RButtonOverlay"; + RButtonOverlay.Size = new Size(65, 19); + RButtonOverlay.TabIndex = 1; + RButtonOverlay.Text = "Overlay"; + RButtonOverlay.UseVisualStyleBackColor = true; + RButtonOverlay.CheckedChanged += RButtonViewMode_CheckedChanged; + // + // RButtonImage + // + RButtonImage.AutoSize = true; + RButtonImage.Checked = true; + RButtonImage.Location = new Point(8, 17); + RButtonImage.Margin = new Padding(4, 3, 4, 3); + RButtonImage.Name = "RButtonImage"; + RButtonImage.Size = new Size(58, 19); + RButtonImage.TabIndex = 0; + RButtonImage.TabStop = true; + RButtonImage.Text = "Image"; + RButtonImage.UseVisualStyleBackColor = true; + RButtonImage.CheckedChanged += RButtonViewMode_CheckedChanged; + // + // checkboxRemoveBlackOnImport + // + checkboxRemoveBlackOnImport.AutoSize = true; + checkboxRemoveBlackOnImport.Checked = true; + checkboxRemoveBlackOnImport.CheckState = CheckState.Checked; + checkboxRemoveBlackOnImport.Location = new Point(11, 415); + checkboxRemoveBlackOnImport.Margin = new Padding(4, 3, 4, 3); + checkboxRemoveBlackOnImport.Name = "checkboxRemoveBlackOnImport"; + checkboxRemoveBlackOnImport.Size = new Size(158, 19); + checkboxRemoveBlackOnImport.TabIndex = 22; + checkboxRemoveBlackOnImport.Text = "Remove Black On Import"; + checkboxRemoveBlackOnImport.UseVisualStyleBackColor = true; + // + // nudJump + // + nudJump.Location = new Point(77, 300); + nudJump.Margin = new Padding(4, 3, 4, 3); + nudJump.Maximum = new decimal(new int[] { 650000, 0, 0, 0 }); + nudJump.Name = "nudJump"; + nudJump.Size = new Size(77, 23); + nudJump.TabIndex = 21; + nudJump.ValueChanged += nudJump_ValueChanged; + nudJump.KeyDown += nudJump_KeyDown; + // + // checkBoxPreventAntiAliasing + // + checkBoxPreventAntiAliasing.AutoSize = true; + checkBoxPreventAntiAliasing.Location = new Point(95, 438); + checkBoxPreventAntiAliasing.Margin = new Padding(4, 3, 4, 3); + checkBoxPreventAntiAliasing.Name = "checkBoxPreventAntiAliasing"; + checkBoxPreventAntiAliasing.Size = new Size(112, 19); + checkBoxPreventAntiAliasing.TabIndex = 20; + checkBoxPreventAntiAliasing.Text = "No Anti-aliasing"; + checkBoxPreventAntiAliasing.UseVisualStyleBackColor = true; + checkBoxPreventAntiAliasing.CheckedChanged += checkBoxPreventAntiAliasing_CheckedChanged; + // + // checkBoxQuality + // + checkBoxQuality.AutoSize = true; + checkBoxQuality.Location = new Point(11, 438); + checkBoxQuality.Margin = new Padding(4, 3, 4, 3); + checkBoxQuality.Name = "checkBoxQuality"; + checkBoxQuality.Size = new Size(87, 19); + checkBoxQuality.TabIndex = 19; + checkBoxQuality.Text = "No Blurring"; + checkBoxQuality.UseVisualStyleBackColor = true; + checkBoxQuality.CheckedChanged += checkBoxQuality_CheckedChanged; + // + // buttonSkipPrevious + // + buttonSkipPrevious.ForeColor = SystemColors.ControlText; + buttonSkipPrevious.Image = (Image)resources.GetObject("buttonSkipPrevious.Image"); + buttonSkipPrevious.Location = new Point(42, 297); + buttonSkipPrevious.Margin = new Padding(4, 3, 4, 3); + buttonSkipPrevious.Name = "buttonSkipPrevious"; + buttonSkipPrevious.Size = new Size(30, 26); + buttonSkipPrevious.TabIndex = 17; + buttonSkipPrevious.Tag = ""; + buttonSkipPrevious.TextImageRelation = TextImageRelation.TextBeforeImage; + buttonSkipPrevious.UseVisualStyleBackColor = true; + buttonSkipPrevious.Click += buttonSkipPrevious_Click; + // + // buttonSkipNext + // + buttonSkipNext.ForeColor = SystemColors.ControlText; + buttonSkipNext.Image = (Image)resources.GetObject("buttonSkipNext.Image"); + buttonSkipNext.Location = new Point(159, 297); + buttonSkipNext.Margin = new Padding(4, 3, 4, 3); + buttonSkipNext.Name = "buttonSkipNext"; + buttonSkipNext.Size = new Size(30, 26); + buttonSkipNext.TabIndex = 16; + buttonSkipNext.Tag = ""; + buttonSkipNext.TextImageRelation = TextImageRelation.TextBeforeImage; + buttonSkipNext.UseVisualStyleBackColor = true; + buttonSkipNext.Click += buttonSkipNext_Click; + // + // buttonReplace + // + buttonReplace.ForeColor = SystemColors.ControlText; + buttonReplace.Image = (Image)resources.GetObject("buttonReplace.Image"); + buttonReplace.ImageAlign = ContentAlignment.TopRight; + buttonReplace.Location = new Point(10, 225); + buttonReplace.Margin = new Padding(4, 3, 4, 3); + buttonReplace.Name = "buttonReplace"; + buttonReplace.Size = new Size(105, 26); + buttonReplace.TabIndex = 15; + buttonReplace.Tag = ""; + buttonReplace.Text = "Replace Image"; + buttonReplace.TextImageRelation = TextImageRelation.TextBeforeImage; + buttonReplace.UseVisualStyleBackColor = true; + buttonReplace.Click += buttonReplace_Click; + // + // ZoomTrackBar + // + ZoomTrackBar.LargeChange = 1; + ZoomTrackBar.Location = new Point(42, 329); + ZoomTrackBar.Margin = new Padding(4, 3, 4, 3); + ZoomTrackBar.Minimum = 1; + ZoomTrackBar.Name = "ZoomTrackBar"; + ZoomTrackBar.Size = new Size(147, 45); + ZoomTrackBar.TabIndex = 4; + ZoomTrackBar.TickStyle = TickStyle.TopLeft; + ZoomTrackBar.Value = 1; + ZoomTrackBar.Scroll += ZoomTrackBar_Scroll; + // + // ExportButton + // + ExportButton.ForeColor = SystemColors.ControlText; + ExportButton.Image = (Image)resources.GetObject("ExportButton.Image"); + ExportButton.ImageAlign = ContentAlignment.TopRight; + ExportButton.Location = new Point(121, 257); + ExportButton.Margin = new Padding(3, 3, 4, 3); + ExportButton.Name = "ExportButton"; + ExportButton.Size = new Size(105, 26); + ExportButton.TabIndex = 3; + ExportButton.Tag = ""; + ExportButton.Text = "Export Images"; + ExportButton.TextImageRelation = TextImageRelation.TextBeforeImage; + ExportButton.UseVisualStyleBackColor = true; + ExportButton.Click += ExportButton_Click; + // + // InsertImageButton + // + InsertImageButton.ForeColor = SystemColors.ControlText; + InsertImageButton.Image = (Image)resources.GetObject("InsertImageButton.Image"); + InsertImageButton.ImageAlign = ContentAlignment.TopRight; + InsertImageButton.Location = new Point(121, 225); + InsertImageButton.Margin = new Padding(4, 3, 4, 3); + InsertImageButton.Name = "InsertImageButton"; + InsertImageButton.Size = new Size(105, 26); + InsertImageButton.TabIndex = 1; + InsertImageButton.Tag = ""; + InsertImageButton.Text = "Insert Images"; + InsertImageButton.TextImageRelation = TextImageRelation.TextBeforeImage; + InsertImageButton.UseVisualStyleBackColor = true; + InsertImageButton.Click += InsertImageButton_Click; + // + // DeleteButton + // + DeleteButton.ForeColor = SystemColors.ControlText; + DeleteButton.Image = (Image)resources.GetObject("DeleteButton.Image"); + DeleteButton.ImageAlign = ContentAlignment.TopRight; + DeleteButton.Location = new Point(121, 193); + DeleteButton.Margin = new Padding(4, 3, 4, 3); + DeleteButton.Name = "DeleteButton"; + DeleteButton.Size = new Size(105, 26); + DeleteButton.TabIndex = 2; + DeleteButton.Tag = ""; + DeleteButton.Text = "Delete Images"; + DeleteButton.TextImageRelation = TextImageRelation.TextBeforeImage; + DeleteButton.UseVisualStyleBackColor = true; + DeleteButton.Click += DeleteButton_Click; + // + // AddButton + // + AddButton.ForeColor = SystemColors.ControlText; + AddButton.Image = (Image)resources.GetObject("AddButton.Image"); + AddButton.ImageAlign = ContentAlignment.TopRight; + AddButton.Location = new Point(10, 193); + AddButton.Margin = new Padding(4, 3, 4, 3); + AddButton.Name = "AddButton"; + AddButton.Size = new Size(105, 26); + AddButton.TabIndex = 0; + AddButton.Tag = ""; + AddButton.Text = "Add Images"; + AddButton.TextImageRelation = TextImageRelation.TextBeforeImage; + AddButton.UseVisualStyleBackColor = true; + AddButton.Click += AddButton_Click; + // + // label10 + // + label10.AutoSize = true; + label10.ForeColor = SystemColors.ControlText; + label10.Location = new Point(23, 126); + label10.Margin = new Padding(4, 0, 4, 0); + label10.Name = "label10"; + label10.Size = new Size(53, 15); + label10.TabIndex = 12; + label10.Text = "OffSet Y:"; + // + // label8 + // + label8.AutoSize = true; + label8.ForeColor = SystemColors.ControlText; + label8.Location = new Point(23, 68); + label8.Margin = new Padding(4, 0, 4, 0); + label8.Name = "label8"; + label8.Size = new Size(53, 15); + label8.TabIndex = 11; + label8.Text = "OffSet X:"; + // + // HeightLabel + // + HeightLabel.AutoSize = true; + HeightLabel.ForeColor = SystemColors.ControlText; + HeightLabel.Location = new Point(123, 30); + HeightLabel.Margin = new Padding(4, 0, 4, 0); + HeightLabel.Name = "HeightLabel"; + HeightLabel.Size = new Size(75, 15); + HeightLabel.TabIndex = 10; + HeightLabel.Text = ""; + // + // label6 + // + label6.AutoSize = true; + label6.ForeColor = SystemColors.ControlText; + label6.Location = new Point(76, 30); + label6.Margin = new Padding(4, 0, 4, 0); + label6.Name = "label6"; + label6.Size = new Size(46, 15); + label6.TabIndex = 9; + label6.Text = "Height:"; + // + // WidthLabel + // + WidthLabel.AutoSize = true; + WidthLabel.ForeColor = SystemColors.ControlText; + WidthLabel.Location = new Point(123, 12); + WidthLabel.Margin = new Padding(4, 0, 4, 0); + WidthLabel.Name = "WidthLabel"; + WidthLabel.Size = new Size(75, 15); + WidthLabel.TabIndex = 8; + WidthLabel.Text = ""; + // + // label1 + // + label1.AutoSize = true; + label1.ForeColor = SystemColors.ControlText; + label1.Location = new Point(79, 12); + label1.Margin = new Padding(4, 0, 4, 0); + label1.Name = "label1"; + label1.Size = new Size(42, 15); + label1.TabIndex = 7; + label1.Text = "Width:"; + // + // panel + // + panel.AutoScroll = true; + panel.BackColor = Color.Black; + panel.BorderStyle = BorderStyle.Fixed3D; + panel.Controls.Add(ImageBox); + panel.Controls.Add(BackgroundPicBox1); + panel.Dock = DockStyle.Fill; + panel.Location = new Point(0, 0); + panel.Margin = new Padding(4, 3, 4, 3); + panel.Name = "panel"; + panel.Size = new Size(709, 484); + panel.TabIndex = 1; + // + // ImageBox + // + ImageBox.BackColor = Color.Transparent; + ImageBox.Location = new Point(0, 0); + ImageBox.Margin = new Padding(4, 3, 4, 3); + ImageBox.Name = "ImageBox"; + ImageBox.Size = new Size(64, 64); + ImageBox.SizeMode = PictureBoxSizeMode.AutoSize; + ImageBox.TabIndex = 0; + ImageBox.TabStop = false; + // + // BackgroundPicBox1 + // + BackgroundPicBox1.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; + BackgroundPicBox1.BackColor = Color.Transparent; + BackgroundPicBox1.Image = (Image)resources.GetObject("BackgroundPicBox1.Image"); + BackgroundPicBox1.Location = new Point(0, 0); + BackgroundPicBox1.Name = "BackgroundPicBox1"; + BackgroundPicBox1.Size = new Size(919, 645); + BackgroundPicBox1.TabIndex = 0; + BackgroundPicBox1.TabStop = false; + BackgroundPicBox1.Visible = false; + // + // splitContainer1 + // + splitContainer1.BorderStyle = BorderStyle.FixedSingle; + splitContainer1.Dock = DockStyle.Fill; + splitContainer1.Location = new Point(0, 24); + splitContainer1.Margin = new Padding(4, 3, 4, 3); + splitContainer1.Name = "splitContainer1"; + splitContainer1.Orientation = Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + splitContainer1.Panel1.Controls.Add(splitContainer3); + splitContainer1.Panel1MinSize = 325; + // + // splitContainer1.Panel2 + // + splitContainer1.Panel2.Controls.Add(tabControl); + splitContainer1.Size = new Size(1369, 682); + splitContainer1.SplitterDistance = 488; + splitContainer1.SplitterWidth = 5; + splitContainer1.TabIndex = 1; + // + // splitContainer3 + // + splitContainer3.Dock = DockStyle.Fill; + splitContainer3.Location = new Point(0, 0); + splitContainer3.Name = "splitContainer3"; + // + // splitContainer3.Panel1 + // + splitContainer3.Panel1.Controls.Add(splitContainer4); + // + // splitContainer3.Panel2 + // + splitContainer3.Panel2.Controls.Add(splitContainer2); + splitContainer3.Size = new Size(1367, 486); + splitContainer3.SplitterDistance = 400; + splitContainer3.TabIndex = 1; + // + // splitContainer4 + // + splitContainer4.Dock = DockStyle.Fill; + splitContainer4.Location = new Point(0, 0); + splitContainer4.Name = "splitContainer4"; + splitContainer4.Orientation = Orientation.Horizontal; + // + // splitContainer4.Panel1 + // + splitContainer4.Panel1.Controls.Add(OpenBtn); + splitContainer4.Panel1.Controls.Add(PathTxtBox); + splitContainer4.Panel1.Controls.Add(label2); + // + // splitContainer4.Panel2 + // + splitContainer4.Panel2.Controls.Add(TreeBrowser); + splitContainer4.Size = new Size(400, 486); + splitContainer4.SplitterDistance = 37; + splitContainer4.TabIndex = 0; + // + // OpenBtn + // + OpenBtn.Location = new Point(333, 7); + OpenBtn.Name = "OpenBtn"; + OpenBtn.Size = new Size(59, 23); + OpenBtn.TabIndex = 2; + OpenBtn.Text = "Search"; + OpenBtn.UseVisualStyleBackColor = true; + OpenBtn.Click += OpenBtn_Click; + // + // PathTxtBox + // + PathTxtBox.Location = new Point(73, 7); + PathTxtBox.Name = "PathTxtBox"; + PathTxtBox.Size = new Size(254, 23); + PathTxtBox.TabIndex = 1; + // + // label2 + // + label2.AutoSize = true; + label2.Location = new Point(12, 11); + label2.Name = "label2"; + label2.Size = new Size(61, 15); + label2.TabIndex = 0; + label2.Text = "Directory :"; + // + // TreeBrowser + // + TreeBrowser.Dock = DockStyle.Fill; + TreeBrowser.Location = new Point(0, 0); + TreeBrowser.Name = "TreeBrowser"; + TreeBrowser.Size = new Size(400, 445); + TreeBrowser.TabIndex = 0; + // + // LMain + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(1369, 730); + Controls.Add(splitContainer1); + Controls.Add(statusStrip); + Controls.Add(MainMenu); + DoubleBuffered = true; + Icon = (Icon)resources.GetObject("$this.Icon"); + MainMenuStrip = MainMenu; + Margin = new Padding(4, 3, 4, 3); + MinimumSize = new Size(756, 513); + Name = "LMain"; + StartPosition = FormStartPosition.CenterScreen; + Text = "Legend of Mir 1 Library Editor"; + Resize += LMain_Resize; + ((System.ComponentModel.ISupportInitialize)pictureBox).EndInit(); + statusStrip.ResumeLayout(false); + statusStrip.PerformLayout(); + MainMenu.ResumeLayout(false); + MainMenu.PerformLayout(); + tabControl.ResumeLayout(false); + tabImages.ResumeLayout(false); + splitContainer2.Panel1.ResumeLayout(false); + splitContainer2.Panel1.PerformLayout(); + splitContainer2.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)splitContainer2).EndInit(); + splitContainer2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)MobBackgroundPicBox).EndInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownY).EndInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownX).EndInit(); + groupBox1.ResumeLayout(false); + groupBox1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)nudJump).EndInit(); + ((System.ComponentModel.ISupportInitialize)ZoomTrackBar).EndInit(); + panel.ResumeLayout(false); + panel.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)ImageBox).EndInit(); + ((System.ComponentModel.ISupportInitialize)BackgroundPicBox1).EndInit(); + splitContainer1.Panel1.ResumeLayout(false); + splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)splitContainer1).EndInit(); + splitContainer1.ResumeLayout(false); + splitContainer3.Panel1.ResumeLayout(false); + splitContainer3.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)splitContainer3).EndInit(); + splitContainer3.ResumeLayout(false); + splitContainer4.Panel1.ResumeLayout(false); + splitContainer4.Panel1.PerformLayout(); + splitContainer4.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)splitContainer4).EndInit(); + splitContainer4.ResumeLayout(false); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private System.Windows.Forms.ImageList ImageList; + private System.Windows.Forms.OpenFileDialog OpenLibraryDialog; + private System.Windows.Forms.SaveFileDialog SaveLibraryDialog; + private System.Windows.Forms.OpenFileDialog ImportImageDialog; + private System.Windows.Forms.OpenFileDialog OpenWeMadeDialog; + private System.Windows.Forms.ToolTip toolTip; + private System.Windows.Forms.StatusStrip statusStrip; + private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel; + private System.Windows.Forms.ToolStripProgressBar toolStripProgressBar; + private System.Windows.Forms.FolderBrowserDialog FolderLibraryDialog; + private ToolStripMenuItem fileToolStripMenuItem; + private ToolStripMenuItem newToolStripMenuItem; + private ToolStripMenuItem openToolStripMenuItem; + private ToolStripSeparator toolStripMenuItem1; + private ToolStripMenuItem openReferenceFileToolStripMenuItem; + private ToolStripMenuItem openReferenceImageToolStripMenuItem; + private ToolStripSeparator toolStripSeparator1; + private ToolStripMenuItem saveToolStripMenuItem; + private ToolStripMenuItem saveAsToolStripMenuItem; + private ToolStripSeparator toolStripMenuItem2; + private ToolStripMenuItem closeToolStripMenuItem; + private ToolStripMenuItem functionsToolStripMenuItem; + private ToolStripMenuItem copyToToolStripMenuItem; + private ToolStripMenuItem countBlanksToolStripMenuItem; + private ToolStripMenuItem removeBlanksToolStripMenuItem; + private ToolStripMenuItem safeToolStripMenuItem; + private ToolStripMenuItem convertToolStripMenuItem; + private ToolStripMenuItem importShadowsToolStripMenuItem; + private ToolStripMenuItem skinToolStripMenuItem; + private MenuStrip MainMenu; + private TabControl tabControl; + private TabPage tabImages; + private CustomFormControl.FixedListView PreviewListView; + private SplitContainer splitContainer2; + private NumericUpDown numericUpDownY; + private NumericUpDown numericUpDownX; + private GroupBox groupBox1; + private RadioButton RButtonOverlay; + private RadioButton RButtonImage; + private CheckBox checkboxRemoveBlackOnImport; + private NumericUpDown nudJump; + private CheckBox checkBoxPreventAntiAliasing; + private CheckBox checkBoxQuality; + private Button buttonSkipPrevious; + private Button buttonSkipNext; + private Button buttonReplace; + private PictureBox pictureBox; + private TrackBar ZoomTrackBar; + private Button ExportButton; + private Button InsertImageButton; + private Button DeleteButton; + private Button AddButton; + private Label label10; + private Label label8; + private Label HeightLabel; + private Label label6; + private Label WidthLabel; + private Label label1; + private PictureBox ImageBox; + private SplitContainer splitContainer1; + private SplitContainer splitContainer3; + private SplitContainer splitContainer4; + private TextBox PathTxtBox; + private Label label2; + private Button OpenBtn; + private Panel panel; + private PictureBox BackgroundPicBox1; + private CheckBox MobChkBox; + private CheckBox LockOffsetChkBox; + private TreeView TreeBrowser; + private PictureBox MobBackgroundPicBox; + private Button BtnYPlusTen; + private Button BtnYPlusFive; + private Button BtnYPlusOne; + private Button BtnYMinusOne; + private Button BtnYMinusFive; + private Button BtnYMinusTen; + private Button BtnXPlusTen; + private Button BtnXPlusFive; + private Button BtnXPlusOne; + private Button BtnXMinusOne; + private Button BtnXMinusFive; + private Button BtnXMinusTen; + } +} + diff --git a/LibraryEditor/LMain.cs b/LibraryEditor/LMain.cs new file mode 100644 index 0000000..0082b75 --- /dev/null +++ b/LibraryEditor/LMain.cs @@ -0,0 +1,1391 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Drawing.Imaging; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices; +using System.Threading.Tasks; +using System.Windows.Forms; +using Shared.Extensions; + +namespace LibraryEditor +{ + public partial class LMain : Form + { + private readonly Dictionary _indexList = new Dictionary(); + private MLibraryV2 _library, _referenceLibrary, _shadowLibrary; + private MLibraryV2.MImage _selectedImage, _exportImage, _editImage; + private Image _originalImage; + public Bitmap _referenceImage; + + protected bool ImageTabActive = true; + protected bool MaskTabActive = false; + protected bool FrameTabActive = false; + private bool MobSelected = false; + public string openFileName = ""; + + protected string ViewMode = "Image"; + + [DllImport("user32.dll")] + private static extern int SendMessage(IntPtr hWnd, int msg, int wParam, int lParam); + + public LMain() + { + InitializeComponent(); + + SendMessage(PreviewListView.Handle, 4149, 0, 5242946); //80 x 66 + + TreeBrowser.AfterSelect += (o, e) => TreeAfterSelect(); + + this.AllowDrop = true; + this.DragEnter += new DragEventHandler(LiveInfoForm_DragEnter); + this.DragDrop += new DragEventHandler(LiveInfoForm_DragDrop); + + if (Program.openFileWith.Length > 0 && File.Exists(Program.openFileWith)) + { + OpenLibrary(Program.openFileWith); + } + } + + private void LiveInfoForm_DragDrop(object sender, DragEventArgs e) + { + string[] files = (string[])e.Data.GetData(DataFormats.FileDrop); + + if (Path.GetExtension(files[0]).ToUpper() == ".WIL" || + Path.GetExtension(files[0]).ToUpper() == ".WZL" || + Path.GetExtension(files[0]).ToUpper() == ".MIZ") + { + toolStripProgressBar.Maximum = files.Length; + toolStripProgressBar.Value = 0; + + new Action(() => + { + try + { + ParallelOptions options = new ParallelOptions { MaxDegreeOfParallelism = 8 }; + Parallel.For(0, files.Length, options, i => + { + Invoke(new Action(() => + { + toolStripProgressBar.Value++; + })); + + }); + } + catch (Exception ex) + { + MessageBox.Show(ex.ToString()); + } + + Invoke(new Action(() => + { + toolStripProgressBar.Value = 0; + })); + + MessageBox.Show( + string.Format("Successfully converted {0} {1}", + (files.Length).ToString(), + (files.Length > 1) ? "libraries" : "library")); + }).BeginInvoke(null, null); + } + else if (Path.GetExtension(files[0]).ToUpper() == ".LIB") + { + ClearInterface(); + ImageList.Images.Clear(); + PreviewListView.Items.Clear(); + _indexList.Clear(); + + if (_library != null) _library.Close(); + _library = new MLibraryV2(files[0]); + PreviewListView.VirtualListSize = _library.Images.Count; + PreviewListView.RedrawItems(0, PreviewListView.Items.Count - 1, true); + + // Show .Lib path in application title. + this.Text = files[0].ToString(); + } + else + { + return; + } + } + + private void LiveInfoForm_DragEnter(object sender, DragEventArgs e) + { + if (e.Data.GetDataPresent(DataFormats.FileDrop)) e.Effect = DragDropEffects.Copy; + } + + private void ClearInterface() + { + _selectedImage = null; + ImageBox.Image = null; + ZoomTrackBar.Value = 1; + + WidthLabel.Text = ""; + HeightLabel.Text = ""; + numericUpDownX.Value = 0; + numericUpDownY.Value = 0; + } + + public static Bitmap AddPaddingToBitmap(Bitmap originalBitmap, int padding) + { + int newWidth = originalBitmap.Width + 2 * padding; + int newHeight = originalBitmap.Height + 2 * padding; + + Bitmap paddedBitmap = new Bitmap(newWidth, newHeight); + + using (Graphics g = Graphics.FromImage(paddedBitmap)) + { + g.Clear(Color.Transparent); + + int x = (paddedBitmap.Width - originalBitmap.Width) / 2; + int y = (paddedBitmap.Height - originalBitmap.Height) / 2; + + g.DrawImage(originalBitmap, x, y); + } + + return paddedBitmap; + } + + private void PreviewListView_SelectedIndexChanged(object sender, EventArgs e) + { + if (PreviewListView.SelectedIndices.Count == 0) + { + ClearInterface(); + return; + } + + _selectedImage = _library.GetMImage(PreviewListView.SelectedIndices[0]); + + if (_selectedImage == null) + { + ClearInterface(); + return; + } + + WidthLabel.Text = _selectedImage.Width.ToString(); + HeightLabel.Text = _selectedImage.Height.ToString(); + + numericUpDownX.Value = _selectedImage.X; + numericUpDownY.Value = _selectedImage.Y; + + if (LockOffsetChkBox.Checked) + { + if (MobChkBox.Checked) + { + ImageBox.Location = new Point(295 + _selectedImage.X, 392 + _selectedImage.Y); + } + else + { + ImageBox.Location = new Point(_selectedImage.X, _selectedImage.Y); + } + } + else + { + ImageBox.Location = new Point(58, 23); + } + if (ViewMode == "Image") + { + if (BackgroundPicBox1.Visible) + { + ImageBox.Parent = BackgroundPicBox1; + ImageBox.BackColor = Color.Transparent; + ImageBox.Image = _selectedImage.Image; + ImageBox.BackColor = Color.Transparent; + ImageBox.SendToBack(); + } + else + { + ImageBox.Parent = panel; + ImageBox.Image = _selectedImage.Image; + ImageBox.BringToFront(); + } + } + else + { + ImageBox.Image = _selectedImage.MaskImage; + } + + // Keep track of what image/s are selected. + if (PreviewListView.SelectedIndices.Count > 1) + { + toolStripStatusLabel.ForeColor = Color.Red; + toolStripStatusLabel.Text = "Multiple images selected."; + } + else + { + toolStripStatusLabel.ForeColor = SystemColors.ControlText; + toolStripStatusLabel.Text = "Selected Image: " + string.Format("{0} / {1}", + PreviewListView.SelectedIndices[0].ToString(), + (PreviewListView.Items.Count - 1).ToString()); + } + + nudJump.Value = PreviewListView.SelectedIndices[0]; + } + + private void PreviewListView_RetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e) + { + int index; + + if (_indexList.TryGetValue(e.ItemIndex, out index)) + { + e.Item = new ListViewItem { ImageIndex = index, Text = e.ItemIndex.ToString() }; + return; + } + + _indexList.Add(e.ItemIndex, ImageList.Images.Count); + ImageList.Images.Add(_library.GetPreview(e.ItemIndex)); + e.Item = new ListViewItem { ImageIndex = index, Text = e.ItemIndex.ToString() }; + } + + #region Add Image + private void AddButton_Click(object sender, EventArgs e) + { + if (_library == null) return; + if (_library.FileName == null) return; + + if (ImportImageDialog.ShowDialog() != DialogResult.OK) return; + + List fileNames = new List(ImportImageDialog.FileNames); + + //fileNames.Sort(); + toolStripProgressBar.Value = 0; + toolStripProgressBar.Maximum = fileNames.Count; + + for (int i = 0; i < fileNames.Count; i++) + { + string fileName = fileNames[i]; + Bitmap image; + + try + { + image = new Bitmap(fileName); + } + catch + { + continue; + } + + fileName = Path.Combine(Path.GetDirectoryName(fileName), "Placements", Path.GetFileNameWithoutExtension(fileName)); + fileName = Path.ChangeExtension(fileName, ".txt"); + + short x = 0; + short y = 0; + + if (File.Exists(fileName)) + { + string[] placements = File.ReadAllLines(fileName); + + if (placements.Length > 0) + short.TryParse(placements[0], out x); + if (placements.Length > 1) + short.TryParse(placements[1], out y); + } + + _library.AddImage(image, x, y, checkboxRemoveBlackOnImport.Checked); + toolStripProgressBar.Value++; + //image.Dispose(); + } + + PreviewListView.VirtualListSize = _library.Images.Count; + toolStripProgressBar.Value = 0; + } + + #endregion + + private void newToolStripMenuItem_Click(object sender, EventArgs e) + { + if (SaveLibraryDialog.ShowDialog() != DialogResult.OK) return; + + if (_library != null) _library.Close(); + _library = new MLibraryV2(SaveLibraryDialog.FileName); + PreviewListView.VirtualListSize = 0; + _library.Save(); + } + + #region Open File Button + private void openToolStripMenuItem_Click(object sender, EventArgs e) + { + if (OpenLibraryDialog.ShowDialog() != DialogResult.OK) return; + + _referenceLibrary = null; + _referenceImage = null; + OpenLibrary(OpenLibraryDialog.FileName); + } + + #endregion + private void OpenLibrary(string filename) + { + ClearInterface(); + ImageList.Images.Clear(); + PreviewListView.Items.Clear(); + _indexList.Clear(); + + if (_library != null) _library.Close(); + _library = new MLibraryV2(filename); + PreviewListView.VirtualListSize = _library.Images.Count; + + // Show .Lib path in application title. + this.Text = filename; + + PreviewListView.SelectedIndices.Clear(); + + if (PreviewListView.Items.Count > 0) + PreviewListView.Items[0].Selected = true; + } + + private void OpenReferenceLibrary(string filename) + { + if (_referenceLibrary != null) _referenceLibrary.Close(); + _referenceLibrary = new MLibraryV2(filename); + } + + private void OpenShadowLibraryAndImport(string filename) + { + if (_library == null) return; + + if (_shadowLibrary != null) _shadowLibrary.Close(); + _shadowLibrary = new MLibraryV2(filename); + + ImageList.Images.Clear(); + _indexList.Clear(); + + for (int i = 0; i < _library.Images.Count; i++) + { + var mImage = _library.GetMImage(i); + if (mImage == null || mImage.Image == null) continue; + + var shadowImage = _shadowLibrary.GetMImage(i); + if (shadowImage == null || shadowImage.Image == null) continue; + + var offSetX = -mImage.X + shadowImage.X; + var offSetY = -mImage.Y + shadowImage.Y; + + var maxWidth = Math.Max(mImage.Width, shadowImage.Width + Math.Abs(offSetX)); + var maxHeight = Math.Max(mImage.Height, shadowImage.Height + Math.Abs(offSetY)); + + var newBitmap = new Bitmap(maxWidth, maxHeight); + using (var g = Graphics.FromImage(newBitmap)) + { + g.DrawImage(mImage.Image, new Point(offSetX < 0 ? Math.Abs(offSetX) : 0, offSetY < 0 ? Math.Abs(offSetY) : 0)); + g.DrawImage(shadowImage.Image, new Point(offSetX > 0 ? offSetX : 0, offSetY > 0 ? offSetY : 0)); + } + + _library.ReplaceImage(i, newBitmap, mImage.X, mImage.Y); + } + + PreviewListView.VirtualListSize = _library.Images.Count; + + try + { + PreviewListView.RedrawItems(0, PreviewListView.Items.Count - 1, true); + + if (ViewMode == "Image") + { + ImageBox.Image = _library.Images[PreviewListView.SelectedIndices[0]].Image; + } + else + { + ImageBox.Image = _library.Images[PreviewListView.SelectedIndices[0]].MaskImage; + } + } + catch (Exception) + { + return; + } + } + + #region Save Button + private void saveToolStripMenuItem_Click(object sender, EventArgs e) + { + if (_library == null) return; + + _library.Save(); + } + + private void saveAsToolStripMenuItem_Click(object sender, EventArgs e) + { + if (_library == null) return; + if (SaveLibraryDialog.ShowDialog() != DialogResult.OK) return; + + _library.FileName = SaveLibraryDialog.FileName; + _library.Save(); + } + + #endregion + + private void closeToolStripMenuItem_Click(object sender, EventArgs e) + { + this.Close(); + } + + #region Delete Image Button + private void DeleteButton_Click(object sender, EventArgs e) + { + if (_library == null) return; + if (_library.FileName == null) return; + if (PreviewListView.SelectedIndices.Count == 0) return; + + if (MessageBox.Show("Are you sure you want to delete the selected Image?", + "Delete Selected.", + MessageBoxButtons.YesNoCancel) != DialogResult.Yes) return; + + List removeList = new List(); + + for (int i = 0; i < PreviewListView.SelectedIndices.Count; i++) + removeList.Add(PreviewListView.SelectedIndices[i]); + + removeList.Sort(); + + for (int i = removeList.Count - 1; i >= 0; i--) + _library.RemoveImage(removeList[i]); + + ImageList.Images.Clear(); + _indexList.Clear(); + PreviewListView.VirtualListSize -= removeList.Count; + } + + #endregion + + #region Converter + private void convertToolStripMenuItem_Click(object sender, EventArgs e) + { + if (OpenWeMadeDialog.ShowDialog() != DialogResult.OK) return; + + toolStripProgressBar.Maximum = OpenWeMadeDialog.FileNames.Length; + toolStripProgressBar.Value = 0; + + try + { + ParallelOptions options = new ParallelOptions { MaxDegreeOfParallelism = 8 }; + Parallel.For(0, OpenWeMadeDialog.FileNames.Length, options, i => + { + toolStripProgressBar.Value++; + }); + } + catch (Exception ex) + { + MessageBox.Show(ex.ToString()); + } + + toolStripProgressBar.Value = 0; + + MessageBox.Show(string.Format("Successfully converted {0} {1}", + (OpenWeMadeDialog.FileNames.Length).ToString(), + (OpenWeMadeDialog.FileNames.Length > 1) ? "libraries" : "library")); + } + + #endregion + + #region CopyTo Button + private void copyToToolStripMenuItem_Click(object sender, EventArgs e) + { + if (PreviewListView.SelectedIndices.Count == 0) return; + if (SaveLibraryDialog.ShowDialog() != DialogResult.OK) return; + + MLibraryV2 tempLibrary = new MLibraryV2(SaveLibraryDialog.FileName); + + List copyList = new List(); + + for (int i = 0; i < PreviewListView.SelectedIndices.Count; i++) + copyList.Add(PreviewListView.SelectedIndices[i]); + + copyList.Sort(); + + for (int i = 0; i < copyList.Count; i++) + { + MLibraryV2.MImage image = _library.GetMImage(copyList[i]); + tempLibrary.AddImage(image.Image, image.X, image.Y); + } + + tempLibrary.Save(); + } + + #endregion + + #region Remove Blanks + private void removeBlanksToolStripMenuItem_Click(object sender, EventArgs e) + { + if (MessageBox.Show("Are you sure you want to remove the blank images?", + "Remove Blanks", + MessageBoxButtons.YesNo) != DialogResult.Yes) return; + + _library.RemoveBlanks(); + ImageList.Images.Clear(); + _indexList.Clear(); + PreviewListView.VirtualListSize = _library.Count; + } + + #endregion + + #region Count Blanks + private void countBlanksToolStripMenuItem_Click(object sender, EventArgs e) + { + OpenLibraryDialog.Multiselect = true; + + if (OpenLibraryDialog.ShowDialog() != DialogResult.OK) + { + OpenLibraryDialog.Multiselect = false; + return; + } + + OpenLibraryDialog.Multiselect = false; + + MLibraryV2.Load = false; + + int count = 0; + + for (int i = 0; i < OpenLibraryDialog.FileNames.Length; i++) + { + MLibraryV2 library = new MLibraryV2(OpenLibraryDialog.FileNames[i]); + + for (int x = 0; x < library.Count; x++) + { + if (library.Images[x].Length <= 8) + count++; + } + + library.Close(); + } + + MLibraryV2.Load = true; + MessageBox.Show(count.ToString()); + } + + #endregion + + #region Insert Image Button + private void InsertImageButton_Click(object sender, EventArgs e) + { + if (_library == null) return; + if (_library.FileName == null) return; + if (PreviewListView.SelectedIndices.Count == 0) return; + if (ImportImageDialog.ShowDialog() != DialogResult.OK) return; + + List fileNames = new List(ImportImageDialog.FileNames); + + //fileNames.Sort(); + + int index = PreviewListView.SelectedIndices[0]; + + toolStripProgressBar.Value = 0; + toolStripProgressBar.Maximum = fileNames.Count; + + for (int i = fileNames.Count - 1; i >= 0; i--) + { + string fileName = fileNames[i]; + + Bitmap image; + + try + { + image = new Bitmap(fileName); + } + catch + { + continue; + } + + fileName = Path.Combine(Path.GetDirectoryName(fileName), "Placements", Path.GetFileNameWithoutExtension(fileName)); + fileName = Path.ChangeExtension(fileName, ".txt"); + + short x = 0; + short y = 0; + + if (File.Exists(fileName)) + { + string[] placements = File.ReadAllLines(fileName); + + if (placements.Length > 0) + short.TryParse(placements[0], out x); + if (placements.Length > 1) + short.TryParse(placements[1], out y); + } + + _library.InsertImage(index, image, x, y, checkboxRemoveBlackOnImport.Checked); + + toolStripProgressBar.Value++; + } + + ImageList.Images.Clear(); + _indexList.Clear(); + PreviewListView.VirtualListSize = _library.Images.Count; + toolStripProgressBar.Value = 0; + _library.Save(); + } + + #endregion + + #region Safe Remove Blanks + private void safeToolStripMenuItem_Click(object sender, EventArgs e) + { + if (MessageBox.Show("Are you sure you want to remove the blank images?", + "Remove Blanks", MessageBoxButtons.YesNo) != DialogResult.Yes) return; + + _library.RemoveBlanks(true); + ImageList.Images.Clear(); + _indexList.Clear(); + PreviewListView.VirtualListSize = _library.Count; + } + + private const int HowDeepToScan = 6; + + #endregion + + #region Export Button + + // Export a single image. + private void ExportButton_Click(object sender, EventArgs e) + { + if (_library == null) return; + if (_library.FileName == null) return; + if (PreviewListView.SelectedIndices.Count == 0) return; + + string _fileName = Path.GetFileName(OpenLibraryDialog.FileName); + + if (_fileName == null || _fileName == string.Empty) + { + _fileName = openFileName; + } + string _newName = _fileName.Remove(_fileName.IndexOf('.')); + string _folder = Application.StartupPath + "\\Exported\\" + _newName + "\\"; + + Bitmap blank = new Bitmap(1, 1); + + // Create the folder if it doesn't exist. + (new FileInfo(_folder)).Directory.Create(); + + System.Windows.Forms.ListView.SelectedIndexCollection _col = PreviewListView.SelectedIndices; + + toolStripProgressBar.Value = 0; + toolStripProgressBar.Maximum = _col.Count; + + for (int i = _col[0]; i < (_col[0] + _col.Count); i++) + { + _exportImage = _library.GetMImage(i); + if (_exportImage.Image == null) + { + blank.Save(_folder + i.ToString() + ".png", ImageFormat.Png); + } + else + { + _exportImage.Image.Save(_folder + i.ToString() + ".png", ImageFormat.Png); + } + + toolStripProgressBar.Value++; + + if (!Directory.Exists(_folder + "/Placements/")) + Directory.CreateDirectory(_folder + "/Placements/"); + + File.WriteAllLines(_folder + "/Placements/" + i.ToString() + ".txt", new string[] { _exportImage.X.ToString(), _exportImage.Y.ToString() }); + } + + toolStripProgressBar.Value = 0; + MessageBox.Show("Saving to " + _folder + "...", "Image Saved", MessageBoxButtons.OK); + } + + #endregion + + #region Main Form Resize + + // Don't let the splitter go out of sight on resizing. + private void LMain_Resize(object sender, EventArgs e) + { + if (splitContainer1.SplitterDistance <= this.Height - 150) return; + if (this.Height - 150 > 0) + { + splitContainer1.SplitterDistance = this.Height - 150; + } + } + + #endregion + + #region Image Zoom + // Resize the image(Zoom). + private Image ImageBoxZoom(Image image, Size size) + { + _originalImage = _selectedImage.Image; + Bitmap _bmp = new Bitmap(_originalImage, Convert.ToInt32(_originalImage.Width * size.Width), Convert.ToInt32(_originalImage.Height * size.Height)); + Graphics _gfx = Graphics.FromImage(_bmp); + return _bmp; + } + + // Zoom in and out. + private void ZoomTrackBar_Scroll(object sender, EventArgs e) + { + if (ImageBox.Image == null) + { + ZoomTrackBar.Value = 1; + } + if (ZoomTrackBar.Value > 0) + { + try + { + PreviewListView.Items[(int)nudJump.Value].EnsureVisible(); + + Bitmap _newBMP = new Bitmap(_selectedImage.Width * ZoomTrackBar.Value, _selectedImage.Height * ZoomTrackBar.Value); + using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(_newBMP)) + { + if (checkBoxPreventAntiAliasing.Checked == true) + { + g.InterpolationMode = InterpolationMode.HighQualityBicubic; + g.CompositingMode = CompositingMode.SourceCopy; + } + + if (checkBoxQuality.Checked == true) + { + g.InterpolationMode = InterpolationMode.NearestNeighbor; + } + + g.DrawImage(_selectedImage.Image, new Rectangle(0, 0, _newBMP.Width, _newBMP.Height)); + } + ImageBox.Image = _newBMP; + + toolStripStatusLabel.ForeColor = SystemColors.ControlText; + toolStripStatusLabel.Text = "Selected Image: " + string.Format("{0} / {1}", + PreviewListView.SelectedIndices[0].ToString(), + (PreviewListView.Items.Count - 1).ToString()); + } + catch + { + return; + } + } + } + + #endregion + + // Swap the image panel background colour Black/White. + private void pictureBox_Click(object sender, EventArgs e) + { + if (panel.BackColor == Color.Black) + { + panel.BackColor = Color.GhostWhite; + } + else + { + panel.BackColor = Color.Black; + } + } + + private void PreviewListView_VirtualItemsSelectionRangeChanged(object sender, ListViewVirtualItemsSelectionRangeChangedEventArgs e) + { + // Keep track of what image/s are selected. + ListView.SelectedIndexCollection _col = PreviewListView.SelectedIndices; + + if (_col.Count > 1) + { + toolStripStatusLabel.ForeColor = Color.Red; + toolStripStatusLabel.Text = "Multiple images selected."; + } + } + + #region Replace Image Button + + private void buttonReplace_Click(object sender, EventArgs e) + { + if (_library == null) return; + if (_library.FileName == null) return; + if (PreviewListView.SelectedIndices.Count == 0) return; + + OpenFileDialog ofd = new OpenFileDialog(); + ofd.ShowDialog(); + + if (ofd.FileName == "") return; + + Bitmap newBmp = new Bitmap(ofd.FileName); + + ImageList.Images.Clear(); + _indexList.Clear(); + _library.ReplaceImage(PreviewListView.SelectedIndices[0], newBmp, 0, 0, checkboxRemoveBlackOnImport.Checked); + PreviewListView.VirtualListSize = _library.Images.Count; + + try + { + PreviewListView.RedrawItems(0, PreviewListView.Items.Count - 1, true); + + if (ViewMode == "Image") + { + ImageBox.Image = _library.Images[PreviewListView.SelectedIndices[0]].Image; + } + else + { + ImageBox.Image = _library.Images[PreviewListView.SelectedIndices[0]].MaskImage; + } + } + catch (Exception) + { + return; + } + } + + #endregion + + #region Previous/Next Image Buttons + + private void previousImageToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + if (PreviewListView.Visible && PreviewListView.Items.Count > 0) + { + int index = PreviewListView.SelectedIndices[0]; + index = index - 1; + PreviewListView.SelectedIndices.Clear(); + this.PreviewListView.Items[index].Selected = true; + PreviewListView.Items[index].EnsureVisible(); + + if (_selectedImage.Height == 1 && _selectedImage.Width == 1 && PreviewListView.SelectedIndices[0] != 0) + { + previousImageToolStripMenuItem_Click(null, null); + } + } + } + catch (Exception) + { + PreviewListView.SelectedIndices.Clear(); + this.PreviewListView.Items[PreviewListView.Items.Count - 1].Selected = true; + } + } + + private void nextImageToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + if (PreviewListView.Visible && PreviewListView.Items.Count > 0) + { + int index = PreviewListView.SelectedIndices[0]; + index = index + 1; + PreviewListView.SelectedIndices.Clear(); + this.PreviewListView.Items[index].Selected = true; + PreviewListView.Items[index].EnsureVisible(); + + if (_selectedImage.Height == 1 && _selectedImage.Width == 1 && PreviewListView.SelectedIndices[0] != 0) + { + nextImageToolStripMenuItem_Click(null, null); + } + } + } + catch (Exception) + { + PreviewListView.SelectedIndices.Clear(); + this.PreviewListView.Items[0].Selected = true; + } + } + + // Move Left and Right through images. + protected override bool ProcessCmdKey(ref Message msg, Keys keyData) + { + if (!ImageTabActive) return false; + + if (keyData == Keys.Left) + { + previousImageToolStripMenuItem_Click(null, null); + return true; + } + + if (keyData == Keys.Right) + { + nextImageToolStripMenuItem_Click(null, null); + return true; + } + + if (keyData == Keys.Up) //Not 100% accurate but works for now. + { + double d = Math.Floor((double)(PreviewListView.Width / 67)); + int index = PreviewListView.SelectedIndices[0] - (int)d; + + PreviewListView.SelectedIndices.Clear(); + if (index < 0) + index = 0; + + this.PreviewListView.Items[index].Selected = true; + + return true; + } + + if (keyData == Keys.Down) //Not 100% accurate but works for now. + { + double d = Math.Floor((double)(PreviewListView.Width / 67)); + int index = PreviewListView.SelectedIndices[0] + (int)d; + + PreviewListView.SelectedIndices.Clear(); + if (index > PreviewListView.Items.Count - 1) + index = PreviewListView.Items.Count - 1; + + this.PreviewListView.Items[index].Selected = true; + + return true; + } + + return base.ProcessCmdKey(ref msg, keyData); + } + + private void buttonSkipNext_Click(object sender, EventArgs e) + { + nextImageToolStripMenuItem_Click(null, null); + } + + private void buttonSkipPrevious_Click(object sender, EventArgs e) + { + previousImageToolStripMenuItem_Click(null, null); + } + + #endregion + + #region No Bluring Checkbox + private void checkBoxQuality_CheckedChanged(object sender, EventArgs e) + { + ZoomTrackBar_Scroll(null, null); + } + + #endregion + + #region AntiAliasing Checkbox + private void checkBoxPreventAntiAliasing_CheckedChanged(object sender, EventArgs e) + { + ZoomTrackBar_Scroll(null, null); + } + + #endregion + + private void nudJump_ValueChanged(object sender, EventArgs e) + { + if (PreviewListView.Items.Count - 1 >= nudJump.Value) + { + PreviewListView.SelectedIndices.Clear(); + PreviewListView.Items[(int)nudJump.Value].Selected = true; + PreviewListView.Items[(int)nudJump.Value].EnsureVisible(); + } + } + + private void nudJump_KeyDown(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.Enter) + { + //Enter key is down. + if (PreviewListView.Items.Count - 1 >= nudJump.Value) + { + PreviewListView.SelectedIndices.Clear(); + PreviewListView.Items[(int)nudJump.Value].Selected = true; + PreviewListView.Items[(int)nudJump.Value].EnsureVisible(); + } + e.Handled = true; + e.SuppressKeyPress = true; + } + } + + private void PreviewListViewMask_SelectedIndexChanged(object sender, EventArgs e) + { + + } + + private void RButtonViewMode_CheckedChanged(object sender, EventArgs e) + { + if (RButtonImage.Checked) + { + ViewMode = "Image"; + } + else if (RButtonOverlay.Checked) + { + ViewMode = "Overlay"; + } + + if (_selectedImage != null) + { + if (ViewMode == "Image") + { + ImageBox.Image = _selectedImage.Image; + } + else + { + ImageBox.Image = _selectedImage.MaskImage; + } + } + } + + private void openReferenceFileToolStripMenuItem_Click(object sender, EventArgs e) + { + if (OpenLibraryDialog.ShowDialog() != DialogResult.OK) return; + + OpenReferenceLibrary(OpenLibraryDialog.FileName); + PreviewListView.Invoke(new EventHandler(PreviewListView_SelectedIndexChanged), EventArgs.Empty); + } + + private void checkBox1_CheckedChanged(object sender, EventArgs e) + { + PreviewListView.Invoke(new EventHandler(PreviewListView_SelectedIndexChanged), EventArgs.Empty); + } + + private void importShadowsToolStripMenuItem_Click(object sender, EventArgs e) + { + if (OpenLibraryDialog.ShowDialog() != DialogResult.OK) return; + OpenShadowLibraryAndImport(OpenLibraryDialog.FileName); + } + + private void openReferenceImageToolStripMenuItem_Click(object sender, EventArgs e) + { + if (_library == null) return; + if (_library.FileName == null) return; + + if (ImportImageDialog.ShowDialog() != DialogResult.OK) return; + + string fileName = ImportImageDialog.FileNames[0]; + _referenceImage = new Bitmap(fileName); + } + + #region Offset Boxes + private void numericUpDownX_ValueChanged(object sender, EventArgs e) + { + for (int i = 0; i < PreviewListView.SelectedIndices.Count; i++) + { + MLibraryV2.MImage image = _library.GetMImage(PreviewListView.SelectedIndices[i]); + image.X = (short)numericUpDownX.Value; + } + PreviewListView.Invoke(new EventHandler(PreviewListView_SelectedIndexChanged), EventArgs.Empty); + } + + private void numericUpDownY_ValueChanged(object sender, EventArgs e) + { + for (int i = 0; i < PreviewListView.SelectedIndices.Count; i++) + { + MLibraryV2.MImage image = _library.GetMImage(PreviewListView.SelectedIndices[i]); + image.Y = (short)numericUpDownY.Value; + } + PreviewListView.Invoke(new EventHandler(PreviewListView_SelectedIndexChanged), EventArgs.Empty); + } + + #endregion + + private void splitContainer2_Panel2_Paint(object sender, PaintEventArgs e) + { + + } + + #region Open Data Folder + private void OpenBtn_Click(object sender, EventArgs e) + { + using (FolderBrowserDialog fbd = new FolderBrowserDialog() { Description = "Select your Client Folder." }) + { + TreeBrowser.Nodes.Clear(); + + fbd.SelectedPath = PathTxtBox.Text; + DialogResult drResult = fbd.ShowDialog(); + if (drResult == System.Windows.Forms.DialogResult.OK) + { + PathTxtBox.Text = fbd.SelectedPath; + + string trimmedPath = PathTxtBox.Text.Substring(PathTxtBox.Text.Length - 4); + if (trimmedPath.Contains("Data")) + { + if (Directory.Exists(PathTxtBox.Text)) + { + LoadDirectory(PathTxtBox.Text); + } + else + { + MessageBox.Show("Directory doesn't exist"); + } + } + else + { + MessageBox.Show("Path must be Data folder."); + } + } + } + } + + #endregion + + #region Load Data Directory (TreeView) + public void LoadDirectory(string Dir) + { + DirectoryInfo di = new DirectoryInfo(Dir); + + TreeNode tds = TreeBrowser.Nodes.Add(di.Name); + tds.Tag = di.FullName; + tds.StateImageIndex = 0; + LoadFiles(Dir, tds); + LoadSubDirectories(Dir, tds); + } + + #endregion + + #region Load Sub Directories + private void LoadSubDirectories(string dir, TreeNode td) + { + // Get all subdirectories + string[] subdirectoryEntries = Directory.GetDirectories(dir); + // Loop through them to see if they have any other subdirectories + foreach (string subdirectory in subdirectoryEntries) + { + DirectoryInfo di = new DirectoryInfo(subdirectory); + TreeNode tds = td.Nodes.Add(di.Name); + tds.StateImageIndex = 0; + tds.Tag = di.FullName; + LoadFiles(subdirectory, tds); + LoadSubDirectories(subdirectory, tds); + } + } + + #endregion + + #region Load Files + private void LoadFiles(string dir, TreeNode td) + { + string[] Files = Directory.GetFiles(dir, "*.*"); + // Loop through them to see files + foreach (string file in Files) + { + FileInfo fi = new FileInfo(file); + TreeNode tds = td.Nodes.Add(fi.Name); + tds.Tag = fi.FullName; + tds.StateImageIndex = 1; + } + } + + #endregion + private void TreeAfterSelect() + { + if (TreeBrowser.SelectedNode == null) return; + if (TreeBrowser.SelectedNode.FullPath.ToString().Contains(".lib") || TreeBrowser.SelectedNode.FullPath.ToString().Contains(".Lib")) + { + string pathToTrim = TreeBrowser.SelectedNode.FullPath.ToString(); + string trimmedPath = pathToTrim.Substring(4); + + openFileName = trimmedPath; + + OpenLibraryDialog.FileName = null; + OpenLibrary(PathTxtBox.Text + trimmedPath); + } + else + { + MessageBox.Show("File must be in '.Lib' format."); + } + } + + #region Mob Background Button + private void MobBackgroundPicBox_Click(object sender, EventArgs e) + { + if (BackgroundPicBox1.Visible) + { + BackgroundPicBox1.Visible = false; + ImageBox.Parent = panel; + MobChkBox.Checked = false; + LockOffsetChkBox.Checked = false; + } + else + { + BackgroundPicBox1.Visible = true; + MobChkBox.Checked = true; + LockOffsetChkBox.Checked = true; + ImageBox.Parent = BackgroundPicBox1; + } + } + + #endregion + + #region Offset Buttons + + private void BtnXMinusTen_Click(object sender, EventArgs e) + { + DecreaseX(10); + } + + private void BtnXMinusFive_Click(object sender, EventArgs e) + { + DecreaseX(5); + } + + private void BtnXMinusOne_Click(object sender, EventArgs e) + { + DecreaseX(1); + } + + private void BtnYMinusTen_Click(object sender, EventArgs e) + { + DecreaseY(10); + } + + private void BtnYMinusFive_Click(object sender, EventArgs e) + { + DecreaseY(5); + } + + private void BtnYMinusOne_Click(object sender, EventArgs e) + { + DecreaseY(1); + } + + private void BtnXPlusOne_Click(object sender, EventArgs e) + { + IncreaseX(1); + } + + private void BtnXPlusFive_Click(object sender, EventArgs e) + { + IncreaseX(5); + } + + private void BtnXPlusTen_Click(object sender, EventArgs e) + { + IncreaseX(10); + } + + private void BtnYPlusOne_Click(object sender, EventArgs e) + { + IncreaseY(1); + } + private void BtnYPlusFive_Click(object sender, EventArgs e) + { + IncreaseY(5); + } + private void BtnYPlusTen_Click(object sender, EventArgs e) + { + IncreaseY(10); + } + + private void IncreaseY(short IncreaseAmount) + { + if (_library == null) return; + if (_library.FileName == null) return; + if (PreviewListView.SelectedIndices.Count == 0) return; + if (_selectedImage == null) return; + + System.Windows.Forms.ListView.SelectedIndexCollection _col = PreviewListView.SelectedIndices; + + for (int i = _col[0]; i < (_col[0] + _col.Count); i++) + { + _editImage = _library.GetMImage(i); + if (_editImage == null) return; + + short ImageY = _editImage.Y; + _editImage.Y = (short)(ImageY + IncreaseAmount); + numericUpDownY.Text = _selectedImage.Y.ToString(); + if (LockOffsetChkBox.Checked) + { + if (MobChkBox.Checked) + { + ImageBox.Location = new Point(295 + _selectedImage.X, 392 + _selectedImage.Y); + } + else + { + ImageBox.Location = new Point(_selectedImage.X, _selectedImage.Y); + } + } + else + { + ImageBox.Location = new Point(58, 23); + } + } + } + + private void IncreaseX(short IncreaseAmount) + { + if (_library == null) return; + if (_library.FileName == null) return; + if (PreviewListView.SelectedIndices.Count == 0) return; + if (_selectedImage == null) return; + + System.Windows.Forms.ListView.SelectedIndexCollection _col = PreviewListView.SelectedIndices; + + for (int i = _col[0]; i < (_col[0] + _col.Count); i++) + { + _editImage = _library.GetMImage(i); + if (_editImage == null) return; + + short ImageX = _editImage.X; + _editImage.X = (short)(ImageX + IncreaseAmount); + numericUpDownX.Text = _selectedImage.X.ToString(); + if (LockOffsetChkBox.Checked) + { + if (MobChkBox.Checked) + { + ImageBox.Location = new Point(295 + _selectedImage.X, 392 + _selectedImage.Y); + } + else + { + ImageBox.Location = new Point(_selectedImage.X, _selectedImage.Y); + } + } + else + { + ImageBox.Location = new Point(58, 23); + } + } + } + + private void DecreaseY(short DecreaseAmount) + { + if (_library == null) return; + if (_library.FileName == null) return; + if (PreviewListView.SelectedIndices.Count == 0) return; + if (_selectedImage == null) return; + + System.Windows.Forms.ListView.SelectedIndexCollection _col = PreviewListView.SelectedIndices; + + for (int i = _col[0]; i < (_col[0] + _col.Count); i++) + { + _editImage = _library.GetMImage(i); + if (_editImage == null) return; + + short ImageY = _editImage.Y; + _editImage.Y = (short)(ImageY - DecreaseAmount); + numericUpDownY.Text = _selectedImage.Y.ToString(); + if (LockOffsetChkBox.Checked) + { + if (MobChkBox.Checked) + { + ImageBox.Location = new Point(295 + _selectedImage.X, 392 + _selectedImage.Y); + } + else + { + ImageBox.Location = new Point(_selectedImage.X, _selectedImage.Y); + } + } + else + { + ImageBox.Location = new Point(58, 23); + } + } + } + + private void DecreaseX(short DecreaseAmount) + { + if (_library == null) return; + if (_library.FileName == null) return; + if (PreviewListView.SelectedIndices.Count == 0) return; + if (_selectedImage == null) return; + + System.Windows.Forms.ListView.SelectedIndexCollection _col = PreviewListView.SelectedIndices; + + for (int i = _col[0]; i < (_col[0] + _col.Count); i++) + { + _editImage = _library.GetMImage(i); + if (_editImage == null) return; + + short ImageX = _editImage.X; + _editImage.X = (short)(ImageX - DecreaseAmount); + numericUpDownX.Text = _selectedImage.X.ToString(); + if (LockOffsetChkBox.Checked) + { + if (MobChkBox.Checked) + { + ImageBox.Location = new Point(295 + _selectedImage.X, 392 + _selectedImage.Y); + } + else + { + ImageBox.Location = new Point(_selectedImage.X, _selectedImage.Y); + } + } + else + { + ImageBox.Location = new Point(58, 23); + } + } + + #endregion + } + } +} \ No newline at end of file diff --git a/LibraryEditor/LMain.resx b/LibraryEditor/LMain.resx new file mode 100644 index 0000000..023fdad --- /dev/null +++ b/LibraryEditor/LMain.resx @@ -0,0 +1,18067 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 430, 17 + + + 127, 17 + + + 281, 17 + + + 534, 17 + + + 692, 17 + + + 858, 17 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIkSURBVDhPjZHfa1JhGMefootuhHFIyItuElSMDDsu + TL0wI8oDMpMZMtwitbO17MfKkR2WGhHVnRejPyCIbnLz3ou88EKQNUh2MYhtUJBzKngjCJOn9zkczzwh + rAc+nOe8z/d5D4cPZLPZAEM8hkAmk4F7b/ZBfN+B+NsDuPv6D8xmfwNIkjSPxxRlUisf6QLv/XdtpIvU + C1Kp1MJgMMBCoTAWmlFm4eVXWkDGHuOQsRHN/DJDMpl80O/3sVQqKd87KjqjGWXmn36AiLTrDaW2MSLt + QPjFz0nWr0MikVjs9XpYLpeVtaOiM5pRhgHJV0WYWtqChytrMPP8G9xa3BQgGo0mu90uVioVZQ2xXq/L + 7wTNKJNOpyGXy2l4Jq0ChEKhR51OB6vVqrKOck+L7XYbaRaLxb6MMSPbAb/f/7jZbGKtVtNAZ6Ioys9i + sahcrS2yA06nc6nVamGj0RgLzVwuF7rdbg1DO2AwGCJ6vX75X+x2+1o+n0eLxYIejweDwaAK+6hqB87z + T0Cn02kwGo2qHZ7nURAEDXQ2tAOXblcFPrwJF258gsvT3+Hizc9kRrVjs9nQ5/PJOBwO+Z0Y2gHHnR/r + VyJbk86ZbeqRPb2B8LJqx2q1yr9AUD9qhzLgnt0xe+Z2NxiHjD0GXp9eVe2YTCYNo3YoA2wBJs5ePQEA + p67F93HC4Jpi/Zn/sUMZlpXrJOM0g2OcY5g5jouPszMKx3FzfwHqQkPHzehjcQAAAABJRU5ErkJggg== + + + + 948, 17 + + + 1057, 17 + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAE+SURBVDhPlZK7joJQFEX9RAsKKho6KzsqOyoTExop + KHiU0PBLNiKIIkpNjnfv0ZMZXzNjsm7CuXuvHIITEZlkWRYa5BdCZB/hEcexjOP4EWQMTxIeURQxVNe1 + 7HY7UlWVbLdbgru2bQU5ww8Jj/V6zVDTNJQ8inAHESTIGlTCIwgChvb7vZRl+QTuNpuNSpA3UELBcrnU + NQFE4L4R7h5BRwW+73N4OBykKArJ8/wteC1k0VHBYrHg8Hg8EojAq40AsuiowPM8Dk+nk6RpKkmSvAUi + ZNFRwXw+57Dve0pA13Xk+1b3jZBFRwWz2YzD8/ksYRiS2+d6AiJk0VGB67ocXi4XSgC2ebcRsuiowHEc + FaxWq49Agiw6KrBtm8NhGAhEd15thCw6KrAsCw+8+Av43Tpfgul0Ghrkn5i/skyuvAw6/NgrRhAAAAAA + SUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAE8SURBVDhPndPfR0NxGMfx539KlKRJkii6SERRMrFJ + piQTJ3YxUYnI6de0ismaWelQcRbjMLOpi93URV1M0kWJLiI+fT9jtPMjThcvvr7P8z4cx5GSHvwNNva5 + gxS3phrwcZsDaqU6nnmnzuKFnVibE4S38im+n6wmvOPMg6mIFDbGCV8PeV/YsJX86ijhs2r4woatXMWH + Ce/ljC9s2IoRGyK8Wke+sGErOW2AUDN1X9iwlUy0j/BorPnChq2cLPQQ7rMxh0pyDpz9wZTjSBehmoo2 + KW6HwXu392+4Xp+EHMx0mArcvBQSuEtGXF3GR7hjyn6oTbtYGcPzza5DZS/kSXWkCQDZmW41z5cH7T+S + J+6yUaT+AD3YEkiE23E424nUfDfSi73ILvXjTH0q4pl3nHFH7VOAbf0B/wf5ATqWyqQllY1UAAAAAElF + TkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFLSURBVDhPnZHPKwRxGIff/0PKQW3bhiLZIiuh2JQf + bclBDhxWraJIOTkYqTWpddgDxWQPDg4OapGSlCiFVkok5bRtynsQp9d8Ji+ahqb51HP6Ps/b1FD3zKFp + w2Deun7zg/poKT51wKnckwC/Ux8tdU7mAx9ASx3ju5zceBSA3RffJV949QRvmPpoqXVsh0fWHgT4nfpo + KTa6zUPZOwGYny9QHy01Dm/xQOZWgN+pj5YaBnPct1QQsH/18qX8PTjqo6W6xDrHFy4lCGippmeV2+Yu + JAhoKdKV5ebZc1HObp6lVCp6grdQLP3toqVQ+wpHp09FgVid2HRwHwA4oC5aqmxZ5tqJE1EgRfotB3cM + cEBdtFTRlDZtuCp1LABSuNdycMcAB9RFR/afofLoomnD4eSRZ/QbHIAH0DgHyuoNYNqwkdn7+A84Pxjm + JzFPAv7ViQXQAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIKSURBVDhPlZLrS1RBGMbnD+lLH4ouJEg3LMKtVLps + GZYREQUhQZEREtlGYpCEBR2ihdMFlcgLIbVkaLW1xkJBgl3gtF0kCT8kdnHdPbPrbnpWnubZbYdOLkkf + fpxh5n1/nHnnEQCy7G4MmwrMgZmvz6MXuxqe4rvt4Js9ja/xaYzFyBRGJ3J8iU6BNQqXRC+qTofwQwlC + ERtBK46+N3H0vIwhMBhF98B4VsK/YJ1CS7Sg8mQQ49JB+L3EEyV5pCS9SnJPSe4qycfRlL4KaxVZidh2 + qt9QyPPtFi50RdDc6abqTBi+1rcYGktrAfHW9RFTbDkRlEfaR5B2ZgrCs0pfCJ+UwNdqob7FQlPnOzR1 + RLD52H2I8treOQVb6x66rpOfScXhAITnUEAebBku2Ex4VnG0xzUTDpaCDTXdECX7b8s9/g8FmwnPPDV3 + XIPl6/CJSw90QSyvvim3X7TwL9bs63C9Dp+YOVm79xbEMu91ufHsKzg/7Vks8hjg2cqdbXg2lNAS5oRh + W13dBrGwzC9L6geyDfnvnwLuFXmv4cVwUksYNiZ2xY4bEPPXXTIUkg3Fx5/PEnBvSfkVDH6edEkY+2Lv + 1VwK561qNh70W/gbChaUGqg99xivR1IuCWNftMmfE5ClZZeRTM8g8RupsFMkg/hkBjGSzGAi4SCqYOzZ + owWL1xumAv+HYf4CqegOOsZEp14AAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAG5SURBVDhPpZNLSwJRGIb9AW1ctIk2tekC1aIWURBR + EHRbRIS6iFZdJMFGYSK6gmRujFo0UQPWFFG0KDMqnFUqGGRBY6OFLjJoqgHbtn07M0FpTWS0ePgOfIeH + c853Xh2AP+HqLspb7Cu1sOaq2KatxqK5SQu6Mb9kqrVgwW0qg39pGJJwCCKIqU2O4xgCfmLaWC86eyrA + r45BivohR72QI6wieLd7PB6kUikkk0mIoohIJIJgMAie5+Hz+UDV6XF/eYwbnsHZshHCuhFP4cVPAcuy + HwJJktT1V0GYo3HiaEZooeO7IBAIIJ1OQ5ZlVeDYNSGRSOQmmOC6GAIyeXyJqjUej/8uoJZacPd8nsXR + +axalZ4gCN8EV2sGCPuT2KCqoeufq4XHb9Ekdn8KpZ8pCMy3Y2u0Ae6hJjCDldAZRsvh3O7SROlpnUC5 + wvXBNDkBuUK7uZAhIBMrU6vWnN6ATGHA6/VmTaGxV5/7FJQx0jT9v39gt9t//YmK4GJnHNd7k7jdo7IF + VquVIeAnRtoqxJnOYqyY63HoMuBiy4aH0LwieFUFuUDSWETSaCBxdpM4n5I4v27aatxvbXO8Qa2Rp4QA + AAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAEfSURBVDhPpdPfR0NhHAbw7/+Upkkik4kuuuimi4jM + ZsmMJBNd7KKbSqQ62pZ+MamZE50oziSOMst2cW5KSnbVRRm7iPFsT5TYe468XXx43+/zfW7O8UrZiHyD + wu9cSVAvy93WNBpVE53zD945Z+5HnI0pvFdO0XpxunDO3IctN+uT+HwsaWFXSisTaLqWFnblcnkcH5WC + 0uvVNpj7ESs9hjfnsMvT+RqYNd0LT7eZBMRcGoWXRs1E3TY8cUeuN2NfX1vl2Vr1VUiFIcfzITwU01rY + laPkINx8Sgu7sjfbj9p+Ugu7kov34T4b18Ku7ER7VY/oT9gVI9JjZ2IB7M4EcZAYQH5uCCcLwygujuCs + 85uIZ86YcYe77LArAP4B0gZXPOwKsc1bJgAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAEUSURBVDhPjZOhjoNQEEXnE6tQOGQlEonD1VCF4CdI + COFfMJRACGkFkkx7XvKax7JvWZIj7sxlcgSIqu4oyzL/oH+Qu/3dy1AUhW7b5oX9h++Rw4EPptj3/QE7 + v9/vYI6cKrdtq4/Hw8CBruvMkdvtBvm/lJum0WEYDrssy1TQIbiqFjunU9e1juP4hV2apiqoEKymC3NX + uaoqnabJwC5JEhU0CCj+hLkL3XmeDeQ4jlXQILh6v0GH7rIsBvL1elVBg2DVfNCh+3w+DeQoilTQIFg1 + H3Tovl4vAzkMQxU0CFbNBx3btQRBoIIGwar5oEOX53K5WHJBg6VV80GHLp+vi6CxrqspnEH3cAANR+mM + 3a+sqvIGZodWiQ7ahKIAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAACgSURBVDhPpZBRDQIxEERrAQtYOAs4aLCABSxgAQtY + OAtYQEuZR7qEkLmECR/vun27netdG2P8hZUJViZYmWBlgpUJrfe+E1exirPAXeZa9UnQY+azXhhgg6Q+ + ir2gWQEVXKF3cRC8eEXUARoMvRriO4BDtX/3eNBYpmCwrkcQ7jHdZgCDNzaCW3AjPokaz7od4P5sgpUJ + ViZYmWDl74z2BJUFejh55pv5AAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKiSURBVDhPfdBbSNNRHAfwQdBL0IPQW1AEgfVSEPii + YhZqLqGpyxsiiG3oXLm02lZM54Vmw9ylNsd02cyZLi3RZmneEk2a06E2mBfUytTpRP0rhen6diax1tQe + Ppzf+f0O38M5NL1ef0CmqYmm32orjbrTTsWI3m+Q2kG8JOgAaP9Dq6ysRJ6yCVz1yFZ5zyrqBig0Da1B + 1fptO1nS/yM8y9RDpBKH9gzQarX2fvMwonLegGtcwv2OFag/UCjrXYPENAeeftKV+GBgM4z7ej00vZHy + UroToFKpsltaWnBT0owkuc0lfO3EY3dA/yr4zXNgPZtGsnYC3KdTENXPQ9rqhKyTwsWMV+tBqcbDNLlc + fkStVsPUbkEYtwmcukVIOlah/biG3DYH2DUziFaPgaGwI0k7DVbVHDJrnYi91/k9ILE6aOcdUqnU0N3d + jdhMPa7Kxly8hkUoe1dQ0LWMDOMXMMvHQC/5RELGkar7jMzni2DJBn+ejdaxdwKKiopCyF+gTN+GEFaj + 61qNA+K3S8jrIAH1s4jTTSBCOoJLxcOIezSO9KoF8J6Mb5+OLFN4flMkEtmtVisCYxTk0KTrRoMT/JZl + cBsWkKybQaR0FKEFg6AXjyJRM4O7L766Tl5QdHkC+Hx+tsFggLCwGmeuVGz5R2o3jgeWUKcu6zaCr7/b + jMi3bp/PHUJo7iCiHtqRU+/4dSK4lPIE8Hg8P4FAAJvNBjZHgHPh+f7u/tEAyTEig6glZgnqj3mi0BPg + xuFwDCaTCRqNBqRme8/2888mLS0tSCwWo6+vD6S2eM/2s6uRkpJiN5vNEAqFIHWA79zXrkZCQkKWUqmE + 0WgEqSt85752NZhMph+5GRaLBfHx8SD7g75nvO3ZZDAYt4kp97rX/C/QfgOR7K8aMT0uggAAAABJRU5E + rkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIESURBVDhPhdFNaxNRFMbx+w0EK9ZatGhBXbSKbbUV + XbQK3UhplIgBMaIJgsFA6ML40hSUZJNVEBIhgWB04xdwL0ZqEUqxRUVtYSBOMpnJvCRDiLWmj3NPzVDH + GAf+DNxz5seFYblcLmWF/5QCwNrFstksms1mx/iOVVuEpdNpWpIkCaVSiSoWixBFkeIzRVHA96z+Qlgy + maSlcrlMiBPiMw5xhO9a/YGwRCJBS7IsE+KE+EwQBBvh+1Y2wuLxuH1NHodaGEf4zBn/xgai0SgdVioV + 6l/Q9hvxb2wgEonQoaqqVCeIx3d/P1tAOBymQ13XoWlae+ibAPVZBHrMBSN2AfUXj6DfObNrfSXPWCgU + IsAwDEJakI0JX6Dcm4QcHIF8ewRK8ASU0CkoM6dN+dbRPhYIBAioVquEOKHy4yBE/zFombtofq9Dex6D + ePO41RAK1w6/ZD6fj4BarUaIExL8o1i7MojNHw2oT6P4Or0fSmYOq5ePYPXigXXm9XptoNV26NOlAXyc + 6oeUeYjlc3tRfPIAP00DH873YWWyd4N5PB4CTNOknNDn8FUsnd2HpYleFBL3sdmoY232OhbHe7A4tjvP + 3G43/ROOtKshiXg3cRALo914O9yF+eGd9F4Y27MxP9jVz1wuV8oKnWoUBCz7p/HmZA/yQ914f2MKrwZ2 + HNLzr9kvX6M0CJt0vncAAAAASUVORK5CYII= + + + + + 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 + + + + 17, 17 + + + True + + + + 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 + RK5CYII= + + + + + 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 + /UZyRKu3AAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHuSURBVDhPlY/dS1NxGMfPP5BXQReBV9KV0E3UlXoh + NrAwChHmTTKFTERzRGBI9jqIUCLk4AsIYhl4VzkERxN8gVZZrVVWw8Vyrpnb0c0dz3Ze9vX5PbLoYip7 + 4APP7znn+/n9HunepL2f0AijSJ4AkKTbEw3aC98gXvqGioJyBgt6xi4aYvDq7XBRUI7yJLj1tN6i56BY + KLcn6H1WDzWjIK1tILUTw5YawWY6jEQqhI1kEOtb3xHb/IY/SgBRxY+1xCdG5FjQPVoHNatQKIJ4aoUD + UeUzIvElhP++QSg2j2B0Fj/WPFhencbX31MsEDkWOGUbtGySbl8nyeoBEi9JZlgiXiJyLGjrq0RGT9Ma + CV7hcImH1xE5Fjjun4ZuaND05IESZfsX/aeKEAxTw5jbtSdovFkO3czQx519JWomjo8/veh73oIb8lk8 + nryKQGhBCGTpUlcZGXWYVragRPTvlz3o7K9ixqcf/uv9wTlIta3HYVkmcjmzoMSieffABVxxnWFE5fu7 + I42QqpuO8lBULmdRwCCRTmtpyBppklu43HOSb/6/xLm59xSkCvuRLxX2EuxHJLaCDlcNGpwnGFH5/vqj + 85DofBjOxQ9u1LWVMuLmfP8u8LpgoBDy4pIb7XdqYHMcw7UH5+Dze2gMeRfaGBXFhJWy1gAAAABJRU5E + rkJggg== + + + + + /9j/4AAQSkZJRgABAQEAAAAAAAD/7gAOQWRvYmUAZAAAAAAB/+IMWElDQ19QUk9GSUxFAAEBAAAMSExp + bm8CEAAAbW50clJHQiBYWVogB84AAgAJAAYAMQAAYWNzcE1TRlQAAAAASUVDIHNSR0IAAAAAAAAAAAAA + AAAAAPbWAAEAAAAA0y1IUCAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAARY3BydAAAAVAAAAAzZGVzYwAAAYQAAABsd3RwdAAAAfAAAAAUYmtwdAAAAgQAAAAUclhZWgAA + AhgAAAAUZ1hZWgAAAiwAAAAUYlhZWgAAAkAAAAAUZG1uZAAAAlQAAABwZG1kZAAAAsQAAACIdnVlZAAA + A0wAAACGdmlldwAAA9QAAAAkbHVtaQAAA/gAAAAUbWVhcwAABAwAAAAkdGVjaAAABDAAAAAMclRSQwAA + BDwAAAgMZ1RSQwAABDwAAAgMYlRSQwAABDwAAAgMdGV4dAAAAABDb3B5cmlnaHQgKGMpIDE5OTggSGV3 + bGV0dC1QYWNrYXJkIENvbXBhbnkAAGRlc2MAAAAAAAAAEnNSR0IgSUVDNjE5NjYtMi4xAAAAAAAAAAAA + AAASc1JHQiBJRUM2MTk2Ni0yLjEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAFhZWiAAAAAAAADzUQABAAAAARbMWFlaIAAAAAAAAAAAAAAAAAAAAABYWVogAAAAAAAA + b6IAADj1AAADkFhZWiAAAAAAAABimQAAt4UAABjaWFlaIAAAAAAAACSgAAAPhAAAts9kZXNjAAAAAAAA + ABZJRUMgaHR0cDovL3d3dy5pZWMuY2gAAAAAAAAAAAAAABZJRUMgaHR0cDovL3d3dy5pZWMuY2gAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZGVzYwAAAAAAAAAuSUVDIDYx + OTY2LTIuMSBEZWZhdWx0IFJHQiBjb2xvdXIgc3BhY2UgLSBzUkdCAAAAAAAAAAAAAAAuSUVDIDYxOTY2 + LTIuMSBEZWZhdWx0IFJHQiBjb2xvdXIgc3BhY2UgLSBzUkdCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRl + c2MAAAAAAAAALFJlZmVyZW5jZSBWaWV3aW5nIENvbmRpdGlvbiBpbiBJRUM2MTk2Ni0yLjEAAAAAAAAA + AAAAACxSZWZlcmVuY2UgVmlld2luZyBDb25kaXRpb24gaW4gSUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAB2aWV3AAAAAAATpP4AFF8uABDPFAAD7cwABBMLAANcngAAAAFYWVogAAAAAABM + CVYAUAAAAFcf521lYXMAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAKPAAAAAnNpZyAAAAAAQ1JUIGN1 + cnYAAAAAAAAEAAAAAAUACgAPABQAGQAeACMAKAAtADIANwA7AEAARQBKAE8AVABZAF4AYwBoAG0AcgB3 + AHwAgQCGAIsAkACVAJoAnwCkAKkArgCyALcAvADBAMYAywDQANUA2wDgAOUA6wDwAPYA+wEBAQcBDQET + ARkBHwElASsBMgE4AT4BRQFMAVIBWQFgAWcBbgF1AXwBgwGLAZIBmgGhAakBsQG5AcEByQHRAdkB4QHp + AfIB+gIDAgwCFAIdAiYCLwI4AkECSwJUAl0CZwJxAnoChAKOApgCogKsArYCwQLLAtUC4ALrAvUDAAML + AxYDIQMtAzgDQwNPA1oDZgNyA34DigOWA6IDrgO6A8cD0wPgA+wD+QQGBBMEIAQtBDsESARVBGMEcQR+ + BIwEmgSoBLYExATTBOEE8AT+BQ0FHAUrBToFSQVYBWcFdwWGBZYFpgW1BcUF1QXlBfYGBgYWBicGNwZI + BlkGagZ7BowGnQavBsAG0QbjBvUHBwcZBysHPQdPB2EHdAeGB5kHrAe/B9IH5Qf4CAsIHwgyCEYIWghu + CIIIlgiqCL4I0gjnCPsJEAklCToJTwlkCXkJjwmkCboJzwnlCfsKEQonCj0KVApqCoEKmAquCsUK3Arz + CwsLIgs5C1ELaQuAC5gLsAvIC+EL+QwSDCoMQwxcDHUMjgynDMAM2QzzDQ0NJg1ADVoNdA2ODakNww3e + DfgOEw4uDkkOZA5/DpsOtg7SDu4PCQ8lD0EPXg96D5YPsw/PD+wQCRAmEEMQYRB+EJsQuRDXEPURExEx + EU8RbRGMEaoRyRHoEgcSJhJFEmQShBKjEsMS4xMDEyMTQxNjE4MTpBPFE+UUBhQnFEkUahSLFK0UzhTw + FRIVNBVWFXgVmxW9FeAWAxYmFkkWbBaPFrIW1hb6Fx0XQRdlF4kXrhfSF/cYGxhAGGUYihivGNUY+hkg + GUUZaxmRGbcZ3RoEGioaURp3Gp4axRrsGxQbOxtjG4obshvaHAIcKhxSHHscoxzMHPUdHh1HHXAdmR3D + HeweFh5AHmoelB6+HukfEx8+H2kflB+/H+ogFSBBIGwgmCDEIPAhHCFIIXUhoSHOIfsiJyJVIoIiryLd + IwojOCNmI5QjwiPwJB8kTSR8JKsk2iUJJTglaCWXJccl9yYnJlcmhya3JugnGCdJJ3onqyfcKA0oPyhx + KKIo1CkGKTgpaymdKdAqAio1KmgqmyrPKwIrNitpK50r0SwFLDksbiyiLNctDC1BLXYtqy3hLhYuTC6C + Lrcu7i8kL1ovkS/HL/4wNTBsMKQw2zESMUoxgjG6MfIyKjJjMpsy1DMNM0YzfzO4M/E0KzRlNJ402DUT + NU01hzXCNf02NzZyNq426TckN2A3nDfXOBQ4UDiMOMg5BTlCOX85vDn5OjY6dDqyOu87LTtrO6o76Dwn + PGU8pDzjPSI9YT2hPeA+ID5gPqA+4D8hP2E/oj/iQCNAZECmQOdBKUFqQaxB7kIwQnJCtUL3QzpDfUPA + RANER0SKRM5FEkVVRZpF3kYiRmdGq0bwRzVHe0fASAVIS0iRSNdJHUljSalJ8Eo3Sn1KxEsMS1NLmkvi + TCpMcky6TQJNSk2TTdxOJU5uTrdPAE9JT5NP3VAnUHFQu1EGUVBRm1HmUjFSfFLHUxNTX1OqU/ZUQlSP + VNtVKFV1VcJWD1ZcVqlW91dEV5JX4FgvWH1Yy1kaWWlZuFoHWlZaplr1W0VblVvlXDVchlzWXSddeF3J + XhpebF69Xw9fYV+zYAVgV2CqYPxhT2GiYfViSWKcYvBjQ2OXY+tkQGSUZOllPWWSZedmPWaSZuhnPWeT + Z+loP2iWaOxpQ2maafFqSGqfavdrT2una/9sV2yvbQhtYG25bhJua27Ebx5veG/RcCtwhnDgcTpxlXHw + cktypnMBc11zuHQUdHB0zHUodYV14XY+dpt2+HdWd7N4EXhueMx5KnmJeed6RnqlewR7Y3vCfCF8gXzh + fUF9oX4BfmJ+wn8jf4R/5YBHgKiBCoFrgc2CMIKSgvSDV4O6hB2EgITjhUeFq4YOhnKG14c7h5+IBIhp + iM6JM4mZif6KZIrKizCLlov8jGOMyo0xjZiN/45mjs6PNo+ekAaQbpDWkT+RqJIRknqS45NNk7aUIJSK + lPSVX5XJljSWn5cKl3WX4JhMmLiZJJmQmfyaaJrVm0Kbr5wcnImc951kndKeQJ6unx2fi5/6oGmg2KFH + obaiJqKWowajdqPmpFakx6U4pammGqaLpv2nbqfgqFKoxKk3qamqHKqPqwKrdavprFys0K1ErbiuLa6h + rxavi7AAsHWw6rFgsdayS7LCszizrrQltJy1E7WKtgG2ebbwt2i34LhZuNG5SrnCuju6tbsuu6e8Ibyb + vRW9j74KvoS+/796v/XAcMDswWfB48JfwtvDWMPUxFHEzsVLxcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2 + y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 + 2vvbgNwF3IrdEN2W3hzeot8p36/gNuC94UThzOJT4tvjY+Pr5HPk/OWE5g3mlucf56noMui86Ubp0Opb + 6uXrcOv77IbtEe2c7ijutO9A78zwWPDl8XLx//KM8xnzp/Q09ML1UPXe9m32+/eK+Bn4qPk4+cf6V/rn + +3f8B/yY/Sn9uv5L/tz/bf///9sAQwABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAgICAgICAgICAgIDAwMDAwMDAwMD/9sAQwEBAQEBAQEBAQEBAgIBAgIDAwMDAwMDAwMDAwMD + AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMD/8IAEQgCQANgAwERAAIRAQMRAf/EAB4A + AAIDAQEBAQEBAAAAAAAAAAUGAgMEAQAHCQgK/8QAJxAAAgMBAQACAgMBAQEBAQEAAwQBAgUIBhIVABMR + IxgHCRQWGQr/xAAeAQACAgMBAQEBAAAAAAAAAAAEBQIDAAcIAQkGCv/EACkRAAMBAQEAAwADAQEBAQAB + BQMEBQIBBhITFAARFRYkBwghIiMXJTL/xAAzEgADAAICAQMEAwEBAQABAQkBAgMSBBETBSEiBgAUBwgx + MiMWQhUzQRdSQyQ0RCUYCf/aAAwDAQACEAMQAAAA/AThn8x7KUstc4eWq9o7Ov6Nt90Z7KUstc4eWq9o + 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 + ltMttPLuhqpCZNvI+e313dTG9I6wXK1hMUtpltp5d0NVITJt5Hz2+u7qY3pHWC5WsJiltMttPLuhqpCZ + NvI+e313dTG9I6wXK1hMUtpltp5d0NVITJt5Hz2+u7qY3pHWC5WsJiltMttPLuhqpCZNvI+e313dTG9I + 6wXK1hMUtpltp5d0NVITJt5Hz2+u7qY3pHWC5WsJiltMttPLuhqpCZNvI+e313dTG9I6wXK1hMUtpltp + 5d0NVITJt5Hz2+u7qY3pHWC5WsJiltMttPLuhqpCZNvI+e313dTG9I6wXK1hMUtpltp5d0NVITJt5Hz2 + +u7qY3pHWC5WsJiltMttPLuhqpCZNvI+e313dTG9I6wXK1hMUtpltp5d0NVITJt5Hz2+u7qY3pHWC5Ws + JiltMttPLuhqpCZNvI+e313dTG9I6wXK1hMUtpltp5d0NVITJt5Hz2+u7qY3pHWC5WsJiltMttPLuhqp + CZNvI+e313dTG9I6wXK1hMUtpltp5d0NVITJt5Hz2+u7qY3pHWC5WsJiltMttPLuhqpCZNvI+e313dTG + 9I6wXK1hMUtpltp5d0NVITJt7XoPz40/rGK6ATZpfOr5wvP3kA8DAOCldeg/PjT+sYroBNml86vnC8/e + QDwMA4KV16D8+NP6xiugE2aXzq+cLz95APAwDgpXXoPz40/rGK6ATZpfOr5wvP3kA8DAOCldeg/PjT+s + YroBNml86vnC8/eQDwMA4KV16D8+NP6xiugE2aXzq+cLz95APAwDgpXXoPz40/rGK6ATZpfOr5wvP3kA + 8DAOCldeg/PjT+sYroBNml86vnC8/eQDwMA4KV16D8+NP6xiugE2aXzq+cLz95APAwDgpXXoPz40/rGK + 6ATZpfOr5wvP3kA8DAOCldeg/PjT+sYroBNml86vnC8/eQDwMA4KV16D8+NP6xiugE2aXzq+cLz95APA + wDgpXXoPz40/rGK6ATZpfOr5wvP3kA8DAOCldeg/PjT+sYroBNml86vnC8/eQDwMA4KV16D8+NP6xiug + E2aXzq+cLz95APAwDgpXXoPz40/rGK6ATZpfOr5wvP3kA8DAOCldeg/PjT+sYroBNml86vnC8/eQDwMA + 4KV16D8+NP6xiugE2aXzq+cLz95APAwDgpVcd0lc/b3MH0uDjFHn3bxaqu6odXTWZuxuLjukrn7e5g+l + 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 + ZUGuuRZSN/8An0lcJpbO2c8TaPnt9d3UxvSOsFytYTFLaZbaeXdDVSEybeR89vru6mN6R1guVrCYpbTL + bTy7oaqQmTbyPnt9d3UxvSOsFytYTFLaZbaeXdDVSEybeR89vru6mN6R1guVrCYpbTLbTy7oaqQmTbyP + nt9d3UxvSOsFytYTFLaZbaeXdDVSEybeR89vru6mN6R1guVrCYpbTLbTy7oaqQmTbyPnt9d3UxvSOsFy + tYTFLaZbaeXdDVSEybeR89vru6mN6R1guVrCYpbTLbTy7oaqQmTbyPnt9d3UxvSOsFytYTFLaZbaeXdD + VSEybeR89vru6mN6R1guVrCYpbTLbTy7oaqQmTbyPnt9d3UxvSOsN5HoStelEb/8+Uzi2qPzmgL19vC+ + rpOr5/2f84Xm/RZCFLaZbaeXdDVSEybeR89vru6mN6R1guVrCYpbTLbTy7oaqQmTbyPnt9d3UxvSOsFy + tYTFLaZbaeXdDVSEybeR89vru6mN6R1guVrCYpbTLbTy7oaqQmTbyPnt9d3UxvSOsFytYTFLaZbaeXdD + VSEybeR89vru6mN6R1guVrCYpbTLbTy7oaqQmTbyPnt9d3UxvSOsFytYTFLaZbaeXdDVSEybe16D8+NP + 6xiugE2aXzq+cLz95APAwDgpXXoPz40/rGK6ATZpfOr5wvP3kA8DAOCldeg/PjT+sYroBNml86vnC8/e + QDwMA4KV16D8+NP6xiugE2aXzq+cLz95APAwDgpXXoPz40/rGK6ATZpfOr5wvP3kA8DAOCldeg/PjT+s + YroBNml86vnC8/eQDwMA4KV16D8+NP6xiugE2aXzq+cLz95APAwDgpXXoPz40/rGK6ATZpfOr5wvP3kA + 8DAOCldeg/PjT+sYroBNml86vnC8/eQDwMA4KV16D8+NP6xiugE2aXzq+cLz95APAwDgpXXoPz40/rGK + 56RU970JKxjY5QO+esP5e52W8tLWWzp12NAJs0vnV84Xn7yAeBgHBSuvQfnxp/WMV0AmzS+dXzhefvIB + 4GAcFK69B+fGn9YxXQCbNL51fOF5+8gHgYBwUrr0H58af1jFdAJs0vnV84Xn7yAeBgHBSuvQfnxp/WMV + 0AmzS+dXzhefvIB4GAcFK69B+fGn9YxXQCbNL51fOF5+8gHgYBwUrr0H58af1jFdAJs0vnV84Xn7yAeB + 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 + CYpbTLbTy7oaqQmTbyPnt9d3UxvSOsFytYTFLaZbaeXdDVSEybeR89vru6mN6R1guVrCYpbTLbTy7oaq + QmTbyPnt9d3UxvSOsFytYTFLaZbaeXdDVSEybeR89vru6mN6R1guVrCYpbTLbTy7oaqQmTbyPnt9d3Ux + vSOsFytYTFLaZbaeXdDVSEybeR89vru6mN6R1guVrCYpbTLbTy7oaqQmTbyPnt9d3UxvSOsFytYTFLaZ + baeXdDVSEybeR89vru6mN6R1guVrCYpbTLbTy7oaqQmTbyPnt9d3UxvSOsFytYTFLaZbaeXdDVSEybeR + 89vru6mN6R1guVrCYpbTLbTy7oaqQmTbyPnt9d3UxvSOsFytYTFLaZbaeXdDVSEybeR89vru6mN6R1gu + VrCYpbTLbTy7oaqQmTbyPnt9d3UxvSOsFytYTFLaZbaeXdDVSEybeR89vru6mN6R1guVrCYpbTLbTy7o + aqQmTbyPnt9d3UxvSOsFytYTFLaZbaeXdDVSEybeR89vru6mN6R1guVrCYpbTLbTy7oaqQmTbyPnt9d3 + UxvSOsFytYTFLaZbaeXdDVSEybe16D8+NP6xiugE2aXzq+cLz95APAwDgpXXoPz40/rGK6ATZpfOr5wv + P3kA8DAOCldeg/PjT+sYroBNml86vnC8/eQDwMA4KV16D8+NP6xiugE2aXzq+cLz95APAwDgpXXoPz40 + /rGK6ATZpfOr5wvP3kA8DAOCldeg/PjT+sYroBNml86vnC8/eQDwMA4KV16D8+NP6xiugE2aXzq+cLz9 + 5APAwDgpXXoPz40/rGK6ATZpfOr5wvP3kA8DAOCldeg/PjT+sYroBNml86vnC8/eQDwMA4KV16D8+NP6 + xiugE2aXzq+cLz95APAwDgpXXoPz40/rGK6ATZpfOr5wvP3kA8DAOCldeg/PjT+sYroBNml86vnC8/eQ + DwMA4KV16D8+NP6xiugE2aXzq+cLz95APAwDgpXXoPz40/rGK6ATZpfOr5wvP3kA8DAOCldeg/PjT+sY + roBNml86vnC8/eQDwMA4KV16D8+NP6xiugE2aXzq+cLz95APAwDgpXXoPz40/rGK6ATZpfOr5wvP3kA8 + DAOCldeg/PjT+sYroBNml86vnC8/eQDwMA4KVXHdJXP29zB9Lg4xR5928WqruqHV01mbsbi47pK5+3uY + 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 + nWE16T6tNzavKEatZBvvF1sFD9GzZKfJGC/z/9k= + + + + 38 + + + + AAABAAYAgIAAAAEAIAAoCAEAZgAAAEBAAAABACAAKEIAAI4IAQAwMAAAAQAgAKglAAC2SgEAICAAAAEA + IACoEAAAXnABABgYAAABACAAiAkAAAaBAQAQEAAAAQAgAGgEAACOigEAKAAAAIAAAAAAAQAAAQAgAAAA + AAAACAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEA//8BAAD/AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af///wH///8B////AX// + /wJ///8Cf///An///wJ///8Cf///An///wKp//8Dqf//A6n//wN///8Cf///An///wJ///8Cf///An// + /wJ///8C////Af///wH///8B////AQAA/wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /wH///8B////AX///wJ///8Cf///Aqn//wOp//8Dqf//A77//wS+//8Evv//BL7//wS+//8Evv//BL7/ + /wS+//8Evv//BL7//wS+//8Evv//BL7//wS+//8Evv//BKn//wOp//8Dqf//A3///wJ///8Cf///Av// + /wH///8B////AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////Af///wH///8Bf///An///wKp//8Dqf//A77//wS+//8EmP//BZj/ + /wWp//8Gqf//Bqn//wap//8Gtf//B7X//we1//8Htf//B7X//we1//8Htf//B7X//we1//8Htf//B6n/ + /wap//8Gqf//Bpj//wWY//8Fvv//BL7//wSp//8Dqf//A3///wJ///8C////Af///wEA//8BAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Af///wF///8Cf///Aqn/ + /wO+//8Evv//BJj//wWY//8Fqf//BrX//we1//8Hvv//CL7//wip//8Jqf//Can//wmy//8Ksv//CrL/ + /wqy//8Ksv//CrL//wqy//8Ksv//CrL//wqp//8Jqf//Can//wm+//8Ivv//CLX//we1//8Hqf//Bqn/ + /waY//8Fvv//BL7//wSp//8Df///An///wL///8B////AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD///8B////AX///wJ///8Cqf//A77//wS+//8EmP//Ban//wa1//8Htf//B77//wip//8Jqf//CbL/ + /wq4//8Lqer/DKnq/wyp6v8MhrPSET9fcigrR19AJTpRVyU/VlghNkxqHTNGcB00SXgdMkl4HTVIbSY9 + UWMlPVFXKUNZTy9IXjtPb38goejoC7L//wqp//8Jvv//CLX//we1//8Hqf//Bpj//wW+//8Evv//BKn/ + /wN///8Cf///Av///wEA//8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8B////AX///wJ///8Cqf//A77//wSY//8Fqf//BrX/ + /we1//8Hvv//CKn//wmy//8KuP//C6nq/wyw6/8Nqd3uDzlZbzAcNElhFys/jBctQ6EVLEK9EyY7whMk + OMoTJjvLFCY9yxUoPskVKUDIFCtAzBYrQssWKj/KFytAyRksRMcZK0TEGSxAxR0xSLwdMkizHDBDnSA0 + SXwrRVpMQWV0I6n//wmp//8Jvv//CLX//wep//8GmP//Bb7//wSp//8Df///An///wL///8BAP//AQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AX// + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8Bf///Aqn//wO+//8EmP//BbX/ + /we+//8Isv//Cqnq/wyw6/8Nqe7/D6nj8RIbOE5aDyU+rwogNswLITnSDCI62wogN+MLHzbnCx836gse + NuwMHzbuDCE67gwhOPAMITnxDCE48g0jPPIMITnzDCI88wofOPQKHzf1CR019QkdNvUJHjj0CB019ggb + M/YIGS73CR449AkeNvQOIzz0CR429QwiOfMOJDzzDiM78w4iOvMXLkXxEic/8BQqQe8RIjjwEyc97RQo + PusVKT3pFSk/5hktQ+EXKT3fGi1D1hksQMwfMkm+HzFEnzdOYDe+//8Itf//B5j//wW+//8Eqf//A3// + /wL///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD///8B////AX///wKp//8Dvv//BKn//wa1//8Hqf//Cbj//wuw6/8Nqe7/D7Pw/xE6XHU0Eig/mxox + SMYNJT7QDiM73QwhN+QMIDfoDiM96gwfN+4NIjzvDiQ+7w4iOfEOIjrzDiI68w0gN/QOIz30DiE59Q0i + O/YPIz72DSI79w0jPvYMITr3CyA59wwiPPcKHjP4Cx83+AsgOfcKHzj3FCtC9ggdNfcJHTX2CR439goe + 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 + W/0hO1r9Ij5b/iE8Wf4nQWD+Iz5c/iQ/Xf4hPFf+IjxZ/iM+W/4iOlf/JD5a/zFKZP8jPl3/ITtX/yM/ + Xf8fOFP/ITxY/yI8V/8mP1z/HzhU/yA7WP8gO1b/HzpW/xw2Uf8cN1P/GjRP/xozTv8cM07/Fi5J/hcx + TP4WLkv+FC9K/hMrRv4TK0X+EypF/hInQ/0PJkD9DCA3/QwiPPwLIDn8CBw1+wgdNfoKHzX5DCE5+A0h + OfcRJT32Eyc99BMkOvQqPlTxGCxE7R8zSugbL0TlHC9D3R4vQ88jNEm6MkZbS77//wip//8Gvv//BKn/ + /wP///8BAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wF///8Cvv//BJj/ + /wW+//8Isv//CrDr/w2u7/8QrfL/E7D0/xctTGJqGzVRxhkxTNoZMErmHzpX6RoyTfAaM07zGzNN9R42 + UvcmQWL5K0uN/iJAb/0fOlf8GjBH/BswSv0bLkP+HjJM/SI9WP4mQF7+J0Nk/idCYP4lQ2H+J0Jd/iI7 + WP8mQWH/JkFh/yRAXf8tSmj/J0Ni/yRAXv8oRGP/L0po/yM9XP8pRGL/JD9d/yI7WP8jPVz/IDtZ/yQ/ + Xf8gOVb/HTZS/x43Vf8cNlL/HDZP/yM9V/8bNE//GjVR/xcxTP8YMU3+FS1I/hkyTf4ULUj+ESc//hEo + Qv4QJUD9DiQ8/QwhOf0LIjv8CiA4+wgdNfoKHzj5DCA2+Q4jPPcOITf3Eic89RQpQfMTJTjyEyQ38Bgs + QOobLkLkJDhN2CI1S8cgMUa4NkxdPL7//wip//8Gvv//BH///wL///8BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8Bf///Aqn//wOY//8Ftf//B7L//wqp6v8Mqe7/D63y/xOw9P8XPGJ2Sxw1 + UMMZMUzaGTFJ5xs0T+seOljuGzVQ8x43U/UgOlj3ITxZ+CE6V/ooRWb8OV+e/yRBe/8eNFf+GixD/hUn + O/4YJzz+Gy5E/iM9WP4mQV/+KkZl/ypIav8qRmj/Lklr/y1La/8nQ2H/JkFf/y9Jaf8mQmD/J0Ji/y9J + Z/8nQ2H/JkJh/y1GYv8qRWP/JUFg/yM+XP8kP13/Mktp/x83Uv8fOFT/LEZk/x87Wf8dNlP/ITpX/xsz + Tv8aNVD/HTdU/xgwTP8YMEv/Fy9M/hQtRv4TK0X+EyxG/hInP/4PJT79DyM8/QwgN/0NIzz8CiA5+xIn + QPoJHjX5CyA4+A8iO/cQJDz2EiU69hQpQfMUKT7xGS1F7RouRegtQVbkHDBE2ig7UsIdLT6xTnqDHbX/ + /weY//8Fvv//BH///wL///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AX///wKp//8DmP//BbX/ + /wep//8Jqer/DKnu/w+38f8SrfP/FmydryocNk+2ITtY1B43UuEeOFTpHjhU7hw0UfQfOFP1ITtY9yI9 + W/gkP1v6IDlT/CRAXvwpRmv9RnCu/ylIif8YMFT/FiU5/hIdLP8VJDb+HzRJ/yQ9WP8sSmv/LUpt/y1K + a/8sSmv/LEtr/y1Jav8rR2f/Lkxu/zJOb/8pQ2P/R2B+/zJOb/8xS2n/J0Jg/ydDY/8nQWD/JD5b/yU/ + Xf8kPl3/Iz5e/yI6V/8yS2n/JUBe/yA6WP8fOVf/HztY/yM9Wf8cNlL/HDdU/xw0T/8XMEr/GTJP/xQs + Rf4VLEb+EidA/hEnQP4QJ0H+DyQ9/QwhOP0MITn8Ch84/AgcNfsJHjX5CyA4+A4gNfgPIzr2Eyg99RQp + QPMUK0HwGCxD7BkuQ+gbMETiKz1U1RssPMgiNkmRiMPDDbX//weY//8Fqf//A3///wIA//8BAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8Bf///Ar7//wSp//8Gvv//CLj//wu17f8Ot/H/ErXz/xWp7PYbJD9Zlxw2 + UdEeO1feHjhU6B85Vu4fOVXyHTZR9iI9WfclQF74J0Jh+idCYfsmQF78JkNh/SdDYP0rR2/+UIW8/y1O + kP8VLFH/ER4u/xIcK/8WJTf/IjRL/yhBYP8vTG//LUtu/y5KbP8tSWr/M1F0/ytHaf8vTG7/N1V5/ytH + af81UXP/LEhq/ylEY/8oQ2H/L0xv/y1Jaf8pRmf/JUBe/yZBYP8lQWD/JD5b/yZAYP8gOlb/MU9x/z9e + gf8tSWn/KUJd/x86WP8cNVH/GjFM/xoyTv8ZNFD/GjJN/xgwS/8TK0P+FCtG/hQuSf4QJT7+DyM8/Q0j + PP0MIDr8CR43/AkdNvsJHjb5CyA4+A4hOfcPIzn3Eyg/9BQpQfITJTnyFypA7RswRuUbL0PgHCxB1SY7 + UbgoOU1pqf//Can//wa+//8Eqf//A////wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AX///wK+//8EmP//Bb7/ + /wiy//8KsOv/DbPw/xGy8v8UrPX/GTdXcWUdN1LKHTZS3h01T+gfOlbtITpY8R42UfUiPFf3JkJh+CZC + YPooQ2L7J0Ng/CZCX/0qR2f9KEJg/ilHZv4vTnv+XpjK/yM9cv8TJkj/Ex4w/xAZKf8ZKj3/IzhT/ylE + Yv8vTnD/NVJz/y1La/81VXn/OFRy/zFQcv8xUHP/N1V5/zBOcP8tSmv/Lktt/ytIaP8uS27/K0hq/ydD + Yf8mQF7/LUps/yI7V/8mQmH/JUFg/yQ+Xv8mP1v/JDtX/y1Jaf89XoL/N1d7/yE7Wf8eNlT/IDlX/x03 + U/8aNFH/GzRQ/xYtR/8TKUL+FCtE/hAlPf4RJz/+ECZA/Q8jPP0OIjv8CR01/AgbMvwLHzf5DSM8+A8i + OvcQJTz2Eyg+9BMmPPMUKD7wIDNK6xsvReUcL0XcIDNHySAzR7c6V2Y0vv//CKn//wa+//8Ef///Av// + /wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP///wF///8Cqf//A5j//wW1//8Hqf//Canq/wyp7v8PrfL/E7T0/xhzrb4sLkplvh44 + UtcuSWbkHzhU7CI8W/EjP130JUBd9yhFZvgpRmb6KENi+ypGZfwqR2X9Lk1u/S9NcP4pRWP+LUlp/jJS + df43Woz/X5bB/y9GeP8VKU//DhYj/xEcK/8bLUL/JT1Y/y9Nb/83WH7/MlF0/0Rjhf8zVHn/NFV6/zVX + fP8zUXb/NFR5/zJRdf9FY4b/LEho/y5Mbv8yUXb/LUts/y5Ncf8rR2f/K0hp/zdTc/8pRWX/JD5b/ydD + ZP8lP13/GzJM/xYsRv8nQmL/R2yS/y9OcP8eOVX/HDZS/yE8WP8cMUv/FzBL/xQrRP8VLUf+EytD/hIp + RP4XL0n+ESdB/RAlQP0PJD/8DiM9/AoeN/sLITr5DCE4+A4jPPcRJj72Eyc/9BQnPfIYK0PuGCs/6hww + RuIdMETXIjVLwic6T5KU1eoMtf//B5j//wWp//8Df///AgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AX///wK+//8Eqf//Bqn/ + /wm4//8Lqe7/D7fx/xKt8/8Wsvb/GytMZIsgPFbSHzlT4SI9W+kiPVnvJD9c8ydDY/UnQ2H4Kkhn+SpF + ZPsmQFz8LEts/TJRcP0vTHD+MlBw/i5Mbf4yUnT/MlN2/zRSdv9IdZ7/V4/D/xUqUP8VKkz/DxYi/xcm + N/8gNUz/J0Bb/z9gg/81VXr/Nlh9/zlcgv84W4L/Nld8/zdZf/9EZYj/PV1//zVWef8xUXT/M1N4/zxb + gP8wTW7/QV5//yxJa/8uS2z/RF9+/0digP8oQ2L/JkFf/ydCYf8kP13/JD9e/xw1Uv8VK0T/PV+C/z5f + g/8eOFX/HjdV/xs0UP8XLUf/GDJN/xYtR/8ULUf/EypC/hgvR/4RJ0L+DiI6/RIlPv0NITv8CyE6/BAl + PvsLIDf5DSI6+AwfNPgRJDv2EyY99BQpQPEXK0LtGS1D6BotQeAfMUfRITZLuT1VZ1ap//8Jqf//Br7/ + /wR///8C////AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP///wF///8Cqf//A5j//wW+//8Isv//CrDr/w2z8P8RtfP/FbD1/xpNdopLIjtYyx85 + Ut0iPlvnJT9c7iVBYPIoRWT1KUZm9yQ9WvosSmr7LUtr/C5Nbv0uS239L0xu/jJSdP4yUnT+MU9v/zRW + ef82WH3/N1h9/zRUeP95stn/N1qY/x4zVf8VJUH/EBkm/xoqP/8nP1r/N1h9/zpchP9DZYv/T3CW/z1f + h/84WYD/P2CH/zJQc/81VXn/MlBz/zBPb/82V33/MU9x/y5LbP8yUHX/MU9x/zVVeP84V3v/L0xv/ytH + af8sSmz/Kkdo/ylFZv8pQ2P/JUBg/yM+Xf8TKED/ME1t/0BhhP8eOFX/HzhW/xoyTP8bNVL/GDFN/xcv + Sv8VLUn/GDBJ/hMpQv4QJj/+ECU9/Q8kQP0MITr8CB01/AkeNvoKHzb5DSE4+BAkO/YSJjv1Eyc+8xUr + Qu8YK0LsGCtA5xwvRNofMUbKIzdNqVR6jRu+//8ImP//Ban//wN///8CAP//AQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AX///wK+//8Etf//B6n/ + /wmp6v8Mqe7/D63y/xO09P8Yqe73HiZAXKwiPVjTITpW5CVAXeshOVTyKEZm8yhEY/cpRWX4KUJh+y9M + bfwwTW/8L01u/S5Lav4xT3D+NVZ5/jFSc/80VXj/NVV6/zNSdf87XID/O16F/1iJsf9glbj/HDRi/xYs + VP8QGij/FiM0/yU6VP8rRWP/OluA/zlbf/8+YIj/OVuB/zlagP89YIn/NFN2/zZXev81VHj/OFqA/z1h + iP8zVHX/MFBy/zpaff8/YIT/L05x/zFPcv8xUXX/LUlp/ydBXf8qRmf/KENj/zFNbv8qR2j/JT9e/yM9 + W/8TKED/M1Jz/zxegv8fOFX/HDRQ/yQ9W/8eOFX/GTBM/x01Uv8ULUf/Eyc+/hMqRf4RKEP+DyQ9/Q0h + O/0LIDn8CiA4+wkfN/oLIDj4DiM79xAlPPYSJjz0Eyc+8hUpP+8aLkXoGi1C4h8yRtEfM0bBJjpMcKn/ + /wm1//8Hvv//BKn//wP///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP///wF///8Cqf//A5j//wW+//8Isv//CrXt/w638f8SrfP/FrL2/xtQepBPKUdmxx42 + T+MkP1zqLEpq7SZDYvMvTG31LUps+C1IaPowTG/7MlFz/DBNbf0xT3H+MlF0/jJTdv40VXj/N1l+/zla + fP88XoX/O16D/zxfhv87X4b/Rm6U/4K32f9JbaX/ECFA/xgqSf8THCr/HzBH/yxFY/87XoT/P2OM/0Rn + kf9Ud5//S22U/z1iiv85WoD/O1+F/zxhh/88YIf/P2OL/zhbgP8/Yon/OFuA/zldg/85XYH/NFV5/zNU + eP80VXn/MVF1/yxJaf8sSWn/OFR0/yxLbv8nQmL/JkBg/zBJZv8TKED/PV2B/zJSdP8hO1r/HjlX/x03 + U/8ZMUz/Fy5J/xctSP8VLEb/FC1H/hIoQv4RJ0L+DyM9/QwhOf0LIDn8CB01+wofOPoMIDX5DSA1+BEm + PfUSJDr0Eyc88RYpPu4XKj7oHDFH2x8wRMokNUuuT3d/IL7//wip//8Gvv//BH///wIA//8BAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Aan//wO+//8Etf//B6n/ + /wmp6v8Mru//ELLy/xSs9f8Zsvf/Hi5KZqQkP1zUJUFe5CZAXe0qRmbwM1Fx9DJRcvcwUHL5MU9x+zZW + evw0VXf9Pl+C/jNTdv41Vnr+OV2E/jlcgf82VXj/O12E/z5hiP87XIH/RmuS/z5hif9FbJX/dKfN/1yP + tv8vRGz/HTRb/xEZJv8ZJzv/KT9b/ztcgf9AY4v/P2KK/z1gh/9Ga5X/QmiR/zxfhP88YYf/PGCH/0Rr + lv8/ZY7/PmSL/z1iif85Wn7/OFqA/0lskf9ScpP/OV2C/zldgf9DZIf/L0xu/zNTd/9LZ4f/Lktv/ytJ + av8pRWb/K0hq/x82Uv8TJ0D/TnSc/ydBYP8dNVH/HzpX/xw1Uf8bNVH/GDBL/x02Uf8VLUj/FCxH/hMq + RP4RKEL+ECVA/QwgOvwMIjz8Ch43+wshOPkNIDb5DyI69hEjOvUTJz7zEyY98BksQukaLUPiHjFG1h8z + RsEoOkxxqf//CbX//we+//8Eqf//A////wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP///wF///8Cqf//A5j//wW+//8IuP//C7Xt/w638f8SrfP/FrL2/xtMcoVQKURhyiVA + Xt8nRWTpO1Z17ytKafIuTG32MVB0+TBPcfs1VXf8QF+D/TZYff1GZ4z+OFl9/jtehv47XoX/PF+F/zpc + gv9JbJP/PmCI/0Vrlf9CaZL/Q2mS/0ZqlP9cibH/dabD/yZCfP8QID3/FCM3/xcjM/8nO1T/Oll9/0Vs + lv9JcZ7/SXGd/0dvmv9EapT/T3We/0Fnj/9Fbpj/Q2mT/0Rrlf88X4X/NlZ4/ztehP89ZIv/PmOM/0Bk + i/85XYT/OFyB/05tjv8zVXj/NFV6/zJRdv9BX4H/LEho/zJRdP8tS27/IzxZ/yE6V/8YL0j/S3GY/x84 + VP8gOlj/JEBd/x83U/8ZMUz/HzpV/xYvSv8TKkP/GDBL/hQrRP4RJ0P9EylF/Q0iPPwJHjf7CB81+gse + NPkOITj4DyE39hMnPfQUKD3xFig97hovROYbLUDeHS9DzCM3S6xljpgZvv//CKn//wa+//8Ef///AgAA + AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AX///wK+//8Etf//B6n/ + /wmp6v8Mru//ELLy/xSs9f8Zsvf/Hi9MZ5szUW/RK0ho4ilEY+wwTnHxK0hm9jFQc/gzUnL6MlBz+zha + f/w5XIH9NVd6/jlZfP46WoD+Q2eR/0Npj/89YIf/UnSb/z1fhv9AZIv/SG6Y/0Rrk/9GbJb/UHWg/0pw + nP+IwOP/Smud/yA2Wf8dM1b/FB8u/yc6U/86V3r/SG6a/0Vrl/9EaJL/SnGf/0tzoP9JcJ3/SG+a/2WH + rf9ZfKL/R3Cb/z9ki/9DapX/S3CZ/z5iiv89YIj/QGeQ/zhZfv8xT2//Ol6F/1JylP9AYIX/MlN2/zBP + cv8rSGj/MVF0/ypFZf82UnP/J0Jj/xkvSf8yT3D/NlV2/yM+Xv8iPV3/HDJN/x04Vf8cNE//GDFN/xQs + Rv8VMEr+Eyc//hEnQP4RJ0L9DSI7/Q0jPPwIHDT7CRoy+w0iOvgOIjn3Eic/9BMmPPMUKT7vGCxC6Rgr + P+QeMUbRIzZMuSxBV2Cp//8Jtf//B77//wSp//8D////AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAB///8Cqf//A5j//wW+//8Isv//CrXt/w638f8SrfP/FrL2/xt/ssEyKENgyCpI + Z9osSmroLUpq7y9PcPMwTm73MU9y+TNQcvs1VHj8Ol2D/Tlcgf01VXn+QmWM/j1fh/8/Y4v/PV+F/0Bl + jf9EaZP/QWaN/0Vrlv9HbZj/S3Og/0hvm/9OdKD/SnGe/22cu/9Sh7v/IDVc/yA3Xv8XJDX/IjNK/y5G + ZP9CZIz/U32s/2OHsf9DZo7/TXal/0Zqk/9MdaH/XYGr/0lvnP9FapT/XYCo/zxegv9AZIv/QGSM/0Fn + j/9EapP/MU5u/zBPbv88YIf/Nld8/zhdgv8xUnT/M1N0/zJSdv8yUXP/LElq/yxKbf8oRGT/ITlW/xIm + Pf9PdZ3/Izxa/yE9XP8gOVj/HjdT/xs0UP8ZMk3/Fy9J/xYuSv8UK0X+Fi5K/g8lPv4PIzv9DSI9/Awi + OfwJHTb7DCI6+Q4jPPcPIjf2EiU69BMkOPIXK0LrFig85xwyR9kfMUfFIzZJnqnq6gy+//8ImP//Ban/ + /wN///8CAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AX///wK+//8Eqf//Bqn/ + /wmp6v8Mqe7/D7Ly/xS09P8Ysvf/HkJlgmsqRmTQLEtr4ShEYe0uS2zxLkxs9TJRcvg0VHb6Nld7+0Fj + if07XYP9QGWO/jxfhf48X4X+PF2E/zxehf9DZo//RWyW/010n/9Ibpr/SXCd/0xzov9Od6T/UHmo/053 + pP9McqD/ea7V/2eaxP8ZLVP/GC5T/x0sPv8dLUD/Mk1t/0txnf9OeKj/Xoe1/0Jmjv9XgrH/SnCc/1J9 + rf9GapX/Pl+F/0x0ov9SeaX/OFd6/z1fhP9Kcp//THOb/0NqlP87XoP/N1h8/0Bmjv80U3X/PGGH/zRU + d/8wTm//OFp//zJUeP8uTW7/NFFz/yxLbP8qR2b/GzJM/ytHZf8xTm//KkNg/yI9XP8fOVf/HjZU/xw2 + U/8aM07/HDVR/xYtRv8dNU/+Fy9J/hAnQ/0OIjz9DSM9/AkeN/sQJj76Cx80+Q4hOPcRJj70EyU88i1B + Vu8WKD3qHDBG3x4xRs0fMkW6PFtvMqn//wmp//8Gvv//BH///wL///8BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8Bqf//A5j//wW1//8Hsv//CrDr/w2z8P8RrfP/FrL2/xux9/8hMlJyqSxI + Z9guTGzmLkxu7S9Ob/MyUHH3NVV5+TdWevs6XIL8PWCH/T5iiv4/ZY3+P2OM/kJokf9Fapb/Q2iR/0Nn + kP9KcZz/RmyX/0dtmP9TfKr/T3el/053pP9Tfq7/UHim/0hvmv96rtj/XJXE/zRKd/8YLlf/Hi1B/xwr + Pv8yTW3/SG2Y/1iDtf9VgLP/SXCc/2CKuP9Peaj/SnGd/052pf9GbZf/Tnek/011ov9Ibpr/XYGo/0pz + of9Ue6X/S3CZ/0Fnjv9CZ5H/PWGI/zdYfP9DapL/N1l+/zNSdf80Vnr/NVd7/zBQdP8yUnb/Lkxv/ylF + ZP8qR2n/Eyg//0hrkv8kP1//JEBg/yI8W/8oQl//HTVR/xw2VP8gOlb/GDJO/xMrQ/4UK0b+ESZB/g8k + Pv0OIz39DCI8+wofN/oJHTP6DSI79w8kO/USJjzzEyU68RYrQesZLUTjHTBF1iE1TL4uRltssv//CrX/ + /weY//8Fqf//A////wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AX///wK+//8EmP//Bb7/ + /wi4//8Lqe7/D7fx/xK09P8Yr/b/HWKMo0MsSWfKLUpq3C9NbuoxUHHwMlFx9TRVefg6XYL6OFp/+0Nm + j/xIbJL9P2SN/kFmjv5FbJb/SHCd/0xyn/9CZo7/RmyW/011n/9Lc6H/TXWi/1J8rf9Qeqr/S3Ke/1aA + sf9Reqn/UXuq/22exf9Me6T/IDVd/xYpTf8eLUL/Hy5E/zVQcf9GaZP/d5rD/1iDt/9NdKL/Y46//0pw + m/9KcJ3/VICy/0dslv9GbJX/ZYu3/1B8rf9Pean/T3el/1l/qP9GbJj/QmeP/0BkjP9CaJL/Q2qT/1t9 + of86XYP/N1h8/ztfhf87XID/NVd7/z1ghv8yU3f/L05v/zxdg/8aMk3/RGiN/ytHZv8iPVz/IDlW/yU/ + X/8cNFD/IDlX/yU+W/8ZMk3/FzBM/yE5VP4SKkX+ESU+/hAlQP0NIz78CyI7+wgeNfoLIDf4DiA39xMp + QfMSJDrxFitD7BcqQOcbL0bcHC5DxxosPLF/vs8Qvv//CKn//wa+//8Ef///AgAAAAEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8Bf///Ar7//wSp//8Gqf//Canq/wyu7/8QsvL/FLD1/xqu9/8gRGmAbzNR + cs4tSW/qIDlc8zZYe/E1VHf2PWGG+TtcgvtIa5L8QmaP/UJmj/5Fa5b+PmGH/khwmv9JcJ3/SXCc/0ty + nf9Kb5r/THOf/1B6q/9NdaP/TXaj/1B6qP9Tfq//Unys/1WAsv9Tfq7/dqrW/2WTw/8aMV//Mklz/x8w + Rf8iM0f/NU9w/0dqk/9ahrr/V4O1/0xyn/9ok8T/V4O1/093pP9Yhbr/S3Ke/0ZqlP9Tf7D/SW+a/0dt + mP9TfKr/THWj/0lwnP9CZYz/T3aj/0Npkv9CZ4//SnCY/0Npkv9BaJH/O16F/zlaf/9AZIr/TXOa/1R7 + pf9FaY//LUpo/w0cMP8bMUv/Olp+/yM+XP8gOlf/Iz5d/yA5Vv8iPFr/GzRR/xozTv8ZM0//FS1I/hQs + R/4RJj/+EytH/Q0hOv0LIDf7CR00+gkcMvoMITn2DyM69RIlOvMUKkHuFSo+6RouQ+AdMkfNHy9Euj9X + cDSp//8Jtf//B77//wR///8C////AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wGp//8DmP//BbX/ + /wey//8KsOv/DbPw/xGt8/8Wtfb/HGeOv10dNFXJN1d50zJRgPATJ0n7PF6E8zpegvc4Wn/5OVqA+0Nn + kfxBZo79RWyX/klumP5CZov/SG6a/0pxnv9Xfqr/UXqn/0hvmv9Jb5v/Unys/1J9rf9OeKX/WIS4/1R+ + rf9Uf6//YY7A/1Z/rf9vqtX/PF6U/xYqUf8mQG3/JDVL/yk6T/85VXf/S3Cb/3Cbzf9bibz/YY/E/2yX + yv9cir7/UHmm/1iFuP9fi73/Woi8/2CKuf9Ufq7/Unyt/1F8q/9Od6b/UHqq/0x0ov9NdqP/TXWi/zpZ + ff9AZIv/Q2qT/0Fmjv88Yon/OVyD/xsyTf8cNE7/Fy1G/xctR/8GEyT/AAIF/yg/Wv9GaY7/KENj/yM9 + Wv8rRWL/KEFf/x85Vv8cNE//GzVT/xgxTP8YMk7/FS1I/hQtSP4UK0f9ECZA/QwfN/wJHjf7CB4z+gsg + OPcQIjr1ECQ58xMmPfAVKUDrGS5G4xotQdgcLUDBLkZcXbL//wq1//8HmP//Ban//wP///8BAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAf///Aqn//wOY//8Fvv//CLj//wup7v8PrfL/E7T0/xiy9/8ecJzRdREj + SvwpRWbjOVmE8Q4fRP8wUHP2Nld/+RImSv48XYL8PV+E/UVslf5Ea5X+RmyX/kZtlv9Qd6T/T3io/1N+ + rP9Fa5T/UHqp/0lumf9Wg7X/W4e8/1mEtv9jjb3/VX6u/12Mv/9di73/aJPA/1eIsf9BX5z/ITlm/ydA + cP8hMUb/KTxU/zlVd/9Ufav/YZHJ/2CQxf9rmdD/WYa5/2CPxf9ah7r/a5bJ/26Zyv9gjsT/a5XH/1B5 + p/9WgrT/UXqo/1eCtf9MdKL/Tnem/1F7rP8/YIb/RGiT/0Nokf9BZo//PF6D/0Vslf8/Zo7/FixF/0Fm + j/9FZ4z/N1p+/yY/XP8FEB3/CBUm/050nf81VXj/JD9d/ytGZP8oQ2L/ITpW/x02Uf8eOVb/GjNO/x01 + Uv8VLEb+FS5J/hUrRP4QJD79DiM+/AsgOPsJHjb6CyE7+BMmP/YQJDr0ESQ58RQpQOwZK0TmGi5D2h4x + RsUkN0uJqer/DL7//wip//8Gqf//A3///wIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wF///8Cvv//BKn/ + /wap//8Jqer/DK7v/xCy8v8UrPX/Ga73/yBqja9RPFmR9A8jRfo4VHzvHDJZ/hoyVPwmQmj8FSlN/kZs + l/xFapL9R26a/kBiif5Ga5b/THej/0tynv9NdqT/UHuq/012ov9ZhbX/Unur/2eSw/9fjMH/XYzA/16M + wP9llMn/Xo3A/2SUyf9rodH/VIq//x0zZP8XLFT/KkNq/yEyR/8rQFn/NU5t/1mEtv9pmNH/aZjQ/2+e + 1f9biLv/YZDI/3mi1P9hkMn/cZ3Q/2mWy/9Reqf/Woi8/3CZyf9Qeaf/YIu7/0pumP9jjLr/SG+b/0hv + mv9HbZn/Pl+G/0Rpkv9CZ5D/Rm2X/z5ljf8eNlH/P2WL/0Vnjv9EZor/MVJ1/ytGY/8UKUP/DyRB/0xy + mv8tSmv/Lkdk/yM+X/8kP1//JD5d/x45V/8aNE//GjVR/xw0Uf8iOlT+FCtF/hMrR/0PJD79DCE7/Aoh + OfoJIDf5CyA49w8hOfUQIzjzEyg+7hUrQecYKz7eJjxQyR4xQ7NymLIUqf//Can//wa+//8Ef///AgAA + /wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////AX///wK+//8Etf//B6n//wmw6/8Ns/D/Ea3z/xay9v8bs/j/IlJ6 + l2g9XojfKUFy/RMoS/swSnf8Dh5B/xoxVv4XLVD+Q2iQ/UZrlf1Ib5z+TXak/kx2ov9Ufav/T3mn/0t0 + oP9Re6r/VYGx/1aCs/9ZhLb/U3uq/1aAsP9eirr/Xou+/1yHuv9nlsr/bp/V/16Ux/9AYJr/Izxr/yQ/ + dv8rQF3/HixA/zNMav9IapP/cp7T/3mn2/94p93/YI/E/2qc1v92pNn/Z5fR/2WWz/93o9X/Unqp/16N + w/9lksf/WIO2/1N9rv9ciLr/Woa7/0xzn/9IbZf/X4i2/2CHsv9NdaP/S3Oh/0dtmf89YIX/O12F/yZA + Xf9Jbpb/P2SM/zhcgv8tSWn/NFd9/zFQc/8bMkz/GzJN/1N6o/8mQWD/Iz5d/yM9W/8hOln/HzpY/xs1 + Uf8bNVD/HzlV/xUtRv4SJj3+EytG/hAmPv0OJD78DCM7+gkfN/kKHzX4DyI59Q8kO/MTJTzvEyY86xgt + QuA0SFvPGy1BvD1XbDGy//8Ktf//B77//wR///8C////AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8Bqf//A5j/ + /wW1//8Hsv//CrXt/w638f8SsPT/F6/2/x2PxOY+JkBjtylEZN88W4vzIDZj/x00XP4UKFD/EyVM/xgs + Tf48XoP9SW+b/Utynf5OeKb+UHim/1R9q/9QeaX/Un2u/1eEtv9ah7r/YIu8/1N8qv9XgrH/VYCv/3Cf + 1P9ahrj/apnP/2WUyv9KdaX/NleK/yE8dv8hOWj/NE+D/yc6Uf8oO1P/Plt+/1yGtv95qN//baDb/2ST + y/9toNz/Z5fP/3Sj2v9Zg7T/YpLI/1+Owv9bh7r/YI/E/16Mwf9+ptT/V4O0/1eEtv9VgLH/Sm+Z/1uG + tv9ahrf/SnKf/0xzoP9DZY7/UHim/1V/rv8+YYj/ME1t/0Jok/8+Y4r/QGSK/zVWev87XYD/Lkxu/y1K + bP8ZL0n/MlBx/zdXev8lQWD/JkJi/yE8Wv8kPV3/HTVQ/xo1T/8ZMk7/Fy5J/hcwSf4TK0f+EypF/RAk + PfwMITj7Ch83+QsiO/gMHzb3DyI68xEkO/AVKkDqFyxD4hsuRNIeMUa8LENWT7L//wq+//8ImP//Ban/ + /wP///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAH///wKp//8DmP//Bb7//wi4//8Lqe7/D63y/xO09P8Ysvf/Hpze + 9C9Ka6TgLUR8/hYsU/wtR3T7Izln/yA2Yf8PIUb/HTRc/zRPbf5FapT+SXCb/k94pf9Se6v/U32s/1F6 + p/9ci7//X47B/1uHuv9gjsT/YpDF/2WUy/9ml8//b57W/1yJu/9omdH/VoC8/052r/8yTIf/JDpl/x81 + bf8wRmT/JzlP/y9EYP9PdJ7/eqPU/4Cv4/9rndX/U3ql/2aWzf9pmtL/c6Pd/2qc1/9kk8v/ZJTL/1qH + uP9un9f/dKLV/2eX0f9fj8T/c53P/1yLv/9SfKr/X4y//051o/9WgbD/WoSx/1F2nv8+YIX/MVBy/ydB + X/86XYL/PmKH/z9kjv87X4b/OFqB/z9ghP8zVHf/ME9y/y9Mbv8TJz//TnWd/yQ+W/8jPlz/JD5d/yE8 + Wv8jP1z/HzpV/xkyTP8cNFH+Fi9L/hQtRv4SJ0L9DyU+/QwhOfsLITr6CBwy+QodM/cPITr0ECY98BQp + QOwYLUbjGi1D1x0xR7smPE1puP//C77//wip//8Gqf//A3///wIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8Bf///Aqn/ + /wOp//8Gvv//CKnq/wyp7v8PsvL/FKz1/xmu9/8gsvL/KEBjhrU6WIXlOFSL+zBKgv8qQnX/Jj5u/xcv + Xf8jN1f+LUdi/j1dgv5PeKf+THOg/1aCtP9firj/XYq7/2aTx/9nlcj/XozB/2eTyP9nmND/a5bJ/2KQ + xP9jksj/YY3B/ztfmP8zVZP/MU6Q/yQ7cP81UI3/K0V3/yU0Sv8vQ1z/QmCC/2KMuf9lk8X/caTc/22d + 1P9mk8f/cKPb/2+h2v9xpN7/ZJHF/2CPwv9omNL/dabf/4204v9woNn/ZJPM/16MwP9jlMz/bJnK/1yK + v/9biLz/SGuR/yxIZ/8nQmL/MlJ3/y5MbP8/YYj/MlF1/0dtlv8+Yon/THGY/0JokP8/Y4v/OV2D/zZZ + fv8xUXT/L01u/yE6WP8vTGv/LElp/ylEY/8qRWT/JD9c/x42U/8cNlL/GjVR/x86Vf8XLkv+Fi9K/hMr + Rv4RKEP9DiQ+/AwiOvoJHjb5Ch439w8jOvQQJj3xGzBH7RMnPOcYKkHaHDFHwCY7UXyp6v8Mqf//Can/ + /wa+//8Ef///AgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wF///8Cvv//BKn//wap//8Jqer/DK7v/xC18/8VsPX/GrH3 + /yGe1eQwPGKFxERqlOMwS375Lkd9/ilBc/8mQ3b/Iz57/yY6U/0pPFT+KkFa/jxcf/5HbZb/WIO0/2CO + wP9gjsP/XIq9/1iEtP9fjsP/ZJPL/2ia0f9fjL//YpDE/2GRz/82WZr/NlWW/yI9eP84VJH/J0SG/y5L + i/8mN03/JDVI/0Fbev9RdJz/Xoe1/4m05P96quD/XIWw/2mXyv90pdz/b6DX/3ur4/9vn9j/aJjO/2SR + x/9vot3/apvW/2aVzf9jksr/cKDW/3Oh1f9mls7/WYW3/0xynv8sSWn/S3Sg/1WAsv9Mcp//Tnio/2OI + sv9CZY3/U3uo/1V6o/9Ea5b/O16E/z5ji/9EZ4z/N1h9/zFRc/81Vnv/L01w/xw0T/9Kao7/NFN2/ylG + Zv8kP17/ITpX/x87Wf8cN1T/GTNO/xguSf4ULUj+EylD/hIoQv0PJD38DCI7+wgfNvkJHjb3CyA29g8k + PPETKEHtEyU66RguRNkaLUDJHTFFmLDr/w2p//8Jqf//Br7//wR///8CAAD/AQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AX// + /wK+//8Etf//B6n//wmw6/8Ns/D/Ea3z/xay9v8bs/j/IoO60Dw/ZYrISG+Z4DhYgfMkQG/8LEqD/y5N + h/8eOG//LUZg/iIzSP4hM0n/MUlj/j9dfv9NcJj/WH+t/1qGtv9cibv/X4zB/2WWz/9nmM//aJnR/2ST + y/9CZ6H/JD54/yQ/fP8vSYD/Iz97/yhHiv8hO3T/IzZT/x4rPP81S2b/UXKW/1+Hsv+awOr/lb3o/2+e + 0f9WeqH/hrPj/2KMuP9ii7j/XYWx/2eVx/9sndP/dafh/2iWy/90puH/W4a3/4215f96qN3/caHY/2iZ + 0/9qmdD/TnSg/093pf9LcJv/Yo7A/1mFt/9ijLv/VH2s/z5eg/9LdaP/RWuW/z5hh/9Fa5P/QmmR/zxh + if86XYL/SWuO/zZWff82Vnn/HzhU/y1Jaf87XH7/Vn6o/01ymf80UXD/IDpX/xw3Uv8ZMUz/Fi5I/hcw + Tv4UK0b+EihB/RkyS/wOJD/7HzRM+QgcMvgJHDH3ECQ88hAmPe4TJTvoITdN3BgqPcseMkeksOv/DbL/ + /wq1//8Hvv//BH///wIA//8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8Bf///Ar7//wS1//8Hsv//CrDr/w238f8SsPT/F6/2 + /x2u8P8jgLLKQz1ggstAZYzgRGyV6zJUmv5Ogb//Plya/xYuY/84Vnf+JzxV/hwrPP8dKz//JThP/zNL + aP87WXz/S22X/05ymv9YgbD/W4a3/16Iuf9Ibaf/K0iL/zZTk/81UY3/LUmF/0Bcm/8kP3r/PFmZ/yAz + Vf8bJzj/Kz1R/0tqi/9gh7D/f7Dj/5zC6f9plcL/bJnI/2OLtf+Gs+T/ZpC8/26bzv9bgan/bpvP/3+v + 5f+GsuX/jLbm/4Kw5P95qeH/b6Le/1N6p/9hj8X/Woe4/2aW0P9AY4z/WYS2/052o/9kj8P/ZI/A/2eQ + v/9MdKH/S3Og/0dtmf9CZY7/SnOf/0Ztl/85XID/P2WM/zRSc/84W3//NVd8/zRUef8jPFr/Ij1Z/xQp + Qv8QIzr/JT9c/1Z9pv8nQmH/HTZR/xszTv8aM1D+GDFN/hUuR/4TKkX9EipD/BMrRfsMIDf6CBwz+Aof + OPUPIzzyECU87xMnPucWLEPcGCxBzBotP7O17f8Osv//CrX//weY//8Fqf//A////wEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /wGp//8DmP//BbX//wey//8Kte3/Drfx/xKw9P8Xr/b/HbLx/yVwoLpPO1x/0UZsleA/ZJDuNlmS/0Bs + m/8lQYD/EyhX/ypJdf4yTmv+JzxU/xklNv8VIDD/Hy5B/yY5UP8sQVz/NU5t/0Bcf/85Vn//LEqK/yhH + i/8jP3v/J0WH/ylHh/8jPXf/KEJ6/yZEhf8iN1//GSQz/y5AVf9PaYX/Wn6j/2+by/+DtOf/dKPT/3ip + 2v99ruL/lb/q/22Yxf+AseX/dKHT/2KLtf9zo9f/dqjf/3+v5P96rOT/hLLl/3ep4v9jkML/aZvU/2qd + 2P9wodv/WoW2/0lwm/9jlM3/YI/F/1uHuv9kkMP/V4S4/1WAs/9eiLf/R22Y/0lwnP9Kc6L/RGmT/0Jp + k/9AZY3/OVyC/zdYff82WX3/MVBz/ylFZv9GY4L/K0hp/yM9W/8aMUv/GC5I/0RmjP8gPVn/GzNN/xsy + Tf4ZMk/+FS5I/hMqQ/0TKkf9EipD+wwgOPoKIDr3CR849Q4iO/MPIjrvECI16yY7Ud4VJjrRHzVLr6nd + 7g+4//8Ltf//B5j//wWp//8D////AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Aan//wOY//8Ftf//B7L//wq17f8Ot/H/ErT0 + /xiy9/8esvH/JW6ft1NDapHNR2+W4EVplu5UhsL/YZbK/0Rlov8rRoT/ESdX/xk0af8kP27/IzhV/xso + O/8THCv/FB4s/xgjM/8cKkf/JkF7/yVCgv8kQHv/OFWU/ylIjv8xTo//LkqF/zZRjf8yUZT/HTFY/xki + MP8oOEr/S2V//1p9ov9pkbr/daLQ/3+w4v92pNL/aJC5/4m25f+Cs+b/cZ3L/32t3v+Nueb/e6zg/4Cx + 5P+Ouej/oMTs/3Wm2/9zpdz/dajg/7DO7v9voNn/eqri/2+h3P91pd3/W4W1/0Zpj/9hkcj/V4O0/1mG + uP9Nc6D/Y428/1eCtf9MdKL/SXCc/0dumv9CZo//RGuW/0Noj/89YYj/NVZ5/zNTdv9DYoX/M1N3/y9N + cP8tS27/KENi/y1Jaf8UKUH/P2CE/x43Uv8cNlH/GzNQ/xoyUP4XMEv+FCxF/RMqRv0PJ0D7DiQ9+gkf + NvkJHzj1CyA39BMoQO4RJDrqKj5U3xUmOtAdM0ixYIydHbj//wu+//8ImP//Ban//wP///8BAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD///8Bqf//A5j//wW+//8IuP//C6nu/w+t8v8TtPT/GLL3/x608v8maJezXElxmMxMc53gSHCY7kl5 + uP5RhrL/ZaHX/zxinP83U5T/Fi5j/w8mWf8PJVb/FCxh/x43af8fNFv/KEJ4/zFRlv8sSYX/T3G2/zZX + oP8hO3T/ITtz/ylIjP8wT5L/Ij13/yA0WP8WHyz/JjZH/ztSa/9fgaP/fKXQ/36u3v+CtOX/fKva/4Cv + 3f93pND/jrzp/4i35v98qtn/eqnY/4Cy5P9umcT/i7no/4q45/91pNf/eqzh/4q25/9lj77/fq3j/2SQ + wv+Mt+b/caPe/3+s4v9WgLH/VHyp/3Kf0v9ahbj/XIq//2KPxP9Re6n/VYGy/1B7q/9RfKz/VHup/0Zt + mP9CZ5D/PmKJ/z1hif86XoX/Nll+/ztbgP82WH7/ME5y/zVTeP8qR2j/LUlq/yA4Vf8zUnL/HTVQ/yA8 + Wf8cNFD/GTBM/hgvS/4XL0n9EylE/REqRfsOIzv6CyI7+AogOvUKHzb0DyI67xAlO+kTKT/gIDdMyhwx + RbJZg5MfuP//C77//wiY//8Fqf//A////wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wGp//8DmP//Bb7//wi4//8Lqe7/D63y + /xOs9f8ZtPf/H7Dy/ydwn7dWSnKazEpxm+FKcp3tRGud+F2Yzf9km8v/ToGy/017rP84XqP/Ijt3/xMq + Wv8TKlz/GDFn/yM8d/87XJz/T3K0/ypHgP8rRoD/LEyR/z1amf8pSI7/KkiK/zhWl/8aLEz/GSEs/yUz + Q/9AWXL/WXuc/2iQtv+IteP/eaXR/32q2P9ym8P/hLPi/4Oz4/+DsuH/g7Lh/2WKrv96p9T/d6TP/4m4 + 5/+Zwuz/ncPs/5C86f9xns7/aJO//2SNuf9/r+T/fKzj/4ez5f9zpd7/ZJPI/1Z9rP9ahbf/aZrT/1mF + tf9fj8X/YI/E/1aCtP9UgLH/U32u/1eCsv9Kb5z/RmyY/0hwnP9WeZ//PmGJ/z1iif9BZo3/N1p//zNU + eP8zU3f/MlJ1/ylFY/8wTGv/IDhU/yM9W/8hPVr/IDxa/x44Vf8cNVD+GTBM/hQuSP0TKkT9EitG+xEo + QvoQJ0H4Ch449QkcMvUWK0LvDyM56hQoPt4VKT7NGzFGs12HmB6p6v8Mvv//CJj//wWp//8Df///AgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////Aan//wOY//8Fvv//CLj//wup7v8PrfL/E6z1/xm09/8fsPL/J3GetlVKcZrNSHCY4k52 + o+xXgK3zR26m+z9poP9pn9P/RHGh/1N/t/8zVpf/OVaW/y9Li/86XKX/UXa8/zddn/8+Yaf/Ql6c/yM+ + ev8jPnr/Izxz/ylHiv8pSY//Hi5Q/xcgLP8fKzr/MkVb/09qhv9vl8D/hrfl/4a25P+GteP/f6zZ/4++ + 7P96pc//grDd/5PA7f+Es+H/eqfR/4e45v95pdH/ibnn/5fB7P+Tvuv/irno/1x/pP9sl8T/bpzM/4e1 + 5/94qeD/V32m/4m05P9nl83/YpDE/2WWzf9jksn/YpHJ/1uHuv9vm87/WYa4/0xxnP9QeKb/S3Of/0ty + n/9Hbpn/Vnqk/010nv9AZo//PF+H/0dqjv83V33/S2qO/zNSdf8vTXD/LUpr/ypFZv8gOFP/JD9f/ytF + YP8gPFj/HjhV/xkxS/4YMk3+FzBN/RMtSP0XMEv7DiE3+w0jPfgMIjz1CSA38g4jPO4PJDrpEyk+3RQo + Pc0bL0WueLXBFanq/wy+//8ImP//Ban//wN///8CAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8Bqf//A5j//wW+//8IuP//C6nu + /w+t8v8TrPX/Ga73/yCw8v8ne6/DSk95oclagKnjT3ij7FF7qfNQeKP5S3an+ztbmf49Zan/THGy/y5Q + l/8oSIr/Nlym/zlcm/9Pdrz/LVCX/ypHiP81Tob/KUWE/0FenP8wT5L/JD9+/xopRP8YICv/HSc2/yY1 + RP8zRVn/VHCN/4Cr1v+Brtn/iLfi/4Wz3/+Drtj/sNLy/5jE7v9hgqH/j77r/4286f+Esdv/jLzp/6rP + 8f+fyO3/o8rv/4Gx3/+HuOn/eajY/32u4f9qlL//grLm/5W96f9yo9f/apnN/1yFs/9tntn/ZpbP/22e + 2P9voNj/W4e6/2eWzP9Uf7D/TXWh/1B5qP9Tfa7/WIKx/0Zrlv9Qd6X/RGmT/0FmkP8+YYn/PF+H/zpc + gf80VHj/L01v/zpWeP8vTG//J0Fh/yU+W/8mQmL/Iz5b/x85Vv8eN1P/HTdV/ho1UP4XMU79EypE/RMr + RPsPJT36EyhD+AofOPUJITnyDCA27xAkPegUKUDdFio/zBsuQ6+p7v8Pqer/DL7//wiY//8Fqf//A3// + /wIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP///wGp//8DmP//Bb7//wi4//8Lqe7/D63y/xOs9f8Zrvf/ILDy/yeCudBGSXCWzEpw + meBSfKvsU36t81F7qvhSe6n6W4e4/EVqof4nRIL/K0yR/0pyuv9Xf8P/NFqd/ydEgv8hPHX/ME+S/zRS + lf8hPHX/M1KU/ytIiv8aJkD/Exkj/xwnNf8lNEP/IzFB/y08TP9JYnv/aYqq/2OFpP93nsP/YYax/zVQ + fv9ae6X/j7/s/3Sbvv+Crtb/jb7r/4Ot1v+PvOf/nsfu/4m65/+Ardn/eKPO/5C96f9/sOD/hLbo/4O0 + 5/96q97/fbDl/22azP91p9//bZ3U/3Ci2v9xpN//caPf/2OSyP9Lbpj/YZDH/1+OxP9WgbL/VoO1/2SN + vf9chbX/UHqo/z9hiP9FbJb/VHig/0Bmj/86XYL/NVR3/zRUeP82V3z/L05w/y9OcP8qR2f/JkBe/yZB + YP8nQV7/Ij5d/x43VP8sRWH+Fy1G/hcvS/0VLUj9EilC+xEoQ/oOJD74CiA49ggdNfMMIDfuDyI66BMo + P9oVK0HGK0FVo6nu/w+p6v8Mvv//CJj//wWp//8Df///AgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Aan//wOY//8Fvv//CLj/ + /wup7v8PrfL/E6z1/xm09/8fsPL/J57b7ThRe6PFUnyn3kpym+1VgrDyVoSz+FqHt/paibr8PF6a/jJW + oP81Wp7/OmOl/zlcnf85WZ7/Ql6c/yZEhf81UpH/QFyb/yRBf/8kQIP/HTRk/xUdKf8aJDL/LDxP/zBB + VP8pOEj/Hig1/zBAUv9KY3z/WHWT/zpVff8hOGf/Lkh5/3Saxf9xl77/apC1/3+q0P+Zxe3/gKnQ/4ay + 3P9zm7//fafP/4a14f+Ku+v/farW/4W25v92o8//iLjn/3qq3P+Gtef/eqzh/4Cv4v9plsn/ZZHB/3Om + 4P9nmNL/ZpfP/1+Mv/9jksr/Y5PL/2GPxf9di8D/WoW3/12Htv9Re6r/UHim/0Fljf9EapP/QmmT/0Vq + k/87X4b/P2GH/0Rig/84V3r/OFV3/zZTdf8tSGf/JkJg/yQ/Xf8oRGP/HjZT/xw1Uf4bNVD+FzBM/RUu + SP0SKUL7ESdA+g0hOPkNITv0CR008hAlPe0OITfpECQ53RMnOsobMUeZqe7/D6nq/wy+//8ImP//Ban/ + /wN///8CAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8Bqf//A5j//wW+//8IuP//C6nu/w+t8v8TtPT/GLT3/x+08v8msvT/L1J9 + p7xSeqfbTXOd61F8qfNij733XYu9+kNoov0zVZ//UXa5/0Bqrv88Z7L/OVyn/yQ/ev81UY7/JkSG/zNW + nv9el9D/NFie/yZBgf8TK13/HDJb/yo7Tf9AV27/RV12/0JYcf8sO03/ISw5/y4/U/8nP2z/JkF//y1I + if8mPmz/Izpr/ylAdP8uR4D/P1uT/5TC6/9+p8z/n8nv/4Cq0P+dye//mcXu/36p1P+Svuj/eaXP/4Gw + 3/90oMz/e6vb/32w4/+AseX/dqfc/3ip4P99reL/ZZLF/2WTyv9soNv/eabb/3ul1/9nl8//WYa4/1uJ + vf9ahbn/R22X/0x1ov9Pean/RmuW/0dumf9OdZ7/R2yX/z5hif9HZon/N1h+/zRTdv85Vnf/K0do/ypH + aP8mQmH/ITtX/yhDX/8eN1L/HztW/h03VP4WK0T9FS5H/BQvSfsPIzn6DSE5+AwhOvULHzbyCyA47Q4i + OOgSJz7YFSxBwhsvQ4qp7v8Pqer/DL7//wiY//8Fqf//A3///wIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wGp//8DmP//Bb7/ + /wi4//8Lqe7/D63y/xO09P8Ysvf/HrLx/yWy9P8vU3yiqUxym9pNdJ/rVYGu8lqHuPdRfrT7K0yU/zpi + rv8+aaz/OmCn/0Bgof9BXp3/Ij14/yE9e/8ULFX/SHa5/26v5f9Yj77/OViZ/xguX/8TK13/IDlv/zVQ + ff86VoT/K0V1/x01Zv8WL2L/GC5h/yU9cf8pQn3/NFOa/zRPi/86Voz/RmGS/2aLt/+Jsdv/msfu/4+8 + 5P+Xx+//l8fv/5vJ7/9wlbf/d6DE/4686f+GtuX/hrbk/4S25v9/rt//eanZ/32v4/96qt3/hrPk/4m0 + 5f9mlcj/bJzS/2eXz/98qN3/bp/X/2aVzf9VgK//WYW5/1qHuv9OdqX/WIO0/010ov9Hbpj/R26b/0xz + nf9GaZL/PWCH/zpbg/81Vnr/MVB0/zRUd/8sSGn/NlN1/yZCX/8jPlr/Ijxa/yE7Wf8mQV/+GjJN/hcv + S/0VLkj8Ey1H+xIoQ/kXLkj3DSM99AofNvEKHTTuDiE35xYtQ9IYL0a6IjxSbKnu/w+4//8Lvv//CJj/ + /wWp//8D////AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////Aan//wOY//8Ftf//B7L//wq17f8Ot/H/ErT0/xiy9/8esvH/JbD0 + /y5XgqGUT3ag1lF7p+hZiLjwVYGv9y9Oj/4yVpv/NlyZ/1J5u/9McLb/Ij12/yE6cv8vSoT/LUVr/x86 + dP8pSI7/YZvT/2in2/9gms7/JUJ8/yY9bf8QJE7/Eytc/xIoV/8TKlv/HjVk/xUpV/8gOnb/KEWF/zBN + jv8wTY3/Izpo/y9Fav9JZIP/eZ+9/5S+4v+fzfP/n83x/5G95P+RveT/ksHq/2GBnf+Gstz/irnm/5C+ + 6/+TwOv/lsHs/36u3f+Nuuf/eajZ/32t4f98reH/f67i/2ub0P90pd3/eKje/2eX0P9eibn/YZLI/2OU + y/9qlsr/WYe7/1uFtf9LcZ3/Tnem/1B6qf9OdJ7/Unij/z9ji/8/ZI3/O16F/zVWe/80V3v/ME9w/y5L + bv8oQ2L/KERj/ydEZP8nQ2P/ITpY/x86Vv4cNVH+GTNP/RUtRvwULkj7EilE+REmQPcMIDj1Ch418Qse + NewNITjkGTBH0hUpPb0oQlNYqe7/D7j//wu+//8ImP//Ban//wP///8BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8Bqf//A77/ + /wS1//8Hsv//CrXt/w638f8SsPT/F6/2/x2w8f8kr/T/LWWWtnhQeKLTVoSy5V6LvO87XpL7LEqF/1d/ + vv9LfMP/PGKp/zldpv9BXpz/LkqL/xEnTf8ZL1f/JUF//xwsSv8jNVb/TX+y/2qm1/9emMj/TIC9/yVC + ev83UIf/GjFk/yE8ev8sR4X/JkF8/zpYl/8mQHj/P16i/zRPi/8/XJv/RWOj/ztYlf8sRXf/VnOc/5O/ + 4/+ey/D/pc/y/4Ssz/+Rveb/bJCt/4ay2f+Hs9z/iLXh/4i45P+Gt+b/gbDf/3uq2f+Lt+b/eqve/3Wk + 1f98ruL/fa3i/2yb0v90puD/aJnT/2ye2P9ahrj/YI/F/2SSx/9OdaL/V4S4/0htmP9Yg7H/VH2q/1F4 + pf8+YIb/P2KJ/0RqlP87XoT/Nld8/zRWef83WX//LEdn/yxKaf8sSWn/LEhn/yVAX/8iPlz+IDpW/h05 + Vf4YMUz9GTRR/BQvSfsSKEH5DyU99w0hPPQMITnwCh416w4jO+ATKkLJFCc6ujpTYz217f8Osv//CrX/ + /weY//8Fqf//A////wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wF///8Cvv//BLX//wey//8KsOv/Dbfx/xKt8/8Wtfb/HK7w + /yOz8/8sg7jWV1V/q81Uf6vhWIW47itMjf5Odbj/Snms/0Zwtf82W6L/JUJ+/zFOjf8bNF7/Ey1X/z5Z + lf8fM17/FR4q/xUeKf8ZKED/TXOx/0x+rv9vreH/aKfb/1yVx/9Kea//O1yh/zRRhv9ljMD/eJrC/ytC + ef81UYv/RmOj/zFLeP9YcpX/TWua/0pppv9Ma6v/O1aL/4au0v+RvN//kb7j/6fP7v+FrtP/l8Tr/5C/ + 6f98ps3/g6/Z/36q1v9+rNr/ibjn/4Cy4/90o9P/cJzN/32u4/+FsuT/Z5XJ/2KPwf9pnNf/dqXe/2iZ + 1P9olcr/ZJDE/2CNw/9XgbH/UHqo/1aAsf9MdaT/R22Y/z1ehP86Wn//PWCJ/zxgiP83WH7/NVh7/zJT + eP8tSmr/NFN0/yQ/Wv8zTWz/KENj/yM+XP4gPFj+HTlV/ho1Uv0bNVL8Fi9M+hgvS/gQJT/2DR409Awh + Ou8LIDfoDiQ83hIlPMoWKT6ydaO1HLDr/w2y//8Ktf//B77//wR///8C////AQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AX// + /wK+//8Eqf//Bqn//wmw6/8Ns/D/Ea3z/xay9v8bs/j/Iq/z/yqm6fY6VH2mx1R/qd5CaqH0N1yk/1OD + uf9Ujcv/QGin/05xt/8rS5H/GzVo/xApUP8cNGD/PliY/xciNf8UHCj/FBwo/xQcJv8jMkX/L0d0/y9M + kf8kP3z/NlSS/1l+uP93nsX/kLvg/5XC5v+YxOn/LUZ5/z1alP9FYpL/UXOy/zdPhv98o8H/oczv/4So + zP9NbKn/UG+n/6TR9P+Nttn/j7re/3mevv+jzfL/nMnv/3Savv+Mu+j/kb/p/36r2P9zncf/g7Lj/3Si + 0f+Ituf/fK3j/4y04f9rnNH/dafg/2GRxf9llc7/XIm7/1+Nwf9cir7/WYa5/1SAsP9eh7f/WYKv/16F + s/9HbZf/UXah/0Nokv9Udp7/TnCV/zlYeP82WHz/Lkxu/zlXe/85V3b/JD9a/y9LbP8nQmH/HzhT/h44 + VP4kQF39Fy9J/Rw2U/wVL0n6FCtH9xAjPPYNITjzDCE77QwiPOYOIjrYEylBwRkvQZaz8P8RsOv/DbL/ + /wq1//8Hvv//BH///wIA//8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8Bf///Ar7//wSp//8Gqf//Canq/wyu7/8QtfP/FbD1 + /xqx9/8hsvL/KLP1/zNYgqqpUHif3CdDd/w0WZn/aqHT/2SV0f85YKL/MVCM/y1LjP8pQmn/KkNo/yE7 + dP8mPWr/FR4q/xYfK/8VHir/FyAs/zBBU/9QbIj/c5u+/4i24P+Qveb/ha7T/4653v+RveP/ncru/5TA + 4v9Pbpb/S2ur/4Kpzf9jha//TG2s/ztXkf95nb//ptDw/6LN7f+PueH/g6nF/4evz/+IsdP/pc/w/5XC + 6v+FsNX/fqfM/3+q0v+Brtn/h7fl/3mk0P9+rt7/eKfY/4e36P9vnc7/daXa/3Om3v93qOL/c6Td/2yf + 2f9nmND/WIS1/16Mwv9fjcP/Y469/1N+rv9ZhbX/XISy/0Zrlf9KcZ//RmuV/01wmP8/Y4v/MlFy/zRU + d/8zUnb/PVx9/zhXeP8lQF3/KENj/yM9W/8iPVv+KkVi/h04Vf0aNVD8GDJO+xYtSPkTKUP4DyE49hEn + QvEMIzzqCh425RwyStQTJzzAIDpNbLPw/xGp6v8Mqf//Can//wa+//8Ef///AgAAAAEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /wF///8Cqf//A6n//wa+//8Iqer/DKnu/w+y8v8UrPX/Ga73/yCw8v8ntPT/MG2ewn9Kb5zaOlqe/2KU + 0f9ZkMH/Qm6o/zlgpv87XaT/HTZs/xAmSP8VK1D/KEiN/yIxSv8UHSn/Fh8r/xYeKv8gLDr/PFJo/2aJ + qP95pMv/jbzj/5HC6f+OuuD/lcDn/5nH6/+WwuX/lsHi/5zL7P9DX5r/YoOz/6zY9/+Irs3/VXSq/1p7 + s/+l0fD/k7rX/5W+3f+l0/X/l8Ll/4u01f+ayO7/msnw/4iy2P+MuOL/iLXf/4+/7P+Jueb/e6fU/4i3 + 5f92pNL/bJjD/3eo2/94qNr/dKbe/4Kv4v9qnNT/XIe5/2ye1/9pmtP/WYa4/1mGuf9ci77/TXWj/1V/ + rv9SeaX/RmyW/0Zrl/9DaZT/RGmU/zpcgf81VXj/N1uA/zVUeP8wT3H/LUts/ytJav8wTW3/JkNi/iA5 + Vf4dN1H+HjpW/Rs1UfwWLUf8IztV+RMqQ/cRKEPzDyQ/7w0jO+oNIjzgIzlPzhQtRbI3V2tAru//EKnq + /wyp//8Jqf//Br7//wR///8CAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wGp//8DmP//Bb7//wi4//8Lte3/Dq3y + /xO09P8Ysvf/HrLx/yWw9P8ug7vWV0Rqnd82VZb/YJbJ/1mRw/9Uh8z/QmSl/z5blv8bNmb/JT9l/xs3 + af8mQHv/HCg3/xMcKP8WHyv/Fh4q/yUzQf9LZH7/cJW3/4++5/+Pvuf/irXb/5vK8f+UwOX/lcHk/6DP + 8/+m0/P/ncXl/5C31/+SuuD/pNDs/5C0z/+bw9//rdr1/6HM6f+j0O7/hKfA/6bT9P+Tu9v/kbzc/5nH + 6/+Zx+z/iLLX/5TC6f+Gsdn/fqnR/4Kv2f+Ardn/jbzp/3ek0v90otH/eand/3Wm3P9undD/bp7V/2WV + zP9qnNb/Z5fP/1yIuv9fjcL/XYzC/1aCs/9JcJr/U36t/1yFsv9Se6n/RWqU/0Npk/9CZpH/O12E/zlc + g/83Wn//OVp//zBOb/8pQ2P/ME1v/yZCYf8nQV7+IDdU/h86V/4cNlH9GzZT/BcxTfoVLEX5EyhA9hEn + QPMQJ0LtDCE46QofONwPJTzIESU3tYTBzBmp7v8PuP//C77//wiY//8Fqf//A3///wIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////Aan//wOY//8Ftf//B7L//wqw6/8Nt/H/ErD0/xev9v8drvD/I7Hz/yuv8fo3NlaL4Dxo + s/9im8r/Zp/V/16Ozv83WZr/LEyS/xMpUf8hOmH/KER5/ylEdv8aJTT/FB0o/xQcKP8YIS7/KjlL/1Ft + h/9yl7r/h7Td/46+5/+MuN7/lMDm/5S/4/+UvuD/nMjp/6DO7v+fyun/l7/c/67b+v+t2PT/rNfy/6TQ + 6v+r1/P/s976/6rY9f+cyOX/p9X3/4muzP+gz/P/nMjq/5TB5v+RveT/ibbc/4Cpzv9+qdH/d5/H/469 + 6v+DtOT/gK/h/3ur3f94p9v/fa7i/2uazv90pt7/c6bf/2iY0f97qN3/YpHJ/2COwv9djMH/YY29/1eD + tf9Yga7/Unqn/012pP9Fa5X/SW+b/ztdg/9Kb5b/PF+F/zhafv85WX//Lktr/y5Mbf8oRmX/J0Nh/iZB + YP4qRWP+HztX/R04U/wcN1T7GTFN+hYwS/cTKUP1ESdC8Q8lPuwMIjrkDSM70w4iN8QaL0SFt/H/ErXt + /w6y//8Ktf//B5j//wWp//8D////AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8Bf///Ar7//wS1//8Hqf//CbDr + /w2z8P8RtfP/FbL2/xux9/8hs/P/KbP1/zM4W5jVWIPF/3at1/9Qhrn/P2um/zpksv9EYqH/GzZf/w4k + Rv8bNWr/Jj1l/xgjMf8VHir/FR0o/xojLv8tPU7/U3GM/3qkyf+HtNv/h7TY/5TB6P+bye3/lL/j/5jD + 5v+iz/D/ptP0/6XS8f+gxeH/qtby/6LL5f+y3fb/sN33/7Hb9f+r2PT/k7nT/5vE4v+aw+L/ptX2/5zK + 6/+Wwub/j7ve/5/M8v+QvuX/hK/W/5LB6/+ArNj/gKzX/3eizf94pdT/c6DP/3em1/90pdj/e6zj/3mq + 4v9xpN7/aZvW/1J5pv9cibz/a5jN/2qXy/9eiLj/T3il/1F7qv9Od6X/THOg/0dtmP9FbZb/QmiQ/zte + hP84W4D/NFR4/zRTeP8xT3H/Lkxu/ydDYf8qSGj+J0Nk/iI9W/4eOVb9HjtY/Bo0TvsZME35FjFL9hMq + RfQSKUPvDydB6A8mP94MIDbQEihAtDRQYkiz8P8RsOv/DbL//wq1//8Hvv//BH///wIA//8BAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP///wF///8Cvv//BKn//wa+//8Iqer/DKnu/w+y8v8UrPX/Ga73/yCw8v8nsvT/LypI + f9Y9aKH/Z53D/3Co3/9Yi87/MFKU/ydBev8QKE//EStV/zpVi/8rQ23/GiUz/xMbJv8VHSj/GCAs/y4+ + UP9Wc5D/fqjP/4275P+ZyO3/lcLo/5jE6v+UweT/nsno/6TS8/+cx+b/q9j3/5O30f+fx+D/oMfg/7jk + /f+v2vP/rNXw/6nU7v+m0Ov/n8nm/6TQ7/+bxeX/mcPl/5fD6P+Frc//ncvx/5PB6f99o8f/iLXf/4Wy + 3/97p9L/d6PP/3Oeyv9zn83/eanc/3qq3/9/ruT/bZ7U/2mYz/9untb/YZHI/2WUzf9fjMH/XozA/1mF + t/9Wf67/VICx/0dslv9HbZf/SXCc/0dtl/9BZY//PmOK/zteg/85XIP/Pl+D/zJQdP8wTnD/Kkhn/yxI + af4nQmD+Iz5d/SA8Wv0cN1L8HDVS+hkxTvgXMUz1EylB8jFGXu8QJj7mDiE42w4lPMMULkaflMrfGK7v + /xCp6v8Mqf//Can//wa+//8Ef///AgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wGp//8DmP//Bb7/ + /wi4//8Lte3/Drfx/xKw9P8Xr/b/HbDx/ySv9P8tLEyF0WaZ1P99vOj/Y57V/0+Au/81W6H/Ql+d/xEr + U/8UKkv/KUF0/yxFdP8bJjX/FR4q/xYfK/8YICz/LDtO/1dyj/90mrv/kL7o/5C+5f+RvOL/oc/z/5vI + 6/+ey+z/ncjm/6jU8/+t1u//nsfh/7He+v+kzOT/uOP7/7Lc9P+x2fH/rtr1/6PN6P+cxOD/qNPw/5/N + 7P+QuNj/oND0/5XC5v+Vwej/lcLq/4q23/+QuuP/jLzp/4W14/9+rdr/ibnp/3Si0f91o9T/eqvg/3en + 2v9yo9r/caTd/2KQxf9hkMX/YZDE/1uHuf9ejcL/bpfE/1N8rP9OdqL/SnCc/0xzof9GbJb/QmeQ/z5i + if89X4L/PF+I/z1eg/80Unf/MVBy/y5LbP8tS23+J0Jg/iVBX/4gOlf9IT9d/B05VPscNVL5GTNQ9xUs + RfUTKkTxIDdQ6xguSOIMHjPWDyU+uhw2TXOt8v8Tqe7/D7j//wu+//8ImP//Ban//wN///8CAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////Aan//wO+//8Etf//B7L//wqw6/8Ns/D/Ea3z/xay9v8bsff/Ia/z + /yo0VZfJWom+/4W+5v9Rhrb/TobK/zpgqP84VpT/EShM/x44YP8jQHT/K0d+/xwnNv8VHin/Fh8q/xYe + Kv8nNUP/T2qE/3GXuP+Jtt//jLng/5C94f+fzvP/nczv/6fU9f+WwN//pM/s/57H4v+p1fH/p8/p/7Xg + +v+p0ej/sNry/7Hd9/+u2fT/m8Db/6rW8/+gzOn/oc/v/6bT8/+Tvd//o83v/5K/5v+XyPD/kL7p/5TA + 6P+Nvez/fKnU/3un1P+Muun/dKLR/3Gezv9yotX/dqnh/22e1f9ypN3/aZjQ/1qGtv9hj8L/YZDF/1+O + w/9VgLH/VYGy/1J9rf9PeKb/Tnil/0lwm/9Ibpf/O12B/ztcg/88X4j/OFl//zhXef8yUXP/LUhp/zRR + cv4oRGT+Ij1a/SNAX/0hP1z8HThU+hs0UPgXLkf2EypB9BMoQvATKkbnDyQ83g4iN8wOJj2xVHyNLbPw + /xGw6/8Nsv//CrX//weY//8Fqf//A////wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8Bf///Ar7/ + /wSp//8Gqf//Canq/wyp7v8PsvL/FKz1/xm09/8ftPL/Ji5KgLhWkNL/dqvQ/2am4P9mmtj/P2Wn/ypJ + jP8PJEn/JkBm/yZBcP8pSIz/Hyw7/xUdKP8VHCj/Fh4p/yQwP/9FXHT/bZGy/4265P+QvuX/l8fs/5PA + 5P+WweT/l8Lj/5jC4f+iz+3/m8Ti/6fR7P+04Pv/m8DZ/53D2v+w3PX/tuD7/7Xe+P+kz+r/rdf0/67Z + +P+Rudj/m8fo/5C83/+Qu9//ha7R/4q23f+Uw+7/eKLI/4Ow3P+IuOb/gbHg/3qn1/9xnsz/d6ba/3Wm + 2/9zpNv/cKLa/2+g2P9sn9r/Y5LH/2CPw/9nls7/WIO0/1iFtv9Tf7D/S3Kd/1F6p/9JcJz/Unij/0Jo + kP85WX3/O12D/zxehv82Vnv/NFJy/zNSd/8xT3P+LEtr/iZBX/4mQ2H9HzpV/CE+XPscNVD6GjRQ9yc9 + W/UWMUzwEypG6xIpQeMQJ0DVGzNLvyI+U32y8v8Uru//EKnq/wyp//8Jqf//Br7//wR///8CAP//AQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB///8Cqf//A5j//wW+//8IuP//C7Xt/w638f8SsPT/F6/2 + /x2u8P8jPV6Ui2SZ1f+X0fX/aqnc/0t8sv83Xp7/Smuv/ypEb/8OJEb/DyVJ/ydGif8kNEz/FBwn/xUd + Kf8WHyr/HCc0/zFBVP9LZX3/Z4mm/4Kqy/+Gr9D/lMLl/4y31/+WwOL/j7fV/53I5v+p1vb/rtn3/6/a + 9f+t2fT/q9bw/6rR6P+v1+//rdj0/6zU7v+o1fX/ncjn/4aryP+cyev/pNH0/5bD6f+Lttv/kL/o/4m2 + 4P+HtuH/j77q/3mlz/90n8n/grPk/4Cw4v90otX/dqnf/2qazf9wodf/c6Xf/2KQxf9gjsD/bJzU/2iW + zf9fjL//W4m7/095pv9PeKf/UXus/1N8qf9PdqL/Pl6E/0Jmjv8/ZI7/OVyC/zpbf/83WX7/MlB1/y5N + bv4qSGf+J0Ng/SZDYf0hPFj8IT1a+hkuRvkaM072GTNQ8hMqQfATKkPpESdA3hMrRMcQJz6zR26BNbfx + /xKp7v8PuP//C77//wiY//8Fqf//A3///wIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /wGp//8Dvv//BLX//wey//8KsOv/DbPw/xG18/8VsPX/Gq73/yBMc6ljO2Se/3mrzP9imMH/ZJ/c/0t/ + xP83WJj/HDdm/xAoT/8pQmj/Ij9+/yhAav8WHyv/FR4p/xUdKP8WHin/HScy/yQwPf8xQVD/P1Jl/0NZ + bP9NZXn/XHeO/3SVr/+PuNf/mcLj/6zX9f+o1PL/n8fj/6fP6P+cxd//n8jj/6XQ6/+fyOT/qdf3/6LP + 7v+XweD/l8Hi/5fD5f+jzO7/ha7R/4664P+UvuT/hK/Y/3KYvP95pM3/dJ3F/3up2P+AsuT/d6jX/36v + 4v99ruH/caPZ/3ys4/9llMr/ZJHI/2+h2v9iksj/XIu+/12MwP9Xg7P/UXur/1eDtP9Re6v/SW+b/0Zq + lP9AY4v/QWaP/0VpkP81V3r/OVuB/zpZfv8vS2z+ME5u/ipGZf4lQV79JEBd/CQ/XfsdNU/6GjNN9xs1 + UvMeNlTvFStF7CA5UuISKkLSFi9Hvh05UYC18/8Vs/D/EbDr/w2y//8Ktf//B5j//wWp//8D////AQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AX///wK+//8Eqf//Br7//wip6v8Mqe7/D63y + /xO09P8Yr/b/HWKLnz5Bbbf9k8zy/3245P9zrOP/VorF/z1nsv8nSI3/EixU/yA3Wv8bMlv/Izx2/xwn + Nv8WHyv/FR0o/xcgK/8YISz/GSEs/xggKv8YHyn/GB8p/xggKf8jLjr/NERS/0VYaP9bdIf/c5Gn/4Ci + u/9ri6n/WHaZ/0xqkf9dfJ//ptTx/7Ha9/+izez/lb7c/4muzP+ax+n/o9Dx/5G94v+Mttv/mMXq/3uh + x/95ocf/g6/Z/4Gw3P97ptP/hbPh/4Gx4f9yoM//bp3M/3Kj1f9voNb/cKTc/2+h2v9tntb/YI7B/1uG + tv9WgbH/WoW3/12Esf9dhrT/Un6w/092o/9Lcp7/Q2eO/0lul/9CaJL/PmSM/zlcgf8+YIX/M1F1/ihC + Xf4tTG3+M1Jy/SpHZ/wlP1v7Ijxa+hwyS/kdOFT1HDZT8RcvSu4VLknnFCtF2hYwSccTLEWwTHKGNa3y + /xOp7v8Pqer/DKn//wmp//8Gvv//BH///wIA//8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////Aan//wOY//8Ftf//B7L//wqw6/8Ns/D/Ea3z/xay9v8brPD4IkFnrdJ8s93/iMHn/2Sg + 0f9Gd6n/S3i6/0lqrf8VK1D/DSJD/ytDaf81UZL/Jjxg/xYeKv8VHin/FyAr/xcfKf8YISz/Hik4/yU5 + VP81S2//HDFR/x42Xf8ULFH/DyNF/xQsU/8RK1D/DiVI/xQxXf8sRHv/LUd//0Bbh/+o1PL/oc3s/5e/ + 3/+cx+j/kLrZ/5rI6f+ayO3/lcLo/53J7f+Rvub/jbnh/4Gs1f+Ovuz/grDf/4Cv3v+Crtz/hbTj/22Z + x/9+sOT/b5/S/3Sp4P9qm9H/aZzV/3Of0f9fjsH/ZZTL/2WOvP9Zhbn/XIi6/1eCtf9SfrD/S3Ke/0Vq + k/9FaZP/RWuU/05zmf8/Yon/QWWK/zRUd/8uSmn+Lktt/jVVdv0qSGj9J0Zl/CZDYvofOFP5HzlV9xs1 + UvQZM07vFy5I6xMqQeMVLUfRFC5FuiQ9VG+t8/8Wt/H/ErDr/w2y//8Ktf//B5j//wWp//8Df///AgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8Bf///Ar7//wSp//8Gqf//Canq + /wyp7v8PrfL/E7T0/xiy9/8eOluWhU+Eu/+MxOj/ZJm+/3Os5P9Sj9T/Nl2i/yhHhf8RLFX/HDRa/yE4 + Yv8mQX//Gyc4/xYeKf8WHir/Fx8q/yIuPP8nRXn/LVCU/yQ/cv8TKlH/EChM/xkyWP8RKE7/ECZI/xgy + Wv8WMFj/KEJ1/yY+cP8gN2T/Mkhw/2+St/+eyeb/msLk/5rH6P+dyOn/nsru/5fD6f+Wwuj/n8zx/468 + 5v+Gstv/krzm/4m66P95pdD/h7jp/3Ofy/9+sOH/eKnc/3Cg0/9rms3/caLX/2uc0/9nmNH/apnO/22a + z/9xndH/aZLA/12Kvv9WgbP/UHup/1F9rv9Kcp//UHii/0t0nv9Ibpb/QWiQ/z5hhf89YYb/MlJ0/jJQ + cv41VXj+Lk5w/SVAXPwmQWD7KUdk+R85VPgdNVH1GzVQ8hkyTuwXMErmFClA2xUsRsYoQVmie668I7Ly + /xSu7/8Qqer/DKn//wmp//8Gvv//BH///wL///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAB///8Cqf//A5j//wW1//8Hsv//CrDr/w2z8P8RrfP/FrD1/xpqmL03RHC7/JrQ + 8/+RzPH/fLrt/2CY0P9Ddbf/RGiw/yg/Zf8PJUf/GDNd/yVDhv8oQHD/Fh8q/xQcJ/8WHij/HC5H/zRY + mv80VpT/LU2H/xUrUP8RK1X/ESpR/ypEav8VKkX/IDlo/zFLhf8wSoL/NlGK/0Bem/8/XJv/LEV8/z5a + hv+Rutz/krzf/5rH6v+Zw+j/iLPX/4y43v+LueH/mMXv/4y86P+PvOj/ga/b/4Oz4v+BsN//eabU/3yt + 3v9yotT/dqfc/3im2P9vn9b/cZ7R/2OSyP9kk8r/Z5HA/2yYzP9Vf67/V4O1/1N/r/9Lc5//R2+Z/0Zr + lf9PdqP/S3Kb/0BkjP86XYP/PGCG/zVUd/41Vnn+N1d7/jFSdf0tS2z8KEVk+yhFZvokQWD3IDtW9h03 + UvMbNlHtGzRO5xcwS94WLUXMFzFLtjZZcE+t8/8Wt/H/ErXt/w6y//8Kvv//CJj//wWp//8Df///AgAA + AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wF///8Cvv//BKn/ + /wap//8Jqer/DKnu/w+t8v8TtPT/GK/2/x01VpiyXJG7/36wzv99ueX/WpPH/1ONy/85Y6T/Ij57/w4k + Rv8iO2L/KENu/ypKjv8lOFr/Fh4q/xcgK/8pRX//SG+w/y9QiP8hPW//Ey1W/1h+pf+Fr9H/garL/zJG + Zf80UIv/NVCM/z5bmv8nP3D/OFB7/4ix1/9zmM3/Z4q8/4y01v+Qut7/nszw/4iy1v+Kttn/jbzj/46+ + 5/+Yx+7/kb/r/4W14f92osv/j73r/3qp1/97q9z/eaja/3am2f97rOH/cqDU/3Ci2P9kk8n/Yo/C/2SV + y/9sl8r/XYu//1eEtP9WgrL/UXyr/1J9rf8+YYv/Unys/1Z9qP9Nc5//QGWN/zpbgP87XYX+NVV4/jVV + eP4tS2v9L05u/CdDYPwnQ2H6IjlU+ShFZfYmQWDyHThT7x03U+kZMUziGTNNzhkzTbsyUGaBtPT/GLLy + /xSp7v8Pqer/DKn//wm1//8Hvv//BH///wL///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////AX///wKp//8DmP//BbX//wey//8KsOv/DbPw/xG18/8VsPX/Gk5x + kEpMesP9nNX3/5HN8P99vu//da7l/1GIxP9PeMD/L0p2/xAnSv8PJkv/Fy9c/yI7dP8hL0b/GCQ4/z5m + rf9AZqD/S3S4/xUwXP9LaIj/gavP/5G94/+Tv+X/P1mD/y1Gfv9CYJ7/Jj5u/05urP8uR4D/O1iD/5C6 + 3f+ayez/lMDl/5S/5P+ayvD/jbnd/4az1/+Tw+7/hbHa/4+95/+Pvuj/fKnT/3ejzv99rNn/fKvc/3Oi + 0v94ptf/a5jH/3mr4f94quH/aJnQ/2KQxP9qm9T/ZJHH/16MwP9fjcH/Y5HD/1J9q/9RfKn/RGmT/0Rq + lP9fibf/QmaN/0lxmv83V3r/N1V3/jtfhf42V3v+M1R2/S1Laf00U3X8JkJf/ChGY/kiO1X3ITxY9CI/ + Xe8dN1HsHDZT4xs2UtEZMkrEKkVenIa7yyKt8/8Ws/D/EbDr/w2y//8Kvv//CJj//wWp//8Df///AgAA + AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AX// + /wK+//8Eqf//Bqn//wmp6v8Mqe7/D7fx/xKw9P8Xr+32HUJjprNwrOP/eqrF/3iszf9uqtr/ToK0/0Z3 + s/84XKT/EitV/xw2Xv8PJkv/N1KJ/yxJi/8dNF3/R3Cx/z5qo/83XZ3/Ey5Y/0hgef9tjKj/faXF/5G8 + 4v9PbqL/KUF0/1h7sf8wSoT/TGmT/1d8uf8xS4T/SmmV/5TD6P+Wxev/jLjd/4ez2P+OvOP/hrLY/4az + 2/+Dsdr/h7Xg/4q65v+GuOb/hbfm/3ys2/99rd7/bpvJ/3Sj1/9yotb/dafe/2mYzP9llMr/Z5jP/2OR + x/9jk8r/YY/H/1+Owv9ikML/PmKJ/z1hif89YYn/YIy7/052of9AZYz/TXOc/zxeg/4+Y4r+RGiN/jRW + ev08XoH9NlZ5/C1LbPsqR2X5JkNh+CpFZfMiPVrxITtY6xw1T+YdOFXWITtXxBozSrRRgZI7sPT/F63y + /xOp7v8Pqer/DKn//wmp//8Gvv//BH///wL///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf///Aqn//wOY//8Ftf//B7L//wqw6/8Nru//ELLy + /xSs9f8ZebDTLjtkr/SGwuz/ptz6/3y12/90tez/a6bi/0p+yP8tUJX/Jz9m/xUwV/8lPWT/LEeG/x47 + dP9Aa6z/XIrE/yxNiP8SKE7/MkRV/05ogf9dfJb/e6PF/2eLvv8oQHD/f6nO/1BxsP8qQ3H/kb3l/1t/ + vP8nPnH/dJzC/5LB6P+DrtP/fqfM/4u64v+NvOX/gazV/3+q0/+Dsd3/hrfl/4i55/9/rt//eKfW/3Cc + yv9vnM3/dKLT/3Sl3P9tndL/a5zV/2qc1/9jk8n/YZDH/2GNwv9ah7n/Xo3B/2GMvf8sTHD/T3ej/1+L + uv9OdqH/RmyX/0Nmjv5DZ5H+PWCH/jtehv44XIH9LUpo/TxcgPwxUHP7KUNh+idDYfgkPlz1JD9d8iE9 + Wu0eN1PnIDlW2yZBXckaL0e/M1ZsXqz1/xmy8v8Uru//ELDr/w2y//8Ktf//B5j//wWp//8Df///AgAA + AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD///8Bf///Ar7//wSp//8Gvv//CLj//wu17f8Os/D/EbXz/xWw9f8aQGWgdVCGx/+Ht9P/jcHh/4bA + 6v9uqNr/VY/M/zxnqP8kRID/DiRG/w4lSf8QJ07/IkB2/0JwuP9Bba7/Hjtv/xImSP8dJzT/MEBR/0FX + bP9ffZr/bI6x/4Cq0P+Jtdv/bJTI/y9Igv9rkbn/i7rh/01vq/9MbJf/jbvj/4695f+NuuL/iLbf/4q4 + 4/9/q9P/eqXO/3+t2P9+rNj/irnp/3mp2P9yoM//bZrI/3Sj1v90pdv/YYy7/2aVyP9lk8n/aZrS/3Oh + 1/9rm9H/ZJTJ/1uGt/9dir3/YIy+/zldhf9CaJH/YY27/1mAq/9IcJ3+RGqU/kBkjv48YIb+Ol6C/TRV + dv01VXj8O1t++y5ObvktTGz3Kkho9CQ+WvIkQF3tIDpX6CtGYtsjPlzJHzlUuSZAU32y9v8brfP/Frfx + /xK17f8OuP//C77//wip//8Gvv//BH///wL///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8Bqf//A77//wSp//8Gqf//Canq + /wyp7v8Pt/H/ErD0/xey9v8bKkd/ym2r5P+e2vn/fKzI/3/B7/9alMf/YJzc/1mHy/8lQXn/LEVq/yU+ + ZP8aNmr/LVKW/094uf8VMFv/EydE/xYeKf8YICz/KTdG/z1TZ/9PaYH/aYuq/3uhwv+DrtP/Y4e+/32l + z/+Ktt7/dqDR/3+p0v+Gs9v/ibfg/4Sw2P+Fsdz/ga7X/4Kv2f+CsN7/f6/c/3+t2/93pdP/g7Xm/3ek + 1v9wnMv/bJrM/2SRwP9wodf/aJnP/2qd1/9om9T/ZpnR/2KSyf9hkcX/V4Ky/1yLvf9hi7v/RGqW/zRW + fP9kkcD/R2+Z/kVqlf5Hbpn+PmSJ/Txhhv02Vnn8Nld5/DNSc/stSmn6K0hm+DNPcPQnRGDxIjxY7iE5 + VOkjQF3bN1FrzSE9V7knQFWGr+32HbD0/xet8v8Tqe7/D6nq/wyp//8Jtf//B77//wSp//8D////AQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP///wF///8Cqf//A5j//wW1//8Hsv//CrDr/w2u7/8QrfL/E7T0/xhokKQzRmmu6IK8 + 6v+Jvdn/otn4/3uv1f9dlcr/TX6x/z5qr/8yUY//GTRe/xMuWv8ULVn/GDRj/xArU/8WK0//GyYz/xcf + Kf8ZIi3/JDA+/zBAUf9CWG//VnOP/1t6lv9wlrf/f6fM/3ylzP+Gs9z/gq/X/4265f+Nu+b/g7Ha/4Ox + 3P+Artr/f6vX/3WgzP+Kt+T/gLHh/3us3P9+ruL/b53O/3Oj1/9ql8r/cKLa/1+PwP9rntX/baDb/2KR + xf9hkMP/Woa3/2eVyP9ejMD/WIS1/0Zvm/8oSGv/Ol2E/mmXx/9Kcp/+RGmS/kNokP09YYf9OlyB/DRU + dfw3WHv6L01s+jJRc/cuTW7zK0hn8C1KaesqSGfmIz1Z3SlGY8kiPFe/JD5VkZXS4SK09P8YsvL/FK7v + /xCw6/8Nsv//CrX//weY//8Fqf//A3///wIA//8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wF///8Cvv//BKn/ + /wa+//8Isv//CrDr/w2z8P8RsvL/FKz1/xlcjbk/Lk+M+Xi04P+GuNP/jMXn/4TF8/9ak8f/bKLd/096 + uP8pSYX/EShP/xApUf8ZNF3/EilM/yI/ff83Uon/JzdP/xkjLv8XICv/GyUy/yUyQf8zRFb/Ok5i/0pj + fP9SbYj/YYKh/22RtP93oMT/f6rT/3+s2P9/rtn/grHe/3uo1P95pM//f67g/36v4P+Bsd//dKDP/26b + y/9yodT/c6Tb/3Cj2v91qN7/Un2s/26e1f90o9z/ZpXN/2WTxf9dir3/Xo3A/1N9rP8tTnP/MFF1/2CN + uv9Yg67+T3il/klvm/48XoL9Q2mS/D5iiPxGao/7Nll8+jRUd/gxTnD3MFFy8ypHZ/ErSmnrJT9b5yZF + Y9whO1TQIjtTvyY/VpCY0+IjrPX/GbXz/xWz8P8Rte3/Drj//wu+//8Iqf//Br7//wR///8C////AQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wGp//8Dvv//BKn//wa+//8IuP//C7Xt/w6z8P8RtfP/Faz1 + /xk1Vn1nVXm+/IK02P+CtND/lsvp/2qew/9dlMP/TIC0/1iIzP82XKH/Hjx0/ydBZv8SKU3/ECVJ/ytH + h/8lQYL/JDhc/x0sQ/8UHCf/Fh4o/xkiLv8eKTf/KjlJ/yw8T/9CVmr/Qlpz/1NwjP9kh6j/YoSo/2uS + tf91o87/fq/c/4m45/94ptb/dKPT/36v4v9vns7/caHT/2yZzP91qeL/Z5bJ/1+Owf9BZpD/bp7T/2ST + yf9omND/Xoy+/1qFtv88YIn/I0Fk/0tznf9nlcT/VX+u/lR8q/5LcZ39RWqT/TlZe/0/Yor8QGaP+jZX + evowTm75M1Jy9jBPcPMvTm/vKkVj7ClGZOMqR2bYJT9azydEYbkuTGGCrO/3H7D1/xqt8/8Wt/H/ErXt + /w6p6v8Mqf//Can//wa+//8Eqf//A////wEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AX// + /wKp//8DmP//BbX//wep//8Jqer/DKnu/w+38f8SrfP/FrL2/xtVe61lNVmZ/YvJ8v+Nw+P/mNX4/4zJ + 8/9fms3/YZXO/09/vf8zWJj/KkqO/xMoTf8dOF//HTZe/xYvXP8yUZP/M1KU/yhFhv8hN2H/GypD/xgf + Lf8VHCf/GSIv/yEsO/8nNkb/MkRX/zpQZv9CW3X/UXCP/2CEqP9mjbT/cZ3K/3ep2P9/seX/c6LU/2uZ + yP9ypNn/cqPZ/2yc0f9qm9L/ZZTK/0Blj/9Eapb/a5rN/2OUyf5fkMP+N1uC/zJUev9olcP/WYaz/k92 + pP5Mc579S3Gc/UpynfxCZY78QmiP+0Bnjvo+Y4r5NVZ4+DpcgvQ2V3vxK0Zj8C1LauorSWbhKkdl1SZA + WswpSGS1OldycbT3/x+w9f8arfP/Frfx/xKp7v8Pqer/DKn//wm1//8HmP//Ban//wN///8CAP//AQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AX///wKp//8DmP//BbX//wep//8Jqer/DKnu + /w+38f8SrfP/FrD1/xo/YpRnTnO4+XGo0f9/sM3/hbPQ/3Ws1P95tuv/VIe8/1eO0f9Wf8L/MFGO/yND + hv8VLlj/DSJD/xo1Y/8oRYX/JD98/yVCgv8hOnP/JD9+/yQ9bv8dLU//FiEx/xUdKP8YIS3/HCc2/yg4 + Sf8xRFn/PFRu/0lnhv9Xepz/aZO8/3eo2/9unMz/a5fJ/3yu5P9zpt7/aJbM/2+i3f9klcr+ZZbN/jpd + hv9Reqr+bJzQ/16NwP4fO1z/ZpbH/mGPv/5SfKr9S3Gb/U93pfxGa5T8SG+Z+0NpkfpUdpz6R2uT9zlc + gfc5W4DzSWiK8DJRcuwwTm/mLkxr3itGY9M6V3PDLEllr0x2jVa09/8fsPX/Gq3z/xa38f8Sqe7/D6nq + /wyy//8Ktf//B5j//wW+//8Ef///Av///wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////AX///wK+//8EmP//BbX//wey//8Kqer/DKnu/w+38f8SrfP/FrD1/xpYgrBILU6M73y2 + 6P+Xze3/e6zM/47E6v9hlr//V5DH/1KFvf9cicv/TW+t/y5QlP8sTI3/HDho/w8lSv8aNWj/NVKU/yM8 + dP8yTo7/JD9v/xUuW/8YM2T/JD5v/xwsSv8VHi3/FR8q/xYfLP8hLj7/KTtP/zRKY/9IZ4j+Xoew/meS + wf5qm83+c6fe/mqc0v5llcr+Z5jO/mCOwf5rndT+W4i5/jRWff9woNL/WYi4/h46W/9jkMD+W4az/k10 + n/xMc578Unun+0RpkfpGbZb5RGqR+EFnkPY6XYH0OFp98jZWeO4yUHHqLktp5S9LatsuTWvNLk5svjVV + cpdmj6Q+svf/HrD1/xqt8/8WrfL/E6nu/w+w6/8Nsv//Cr7//wiY//8Fvv//BH///wL///8BAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AX///wK+//8EmP//Bb7/ + /wiy//8Kqer/DKnu/w+38f8SrfP/Fqz1/xlplLs1Pl+k1E5+r/+Hw+z/j8Tl/4XA6P+Jwu//ZZ/S/2Kb + 1v9TgcD/Nlyb/0Vrtf8xU5j/JkSC/x04cP8jPW7/JUB//yM+eP8gO3X/Hjlw/ytHff8cN2n/GDRm/xo3 + a/8gOGb/IDFK/yAuP/8iMUL/L0JZ/0Bbef5WfKX+XYm1/meYy/5pms/+Z5fO/mSUyP5pnNP+bZ7X/Wia + 0v1Capb+OVyE/nGg0v9YhLP9JENm/1aArP1gi7n9UHqo+01zn/pGa5T6SG+Y+EdumPZAZIn1N1h59Dpd + ge83WX3rPF6C4zVUdd8xT27TLEhjyjNTcrQ3VWyDnN7rJ7L3/x6w9f8arfP/Fq3y/xOp7v8PsOv/DbL/ + /wq+//8Iqf//Br7//wR///8C////AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////AX///wK+//8Eqf//Br7//wiy//8Kqer/DKnu/w+38f8StfP/Faz1 + /xmh2OghK0Z3okt3v/x+uuf/cqPE/36y1f9nnML/ZqTY/0x+rf9Mg8L/Q3Cx/zlgpf9Ca7X/M1OU/y5P + lf8yVaH/JUOA/zpXmP8oRIT/KEaJ/yI9d/8kQH3/Iz9//yI+df8TLVn/FzNg/y9Jbf5AXHr+Q2GC/l+H + tP1hjbv9bJ7X/WmZ0P1qm9T9WoSz/WCOwf1mlc39b57Q/DBRd/46XIP+a5vM/liGtvsqSm7+U3um/GSR + v/1Uf6z4S3Oe90pxnfZDZo31PmKG8jtdgPA0UHDuNld36Thbfd5GZYjWNVR0yzJPbL85WniaZI6jSbP4 + /yKv9v8drPX/Ga3z/xa38f8Sqe7/D7Dr/w2y//8Kvv//CKn//wa+//8Eqf//A////wEAAAABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8B////AX// + /wK+//8Eqf//Br7//wiy//8Kqer/DKnu/w+38f8StfP/FbT0/xiv7fYdUnurSitLh+FWkNH/f7Tc/4C4 + 4P+DvOX/XpO6/2ql2/9Qg7b/Pmyl/0p1t/8yU47/OmKr/0Npsv81W6f/GSxO/wAAAP8HCxP/KkqP/zRU + lv8qSYj/MlWb/zJVnf8rSon/EyxY/z5hlv5diLX8ZJPF/Gue1vxzp+L8Z5jN/GSUxfxml8z8Z5bN+2GQ + wvtjksj7VYGx+yRCZP40Vnv+Yo+//TNVev1CaJD7aZfH/EdrlPZMdaDzQ2iP8T1fg+9LcZbqQGOK5Ttf + guA+ZInVRGaIyTFMaMhBY4KtSG2Ebanl+Cex9/8hr/b/Haz1/xm18/8Vt/H/Eqnu/w+p6v8Msv//Cr7/ + /wip//8Gvv//BKn//wN///8CAAD/AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8B////AX///wK+//8Eqf//BrX//wep//8Jqer/DLXt + /w6z8P8RsvL/FLD0/xey9v8bXoaLMz5dmHpJbrPtS32u/2igzP93tuT/XpK6/2ek2v9jndf/QHCi/0+C + yP9Jdrn/R3jA/ydLk/8bKEH/29vb/wIEBv82Xan/MFeg/zhep/85XqT/N1yj/zVYmf87Yqv/LE2R/2qc + 0vpsn9f6apzS+m6h2/pvotn6ZZXK+mCOwPpbhrX6YZLF+V6LvflVf6z5VYCu+DtgiPsgPV//K0tu/kpx + mfxplsX7SnKc8ENnjO5CZYzpQGKH5UdulNs7XX/WTG+RyzpcfcM5W3q0RWiFfIi80Dau8P8jtPf/H7L2 + /xuw9P8XsvL/FLPw/xGp7v8Pqer/DLL//wq+//8Iqf//Br7//wSp//8Df///AgD//wEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD///8B////AX///wK+//8EmP//BbX//wep//8Jqer/DLXt/w6u7/8QrfL/E63z/xas9f8Zr/b/HZfd + 6iUwTHiWOGCp41qP0P9YkMH/YJzN/1qNuP9Je6n/Vo7O/0t4wP9em9b/MFmf/x0/fv8hPXD/IUKB/yJF + h/88Z7P/N1yd/z1mrv87ZKv/NFed/ypKkP87YKL9aJnN92qc0vZomcz3aZrQ92KQwfhdirr4WoW092OT + x/Zgj8L2WYa29liFsvRVgKv0ZY+88kx0nvIgPV/9Unij+maVw/dHbpblQWSI40Ztk9hCZonSQGWJyD9l + h75Jbo6vUHmVdZXN3DOy8f8lsff/Ia/2/x2w9f8arfP/Fq3y/xOz8P8Rte3/Dqnq/wyp//8Jtf//B6n/ + /wa+//8Eqf//A3///wL///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8B////AX///wK+//8EmP//BbX/ + /wep//8JuP//C7Dr/w2p7v8Pt/H/ErXz/xW09P8Ysvb/G6zv9x+Bt70rVnmvXjpeqLsxU5H4SXzD/1qO + zf9Mf77/Pmel/1GIyf98uOf/V5LM/0d6u/9UkMv/UYrJ/zdgoP87ZKr/OF6m/y5QkP8vTpL/MVSX/V+O + w/FtoNbvb6LZ8XOi1vJnl8zxYZDC8V+Nv/FhkcPwW4m38V2Lve5Xg7DuV4Sz7VN/q+pWga/nSm+W6B05 + Wf5diLPvXom36ElwmNFFa4/NSXCVwjxfgMBNcpOUVXyVaJvV5TG08v8ms/j/IrL3/x6y9v8btPT/GLXz + /xW38f8Sqe7/D7Dr/w24//8Lqf//CbX//weY//8Fvv//BH///wL///8BAP//AQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8B////AX///wKp//8DmP//Ban//wa+//8Isv//Cqnq/wy17f8Os/D/Ea3y + /xOt8/8WrPX/GbL2/xu09/8fs/j/IoGrujFEa5JoR2quny1Ql/9AbLb/RG6y/1uPwP9Nfaz/V5DK/zxm + o/85X6b/MVOV/zhbof8oRof/M1KW/j5kovJlk8fjaJfL4mqd0eNklMXlXoy66GeYzeZfjLzoWYSx6F2N + u+Zmk8LjU3um5VeBrOBcibfeVH6p20VslN8kQWP2MlN39G6czfRPdZzNSG2RvENlg6hbg6J0hrrPQK/z + /yq08v8mrvD/I7T3/x+19v8crPX/Ga3z/xat8v8Ts/D/Eanu/w+p6v8Msv//Cr7//wi1//8HmP//Bb7/ + /wR///8C////AQD//wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AX// + /wKp//8Dvv//BKn//wa1//8Hqf//Cbj//wuw6/8Nqe7/D7fx/xKy8v8UsPT/F6z1/xm19v8ctPf/H7P4 + /yKy8f8lLEyR4StLkf8tTo7/Rm+5/zRZl/86X6P/NFie/zZXnf8mQ4L/OlmY7j9inN5fj8LNbqDRxGma + yspwotbMaZrMzGOTwdJjkcHRaJnKz1+Ou9Fikr/PWIOu0mORv85WgazQS3GX0FJ8pMooRWbvIj9h+k52 + nvVtnMraYIywk2aUrmOa1ug4s/P/LLLy/yiy8f8ls/j/IrT3/x+19v8crPX/GbD0/xey8v8Ut/H/Eqnu + /w+w6/8Nqer/DKn//wm+//8Iqf//Br7//wSp//8Df///Av///wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AX///wKp//8Dvv//BJj//wW1//8Hvv//CLL/ + /wqp6v8Mte3/Dq7v/xC38f8SsvL/FLD0/xes9f8Zsvb/G7L3/x5DbKRpKUmP+ClJj/8pSpD3Lk6LyFBz + sYtklsBbc6nJUZDI1EGx9v84r/L/Oqbk9EOT0OpWisDmZ4i634BnkreTcaPNj3Kk0ZdmlbyeY5G6pmeW + wqJch6yfZpe9lGWRtY9jkLSHcJ/Cc0FlhJZ5rdN7i8nlWbD0/y6z8/8ss/P/KbDy/yew8f8ksff/IbL3 + /x6y9v8brPX/GbD0/xey8v8Ut/H/Eq7v/xC17f8Oqer/DLL//wqp//8Jtf//B5j//wW+//8Eqf//A3// + /wL///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////Af///wF///8Cqf//A5j//wWp//8Gtf//B6n//wmy//8Kqer/DLXt/w6u7/8Qt/H/ErLy + /xSt8/8WtPT/GLD1/xqFu9sqZZjDPJnd6yau8P8jsvH/JbLy/yiv8/8qsfP/K7D0/y6y9P8vtPT/MLL1 + /zKz9f8zsPX/NLH1/zWx9f81sfX/NbH1/zWx9f81sPX/NLP1/zOy9f8ysPX/MbL0/y+w9P8usfP/K6/z + /yqy8v8osvH/Ja7w/yOx9/8htPf/H6/2/x2y9v8btPT/GK3z/xay8v8Ut/H/Eq7v/xC17f8Oqer/DLj/ + /wup//8Jvv//CKn//waY//8Fvv//BH///wJ///8C////AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Af///wF///8Cqf//A77/ + /wSY//8Ftf//B77//wip//8JuP//C6nq/wy17f8Oru//ELfx/xKt8v8TtfP/FbD0/xes9f8ZsPX/Gq/2 + /x2y9/8ervf/ILH3/yGu8P8jsvH/JbLx/yWw8v8nsvL/KLPz/ymv8/8qr/P/Kq/z/yqv8/8qr/P/Kq/z + /yqv8/8qs/P/KbLy/yiw8v8ntPL/JrLx/yWu8P8jsff/Ia73/yCy9/8er/b/HbL2/xus9f8ZsPT/F7Xz + /xWt8v8Tt/H/Eq7v/xC17f8OsOv/Dbj//wup//8Jvv//CLX//weY//8Fvv//BKn//wN///8C////AQD/ + /wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wH///8Bf///Aqn//wO+//8EmP//BbX//we+//8Iqf//Cbj/ + /wup6v8MsOv/Danu/w+z8P8Rt/H/Eq3y/xO18/8VsPT/F7T0/xis9f8Zsvb/G7X2/xyv9v8dsvf/HrT3 + /x+u9/8gsff/IbH3/yGz+P8is/j/IrP4/yKz+P8is/j/IrH3/yGx9/8hrvf/IK73/yCy9/8er/b/HbX2 + /xyy9v8bsPX/GrT0/xiw9P8XtfP/FbLy/xS38f8Ss/D/Eanu/w+17f8Oqer/DLj//wup//8Jvv//CLX/ + /wep//8Gvv//BKn//wN///8Cf///Av///wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /wH///8Bf///An///wKp//8Dvv//BKn//wa1//8Hvv//CKn//wmy//8Kqer/DLDr/w217f8Oqe7/D7Pw + /xG38f8SrfL/E7Ly/xS18/8VrfP/FrD0/xe09P8YrPX/GbD1/xqw9f8asvb/G7L2/xuy9v8bsvb/G7L2 + /xuy9v8bsvb/G7D1/xqw9f8arPX/GbT0/xiw9P8XsPT/F7Xz/xWy8v8UrfL/E7fx/xKz8P8Rqe7/D7Xt + /w6w6/8Nqer/DLL//wqp//8Jvv//CLX//wep//8Gvv//BL7//wSp//8Df///Av///wEA//8BAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8B////AX///wKp//8Dvv//BL7/ + /wSY//8Fqf//BrX//we+//8Isv//Crj//wup6v8MsOv/DbXt/w6p7v8Pru//ELPw/xG38f8St/H/Eq3y + /xOy8v8UsvL/FLXz/xW18/8VtfP/FbXz/xW18/8VtfP/FbXz/xW18/8VtfP/FbLy/xSy8v8UrfL/E7fx + /xK38f8Ss/D/Ea7v/xCp7v8Pte3/DrDr/w2p6v8MuP//C7L//wqp//8Jtf//B6n//waY//8Fvv//BL7/ + /wSp//8Df///Av///wH///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////Af///wF///8Cqf//A6n//wO+//8EmP//Ban//wa1//8Hvv//CL7/ + /wip//8Jsv//Crj//wup6v8Mqer/DLDr/w217f8Oqe7/D6nu/w+p7v8Pru//EK7v/xCz8P8Rs/D/EbPw + /xGz8P8Rs/D/Ea7v/xCu7/8Qqe7/D6nu/w+p7v8Pte3/DrDr/w2w6/8Nqer/DLj//wuy//8Kqf//Can/ + /wm+//8Itf//B6n//waY//8Fvv//BKn//wOp//8Df///Av///wH///8BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /wH///8Bf///An///wKp//8Dvv//BL7//wSY//8Fqf//BrX//we1//8Hvv//CKn//wmp//8Jsv//CrL/ + /wq4//8LuP//C6nq/wyp6v8Mqer/DLDr/w2w6/8NsOv/DbDr/w2w6/8Nqer/DKnq/wyp6v8Mqer/DLj/ + /wuy//8Ksv//Cqn//wmp//8Jvv//CLX//we1//8Hqf//Bpj//wW+//8Evv//BKn//wN///8Cf///Av// + /wH///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af///wF///8Cf///Aqn/ + /wO+//8Evv//BJj//wWY//8Fqf//Bqn//wa1//8Htf//B77//wi+//8Ivv//CKn//wmp//8Jqf//Can/ + /wmp//8Jqf//Can//wmp//8Jqf//Cb7//wi+//8Ivv//CLX//we1//8Htf//B6n//waY//8FmP//Bb7/ + /wS+//8Eqf//A6n//wN///8C////Af///wH///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wH///8B////AX///wJ///8Cqf//A6n//wO+//8Evv//BL7/ + /wSY//8FmP//BZj//wWp//8Gqf//Bqn//wap//8Gqf//Bqn//wap//8Gqf//Bqn//wap//8Gqf//Bpj/ + /wWY//8FmP//Bb7//wS+//8Evv//BKn//wOp//8Df///An///wJ///8C////Af///wEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////Af///wH///8Bf///An///wJ///8Cf///Aqn//wOp//8Dqf//A6n//wO+//8Evv//BL7/ + /wS+//8Evv//BL7//wS+//8Evv//BL7//wSp//8Dqf//A6n//wOp//8Df///An///wJ///8Cf///Av// + /wH///8B////AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Af// + /wH///8B////Af///wF///8Cf///An///wJ///8Cf///An///wJ///8Cf///An///wJ///8Cf///An// + /wJ///8C////Af///wH///8B////Af///wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////4AAf////////////////+AAAAP///////////////8AAAAA + f//////////////4AAAAAA//////////////4AAAAAAD/////////////wAAAAAAAH////////////wA + AAAAAAAf///////////4AAAAAAAAD///////////4AAAAAAAAAP//////////4AAAAAAAAAA//////// + //8AAAAAAAAAAH/////////+AAAAAAAAAAA/////////+AAAAAAAAAAAD/////////AAAAAAAAAAAAf/ + ///////gAAAAAAAAAAAD////////wAAAAAAAAAAAAf///////4AAAAAAAAAAAAD///////8AAAAAAAAA + AAAAf//////+AAAAAAAAAAAAAD///////AAAAAAAAAAAAAAf//////gAAAAAAAAAAAAAD//////4AAAA + AAAAAAAAAAf/////8AAAAAAAAAAAAAAH/////+AAAAAAAAAAAAAAA//////AAAAAAAAAAAAAAAH///// + wAAAAAAAAAAAAAAB/////4AAAAAAAAAAAAAAAP////8AAAAAAAAAAAAAAAB/////AAAAAAAAAAAAAAAA + f////gAAAAAAAAAAAAAAAD////4AAAAAAAAAAAAAAAA////8AAAAAAAAAAAAAAAAH////AAAAAAAAAAA + AAAAAB////gAAAAAAAAAAAAAAAAP///4AAAAAAAAAAAAAAAAD///+AAAAAAAAAAAAAAAAAf///AAAAAA + AAAAAAAAAAAH///wAAAAAAAAAAAAAAAAB///4AAAAAAAAAAAAAAAAAP//+AAAAAAAAAAAAAAAAAD///g + AAAAAAAAAAAAAAAAA///4AAAAAAAAAAAAAAAAAH//8AAAAAAAAAAAAAAAAAB///AAAAAAAAAAAAAAAAA + Af//wAAAAAAAAAAAAAAAAAH//8AAAAAAAAAAAAAAAAAB//+AAAAAAAAAAAAAAAAAAP//gAAAAAAAAAAA + AAAAAAD//4AAAAAAAAAAAAAAAAAA//+AAAAAAAAAAAAAAAAAAP//gAAAAAAAAAAAAAAAAAD//4AAAAAA + AAAAAAAAAAAA//+AAAAAAAAAAAAAAAAAAP//gAAAAAAAAAAAAAAAAAD//4AAAAAAAAAAAAAAAAAAf/+A + AAAAAAAAAAAAAAAAAH//gAAAAAAAAAAAAAAAAAB//4AAAAAAAAAAAAAAAAAAf/+AAAAAAAAAAAAAAAAA + AP//gAAAAAAAAAAAAAAAAAD//4AAAAAAAAAAAAAAAAAA//+AAAAAAAAAAAAAAAAAAP//gAAAAAAAAAAA + AAAAAAD//4AAAAAAAAAAAAAAAAAA//+AAAAAAAAAAAAAAAAAAP//gAAAAAAAAAAAAAAAAAD//8AAAAAA + AAAAAAAAAAAB///AAAAAAAAAAAAAAAAAAf//wAAAAAAAAAAAAAAAAAH//8AAAAAAAAAAAAAAAAAB///g + AAAAAAAAAAAAAAAAA///4AAAAAAAAAAAAAAAAAP//+AAAAAAAAAAAAAAAAAD///wAAAAAAAAAAAAAAAA + A///8AAAAAAAAAAAAAAAAAf///AAAAAAAAAAAAAAAAAH///4AAAAAAAAAAAAAAAAD///+AAAAAAAAAAA + AAAAAA////wAAAAAAAAAAAAAAAAP///8AAAAAAAAAAAAAAAAH////AAAAAAAAAAAAAAAAB////4AAAAA + AAAAAAAAAAA/////AAAAAAAAAAAAAAAAP////wAAAAAAAAAAAAAAAH////+AAAAAAAAAAAAAAAD///// + gAAAAAAAAAAAAAAA/////8AAAAAAAAAAAAAAAf/////gAAAAAAAAAAAAAAH/////4AAAAAAAAAAAAAAD + //////AAAAAAAAAAAAAAB//////4AAAAAAAAAAAAAA///////AAAAAAAAAAAAAAf//////4AAAAAAAAA + AAAAH//////+AAAAAAAAAAAAAD///////wAAAAAAAAAAAAB///////+AAAAAAAAAAAAA////////wAAA + AAAAAAAAAf///////+AAAAAAAAAAAAP////////4AAAAAAAAAAAP/////////AAAAAAAAAAAH/////// + //4AAAAAAAAAAD//////////AAAAAAAAAAB//////////8AAAAAAAAAB///////////gAAAAAAAAA/// + ////////+AAAAAAAAA////////////4AAAAAAAA/////////////gAAAAAAA/////////////+AAAAAA + A//////////////8AAAAAB///////////////4AAAAD////////////////4AAAP//////////////// + /+AD//////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////ygAAABAAAAAgAAAAAEA + IAAAAAAAAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABciJcBUnuLAUpxgQFEanoBP2R1Aj1g + cQE8Xm8BPV9wAT9icgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + iP86XYL/M1N2/zRWe/8xUHL/K0hp/yA6Vv8xTnD/ITxb/x84Vf8cNlL/Fy9J/hMpRP0OIz38CyE6+gsf + NvgRJTzzGy5D7RwvRdkqQlaFcKexCDtbbAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAACs7/oDqe72B67x/w2z8/8WgLjIOy5LbNctS23vNlZ59z1fhftDZ4/9QGWO/kdv + mv9Ibpn/SnCb/011pP9Peaj/UXuq/1J8rP9llcD/IDZf/x8vRP89XIH/YIm6/1mBsf9OdqT/T3io/1F4 + pP9LdKL/UXmm/0Rqk/9FapT/Sm+W/z1hiP86XIL/P2OJ/z5hhv8kPVr/MU5v/yE7Wf8hOlj/IDlX/xgy + Tf8XL0r+ESZB/QwhOvsJHTT5DyM69RMnPu8YLEHjHC5Cv4nEzxU5WGkFSGt7AQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqu35BLH2+gmu7v8QsvX/GkFgi6UyUXjlIz1h+C5N + cvk9X4X8Q2qT/UVrlP5Mc6H/UHik/0pxnf9VgLL/WIO0/1aBsv9firr/UHut/yE4Zf8lN03/RGWN/2OR + xf9kkcX/WYa4/2SPwv9hjcD/U32t/1F7q/9NdqX/SnGd/0Bji/9AZYz/PmSL/yM+W/8qRmX/DBko/zFM + av8pRWT/KUNh/x43U/8aNFD/FzBL/hQsR/0OIzz8CR42+g4iO/YRJDryFipC6BsuQs5rmak/WoGPBkRn + dwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsPT/Aanq9wWq9P8KsPH/Eq/2 + /x1Nb5ejIDhf+B0zWf0bMlb9RWqT/EdtmP5MdaH/THWi/1B7qf9WgbL/W4a3/12Lvv9hj8P/ZprN/zVW + iv8kO2T/JzpS/1J2ov9wn9b/ZZTK/22b0f9rmc//WoW3/2GNwP9XgrL/VHyr/010oP9Mcp3/RmyX/z9j + i/8zUnP/QGOJ/y9Ob/8bM1D/OVp9/yZBYP8jPVz/HDdT/xw1Uf8XLkf+EShC/QwiO/sJHzb4DyI59BMn + PesiN0rVOlNobXOrtAhCZHUDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALD0 + /wKu8PkGsvb/DLLy/xWj4/YqMUx53SdBbfodMl3+FSlO/j9hh/1MdKD+Unuq/1N+rv9aiLr/XYm7/12L + vv9lk8f/Y5HJ/0Bjmf8hOWz/LEJh/zlTc/9zoNP/Y5LI/2iZ0v9qmdD/YpHI/2CPw/9tms7/YIy//1N9 + rP9Yg7P/UXqo/0hslf86XIH/Ol2C/z5iiv85W3//L05w/yM8Wf8zUnT/Iz5d/yE7WP8aNE//GDBL/hMq + Rf0NIjv7Ch83+Q0fN/USJz7tGS1E2yM4TIu5//8JQWJ0BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAACw9P8Cr/b8B6rs/w2w8/8Xq+34Jj5hidAxTIL8J0Fz/yA3YP4vSGT+R22X/luH + uP9fjcD/X4zA/2aWzf9jkMT/VoK8/zFRjv8tSIX/LUV3/y5BWv9UeaP/dqXZ/2aTxf9wotr/b5/X/2WU + yv92pd3/Z5bP/2mYzf9hj8P/RmuV/zxfhv8+Yor/RWeP/0txmv9DaJD/PmKJ/zNUeP8tSmz/MExs/yxI + aP8hO1n/HDdU/xkyTf4ULEb+ECZA/AogOPkLHzf2EyhA7xUpPuAeMkenqvT/CkFidAVTeYkBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsfT/A6z2/Aiy7f8Pr/T/GZnV5jFBZozUNFaH9jld + mP8mQGr+ITNI/ixCW/5EZIr/U3uo/12Kvf9dicD/QWWi/ypFgf8tSIT/KUN7/yExRv9Ma43/ha7a/3ai + 0P9xmsf/ZpC+/2ONvP95qd//eqjd/3Sh1v9nlMj/ZJPK/010of9XgLD/YYy8/0pwnP9GbJj/RGuU/z1i + if87XYD/NVV6/yQ+XP8tSWj/P1+C/yA6Vv8ZMUz+Fi5K/hQrRfwTKEH6CBwz9w8kPPAXK0LhGi1Bu7L1 + /wtCZHYFVHuLAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALH1/wSu9vwItu//ELH1 + /xqQyNs7QmiO10NrnvZCaqH/Hjdp/iU/Zf4bKT3/Gyg6/yU3UP8xTX7/LEmJ/ylGh/8sR4T/J0J6/x8t + Q/9IYn7/aZO+/3uq2/95p9b/fanY/3+u3/90otT/iLXl/3mq4P9/q9z/b6DZ/2ub0v9TfKv/XIq+/1iD + tP9bhbb/SXCc/0Vsl/9CaJH/OFqA/zdXev80UnP/KERl/xw0T/8wTm7/GzNO/hcwTP4TKkX9DiU++gkf + OPYOIzvxHC9F5BktQcCe2eIQY42aBlV8jAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACx9f8Eu///Cavw/xGx9f8bj8baP0pxmtZHcaL0XZbI/0Nso/8fO3X/Eilb/x42aP84WJf/NFGO/zBO + j/8nRIX/KUN7/x0pPP8+V3D/cprD/32s2/98qtf/grHf/3un0/96qdf/hrPf/4u25P93pNX/cZ7P/3yp + 3P9xodn/Vn+v/2OQxP9fjcP/VH+w/1J9rf9KcJ3/R2yV/zxgiP86XYL/M1N3/y5Mbv8nQV//JUBd/x45 + Vv8ZMUz+FCxG/RAoQvoLITv2DiI58REmPOQbMEW/hbzKFYO1vgZXf48CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAsfX/BLv//wmr8P8Rrvb/HJPM3TtOdp/WUXqn70hxpPtJdK3+QGWl/zFR + lP9Eaa7/M1WZ/zBLiP8tSYb/JD52/xolN/8qOkz/ZIeq/4W04f+DsNz/lL7m/4Gs1f+Dsd3/jbrk/5jD + 6/+JuOb/b5vI/3il1v91odH/bZrM/2aWzv9omND/Y4/D/1F6qf9PeKb/THOf/01znv8+Y4v/PV+E/zhX + ev8xTnD/JT9d/yZBX/8eOVX/GjNP/hUuSf0RKED6DSM99gshOPARJj3iGCtBvZzd7w+Dtr4GV4CQAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALH1/wS7//8Jq/D/Ea72/xyg3u4zTXWe01F7 + qO9UgK/5TXar/S5QlP9FbK//NVWW/ytIh/8uSon/J0OB/xcgL/8nNkb/JTNC/0tjfP9be53/OVWD/3Oa + xf93oMb/irbf/4m03P+DsNz/g7He/3+v3/9/sOL/eqre/3Ki1/9un9b/aJnS/1uHuv9ejMH/XIi6/1aA + r/9FapT/RmyV/ztehP87W3//M1J0/yxIaP8lQF7/ITtZ/x43Uv4WLkn9EShB+gwhOvYLHzfwECM64hsx + RbOp7P8NhLfABlqDkwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACx9f8Eu///Cavw + /xGz9f8bsvL/KlB5osZQeaTuWoe5+DZaoP5Caq7/PWCl/ydCfv8tT4z/VovE/yI8df8eNF3/PVZ5/y1D + Zv8fMlP/Jj92/y5Khv8zTH//V3ep/4674v+TwOf/kLvg/4Ww2v+BsN3/fKvb/3yu4f97q9//dKLV/2mZ + 0f93pNn/XozA/1qGuv9OdqT/SnGe/0pxm/9CZY7/O1uB/zRTdv8tSmv/JD9c/yI8Wf8fOVX+FS1H/BIp + Q/oPJD72Ch427xElPN4aMUecrPH/DYa5wgZeiJgCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAsfX/A7D4/Qi27/8QsfX/GrDy/ylWgaatV4Sz6zpdlftCa63/RGqw/yxHg/8hOWT/Ijty/059 + rf9Thrr/KUh8/x01Z/8fOG//JT94/y9Mi/8xTIb/PlmJ/2OFrP+bye3/kr3i/3yjxv+HtN3/jLrm/4a1 + 4/+DsN//eqrd/3ip3f9zo9v/ZpXN/1+OxP9dibv/UXmo/1J8qv9LcZv/QGSN/zhagP8zVXj/K0do/ylG + Zf8jPl3+HjhU/hcxTPwTK0X6DiM89QoeNu4RJz/XIjlLg7L2/wxql6UGYo6eAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAALH0/wOu+P4Isu3/D7D0/xiw8/8mdKfHiVB7q+hAaKj+SXe0/zVW + mv8dOGj/KkR5/xcjOf8VHy3/OlqG/0p3sv9NeLD/XYGz/4Kr1P8yTIT/Q2CX/1Zznf9uksP/V3er/5TA + 4/+Ntdf/mcbt/3+q0/+CsNz/f67d/3il1v+CsOL/apnO/2mZ0v9ikcb/Xou//1aAsP9Wf63/R2uV/0Nm + jv8+YIT/MlN3/zRSc/8qRWP/JD5c/h87V/0aM1D8FS5J+A4hOfQLITrqECU80FV6jF2x9f8LUXmKBWmY + pwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACx9P8Csvn+B6rs/w2w8/8XsPT/JIvC + 2mI+YZTsVoe//0ZwsP8tS4r/HjVa/yQ8bf8VHir/GCIu/0hiev+ArNP/jbng/5O/5P+Xw+X/XoCx/3yi + yf9Zea3/h67U/5a/4P+Ru9v/lL/h/4+74f+Er9f/iLfk/36s2f94ptX/dKTX/3io4P9pmdD/ZZXL/1uJ + vf9Xg7P/V4Cu/0dsmP9Ga5X/OFl9/zRVef80U3T/KkZl/yI9W/4gO1f9GDJN+xcuSPgQJT/yDCE65hkv + RsVunK0zqfT/ClaAkQVxorEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsfT/ArP1 + /gaz9f8MsvL/FbDz/yCk5PM5O1+c72CYyv9KdLb/JkF3/yI9av8hNFf/FB0o/x8qOf9ff53/jLvk/5G9 + 5P+Uv+P/oM7v/5jB4P+kz+7/nsfi/6vW8v+bxeL/msTk/5nG6f+RveP/iLTb/32o0P+HtuT/eajY/3ip + 3f9untT/apvU/2iWy/9ejMH/VYCv/1Z/rf9KcZ3/QmaQ/z5hiP84WX7/LUpq/ylGZf4lP13+HThU/Rkz + UPoUK0T2ECZA7wshOd8SJjuxpuPyEp7d4gleipoEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAALH0/wGw8v4FsPT/CrDw/xKv9v8dsvP/LD1jn+pnnsz/QGuu/yVAcv8dNmT/IDJN/xQc + KP8jLz7/aIyt/4264f+XxOn/l8Pl/6LO7/+gyeb/osvl/7Le9/+s1/H/nMXh/5/L6/+YxOf/lL/k/4m0 + 2v+HteD/eqbR/3Sgzv93p9r/eKjf/2yd1v9dib3/ZJHG/1eBsP9Od6X/SG+a/0Npk/87XoT/N1h9/zBO + cP8pRmb+JEBf/R45VvwaMk75FC1H9BgvSOsNIzrTO1xxbK7t/w6Cv8gIZ5amAwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsPP+A7X7/gmz7v8Pr/T/Ga/z/ydIcKvmbafW/0Nw + s/8nQnT/Hzhk/yM2V/8VHir/ICs5/2KDof+NuuP/mMXq/5/M7v+fyun/pM7o/6zW8P+w2vL/r9r0/6HJ + 5f+izu3/msbn/5fD6P+Rv+j/j7zo/36s2f9/rd3/dKPV/3Ok2v9rnNP/X43A/16MwP9ahbT/Tnak/0px + nf9AZYz/PF6F/zhYfP8vTW7/LEho/iI+W/0fO1j7GTJO9xMqQ/IWLEbkDSI5w3SltjGw9f8Md6m1BnKk + swIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALDz/wKx+P4Hr/H/DbHz + /xWx8/8hSXSu0Hey4P9JdrP/K0d8/xoyWf8kO2f/FBwo/xslMf9LZH3/garO/5G+4f+TvuD/mcTi/6bR + 7v+q1O//qNHp/7Hb9f+p0/D/mMHf/5rH6f+NuN3/jbvk/4Sx2/99q9f/e6ra/3Wl2v9voNb/bJ3V/2OS + x/9hjsP/VYGx/093pf9PdqL/PmGH/ztehv82V3r/MU9z/ihFZP0jP1v8HTdT+h01UvUTK0XtEShB1yVB + V4mw8P8Rsvn/CmiXqAR8ssABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACw9P8Bquz5BbL0/wqv8P8SsPX/G0pzp6d6sdj/XpXS/y1Pj/8aM1n/Ijtu/xcgLf8VHin/HCYx/yg0 + Qv8wP03/SV9y/3KRqv+Rt9L/gqXD/3mcvP+m0e3/oMzr/5S93f+bx+n/jbjd/4Or0v97ps//e6fU/3qq + 2v92p9n/c6Tb/2mZ0P9jkcb/Woe5/1iCsP9SfKz/R2yW/0NnkP88YIX/OVl+/i1Jaf4rSGf9Iz5b+xw0 + TvcbNFDwFy9J4xQtRcFypLU3rez/DorJ0ghypLUDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAKvt+gOm7vcIrez/DrDz/xd2qs5ld6/Z/2CXx/9Hc7f/FjBb/ydA + bf8fMFD/Fh4p/xojLv8lPWb/Ijlg/xYvVP8RJ0v/EyxS/yM9b/8vSHb/lb/e/5nD5P+Zxeb/l8Pp/5bD + 6v+JtN3/hLPg/3+t2/96qdn/cqLV/26g1v9rm9H/aJbL/2GLvP9WgbL/Tnem/0lvmf9HbZT/PmKH/zFQ + cf4xUHL9J0Ni/CM+W/kcNlL0GDBL6xQrQ9U2Vmt7sfH/E630/wttnq8FfbPBAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACs7vsCn97xBa30/wut8P8Sn93uIVuJ + wOuCu+T/VIvG/zFSjf8VLVP/J0R8/xkkNf8cLEb/N1uZ/x04Z/8/YIf/PFd3/y5Jgf8yTYX/T26i/1Fw + ov+Pudv/lsLm/4q33P+SwOn/jLvn/4Kw3P97qtn/d6fZ/3am2v9tnNL/Y5LH/2eSxf9WgrL/UHqp/0dt + mf9PdqH/PWCH/zhZfv4zU3X9LUtr/CZBX/okQF71HDdS7hkyTN0eOFCvkszbJK/t/w6i5+sId6u6A4a/ + zQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArfD8AaHh + 8gOk7PYIrez/DrPz/xZijruFhb7j/3aw3v9Nfrr/Ij5u/xQsVP8pQXP/Lkt8/0Bopv8uSW3/f6bH/2yQ + u/88WJD/PFeM/zxZkP+Cq9H/kr/k/4+84v+Jtt7/h7Xe/4a24f99rNr/dqXV/3Kg0v9zpdv/ZZXL/2WU + y/9fjcL/VYCu/0Npk/9Ufan/RmuT/zpbf/46XYH9NFR2/CxJafsmQl/2ITxZ7xw2UuIbNU/DbJ2uRK3w + /xKt9P8LiL/LBYK5xwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAACj5PQCnNvvBbb6/wqy7/8QouP0HVSEwNmNwuL/dLDk/0JxtP8bNWD/GzRg/zBV + k/85X5r/HC5H/0dedf9rjrP/bJK6/0Vkmv94oc7/TW2d/4y54P+HtNv/hbLc/36r1f+FteP/eKfX/3Cd + zf9vntH/aJjO/2qa0v9kk8j/XIm7/0lwnP9Ufar/TXSg/kJmkP47X4X9M1R1/DVVd/opRmX3JD5c8SI9 + WeUiPFjJSW6BbbDy/xWy8f8Nl9TcB360xAOLxtMBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ/e8QOd4fIGrfD/DLDx/xN+sMhMdKrd+YnA + 4v9kndD/Qmyp/ydCbv8bOGz/I0Fy/xYlO/8cJjL/OEtd/199mv9skbf/gKnR/3+q1f+Kt+H/g7Da/4Ct + 2P+Ardr/fKva/3mp2/9unM7/aJjM/2qd1f9klcv/YY/D/1qHuf9Ea5X/Tnah/kZtl/5BZo79OFl9/DNT + dPouTGz3LElo8CQ+W+YpRGDMQGN4fLHx/Bit7v8Pn+XvCX60wwSJwtABAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACi4vMBnNvvBLH1 + +gi08f8NsfL/FFqJsG51ptL+isLk/2OZyv9Hcq//HTpt/xkxV/8lP3X/IjRW/xgjMf8hLTv/M0RX/0hg + eP9efp3/cZi+/3ilzv9+rNn/eqna/3in1/9vnc//b6HY/1mGtv9tnNP/ZJPI/1R/r/87X4j/U3yo/lF6 + pv1AZIr9QGSM+zhafPoyUHL2LEpq7yhFY+MkQFzNSG2AfKjs9xu18P8Rr/X/C5DJ1QaJwtACAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAKDf8QKa2O0FpO/6Cazt/w+w8/8WXoq2eHWp1/2KwOL/a6TW/0t7uP8wUIr/HDdm/xs1 + Zf8pRob/IDdm/x0tUP8bJzr/IS48/zBCVv9HY3//XYKo/3Wl1f9tm8z/dKbd/2ub0/9bibz+Tnak/mOT + x/47YIf+XYm3/k10oP1Ib5n8RmuS+j9ki/g8XYHzME9v7CxJZ98tSWXEWIOYZrD1/xqx8P8Sq/D/DIzK + 1geKwtEDlM/dAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAntzvApnW7AWy+f8KrO3/D7Dz/xZmlr1hZ5jK9Ie9 + 4f9xqtf/XZLM/0Fnp/8vUJD/GzVp/yhCff8mQXr/HThr/x01Yv8ZK0r/HSs8/ys+U/9PcZX+ZZPD/mud + 0/5ml8z+aJjP/UJplP5kk8P+PmOL/lZ/rPxMc576RmyV+D9jiPU4W3/wNlZ45i5LadcxUG2weq7ARq/1 + /xqs8f8SrvD/DK3v8wiLxNMDldDeAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACc2u4CouDwBrL5 + /wqs7f8Ps/P/FYu/1T5RfbbJcabR/3St1/9YjsH/Qm+s/zxho/83W6T/K0iD/xUlSP8pRob/KEaF/yE/ + d/8wTHX+WICs/Gqc0vxnmM38YY/D/GaVyfs4XIP9VoGv/Txgh/xahLH5SXCa9EJmi/A6W3/oPF+B2Tta + ecVXfph7ndzoKq/0/xmx8P8SrfD/DK7w9AiOx9YEltLgAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAJza7gKY1esFpO75CbHt/w6v8f8TmtniH3OnzWpGcqbdYZnL/2Gazf9Lfrj/ToDD/yNC + fP9HV3T/MVig/zlfpf82W6H/M1ab/mqc0vhqnNL4ZJTH+V6LvPhejL73VYGt9kNokPc5XIL8WIKu8UNn + jORCZovWQ2eJw1Z/moeMw9Q+sPT/Hq/z/xaz7/8RqfD/DKPj6weRzNsEmdbkAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAndvvApjW6wWt9PoIrfD/DLXw/xGw8/8XouTsH32x + 1VZPeaikRnG050Rytf9elcf/S4C8/zxnqf80WJ7/M1WW+1eDu+xqnNHqZ5fK7F6Lu+xfjr3qV4Kv6FaC + r+RCZ4/pRmyU9U92n9BLcJKqb5+4b5TM3ji09f8gr/X/GrLy/xSs7f8Ptvr/Cpja5QeW0+EDndzpAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACe3e8Cm9ntBJzg + 8Ae2+v8Kr+3/DrHx/xOw9P8Ysfb/HXSozGMqSo/9NFia70hwrLlXgq+kdqjMj4G43Ip6rdmfaZjEsGiY + xrVikb26X4y1tFqEq61KcZSwXYqtsIzD3nGY0+U6sfP/JrL1/yCx9f8asfP/FbPv/xGt8P8MpO73CaLf + 6gWc2ugDouLuAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAKHg8QGd3O4DmdjsBaz0+giv9f8LsO3/D7Hx/xOx8/8Wkc/nJanu+iCx9P8ir/P/JrHy + /ymy8/8ssfT/LrD0/y+w9P8vr/T/L7Lz/y2x8/8rsPL/KLD0/ySw8/8gsPb/HbH0/xmx8v8Us+//EbLx + /w2y+f8Kp+zzB53c6gSi4u8CqOn0AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKLi8gKe3e8DouHwBq3z+Qit9P8Lrez/DrDv + /xCz8v8Tr/P/FrL0/xix9f8ar/b/HLH2/x2y9/8esvf/HrL2/x6v9v8dsPX/G7H1/xmy9P8XsvL/FbDw + /xKz7v8PrvH/DLL5/wqp7/YHod/tBaXl8gOp6/YBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAquz4AaPi + 8wKc2u0DmNXqBajq9Ae3+f8JsPX/C67x/w2w7f8PsO//EK3w/xGx8f8StPH/E7Tx/xOy8f8Sr/D/Eqzw + /xG07v8Pru3/DrL2/wyq9P8Ksvf7CaXq9Qam5vQEqOr2A6zu+QEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAApub1AaPi8wGi4fIDoeDyBKLh8gWt8/sHqvP6CLP5/Qm3+f8JqfT/Cqz1 + /wus9f8LqvT/Cq70/wq3+f8JrvX8CKr1/Aeu8PkGqev3Bavt+QOu8PwCr/L9AQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALDz/gGw8/4BsPP+Aq/z + /gOv8/4EsPT+BLD0/wWw9P8FsPT/BbD0/wWw9P8EsPT/BLD0/wOw9P8DsPT/ArH0/wEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAALD0/wGw8/8BsPP/AbD0/wGw8/8BsPP/AQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////////////////////////////////// + //////////////////AH////////AAB///////gAAB//////4AAAA/////+AAAAB/////wAAAAB////+ + AAAAAD////gAAAAAH///8AAAAAAP///gAAAAAAf//+AAAAAAA///wAAAAAAB//+AAAAAAAH//wAAAAAA + AP//AAAAAAAAf/4AAAAAAAB//gAAAAAAAD/+AAAAAAAAP/wAAAAAAAA//AAAAAAAAB/8AAAAAAAAH/gA + AAAAAAAf+AAAAAAAAB/4AAAAAAAAD/gAAAAAAAAP+AAAAAAAAA/4AAAAAAAAD/gAAAAAAAAP+AAAAAAA + AA/4AAAAAAAAD/gAAAAAAAAP+AAAAAAAAA/4AAAAAAAAD/gAAAAAAAAf+AAAAAAAAB/8AAAAAAAAH/wA + AAAAAAAf/AAAAAAAAD/+AAAAAAAAP/4AAAAAAAA//gAAAAAAAH//AAAAAAAAf/+AAAAAAAD//4AAAAAA + Af//wAAAAAAB///gAAAAAAP///AAAAAAB///+AAAAAAP///8AAAAAB////4AAAAAP////wAAAAB///// + wAAAAf/////gAAAH//////gAAB///////wAA////////+B////////////////////////////////// + //8oAAAAMAAAAGAAAAABACAAAAAAAIAlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + gPlCZo/8Q2iR/kpxnf9JcJr+Tnem/1F7qv9Ufq/+T3mk/yE0U/83U3T+XYe4/1mDs/9Reqn+Unuo/093 + pv9JcJv+RWuV/0RpkP87XoT+N1d6/ypGZP8pQ2D/Iz1b/iA6V/8aM0//FS1H/g8lP/wJHjX6DyM69BUp + P+obLkLKb6KuFz9gcQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK7x/AKt8/sIrvH/E4S5 + 01EpQ2zvIjtg+y9Mc/xEaZL9SXCb/k53pf9PeKX+Woa4/12Ju/9ikcP+OFuM/yQ5Wf9BYIX+Z5bN/2KQ + xf9olMj+XYi7/1iCsv9TfKr+SW+a/0NnkP9AZY7+ME9w/y5La/8fNlH/MU5v/iQ+XP8cNlP/GTJO/hMp + Q/0LIDn7DSE59hImPO8cMEXWaJSkQkpvfwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK7x + /AOv8/wKsfP+Fm6dvHYnQGz2Gi9Y/ipGav1Kcp79UXqo/lWBsv5bh7n+X4y//mGPxP5Pd63+J0By/ixB + Xf5iirn+aJfN/mub0/5kk8n+YI7C/mOPwv5XgbH+VoCu/k10n/4+YIf+Ol2D/jlbgf4wT3H+LElp/iZC + Yf4gOlj+GjNO/hQsRv0OJD37Ch82+BAjOvEaLkTeSWt6Z3GfqgZRd4YBAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAK/z/QWt8f4MsPT/GXGiu3o0UoP1JkB0/yc9W/4+XoP+WoW1/l+Mv/9llMv+XIe+/zxe + mv8qRoP+KT5k/0dlh/92o9T+aZbI/22c0f9ol83+caDX/2ya0P9llMn+RmuU/0Vqlf9GapL+SW+Z/0Bl + jP84Wn//LElq/jJQcf8sSGj/HDZT/hYuSv4RKEL8DCE6+Q4iOfMWKkDkQV90g3WtuAdQdYUCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAsfX/Aa7z/AWz8v4OsPT/HGKPrIg9YpPwM1aO/ydAY/4gMUb/MUll/kRk + jf9DZ6D+L02M/yxIg/8kOmb+OlFr/3Cbx/95ptX+d6LQ/2yXxv98qt/+e6vg/22b0P9mlcz+Unur/16J + vP9Vfq3+R22Z/0Jokf86XIH/MVBz/ilFY/8qRWP/JUBe/hgxTf4TK0X9DiQ8+QsgOfMWKkHmPFhsk3+z + vglRd4cCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsfX+AbT4/gav8/4PsfT+HmOQr45JcqLvU4W6/ixM + hP4WLVv+HzRf/jBMhv4xT4/+K0iK/iQ5Y/4wRFr+bZW8/nqo1v5/rdv+eqfV/n+t2/6Nueb+cqDS/nuo + 2v52ptz+WoS0/lyJvf5Xg7T+T3in/kZslv4+Yon+OFp//jBPcv4mQF7+JUBe/hs0UP4VLEf9DyY/+Qsg + OPQUKD7mKkVYlp7a4QtTeYoCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsfX/Abb6/wau8/4PrvX/HmmY + topQeaXsTXap+0Nqpf42WJz/Ol2h/jNQkP8rR4X+HzJa/yEuPv9VcpD+fqrV/3+n0v+Crdb+hrTg/5K9 + 5/+LuOX+c6DO/32r3f9smcz+aZnS/2GPw/9YhLX+U3yr/0xynf9DZ5H/O12C/jNRdP8oQ2L/JD9d/h43 + U/4WLkr9ESdA+QogOfMQJDvlOVhskKLg7ApUe4wDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsfX/Abb6 + /wau8/4PsfT/HnywzHxPeaXqVoK0+T1ipP48Yqf/LUuJ/jxhoP8lQX3+ITFJ/zJFXP8wQln+OVSE/z1Z + iv9bfqv+jbng/4m03P+Gst7+f63b/32t3/93p9v+bZ3T/2mYzv9jkcb+WYS2/012o/9GbJb/QGKK/jhY + e/8vTG3/JUBd/h85Vf4XL0r9ECdA+QsgOPMPIzrjPV5yg6Xk7wlYgJEDAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAsfX+AbH2/gaz8/4OsfT+HYS70mZUfqvmQGWf/EFprf41U5L+IDlr/jxilf5MfLH+JkJ2/iA5 + bP4iO3H+LkqI/jdRiP5fgKr+mcbs/oy43f5+qM/+i7nm/oGw3/58rN7+dqXa/m6e1v5hj8T+Woa4/lB4 + pv5Mcp3+P2KK/jVWev4uS23+J0Ni/iE7WP4YMU38EipE+QwgOfIPJDzdRGV4aJrX3gldiJgCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAALD1/gWv8f4NsPT/Gp3b7UVNdqTfSHOx/j9lpv8iPXD/JTtp/hUf + Lf8yS2z+WIS5/2KKvP+BqtL+QFyS/0xqm/9vk7/+c5fD/5C63P+SvuP+gazV/3+t2v97qtr+eajb/2uc + 0/9kk8n+XIm9/1eBsP9LcJz/RGeP/jZXe/80U3X/KENh/iE8Wf4bNVH8FCpF9w0hOu8QJTzUb5uuQ3+4 + xAhmk6MCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALL1/gSx8/4LsPT/GKrq+DFNdKbNWY3E/zlc + nP8cNWD/HzFT/hcgLP9IYXr+ibbe/5K/5P+ax+n+f6XN/4211/+Otdr+mcLh/5S+3/+Tv+X+h7Tc/4Kw + 3P96qNf+daXZ/2+f1v9llcv+XIm9/1N9q/9Mc57/QmaP/jdZfv8xT3H/KUZl/iA6V/0aM0/7FStF9g4j + PeoTKD/FkcvaG3+4wwdwoa8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALDz/gOv8/4JsPL+FLD0 + /iVZhra9YJbJ/jNVlP4cNWL+HS1F/hkiLv5YdpL+jbvi/pXC5v6ey+v+ocrn/qrV7/6s1/L+nsnm/pvH + 6P6UwOX+iLPa/oCt2P53pNL+eKjc/nGi2f5jkcf+YY7B/lN9rP5JcJz+QmeQ/jlbgf4yUHP+KEVk/iE9 + Wv0aNFD6Fi5I8xAmPuEoRFmOr/H+DWeXpgUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALDz + /gGy+P4HsO//ELD0/x5gkL+1Z6DT/zdamP8cNmD/HzBN/hghLf9SbYf+jrzj/5rI6/+fyun+ptDr/6vU + 7P+w2/X+o83p/5zI6P+VwOX+j7zl/4W04P99q9n+daTY/2+h2P9hkMT+Xou//1J8q/9Lc5//PmKI/jpb + gf8xT3H+KUVl/SA9WvwbNFD4FCtF7hIoP9FnlKdIo+XvCm6ergMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAACv8vwFsvP/DbDz/xhjk8CUcanW/z9npv8aMlr/IDVc/hUeKv8rOkr+WHSM/2yN + qP+Jr8z+oszp/5vD3v+m0Or+o87s/5fB4v+RvOH+hrLa/32p1P98q9v+dabZ/26f1v9llMr+XYq9/1J9 + rP9NdKD/QGSL/jlbgP8xT3H+J0Ri/SA6VvobM0/zFSxF5CNAV6Ch3e0XktDYB3equgIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACs7/sDqu/6Ca7x/xN+tNNddq7a/1KEwP8fO2v/JDxp/hgi + Mv8YIS3+IzdZ/xsvTv8gNlX+LUlt/zROfP+Eqsz+mMLi/5nF6f+Vwef+hrLb/4Cu3P96qdj+caLV/2yd + 1P9nlcn+XYi5/1N+rv9Jb5r/RGmR/jlafv4wTm/9KEVj+x84VPcZMk3uFi1Gz2qYqkit8v8Ndam4BYS8 + ygEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACs8PwBoeTzBq3w/g2m5vUcZZTF4nKt + 3f5Aaab+GjNc/iA1Xf4eLkj+NVeT/jdVff5Ma47+MUuE/jtWjP5fgrH+k77h/o663v6Pveb+hrTf/n+u + 3P52pdb+dKXa/maVy/5kkcX+VYGx/klxnf5NdJ/+O12D/jVVeP0tTGz8JUFf+B87V/AZM07cQmZ7f6rp + +BSj5e0JfLHAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoODyA6jt + +Qmx8P4Rea/Vc32z2/xlndL/LE+H/h43ZP8tTYX+M1eN/0hifP9tkbj+S2ud/1Bwo/9dgK7+jLnf/4m2 + 3v+DsNr+hbXi/3em1f9xoNL+bJzT/2WUy/9ejMH+S3Of/094o/9Ga5X+O16E/TZXefwsSWn5JD9d8iA6 + VuInRFyqmdflIavt+gyCu8kFicPRAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAApeb1AaDh8gWs7/0Mqun5G2aWwr2IwOT/V4zD/ipIe/8fPXD+IT5t/xwoN/88UGX+aYyt/22T + vf93oMz+ibfg/4Ow2/9/rNj+fq3d/3Kg0f9qmcz+aJnR/2SUyf9cirz+Q2mT/lJ7p/5CZ5D9OFp9/DFQ + cfksSWnyJD9b5CtIYraLwtA3rvD+D5TS3QeFvcwCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAKDf8QKn6PUGsPH+DpjV6SpjkL3Sg7zg/l+TyP4uUYn+GjNd/iQ9 + bP4fL0z+Ii9B/jNFWP5OaYT+Zoqu/nWhy/57qtr+dKPU/nCg1f5cibv+Z5XL/liEtf5Fa5X+Unqm/khu + mf0+Y4r7N1h7+C9NbfEoRWPhME9orovE0jix8P4RpOfxCYnBzwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////////AAD///////8AAP///////wAA////////AAD//+AH//8AAP// + AAD//wAA//wAAD//AAD/8AAAD/8AAP/gAAAH/wAA/8AAAAP/AAD/gAAAAf8AAP8AAAAA/wAA/gAAAAB/ + AAD+AAAAAD8AAPwAAAAAPwAA/AAAAAAfAAD4AAAAAB8AAPgAAAAADwAA8AAAAAAPAADwAAAAAA8AAPAA + AAAABwAA8AAAAAAHAADgAAAAAAcAAOAAAAAABwAA4AAAAAAHAADgAAAAAAcAAOAAAAAABwAA8AAAAAAH + AADwAAAAAAcAAPAAAAAADwAA8AAAAAAPAAD4AAAAAA8AAPgAAAAADwAA+AAAAAAfAAD8AAAAAB8AAPwA + AAAAPwAA/gAAAAB/AAD/AAAAAH8AAP+AAAAA/wAA/8AAAAH/AAD/4AAAA/8AAP/wAAAH/wAA//gAAB// + AAD//gAAf/8AAP//wAH//wAA///8P///AAD///////8AAP///////wAAKAAAACAAAABAAAAAAQAgAAAA + AACAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + if8pRYP/KDxa/2iPtv98q9r/fKrY/4Ow3/94ptj/cqHY/1qFt/9Zhbf/S3Kf/z9ki/82Vnr/JkFg/yM+ + XP4WLkn9DSM8+BImPepWfYxpZI+dBAAAAAAAAAAAAAAAAAAAAACx9f8Cs/f/DaTl8ilPeKPiTHar/Dlc + n/82Vpn/LUiG/x8uSf8/Vm3/Z423/4Cp0f+Jtd//irfj/3mo1/90otT/aZnR/1uHuv9TfKz/RmuU/ztc + gP8tSWr/Iz1b/xgxTf0PJT74DSI56V6JnWNunKgEAAAAAAAAAAAAAAAAAAAAALH1/wKz9f4MsfT/IlN+ + qNNDaqf8PF+i/yZBeP9Gcqj/KEJu/yQ7aP8tSIP/SmiX/5TA5v+GsNf/hLPg/32t3/9yotf/Z5XK/1WA + sP9Mc5//PWCH/zBOcP8kQF7+GjRP/RAnQPgOIjnkZ5SkTmyapwQAAAAAAAAAAAAAAAAAAAAAsfT/Aa/z + /guw9P8eY5G4sEl1s/4nQ3n/HzBS/yw/V/9plcX/gqvU/1R0pf9pi7j/hazS/5K94f+DsNr/e6nY/3al + 2v9mls3/Woa4/051ov9AYon/NFN2/yZCYP4cN1P8EyhC9hAlPdmHwM4pYI2dAwAAAAAAAAAAAAAAAAAA + AAAAAAAAsfT+CLDz/xlzpsuPVIW//yI9bv8aKD3/Qllw/5C+5P+bx+n/oMnm/6rU7/+cxuT/lcLl/4Wx + 2f97qdf/daXa/2aWzf9biLr/TXWi/z9kjP8zUnX/J0Ni/hs2UvsUK0XxGTFItJ3b5wxwobACAAAAAAAA + AAAAAAAAAAAAAAAAAACx9v4FsfH/Enyz1n9ckMf/Iz1r/xwrRP86TmL/jrrf/5vG5v+o0u3/rtjx/6HL + 6P+WwuX/jLrk/32r2v9zo9j/ZpbM/1uIuv9NdaL/PWCH/zNSdv4mQmH9HDZS+BMqROZVfpFjkMvWCAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3w/AKt8P0MiMHcT2yj0v8pSX7/HzNW/xghLP8nOlX/OFFv/1Jx + lf95nb//mcTl/5XB5v+Drtj/e6rZ/3Kj2P9ol8z/WoW2/0x0oP9BZYz/MlBy/iZCYPsaM0/xHTdPvZ/d + 7Bh5r74EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKTo9ger6/oWcaTR21KDu/8dN2T/Izda/zFR + hP9Ze6D/NlGI/1d5qf+RveL/i7jg/4Sz3/92pdb/b5/U/2ORxv9Peaf/THOe/zpcgf4wT3D8JEBd9Rs1 + UNxypLZKoeLtCoS8ygEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoeHzAqzu+wuJwt5VgLfh/UFr + o/8jQXP/JD1k/0FXbv9fgan/cZjE/4i13v+Brtn/fazc/22czv9omdD/XozA/0xzn/5Fa5X+Nlh7/C5M + bPYkP1ziV4CTcqvu+w+Hv80EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAouLyBK3w + /Q53q81+e7Ha/kZzqv8iPm//IDVd/yQ1Uv84TWP/WHiY/3OfzP9yodT/ZJPH/mCOwf5Kcp3+Tnai/UFm + jfo1VXf0K0hm3V2JnXKu7/0SldLeB5TQ3QEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAouLyBa/y/w+DuNZqb6LQ8VqNwv8yVZL/LEqH/x42Zv8gN2H/QF+C/miZzf1llcr8TXai/Upy + nPxHbZb1O16C6T1efL9+tMVOrvH/Eqbl7wiW0t8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAnN3vBa7w/Q2c2esscqjNlFCBuOJFcq//QGWe/zZanv5XhL7zZZTH8lyK + uvBMdJ/uSXCY7E93mLV4qsBpp+f0IrHy/xCe4OwHm9nmAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnd3vA6rt+Qmw8v8RouDyKmaXwoyAttZpltHpXJHL + 5muKxOBzh77XboK4z2uh4PA6sfT/HbLy/xOu8fwLoePuBaTl8QEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApuf1AaPk8gWm6PcJsvT/DrDx + /xKv8v8WsvP/GLL0/xiu8/8XsfH/E6/z/w+u8PsLqu74Bqjp9QIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKnq + +AGo6vgDrfP8BbL2/gat9P8HrfT/B7H1/weu9P0FrvD7A67x/AEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////////////////4Af//4AB//8A + AH/8AAA/+AAAH/gAAA/wAAAP8AAAB+AAAAfgAAAD4AAAA8AAAAPAAAADwAAAA8AAAAPAAAAD4AAAA+AA + AAfgAAAH8AAAB/AAAA/4AAAP/AAAH/4AAD//AAB//4AB///gB////////////ygAAAAYAAAAMAAAAAEA + IAAAAAAAYAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAHitugFmlqQDbJ6sBVN+jg5Hbn0ZSnGAD0RoeAM9Xm4BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACFvswBerC/BXSntidGa35/GS9Gwg4i + OeEPIzrkEyg+4B41SsMzUWJ/Pl9wKDVRYwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + AADgBwAA+B8AAP//AAA= + + + \ No newline at end of file diff --git a/LibraryEditor/LibraryEditor.csproj b/LibraryEditor/LibraryEditor.csproj new file mode 100644 index 0000000..b5505a8 --- /dev/null +++ b/LibraryEditor/LibraryEditor.csproj @@ -0,0 +1,53 @@ + + + + WinExe + net8.0-windows7.0 + disable + true + enable + lizard.ico + x64 + ..\Build\Server Tools\LibraryEditor\ + True + + + + false + false + + + + + + + + + + + + + + ..\Components\dotnet zlib\Ionic.Zlib.dll + + + ..\Components\Squish 2.0\ManagedSquish.dll + + + + + + True + True + Resources.resx + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + + \ No newline at end of file diff --git a/LibraryEditor/Program.cs b/LibraryEditor/Program.cs new file mode 100644 index 0000000..dccbca5 --- /dev/null +++ b/LibraryEditor/Program.cs @@ -0,0 +1,30 @@ +using System; +using System.IO; +using System.Windows.Forms; + +namespace LibraryEditor +{ + internal static class Program + { + public static string openFileWith { get; set; } = string.Empty; + /// + /// The main entry point for the application. + /// + [STAThread] + private static void Main(string[] args) + { + if (args.Length == 1) + { + FileInfo file = new FileInfo(args[0]); + if (file.Exists) + { + openFileWith = args[0]; + } + } + + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new LMain()); + } + } +} \ No newline at end of file diff --git a/LibraryEditor/Properties/Resources.Designer.cs b/LibraryEditor/Properties/Resources.Designer.cs new file mode 100644 index 0000000..38b084b --- /dev/null +++ b/LibraryEditor/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace LibraryEditor.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", "17.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// 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("LibraryEditor.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/LibraryEditor/Properties/Resources.resx b/LibraryEditor/Properties/Resources.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/LibraryEditor/Properties/Resources.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/LibraryEditor/Resources/BackgroundPicBox.BackgroundImage.bmp b/LibraryEditor/Resources/BackgroundPicBox.BackgroundImage.bmp new file mode 100644 index 0000000..de665a9 Binary files /dev/null and b/LibraryEditor/Resources/BackgroundPicBox.BackgroundImage.bmp differ diff --git a/LibraryEditor/Resources/BackgroundPicBox1.Image.png b/LibraryEditor/Resources/BackgroundPicBox1.Image.png new file mode 100644 index 0000000..63493dc Binary files /dev/null and b/LibraryEditor/Resources/BackgroundPicBox1.Image.png differ diff --git a/LibraryEditor/Resources/BackgroundSwap.Image.png b/LibraryEditor/Resources/BackgroundSwap.Image.png new file mode 100644 index 0000000..bc604d6 Binary files /dev/null and b/LibraryEditor/Resources/BackgroundSwap.Image.png differ diff --git a/LibraryEditor/lizard.ico b/LibraryEditor/lizard.ico new file mode 100644 index 0000000..0ed9fe7 Binary files /dev/null and b/LibraryEditor/lizard.ico differ diff --git a/LibraryViewer/LMain.Designer.cs b/LibraryViewer/LMain.Designer.cs new file mode 100644 index 0000000..ead24db --- /dev/null +++ b/LibraryViewer/LMain.Designer.cs @@ -0,0 +1,346 @@ +namespace LibraryViewer +{ + partial class LMain + { + /// + /// 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.MainMenu = new System.Windows.Forms.MenuStrip(); + this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.openMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.ImageList = new System.Windows.Forms.ImageList(this.components); + this.LibraryFolderDialog = new System.Windows.Forms.FolderBrowserDialog(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.DebugBox = new System.Windows.Forms.TextBox(); + this.checkCenter = new System.Windows.Forms.CheckBox(); + this.checkBackground = new System.Windows.Forms.CheckBox(); + this.HeightLabel = new System.Windows.Forms.Label(); + this.LblHeight = new System.Windows.Forms.Label(); + this.LibNameLabel = new System.Windows.Forms.Label(); + this.LibCountLabel = new System.Windows.Forms.Label(); + this.WidthLabel = new System.Windows.Forms.Label(); + this.LblLibName = new System.Windows.Forms.Label(); + this.LblLibCount = new System.Windows.Forms.Label(); + this.LblWidth = new System.Windows.Forms.Label(); + this.ImageBox = new System.Windows.Forms.PictureBox(); + this.PreviewListView = new CustomFormControl.FixedListView(); + this.ExportImagesButton = new System.Windows.Forms.Button(); + this.MainMenu.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.Panel2.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ImageBox)).BeginInit(); + this.SuspendLayout(); + // + // MainMenu + // + this.MainMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.fileToolStripMenuItem}); + this.MainMenu.Location = new System.Drawing.Point(0, 0); + this.MainMenu.Name = "MainMenu"; + this.MainMenu.Size = new System.Drawing.Size(863, 24); + this.MainMenu.TabIndex = 0; + this.MainMenu.Text = "menuStrip1"; + // + // fileToolStripMenuItem + // + this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.openMenuItem}); + this.fileToolStripMenuItem.Name = "fileToolStripMenuItem"; + this.fileToolStripMenuItem.Size = new System.Drawing.Size(52, 20); + this.fileToolStripMenuItem.Text = "Folder"; + // + // openMenuItem + // + this.openMenuItem.Name = "openMenuItem"; + this.openMenuItem.Size = new System.Drawing.Size(103, 22); + this.openMenuItem.Text = "Open"; + this.openMenuItem.Click += new System.EventHandler(this.openToolStripMenuItem_Click); + // + // ImageList + // + this.ImageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit; + this.ImageList.ImageSize = new System.Drawing.Size(64, 64); + this.ImageList.TransparentColor = System.Drawing.Color.Transparent; + // + // LibraryFolderDialog + // + this.LibraryFolderDialog.ShowNewFolderButton = false; + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.Location = new System.Drawing.Point(0, 24); + this.splitContainer1.Name = "splitContainer1"; + this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.splitContainer2); + this.splitContainer1.Panel1MinSize = 150; + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.PreviewListView); + this.splitContainer1.Size = new System.Drawing.Size(863, 507); + this.splitContainer1.SplitterDistance = 250; + this.splitContainer1.TabIndex = 1; + // + // splitContainer2 + // + this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer2.Location = new System.Drawing.Point(0, 0); + this.splitContainer2.MinimumSize = new System.Drawing.Size(0, 200); + this.splitContainer2.Name = "splitContainer2"; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.Controls.Add(this.ExportImagesButton); + this.splitContainer2.Panel1.Controls.Add(this.DebugBox); + this.splitContainer2.Panel1.Controls.Add(this.checkCenter); + this.splitContainer2.Panel1.Controls.Add(this.checkBackground); + this.splitContainer2.Panel1.Controls.Add(this.HeightLabel); + this.splitContainer2.Panel1.Controls.Add(this.LblHeight); + this.splitContainer2.Panel1.Controls.Add(this.LibNameLabel); + this.splitContainer2.Panel1.Controls.Add(this.LibCountLabel); + this.splitContainer2.Panel1.Controls.Add(this.WidthLabel); + this.splitContainer2.Panel1.Controls.Add(this.LblLibName); + this.splitContainer2.Panel1.Controls.Add(this.LblLibCount); + this.splitContainer2.Panel1.Controls.Add(this.LblWidth); + this.splitContainer2.Panel1MinSize = 150; + // + // splitContainer2.Panel2 + // + this.splitContainer2.Panel2.Controls.Add(this.ImageBox); + this.splitContainer2.Panel2MinSize = 250; + this.splitContainer2.Size = new System.Drawing.Size(863, 250); + this.splitContainer2.SplitterDistance = 173; + this.splitContainer2.TabIndex = 0; + // + // DebugBox + // + this.DebugBox.Location = new System.Drawing.Point(3, 182); + this.DebugBox.Multiline = true; + this.DebugBox.Name = "DebugBox"; + this.DebugBox.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.DebugBox.Size = new System.Drawing.Size(168, 65); + this.DebugBox.TabIndex = 6; + this.DebugBox.Visible = false; + // + // checkCenter + // + this.checkCenter.AutoSize = true; + this.checkCenter.Checked = true; + this.checkCenter.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkCenter.Location = new System.Drawing.Point(12, 106); + this.checkCenter.Name = "checkCenter"; + this.checkCenter.Size = new System.Drawing.Size(57, 17); + this.checkCenter.TabIndex = 5; + this.checkCenter.Text = "Center"; + this.checkCenter.UseVisualStyleBackColor = true; + this.checkCenter.CheckedChanged += new System.EventHandler(this.checkCenter_CheckedChanged); + // + // checkBackground + // + this.checkBackground.AutoSize = true; + this.checkBackground.Checked = true; + this.checkBackground.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBackground.Location = new System.Drawing.Point(12, 83); + this.checkBackground.Name = "checkBackground"; + this.checkBackground.Size = new System.Drawing.Size(84, 17); + this.checkBackground.TabIndex = 4; + this.checkBackground.Text = "Background"; + this.checkBackground.UseVisualStyleBackColor = true; + this.checkBackground.CheckedChanged += new System.EventHandler(this.checkBackground_CheckedChanged); + // + // HeightLabel + // + this.HeightLabel.AutoSize = true; + this.HeightLabel.Location = new System.Drawing.Point(56, 58); + this.HeightLabel.Name = "HeightLabel"; + this.HeightLabel.Size = new System.Drawing.Size(65, 13); + this.HeightLabel.TabIndex = 3; + this.HeightLabel.Text = ""; + // + // LblHeight + // + this.LblHeight.AutoSize = true; + this.LblHeight.Location = new System.Drawing.Point(12, 58); + this.LblHeight.Name = "LblHeight"; + this.LblHeight.Size = new System.Drawing.Size(41, 13); + this.LblHeight.TabIndex = 2; + this.LblHeight.Text = "Height:"; + // + // LibNameLabel + // + this.LibNameLabel.AutoSize = true; + this.LibNameLabel.Location = new System.Drawing.Point(59, 24); + this.LibNameLabel.Name = "LibNameLabel"; + this.LibNameLabel.Size = new System.Drawing.Size(80, 13); + this.LibNameLabel.TabIndex = 1; + this.LibNameLabel.Text = ""; + // + // LibCountLabel + // + this.LibCountLabel.AutoSize = true; + this.LibCountLabel.Location = new System.Drawing.Point(59, 9); + this.LibCountLabel.Name = "LibCountLabel"; + this.LibCountLabel.Size = new System.Drawing.Size(13, 13); + this.LibCountLabel.TabIndex = 1; + this.LibCountLabel.Text = "0"; + // + // WidthLabel + // + this.WidthLabel.AutoSize = true; + this.WidthLabel.Location = new System.Drawing.Point(56, 45); + this.WidthLabel.Name = "WidthLabel"; + this.WidthLabel.Size = new System.Drawing.Size(65, 13); + this.WidthLabel.TabIndex = 1; + this.WidthLabel.Text = ""; + // + // LblLibName + // + this.LblLibName.AutoSize = true; + this.LblLibName.Location = new System.Drawing.Point(12, 24); + this.LblLibName.Name = "LblLibName"; + this.LblLibName.Size = new System.Drawing.Size(37, 13); + this.LblLibName.TabIndex = 0; + this.LblLibName.Text = "Libfile:"; + // + // LblLibCount + // + this.LblLibCount.AutoSize = true; + this.LblLibCount.Location = new System.Drawing.Point(12, 9); + this.LblLibCount.Name = "LblLibCount"; + this.LblLibCount.Size = new System.Drawing.Size(51, 13); + this.LblLibCount.TabIndex = 0; + this.LblLibCount.Text = "Libcount:"; + // + // LblWidth + // + this.LblWidth.AutoSize = true; + this.LblWidth.Location = new System.Drawing.Point(12, 45); + this.LblWidth.Name = "LblWidth"; + this.LblWidth.Size = new System.Drawing.Size(38, 13); + this.LblWidth.TabIndex = 0; + this.LblWidth.Text = "Width:"; + // + // ImageBox + // + this.ImageBox.BackColor = System.Drawing.Color.White; + this.ImageBox.Dock = System.Windows.Forms.DockStyle.Fill; + this.ImageBox.Location = new System.Drawing.Point(0, 0); + this.ImageBox.Name = "ImageBox"; + this.ImageBox.Size = new System.Drawing.Size(686, 250); + this.ImageBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.ImageBox.TabIndex = 0; + this.ImageBox.TabStop = false; + // + // PreviewListView + // + this.PreviewListView.BackgroundImageTiled = true; + this.PreviewListView.Dock = System.Windows.Forms.DockStyle.Fill; + this.PreviewListView.LargeImageList = this.ImageList; + this.PreviewListView.Location = new System.Drawing.Point(0, 0); + this.PreviewListView.Name = "PreviewListView"; + this.PreviewListView.ShowItemToolTips = true; + this.PreviewListView.Size = new System.Drawing.Size(863, 253); + this.PreviewListView.TabIndex = 0; + this.PreviewListView.UseCompatibleStateImageBehavior = false; + this.PreviewListView.VirtualMode = true; + this.PreviewListView.RetrieveVirtualItem += new System.Windows.Forms.RetrieveVirtualItemEventHandler(this.PreviewListView_RetrieveVirtualItem); + this.PreviewListView.SelectedIndexChanged += new System.EventHandler(this.PreviewListView_SelectedIndexChanged); + // + // ExportImagesButton + // + this.ExportImagesButton.Location = new System.Drawing.Point(12, 130); + this.ExportImagesButton.Name = "ExportImagesButton"; + this.ExportImagesButton.Size = new System.Drawing.Size(84, 23); + this.ExportImagesButton.TabIndex = 7; + this.ExportImagesButton.Text = "Export Images"; + this.ExportImagesButton.UseVisualStyleBackColor = true; + this.ExportImagesButton.Click += new System.EventHandler(this.ExportImagesButton_Click); + // + // LMain + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(863, 531); + this.Controls.Add(this.splitContainer1); + this.Controls.Add(this.MainMenu); + this.MainMenuStrip = this.MainMenu; + this.Name = "LMain"; + this.Text = "C# Library Viewer"; + this.MainMenu.ResumeLayout(false); + this.MainMenu.PerformLayout(); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.splitContainer2.Panel1.ResumeLayout(false); + this.splitContainer2.Panel1.PerformLayout(); + this.splitContainer2.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); + this.splitContainer2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.ImageBox)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.MenuStrip MainMenu; + private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem openMenuItem; + private System.Windows.Forms.ImageList ImageList; + private System.Windows.Forms.FolderBrowserDialog LibraryFolderDialog; + private System.Windows.Forms.SplitContainer splitContainer1; + private System.Windows.Forms.SplitContainer splitContainer2; + private System.Windows.Forms.CheckBox checkCenter; + private System.Windows.Forms.CheckBox checkBackground; + private System.Windows.Forms.Label HeightLabel; + private System.Windows.Forms.Label LblHeight; + private System.Windows.Forms.Label LibCountLabel; + private System.Windows.Forms.Label WidthLabel; + private System.Windows.Forms.Label LblLibCount; + private System.Windows.Forms.Label LblWidth; + private System.Windows.Forms.PictureBox ImageBox; + private CustomFormControl.FixedListView PreviewListView; + private System.Windows.Forms.Label LibNameLabel; + private System.Windows.Forms.Label LblLibName; + private System.Windows.Forms.TextBox DebugBox; + private System.Windows.Forms.Button ExportImagesButton; + } +} + diff --git a/LibraryViewer/LMain.cs b/LibraryViewer/LMain.cs new file mode 100644 index 0000000..3150743 --- /dev/null +++ b/LibraryViewer/LMain.cs @@ -0,0 +1,300 @@ +using System; +using System.Linq; +using System.Diagnostics; +using System.Collections.Generic; +using System.Drawing; +using System.Drawing.Imaging; +using System.IO; +using System.Runtime.InteropServices; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace LibraryViewer +{ + public partial class LMain : Form + { + private readonly Dictionary _indexList = new Dictionary(); + private List _LImageList = new List(); + private List _NameList = new List(); + private MLibrary _library; + private string folderName = ""; + private bool showFrontSide = false; + + [DllImport("user32.dll")] + private static extern int SendMessage(IntPtr hWnd, int msg, int wParam, int lParam); + public LMain() + { + InitializeComponent(); + SendMessage(PreviewListView.Handle, 4149, 0, 5242946); //80 x 66 + } + + private void ClearInterface() + { + ImageBox.Image = null; + + WidthLabel.Text = ""; + HeightLabel.Text = ""; + LibNameLabel.Text = ""; + LibCountLabel.Text = ImageList.Images.Count.ToString(); + } + + private void openToolStripMenuItem_Click(object sender, EventArgs e) + { + DialogResult result = LibraryFolderDialog.ShowDialog(); + if (result != DialogResult.OK) return; + + ClearInterface(); + ImageList.Images.Clear(); + _indexList.Clear(); + _LImageList.Clear(); + PreviewListView.VirtualListSize = 0; + PreviewListView.Items.Clear(); + + DebugBox.Clear(); + + folderName = LibraryFolderDialog.SelectedPath; + + LoadSettings form = new LoadSettings(); + form.ShowDialog(); + + showFrontSide = form.GetFrontSide(); + + string Prefix = ""; + if (form.GetManualPrefix()) + Prefix = form.GetPrefix(); + else + foreach (string file in Directory.EnumerateFiles(folderName, "*.lib")) + { + Prefix = Path.GetFileNameWithoutExtension(file); + break; + } + + //DebugBox.Text += "Showfront: "+showFrontSide.ToString() + "\r\n"; + //DebugBox.Text += "Prefix: "+Prefix + "\r\n"; + Program.LoadFailed = false; + + MessageBox.Show("This can take a while.\n Press 'OK' to Start."); + + + Stopwatch sw = Stopwatch.StartNew();//Timing + int folderLength = Directory.GetFiles(folderName, "*.lib").Length; + for (int i = 0; i < folderLength; i++) + { + string PathName = folderName+Path.DirectorySeparatorChar; + string flName = i.ToString(Prefix) + ".lib"; + string fullname = PathName + flName; + + if (File.Exists(fullname)) + { + //DebugBox.Text += fullname + "\r\n"; + + if (_library != null) _library.Close(); + _library = new MLibrary(fullname); + if (Program.LoadFailed) + { + break; + } + + _NameList.Add(Path.GetFileName(fullname)); + + PreviewListView.VirtualListSize = ImageList.Images.Count + 1; + } + } + sw.Stop();//Timing + + LibCountLabel.Text = ImageList.Images.Count.ToString(); + + + if (ImageList.Images.Count < 1) + MessageBox.Show("No images seem to be found.\nMake sure you choose the right prefix!"); + else + MessageBox.Show("Folder processing finally finished.\nTime Taken: " + sw.Elapsed.TotalMilliseconds + "ms"); + } + + private void PreviewListView_SelectedIndexChanged(object sender, EventArgs e) + { + if (PreviewListView.SelectedIndices.Count == 0) + { + ClearInterface(); + return; + } + ImageBox.Image = _LImageList[PreviewListView.SelectedIndices[0]]; + + WidthLabel.Text = ImageBox.Image.Width.ToString(); + HeightLabel.Text = ImageBox.Image.Height.ToString(); + LibNameLabel.Text = _NameList[PreviewListView.SelectedIndices[0]]; + } + + private void PreviewListView_RetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e) + { + int index; + if (_indexList.TryGetValue(e.ItemIndex, out index)) + { + e.Item = new ListViewItem { ImageIndex = index, Text = e.ItemIndex.ToString() }; + return; + } + + _indexList.Add(e.ItemIndex, ImageList.Images.Count); + + string dirName = new DirectoryInfo(folderName).Name; + int getImageIndex = showFrontSide ? 16 : 0; + switch (dirName) + { + case "Monster": + switch (e.ItemIndex) + { + case 79: + if (showFrontSide) getImageIndex = 49; + else getImageIndex = 9; + break; + default: + if (showFrontSide) getImageIndex = 16; + else getImageIndex = 0; + break; + } + break; + case "AArmour": + case "AHair": + case "AHumEffect": + case "ARArmour": + case "ARHair": + case "ARHumEffect": + case "ARWeapon": + case "AWeapon": + case "CArmour": + case "CHair": + case "CHumEffect": + case "CWeapon": + case "Fishing": + switch (e.ItemIndex) + { + default: + if (showFrontSide) getImageIndex = 16; + else getImageIndex = 0; + break; + } + break; + case "Mount": + switch (e.ItemIndex) + { + default: + if (showFrontSide) getImageIndex = 16; + else getImageIndex = 0; + break; + } + break; + case "NPC": + switch (e.ItemIndex) + { + default: + if (showFrontSide) getImageIndex = 16; + else getImageIndex = 0; + break; + } + break; + case "Pet": + switch (e.ItemIndex) + { + case 1: + case 3: + case 5: + if (showFrontSide) getImageIndex = 16; + else getImageIndex = 0; + break; + default: + if (showFrontSide) getImageIndex = 24; + else getImageIndex = 0; + break; + } + break; + } + if ((_library.Images.Count - 1) < getImageIndex) getImageIndex = 0;//<-- Prevents NullReferenceException + + _LImageList.Add(_library.GetMImage(getImageIndex).Image); + ImageList.Images.Add(_library.GetPreview(getImageIndex)); + if (_library != null) _library.Close(); + + e.Item = new ListViewItem { ImageIndex = index, Text = e.ItemIndex.ToString() }; + } + + private void checkBackground_CheckedChanged(object sender, System.EventArgs e) + { + if (checkBackground.Checked) + ImageBox.BackColor = Color.White; + else + ImageBox.BackColor = Color.Black; + } + + private void checkCenter_CheckedChanged(object sender, System.EventArgs e) + { + if (checkCenter.Checked) + ImageBox.SizeMode = PictureBoxSizeMode.CenterImage; + else + ImageBox.SizeMode = PictureBoxSizeMode.Normal; + } + + private void ExportImagesButton_Click(object sender, EventArgs e) + { + for (int i = 0; i < _LImageList.Count; i++) + { + Bitmap image = _LImageList[i]; + string filename = _NameList[i]; + + string _newName = filename.Replace(".lib", ".bmp"); + string _folder = Application.StartupPath + "\\Exported\\"; + + Bitmap blank = new Bitmap(1, 1); + + // Create the folder if it doesn't exist. + (new FileInfo(_folder)).Directory.Create(); + + if (image == null) + { + blank.Save(_folder + _newName, ImageFormat.Bmp); + } + else + { + image.Save(_folder + _newName, ImageFormat.Bmp); + } + + } + + MessageBox.Show("Image export complete.", "Image export", MessageBoxButtons.OK); + } + } + + public class SemiNumericPathComparer : IComparer + { + public int Compare(string s1, string s2) + { + string f1 = Path.GetFileName(s1); + string f2 = Path.GetFileName(s2); + + if (IsNumeric(f1) && IsNumeric(f2)) + { + if (Convert.ToInt32(f1) > Convert.ToInt32(f2)) return 1;//higher + if (Convert.ToInt32(f1) < Convert.ToInt32(f2)) return -1;//lower + if (Convert.ToInt32(f1) == Convert.ToInt32(f2)) return 0;//equal + } + + //numeric before string + if (IsNumeric(f1) && !IsNumeric(f2)) return -1; + if (!IsNumeric(f1) && IsNumeric(f2)) return 1; + + return string.Compare(f1, f2, true); + } + + public static bool IsNumeric(object value) + { + try + { + int i = Convert.ToInt32(value.ToString()); + return true; + } + catch (FormatException) + { + return false; + } + } + } +} diff --git a/LibraryViewer/LMain.resx b/LibraryViewer/LMain.resx new file mode 100644 index 0000000..c00c85c --- /dev/null +++ b/LibraryViewer/LMain.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 127, 17 + + + 231, 17 + + \ No newline at end of file diff --git a/LibraryViewer/LibraryViewer.csproj b/LibraryViewer/LibraryViewer.csproj new file mode 100644 index 0000000..b031270 --- /dev/null +++ b/LibraryViewer/LibraryViewer.csproj @@ -0,0 +1,30 @@ + + + + WinExe + net7.0-windows + disable + true + enable + True + ..\Build\Server Tools\LibraryViewer\ + CMirLibraryViewer + CMirLibraryViewer + + + + false + false + + + + + + + + + ..\Components\Squish 2.0\ManagedSquish.dll + + + + \ No newline at end of file diff --git a/LibraryViewer/LoadSettings.Designer.cs b/LibraryViewer/LoadSettings.Designer.cs new file mode 100644 index 0000000..f14cfae --- /dev/null +++ b/LibraryViewer/LoadSettings.Designer.cs @@ -0,0 +1,116 @@ +namespace LibraryViewer +{ + partial class LoadSettings + { + /// + /// 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.cbPrefix = new System.Windows.Forms.ComboBox(); + this.label1 = new System.Windows.Forms.Label(); + this.cbFront = new System.Windows.Forms.CheckBox(); + this.cbManualPrefix = new System.Windows.Forms.CheckBox(); + this.SuspendLayout(); + // + // button1 + // + this.button1.Location = new System.Drawing.Point(136, 39); + 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); + // + // cbPrefix + // + this.cbPrefix.Enabled = false; + this.cbPrefix.FormattingEnabled = true; + this.cbPrefix.Items.AddRange(new object[] { + "00", + "000", + "0000"}); + this.cbPrefix.Location = new System.Drawing.Point(54, 12); + this.cbPrefix.Name = "cbPrefix"; + this.cbPrefix.Size = new System.Drawing.Size(54, 21); + this.cbPrefix.TabIndex = 1; + // + // 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(36, 13); + this.label1.TabIndex = 2; + this.label1.Text = "Prefix:"; + // + // cbFront + // + this.cbFront.AutoSize = true; + this.cbFront.Location = new System.Drawing.Point(15, 43); + this.cbFront.Name = "cbFront"; + this.cbFront.Size = new System.Drawing.Size(84, 17); + this.cbFront.TabIndex = 3; + this.cbFront.Text = "FrontImages"; + this.cbFront.UseVisualStyleBackColor = true; + // + // cbManualPrefix + // + this.cbManualPrefix.AutoSize = true; + this.cbManualPrefix.Location = new System.Drawing.Point(124, 14); + this.cbManualPrefix.Name = "cbManualPrefix"; + this.cbManualPrefix.Size = new System.Drawing.Size(87, 17); + this.cbManualPrefix.TabIndex = 4; + this.cbManualPrefix.Text = "ManualPrefix"; + this.cbManualPrefix.UseVisualStyleBackColor = true; + this.cbManualPrefix.CheckedChanged += new System.EventHandler(this.cbManualPrefix_CheckedChanged); + // + // LoadSettings + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(223, 71); + this.Controls.Add(this.cbManualPrefix); + this.Controls.Add(this.cbFront); + this.Controls.Add(this.label1); + this.Controls.Add(this.cbPrefix); + this.Controls.Add(this.button1); + this.Name = "LoadSettings"; + this.Text = "LoadSettings"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button button1; + private System.Windows.Forms.ComboBox cbPrefix; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.CheckBox cbFront; + private System.Windows.Forms.CheckBox cbManualPrefix; + } +} \ No newline at end of file diff --git a/LibraryViewer/LoadSettings.cs b/LibraryViewer/LoadSettings.cs new file mode 100644 index 0000000..3d08841 --- /dev/null +++ b/LibraryViewer/LoadSettings.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace LibraryViewer +{ + public partial class LoadSettings : Form + { + public LoadSettings() + { + InitializeComponent(); + } + + private void button1_Click(object sender, EventArgs e) + { + this.Hide(); + } + + public bool GetFrontSide() + { + return cbFront.Checked; + } + + public string GetPrefix() + { + return cbPrefix.Text; + } + + public bool GetManualPrefix() + { + return cbManualPrefix.Checked; + } + + private void cbManualPrefix_CheckedChanged(object sender, EventArgs e) + { + cbPrefix.Enabled = cbManualPrefix.Checked; + if (cbPrefix.Enabled) cbPrefix.Text = "00"; + else cbPrefix.Text = ""; + } + } +} diff --git a/LibraryViewer/LoadSettings.resx b/LibraryViewer/LoadSettings.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/LibraryViewer/LoadSettings.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/LibraryViewer/MLibrary.cs b/LibraryViewer/MLibrary.cs new file mode 100644 index 0000000..587d205 --- /dev/null +++ b/LibraryViewer/MLibrary.cs @@ -0,0 +1,323 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Drawing.Imaging; +using System.IO; +using System.IO.Compression; +using System.Runtime.InteropServices; +using System.Text; +using System.Windows.Forms; + +namespace LibraryViewer +{ + public sealed class MLibrary + { + public const int LibVersion = 3; + + public static bool Load = true; + public string FileName; + + public List Images = new List(); + + public List IndexList = new List(); + public int Count; + private bool _initialized; + + private BinaryReader _reader; + private FileStream _stream; + + public MLibrary(string filename) + { + FileName = filename; + Initialize(); + Close(); + } + + public void Initialize() + { + int CurrentVersion; + _initialized = true; + + if (!File.Exists(FileName)) + return; + + _stream = new FileStream(FileName, FileMode.Open, FileAccess.ReadWrite); + _reader = new BinaryReader(_stream); + CurrentVersion = _reader.ReadInt32(); + + if (CurrentVersion < 2) + { + MessageBox.Show("Wrong version, expecting lib version: " + LibVersion.ToString() + " found version: " + CurrentVersion.ToString() + ".", "Failed to open", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1); + return; + } + + Count = _reader.ReadInt32(); + + Images = new List(); + IndexList = new List(); + + int frameSeek = 0; + if (CurrentVersion >= 3) + { + frameSeek = _reader.ReadInt32(); + } + + for (int i = 0; i < Count; i++) + IndexList.Add(_reader.ReadInt32()); + + for (int i = 0; i < Count; i++) + Images.Add(null); + + for (int i = 0; i < Count; i++) + CheckImage(i); + } + + public void Close() + { + if (_stream != null) + _stream.Dispose(); + } + + private void CheckImage(int index) + { + if (!_initialized) + Initialize(); + + if (Images == null || index < 0 || index >= Images.Count) + return; + + if (Images[index] == null) + { + _stream.Position = IndexList[index]; + Images[index] = new MImage(_reader); + } + + if (!Load) return; + + MImage mi = Images[index]; + if (!mi.TextureValid) + { + _stream.Seek(IndexList[index] + 12, SeekOrigin.Begin); + mi.CreateTexture(_reader); + } + } + + public MImage GetMImage(int index) + { + if (index < 0 || index >= Images.Count) + return null; + + return Images[index]; + } + + public Bitmap GetPreview(int index) + { + if (index < 0 || index >= Images.Count) + return new Bitmap(1, 1); + + MImage image = Images[index]; + + if (image == null || image.Image == null) + return new Bitmap(1, 1); + + if (image.Preview == null) + image.CreatePreview(); + + return image.Preview; + } + + public void RemoveImage(int index) + { + if (Images == null || Count <= 1) + { + Count = 0; + Images = new List(); + return; + } + Count--; + + Images.RemoveAt(index); + } + + public sealed class MImage + { + public short Width, Height, X, Y, ShadowX, ShadowY; + public byte Shadow; + public int Length; + public byte[] FBytes; + public bool TextureValid; + public Bitmap Image, Preview; + + //layer 2: + public short MaskWidth, MaskHeight, MaskX, MaskY; + + public int MaskLength; + public byte[] MaskFBytes; + public Bitmap MaskImage; + public Boolean HasMask; + + public MImage(BinaryReader reader) + { + //read layer 1 + Width = reader.ReadInt16(); + Height = reader.ReadInt16(); + X = reader.ReadInt16(); + Y = reader.ReadInt16(); + ShadowX = reader.ReadInt16(); + ShadowY = reader.ReadInt16(); + Shadow = reader.ReadByte(); + Length = reader.ReadInt32(); + FBytes = reader.ReadBytes(Length); + //check if there's a second layer and read it + HasMask = ((Shadow >> 7) == 1) ? true : false; + if (HasMask) + { + MaskWidth = reader.ReadInt16(); + MaskHeight = reader.ReadInt16(); + MaskX = reader.ReadInt16(); + MaskY = reader.ReadInt16(); + MaskLength = reader.ReadInt32(); + MaskFBytes = reader.ReadBytes(MaskLength); + } + } + + private unsafe byte[] ConvertBitmapToArray(Bitmap input) + { + BitmapData data = input.LockBits(new Rectangle(0, 0, input.Width, input.Height), ImageLockMode.ReadOnly, + PixelFormat.Format32bppArgb); + + byte[] pixels = new byte[input.Width * input.Height * 4]; + + Marshal.Copy(data.Scan0, pixels, 0, pixels.Length); + + input.UnlockBits(data); + + for (int i = 0; i < pixels.Length; i += 4) + { + if (pixels[i] == 0 && pixels[i + 1] == 0 && pixels[i + 2] == 0) + pixels[i + 3] = 0; //Make Transparent + } + + byte[] compressedBytes; + compressedBytes = Compress(pixels); + + return compressedBytes; + } + + public unsafe void CreateTexture(BinaryReader reader) + { + int w = Width;// +(4 - Width % 4) % 4; + int h = Height;// +(4 - Height % 4) % 4; + + if (w == 0 || h == 0) + return; + if ((w < 2) || (h < 2)) return; + Image = new Bitmap(w, h); + + BitmapData data = Image.LockBits(new Rectangle(0, 0, w, h), ImageLockMode.ReadWrite, + PixelFormat.Format32bppArgb); + + byte[] dest = Decompress(FBytes); + + Marshal.Copy(dest, 0, data.Scan0, dest.Length); + + Image.UnlockBits(data); + + dest = null; + + if (HasMask) + { + w = MaskWidth;// +(4 - MaskWidth % 4) % 4; + h = MaskHeight;// +(4 - MaskHeight % 4) % 4; + + if (w == 0 || h == 0) + { + return; + } + + try + { + MaskImage = new Bitmap(w, h); + + data = MaskImage.LockBits(new Rectangle(0, 0, w, h), ImageLockMode.ReadWrite, + PixelFormat.Format32bppArgb); + + dest = Decompress(MaskFBytes); + + Marshal.Copy(dest, 0, data.Scan0, dest.Length); + + MaskImage.UnlockBits(data); + } + catch (Exception ex) + { + File.AppendAllText(@".\Error.txt", + string.Format("[{0}] {1}{2}", DateTime.Now, ex, Environment.NewLine)); + } + } + + dest = null; + } + + public static byte[] Compress(byte[] raw) + { + using (MemoryStream memory = new MemoryStream()) + { + using (GZipStream gzip = new GZipStream(memory, + CompressionMode.Compress, true)) + { + gzip.Write(raw, 0, raw.Length); + } + return memory.ToArray(); + } + } + + static byte[] Decompress(byte[] gzip) + { + // Create a GZIP stream with decompression mode. + // ... Then create a buffer and write into while reading from the GZIP stream. + using (GZipStream stream = new GZipStream(new MemoryStream(gzip), CompressionMode.Decompress)) + { + const int size = 4096; + byte[] buffer = new byte[size]; + using (MemoryStream memory = new MemoryStream()) + { + int count = 0; + do + { + count = stream.Read(buffer, 0, size); + if (count > 0) + { + memory.Write(buffer, 0, count); + } + } + while (count > 0); + return memory.ToArray(); + } + } + } + + public void CreatePreview() + { + if (Image == null) + { + Preview = new Bitmap(1, 1); + return; + } + + Preview = new Bitmap(64, 64); + + using (Graphics g = Graphics.FromImage(Preview)) + { + g.InterpolationMode = InterpolationMode.Low;//HighQualityBicubic + g.Clear(Color.Transparent); + int w = Math.Min((int)Width, 64); + int h = Math.Min((int)Height, 64); + g.DrawImage(Image, new Rectangle((64 - w) / 2, (64 - h) / 2, w, h), new Rectangle(0, 0, Width, Height), GraphicsUnit.Pixel); + + g.Save(); + } + } + } + } +} \ No newline at end of file diff --git a/LibraryViewer/Program.cs b/LibraryViewer/Program.cs new file mode 100644 index 0000000..a3fa01d --- /dev/null +++ b/LibraryViewer/Program.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace LibraryViewer +{ + static class Program + { + public static bool LoadFailed = false; + + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new LMain()); + } + } +} diff --git a/MapEditor/.gitattributes b/MapEditor/.gitattributes new file mode 100644 index 0000000..1ff0c42 --- /dev/null +++ b/MapEditor/.gitattributes @@ -0,0 +1,63 @@ +############################################################################### +# Set default behavior to automatically normalize line endings. +############################################################################### +* text=auto + +############################################################################### +# Set default behavior for command prompt diff. +# +# This is need for earlier builds of msysgit that does not have it on by +# default for csharp files. +# Note: This is only used by command line +############################################################################### +#*.cs diff=csharp + +############################################################################### +# Set the merge driver for project and solution files +# +# Merging from the command prompt will add diff markers to the files if there +# are conflicts (Merging from VS is not affected by the settings below, in VS +# the diff markers are never inserted). Diff markers may cause the following +# file extensions to fail to load in VS. An alternative would be to treat +# these files as binary and thus will always conflict and require user +# intervention with every merge. To do so, just uncomment the entries below +############################################################################### +#*.sln merge=binary +#*.csproj merge=binary +#*.vbproj merge=binary +#*.vcxproj merge=binary +#*.vcproj merge=binary +#*.dbproj merge=binary +#*.fsproj merge=binary +#*.lsproj merge=binary +#*.wixproj merge=binary +#*.modelproj merge=binary +#*.sqlproj merge=binary +#*.wwaproj merge=binary + +############################################################################### +# behavior for image files +# +# image files are treated as binary by default. +############################################################################### +#*.jpg binary +#*.png binary +#*.gif binary + +############################################################################### +# diff behavior for common document formats +# +# Convert binary document formats to text before diffing them. This feature +# is only available from the command line. Turn it on by uncommenting the +# entries below. +############################################################################### +#*.doc diff=astextplain +#*.DOC diff=astextplain +#*.docx diff=astextplain +#*.DOCX diff=astextplain +#*.dot diff=astextplain +#*.DOT diff=astextplain +#*.pdf diff=astextplain +#*.PDF diff=astextplain +#*.rtf diff=astextplain +#*.RTF diff=astextplain diff --git a/MapEditor/.gitignore b/MapEditor/.gitignore new file mode 100644 index 0000000..9491a2f --- /dev/null +++ b/MapEditor/.gitignore @@ -0,0 +1,363 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Oo]ut/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd \ No newline at end of file diff --git a/MapEditor/Map Editor.sln b/MapEditor/Map Editor.sln new file mode 100644 index 0000000..652c2a2 --- /dev/null +++ b/MapEditor/Map Editor.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2013 +VisualStudioVersion = 12.0.40629.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Map Editor", "Map Editor\Map Editor.csproj", "{667362DB-5C56-4B9F-9FD5-0797D13C8766}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {667362DB-5C56-4B9F-9FD5-0797D13C8766}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {667362DB-5C56-4B9F-9FD5-0797D13C8766}.Debug|Any CPU.Build.0 = Debug|Any CPU + {667362DB-5C56-4B9F-9FD5-0797D13C8766}.Release|Any CPU.ActiveCfg = Release|Any CPU + {667362DB-5C56-4B9F-9FD5-0797D13C8766}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/MapEditor/Map Editor/App.config b/MapEditor/Map Editor/App.config new file mode 100644 index 0000000..4d8ac6a --- /dev/null +++ b/MapEditor/Map Editor/App.config @@ -0,0 +1,6 @@ + + + + + + diff --git a/MapEditor/Map Editor/CellInfoControl.Designer.cs b/MapEditor/Map Editor/CellInfoControl.Designer.cs new file mode 100644 index 0000000..86451dc --- /dev/null +++ b/MapEditor/Map Editor/CellInfoControl.Designer.cs @@ -0,0 +1,724 @@ +namespace Map_Editor +{ + partial class CellInfoControl + { + /// + /// 必需的设计器变量。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 清理所有正在使用的资源。 + /// + /// 如果应释放托管资源,为 true;否则为 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region 组件设计器生成的代码 + + /// + /// 设计器支持所需的方法 - 不要 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InitializeComponent() + { + this.label1 = new System.Windows.Forms.Label(); + this.LabX = new System.Windows.Forms.Label(); + this.labY = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.labBackImageIndex = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); + this.labMiddleImageIndex = new System.Windows.Forms.Label(); + this.label8 = new System.Windows.Forms.Label(); + this.labFrontImageIndex = new System.Windows.Forms.Label(); + this.label10 = new System.Windows.Forms.Label(); + this.labBVersion = new System.Windows.Forms.Label(); + this.labBLibName = new System.Windows.Forms.Label(); + this.labBLibIndex = new System.Windows.Forms.Label(); + this.labMLibIndex = new System.Windows.Forms.Label(); + this.labMLibName = new System.Windows.Forms.Label(); + this.labMVersion = new System.Windows.Forms.Label(); + this.labFLibIndex = new System.Windows.Forms.Label(); + this.labFLibName = new System.Windows.Forms.Label(); + this.labFVersion = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.label5 = new System.Windows.Forms.Label(); + this.label7 = new System.Windows.Forms.Label(); + this.label9 = new System.Windows.Forms.Label(); + this.LabBackLimit = new System.Windows.Forms.Label(); + this.labFrontLimit = new System.Windows.Forms.Label(); + this.label12 = new System.Windows.Forms.Label(); + this.label11 = new System.Windows.Forms.Label(); + this.label13 = new System.Windows.Forms.Label(); + this.labFFrame = new System.Windows.Forms.Label(); + this.labFTick = new System.Windows.Forms.Label(); + this.label15 = new System.Windows.Forms.Label(); + this.label14 = new System.Windows.Forms.Label(); + this.labFBlend = new System.Windows.Forms.Label(); + this.labMBlend = new System.Windows.Forms.Label(); + this.label17 = new System.Windows.Forms.Label(); + this.labMTick = new System.Windows.Forms.Label(); + this.label19 = new System.Windows.Forms.Label(); + this.labMFrame = new System.Windows.Forms.Label(); + this.label21 = new System.Windows.Forms.Label(); + this.label22 = new System.Windows.Forms.Label(); + this.label16 = new System.Windows.Forms.Label(); + this.label18 = new System.Windows.Forms.Label(); + this.labDoorOffSet = new System.Windows.Forms.Label(); + this.label20 = new System.Windows.Forms.Label(); + this.labDoorIndex = new System.Windows.Forms.Label(); + this.label23 = new System.Windows.Forms.Label(); + this.labEntityDoor = new System.Windows.Forms.Label(); + this.label24 = new System.Windows.Forms.Label(); + this.labLight = new System.Windows.Forms.Label(); + this.label25 = new System.Windows.Forms.Label(); + this.labfishing = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label1.Location = new System.Drawing.Point(3, 2); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(21, 17); + this.label1.TabIndex = 0; + this.label1.Text = "X:"; + // + // LabX + // + this.LabX.AutoSize = true; + this.LabX.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.LabX.Location = new System.Drawing.Point(22, 2); + this.LabX.Name = "LabX"; + this.LabX.Size = new System.Drawing.Size(15, 17); + this.LabX.TabIndex = 1; + this.LabX.Text = "0"; + // + // labY + // + this.labY.AutoSize = true; + this.labY.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labY.Location = new System.Drawing.Point(78, 2); + this.labY.Name = "labY"; + this.labY.Size = new System.Drawing.Size(15, 17); + this.labY.TabIndex = 3; + this.labY.Text = "0"; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label4.Location = new System.Drawing.Point(59, 2); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(20, 17); + this.label4.TabIndex = 2; + this.label4.Text = "Y:"; + // + // labBackImageIndex + // + this.labBackImageIndex.AutoSize = true; + this.labBackImageIndex.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labBackImageIndex.Location = new System.Drawing.Point(82, 21); + this.labBackImageIndex.Name = "labBackImageIndex"; + this.labBackImageIndex.Size = new System.Drawing.Size(15, 17); + this.labBackImageIndex.TabIndex = 5; + this.labBackImageIndex.Text = "0"; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label6.Location = new System.Drawing.Point(3, 21); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(71, 17); + this.label6.TabIndex = 4; + this.label6.Text = "BackImage:"; + // + // labMiddleImageIndex + // + this.labMiddleImageIndex.AutoSize = true; + this.labMiddleImageIndex.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labMiddleImageIndex.Location = new System.Drawing.Point(82, 40); + this.labMiddleImageIndex.Name = "labMiddleImageIndex"; + this.labMiddleImageIndex.Size = new System.Drawing.Size(15, 17); + this.labMiddleImageIndex.TabIndex = 7; + this.labMiddleImageIndex.Text = "0"; + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label8.Location = new System.Drawing.Point(3, 40); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(81, 17); + this.label8.TabIndex = 6; + this.label8.Text = "MiddleImage:"; + // + // labFrontImageIndex + // + this.labFrontImageIndex.AutoSize = true; + this.labFrontImageIndex.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labFrontImageIndex.Location = new System.Drawing.Point(82, 58); + this.labFrontImageIndex.Name = "labFrontImageIndex"; + this.labFrontImageIndex.Size = new System.Drawing.Size(15, 17); + this.labFrontImageIndex.TabIndex = 9; + this.labFrontImageIndex.Text = "0"; + // + // label10 + // + this.label10.AutoSize = true; + this.label10.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label10.Location = new System.Drawing.Point(3, 58); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(76, 17); + this.label10.TabIndex = 8; + this.label10.Text = "FrontImage:"; + // + // labBVersion + // + this.labBVersion.AutoSize = true; + this.labBVersion.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labBVersion.Location = new System.Drawing.Point(120, 21); + this.labBVersion.Name = "labBVersion"; + this.labBVersion.Size = new System.Drawing.Size(58, 17); + this.labBVersion.TabIndex = 10; + this.labBVersion.Text = "BVersion"; + // + // labBLibName + // + this.labBLibName.AutoSize = true; + this.labBLibName.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labBLibName.Location = new System.Drawing.Point(200, 21); + this.labBLibName.Name = "labBLibName"; + this.labBLibName.Size = new System.Drawing.Size(49, 17); + this.labBLibName.TabIndex = 11; + this.labBLibName.Text = "objects"; + // + // labBLibIndex + // + this.labBLibIndex.AutoSize = true; + this.labBLibIndex.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labBLibIndex.Location = new System.Drawing.Point(280, 21); + this.labBLibIndex.Name = "labBLibIndex"; + this.labBLibIndex.Size = new System.Drawing.Size(29, 17); + this.labBLibIndex.TabIndex = 12; + this.labBLibIndex.Text = "399"; + // + // labMLibIndex + // + this.labMLibIndex.AutoSize = true; + this.labMLibIndex.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labMLibIndex.Location = new System.Drawing.Point(280, 40); + this.labMLibIndex.Name = "labMLibIndex"; + this.labMLibIndex.Size = new System.Drawing.Size(29, 17); + this.labMLibIndex.TabIndex = 15; + this.labMLibIndex.Text = "399"; + // + // labMLibName + // + this.labMLibName.AutoSize = true; + this.labMLibName.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labMLibName.Location = new System.Drawing.Point(200, 40); + this.labMLibName.Name = "labMLibName"; + this.labMLibName.Size = new System.Drawing.Size(49, 17); + this.labMLibName.TabIndex = 14; + this.labMLibName.Text = "objects"; + // + // labMVersion + // + this.labMVersion.AutoSize = true; + this.labMVersion.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labMVersion.Location = new System.Drawing.Point(120, 40); + this.labMVersion.Name = "labMVersion"; + this.labMVersion.Size = new System.Drawing.Size(58, 17); + this.labMVersion.TabIndex = 13; + this.labMVersion.Text = "BVersion"; + // + // labFLibIndex + // + this.labFLibIndex.AutoSize = true; + this.labFLibIndex.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labFLibIndex.Location = new System.Drawing.Point(280, 58); + this.labFLibIndex.Name = "labFLibIndex"; + this.labFLibIndex.Size = new System.Drawing.Size(29, 17); + this.labFLibIndex.TabIndex = 18; + this.labFLibIndex.Text = "399"; + // + // labFLibName + // + this.labFLibName.AutoSize = true; + this.labFLibName.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labFLibName.Location = new System.Drawing.Point(200, 58); + this.labFLibName.Name = "labFLibName"; + this.labFLibName.Size = new System.Drawing.Size(49, 17); + this.labFLibName.TabIndex = 17; + this.labFLibName.Text = "objects"; + // + // labFVersion + // + this.labFVersion.AutoSize = true; + this.labFVersion.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labFVersion.Location = new System.Drawing.Point(120, 58); + this.labFVersion.Name = "labFVersion"; + this.labFVersion.Size = new System.Drawing.Size(58, 17); + this.labFVersion.TabIndex = 16; + this.labFVersion.Text = "BVersion"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label2.Location = new System.Drawing.Point(124, 2); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(50, 17); + this.label2.TabIndex = 19; + this.label2.Text = "Version"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label3.Location = new System.Drawing.Point(198, 2); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(55, 17); + this.label3.TabIndex = 20; + this.label3.Text = "LibName"; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label5.Location = new System.Drawing.Point(254, 2); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(57, 17); + this.label5.TabIndex = 21; + this.label5.Text = "LibIndex"; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label7.Location = new System.Drawing.Point(3, 80); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(41, 17); + this.label7.TabIndex = 22; + this.label7.Text = "Limit:"; + // + // label9 + // + this.label9.AutoSize = true; + this.label9.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label9.Location = new System.Drawing.Point(64, 80); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(34, 17); + this.label9.TabIndex = 23; + this.label9.Text = "Back"; + // + // LabBackLimit + // + this.LabBackLimit.AutoSize = true; + this.LabBackLimit.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.LabBackLimit.Location = new System.Drawing.Point(100, 80); + this.LabBackLimit.Name = "LabBackLimit"; + this.LabBackLimit.Size = new System.Drawing.Size(40, 17); + this.LabBackLimit.TabIndex = 24; + this.LabBackLimit.Text = "Back="; + // + // labFrontLimit + // + this.labFrontLimit.AutoSize = true; + this.labFrontLimit.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labFrontLimit.Location = new System.Drawing.Point(253, 80); + this.labFrontLimit.Name = "labFrontLimit"; + this.labFrontLimit.Size = new System.Drawing.Size(40, 17); + this.labFrontLimit.TabIndex = 26; + this.labFrontLimit.Text = "Back="; + // + // label12 + // + this.label12.AutoSize = true; + this.label12.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label12.Location = new System.Drawing.Point(213, 80); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(39, 17); + this.label12.TabIndex = 25; + this.label12.Text = "Front"; + // + // label11 + // + this.label11.AutoSize = true; + this.label11.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label11.Location = new System.Drawing.Point(3, 98); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(66, 17); + this.label11.TabIndex = 27; + this.label11.Text = "Animation:"; + // + // label13 + // + this.label13.AutoSize = true; + this.label13.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label13.Location = new System.Drawing.Point(65, 98); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(56, 17); + this.label13.TabIndex = 28; + this.label13.Text = "F_Frame"; + // + // labFFrame + // + this.labFFrame.AutoSize = true; + this.labFFrame.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labFFrame.Location = new System.Drawing.Point(120, 98); + this.labFFrame.Name = "labFFrame"; + this.labFFrame.Size = new System.Drawing.Size(20, 17); + this.labFFrame.TabIndex = 29; + this.labFFrame.Text = "10"; + // + // labFTick + // + this.labFTick.AutoSize = true; + this.labFTick.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labFTick.Location = new System.Drawing.Point(187, 98); + this.labFTick.Name = "labFTick"; + this.labFTick.Size = new System.Drawing.Size(13, 17); + this.labFTick.TabIndex = 31; + this.labFTick.Text = "1"; + // + // label15 + // + this.label15.AutoSize = true; + this.label15.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label15.Location = new System.Drawing.Point(141, 98); + this.label15.Name = "label15"; + this.label15.Size = new System.Drawing.Size(47, 17); + this.label15.TabIndex = 30; + this.label15.Text = "F_Tick"; + // + // label14 + // + this.label14.AutoSize = true; + this.label14.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label14.Location = new System.Drawing.Point(213, 98); + this.label14.Name = "label14"; + this.label14.Size = new System.Drawing.Size(53, 17); + this.label14.TabIndex = 32; + this.label14.Text = "F_Blend"; + // + // labFBlend + // + this.labFBlend.AutoSize = true; + this.labFBlend.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labFBlend.Location = new System.Drawing.Point(264, 98); + this.labFBlend.Name = "labFBlend"; + this.labFBlend.Size = new System.Drawing.Size(32, 17); + this.labFBlend.TabIndex = 33; + this.labFBlend.Text = "true"; + // + // labMBlend + // + this.labMBlend.AutoSize = true; + this.labMBlend.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labMBlend.Location = new System.Drawing.Point(264, 117); + this.labMBlend.Name = "labMBlend"; + this.labMBlend.Size = new System.Drawing.Size(32, 17); + this.labMBlend.TabIndex = 40; + this.labMBlend.Text = "true"; + // + // label17 + // + this.label17.AutoSize = true; + this.label17.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label17.Location = new System.Drawing.Point(213, 117); + this.label17.Name = "label17"; + this.label17.Size = new System.Drawing.Size(56, 17); + this.label17.TabIndex = 39; + this.label17.Text = "M_Blend"; + // + // labMTick + // + this.labMTick.AutoSize = true; + this.labMTick.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labMTick.Location = new System.Drawing.Point(187, 117); + this.labMTick.Name = "labMTick"; + this.labMTick.Size = new System.Drawing.Size(13, 17); + this.labMTick.TabIndex = 38; + this.labMTick.Text = "1"; + // + // label19 + // + this.label19.AutoSize = true; + this.label19.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label19.Location = new System.Drawing.Point(141, 117); + this.label19.Name = "label19"; + this.label19.Size = new System.Drawing.Size(50, 17); + this.label19.TabIndex = 37; + this.label19.Text = "M_Tick"; + // + // labMFrame + // + this.labMFrame.AutoSize = true; + this.labMFrame.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labMFrame.Location = new System.Drawing.Point(120, 117); + this.labMFrame.Name = "labMFrame"; + this.labMFrame.Size = new System.Drawing.Size(20, 17); + this.labMFrame.TabIndex = 36; + this.labMFrame.Text = "10"; + // + // label21 + // + this.label21.AutoSize = true; + this.label21.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label21.Location = new System.Drawing.Point(65, 117); + this.label21.Name = "label21"; + this.label21.Size = new System.Drawing.Size(59, 17); + this.label21.TabIndex = 35; + this.label21.Text = "M_Frame"; + // + // label22 + // + this.label22.AutoSize = true; + this.label22.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label22.Location = new System.Drawing.Point(3, 117); + this.label22.Name = "label22"; + this.label22.Size = new System.Drawing.Size(66, 17); + this.label22.TabIndex = 34; + this.label22.Text = "Animation:"; + // + // label16 + // + this.label16.AutoSize = true; + this.label16.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label16.Location = new System.Drawing.Point(3, 135); + this.label16.Name = "label16"; + this.label16.Size = new System.Drawing.Size(39, 17); + this.label16.TabIndex = 41; + this.label16.Text = "Door:"; + // + // label18 + // + this.label18.AutoSize = true; + this.label18.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label18.Location = new System.Drawing.Point(65, 135); + this.label18.Name = "label18"; + this.label18.Size = new System.Drawing.Size(50, 17); + this.label18.TabIndex = 42; + this.label18.Text = "OffSet"; + // + // labDoorOffSet + // + this.labDoorOffSet.AutoSize = true; + this.labDoorOffSet.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labDoorOffSet.Location = new System.Drawing.Point(121, 135); + this.labDoorOffSet.Name = "labDoorOffSet"; + this.labDoorOffSet.Size = new System.Drawing.Size(15, 17); + this.labDoorOffSet.TabIndex = 43; + this.labDoorOffSet.Text = "5"; + // + // label20 + // + this.label20.AutoSize = true; + this.label20.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label20.Location = new System.Drawing.Point(141, 135); + this.label20.Name = "label20"; + this.label20.Size = new System.Drawing.Size(40, 17); + this.label20.TabIndex = 44; + this.label20.Text = "Index"; + // + // labDoorIndex + // + this.labDoorIndex.AutoSize = true; + this.labDoorIndex.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labDoorIndex.Location = new System.Drawing.Point(184, 135); + this.labDoorIndex.Name = "labDoorIndex"; + this.labDoorIndex.Size = new System.Drawing.Size(15, 17); + this.labDoorIndex.TabIndex = 45; + this.labDoorIndex.Text = "5"; + // + // label23 + // + this.label23.AutoSize = true; + this.label23.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label23.Location = new System.Drawing.Point(213, 135); + this.label23.Name = "label23"; + this.label23.Size = new System.Drawing.Size(44, 17); + this.label23.TabIndex = 46; + this.label23.Text = "Entity"; + // + // labEntityDoor + // + this.labEntityDoor.AutoSize = true; + this.labEntityDoor.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labEntityDoor.Location = new System.Drawing.Point(263, 135); + this.labEntityDoor.Name = "labEntityDoor"; + this.labEntityDoor.Size = new System.Drawing.Size(32, 17); + this.labEntityDoor.TabIndex = 47; + this.labEntityDoor.Text = "true"; + // + // label24 + // + this.label24.AutoSize = true; + this.label24.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label24.Location = new System.Drawing.Point(3, 152); + this.label24.Name = "label24"; + this.label24.Size = new System.Drawing.Size(41, 17); + this.label24.TabIndex = 48; + this.label24.Text = "Light:"; + // + // labLight + // + this.labLight.AutoSize = true; + this.labLight.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labLight.Location = new System.Drawing.Point(48, 152); + this.labLight.Name = "labLight"; + this.labLight.Size = new System.Drawing.Size(15, 17); + this.labLight.TabIndex = 49; + this.labLight.Text = "5"; + // + // label25 + // + this.label25.AutoSize = true; + this.label25.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label25.Location = new System.Drawing.Point(124, 152); + this.label25.Name = "label25"; + this.label25.Size = new System.Drawing.Size(51, 17); + this.label25.TabIndex = 50; + this.label25.Text = "Fishing:"; + // + // labfishing + // + this.labfishing.AutoSize = true; + this.labfishing.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labfishing.Location = new System.Drawing.Point(181, 152); + this.labfishing.Name = "labfishing"; + this.labfishing.Size = new System.Drawing.Size(32, 17); + this.labfishing.TabIndex = 51; + this.labfishing.Text = "true"; + // + // CellInfoControl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.Linen; + this.Controls.Add(this.labfishing); + this.Controls.Add(this.label25); + this.Controls.Add(this.labLight); + this.Controls.Add(this.label24); + this.Controls.Add(this.labEntityDoor); + this.Controls.Add(this.label23); + this.Controls.Add(this.labDoorIndex); + this.Controls.Add(this.label20); + this.Controls.Add(this.labDoorOffSet); + this.Controls.Add(this.label18); + this.Controls.Add(this.label16); + this.Controls.Add(this.labMBlend); + this.Controls.Add(this.label17); + this.Controls.Add(this.labMTick); + this.Controls.Add(this.label19); + this.Controls.Add(this.labMFrame); + this.Controls.Add(this.label21); + this.Controls.Add(this.label22); + this.Controls.Add(this.labFBlend); + this.Controls.Add(this.label14); + this.Controls.Add(this.labFTick); + this.Controls.Add(this.label15); + this.Controls.Add(this.labFFrame); + this.Controls.Add(this.label13); + this.Controls.Add(this.label11); + this.Controls.Add(this.labFrontLimit); + this.Controls.Add(this.label12); + this.Controls.Add(this.LabBackLimit); + this.Controls.Add(this.label9); + this.Controls.Add(this.label7); + this.Controls.Add(this.label5); + this.Controls.Add(this.label3); + this.Controls.Add(this.label2); + this.Controls.Add(this.labFLibIndex); + this.Controls.Add(this.labFLibName); + this.Controls.Add(this.labFVersion); + this.Controls.Add(this.labMLibIndex); + this.Controls.Add(this.labMLibName); + this.Controls.Add(this.labMVersion); + this.Controls.Add(this.labBLibIndex); + this.Controls.Add(this.labBLibName); + this.Controls.Add(this.labBVersion); + this.Controls.Add(this.labFrontImageIndex); + this.Controls.Add(this.label10); + this.Controls.Add(this.labMiddleImageIndex); + this.Controls.Add(this.label8); + this.Controls.Add(this.labBackImageIndex); + this.Controls.Add(this.label6); + this.Controls.Add(this.labY); + this.Controls.Add(this.label4); + this.Controls.Add(this.LabX); + this.Controls.Add(this.label1); + this.Name = "CellInfoControl"; + this.Size = new System.Drawing.Size(304, 80); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label LabX; + private System.Windows.Forms.Label labY; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label labBackImageIndex; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.Label labMiddleImageIndex; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.Label labFrontImageIndex; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.Label labBVersion; + private System.Windows.Forms.Label labBLibName; + private System.Windows.Forms.Label labBLibIndex; + private System.Windows.Forms.Label labMLibIndex; + private System.Windows.Forms.Label labMLibName; + private System.Windows.Forms.Label labMVersion; + private System.Windows.Forms.Label labFLibIndex; + private System.Windows.Forms.Label labFLibName; + private System.Windows.Forms.Label labFVersion; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.Label LabBackLimit; + private System.Windows.Forms.Label labFrontLimit; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.Label labFFrame; + private System.Windows.Forms.Label labFTick; + private System.Windows.Forms.Label label15; + private System.Windows.Forms.Label label14; + private System.Windows.Forms.Label labFBlend; + private System.Windows.Forms.Label labMBlend; + private System.Windows.Forms.Label label17; + private System.Windows.Forms.Label labMTick; + private System.Windows.Forms.Label label19; + private System.Windows.Forms.Label labMFrame; + private System.Windows.Forms.Label label21; + private System.Windows.Forms.Label label22; + private System.Windows.Forms.Label label16; + private System.Windows.Forms.Label label18; + private System.Windows.Forms.Label labDoorOffSet; + private System.Windows.Forms.Label label20; + private System.Windows.Forms.Label labDoorIndex; + private System.Windows.Forms.Label label23; + private System.Windows.Forms.Label labEntityDoor; + private System.Windows.Forms.Label label24; + private System.Windows.Forms.Label labLight; + private System.Windows.Forms.Label label25; + private System.Windows.Forms.Label labfishing; + } +} diff --git a/MapEditor/Map Editor/CellInfoControl.cs b/MapEditor/Map Editor/CellInfoControl.cs new file mode 100644 index 0000000..6245bae --- /dev/null +++ b/MapEditor/Map Editor/CellInfoControl.cs @@ -0,0 +1,149 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace Map_Editor +{ + public partial class CellInfoControl : UserControl + { + public CellInfoControl() + { + InitializeComponent(); + } + + public void SetText(int x, int y, int backImageIndex, int middleImageIndex, int frontImageIndex,int bLibIndex,int mLibIndex,int fLibIndex,string bLibName,string mLibName,string fLibName,int backLimit,int frontLimit, + byte fFrame, byte ftick, bool fblend, byte mFrame, byte mTick, bool mBlend,byte doorOffSet,byte doorIndex,bool entityDoor,byte light,bool fishing) + { + LabX.Text = x.ToString(); + labY.Text = y.ToString(); + labBackImageIndex.Text = backImageIndex.ToString(); + labMiddleImageIndex.Text = middleImageIndex.ToString(); + labFrontImageIndex.Text = frontImageIndex.ToString(); + if ((bLibIndex >= 0) && (bLibIndex <= 99)) + { + labBVersion.Text = "WemadeMir2"; + } + else if (bLibIndex >= 100 && (bLibIndex <= 199)) + { + labBVersion.Text = "ShandaMir2"; + } + else if (bLibIndex >= 200 && (bLibIndex <= 299)) + { + labBVersion.Text = "WemadeMir3"; + } + else if (bLibIndex >= 300 && (bLibIndex <= 399)) + { + labBVersion.Text = "ShandaMir3"; + } + else + { + labBVersion.Text = ""; + } + + if ((mLibIndex >= 0) && (mLibIndex <= 99)) + { + labMVersion.Text = "WemadeMir2"; + } + else if (mLibIndex >= 100 && (mLibIndex <= 199)) + { + labMVersion.Text = "ShandaMir2"; + } + else if (mLibIndex >= 200 && (mLibIndex <= 299)) + { + labMVersion.Text = "WemadeMir3"; + } + else if (mLibIndex >= 300 && (mLibIndex <= 399)) + { + labMVersion.Text = "ShandaMir3"; + } + else + { + labMVersion.Text = ""; + } + + if ((fLibIndex >= 0) && (fLibIndex <= 99)) + { + labFVersion.Text = "WemadeMir2"; + } + else if (fLibIndex >= 100 && (fLibIndex <= 199)) + { + labFVersion.Text = "ShandaMir2"; + } + else if (fLibIndex >= 200 && (fLibIndex <= 299)) + { + labFVersion.Text = "WemadeMir3"; + } + else if (fLibIndex >= 300 && (fLibIndex <= 399)) + { + labFVersion.Text = "ShandaMir3"; + } + else + { + labFVersion.Text = ""; + } + + labBLibIndex.Text = bLibIndex.ToString(); + labMLibIndex.Text = mLibIndex.ToString(); + labFLibIndex.Text = fLibIndex.ToString(); + + labBLibName.Text = bLibName; + labMLibName.Text = mLibName; + labFLibName.Text = fLibName; + + if (backLimit!=0) + { + LabBackLimit.Text = "True"; + } + else + { + LabBackLimit.Text = "False"; + } + if (frontLimit != 0) + { + labFrontLimit.Text = "True"; + } + else + { + labFrontLimit.Text = "False"; + } + + + if (fFrame>0) + { + labFFrame.Text = fFrame.ToString(); + labFTick.Text = ftick.ToString(); + labFBlend.Text = fblend.ToString(); + } + else + { + labFFrame.Text = String.Empty; + labFTick.Text = String.Empty; + labFBlend.Text = String.Empty; + } + if ((mFrame>0)&&(mFrame<255)) + { + labMFrame.Text = (mFrame&0x0F).ToString(); + labMTick.Text = mTick.ToString(); + labMBlend.Text = Convert.ToBoolean(mFrame & 0x0F).ToString(); + } + else + { + labMFrame.Text = String.Empty; + labMTick.Text = String.Empty; + labMBlend.Text = String.Empty; + } + + labDoorOffSet.Text = doorOffSet.ToString(); + labDoorIndex.Text = doorIndex.ToString(); + labEntityDoor.Text = entityDoor.ToString(); + + labLight.Text = light.ToString(); + labfishing.Text = fishing.ToString(); + } + } +} diff --git a/MapEditor/Map Editor/CellInfoControl.resx b/MapEditor/Map Editor/CellInfoControl.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/MapEditor/Map Editor/CellInfoControl.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/MapEditor/Map Editor/CellInfoControl_1.Designer.cs b/MapEditor/Map Editor/CellInfoControl_1.Designer.cs new file mode 100644 index 0000000..6c0a8dc --- /dev/null +++ b/MapEditor/Map Editor/CellInfoControl_1.Designer.cs @@ -0,0 +1,103 @@ + +namespace Map_Editor +{ + partial class CellInfoControl_1 + { + /// + /// 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.label1 = new System.Windows.Forms.Label(); + this.LabX = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.labY = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label1.Location = new System.Drawing.Point(3, 1); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(21, 17); + this.label1.TabIndex = 1; + this.label1.Text = "X:"; + // + // LabX + // + this.LabX.AutoSize = true; + this.LabX.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.LabX.Location = new System.Drawing.Point(22, 1); + this.LabX.Name = "LabX"; + this.LabX.Size = new System.Drawing.Size(15, 17); + this.LabX.TabIndex = 2; + this.LabX.Text = "0"; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label4.Location = new System.Drawing.Point(59, 1); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(20, 17); + this.label4.TabIndex = 3; + this.label4.Text = "Y:"; + // + // labY + // + this.labY.AutoSize = true; + this.labY.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labY.Location = new System.Drawing.Point(78, 1); + this.labY.Name = "labY"; + this.labY.Size = new System.Drawing.Size(15, 17); + this.labY.TabIndex = 4; + this.labY.Text = "0"; + // + // CellInfoControl_1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.Black; + this.Controls.Add(this.labY); + this.Controls.Add(this.label4); + this.Controls.Add(this.LabX); + this.Controls.Add(this.label1); + this.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(128)))), ((int)(((byte)(0))))); + this.Name = "CellInfoControl_1"; + this.Size = new System.Drawing.Size(122, 18); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label LabX; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label labY; + } +} diff --git a/MapEditor/Map Editor/CellInfoControl_1.cs b/MapEditor/Map Editor/CellInfoControl_1.cs new file mode 100644 index 0000000..1fc064c --- /dev/null +++ b/MapEditor/Map Editor/CellInfoControl_1.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace Map_Editor +{ + public partial class CellInfoControl_1 : UserControl + { + public CellInfoControl_1() + { + InitializeComponent(); + } + public void SetText(int x, int y) + { + LabX.Text = x.ToString(); + labY.Text = y.ToString(); + } + + internal void SetText(int cellX, int cellY, int v1, int v2, byte v3, byte frontAnimationTick, bool v4, byte middleAnimationFrame, byte middleAnimationTick, bool v5, byte doorOffset, byte v6, bool v7, byte light, bool fishingCell) + { + throw new NotImplementedException(); + } + } +} diff --git a/MapEditor/Map Editor/CellInfoControl_1.resx b/MapEditor/Map Editor/CellInfoControl_1.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/MapEditor/Map Editor/CellInfoControl_1.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/MapEditor/Map Editor/CellInfoControl_2.Designer.cs b/MapEditor/Map Editor/CellInfoControl_2.Designer.cs new file mode 100644 index 0000000..b0762a1 --- /dev/null +++ b/MapEditor/Map Editor/CellInfoControl_2.Designer.cs @@ -0,0 +1,515 @@ + +namespace Map_Editor +{ + partial class CellInfoControl_2 + { + /// + /// 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.label1 = new System.Windows.Forms.Label(); + this.LabX = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.labY = new System.Windows.Forms.Label(); + this.label7 = new System.Windows.Forms.Label(); + this.label9 = new System.Windows.Forms.Label(); + this.LabBackLimit = new System.Windows.Forms.Label(); + this.label12 = new System.Windows.Forms.Label(); + this.labFrontLimit = new System.Windows.Forms.Label(); + this.label11 = new System.Windows.Forms.Label(); + this.label13 = new System.Windows.Forms.Label(); + this.labFFrame = new System.Windows.Forms.Label(); + this.label15 = new System.Windows.Forms.Label(); + this.labFTick = new System.Windows.Forms.Label(); + this.label14 = new System.Windows.Forms.Label(); + this.labFBlend = new System.Windows.Forms.Label(); + this.label22 = new System.Windows.Forms.Label(); + this.label21 = new System.Windows.Forms.Label(); + this.labMFrame = new System.Windows.Forms.Label(); + this.label19 = new System.Windows.Forms.Label(); + this.labMTick = new System.Windows.Forms.Label(); + this.label17 = new System.Windows.Forms.Label(); + this.labMBlend = new System.Windows.Forms.Label(); + this.label16 = new System.Windows.Forms.Label(); + this.label18 = new System.Windows.Forms.Label(); + this.labDoorOffSet = new System.Windows.Forms.Label(); + this.label20 = new System.Windows.Forms.Label(); + this.labDoorIndex = new System.Windows.Forms.Label(); + this.label23 = new System.Windows.Forms.Label(); + this.labEntityDoor = new System.Windows.Forms.Label(); + this.label24 = new System.Windows.Forms.Label(); + this.labLight = new System.Windows.Forms.Label(); + this.label25 = new System.Windows.Forms.Label(); + this.labfishing = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label1.Location = new System.Drawing.Point(3, 2); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(21, 17); + this.label1.TabIndex = 1; + this.label1.Text = "X:"; + // + // LabX + // + this.LabX.AutoSize = true; + this.LabX.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.LabX.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(128)))), ((int)(((byte)(0))))); + this.LabX.Location = new System.Drawing.Point(22, 2); + this.LabX.Name = "LabX"; + this.LabX.Size = new System.Drawing.Size(15, 17); + this.LabX.TabIndex = 2; + this.LabX.Text = "0"; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label4.Location = new System.Drawing.Point(59, 2); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(20, 17); + this.label4.TabIndex = 3; + this.label4.Text = "Y:"; + // + // labY + // + this.labY.AutoSize = true; + this.labY.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labY.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(128)))), ((int)(((byte)(0))))); + this.labY.Location = new System.Drawing.Point(78, 2); + this.labY.Name = "labY"; + this.labY.Size = new System.Drawing.Size(15, 17); + this.labY.TabIndex = 4; + this.labY.Text = "0"; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label7.Location = new System.Drawing.Point(3, 100); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(41, 17); + this.label7.TabIndex = 23; + this.label7.Text = "Limit:"; + // + // label9 + // + this.label9.AutoSize = true; + this.label9.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label9.ForeColor = System.Drawing.Color.Yellow; + this.label9.Location = new System.Drawing.Point(55, 100); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(38, 17); + this.label9.TabIndex = 24; + this.label9.Text = "Back:"; + // + // LabBackLimit + // + this.LabBackLimit.AutoSize = true; + this.LabBackLimit.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.LabBackLimit.ForeColor = System.Drawing.Color.Linen; + this.LabBackLimit.Location = new System.Drawing.Point(92, 100); + this.LabBackLimit.Name = "LabBackLimit"; + this.LabBackLimit.Size = new System.Drawing.Size(40, 17); + this.LabBackLimit.TabIndex = 25; + this.LabBackLimit.Text = "Back="; + // + // label12 + // + this.label12.AutoSize = true; + this.label12.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label12.ForeColor = System.Drawing.Color.Red; + this.label12.Location = new System.Drawing.Point(164, 100); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(43, 17); + this.label12.TabIndex = 26; + this.label12.Text = "Front:"; + // + // labFrontLimit + // + this.labFrontLimit.AutoSize = true; + this.labFrontLimit.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labFrontLimit.ForeColor = System.Drawing.Color.Linen; + this.labFrontLimit.Location = new System.Drawing.Point(215, 100); + this.labFrontLimit.Name = "labFrontLimit"; + this.labFrontLimit.Size = new System.Drawing.Size(40, 17); + this.labFrontLimit.TabIndex = 27; + this.labFrontLimit.Text = "Back="; + // + // label11 + // + this.label11.AutoSize = true; + this.label11.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label11.Location = new System.Drawing.Point(5, 21); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(81, 17); + this.label11.TabIndex = 28; + this.label11.Text = "F_Animation:"; + // + // label13 + // + this.label13.AutoSize = true; + this.label13.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label13.Location = new System.Drawing.Point(74, 21); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(56, 17); + this.label13.TabIndex = 29; + this.label13.Text = "F_Frame"; + // + // labFFrame + // + this.labFFrame.AutoSize = true; + this.labFFrame.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labFFrame.ForeColor = System.Drawing.Color.Linen; + this.labFFrame.Location = new System.Drawing.Point(124, 21); + this.labFFrame.Name = "labFFrame"; + this.labFFrame.Size = new System.Drawing.Size(20, 17); + this.labFFrame.TabIndex = 30; + this.labFFrame.Text = "10"; + // + // label15 + // + this.label15.AutoSize = true; + this.label15.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label15.Location = new System.Drawing.Point(145, 21); + this.label15.Name = "label15"; + this.label15.Size = new System.Drawing.Size(47, 17); + this.label15.TabIndex = 31; + this.label15.Text = "F_Tick"; + // + // labFTick + // + this.labFTick.AutoSize = true; + this.labFTick.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labFTick.ForeColor = System.Drawing.Color.Linen; + this.labFTick.Location = new System.Drawing.Point(190, 21); + this.labFTick.Name = "labFTick"; + this.labFTick.Size = new System.Drawing.Size(13, 17); + this.labFTick.TabIndex = 32; + this.labFTick.Text = "1"; + // + // label14 + // + this.label14.AutoSize = true; + this.label14.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label14.Location = new System.Drawing.Point(216, 21); + this.label14.Name = "label14"; + this.label14.Size = new System.Drawing.Size(53, 17); + this.label14.TabIndex = 33; + this.label14.Text = "F_Blend"; + // + // labFBlend + // + this.labFBlend.AutoSize = true; + this.labFBlend.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labFBlend.ForeColor = System.Drawing.Color.Linen; + this.labFBlend.Location = new System.Drawing.Point(266, 21); + this.labFBlend.Name = "labFBlend"; + this.labFBlend.Size = new System.Drawing.Size(32, 17); + this.labFBlend.TabIndex = 34; + this.labFBlend.Text = "true"; + // + // label22 + // + this.label22.AutoSize = true; + this.label22.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label22.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(128)))), ((int)(((byte)(0))))); + this.label22.Location = new System.Drawing.Point(3, 40); + this.label22.Name = "label22"; + this.label22.Size = new System.Drawing.Size(84, 17); + this.label22.TabIndex = 35; + this.label22.Text = "M_Animation:"; + // + // label21 + // + this.label21.AutoSize = true; + this.label21.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label21.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(128)))), ((int)(((byte)(0))))); + this.label21.Location = new System.Drawing.Point(72, 40); + this.label21.Name = "label21"; + this.label21.Size = new System.Drawing.Size(59, 17); + this.label21.TabIndex = 36; + this.label21.Text = "M_Frame"; + // + // labMFrame + // + this.labMFrame.AutoSize = true; + this.labMFrame.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labMFrame.ForeColor = System.Drawing.Color.Linen; + this.labMFrame.Location = new System.Drawing.Point(124, 40); + this.labMFrame.Name = "labMFrame"; + this.labMFrame.Size = new System.Drawing.Size(20, 17); + this.labMFrame.TabIndex = 37; + this.labMFrame.Text = "10"; + // + // label19 + // + this.label19.AutoSize = true; + this.label19.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label19.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(128)))), ((int)(((byte)(0))))); + this.label19.Location = new System.Drawing.Point(144, 40); + this.label19.Name = "label19"; + this.label19.Size = new System.Drawing.Size(50, 17); + this.label19.TabIndex = 38; + this.label19.Text = "M_Tick"; + // + // labMTick + // + this.labMTick.AutoSize = true; + this.labMTick.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labMTick.ForeColor = System.Drawing.Color.Linen; + this.labMTick.Location = new System.Drawing.Point(190, 40); + this.labMTick.Name = "labMTick"; + this.labMTick.Size = new System.Drawing.Size(13, 17); + this.labMTick.TabIndex = 39; + this.labMTick.Text = "1"; + // + // label17 + // + this.label17.AutoSize = true; + this.label17.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label17.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(128)))), ((int)(((byte)(0))))); + this.label17.Location = new System.Drawing.Point(215, 40); + this.label17.Name = "label17"; + this.label17.Size = new System.Drawing.Size(56, 17); + this.label17.TabIndex = 40; + this.label17.Text = "M_Blend"; + // + // labMBlend + // + this.labMBlend.AutoSize = true; + this.labMBlend.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labMBlend.ForeColor = System.Drawing.Color.Linen; + this.labMBlend.Location = new System.Drawing.Point(266, 40); + this.labMBlend.Name = "labMBlend"; + this.labMBlend.Size = new System.Drawing.Size(32, 17); + this.labMBlend.TabIndex = 41; + this.labMBlend.Text = "true"; + // + // label16 + // + this.label16.AutoSize = true; + this.label16.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label16.Location = new System.Drawing.Point(3, 60); + this.label16.Name = "label16"; + this.label16.Size = new System.Drawing.Size(39, 17); + this.label16.TabIndex = 42; + this.label16.Text = "Door:"; + // + // label18 + // + this.label18.AutoSize = true; + this.label18.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label18.Location = new System.Drawing.Point(79, 60); + this.label18.Name = "label18"; + this.label18.Size = new System.Drawing.Size(50, 17); + this.label18.TabIndex = 43; + this.label18.Text = "OffSet"; + // + // labDoorOffSet + // + this.labDoorOffSet.AutoSize = true; + this.labDoorOffSet.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labDoorOffSet.ForeColor = System.Drawing.Color.Linen; + this.labDoorOffSet.Location = new System.Drawing.Point(124, 60); + this.labDoorOffSet.Name = "labDoorOffSet"; + this.labDoorOffSet.Size = new System.Drawing.Size(15, 17); + this.labDoorOffSet.TabIndex = 44; + this.labDoorOffSet.Text = "5"; + // + // label20 + // + this.label20.AutoSize = true; + this.label20.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label20.Location = new System.Drawing.Point(152, 60); + this.label20.Name = "label20"; + this.label20.Size = new System.Drawing.Size(40, 17); + this.label20.TabIndex = 45; + this.label20.Text = "Index"; + // + // labDoorIndex + // + this.labDoorIndex.AutoSize = true; + this.labDoorIndex.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labDoorIndex.ForeColor = System.Drawing.Color.Linen; + this.labDoorIndex.Location = new System.Drawing.Point(190, 60); + this.labDoorIndex.Name = "labDoorIndex"; + this.labDoorIndex.Size = new System.Drawing.Size(15, 17); + this.labDoorIndex.TabIndex = 46; + this.labDoorIndex.Text = "5"; + // + // label23 + // + this.label23.AutoSize = true; + this.label23.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label23.Location = new System.Drawing.Point(226, 60); + this.label23.Name = "label23"; + this.label23.Size = new System.Drawing.Size(44, 17); + this.label23.TabIndex = 47; + this.label23.Text = "Entity"; + // + // labEntityDoor + // + this.labEntityDoor.AutoSize = true; + this.labEntityDoor.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labEntityDoor.ForeColor = System.Drawing.Color.Linen; + this.labEntityDoor.Location = new System.Drawing.Point(266, 60); + this.labEntityDoor.Name = "labEntityDoor"; + this.labEntityDoor.Size = new System.Drawing.Size(32, 17); + this.labEntityDoor.TabIndex = 48; + this.labEntityDoor.Text = "true"; + // + // label24 + // + this.label24.AutoSize = true; + this.label24.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label24.Location = new System.Drawing.Point(3, 80); + this.label24.Name = "label24"; + this.label24.Size = new System.Drawing.Size(41, 17); + this.label24.TabIndex = 49; + this.label24.Text = "Light:"; + // + // labLight + // + this.labLight.AutoSize = true; + this.labLight.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labLight.ForeColor = System.Drawing.Color.Linen; + this.labLight.Location = new System.Drawing.Point(55, 80); + this.labLight.Name = "labLight"; + this.labLight.Size = new System.Drawing.Size(15, 17); + this.labLight.TabIndex = 50; + this.labLight.Text = "5"; + // + // label25 + // + this.label25.AutoSize = true; + this.label25.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label25.Location = new System.Drawing.Point(164, 80); + this.label25.Name = "label25"; + this.label25.Size = new System.Drawing.Size(51, 17); + this.label25.TabIndex = 51; + this.label25.Text = "Fishing:"; + // + // labfishing + // + this.labfishing.AutoSize = true; + this.labfishing.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labfishing.ForeColor = System.Drawing.Color.Linen; + this.labfishing.Location = new System.Drawing.Point(215, 80); + this.labfishing.Name = "labfishing"; + this.labfishing.Size = new System.Drawing.Size(32, 17); + this.labfishing.TabIndex = 52; + this.labfishing.Text = "true"; + // + // CellInfoControl_2 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.Transparent; + this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None; + this.Controls.Add(this.labfishing); + this.Controls.Add(this.label25); + this.Controls.Add(this.labLight); + this.Controls.Add(this.label24); + this.Controls.Add(this.labEntityDoor); + this.Controls.Add(this.label23); + this.Controls.Add(this.labDoorIndex); + this.Controls.Add(this.label20); + this.Controls.Add(this.labDoorOffSet); + this.Controls.Add(this.label18); + this.Controls.Add(this.label16); + this.Controls.Add(this.labMBlend); + this.Controls.Add(this.label17); + this.Controls.Add(this.labMTick); + this.Controls.Add(this.label19); + this.Controls.Add(this.labMFrame); + this.Controls.Add(this.label21); + this.Controls.Add(this.label22); + this.Controls.Add(this.labFBlend); + this.Controls.Add(this.label14); + this.Controls.Add(this.labFTick); + this.Controls.Add(this.label15); + this.Controls.Add(this.labFFrame); + this.Controls.Add(this.label13); + this.Controls.Add(this.label11); + this.Controls.Add(this.labFrontLimit); + this.Controls.Add(this.label12); + this.Controls.Add(this.LabBackLimit); + this.Controls.Add(this.label9); + this.Controls.Add(this.label7); + this.Controls.Add(this.labY); + this.Controls.Add(this.label4); + this.Controls.Add(this.LabX); + this.Controls.Add(this.label1); + this.DoubleBuffered = true; + this.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(128)))), ((int)(((byte)(0))))); + this.Name = "CellInfoControl_2"; + this.Size = new System.Drawing.Size(304, 120); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label LabX; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label labY; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.Label LabBackLimit; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.Label labFrontLimit; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.Label labFFrame; + private System.Windows.Forms.Label label15; + private System.Windows.Forms.Label labFTick; + private System.Windows.Forms.Label label14; + private System.Windows.Forms.Label labFBlend; + private System.Windows.Forms.Label label22; + private System.Windows.Forms.Label label21; + private System.Windows.Forms.Label labMFrame; + private System.Windows.Forms.Label label19; + private System.Windows.Forms.Label labMTick; + private System.Windows.Forms.Label label17; + private System.Windows.Forms.Label labMBlend; + private System.Windows.Forms.Label label16; + private System.Windows.Forms.Label label18; + private System.Windows.Forms.Label labDoorOffSet; + private System.Windows.Forms.Label label20; + private System.Windows.Forms.Label labDoorIndex; + private System.Windows.Forms.Label label23; + private System.Windows.Forms.Label labEntityDoor; + private System.Windows.Forms.Label label24; + private System.Windows.Forms.Label labLight; + private System.Windows.Forms.Label label25; + private System.Windows.Forms.Label labfishing; + } +} diff --git a/MapEditor/Map Editor/CellInfoControl_2.cs b/MapEditor/Map Editor/CellInfoControl_2.cs new file mode 100644 index 0000000..c8359c9 --- /dev/null +++ b/MapEditor/Map Editor/CellInfoControl_2.cs @@ -0,0 +1,78 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace Map_Editor +{ + public partial class CellInfoControl_2 : UserControl + { + public CellInfoControl_2() + { + InitializeComponent(); + } + + public void SetText(int x, int y, int backLimit, int frontLimit, + byte fFrame, byte ftick, bool fblend, byte mFrame, byte mTick, bool mBlend, byte doorOffSet, byte doorIndex, bool entityDoor, byte light, bool fishing) + { + LabX.Text = x.ToString(); + labY.Text = y.ToString(); + + if (backLimit != 0) + { + LabBackLimit.Text = "True"; + } + else + { + LabBackLimit.Text = "False"; + } + if (frontLimit != 0) + { + labFrontLimit.Text = "True"; + } + else + { + labFrontLimit.Text = "False"; + } + + + if (fFrame > 0) + { + labFFrame.Text = fFrame.ToString(); + labFTick.Text = ftick.ToString(); + labFBlend.Text = fblend.ToString(); + } + else + { + labFFrame.Text = String.Empty; + labFTick.Text = String.Empty; + labFBlend.Text = String.Empty; + } + if ((mFrame > 0) && (mFrame < 255)) + { + labMFrame.Text = (mFrame & 0x0F).ToString(); + labMTick.Text = mTick.ToString(); + labMBlend.Text = Convert.ToBoolean(mFrame & 0x0F).ToString(); + } + else + { + labMFrame.Text = String.Empty; + labMTick.Text = String.Empty; + labMBlend.Text = String.Empty; + } + + labDoorOffSet.Text = doorOffSet.ToString(); + labDoorIndex.Text = doorIndex.ToString(); + labEntityDoor.Text = entityDoor.ToString(); + + labLight.Text = light.ToString(); + labfishing.Text = fishing.ToString(); + } + + } +} diff --git a/MapEditor/Map Editor/CellInfoControl_2.resx b/MapEditor/Map Editor/CellInfoControl_2.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/MapEditor/Map Editor/CellInfoControl_2.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/MapEditor/Map Editor/CellInfoData.cs b/MapEditor/Map Editor/CellInfoData.cs new file mode 100644 index 0000000..bedd8a7 --- /dev/null +++ b/MapEditor/Map Editor/CellInfoData.cs @@ -0,0 +1,42 @@ +namespace Map_Editor +{ + public class CellInfoData + { + public int X; + public int Y; + public CellInfo CellInfo; + + public CellInfoData() + { + + } + + public CellInfoData(int x, int y, CellInfo cellInfo) + { + X = x; + Y = y; + this.CellInfo = new CellInfo + { + FrontImage = cellInfo.FrontImage, + BackImage = cellInfo.BackImage, + BackIndex = cellInfo.BackIndex, + DoorIndex = cellInfo.DoorIndex, + DoorOffset = cellInfo.DoorOffset, + FishingCell = cellInfo.FishingCell, + FrontAnimationFrame = cellInfo.FrontAnimationFrame, + FrontAnimationTick = cellInfo.FrontAnimationTick, + FrontIndex = cellInfo.FrontIndex, + Light = cellInfo.Light, + MiddleAnimationFrame = cellInfo.MiddleAnimationFrame, + MiddleAnimationTick = cellInfo.MiddleAnimationTick, + MiddleImage = cellInfo.MiddleImage, + MiddleIndex = cellInfo.MiddleIndex, + TileAnimationFrames = cellInfo.TileAnimationFrames, + TileAnimationImage = cellInfo.TileAnimationImage, + TileAnimationOffset = cellInfo.TileAnimationOffset, + Unknown = cellInfo.Unknown + }; + } + } + +} diff --git a/MapEditor/Map Editor/DXManager.cs b/MapEditor/Map Editor/DXManager.cs new file mode 100644 index 0000000..0f2d568 --- /dev/null +++ b/MapEditor/Map Editor/DXManager.cs @@ -0,0 +1,683 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Drawing.Imaging; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Blend = Microsoft.DirectX.Direct3D.Blend; + +namespace Map_Editor +{ + + + class DXManager + { + public static List TextureList = new List(); + /// + /// 主设备 + /// + public static Device Device; + /// + /// 精灵 + /// + public static Sprite Sprite, TextSprite; + /// + /// 线 + /// + public static Line Line; + /// + /// 当前表面 或者 现有表面 + /// + public static Surface CurrentSurface; + /// + /// 主表面 + /// + public static Surface MainSurface; + /// + /// 描述呈现参数。 + /// + public static PresentParameters Parameters; + /// + /// 设备是否丢失 true 丢失 、false 未丢失 + /// + public static bool DeviceLost; + /// + /// 不透明度 + /// + public static float Opacity = 1F; + /// + /// 是否混合 + /// + public static bool Blending; + + /// + /// 光源纹理集合 + /// + public static List Lights = new List(); + + /// + /// 光源坐标集合 + /// + public static Point[] LightSizes = + { + new Point(125,95), + new Point(205,156), + new Point(285,217), + new Point(365,277), + new Point(445,338), + new Point(525,399), + new Point(605,460), + new Point(685,521), + new Point(765,581), + new Point(845,642), + new Point(925,703) + }; + + private static Control _control; + public static void Create(Control control) + { + + _control = control; + Parameters = new PresentParameters + { + //检索或设置后台缓冲区的格式// 一种 32 位 RGB 像素格式,其中每种颜色使用 8 位。 + BackBufferFormat = Format.X8R8G8B8, + //检索或设置呈现标志 //通知驱动程序,后台缓冲区包含视频数据 + PresentFlag = PresentFlag.LockableBackBuffer, + //检索或设置交换链的后台缓冲区的高度 + BackBufferWidth = control.Width, + //检索或设置交换链的后台缓冲区的宽度 + BackBufferHeight = control.Height, + //检索或设置交换效果 ////当前屏幕绘制后它将自动从内存中删除 + SwapEffect = SwapEffect.Discard, + //用于描述适配器刷新率与 Device 的 Present 运算完成速率之间的关系 + //One 驱动程序需要等待垂直回描周期(运行库将实施跟踪以防止脱节)。Present 运算受影响的频率不超过屏幕的刷新率;运行库在适配器的每个刷新周期内至多完成一次 Present 运算。对于窗口式和全屏交换链而言,此选项都始终可用。 + //Immediate 运行库将立即更新窗口工作区,并且,在适配器刷新周期内可能不止更新一次。Present 运算可能马上受到影响。对于窗口式和全屏交换链而言,此选项都始终可用 + PresentationInterval = PresentInterval.One, + //指示应用程序是否在窗口模式下运行。//如果应用程序运行时有窗口,则为 true,否则为 false + Windowed = true + }; + + //检索特定于设备的信息。 + Caps devCaps = Manager.GetDeviceCaps(0, DeviceType.Hardware); + + // 指定设备类型。 + + //---------------DeviceType------------ + //NullReference 4 一个空参考光栅器的版本。 + //Software 3 一个软件的设备。 + //Reference 2 微软Direct3D的特点是在软件中实现的;然而,参考光栅化程序尽可能使用特殊的CPU指令。 + //Hardware 1 一个硬件的设备 + DeviceType devType = DeviceType.Reference; + //定义在创建设备时要使用的标志 + CreateFlags devFlags = CreateFlags.HardwareVertexProcessing; //指定硬件顶点处理 + //检索一个对象,该值指示主要和附属设备所支持的顶点着色器版本。 检索一个对象,该值指示主要和下属像素着色器版本。 + if (devCaps.VertexShaderVersion.Major >= 2 && devCaps.PixelShaderVersion.Major >= 2) + //设备类型 + devType = DeviceType.Hardware; + + //NoWindowChanges 2048 微软Direct3D指示运行时不要以任何方式改变焦点的窗口。请谨慎使用! 支持集中管理事件的负担(ALT标签等)瀑布上的应用,和适当的反应(切换显示模式等)应编码。 + //DisableDriverManagementEx 1024 指定资源管理利用Direct3D代替设备。Direct3D调用资源不会失败的错误,如视频内存不足。 + //AdapterGroupDevice 512 + //DisableDriverManagement 256 指定资源管理利用Direct3D代替设备。Direct3D调用资源不会失败的错误,如视频内存不足。 + //MixedVertexProcessing 128 指定混合顶点处理(包括软件和硬件)。 + //HardwareVertexProcessing 64 指定硬件顶点处理。 + //SoftwareVertexProcessing 32 指定软件顶点处理。 + //PureDevice 16 如果设备不支持顶点处理,应用程序可以只使用后改变顶点。 + //MultiThreaded 4 指示应用程序请求的Direct3D的多线程安全。这会导致Direct3D更频繁地检查其全球关键节,这会降低性能。从Microsoft DirectX 9.0 SDK更新(2003夏天),这总是指定枚举值,除非该参数四。ForceNoMultiThreadedFlag设置为true。 + //FpuPreserve 2 指示应用程序需要浮点单元(FPU)异常或双精度浮点异常启用。默认情况下,Direct3D使用单精度。 因为每次它被称为Direct3D设置FPU状态,设置此标志减少了Direct3D性能。 + + + //指示设备是否支持硬件转换和照明。 + if (devCaps.DeviceCaps.SupportsHardwareTransformAndLight) + //指定硬件顶点处理。 + devFlags = CreateFlags.HardwareVertexProcessing; + + //指示设备是否支持光栅化、转换、照明和阴影在硬件。 + if (devCaps.DeviceCaps.SupportsPureDevice) + //如果设备不支持顶点处理,应用程序可以只使用改变后的顶点。 + devFlags |= CreateFlags.PureDevice; + + // 参数 + //adapter + // 一个标识对象表示哪个物理设备的序号。设备 0 表示默认设备。在此参数中可使用的最大值为物理设备总数减 1。 + + //deviceType + // DeviceType 枚举类型的一个成员,它表示所需的设备类型。如果所需的设备类型不可用,则该方法将失败。 + + //renderWindow + // Form 或任何其他 Control 派生类的句柄。此参数指示要绑定到设备的图面。 + // 指定的窗口必须是顶级窗口,Null 值不受支持。 + + //behaviorFlags + // 控制设备创建操作的一个或多个选项的组合。 + + //presentationParameters + // 一个 PresentParameters 对象,它描述要创建的设备的表示参数。 + Device = new Device(Manager.Adapters.Default.Adapter, devType, control, devFlags, Parameters); + //在设备将要丢失时发生 + Device.DeviceLost += Device_DeviceLost; + //设备调整大小时发生 + Device.DeviceResizing += Device_DeviceResizing; + //重置设备之后发生 + Device.DeviceReset += Device_DeviceReset; + //当调用 Dispose 方法时,或者当设备对象被终结并被垃圾回收器回收时。 + Device.Disposing += Device_Disposing; + //Device.DeviceLost += (o, e) => DeviceLost = true; + //Device.DeviceResizing += (o, e) => e.Cancel = true; + //Device.DeviceReset += (o, e) => LoadTextures(); + //Device.Disposing += (o, e) => Clean(); + + //允许使用Microsoft Windows图形设备接口(GDI)在全屏应用程序对话框。 + Device.SetDialogBoxesEnabled(true); + + LoadTextures(); + } + + #region Device 事件 + private static void Device_Disposing(object sender, EventArgs e) + { + Clean(); + } + + private static void Device_DeviceReset(object sender, EventArgs e) + { + LoadTextures(); + } + + private static void Device_DeviceResizing(object sender, CancelEventArgs e) + { + + if (_control.Size==new Size(0,0) ) + { + e.Cancel = true; + } + else + { + e.Cancel = false; + } + } + + private static void Device_DeviceLost(object sender, EventArgs e) + { + DeviceLost = true; + } + #endregion + /// + /// 加载纹理 + /// + private static unsafe void LoadTextures() + {//unsafe 关键字表示不安全上下文,该上下文是任何涉及指针的操作所必需的。 + + //Sprite 提供的方法和属性用于简化使用 Direct3D 绘制子画面的过程。 + //初始化 Sprite 类的新实例。 + // 参数 + //device + // Device 的一个实例。 + Sprite = new Sprite(Device); + TextSprite = new Sprite(Device); + //Line 类在两个点之间绘制一条直线。 + Line = new Line(Device) { Width = 1F }; + //获取指定的后台缓冲区。 + //参数 + //swapChain + //无符号整数,它指定交换链。 + + //backBuffer + //要返回的后台缓冲区对象的索引。 + + //backBufferType + // 要返回的后台缓冲区的类型。只有 Mono 是有效值。 + //返回值 :一个 Surface,它表示返回的后台缓冲区图面。 + MainSurface = Device.GetBackBuffer(0, 0, BackBufferType.Mono); + CurrentSurface = MainSurface; + + //SetRenderTarget 为设备设置新的颜色缓冲区。 + // 参数 + + //renderTarget + // 呈现目标的索引 Surface。 + + //newZStencil + // 新颜色缓冲区 Surface。如果将该参数设置为 空引用(在 Visual Basic 中为 Nothing),则会禁用相应 renderTarget 的颜色缓冲区。设备必须始终与一个颜色缓冲区相关联。 + // 新呈现目标图面至少必须指定 Usage。 + Device.SetRenderTarget(0, MainSurface); + + + //if (RadarTexture == null || RadarTexture.Disposed) + //{ + // //参数 + + // //device + // // 类型:Microsoft.WindowsMobile.DirectX.Direct3D.Device + // // 要与 Texture 关联的 Device 对象。 + + // //width + // // 类型:System.Int32 + // // 纹理顶级的宽度(以像素为单位)。后续级别的像素尺寸是前一级别像素尺寸的一半的截整值(每个级别的计算都是独立进行的)。每个尺寸都限制在至少一个像素大小。因此,如果被 2 除后再进行截断所得到的结果为 0,则改为采用 1。 + + // //height + // // 类型:System.Int32 + // // 纹理顶级的高度(以像素为单位)。后续级别的像素尺寸是前一级别像素尺寸的一半的截整值(每个级别的计算都是独立进行的)。每个尺寸都限制在至少一个像素大小。因此,如果被 2 除后再进行截断所得到的结果为 0,则改为采用 1。 + + // //numLevels + // // 类型:System.Int32 + // // 纹理中的级别数。如果此值为 0,对于支持 mipmap 形式纹理的硬件,Direct3D 会向下生成纹理的所有子级,直至生成的纹理子级的大小为 1 x 1 像素。检查 BaseTexture.LevelCount 属性以查看生成的级别数。 + + // //usage + // // 类型:Microsoft.WindowsMobile.DirectX.Direct3D.Usage + // // Usage 可以是 0,表示没有用法值。但是,如果需要 usage,则请使用一个或多个 Usage 常数。建议使 usage 参数与 Device 的构造函数中的 CreateFlags 匹配。 + + // //format + // // 类型:Microsoft.WindowsMobile.DirectX.Direct3D.Format + // // 一个 Format 值,用于描述纹理中所有级别的格式。 + + // //pool + // // 类型:Microsoft.WindowsMobile.DirectX.Direct3D.Pool + // // 一个 Pool 值,用于描述纹理应被放入的内存类。 + // RadarTexture = new Texture(Device, 2, 2, 1, Usage.None, Format.A8R8G8B8, Pool.Managed); + + // //GraphicsStream 包含图形数据流。 + // //LockRectangle 锁定纹理资源中的矩形。 + // //参数 + + // //level + // // 类型:System.Int32 + // // 要锁定的纹理资源的 minmap 级别。 + + // //flags + // // 类型:Microsoft.WindowsMobile.DirectX.Direct3D.LockFlags + // // 零个或多个 LockFlags 值,用于描述要执行的锁定的类型。对于此方法,有效的标志为 Discard、NoDirtyUpdate 和 ReadOnly。 + + // //返回值 + // // GraphicsStream,用于描述锁定的区域。 + + // //-------------------LockFlags---------------------- + // //None 应用程序既可以从缓冲区读取也可以向缓冲区写入。 + // //ReadOnly 应用程序不向缓冲区写入。利用此标志,可以使以非本机格式存储的资源在解锁时省去重新压缩的步骤。 NoDirtyUpdate 默认情况下,资源上的锁向该资源添加“脏”区域。此标志禁止对资源的脏状态进行任何更改。当应用程序在锁定操作期间更改了关于一组区域的附加信息时,该应用程序应使用此标志。 + // //NoOverwrite 确保应用程序不改写顶点和索引缓冲区中的任何数据。使用具有此标志的顶点缓冲区时,驱动程序可以立即返回并继续呈现。如果未使用此标志,则驱动程序必须先完成呈现,然后才能从锁定状态返回。 + // //Discard 应用程序使用只写操作改写锁定区域内的每个位置。当使用动态纹理、动态顶点缓冲区和动态索引缓冲区时,此选项为有效选项。 + // using (GraphicsStream stream = RadarTexture.LockRectangle(0, LockFlags.Discard)) + + // //Bitmap封装 GDI+ 位图,此位图由图形图像及其特性的像素数据组成。 Bitmap 是用于处理由像素数据定义的图像的对象。 + + // //用指定的大小、像素格式和像素数据初始化 Bitmap 类的新实例 + // //参数 + + // //width + // // 新 Bitmap 的宽度(以像素为单位)。 + + // //height + // // 新 Bitmap 的高度(以像素为单位)。 + + // //stride + // // 指定相邻扫描行开始处之间字节偏移量的整数。这通常(但不一定)是以像素格式表示的字节数(例如,2 表示每像素 16 位)乘以位图的宽度。传递给此参数的值必须为 4 的倍数。 + + // //format + // // 新 Bitmap 的像素格式。这必须指定以 Format 开头的值。 + + // //scan0 + // // 指向包含像素数据的字节数组的指针。 + // using (Bitmap image = new Bitmap(2, 2, 8, PixelFormat.Format32bppArgb, (IntPtr)stream.InternalDataPointer)) + // //从指定的 Image 创建新的 Graphics。 + // using (Graphics graphics = Graphics.FromImage(image)) + // //清除整个绘图面并以指定背景色填充。 + // graphics.Clear(Color.White); + //} + //if (PoisonDotBackground == null || PoisonDotBackground.Disposed) + //{ + // PoisonDotBackground = new Texture(Device, 5, 5, 1, Usage.None, Format.A8R8G8B8, Pool.Managed); + // //锁定纹理资源中的矩形。 + // using (GraphicsStream stream = PoisonDotBackground.LockRectangle(0, LockFlags.Discard)) + // //用指定的大小、像素格式和像素数据初始化 Bitmap 类的新实例 + // using (Bitmap image = new Bitmap(5, 5, 20, PixelFormat.Format32bppArgb, (IntPtr)stream.InternalDataPointer)) + // //从指定的 Image 创建新的 Graphics。 + // using (Graphics graphics = Graphics.FromImage(image)) + // //清除整个绘图面并以指定背景色填充 + // graphics.Clear(Color.White); + //} + //CreateLights(); + } + /// + /// 创建光源 + /// + private unsafe static void CreateLights() + { + + for (int i = Lights.Count - 1; i >= 0; i--) + Lights[i].Dispose(); + + Lights.Clear(); + + for (int i = 1; i < LightSizes.Length; i++) + { + // int width = 125 + (57 *i); + //int height = 110 + (57 * i); + int width = LightSizes[i].X; + int height = LightSizes[i].Y; + Texture light = new Texture(Device, width, height, 1, Usage.None, Format.A8R8G8B8, Pool.Managed); + ////LockRectangle 锁定纹理资源中的矩形 + using (GraphicsStream stream = light.LockRectangle(0, LockFlags.Discard)) + //用指定的大小、像素格式和像素数据初始化 Bitmap 类的新实例 + using (Bitmap image = new Bitmap(width, height, width * 4, PixelFormat.Format32bppArgb, (IntPtr)stream.InternalDataPointer)) + { + //从指定的 Image 创建新的 Graphics。 + using (Graphics graphics = Graphics.FromImage(image)) + { + //GraphicsPath 表示一系列相互连接的直线和曲线 + using (GraphicsPath path = new GraphicsPath()) + { + //AddEllipse 向当前路径添加一个椭圆。 + // 参数 + + //x + // Type: System.Int32 + // 定义椭圆的边框的左上角的 X 坐标。 + + //y + // Type: System.Int32 + // 定义椭圆的边框的左上角的 Y 坐标。 + + //width + // 定义椭圆的边框的宽度。 + + //height + // 定义椭圆的边框的高度。 + path.AddEllipse(new Rectangle(0, 0, width, height)); + //PathGradientBrush 类 封装 Brush 对象,它通过渐变填充 GraphicsPath 对象的内部 + // 使用指定的路径初始化 PathGradientBrush 类的新实例。 + // 参数 + //path + // GraphicsPath,定义此 PathGradientBrush 填充的区域。 + using (PathGradientBrush brush = new PathGradientBrush(path)) + { + graphics.Clear(Color.FromArgb(0, 0, 0, 0)); + //获取或设置与此 PathGradientBrush 填充的路径中的点相对应的颜色的数组。 + brush.SurroundColors = new[] { Color.FromArgb(0, 255, 255, 255) }; + //获取或设置路径渐变的中心处的颜色 + brush.CenterColor = Color.FromArgb(255, 255, 255, 255); + //填充 GraphicsPath 的内部。 + //参数 + + //brush + // 确定填充特性的 Brush。 + + //path + // GraphicsPath,它表示要填充的路径。 + graphics.FillPath(brush, path); + //保存此 Graphics 的当前状态,并用 GraphicsState 标识保存的状态。 + graphics.Save(); + } + } + } + } + //添加light + Lights.Add(light); + //为light添加 Disposing 事件 ,用来Lights.Remove(light); + light.Disposing += (o, e) => Lights.Remove(light); + } + } + /// + /// 设置表面 + /// + /// + public static void SetSurface(Surface surface) + { + if (CurrentSurface == surface) + return; + //强制将所有批子画面都提交给设备。 + Sprite.Flush(); + CurrentSurface = surface; + //为设备设置新的颜色缓冲区。 + Device.SetRenderTarget(0, surface); + } + /// + /// 尝试重置 + /// + public static void AttemptReset() + { + try + { + int result; + //CheckCooperativeLevel 为窗口应用程序或全屏应用程序报告 Direct3D 设备的当前协作级别状态。 + //参数 + + //hResult + // 窗口应用程序或全屏应用程序的设备的当前协作级别状态,用 ResultCode 值进行报告。Success 结果指示设备可操作并且调用应用程序可继续。DeviceLost 结果指示设备已丢失,但是此时无法重置;因此无法进行呈现。DeviceNotReset 结果指示设备已丢失,但是此时可以重置。 + + //返回值 + //如果设备可操作并且调用应用程序可以继续,则为 true;如果设备已丢失或者需要重置,则为 false。 + Device.CheckCooperativeLevel(out result); + + // -------------ResultCode)result 返回值类型------------- + // AlreadyLocked 设备已锁定。 + // ConflictingRenderState 呈现状态不兼容。 + // ConflictingTextureFilter 当前的纹理筛选器不能一起使用。 + // ConflictingTexturePalette 当前的纹理调色板不能一起使用。 + // DeviceLost 设备已丢失,但此时无法对其进行重置。因此,不可能进行呈现。 + // DeviceNotReset 设备不支持所查询的技术。 + // DriverInternalError 发生驱动程序内部错误。 + // DriverInvalidCall 驱动程序检测到无效的调用。 + // DriverUnsupported 驱动程序不受支持。 + // GenericFailure 常规失败。 + // InvalidCall 方法调用无效;例如,方法的参数可能不是有效的指针。 + // InvalidDevice 请求的设备类型无效。 + // MemoryPoolEmpty 指定的内存池是空的。 + // MoreData 传入例程的缓冲区所含元素数量不足,无法完成该操作。 + // NotAvailable 请求的格式不可用。 + // NotFound 搜索例程未能返回元素。 + + // Success 操作成功。 + + // TooManyOperations 应用程序请求的纹理筛选操作数量多于设备支持的纹理筛选操作数量。 + // UnsupportedAlphaArgument 设备不支持 alpha 通道的指定纹理混合参数。 + // UnsupportedAlphaOperation 设备不支持 alpha 通道的指定纹理混合操作。 + // UnsupportedColorArgument 设备不支持颜色值的指定纹理混合参数。 + // UnsupportedColorOperation 设备不支持颜色值的指定纹理混合操作。 + // UnsupportedFactorValue 设备不支持指定的纹理因子值。 + // UnsupportedTextureFilter 设备不支持指定的纹理筛选器。 + // WrongTextureFormat 像素格式的纹理图面无效。 + switch ((ResultCode)result) + { + //设备不支持所查询的技术。 + case ResultCode.DeviceNotReset: + //Device.Reset(Parameters)重置当前设备的表示参数。 + //参数 + + //presentationParameters + // 一个 PresentParameters 结构,它描述新的表示参数。此参数不能为空。 + + //备注 + //切换到全屏模式时,Direct3D 会尝试找到一种与后台缓冲区格式匹配的桌面格式,以便后台缓冲区格式和前台缓冲区格式相同。这样就无需转换颜色了。 + //如果对 Reset 的调用失败,除非设备处于“未重置”状态(由从 CheckCooperativeLevel 方法的 hResult 参数返回的 DeviceNotReset 来指示),否则设备会被置于“丢失”状态(由从对 CheckCooperativeLevel 的调用返回的值 false 指示)。 + //调用 Reset 将导致所有纹理内存图面和状态信息丢失,并且还会导致托管纹理在视频内存中被刷新。在对设备调用 Reset 前,应用程序应释放任何与该设备相关联的显式呈现目标、深度模具图面、附加交换链、状态块以及默认资源。 + //交换链可以是全屏的,也可以是窗口式的。如果新的交换链是全屏的,则会将适配器置于与新大小匹配的显示模式中。 + //如果调用 Reset 的线程不是用来创建所要重置的设备的线程,则该调用将失败。 + //调用 Device、Reset 和 SwapChain 时,可以将窗口模式后台缓冲区的格式指定为“未知”。这意味着应用程序在窗口模式下调用 Device 前不必查询当前的桌面格式。对于全屏模式,必须指定后台缓冲区格式。将 BackBufferCount 设置为 0 会创建一个后台缓冲区。 + //尝试成组重置多个显示适配器时,可传入 PresentParameters 对象数组,该数组中的每个对象都对应于该适配器组中的一个显示适配器。 + Device.Reset(Parameters); + break; + //设备已丢失,但此时无法对其进行重置。因此,不可能进行呈现。 + case ResultCode.DeviceLost: + break; + //操作成功 + case ResultCode.Success: + DeviceLost = false; + //获取指定的后台缓冲区。 + MainSurface = Device.GetBackBuffer(0, 0, BackBufferType.Mono); + //获取指定的后台缓冲区 + CurrentSurface = Device.GetBackBuffer(0, 0, BackBufferType.Mono); + //为设备设置新的颜色缓冲区。 + Device.SetRenderTarget(0, CurrentSurface); + break; + } + } + catch + { + } + } + /// + /// 尝试恢复 + /// + public static void AttemptRecovery() + { + try + { + //将设备还原为调用 Begin 前的状态。 + //备注 + //此方法不能用于替代 Device 的 EndScene。 + + Sprite.End(); + TextSprite.End(); + } + catch + { + } + + try + { + //结束通过调用 BeginScene 方法开始的场景。 + //备注 + //每个对 BeginScene 的调用后面最终都应有一个对 EndScene 的调用,然后才能用 Present 更新显示。 + //当 EndScene 成功时,该场景将进入由驱动程序进行呈现的队列中。该方法不是同步的,因此不能保证该方法返回时,场景已完成呈现。 + + Device.EndScene(); + } + catch + { + } + + try + { + ////获取指定的后台缓冲区 + MainSurface = Device.GetBackBuffer(0, 0, BackBufferType.Mono); + CurrentSurface = MainSurface; + ////为设备设置新的颜色缓冲区。 + Device.SetRenderTarget(0, MainSurface); + } + catch + { + } + } + /// + /// 设置不透明度 + /// + /// 不透明度 + public static void SetOpacity(float opacity) + { + if (Opacity == opacity) + return; + //强制将所有批子画面都提交给设备。 + Sprite.Flush(); + //获取设备的呈现状态值。AlphaBlendEnable= true; + Device.RenderState.AlphaBlendEnable = true; + if (opacity >= 1 || opacity < 0) + { + + //----------Blend 枚举 ------------ + //DestinationAlpha 混合因子为 (Ad, Ad, Ad, Ad)。 + // DestinationColor 混合因子为 (Rd, Gd, Bd, Ad)。 + // InvDestinationAlpha 混合因子为 (1 - Ad, 1 - Ad, 1 - Ad, 1 - Ad)。 + // InvDestinationColor 混合因子为 (1 - Rd, 1 - Gd, 1 - Bd, 1 - Ad)。 + // InvSourceAlpha 混合因子为 ( 1 - As, 1 - As, 1 - As, 1 - As)。 + // InvSourceColor 混合因子为 (Rs, Gs, Bs, As)。 + // One 混合因子为 (1,1,1,1)。 + // SourceAlpha 混合因子为 (As, As, As, As)。 + // SourceAlphaSat 混合因子为 (f, f, f, 1);f = min(A, 1 - Ad)。 + // SourceColor 混合因子为 (Rs, Gs, Bs, As)。 + // Zero 混合因子为 (0, 0, 0, 0)。 + + //获取或设置颜色混合模式。 + Device.RenderState.SourceBlend = Blend.SourceAlpha; + //表示当前的混合模式或要设置的混合模式 + Device.RenderState.DestinationBlend = Blend.InvSourceAlpha; + //获取或者设置Alpha混合模式 + Device.RenderState.AlphaSourceBlend = Blend.One; + //使用现有颜色混合绘制操作 + Device.RenderState.BlendFactor = Color.FromArgb(255, 255, 255, 255); + } + else + { + Device.RenderState.SourceBlend = Blend.BlendFactor; + Device.RenderState.DestinationBlend = Blend.InvBlendFactor; + Device.RenderState.AlphaSourceBlend = Blend.SourceAlpha; + Device.RenderState.BlendFactor = Color.FromArgb((byte)(255 * opacity), (byte)(255 * opacity), + (byte)(255 * opacity), (byte)(255 * opacity)); + } + Opacity = opacity; + //强制将所有批子画面都提交给设备。 + Sprite.Flush(); + } + /// + /// 设置混合 + /// + /// 是否 + /// 率 + public static void SetBlend(bool value, float rate = 1F) + { + if (value == Blending) return; + Blending = value; + //强制将所有批子画面都提交给设备。 + Sprite.Flush(); + // //将设备还原为调用 Begin 前的状态。 + Sprite.End(); + + if (Blending) + { + //Sprite.Begin准备子画面的绘制 + //参数 + + //flags + //来自 SpriteFlags 的零个或多个值的组合,这些值描述子画面呈现选项。 + + // AlphaBlend 启用 AlphaTestEnable 设为 true(对于非零 alpha)的 alpha 混合。SourceAlpha 是源混合状态,InvSourceAlpha 是 RenderStateManager 调用中的目标混合状态。绘制文本时,Font 类要求设置此标志。 + // Billboard 围绕每个子画面的中心旋转该子画面,以便使其面向查看者。必须首先调用 SetWorldViewLH 或 SetWorldViewRH。 + // DoNotModifyRenderState 指定调用 Begin 时不更改设备呈现状态。 + // DoNotSaveState 禁止在调用 Begin 和 End 时保存或还原设备状态。 + // None 将值解析为 0。 + // ObjectSpace 指定不修改世界、视图和投影转换。当前为设备设置的转换用于在成批绘制子画面时(即,调用 Begin 或 End 时)转换这些子画面。如果未指定此选项,则修改世界、视图和投影转换,以便以屏幕空间坐标绘制子画面。 + // SortDepthBackToFront 绘制前,按深度从后到前的顺序对子画面进行排序。在绘制不同深度的透明子画面时,建议使用此选项。 + // SortDepthFrontToBack 绘制前,按深度从前到后的顺序对子画面进行排序。在绘制不同深度的不透明子画面时,建议使用此选项。 + // SortTexture 绘制前,按纹理子画面进行排序。在绘制统一深度的不重叠子画面时,建议使用此选项;例如,用 Font 绘制屏幕对齐的文本时。 + + Sprite.Begin(SpriteFlags.DoNotSaveState);//禁止在调用 Begin 和 End 时保存或还原设备状态。 + Device.RenderState.AlphaBlendEnable = true; + Device.RenderState.SourceBlend = Blend.BlendFactor; + Device.RenderState.DestinationBlend = Blend.One; + Device.RenderState.BlendFactor = Color.FromArgb((byte)(255 * rate), (byte)(255 * rate), + (byte)(255 * rate), (byte)(255 * rate)); + } + else + //Sprite.Begin准备子画面的绘制 + Sprite.Begin(SpriteFlags.AlphaBlend);//启用 AlphaTestEnable 设为 true(对于非零 alpha)的 alpha 混合。SourceAlpha 是源混合状态,InvSourceAlpha 是 RenderStateManager 调用中的目标混合状态。绘制文本时,Font 类要求设置此标志。 + //SetRenderTarget 为设备设置新的颜色缓冲区。 + Device.SetRenderTarget(0, CurrentSurface); + } + /// + /// 清除 + /// + public static void Clean() + { + for (int i = TextureList.Count - 1; i >= 0; i--) + { + MLibrary.MImage m = TextureList[i]; + + if (m == null) + { + TextureList.RemoveAt(i); + continue; + } + + //if (CMain.Time <= m.CleanTime) continue; + + + TextureList.RemoveAt(i); + //if (m.Image != null && !m.Image.Disposed) + // m.Image.Dispose(); + } + } + } +} diff --git a/MapEditor/Map Editor/Editor.cs b/MapEditor/Map Editor/Editor.cs new file mode 100644 index 0000000..b1b5e00 --- /dev/null +++ b/MapEditor/Map Editor/Editor.cs @@ -0,0 +1,74 @@ +using System.Collections.Generic; + +namespace Map_Editor +{ + public class Editor + { + private Stack _unDo, _reDo; + + public Editor( ) + { + _unDo = new Stack(); + _reDo = new Stack(); + } + + public CellInfoData[] UnDo + { + get + { + if (_unDo.Count > 0) + { + return _unDo.Pop(); + } + else + { + return null; + } + } + set + { + _unDo.Push((CellInfoData[])value.Clone()); + } + } + + public CellInfoData[] ReDo + { + get + { + if (_reDo.Count > 0) + { + return _reDo.Pop(); + } + else + { + return null; + } + } + set + { + _reDo.Push((CellInfoData[])value.Clone()); + } + } + + public int UnDoCount() + { + return _unDo.Count; + } + + public int ReDoCount() + { + return _reDo.Count; + } + + public void UndoClear() + { + _unDo.Clear(); + } + + public void ReDoClear() + { + _reDo.Clear(); + } + } + +} diff --git a/MapEditor/Map Editor/FilesNameComparer.cs b/MapEditor/Map Editor/FilesNameComparer.cs new file mode 100644 index 0000000..1fa4f4d --- /dev/null +++ b/MapEditor/Map Editor/FilesNameComparer.cs @@ -0,0 +1,82 @@ +using System; +using System.Collections; + +namespace Map_Editor +{ + /// + ///主要用于文件名的比较。 + /// + public class FilesNameComparerClass : IComparer + { + // Calls CaseInsensitiveComparer.Compare with the parameters reversed. + /// + ///比较两个字符串,如果含用数字,则数字按数字的大小来比较。 + /// + /// + /// + /// + int IComparer.Compare(Object x, Object y) + { + if (x == null || y == null) + throw new ArgumentException("Parameters can't be null"); + string fileA = x as string; + string fileB = y as string; + char[] arr1 = fileA.ToCharArray(); + char[] arr2 = fileB.ToCharArray(); + int i = 0, j = 0; + while (i < arr1.Length && j < arr2.Length) + { + if (char.IsDigit(arr1[i]) && char.IsDigit(arr2[j])) + { + string s1 = "", s2 = ""; + while (i < arr1.Length && char.IsDigit(arr1[i])) + { + s1 += arr1[i]; + i++; + } + while (j < arr2.Length && char.IsDigit(arr2[j])) + { + s2 += arr2[j]; + j++; + } + if (int.Parse(s1) > int.Parse(s2)) + { + return 1; + } + if (int.Parse(s1) < int.Parse(s2)) + { + return -1; + } + } + else + { + if (arr1[i] > arr2[j]) + { + return 1; + } + if (arr1[i] < arr2[j]) + { + return -1; + } + i++; + j++; + } + } + if (arr1.Length == arr2.Length) + { + return 0; + } + else + { + return arr1.Length > arr2.Length ? 1 : -1; + } + // return string.Compare( fileA, fileB ); + // return( (new CaseInsensitiveComparer()).Compare( y, x ) ); + } + } + // 调用时的代码如下: + //IComparer fileNameComparer = new FilesNameComparerClass(); + //List.Sort( fileNameComparer ); + //这样排序后的字符串就为按字符串中的数值排序了,为: + //aa1,aa2,aa10,aa100 +} diff --git a/MapEditor/Map Editor/FrmAbout.Designer.cs b/MapEditor/Map Editor/FrmAbout.Designer.cs new file mode 100644 index 0000000..2c5cca1 --- /dev/null +++ b/MapEditor/Map Editor/FrmAbout.Designer.cs @@ -0,0 +1,112 @@ +namespace Map_Editor +{ + partial class FrmAbout + { + /// + /// 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(FrmAbout)); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.btnclose = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.BackColor = System.Drawing.Color.White; + this.label1.Font = new System.Drawing.Font("Comic Sans MS", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label1.ForeColor = System.Drawing.Color.Black; + this.label1.Location = new System.Drawing.Point(6, 252); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(237, 19); + this.label1.TabIndex = 0; + this.label1.Text = "Author : xiyue; mod by Akaras, M2P"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.BackColor = System.Drawing.Color.White; + this.label2.Font = new System.Drawing.Font("Comic Sans MS", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label2.ForeColor = System.Drawing.Color.Black; + this.label2.Location = new System.Drawing.Point(6, 288); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(175, 19); + this.label2.TabIndex = 1; + this.label2.Text = "Email:xiyue173@163.com"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.BackColor = System.Drawing.Color.White; + this.label3.Font = new System.Drawing.Font("Comic Sans MS", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label3.ForeColor = System.Drawing.Color.Black; + this.label3.Location = new System.Drawing.Point(6, 216); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(149, 19); + this.label3.TabIndex = 2; + this.label3.Text = "Version: 1.4 Suprcode"; + // + // btnclose + // + this.btnclose.Font = new System.Drawing.Font("Comic Sans MS", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.btnclose.Location = new System.Drawing.Point(346, 288); + this.btnclose.Name = "btnclose"; + this.btnclose.Size = new System.Drawing.Size(75, 25); + this.btnclose.TabIndex = 3; + this.btnclose.Text = "Close"; + this.btnclose.UseVisualStyleBackColor = true; + this.btnclose.Click += new System.EventHandler(this.btnclose_Click); + this.btnclose.KeyDown += new System.Windows.Forms.KeyEventHandler(this.Escape); + // + // FrmAbout + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("$this.BackgroundImage"))); + this.ClientSize = new System.Drawing.Size(423, 317); + this.Controls.Add(this.btnclose); + this.Controls.Add(this.label3); + this.Controls.Add(this.label2); + this.Controls.Add(this.label1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + this.Name = "FrmAbout"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "FrmAbout"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Button btnclose; + } +} \ No newline at end of file diff --git a/MapEditor/Map Editor/FrmAbout.cs b/MapEditor/Map Editor/FrmAbout.cs new file mode 100644 index 0000000..3157492 --- /dev/null +++ b/MapEditor/Map Editor/FrmAbout.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace Map_Editor +{ + public partial class FrmAbout : Form + { + public FrmAbout() + { + InitializeComponent(); + } + + private void btnclose_Click(object sender, EventArgs e) + { + Close(); + } + + private void Escape(object sender, KeyEventArgs e) + { + Close(); + } + } +} diff --git a/MapEditor/Map Editor/FrmAbout.resx b/MapEditor/Map Editor/FrmAbout.resx new file mode 100644 index 0000000..5da7003 --- /dev/null +++ b/MapEditor/Map Editor/FrmAbout.resx @@ -0,0 +1,6353 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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 + + + \ No newline at end of file diff --git a/MapEditor/Map Editor/FrmJump.Designer.cs b/MapEditor/Map Editor/FrmJump.Designer.cs new file mode 100644 index 0000000..ce5bff0 --- /dev/null +++ b/MapEditor/Map Editor/FrmJump.Designer.cs @@ -0,0 +1,118 @@ +namespace Map_Editor +{ + partial class FrmJump + { + /// + /// 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.txtX = new System.Windows.Forms.TextBox(); + this.txtY = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.btnJump = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(36, 33); + this.label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(17, 17); + this.label1.TabIndex = 0; + this.label1.Text = "X"; + // + // txtX + // + this.txtX.Location = new System.Drawing.Point(59, 29); + this.txtX.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.txtX.Name = "txtX"; + this.txtX.Size = new System.Drawing.Size(63, 22); + this.txtX.TabIndex = 1; + this.txtX.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txtX_KeyDown); + // + // txtY + // + this.txtY.Location = new System.Drawing.Point(59, 65); + this.txtY.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.txtY.Name = "txtY"; + this.txtY.Size = new System.Drawing.Size(63, 22); + this.txtY.TabIndex = 3; + this.txtY.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txtY_KeyDown); + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(36, 69); + this.label2.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(17, 17); + this.label2.TabIndex = 2; + this.label2.Text = "Y"; + // + // btnJump + // + this.btnJump.DialogResult = System.Windows.Forms.DialogResult.OK; + this.btnJump.Location = new System.Drawing.Point(144, 47); + this.btnJump.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.btnJump.Name = "btnJump"; + this.btnJump.Size = new System.Drawing.Size(100, 31); + this.btnJump.TabIndex = 4; + this.btnJump.Text = "Jump"; + this.btnJump.UseVisualStyleBackColor = true; + this.btnJump.Click += new System.EventHandler(this.btnJump_Click); + // + // FrmJump + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(281, 113); + this.Controls.Add(this.btnJump); + this.Controls.Add(this.txtY); + this.Controls.Add(this.label2); + this.Controls.Add(this.txtX); + this.Controls.Add(this.label1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "FrmJump"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "FrmJump"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox txtX; + private System.Windows.Forms.TextBox txtY; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Button btnJump; + } +} \ No newline at end of file diff --git a/MapEditor/Map Editor/FrmJump.cs b/MapEditor/Map Editor/FrmJump.cs new file mode 100644 index 0000000..5d52102 --- /dev/null +++ b/MapEditor/Map Editor/FrmJump.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace Map_Editor +{ + public partial class FrmJump : Form + { + private Main.DelJump _delJump; + public FrmJump() + { + InitializeComponent(); + } + + public FrmJump(Main.DelJump delJump) + { + InitializeComponent(); + _delJump = delJump; + } + + private void btnJump_Click(object sender, EventArgs e) + { + if (txtX.Text.Trim() != String.Empty) + { + if (txtY.Text.Trim() != String.Empty) + { + int x = Convert.ToInt32(txtX.Text.Trim()); + int y = Convert.ToInt32(txtY.Text.Trim()); + _delJump(x, y); + Dispose(); + //this.Close(); + } + } + } + + private void txtX_KeyDown(object sender, KeyEventArgs e) + { + switch (e.KeyCode) + { + case Keys.Enter: + KeyPressEventArgs arg = new KeyPressEventArgs(Convert.ToChar(Keys.Enter)); + btnJump_Click(sender, arg); + break; + } + } + + private void txtY_KeyDown(object sender, KeyEventArgs e) + { + switch (e.KeyCode) + { + case Keys.Enter: + KeyPressEventArgs arg = new KeyPressEventArgs(Convert.ToChar(Keys.Enter)); + btnJump_Click(sender, arg); + break; + } + } + } +} diff --git a/MapEditor/Map Editor/FrmJump.resx b/MapEditor/Map Editor/FrmJump.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/MapEditor/Map Editor/FrmJump.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/MapEditor/Map Editor/FrmSetAnimation.Designer.cs b/MapEditor/Map Editor/FrmSetAnimation.Designer.cs new file mode 100644 index 0000000..93bf605 --- /dev/null +++ b/MapEditor/Map Editor/FrmSetAnimation.Designer.cs @@ -0,0 +1,125 @@ +namespace Map_Editor +{ + partial class FrmSetAnimation + { + /// + /// 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.btnSetAnimation = new System.Windows.Forms.Button(); + this.txtAnimationTick = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.txtAnimationFrame = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.chkBlend = new System.Windows.Forms.CheckBox(); + this.SuspendLayout(); + // + // btnSetAnimation + // + this.btnSetAnimation.DialogResult = System.Windows.Forms.DialogResult.OK; + this.btnSetAnimation.Location = new System.Drawing.Point(99, 93); + this.btnSetAnimation.Name = "btnSetAnimation"; + this.btnSetAnimation.Size = new System.Drawing.Size(75, 25); + this.btnSetAnimation.TabIndex = 11; + this.btnSetAnimation.Text = "OK"; + this.btnSetAnimation.UseVisualStyleBackColor = true; + this.btnSetAnimation.Click += new System.EventHandler(this.btnSetAnimation_Click); + // + // txtAnimationTick + // + this.txtAnimationTick.Location = new System.Drawing.Point(200, 53); + this.txtAnimationTick.Name = "txtAnimationTick"; + this.txtAnimationTick.Size = new System.Drawing.Size(50, 20); + this.txtAnimationTick.TabIndex = 10; + this.txtAnimationTick.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txtAnimationTick_KeyDown); + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(97, 56); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(94, 13); + this.label2.TabIndex = 9; + this.label2.Text = "Animation Interval "; + // + // txtAnimationFrame + // + this.txtAnimationFrame.Location = new System.Drawing.Point(200, 24); + this.txtAnimationFrame.Name = "txtAnimationFrame"; + this.txtAnimationFrame.Size = new System.Drawing.Size(50, 20); + this.txtAnimationFrame.TabIndex = 8; + this.txtAnimationFrame.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txtAnimationFrame_KeyDown); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(97, 27); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(93, 13); + this.label1.TabIndex = 7; + this.label1.Text = "Animation Frames "; + // + // chkBlend + // + this.chkBlend.AutoSize = true; + this.chkBlend.Location = new System.Drawing.Point(28, 40); + this.chkBlend.Name = "chkBlend"; + this.chkBlend.Size = new System.Drawing.Size(53, 17); + this.chkBlend.TabIndex = 6; + this.chkBlend.Text = "Blend"; + this.chkBlend.UseVisualStyleBackColor = true; + // + // FrmSetAnimation + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(266, 127); + this.Controls.Add(this.btnSetAnimation); + this.Controls.Add(this.txtAnimationTick); + this.Controls.Add(this.label2); + this.Controls.Add(this.txtAnimationFrame); + this.Controls.Add(this.label1); + this.Controls.Add(this.chkBlend); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "FrmSetAnimation"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Set Front/Middle Animation"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button btnSetAnimation; + private System.Windows.Forms.TextBox txtAnimationTick; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox txtAnimationFrame; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.CheckBox chkBlend; + } +} \ No newline at end of file diff --git a/MapEditor/Map Editor/FrmSetAnimation.cs b/MapEditor/Map Editor/FrmSetAnimation.cs new file mode 100644 index 0000000..f91bfc4 --- /dev/null +++ b/MapEditor/Map Editor/FrmSetAnimation.cs @@ -0,0 +1,62 @@ +using System; +using System.Windows.Forms; + +namespace Map_Editor +{ + public partial class FrmSetAnimation : Form + { + private Main.DelSetAnimationProperty _delSetAnimationProperty; + public FrmSetAnimation() + { + InitializeComponent(); + } + + public FrmSetAnimation(Main.DelSetAnimationProperty delSetAnimationProperty) + { + InitializeComponent(); + _delSetAnimationProperty = delSetAnimationProperty; + } + + private void btnSetAnimation_Click(object sender, System.EventArgs e) + { + bool blend; + byte frame; + byte tick; + if (txtAnimationFrame.Text.Trim() != String.Empty) + { + if (txtAnimationTick.Text.Trim() != String.Empty) + { + blend = chkBlend.Checked; + frame = Convert.ToByte(txtAnimationFrame.Text.Trim()); + tick = Convert.ToByte(txtAnimationTick.Text.Trim()); + _delSetAnimationProperty(blend, frame, tick); + Dispose(); + } + } + + } + + private void txtAnimationFrame_KeyDown(object sender, KeyEventArgs e) + { + switch (e.KeyCode) + { + case Keys.Enter: + KeyPressEventArgs arg = new KeyPressEventArgs(Convert.ToChar(Keys.Enter)); + btnSetAnimation_Click(sender, arg); + break; + } + } + + private void txtAnimationTick_KeyDown(object sender, KeyEventArgs e) + { + switch (e.KeyCode) + { + case Keys.Enter: + KeyPressEventArgs arg = new KeyPressEventArgs(Convert.ToChar(Keys.Enter)); + btnSetAnimation_Click(sender, arg); + break; + } + } + + } +} diff --git a/MapEditor/Map Editor/FrmSetAnimation.resx b/MapEditor/Map Editor/FrmSetAnimation.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/MapEditor/Map Editor/FrmSetAnimation.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/MapEditor/Map Editor/FrmSetDoor.Designer.cs b/MapEditor/Map Editor/FrmSetDoor.Designer.cs new file mode 100644 index 0000000..8bb02ac --- /dev/null +++ b/MapEditor/Map Editor/FrmSetDoor.Designer.cs @@ -0,0 +1,123 @@ +namespace Map_Editor +{ + partial class FrmSetDoor + { + /// + /// 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.chkCoreDoor = new System.Windows.Forms.CheckBox(); + this.label1 = new System.Windows.Forms.Label(); + this.txtDoorIndex = new System.Windows.Forms.TextBox(); + this.txtDoorOffSet = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.btnSetDoor = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // chkCoreDoor + // + this.chkCoreDoor.AutoSize = true; + this.chkCoreDoor.Location = new System.Drawing.Point(24, 47); + this.chkCoreDoor.Name = "chkCoreDoor"; + this.chkCoreDoor.Size = new System.Drawing.Size(78, 17); + this.chkCoreDoor.TabIndex = 0; + this.chkCoreDoor.Text = "Entity Door"; + this.chkCoreDoor.UseVisualStyleBackColor = true; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(116, 30); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(59, 13); + this.label1.TabIndex = 1; + this.label1.Text = "Door Index"; + // + // txtDoorIndex + // + this.txtDoorIndex.Location = new System.Drawing.Point(185, 27); + this.txtDoorIndex.Name = "txtDoorIndex"; + this.txtDoorIndex.Size = new System.Drawing.Size(50, 20); + this.txtDoorIndex.TabIndex = 2; + // + // txtDoorOffSet + // + this.txtDoorOffSet.Location = new System.Drawing.Point(185, 60); + this.txtDoorOffSet.Name = "txtDoorOffSet"; + this.txtDoorOffSet.Size = new System.Drawing.Size(50, 20); + this.txtDoorOffSet.TabIndex = 4; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(116, 63); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(63, 13); + this.label2.TabIndex = 3; + this.label2.Text = "Door OffSet"; + // + // btnSetDoor + // + this.btnSetDoor.DialogResult = System.Windows.Forms.DialogResult.OK; + this.btnSetDoor.Location = new System.Drawing.Point(92, 99); + this.btnSetDoor.Name = "btnSetDoor"; + this.btnSetDoor.Size = new System.Drawing.Size(75, 25); + this.btnSetDoor.TabIndex = 5; + this.btnSetDoor.Text = "OK"; + this.btnSetDoor.UseVisualStyleBackColor = true; + this.btnSetDoor.Click += new System.EventHandler(this.btnSetDoor_Click); + // + // FrmSetDoor + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(255, 129); + this.Controls.Add(this.btnSetDoor); + this.Controls.Add(this.txtDoorOffSet); + this.Controls.Add(this.label2); + this.Controls.Add(this.txtDoorIndex); + this.Controls.Add(this.label1); + this.Controls.Add(this.chkCoreDoor); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "FrmSetDoor"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "SetDoor"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.CheckBox chkCoreDoor; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox txtDoorIndex; + private System.Windows.Forms.TextBox txtDoorOffSet; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Button btnSetDoor; + } +} \ No newline at end of file diff --git a/MapEditor/Map Editor/FrmSetDoor.cs b/MapEditor/Map Editor/FrmSetDoor.cs new file mode 100644 index 0000000..8b6ec5c --- /dev/null +++ b/MapEditor/Map Editor/FrmSetDoor.cs @@ -0,0 +1,37 @@ +using System; +using System.Windows.Forms; + +namespace Map_Editor +{ + public partial class FrmSetDoor : Form + { + private Main.DelSetDoorProperty _delSetDoorProperty; + public FrmSetDoor() + { + InitializeComponent(); + } + + public FrmSetDoor(Main.DelSetDoorProperty delSetDoorProperty) + { + InitializeComponent(); + _delSetDoorProperty = delSetDoorProperty; + } + + private void btnSetDoor_Click(object sender, EventArgs e) + { + bool blCoreDoor; + byte index; + byte offSet; + if (txtDoorIndex.Text.Trim() != String.Empty) + { + if (txtDoorOffSet.Text.Trim()!=String.Empty) + { + blCoreDoor = chkCoreDoor.Checked; + index = Convert.ToByte(txtDoorIndex.Text.Trim()); + offSet = Convert.ToByte(txtDoorOffSet.Text.Trim()); + _delSetDoorProperty(blCoreDoor, index, offSet); + } + } + } + } +} diff --git a/MapEditor/Map Editor/FrmSetDoor.resx b/MapEditor/Map Editor/FrmSetDoor.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/MapEditor/Map Editor/FrmSetDoor.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/MapEditor/Map Editor/FrmSetLight.Designer.cs b/MapEditor/Map Editor/FrmSetLight.Designer.cs new file mode 100644 index 0000000..2bb1619 --- /dev/null +++ b/MapEditor/Map Editor/FrmSetLight.Designer.cs @@ -0,0 +1,89 @@ +namespace Map_Editor +{ + partial class FrmSetLight + { + /// + /// 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.txtLight = new System.Windows.Forms.TextBox(); + this.btnSetLight = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(12, 29); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(82, 13); + this.label1.TabIndex = 0; + this.label1.Text = "Light Brightness"; + // + // txtLight + // + this.txtLight.Location = new System.Drawing.Point(111, 26); + this.txtLight.Name = "txtLight"; + this.txtLight.Size = new System.Drawing.Size(43, 20); + this.txtLight.TabIndex = 1; + this.txtLight.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txtLight_KeyDown); + // + // btnSetLight + // + this.btnSetLight.DialogResult = System.Windows.Forms.DialogResult.OK; + this.btnSetLight.Location = new System.Drawing.Point(79, 65); + this.btnSetLight.Name = "btnSetLight"; + this.btnSetLight.Size = new System.Drawing.Size(63, 25); + this.btnSetLight.TabIndex = 2; + this.btnSetLight.Text = "OK"; + this.btnSetLight.UseVisualStyleBackColor = true; + this.btnSetLight.Click += new System.EventHandler(this.btnSetLight_Click); + // + // FrmSetLight + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(199, 100); + this.Controls.Add(this.btnSetLight); + this.Controls.Add(this.txtLight); + this.Controls.Add(this.label1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "FrmSetLight"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "SetLight 0-9, Fishing 100-119"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox txtLight; + private System.Windows.Forms.Button btnSetLight; + } +} \ No newline at end of file diff --git a/MapEditor/Map Editor/FrmSetLight.cs b/MapEditor/Map Editor/FrmSetLight.cs new file mode 100644 index 0000000..647cc30 --- /dev/null +++ b/MapEditor/Map Editor/FrmSetLight.cs @@ -0,0 +1,49 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace Map_Editor +{ + public partial class FrmSetLight : Form + { + private readonly Main.DelSetLightProperty _delSetLightProperty; + public FrmSetLight() + { + InitializeComponent(); + } + + public FrmSetLight(Main.DelSetLightProperty delSetLightProperty) + { + InitializeComponent(); + _delSetLightProperty = delSetLightProperty; + } + + private void btnSetLight_Click(object sender, EventArgs e) + { + byte light; + if (txtLight.Text.Trim()!=String.Empty) + { + light = Convert.ToByte(txtLight.Text.Trim()); + _delSetLightProperty(light); + Dispose(); + } + } + + private void txtLight_KeyDown(object sender, KeyEventArgs e) + { + switch (e.KeyCode) + { + case Keys.Enter: + KeyPressEventArgs arg = new KeyPressEventArgs(Convert.ToChar(Keys.Enter)); + btnSetLight_Click(sender, arg); + break; + } + } + + } +} diff --git a/MapEditor/Map Editor/FrmSetLight.resx b/MapEditor/Map Editor/FrmSetLight.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/MapEditor/Map Editor/FrmSetLight.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/MapEditor/Map Editor/ListItem.cs b/MapEditor/Map Editor/ListItem.cs new file mode 100644 index 0000000..1096c53 --- /dev/null +++ b/MapEditor/Map Editor/ListItem.cs @@ -0,0 +1,22 @@ +namespace Map_Editor +{ + public class ListItem + { + public string Text { get; set; } + public byte Version { get; set; } + public int Value { get; set; } + public ListItem(string text, int value) + { + Text = text; + Value = value; + } + + + public override string ToString() + { + return Text; + } + + + } +} diff --git a/MapEditor/Map Editor/MLibrary.cs b/MapEditor/Map Editor/MLibrary.cs new file mode 100644 index 0000000..a91f16b --- /dev/null +++ b/MapEditor/Map Editor/MLibrary.cs @@ -0,0 +1,577 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Drawing.Imaging; +using System.IO; +using System.IO.Compression; +using System.Runtime.InteropServices; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; + +namespace Map_Editor +{ + public static class Libraries + { + public static bool Loaded; + public static int Count, Progress; + + public const string ObjectsPath = @".\Data\Objects\"; + //Map + public static readonly MLibrary[] MapLibs = new MLibrary[400]; + + public static readonly ListItem[] ListItems = new ListItem[400]; + + static Libraries() + { + //wemade mir2 (allowed from 0-99) + //MapLibs[99]=new MLibrary(@".\Objects\MyImage"); + MapLibs[1] = new MLibrary(@".\Data\Smtiles"); + ListItems[1] = new ListItem("Smtiles", 1); + MapLibs[2] = new MLibrary(@".\Data\Objects"); + ListItems[2] = new ListItem("Objects", 2); + + for (int i = 2; i < 27; i++) + { + if (File.Exists(@".\Data\Map\WemadeMir2\Objects" + i + ".lib")) + { + MapLibs[i + 1] = new MLibrary(@".\Data\Map\WemadeMir2\Objects" + i); + ListItems[i + 1] = new ListItem("Objects" + i, i + 1); + } + } + //Thread thread = new Thread(LoadGameLibraries) { IsBackground = true }; + //thread.Start(); + } + + + public static void LoadGameLibraries() + { + Count = MapLibs.Length; + + for (int i = 0; i < MapLibs.Length; i++) + { + if (MapLibs[i] == null) + MapLibs[i] = new MLibrary(""); + else + MapLibs[i].Initialize(); + Progress++; + } + Loaded = true; + } + + } + public sealed class MLibrary + { + public const int LibVersion = 1; + public static bool Load = true; + public string FileName; + + public List Images = new List(); + public List IndexList = new List(); + public int Count; + private bool _initialized; + + private BinaryReader _reader; + private FileStream _stream; + + public MLibrary(string filename) + { + FileName = filename + ".lib"; + Initialize(); + } + + public void Initialize() + { + int CurrentVersion; + _initialized = true; + + if (!File.Exists(FileName)) + return; + + _stream = new FileStream(FileName, FileMode.Open, FileAccess.Read); + _reader = new BinaryReader(_stream); + CurrentVersion = _reader.ReadInt32(); + if (CurrentVersion != 1) + { + MessageBox.Show("Wrong version, expecting lib version: " + LibVersion.ToString() + " found version: " + CurrentVersion.ToString() + ".", "Failed to open", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1); + return; + } + Count = _reader.ReadInt32(); + Images = new List(); + IndexList = new List(); + + for (int i = 0; i < Count; i++) + IndexList.Add(_reader.ReadInt32()); + + for (int i = 0; i < Count; i++) + Images.Add(null); + + //for (int i = 0; i < Count; i++) + // CheckImage(i); + } + + + public void Close() + { + if (_stream != null) + _stream.Dispose(); + if (_reader != null) + _reader.Dispose(); + } + + public void Save() + { + Close(); + + MemoryStream stream = new MemoryStream(); + BinaryWriter writer = new BinaryWriter(stream); + + Count = Images.Count; + IndexList.Clear(); + + int offSet = 8 + Count * 4; + for (int i = 0; i < Count; i++) + { + IndexList.Add((int)stream.Length + offSet); + Images[i].Save(writer); + //Images[i] = null; + } + + writer.Flush(); + byte[] fBytes = stream.ToArray(); + // writer.Dispose(); + + _stream = File.Create(FileName); + writer = new BinaryWriter(_stream); + writer.Write(LibVersion); + writer.Write(Count); + for (int i = 0; i < Count; i++) + writer.Write(IndexList[i]); + + writer.Write(fBytes); + writer.Flush(); + writer.Close(); + writer.Dispose(); + Close(); + } + + public void CheckImage(int index) + { + if (!_initialized) + Initialize(); + + if (Images == null || index < 0 || index >= Images.Count) + return; + if (_stream == null) + { + return; + } + if (Images[index] == null) + { + _stream.Position = IndexList[index]; + Images[index] = new MImage(_reader); + } + + if (!Load) return; + + //MImage mi = Images[index]; + //if (!mi.TextureValid) + //{ + // _stream.Seek(IndexList[index] + 12, SeekOrigin.Begin); + // mi.CreateTexture(_reader); + //} + if (!Images[index].TextureValid) + { + _stream.Seek(IndexList[index] + 12, SeekOrigin.Begin); + Images[index].CreateBmpTexture(_reader); + } + + if (!Images[index].TextureValid) + { + + _stream.Seek(IndexList[index] + 12, SeekOrigin.Begin); + Images[index].CreateTexture(_reader); + } + } + + public Point GetOffSet(int index) + { + if (!_initialized) + Initialize(); + + if (Images == null || index < 0 || index >= Images.Count) + return Point.Empty; + + if (Images[index] == null) + { + _stream.Seek(IndexList[index], SeekOrigin.Begin); + Images[index] = new MImage(_reader); + } + + return new Point(Images[index].X, Images[index].Y); + } + + public Size GetSize(int index) + { + if (!_initialized) + Initialize(); + if (Images == null || index < 0 || index >= Images.Count) + return Size.Empty; + + if (Images[index] == null) + { + _stream.Seek(IndexList[index], SeekOrigin.Begin); + Images[index] = new MImage(_reader); + } + + return new Size(Images[index].Width, Images[index].Height); + } + + public MImage GetMImage(int index) + { + if (index < 0 || index >= Images.Count) + return null; + CheckImage(index); + return Images[index]; + } + + public Bitmap GetPreview(int index) + { + if (index < 0 || index >= Images.Count) + return new Bitmap(1, 1); + + MImage image = Images[index]; + + if (image == null || image.Image == null) + return new Bitmap(1, 1); + + if (image.Preview == null) + image.CreatePreview(); + Bitmap preview = image.Preview; + return preview; + } + + public void AddImage(Bitmap image, short x, short y) + { + MImage mImage = new MImage(image) { X = x, Y = y }; + + Count++; + Images.Add(mImage); + } + + public void ReplaceImage(int Index, Bitmap image, short x, short y) + { + MImage mImage = new MImage(image) { X = x, Y = y }; + + Images[Index] = mImage; + } + + public void InsertImage(int index, Bitmap image, short x, short y) + { + MImage mImage = new MImage(image) { X = x, Y = y }; + + Count++; + Images.Insert(index, mImage); + } + + public void RemoveImage(int index) + { + if (Images == null || Count <= 1) + { + Count = 0; + Images = new List(); + return; + } + Count--; + + Images.RemoveAt(index); + } + + public static bool CompareBytes(byte[] a, byte[] b) + { + if (a == b) return true; + + if (a == null || b == null || a.Length != b.Length) return false; + + for (int i = 0; i < a.Length; i++) if (a[i] != b[i]) return false; + + return true; + } + + public void RemoveBlanks(bool safe = false) + { + for (int i = Count - 1; i >= 0; i--) + { + if (Images[i].FBytes == null || Images[i].FBytes.Length <= 24) + { + if (!safe) + RemoveImage(i); + else if (Images[i].X == 0 && Images[i].Y == 0) + RemoveImage(i); + } + } + } + + public sealed class MImage + { + public short Width, Height, X, Y; + public byte Shadow; + public int Length; + public byte[] FBytes; + public bool TextureValid; + public Bitmap Image, Preview; + public Texture ImageTexture; + + public unsafe byte* Data; + + public MImage(BinaryReader reader) + { + //read layer 1 + Width = reader.ReadInt16(); + Height = reader.ReadInt16(); + X = reader.ReadInt16(); + Y = reader.ReadInt16(); + Length = reader.ReadInt32(); + FBytes = reader.ReadBytes(Length); + } + + public MImage(byte[] image, short Width, short Height)//only use this when converting from old to new type! + { + FBytes = image; + this.Width = Width; + this.Height = Height; + } + + public MImage(Bitmap image) + { + if (image == null) + { + FBytes = new byte[0]; + return; + } + + Width = (short)image.Width; + Height = (short)image.Height; + + Image = image;// FixImageSize(image); + FBytes = ConvertBitmapToArray(Image); + } + + public MImage(Bitmap image, Bitmap Maskimage) + { + if (image == null) + { + FBytes = new byte[0]; + return; + } + + Width = (short)image.Width; + Height = (short)image.Height; + Image = image;// FixImageSize(image); + FBytes = ConvertBitmapToArray(Image); + } + + private Bitmap FixImageSize(Bitmap input) + { + int w = input.Width + (4 - input.Width % 4) % 4; + int h = input.Height + (4 - input.Height % 4) % 4; + + if (input.Width != w || input.Height != h) + { + Bitmap temp = new Bitmap(w, h); + using (Graphics g = Graphics.FromImage(temp)) + { + g.Clear(Color.Transparent); + g.InterpolationMode = InterpolationMode.NearestNeighbor; + g.DrawImage(input, 0, 0); + g.Save(); + } + input.Dispose(); + input = temp; + } + + return input; + } + + private unsafe byte[] ConvertBitmapToArray(Bitmap input) + { + BitmapData data = input.LockBits(new Rectangle(0, 0, input.Width, input.Height), ImageLockMode.ReadOnly, + PixelFormat.Format32bppArgb); + + byte[] pixels = new byte[input.Width * input.Height * 4]; + + Marshal.Copy(data.Scan0, pixels, 0, pixels.Length); + + input.UnlockBits(data); + + for (int i = 0; i < pixels.Length; i += 4) + { + if (pixels[i] == 0 && pixels[i + 1] == 0 && pixels[i + 2] == 0) + pixels[i + 3] = 0; //Make Transparent + } + + byte[] compressedBytes; + compressedBytes = Compress(pixels); + + return compressedBytes; + } + + public unsafe void CreateBmpTexture(BinaryReader reader) + { + + //bmp + int w = Width;// +(4 - Width % 4) % 4; + int h = Height;// +(4 - Height % 4) % 4; + + if (w == 0 || h == 0) + return; + if ((w < 2) || (h < 2)) return; + Image = new Bitmap(w, h); + + BitmapData data = Image.LockBits(new Rectangle(0, 0, w, h), ImageLockMode.ReadWrite, + PixelFormat.Format32bppArgb); + + byte[] dest = Decompress(FBytes); + + Marshal.Copy(dest, 0, data.Scan0, dest.Length); + + Image.UnlockBits(data); + + //if (Image.Width > 0 && Image.Height > 0) + //{ + // Guid id = Guid.NewGuid(); + // Image.Save(id + ".bmp", ImageFormat.Bmp); + //} + + dest = null; + } + + public unsafe void CreateTexture(BinaryReader reader) + { + int w = Width;// + (4 - Width % 4) % 4; + int h = Height;// + (4 - Height % 4) % 4; + if (w == 0 || h == 0) + return; + if ((w < 2) || (h < 2)) return; + + GraphicsStream stream = null; + + ImageTexture = new Texture(DXManager.Device, w, h, 1, Usage.None, Format.A8R8G8B8, Pool.Managed); + stream = ImageTexture.LockRectangle(0, LockFlags.Discard); + Data = (byte*)stream.InternalDataPointer; + + byte[] decomp = DecompressImage(reader.ReadBytes(Length)); + + stream.Write(decomp, 0, decomp.Length); + + stream.Dispose(); + ImageTexture.UnlockRectangle(0); + + //DXManager.TextureList.Add(this); + TextureValid = true; + //Image.Disposing += (o, e) => + //{ + // TextureValid = false; + // Image = null; + // MaskImage = null; + // Data = null; + // DXManager.TextureList.Remove(this); + //}; + } + + public void Save(BinaryWriter writer) + { + writer.Write(Width); + writer.Write(Height); + writer.Write(X); + writer.Write(Y); + writer.Write(FBytes.Length); + writer.Write(FBytes); + } + + public static byte[] Compress(byte[] raw) + { + using (MemoryStream memory = new MemoryStream()) + { + using (GZipStream gzip = new GZipStream(memory, + CompressionMode.Compress, true)) + { + gzip.Write(raw, 0, raw.Length); + } + return memory.ToArray(); + } + } + + static byte[] Decompress(byte[] gzip) + { + // Create a GZIP stream with decompression mode. + // ... Then create a buffer and write into while reading from the GZIP stream. + using (GZipStream stream = new GZipStream(new MemoryStream(gzip), CompressionMode.Decompress)) + { + const int size = 4096; + byte[] buffer = new byte[size]; + using (MemoryStream memory = new MemoryStream()) + { + int count = 0; + do + { + count = stream.Read(buffer, 0, size); + if (count > 0) + { + memory.Write(buffer, 0, count); + } + } + while (count > 0); + return memory.ToArray(); + } + } + } + + private static byte[] DecompressImage(byte[] image) + { + using (GZipStream stream = new GZipStream(new MemoryStream(image), CompressionMode.Decompress)) + { + const int size = 4096; + byte[] buffer = new byte[size]; + using (MemoryStream memory = new MemoryStream()) + { + int count = 0; + do + { + count = stream.Read(buffer, 0, size); + if (count > 0) + { + memory.Write(buffer, 0, count); + } + } + while (count > 0); + return memory.ToArray(); + } + } + } + + public void CreatePreview() + { + if (Image == null) + { + Preview = new Bitmap(1, 1); + return; + } + + Preview = new Bitmap(64, 64); + + using (Graphics g = Graphics.FromImage(Preview)) + { + g.InterpolationMode = InterpolationMode.Low;//HighQualityBicubic + g.Clear(Color.Transparent); + int w = Math.Min((int)Width, 64); + int h = Math.Min((int)Height, 64); + g.DrawImage(Image, new Rectangle((64 - w) / 2, (64 - h) / 2, w, h), new Rectangle(0, 0, Width, Height), GraphicsUnit.Pixel); + + g.Save(); + } + } + } + } +} \ No newline at end of file diff --git a/MapEditor/Map Editor/Main.Designer.cs b/MapEditor/Map Editor/Main.Designer.cs new file mode 100644 index 0000000..647ead2 --- /dev/null +++ b/MapEditor/Map Editor/Main.Designer.cs @@ -0,0 +1,3047 @@ +namespace Map_Editor +{ + partial class Main + { + /// + /// 必需的设计器变量。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 清理所有正在使用的资源。 + /// + /// 如果应释放托管资源,为 true;否则为 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows 窗体设计器生成的代码 + + /// + /// 设计器支持所需的方法 - 不要 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Main)); + this.toolStrip1 = new System.Windows.Forms.ToolStrip(); + this.toolStripSeparator12 = new System.Windows.Forms.ToolStripSeparator(); + this.btnNew = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator13 = new System.Windows.Forms.ToolStripSeparator(); + this.btnOpen = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator7 = new System.Windows.Forms.ToolStripSeparator(); + this.btnSave = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator8 = new System.Windows.Forms.ToolStripSeparator(); + this.btnJump = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator14 = new System.Windows.Forms.ToolStripSeparator(); + this.btnFreeMemory = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator15 = new System.Windows.Forms.ToolStripSeparator(); + this.toolStripDropDownButton2 = new System.Windows.Forms.ToolStripDropDownButton(); + this.chkFront = new System.Windows.Forms.ToolStripMenuItem(); + this.chkMidd = new System.Windows.Forms.ToolStripMenuItem(); + this.chkBack = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator22 = new System.Windows.Forms.ToolStripSeparator(); + this.chkShowCellInfo = new System.Windows.Forms.ToolStripMenuItem(); + this.chkShowCellInfo_2 = new System.Windows.Forms.ToolStripMenuItem(); + this.chkShowCellInfo_1 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator23 = new System.Windows.Forms.ToolStripSeparator(); + this.chkFrontTag = new System.Windows.Forms.ToolStripMenuItem(); + this.chkMiddleTag = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator24 = new System.Windows.Forms.ToolStripSeparator(); + this.chkDrawGridsLine = new System.Windows.Forms.ToolStripMenuItem(); + this.chkDrawGridsBig = new System.Windows.Forms.ToolStripMenuItem(); + this.chkDrawGridsSmall = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator26 = new System.Windows.Forms.ToolStripSeparator(); + this.chkBackMask = new System.Windows.Forms.ToolStripMenuItem(); + this.chkFrontMask = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator25 = new System.Windows.Forms.ToolStripSeparator(); + this.chkFrontAnimationTag = new System.Windows.Forms.ToolStripMenuItem(); + this.chkMiddleAnimationTag = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator56 = new System.Windows.Forms.ToolStripSeparator(); + this.chkLightTag = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator57 = new System.Windows.Forms.ToolStripSeparator(); + this.chkDoorSign = new System.Windows.Forms.ToolStripMenuItem(); + this.chkDoor = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator(); + this.toolStripLabel1 = new System.Windows.Forms.ToolStripLabel(); + this.cmbEditorLayer = new System.Windows.Forms.ToolStripComboBox(); + this.toolStripSeparator6 = new System.Windows.Forms.ToolStripSeparator(); + this.BtnUnDo = new System.Windows.Forms.ToolStripButton(); + this.BtnReDo = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); + this.BtnZoomOut = new System.Windows.Forms.ToolStripButton(); + this.BtnZoomIn = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator(); + this.toolStripSeparator9 = new System.Windows.Forms.ToolStripSeparator(); + this.BtnAbout = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator10 = new System.Windows.Forms.ToolStripSeparator(); + this.toolStripButton1 = new System.Windows.Forms.ToolStripButton(); + this.toolStripDropDownButton6 = new System.Windows.Forms.ToolStripDropDownButton(); + this.bigMapToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator53 = new System.Windows.Forms.ToolStripSeparator(); + this.miniMapStandardMToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator54 = new System.Windows.Forms.ToolStripSeparator(); + this.xLargeMapToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.xXLargeMapCtrlAltMToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator40 = new System.Windows.Forms.ToolStripSeparator(); + this.toolStripDropDownButton1 = new System.Windows.Forms.ToolStripDropDownButton(); + this.toolStripSeparator42 = new System.Windows.Forms.ToolStripSeparator(); + this.deleteSelectedCellDataOnFrontLayerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.deleteSelectedCellDataOnMiddleLayerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.deleteSelectedCellDataOnBackLayerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.deleteSelectedCellDataOnAll3LayersToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.deletionsCanBeUnDoneButToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.shortcutsForMouseClickSingleTileDeletingToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator38 = new System.Windows.Forms.ToolStripSeparator(); + this.toolStripDropDownButton3 = new System.Windows.Forms.ToolStripDropDownButton(); + this.showBackMoveLimitTagHighWallToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.showFrontMoveLimitTagHighWallToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator43 = new System.Windows.Forms.ToolStripSeparator(); + this.toolStripSeparator44 = new System.Windows.Forms.ToolStripSeparator(); + this.placeBackLowWallLimitOnSelectedAreaToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.placeFrontHighWallLimitOnSelectedAreaToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator41 = new System.Windows.Forms.ToolStripSeparator(); + this.deleteBackLimitOnSelectedAreaToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.deleteFrontLimitOnSelectedAreaToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator45 = new System.Windows.Forms.ToolStripSeparator(); + this.toolStripSeparator46 = new System.Windows.Forms.ToolStripSeparator(); + this.singleTileLimitPlaceBFDeleteCToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator39 = new System.Windows.Forms.ToolStripSeparator(); + this.toolStripDropDownButton4 = new System.Windows.Forms.ToolStripDropDownButton(); + this.invertSelectedAreaFrontMiddleLayersToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator47 = new System.Windows.Forms.ToolStripSeparator(); + this.toolStripDropDownButton5 = new System.Windows.Forms.ToolStripDropDownButton(); + this.x2BigTileGridToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.bigTileGridToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.smTileGridToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator48 = new System.Windows.Forms.ToolStripSeparator(); + this.toolStripDropDownButton7 = new System.Windows.Forms.ToolStripDropDownButton(); + this.setSelectedCoordinatesLightPropertyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator51 = new System.Windows.Forms.ToolStripSeparator(); + this.setSelectedAreaLightPropertyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator52 = new System.Windows.Forms.ToolStripSeparator(); + this.setSelectedAreaFishingLightPropertyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripDropDownButton8 = new System.Windows.Forms.ToolStripDropDownButton(); + this.cellAnimationInfoPanelToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator49 = new System.Windows.Forms.ToolStripSeparator(); + this.showFrontAnimationTagToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.setSelectedAreaFrontAnimAttributesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator50 = new System.Windows.Forms.ToolStripSeparator(); + this.showMiddleAnimationTagToggleToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.setSelectedAreaMiddleLAnimationToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.tabControl1 = new System.Windows.Forms.TabControl(); + this.tabMap = new System.Windows.Forms.TabPage(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.vScrollBar = new System.Windows.Forms.VScrollBar(); + this.MapPanel = new System.Windows.Forms.Panel(); + this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); + this.撤销ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.返回ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); + this.menu_SaveObject = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator21 = new System.Windows.Forms.ToolStripSeparator(); + this.toolStripSeparator17 = new System.Windows.Forms.ToolStripSeparator(); + this.toolStripSeparator19 = new System.Windows.Forms.ToolStripSeparator(); + this.menu_deleteSelectedFrontLayerCellData = new System.Windows.Forms.ToolStripMenuItem(); + this.menu_deleteSelectedMiddleLayerCellData = new System.Windows.Forms.ToolStripMenuItem(); + this.menu_deleteSelectedBackLayerCellData = new System.Windows.Forms.ToolStripMenuItem(); + this.menu_deleteSelectedCellDataOnAll3Layers = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator18 = new System.Windows.Forms.ToolStripSeparator(); + this.menu_deleteSelectedBackLimitCellData = new System.Windows.Forms.ToolStripMenuItem(); + this.menu_deleteSelectedFrontLimitCellData = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator32 = new System.Windows.Forms.ToolStripSeparator(); + this.toolStripSeparator33 = new System.Windows.Forms.ToolStripSeparator(); + this.PlaceBackLimitOnSelectedArea = new System.Windows.Forms.ToolStripMenuItem(); + this.PlaceFrontLimitOnSelectedArea = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator20 = new System.Windows.Forms.ToolStripSeparator(); + this.toolStripSeparator16 = new System.Windows.Forms.ToolStripSeparator(); + this.InvertFrontMiddleToggle = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator34 = new System.Windows.Forms.ToolStripSeparator(); + this.setAnimationBrightnessDoorPropertiesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.setCurrentCoordinatesFrontAnimationAttributesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.setCurrentCoordinatesMiddleAnimationAttributesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator36 = new System.Windows.Forms.ToolStripSeparator(); + this.setSelectedCoordinatesFrontAnimationAttributes = new System.Windows.Forms.ToolStripMenuItem(); + this.setSelectedAreaCellsMiddleAnimationAttributes = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator35 = new System.Windows.Forms.ToolStripSeparator(); + this.setTheCurrentCoordinatesLightPropertyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.setSelectedAreaCellLightProperty = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator37 = new System.Windows.Forms.ToolStripSeparator(); + this.setTheCurrentCoordinatesDoorPropertiesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.viewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.chkFront2 = new System.Windows.Forms.ToolStripMenuItem(); + this.chkMidd2 = new System.Windows.Forms.ToolStripMenuItem(); + this.chkBack2 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator30 = new System.Windows.Forms.ToolStripSeparator(); + this.chkShowCellInfo0 = new System.Windows.Forms.ToolStripMenuItem(); + this.chkShowCellInfo2 = new System.Windows.Forms.ToolStripMenuItem(); + this.chkShowCellInfo1 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator31 = new System.Windows.Forms.ToolStripSeparator(); + this.chkFrontTag2 = new System.Windows.Forms.ToolStripMenuItem(); + this.chkMiddleTag2 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator27 = new System.Windows.Forms.ToolStripSeparator(); + this.chkDrawGridsLine2 = new System.Windows.Forms.ToolStripMenuItem(); + this.chkDrawGridsBig2 = new System.Windows.Forms.ToolStripMenuItem(); + this.chkDrawGridsSmall2 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator29 = new System.Windows.Forms.ToolStripSeparator(); + this.chkBackMask2 = new System.Windows.Forms.ToolStripMenuItem(); + this.chkFrontMask2 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator28 = new System.Windows.Forms.ToolStripSeparator(); + this.chkFrontAnimationTag2 = new System.Windows.Forms.ToolStripMenuItem(); + this.chkMiddleAnimationTag2 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator55 = new System.Windows.Forms.ToolStripSeparator(); + this.chkLightTag2 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator58 = new System.Windows.Forms.ToolStripSeparator(); + this.chkDoorSign2 = new System.Windows.Forms.ToolStripMenuItem(); + this.chkDoor2 = new System.Windows.Forms.ToolStripMenuItem(); + this.hScrollBar = new System.Windows.Forms.HScrollBar(); + this.tabWemadeMir2 = new System.Windows.Forms.TabPage(); + this.labWemadeMir2OffSetY = new System.Windows.Forms.Label(); + this.labeWemadeMir2OffSetX = new System.Windows.Forms.Label(); + this.LabWemadeMir2Height = new System.Windows.Forms.Label(); + this.LabWemadeMir2Width = new System.Windows.Forms.Label(); + this.picWemdeMir2 = new System.Windows.Forms.PictureBox(); + this.WemadeMir2LibListBox = new System.Windows.Forms.ListBox(); + this.WemadeMir2LibListView = new System.Windows.Forms.ListView(); + this.WemadeMir2ImageList = new System.Windows.Forms.ImageList(this.components); + this.tabObjects = new System.Windows.Forms.TabPage(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.ObjectslistBox = new System.Windows.Forms.ListBox(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.btnRefreshList = new System.Windows.Forms.Button(); + this.btnDeleteObjects = new System.Windows.Forms.Button(); + this.picObjects = new System.Windows.Forms.PictureBox(); + this.tabTiles = new System.Windows.Forms.TabPage(); + this.picTile = new System.Windows.Forms.PictureBox(); + this.TileslistView = new System.Windows.Forms.ListView(); + this.TilesImageList = new System.Windows.Forms.ImageList(this.components); + this.tabTileCutter = new System.Windows.Forms.TabPage(); + this.splitContainer3 = new System.Windows.Forms.SplitContainer(); + this.btn_grid = new System.Windows.Forms.Button(); + this.btn_vCut = new System.Windows.Forms.Button(); + this.btn_load = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + this.btn_up = new System.Windows.Forms.Button(); + this.comboBox_cellSize = new System.Windows.Forms.ComboBox(); + this.btn_left = new System.Windows.Forms.Button(); + this.btn_down = new System.Windows.Forms.Button(); + this.btn_right = new System.Windows.Forms.Button(); + this.pictureBox_Highlight = new System.Windows.Forms.PictureBox(); + this.contextMenuTileCutter = new System.Windows.Forms.ContextMenuStrip(this.components); + this.menuSelectAllCells = new System.Windows.Forms.ToolStripMenuItem(); + this.menuDeselectAllCells = new System.Windows.Forms.ToolStripMenuItem(); + this.pictureBox_Grid = new System.Windows.Forms.PictureBox(); + this.pictureBox_Image = new System.Windows.Forms.PictureBox(); + this.tabHelp = new System.Windows.Forms.TabPage(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.ShandaMir2ImageList = new System.Windows.Forms.ImageList(this.components); + this.WemadeMir3ImageList = new System.Windows.Forms.ImageList(this.components); + this.ShandaMir3ImageList = new System.Windows.Forms.ImageList(this.components); + this.ObjectsimageList = new System.Windows.Forms.ImageList(this.components); + this.menuStrip1 = new System.Windows.Forms.MenuStrip(); + this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.menuNew = new System.Windows.Forms.ToolStripMenuItem(); + this.menuOpen = new System.Windows.Forms.ToolStripMenuItem(); + this.menuSave = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripMenuItem(); + this.menuUndo = new System.Windows.Forms.ToolStripMenuItem(); + this.menuRedo = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.menuClearMap = new System.Windows.Forms.ToolStripMenuItem(); + this.toolsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.menuFreeMemory = new System.Windows.Forms.ToolStripMenuItem(); + this.menuJump = new System.Windows.Forms.ToolStripMenuItem(); + this.menuInvertMir3Layer = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem9 = new System.Windows.Forms.ToolStripMenuItem(); + this.menuZoomIn = new System.Windows.Forms.ToolStripMenuItem(); + this.menuZoomOut = new System.Windows.Forms.ToolStripMenuItem(); + this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.menuAbout = new System.Windows.Forms.ToolStripMenuItem(); + this.loadImageDialog = new System.Windows.Forms.OpenFileDialog(); + this.SaveLibraryDialog = new System.Windows.Forms.SaveFileDialog(); + this.splitContainer4 = new System.Windows.Forms.SplitContainer(); + this.splitContainer5 = new System.Windows.Forms.SplitContainer(); + this.OpenBtn = new System.Windows.Forms.Button(); + this.PathTxtBox = new System.Windows.Forms.TextBox(); + this.TreeBrowser = new System.Windows.Forms.TreeView(); + this.toolStrip1.SuspendLayout(); + this.tabControl1.SuspendLayout(); + this.tabMap.SuspendLayout(); + this.tableLayoutPanel1.SuspendLayout(); + this.contextMenuStrip1.SuspendLayout(); + this.tabWemadeMir2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.picWemdeMir2)).BeginInit(); + this.tabObjects.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.Panel2.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.picObjects)).BeginInit(); + this.tabTiles.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.picTile)).BeginInit(); + this.tabTileCutter.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).BeginInit(); + this.splitContainer3.Panel1.SuspendLayout(); + this.splitContainer3.Panel2.SuspendLayout(); + this.splitContainer3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox_Highlight)).BeginInit(); + this.contextMenuTileCutter.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox_Grid)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox_Image)).BeginInit(); + this.tabHelp.SuspendLayout(); + this.menuStrip1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer4)).BeginInit(); + this.splitContainer4.Panel1.SuspendLayout(); + this.splitContainer4.Panel2.SuspendLayout(); + this.splitContainer4.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer5)).BeginInit(); + this.splitContainer5.Panel1.SuspendLayout(); + this.splitContainer5.Panel2.SuspendLayout(); + this.splitContainer5.SuspendLayout(); + this.SuspendLayout(); + // + // toolStrip1 + // + this.toolStrip1.AutoSize = false; + this.toolStrip1.ImageScalingSize = new System.Drawing.Size(20, 20); + this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolStripSeparator12, + this.btnNew, + this.toolStripSeparator13, + this.btnOpen, + this.toolStripSeparator7, + this.btnSave, + this.toolStripSeparator8, + this.btnJump, + this.toolStripSeparator14, + this.btnFreeMemory, + this.toolStripSeparator15, + this.toolStripDropDownButton2, + this.toolStripSeparator5, + this.toolStripLabel1, + this.cmbEditorLayer, + this.toolStripSeparator6, + this.BtnUnDo, + this.BtnReDo, + this.toolStripSeparator3, + this.BtnZoomOut, + this.BtnZoomIn, + this.toolStripSeparator4, + this.toolStripSeparator9, + this.BtnAbout, + this.toolStripSeparator10, + this.toolStripButton1, + this.toolStripDropDownButton6, + this.toolStripSeparator40, + this.toolStripDropDownButton1, + this.toolStripSeparator38, + this.toolStripDropDownButton3, + this.toolStripSeparator39, + this.toolStripDropDownButton4, + this.toolStripSeparator47, + this.toolStripDropDownButton5, + this.toolStripSeparator48, + this.toolStripDropDownButton7, + this.toolStripDropDownButton8}); + this.toolStrip1.Location = new System.Drawing.Point(0, 0); + this.toolStrip1.Name = "toolStrip1"; + this.toolStrip1.Size = new System.Drawing.Size(1982, 54); + this.toolStrip1.TabIndex = 3; + this.toolStrip1.Text = "toolStrip1"; + // + // toolStripSeparator12 + // + this.toolStripSeparator12.AutoSize = false; + this.toolStripSeparator12.Name = "toolStripSeparator12"; + this.toolStripSeparator12.Size = new System.Drawing.Size(24, 54); + // + // btnNew + // + this.btnNew.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.btnNew.Image = global::Map_Editor.Properties.Resources.NewB32; + this.btnNew.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.btnNew.ImageTransparentColor = System.Drawing.Color.Magenta; + this.btnNew.Name = "btnNew"; + this.btnNew.Size = new System.Drawing.Size(36, 51); + this.btnNew.Text = "New"; + this.btnNew.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + this.btnNew.ToolTipText = "Create New Map (N)"; + this.btnNew.Click += new System.EventHandler(this.btnNew_Click); + // + // toolStripSeparator13 + // + this.toolStripSeparator13.AutoSize = false; + this.toolStripSeparator13.Name = "toolStripSeparator13"; + this.toolStripSeparator13.Size = new System.Drawing.Size(12, 56); + // + // btnOpen + // + this.btnOpen.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.btnOpen.Image = global::Map_Editor.Properties.Resources._110; + this.btnOpen.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.btnOpen.ImageTransparentColor = System.Drawing.Color.Magenta; + this.btnOpen.Name = "btnOpen"; + this.btnOpen.Size = new System.Drawing.Size(40, 51); + this.btnOpen.Text = "Open"; + this.btnOpen.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + this.btnOpen.ToolTipText = "Open Map (O)"; + this.btnOpen.Click += new System.EventHandler(this.btnOpen_Click); + // + // toolStripSeparator7 + // + this.toolStripSeparator7.AutoSize = false; + this.toolStripSeparator7.Name = "toolStripSeparator7"; + this.toolStripSeparator7.Size = new System.Drawing.Size(24, 56); + // + // btnSave + // + this.btnSave.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.btnSave.Image = global::Map_Editor.Properties.Resources._120; + this.btnSave.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.btnSave.ImageTransparentColor = System.Drawing.Color.Magenta; + this.btnSave.Name = "btnSave"; + this.btnSave.Size = new System.Drawing.Size(38, 51); + this.btnSave.Text = "Save"; + this.btnSave.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + this.btnSave.ToolTipText = "Save Map (Alt-S)\r\nAlso (~) key"; + this.btnSave.Click += new System.EventHandler(this.btnSave_Click); + // + // toolStripSeparator8 + // + this.toolStripSeparator8.AutoSize = false; + this.toolStripSeparator8.Name = "toolStripSeparator8"; + this.toolStripSeparator8.Size = new System.Drawing.Size(24, 56); + // + // btnJump + // + this.btnJump.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.btnJump.Image = global::Map_Editor.Properties.Resources.Navigator; + this.btnJump.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.btnJump.ImageTransparentColor = System.Drawing.Color.Magenta; + this.btnJump.Name = "btnJump"; + this.btnJump.Size = new System.Drawing.Size(40, 51); + this.btnJump.Text = "Jump"; + this.btnJump.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + this.btnJump.ToolTipText = "Teleport to Location (J)"; + this.btnJump.Click += new System.EventHandler(this.btnJump_Click); + // + // toolStripSeparator14 + // + this.toolStripSeparator14.Name = "toolStripSeparator14"; + this.toolStripSeparator14.Size = new System.Drawing.Size(6, 54); + // + // btnFreeMemory + // + this.btnFreeMemory.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.btnFreeMemory.Image = global::Map_Editor.Properties.Resources.RAM32; + this.btnFreeMemory.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.btnFreeMemory.ImageTransparentColor = System.Drawing.Color.Magenta; + this.btnFreeMemory.Name = "btnFreeMemory"; + this.btnFreeMemory.Size = new System.Drawing.Size(79, 51); + this.btnFreeMemory.Text = "FreeMemory"; + this.btnFreeMemory.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + this.btnFreeMemory.ToolTipText = " "; + this.btnFreeMemory.Click += new System.EventHandler(this.btnFreeMemory_Click); + // + // toolStripSeparator15 + // + this.toolStripSeparator15.Name = "toolStripSeparator15"; + this.toolStripSeparator15.Size = new System.Drawing.Size(6, 54); + // + // toolStripDropDownButton2 + // + this.toolStripDropDownButton2.BackColor = System.Drawing.Color.WhiteSmoke; + this.toolStripDropDownButton2.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.chkFront, + this.chkMidd, + this.chkBack, + this.toolStripSeparator22, + this.chkShowCellInfo, + this.chkShowCellInfo_2, + this.chkShowCellInfo_1, + this.toolStripSeparator23, + this.chkFrontTag, + this.chkMiddleTag, + this.toolStripSeparator24, + this.chkDrawGridsLine, + this.chkDrawGridsBig, + this.chkDrawGridsSmall, + this.toolStripSeparator26, + this.chkBackMask, + this.chkFrontMask, + this.toolStripSeparator25, + this.chkFrontAnimationTag, + this.chkMiddleAnimationTag, + this.toolStripSeparator56, + this.chkLightTag, + this.toolStripSeparator57, + this.chkDoorSign, + this.chkDoor}); + this.toolStripDropDownButton2.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.toolStripDropDownButton2.Image = global::Map_Editor.Properties.Resources._190; + this.toolStripDropDownButton2.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.toolStripDropDownButton2.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripDropDownButton2.Name = "toolStripDropDownButton2"; + this.toolStripDropDownButton2.Size = new System.Drawing.Size(47, 51); + this.toolStripDropDownButton2.Text = "View"; + this.toolStripDropDownButton2.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + this.toolStripDropDownButton2.ToolTipText = " "; + this.toolStripDropDownButton2.Click += new System.EventHandler(this.toolStripDropDownButton2_Click); + // + // chkFront + // + this.chkFront.Checked = true; + this.chkFront.CheckState = System.Windows.Forms.CheckState.Checked; + this.chkFront.Name = "chkFront"; + this.chkFront.ShortcutKeys = System.Windows.Forms.Keys.F6; + this.chkFront.Size = new System.Drawing.Size(317, 30); + this.chkFront.Text = "Front Image"; + this.chkFront.Click += new System.EventHandler(this.chkFront_Click); + // + // chkMidd + // + this.chkMidd.Checked = true; + this.chkMidd.CheckState = System.Windows.Forms.CheckState.Checked; + this.chkMidd.Name = "chkMidd"; + this.chkMidd.ShortcutKeys = System.Windows.Forms.Keys.F7; + this.chkMidd.Size = new System.Drawing.Size(317, 30); + this.chkMidd.Text = "Middle Image"; + this.chkMidd.Click += new System.EventHandler(this.chkMidd_Click); + // + // chkBack + // + this.chkBack.Checked = true; + this.chkBack.CheckState = System.Windows.Forms.CheckState.Checked; + this.chkBack.Name = "chkBack"; + this.chkBack.ShortcutKeys = System.Windows.Forms.Keys.F8; + this.chkBack.Size = new System.Drawing.Size(317, 30); + this.chkBack.Text = "Background Image"; + this.chkBack.Click += new System.EventHandler(this.chkBack_Click); + // + // toolStripSeparator22 + // + this.toolStripSeparator22.Name = "toolStripSeparator22"; + this.toolStripSeparator22.Size = new System.Drawing.Size(314, 6); + // + // chkShowCellInfo + // + this.chkShowCellInfo.BackColor = System.Drawing.SystemColors.ControlLight; + this.chkShowCellInfo.Image = global::Map_Editor.Properties.Resources.Info24; + this.chkShowCellInfo.Name = "chkShowCellInfo"; + this.chkShowCellInfo.ShortcutKeys = System.Windows.Forms.Keys.F9; + this.chkShowCellInfo.Size = new System.Drawing.Size(317, 30); + this.chkShowCellInfo.Text = "Cell Library Info"; + this.chkShowCellInfo.Click += new System.EventHandler(this.chkShowCellInfo_Click); + // + // chkShowCellInfo_2 + // + this.chkShowCellInfo_2.BackColor = System.Drawing.SystemColors.ControlLight; + this.chkShowCellInfo_2.Image = global::Map_Editor.Properties.Resources.Info24; + this.chkShowCellInfo_2.Name = "chkShowCellInfo_2"; + this.chkShowCellInfo_2.ShortcutKeys = System.Windows.Forms.Keys.Delete; + this.chkShowCellInfo_2.Size = new System.Drawing.Size(317, 30); + this.chkShowCellInfo_2.Text = "Cell Animation Info"; + this.chkShowCellInfo_2.Click += new System.EventHandler(this.chkShowCellInfo_2_Click); + // + // chkShowCellInfo_1 + // + this.chkShowCellInfo_1.BackColor = System.Drawing.SystemColors.ControlLight; + this.chkShowCellInfo_1.Image = global::Map_Editor.Properties.Resources.Info24; + this.chkShowCellInfo_1.Name = "chkShowCellInfo_1"; + this.chkShowCellInfo_1.ShortcutKeys = System.Windows.Forms.Keys.Insert; + this.chkShowCellInfo_1.Size = new System.Drawing.Size(317, 30); + this.chkShowCellInfo_1.Text = "Cell Coordinate Info"; + this.chkShowCellInfo_1.Click += new System.EventHandler(this.chkShowCellInfo_1_Click); + // + // toolStripSeparator23 + // + this.toolStripSeparator23.Name = "toolStripSeparator23"; + this.toolStripSeparator23.Size = new System.Drawing.Size(314, 6); + // + // chkFrontTag + // + this.chkFrontTag.Image = global::Map_Editor.Properties.Resources.F24; + this.chkFrontTag.Name = "chkFrontTag"; + this.chkFrontTag.ShortcutKeys = System.Windows.Forms.Keys.F10; + this.chkFrontTag.Size = new System.Drawing.Size(317, 30); + this.chkFrontTag.Text = "Front Tiles Tag"; + this.chkFrontTag.Click += new System.EventHandler(this.chkFrontTag_Click); + // + // chkMiddleTag + // + this.chkMiddleTag.Image = global::Map_Editor.Properties.Resources.M24; + this.chkMiddleTag.Name = "chkMiddleTag"; + this.chkMiddleTag.ShortcutKeys = System.Windows.Forms.Keys.F11; + this.chkMiddleTag.Size = new System.Drawing.Size(317, 30); + this.chkMiddleTag.Text = "Middle Tiles Tag"; + this.chkMiddleTag.Click += new System.EventHandler(this.chkMiddleTag_Click); + // + // toolStripSeparator24 + // + this.toolStripSeparator24.Name = "toolStripSeparator24"; + this.toolStripSeparator24.Size = new System.Drawing.Size(314, 6); + // + // chkDrawGridsLine + // + this.chkDrawGridsLine.BackColor = System.Drawing.SystemColors.ControlLight; + this.chkDrawGridsLine.ForeColor = System.Drawing.SystemColors.ControlText; + this.chkDrawGridsLine.Image = global::Map_Editor.Properties.Resources.GridA24; + this.chkDrawGridsLine.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.chkDrawGridsLine.Name = "chkDrawGridsLine"; + this.chkDrawGridsLine.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Alt | System.Windows.Forms.Keys.G))); + this.chkDrawGridsLine.Size = new System.Drawing.Size(317, 30); + this.chkDrawGridsLine.Text = "Grid - 2x2 BigTile"; + this.chkDrawGridsLine.Click += new System.EventHandler(this.chkDrawGridsLine_Click); + // + // chkDrawGridsBig + // + this.chkDrawGridsBig.BackColor = System.Drawing.SystemColors.ControlLight; + this.chkDrawGridsBig.Image = global::Map_Editor.Properties.Resources.GridA24; + this.chkDrawGridsBig.Name = "chkDrawGridsBig"; + this.chkDrawGridsBig.Size = new System.Drawing.Size(317, 30); + this.chkDrawGridsBig.Text = "Grid - BigTile G"; + this.chkDrawGridsBig.Click += new System.EventHandler(this.chkDrawGridsBig_Click); + // + // chkDrawGridsSmall + // + this.chkDrawGridsSmall.BackColor = System.Drawing.SystemColors.ControlLight; + this.chkDrawGridsSmall.ForeColor = System.Drawing.SystemColors.ControlText; + this.chkDrawGridsSmall.Image = global::Map_Editor.Properties.Resources.GridA16; + this.chkDrawGridsSmall.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.chkDrawGridsSmall.Name = "chkDrawGridsSmall"; + this.chkDrawGridsSmall.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.G))); + this.chkDrawGridsSmall.Size = new System.Drawing.Size(317, 30); + this.chkDrawGridsSmall.Text = "Grid - SmTile"; + this.chkDrawGridsSmall.Click += new System.EventHandler(this.chkDrawGridsSmall_Click); + // + // toolStripSeparator26 + // + this.toolStripSeparator26.Name = "toolStripSeparator26"; + this.toolStripSeparator26.Size = new System.Drawing.Size(314, 6); + // + // chkBackMask + // + this.chkBackMask.BackColor = System.Drawing.SystemColors.Control; + this.chkBackMask.Image = global::Map_Editor.Properties.Resources.Yellow24; + this.chkBackMask.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.chkBackMask.Name = "chkBackMask"; + this.chkBackMask.ShortcutKeys = System.Windows.Forms.Keys.F12; + this.chkBackMask.Size = new System.Drawing.Size(317, 30); + this.chkBackMask.Text = "Back Move Limit Tag"; + this.chkBackMask.ToolTipText = "Low Objects\r\n(Can Shoot Over)"; + this.chkBackMask.Click += new System.EventHandler(this.chkBackMask_Click); + // + // chkFrontMask + // + this.chkFrontMask.BackColor = System.Drawing.SystemColors.Control; + this.chkFrontMask.Image = global::Map_Editor.Properties.Resources.RedLim24; + this.chkFrontMask.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.chkFrontMask.Name = "chkFrontMask"; + this.chkFrontMask.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.F12))); + this.chkFrontMask.Size = new System.Drawing.Size(317, 30); + this.chkFrontMask.Text = "Front Move Limit Tag"; + this.chkFrontMask.ToolTipText = "High Objects \r\n(Cannot Shoot Over)"; + this.chkFrontMask.Click += new System.EventHandler(this.chkFrontMask_Click); + // + // toolStripSeparator25 + // + this.toolStripSeparator25.BackColor = System.Drawing.SystemColors.Control; + this.toolStripSeparator25.Name = "toolStripSeparator25"; + this.toolStripSeparator25.Size = new System.Drawing.Size(314, 6); + // + // chkFrontAnimationTag + // + this.chkFrontAnimationTag.Image = global::Map_Editor.Properties.Resources.TagXY24; + this.chkFrontAnimationTag.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.chkFrontAnimationTag.Name = "chkFrontAnimationTag"; + this.chkFrontAnimationTag.Size = new System.Drawing.Size(317, 30); + this.chkFrontAnimationTag.Text = "Front Layer Animation Tag"; + this.chkFrontAnimationTag.Click += new System.EventHandler(this.chkFrontAnimationTag_Click); + // + // chkMiddleAnimationTag + // + this.chkMiddleAnimationTag.BackColor = System.Drawing.SystemColors.ButtonFace; + this.chkMiddleAnimationTag.ForeColor = System.Drawing.SystemColors.ControlText; + this.chkMiddleAnimationTag.Image = global::Map_Editor.Properties.Resources.TagXY24; + this.chkMiddleAnimationTag.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.chkMiddleAnimationTag.Name = "chkMiddleAnimationTag"; + this.chkMiddleAnimationTag.Size = new System.Drawing.Size(317, 30); + this.chkMiddleAnimationTag.Text = "Middle Layer Animation Tag"; + this.chkMiddleAnimationTag.Click += new System.EventHandler(this.chkMiddleAnimationTag_Click); + // + // toolStripSeparator56 + // + this.toolStripSeparator56.Name = "toolStripSeparator56"; + this.toolStripSeparator56.Size = new System.Drawing.Size(314, 6); + // + // chkLightTag + // + this.chkLightTag.Image = global::Map_Editor.Properties.Resources.Fire32; + this.chkLightTag.Name = "chkLightTag"; + this.chkLightTag.Size = new System.Drawing.Size(317, 30); + this.chkLightTag.Text = "Light Tag L"; + this.chkLightTag.Click += new System.EventHandler(this.chkLightTag_Click); + // + // toolStripSeparator57 + // + this.toolStripSeparator57.Name = "toolStripSeparator57"; + this.toolStripSeparator57.Size = new System.Drawing.Size(314, 6); + // + // chkDoorSign + // + this.chkDoorSign.Image = global::Map_Editor.Properties.Resources._150; + this.chkDoorSign.Name = "chkDoorSign"; + this.chkDoorSign.Size = new System.Drawing.Size(317, 30); + this.chkDoorSign.Text = "Door Tag"; + this.chkDoorSign.Click += new System.EventHandler(this.chkDoorSign_Click); + // + // chkDoor + // + this.chkDoor.Image = global::Map_Editor.Properties.Resources._160; + this.chkDoor.Name = "chkDoor"; + this.chkDoor.Size = new System.Drawing.Size(317, 30); + this.chkDoor.Text = "Door Open-Close"; + this.chkDoor.Click += new System.EventHandler(this.chkDoor_Click); + // + // toolStripSeparator5 + // + this.toolStripSeparator5.AutoSize = false; + this.toolStripSeparator5.Name = "toolStripSeparator5"; + this.toolStripSeparator5.Size = new System.Drawing.Size(12, 56); + // + // toolStripLabel1 + // + this.toolStripLabel1.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.toolStripLabel1.Image = global::Map_Editor.Properties.Resources.LayerF32; + this.toolStripLabel1.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.toolStripLabel1.Name = "toolStripLabel1"; + this.toolStripLabel1.Size = new System.Drawing.Size(111, 51); + this.toolStripLabel1.Text = "Editor Layer"; + this.toolStripLabel1.ToolTipText = "Layer Actions"; + this.toolStripLabel1.Click += new System.EventHandler(this.toolStripLabel1_Click); + // + // cmbEditorLayer + // + this.cmbEditorLayer.AutoSize = false; + this.cmbEditorLayer.BackColor = System.Drawing.Color.WhiteSmoke; + this.cmbEditorLayer.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbEditorLayer.DropDownWidth = 210; + this.cmbEditorLayer.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cmbEditorLayer.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.cmbEditorLayer.Items.AddRange(new object[] { + " None-----------------------(Escape)", + "", + " Front Image----------------(1)", + " Middle Image---------------(2)", + " Back Image-----------------(3)", + "", + " Front Limit (Red)----------(F)", + " Back Limit (Yellow)--------(B)", + " Front & Back Limit", + "", + " Grasp Mir2 Front----------(4)", + " Place Objects--------------(5)", + " Grasp Front & Middle------(6)", + " Grasp Front, Middle, Back-(Ctrl-6)", + "", + " Clear Front----------------(7)", + " Clear Midd-----------------(8)", + " Clear Back-----------------(9)", + " Clear All", + "", + " Clear Front Limit", + " Clear Back Limit", + " Clear Front & Back Limit-(C)", + "", + " Brush Mir2 BigTiles------(0)", + " Brush SmTiles-------------(-)", + " Brush Mir3 BigTiles------(=)"}); + this.cmbEditorLayer.Name = "cmbEditorLayer"; + this.cmbEditorLayer.Size = new System.Drawing.Size(185, 25); + this.cmbEditorLayer.SelectedIndexChanged += new System.EventHandler(this.cmbEditorLayer_SelectedIndexChanged); + this.cmbEditorLayer.Click += new System.EventHandler(this.cmbEditorLayer_Click); + // + // toolStripSeparator6 + // + this.toolStripSeparator6.AutoSize = false; + this.toolStripSeparator6.Name = "toolStripSeparator6"; + this.toolStripSeparator6.Size = new System.Drawing.Size(24, 56); + // + // BtnUnDo + // + this.BtnUnDo.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.BtnUnDo.Image = global::Map_Editor.Properties.Resources._1110; + this.BtnUnDo.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.BtnUnDo.ImageTransparentColor = System.Drawing.Color.Magenta; + this.BtnUnDo.Name = "BtnUnDo"; + this.BtnUnDo.Size = new System.Drawing.Size(42, 51); + this.BtnUnDo.Text = "UnDo"; + this.BtnUnDo.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + this.BtnUnDo.ToolTipText = "(Z)"; + this.BtnUnDo.Click += new System.EventHandler(this.menuUndo_Click); + // + // BtnReDo + // + this.BtnReDo.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.BtnReDo.Image = global::Map_Editor.Properties.Resources._1120; + this.BtnReDo.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.BtnReDo.ImageTransparentColor = System.Drawing.Color.Magenta; + this.BtnReDo.Name = "BtnReDo"; + this.BtnReDo.Size = new System.Drawing.Size(40, 51); + this.BtnReDo.Text = "ReDo"; + this.BtnReDo.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + this.BtnReDo.ToolTipText = "(Ctrl-Z)"; + this.BtnReDo.Click += new System.EventHandler(this.menuRedo_Click); + // + // toolStripSeparator3 + // + this.toolStripSeparator3.AutoSize = false; + this.toolStripSeparator3.Name = "toolStripSeparator3"; + this.toolStripSeparator3.Size = new System.Drawing.Size(12, 56); + // + // BtnZoomOut + // + this.BtnZoomOut.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.BtnZoomOut.Image = global::Map_Editor.Properties.Resources.Minus; + this.BtnZoomOut.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.BtnZoomOut.ImageTransparentColor = System.Drawing.Color.Magenta; + this.BtnZoomOut.Name = "BtnZoomOut"; + this.BtnZoomOut.Size = new System.Drawing.Size(67, 51); + this.BtnZoomOut.Text = "Zoom Out"; + this.BtnZoomOut.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + this.BtnZoomOut.ToolTipText = " (-)\r\nMaxZoomOut (/)"; + this.BtnZoomOut.Click += new System.EventHandler(this.menuZoomOut_Click); + // + // BtnZoomIn + // + this.BtnZoomIn.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.BtnZoomIn.Image = global::Map_Editor.Properties.Resources.Plus; + this.BtnZoomIn.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.BtnZoomIn.ImageTransparentColor = System.Drawing.Color.Magenta; + this.BtnZoomIn.Name = "BtnZoomIn"; + this.BtnZoomIn.Size = new System.Drawing.Size(58, 51); + this.BtnZoomIn.Text = "Zoom In"; + this.BtnZoomIn.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + this.BtnZoomIn.ToolTipText = " (+) \r\nMaxZoomIn (*)"; + this.BtnZoomIn.Click += new System.EventHandler(this.menuZoomIn_Click); + // + // toolStripSeparator4 + // + this.toolStripSeparator4.AutoSize = false; + this.toolStripSeparator4.Name = "toolStripSeparator4"; + this.toolStripSeparator4.Size = new System.Drawing.Size(12, 56); + // + // toolStripSeparator9 + // + this.toolStripSeparator9.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right; + this.toolStripSeparator9.AutoSize = false; + this.toolStripSeparator9.Name = "toolStripSeparator9"; + this.toolStripSeparator9.Size = new System.Drawing.Size(36, 54); + // + // BtnAbout + // + this.BtnAbout.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right; + this.BtnAbout.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.BtnAbout.Image = global::Map_Editor.Properties.Resources.BlackFace32; + this.BtnAbout.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.BtnAbout.ImageTransparentColor = System.Drawing.Color.Magenta; + this.BtnAbout.Name = "BtnAbout"; + this.BtnAbout.Size = new System.Drawing.Size(44, 51); + this.BtnAbout.Text = "About"; + this.BtnAbout.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + this.BtnAbout.ToolTipText = "(Alt-A)"; + this.BtnAbout.Click += new System.EventHandler(this.menuAbout_Click); + // + // toolStripSeparator10 + // + this.toolStripSeparator10.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right; + this.toolStripSeparator10.AutoSize = false; + this.toolStripSeparator10.Name = "toolStripSeparator10"; + this.toolStripSeparator10.Size = new System.Drawing.Size(24, 56); + // + // toolStripButton1 + // + this.toolStripButton1.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right; + this.toolStripButton1.Image = global::Map_Editor.Properties.Resources._120; + this.toolStripButton1.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.toolStripButton1.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButton1.Name = "toolStripButton1"; + this.toolStripButton1.Size = new System.Drawing.Size(99, 51); + this.toolStripButton1.Text = "Save As Object.X"; + this.toolStripButton1.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + this.toolStripButton1.ToolTipText = "(Alt-X) Save Map Or \r\nSelection As Object.X"; + this.toolStripButton1.Click += new System.EventHandler(this.menu_SaveObject_Click); + // + // toolStripDropDownButton6 + // + this.toolStripDropDownButton6.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.bigMapToolStripMenuItem, + this.toolStripSeparator53, + this.miniMapStandardMToolStripMenuItem, + this.toolStripSeparator54, + this.xLargeMapToolStripMenuItem, + this.xXLargeMapCtrlAltMToolStripMenuItem}); + this.toolStripDropDownButton6.Image = global::Map_Editor.Properties.Resources.Map32; + this.toolStripDropDownButton6.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.toolStripDropDownButton6.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripDropDownButton6.Name = "toolStripDropDownButton6"; + this.toolStripDropDownButton6.Size = new System.Drawing.Size(68, 51); + this.toolStripDropDownButton6.Text = "MiniMap"; + this.toolStripDropDownButton6.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + this.toolStripDropDownButton6.ToolTipText = resources.GetString("toolStripDropDownButton6.ToolTipText"); + // + // bigMapToolStripMenuItem + // + this.bigMapToolStripMenuItem.Image = global::Map_Editor.Properties.Resources.Map16; + this.bigMapToolStripMenuItem.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.bigMapToolStripMenuItem.Name = "bigMapToolStripMenuItem"; + this.bigMapToolStripMenuItem.Size = new System.Drawing.Size(269, 38); + this.bigMapToolStripMenuItem.Text = "Big Map Alt-M"; + this.bigMapToolStripMenuItem.Click += new System.EventHandler(this.btnBigMap_Click); + // + // toolStripSeparator53 + // + this.toolStripSeparator53.Name = "toolStripSeparator53"; + this.toolStripSeparator53.Size = new System.Drawing.Size(266, 6); + // + // miniMapStandardMToolStripMenuItem + // + this.miniMapStandardMToolStripMenuItem.Image = global::Map_Editor.Properties.Resources.Map16; + this.miniMapStandardMToolStripMenuItem.Name = "miniMapStandardMToolStripMenuItem"; + this.miniMapStandardMToolStripMenuItem.Size = new System.Drawing.Size(269, 38); + this.miniMapStandardMToolStripMenuItem.Text = "MiniMap M"; + this.miniMapStandardMToolStripMenuItem.Click += new System.EventHandler(this.btnMiniMap_Click); + // + // toolStripSeparator54 + // + this.toolStripSeparator54.Name = "toolStripSeparator54"; + this.toolStripSeparator54.Size = new System.Drawing.Size(266, 6); + // + // xLargeMapToolStripMenuItem + // + this.xLargeMapToolStripMenuItem.Image = global::Map_Editor.Properties.Resources.Map24; + this.xLargeMapToolStripMenuItem.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.xLargeMapToolStripMenuItem.Name = "xLargeMapToolStripMenuItem"; + this.xLargeMapToolStripMenuItem.Size = new System.Drawing.Size(269, 38); + this.xLargeMapToolStripMenuItem.Text = "XLarge Map Ctrl-M "; + this.xLargeMapToolStripMenuItem.Click += new System.EventHandler(this.btnLargeMap_Click); + // + // xXLargeMapCtrlAltMToolStripMenuItem + // + this.xXLargeMapCtrlAltMToolStripMenuItem.Image = global::Map_Editor.Properties.Resources.Map32; + this.xXLargeMapCtrlAltMToolStripMenuItem.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.xXLargeMapCtrlAltMToolStripMenuItem.Name = "xXLargeMapCtrlAltMToolStripMenuItem"; + this.xXLargeMapCtrlAltMToolStripMenuItem.Size = new System.Drawing.Size(269, 38); + this.xXLargeMapCtrlAltMToolStripMenuItem.Text = "XXLarge Map Alt-Ctrl-M"; + this.xXLargeMapCtrlAltMToolStripMenuItem.Click += new System.EventHandler(this.btnXLargeMap_Click); + // + // toolStripSeparator40 + // + this.toolStripSeparator40.AutoSize = false; + this.toolStripSeparator40.Name = "toolStripSeparator40"; + this.toolStripSeparator40.Size = new System.Drawing.Size(12, 56); + // + // toolStripDropDownButton1 + // + this.toolStripDropDownButton1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolStripSeparator42, + this.deleteSelectedCellDataOnFrontLayerToolStripMenuItem, + this.deleteSelectedCellDataOnMiddleLayerToolStripMenuItem, + this.deleteSelectedCellDataOnBackLayerToolStripMenuItem, + this.deleteSelectedCellDataOnAll3LayersToolStripMenuItem, + this.deletionsCanBeUnDoneButToolStripMenuItem, + this.shortcutsForMouseClickSingleTileDeletingToolStripMenuItem}); + this.toolStripDropDownButton1.Image = global::Map_Editor.Properties.Resources.DelLayerXR32; + this.toolStripDropDownButton1.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.toolStripDropDownButton1.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripDropDownButton1.Name = "toolStripDropDownButton1"; + this.toolStripDropDownButton1.Size = new System.Drawing.Size(89, 51); + this.toolStripDropDownButton1.Text = "Delete Layers"; + this.toolStripDropDownButton1.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + this.toolStripDropDownButton1.ToolTipText = "New! - Selected Area Deleting Can Now Be UnDone \r\nUnDo Restores One Tile Per Each" + + " Click\r\n\r\nLarge Areas Take Longer To UnDo, \r\nHold Down Shortcut (Z) to UnDo"; + // + // toolStripSeparator42 + // + this.toolStripSeparator42.Name = "toolStripSeparator42"; + this.toolStripSeparator42.Size = new System.Drawing.Size(418, 6); + // + // deleteSelectedCellDataOnFrontLayerToolStripMenuItem + // + this.deleteSelectedCellDataOnFrontLayerToolStripMenuItem.Image = global::Map_Editor.Properties.Resources.F24; + this.deleteSelectedCellDataOnFrontLayerToolStripMenuItem.Name = "deleteSelectedCellDataOnFrontLayerToolStripMenuItem"; + this.deleteSelectedCellDataOnFrontLayerToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.D7))); + this.deleteSelectedCellDataOnFrontLayerToolStripMenuItem.Size = new System.Drawing.Size(421, 30); + this.deleteSelectedCellDataOnFrontLayerToolStripMenuItem.Text = "Delete Selected Cell Data On Front Layer"; + this.deleteSelectedCellDataOnFrontLayerToolStripMenuItem.Click += new System.EventHandler(this.menu_DeleteSelectedFrontLayerCellData_Click); + // + // deleteSelectedCellDataOnMiddleLayerToolStripMenuItem + // + this.deleteSelectedCellDataOnMiddleLayerToolStripMenuItem.Image = global::Map_Editor.Properties.Resources.M24; + this.deleteSelectedCellDataOnMiddleLayerToolStripMenuItem.Name = "deleteSelectedCellDataOnMiddleLayerToolStripMenuItem"; + this.deleteSelectedCellDataOnMiddleLayerToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.D8))); + this.deleteSelectedCellDataOnMiddleLayerToolStripMenuItem.Size = new System.Drawing.Size(421, 30); + this.deleteSelectedCellDataOnMiddleLayerToolStripMenuItem.Text = "Delete Selected Cell Data On Middle Layer"; + this.deleteSelectedCellDataOnMiddleLayerToolStripMenuItem.Click += new System.EventHandler(this.menu_DeleteSelectedMiddleLayerCellData_Click); + // + // deleteSelectedCellDataOnBackLayerToolStripMenuItem + // + this.deleteSelectedCellDataOnBackLayerToolStripMenuItem.Image = global::Map_Editor.Properties.Resources.B24; + this.deleteSelectedCellDataOnBackLayerToolStripMenuItem.Name = "deleteSelectedCellDataOnBackLayerToolStripMenuItem"; + this.deleteSelectedCellDataOnBackLayerToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.D9))); + this.deleteSelectedCellDataOnBackLayerToolStripMenuItem.Size = new System.Drawing.Size(421, 30); + this.deleteSelectedCellDataOnBackLayerToolStripMenuItem.Text = "Delete Selected Cell Data On Back Layer"; + this.deleteSelectedCellDataOnBackLayerToolStripMenuItem.Click += new System.EventHandler(this.menu_DeleteSelectedBackLayerCellData_Click); + // + // deleteSelectedCellDataOnAll3LayersToolStripMenuItem + // + this.deleteSelectedCellDataOnAll3LayersToolStripMenuItem.BackColor = System.Drawing.SystemColors.ControlLight; + this.deleteSelectedCellDataOnAll3LayersToolStripMenuItem.Image = global::Map_Editor.Properties.Resources.DelLayerXR24; + this.deleteSelectedCellDataOnAll3LayersToolStripMenuItem.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.deleteSelectedCellDataOnAll3LayersToolStripMenuItem.Name = "deleteSelectedCellDataOnAll3LayersToolStripMenuItem"; + this.deleteSelectedCellDataOnAll3LayersToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.D0))); + this.deleteSelectedCellDataOnAll3LayersToolStripMenuItem.Size = new System.Drawing.Size(421, 30); + this.deleteSelectedCellDataOnAll3LayersToolStripMenuItem.Text = "Delete Selected Cell Data On All 3 Layers"; + this.deleteSelectedCellDataOnAll3LayersToolStripMenuItem.Click += new System.EventHandler(this.menu_DeleteSelectedCellDataOnAll3Layers_Click); + // + // deletionsCanBeUnDoneButToolStripMenuItem + // + this.deletionsCanBeUnDoneButToolStripMenuItem.Name = "deletionsCanBeUnDoneButToolStripMenuItem"; + this.deletionsCanBeUnDoneButToolStripMenuItem.Size = new System.Drawing.Size(421, 30); + this.deletionsCanBeUnDoneButToolStripMenuItem.Text = "Area Deleting Can Be UnDone - One Tile Per Each UnDo Click"; + // + // shortcutsForMouseClickSingleTileDeletingToolStripMenuItem + // + this.shortcutsForMouseClickSingleTileDeletingToolStripMenuItem.Name = "shortcutsForMouseClickSingleTileDeletingToolStripMenuItem"; + this.shortcutsForMouseClickSingleTileDeletingToolStripMenuItem.Size = new System.Drawing.Size(421, 30); + this.shortcutsForMouseClickSingleTileDeletingToolStripMenuItem.Text = "Shortcuts For Single Mouse Click Tile Deleting - F (7), M (8), B (9)"; + // + // toolStripSeparator38 + // + this.toolStripSeparator38.AutoSize = false; + this.toolStripSeparator38.Name = "toolStripSeparator38"; + this.toolStripSeparator38.Size = new System.Drawing.Size(12, 56); + // + // toolStripDropDownButton3 + // + this.toolStripDropDownButton3.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.showBackMoveLimitTagHighWallToolStripMenuItem, + this.showFrontMoveLimitTagHighWallToolStripMenuItem, + this.toolStripSeparator43, + this.toolStripSeparator44, + this.placeBackLowWallLimitOnSelectedAreaToolStripMenuItem, + this.placeFrontHighWallLimitOnSelectedAreaToolStripMenuItem, + this.toolStripSeparator41, + this.deleteBackLimitOnSelectedAreaToolStripMenuItem, + this.deleteFrontLimitOnSelectedAreaToolStripMenuItem, + this.toolStripSeparator45, + this.toolStripSeparator46, + this.singleTileLimitPlaceBFDeleteCToolStripMenuItem}); + this.toolStripDropDownButton3.Image = global::Map_Editor.Properties.Resources.Limits32; + this.toolStripDropDownButton3.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.toolStripDropDownButton3.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripDropDownButton3.Name = "toolStripDropDownButton3"; + this.toolStripDropDownButton3.Size = new System.Drawing.Size(52, 51); + this.toolStripDropDownButton3.Text = "Limits"; + this.toolStripDropDownButton3.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + this.toolStripDropDownButton3.ToolTipText = "Place/Delete Limits On Selected Area"; + // + // showBackMoveLimitTagHighWallToolStripMenuItem + // + this.showBackMoveLimitTagHighWallToolStripMenuItem.CheckOnClick = true; + this.showBackMoveLimitTagHighWallToolStripMenuItem.Image = global::Map_Editor.Properties.Resources.Yellow24; + this.showBackMoveLimitTagHighWallToolStripMenuItem.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.showBackMoveLimitTagHighWallToolStripMenuItem.Name = "showBackMoveLimitTagHighWallToolStripMenuItem"; + this.showBackMoveLimitTagHighWallToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.F12; + this.showBackMoveLimitTagHighWallToolStripMenuItem.Size = new System.Drawing.Size(383, 30); + this.showBackMoveLimitTagHighWallToolStripMenuItem.Text = "Show Back Move Limit (Low Wall) Tag [Toggle]"; + this.showBackMoveLimitTagHighWallToolStripMenuItem.Click += new System.EventHandler(this.chkBackMask_Click); + // + // showFrontMoveLimitTagHighWallToolStripMenuItem + // + this.showFrontMoveLimitTagHighWallToolStripMenuItem.CheckOnClick = true; + this.showFrontMoveLimitTagHighWallToolStripMenuItem.Image = global::Map_Editor.Properties.Resources.RedLim24; + this.showFrontMoveLimitTagHighWallToolStripMenuItem.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.showFrontMoveLimitTagHighWallToolStripMenuItem.Name = "showFrontMoveLimitTagHighWallToolStripMenuItem"; + this.showFrontMoveLimitTagHighWallToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Alt | System.Windows.Forms.Keys.F12))); + this.showFrontMoveLimitTagHighWallToolStripMenuItem.Size = new System.Drawing.Size(383, 30); + this.showFrontMoveLimitTagHighWallToolStripMenuItem.Text = "Show Front Move Limit (High Wall) Tag [Toggle]"; + this.showFrontMoveLimitTagHighWallToolStripMenuItem.Click += new System.EventHandler(this.chkFrontMask_Click); + // + // toolStripSeparator43 + // + this.toolStripSeparator43.Name = "toolStripSeparator43"; + this.toolStripSeparator43.Size = new System.Drawing.Size(380, 6); + // + // toolStripSeparator44 + // + this.toolStripSeparator44.Name = "toolStripSeparator44"; + this.toolStripSeparator44.Size = new System.Drawing.Size(380, 6); + // + // placeBackLowWallLimitOnSelectedAreaToolStripMenuItem + // + this.placeBackLowWallLimitOnSelectedAreaToolStripMenuItem.BackColor = System.Drawing.SystemColors.ControlLight; + this.placeBackLowWallLimitOnSelectedAreaToolStripMenuItem.Image = global::Map_Editor.Properties.Resources.Yellow24; + this.placeBackLowWallLimitOnSelectedAreaToolStripMenuItem.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.placeBackLowWallLimitOnSelectedAreaToolStripMenuItem.Name = "placeBackLowWallLimitOnSelectedAreaToolStripMenuItem"; + this.placeBackLowWallLimitOnSelectedAreaToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Alt | System.Windows.Forms.Keys.B))); + this.placeBackLowWallLimitOnSelectedAreaToolStripMenuItem.Size = new System.Drawing.Size(383, 30); + this.placeBackLowWallLimitOnSelectedAreaToolStripMenuItem.Text = "Place Back Limit (Low Wall) On Selected Area"; + this.placeBackLowWallLimitOnSelectedAreaToolStripMenuItem.Click += new System.EventHandler(this.menu_PlaceBackLimitOnSelectedArea_Click); + // + // placeFrontHighWallLimitOnSelectedAreaToolStripMenuItem + // + this.placeFrontHighWallLimitOnSelectedAreaToolStripMenuItem.BackColor = System.Drawing.SystemColors.ControlLight; + this.placeFrontHighWallLimitOnSelectedAreaToolStripMenuItem.Image = global::Map_Editor.Properties.Resources.RedLim24; + this.placeFrontHighWallLimitOnSelectedAreaToolStripMenuItem.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.placeFrontHighWallLimitOnSelectedAreaToolStripMenuItem.Name = "placeFrontHighWallLimitOnSelectedAreaToolStripMenuItem"; + this.placeFrontHighWallLimitOnSelectedAreaToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Alt | System.Windows.Forms.Keys.F))); + this.placeFrontHighWallLimitOnSelectedAreaToolStripMenuItem.Size = new System.Drawing.Size(383, 30); + this.placeFrontHighWallLimitOnSelectedAreaToolStripMenuItem.Text = "Place Front Limit (High Wall) On Selected Area"; + this.placeFrontHighWallLimitOnSelectedAreaToolStripMenuItem.Click += new System.EventHandler(this.menu_PlaceFrontLimitOnSelectedArea_Click); + // + // toolStripSeparator41 + // + this.toolStripSeparator41.Name = "toolStripSeparator41"; + this.toolStripSeparator41.Size = new System.Drawing.Size(380, 6); + // + // deleteBackLimitOnSelectedAreaToolStripMenuItem + // + this.deleteBackLimitOnSelectedAreaToolStripMenuItem.BackColor = System.Drawing.SystemColors.Control; + this.deleteBackLimitOnSelectedAreaToolStripMenuItem.Image = global::Map_Editor.Properties.Resources.Yellow24; + this.deleteBackLimitOnSelectedAreaToolStripMenuItem.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.deleteBackLimitOnSelectedAreaToolStripMenuItem.Name = "deleteBackLimitOnSelectedAreaToolStripMenuItem"; + this.deleteBackLimitOnSelectedAreaToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.B))); + this.deleteBackLimitOnSelectedAreaToolStripMenuItem.Size = new System.Drawing.Size(383, 30); + this.deleteBackLimitOnSelectedAreaToolStripMenuItem.Text = "Delete Back Limit On Selected Area"; + this.deleteBackLimitOnSelectedAreaToolStripMenuItem.Click += new System.EventHandler(this.menu_DeleteSelectedBackLimitCellData_Click); + // + // deleteFrontLimitOnSelectedAreaToolStripMenuItem + // + this.deleteFrontLimitOnSelectedAreaToolStripMenuItem.BackColor = System.Drawing.SystemColors.Control; + this.deleteFrontLimitOnSelectedAreaToolStripMenuItem.Image = global::Map_Editor.Properties.Resources.RedLim24; + this.deleteFrontLimitOnSelectedAreaToolStripMenuItem.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.deleteFrontLimitOnSelectedAreaToolStripMenuItem.Name = "deleteFrontLimitOnSelectedAreaToolStripMenuItem"; + this.deleteFrontLimitOnSelectedAreaToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.F))); + this.deleteFrontLimitOnSelectedAreaToolStripMenuItem.Size = new System.Drawing.Size(383, 30); + this.deleteFrontLimitOnSelectedAreaToolStripMenuItem.Text = "Delete Front Limit On Selected Area"; + this.deleteFrontLimitOnSelectedAreaToolStripMenuItem.Click += new System.EventHandler(this.menu_DeleteSelectedFrontLimitCellData_Click); + // + // toolStripSeparator45 + // + this.toolStripSeparator45.Name = "toolStripSeparator45"; + this.toolStripSeparator45.Size = new System.Drawing.Size(380, 6); + // + // toolStripSeparator46 + // + this.toolStripSeparator46.Name = "toolStripSeparator46"; + this.toolStripSeparator46.Size = new System.Drawing.Size(380, 6); + // + // singleTileLimitPlaceBFDeleteCToolStripMenuItem + // + this.singleTileLimitPlaceBFDeleteCToolStripMenuItem.Name = "singleTileLimitPlaceBFDeleteCToolStripMenuItem"; + this.singleTileLimitPlaceBFDeleteCToolStripMenuItem.Size = new System.Drawing.Size(383, 30); + this.singleTileLimitPlaceBFDeleteCToolStripMenuItem.Text = "Shortcuts For Single Tile Limit Placing (B) (F). Delete (C)"; + // + // toolStripSeparator39 + // + this.toolStripSeparator39.AutoSize = false; + this.toolStripSeparator39.Name = "toolStripSeparator39"; + this.toolStripSeparator39.Size = new System.Drawing.Size(12, 56); + // + // toolStripDropDownButton4 + // + this.toolStripDropDownButton4.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.invertSelectedAreaFrontMiddleLayersToolStripMenuItem}); + this.toolStripDropDownButton4.Image = global::Map_Editor.Properties.Resources.SwapLayersG32; + this.toolStripDropDownButton4.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.toolStripDropDownButton4.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripDropDownButton4.Name = "toolStripDropDownButton4"; + this.toolStripDropDownButton4.Size = new System.Drawing.Size(84, 51); + this.toolStripDropDownButton4.Text = "Swap Layers"; + this.toolStripDropDownButton4.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + this.toolStripDropDownButton4.ToolTipText = "Swap Front <-> Middle Layers [Toggle] Ctrl-I"; + // + // invertSelectedAreaFrontMiddleLayersToolStripMenuItem + // + this.invertSelectedAreaFrontMiddleLayersToolStripMenuItem.Image = global::Map_Editor.Properties.Resources.SwapLayersG24; + this.invertSelectedAreaFrontMiddleLayersToolStripMenuItem.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.invertSelectedAreaFrontMiddleLayersToolStripMenuItem.Name = "invertSelectedAreaFrontMiddleLayersToolStripMenuItem"; + this.invertSelectedAreaFrontMiddleLayersToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.I))); + this.invertSelectedAreaFrontMiddleLayersToolStripMenuItem.Size = new System.Drawing.Size(378, 30); + this.invertSelectedAreaFrontMiddleLayersToolStripMenuItem.Text = "Invert Selected Area Front/Middle Layers - Toggle"; + this.invertSelectedAreaFrontMiddleLayersToolStripMenuItem.ToolTipText = "Also Inverts Animation"; + this.invertSelectedAreaFrontMiddleLayersToolStripMenuItem.Click += new System.EventHandler(this.menu_InvertMiddleFrontLayersToggle_Click); + // + // toolStripSeparator47 + // + this.toolStripSeparator47.AutoSize = false; + this.toolStripSeparator47.Name = "toolStripSeparator47"; + this.toolStripSeparator47.Size = new System.Drawing.Size(12, 56); + // + // toolStripDropDownButton5 + // + this.toolStripDropDownButton5.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.x2BigTileGridToolStripMenuItem, + this.bigTileGridToolStripMenuItem, + this.smTileGridToolStripMenuItem}); + this.toolStripDropDownButton5.Image = global::Map_Editor.Properties.Resources.GridA32; + this.toolStripDropDownButton5.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.toolStripDropDownButton5.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripDropDownButton5.Name = "toolStripDropDownButton5"; + this.toolStripDropDownButton5.Size = new System.Drawing.Size(47, 51); + this.toolStripDropDownButton5.Text = "Grids"; + this.toolStripDropDownButton5.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + this.toolStripDropDownButton5.ToolTipText = "(G)"; + // + // x2BigTileGridToolStripMenuItem + // + this.x2BigTileGridToolStripMenuItem.CheckOnClick = true; + this.x2BigTileGridToolStripMenuItem.Image = global::Map_Editor.Properties.Resources.GridA24; + this.x2BigTileGridToolStripMenuItem.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.x2BigTileGridToolStripMenuItem.Name = "x2BigTileGridToolStripMenuItem"; + this.x2BigTileGridToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Alt | System.Windows.Forms.Keys.G))); + this.x2BigTileGridToolStripMenuItem.Size = new System.Drawing.Size(221, 30); + this.x2BigTileGridToolStripMenuItem.Text = "2x2 Big Tile Grid"; + this.x2BigTileGridToolStripMenuItem.Click += new System.EventHandler(this.chkDrawGridsLine_Click); + // + // bigTileGridToolStripMenuItem + // + this.bigTileGridToolStripMenuItem.CheckOnClick = true; + this.bigTileGridToolStripMenuItem.Image = global::Map_Editor.Properties.Resources.GridA24; + this.bigTileGridToolStripMenuItem.Name = "bigTileGridToolStripMenuItem"; + this.bigTileGridToolStripMenuItem.Size = new System.Drawing.Size(221, 30); + this.bigTileGridToolStripMenuItem.Text = "Big Tile Grid (G)"; + this.bigTileGridToolStripMenuItem.Click += new System.EventHandler(this.chkDrawGridsBig_Click); + // + // smTileGridToolStripMenuItem + // + this.smTileGridToolStripMenuItem.CheckOnClick = true; + this.smTileGridToolStripMenuItem.Image = global::Map_Editor.Properties.Resources.GridA16; + this.smTileGridToolStripMenuItem.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.smTileGridToolStripMenuItem.Name = "smTileGridToolStripMenuItem"; + this.smTileGridToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.G))); + this.smTileGridToolStripMenuItem.Size = new System.Drawing.Size(221, 30); + this.smTileGridToolStripMenuItem.Text = "SmTile Grid"; + this.smTileGridToolStripMenuItem.Click += new System.EventHandler(this.chkDrawGridsSmall_Click); + // + // toolStripSeparator48 + // + this.toolStripSeparator48.AutoSize = false; + this.toolStripSeparator48.Name = "toolStripSeparator48"; + this.toolStripSeparator48.Size = new System.Drawing.Size(12, 56); + // + // toolStripDropDownButton7 + // + this.toolStripDropDownButton7.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.setSelectedCoordinatesLightPropertyToolStripMenuItem, + this.toolStripSeparator51, + this.setSelectedAreaLightPropertyToolStripMenuItem, + this.toolStripSeparator52, + this.setSelectedAreaFishingLightPropertyToolStripMenuItem}); + this.toolStripDropDownButton7.Image = global::Map_Editor.Properties.Resources.Fire32; + this.toolStripDropDownButton7.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.toolStripDropDownButton7.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripDropDownButton7.Name = "toolStripDropDownButton7"; + this.toolStripDropDownButton7.Size = new System.Drawing.Size(47, 51); + this.toolStripDropDownButton7.Text = "Light"; + this.toolStripDropDownButton7.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + this.toolStripDropDownButton7.ToolTipText = "(L)"; + // + // setSelectedCoordinatesLightPropertyToolStripMenuItem + // + this.setSelectedCoordinatesLightPropertyToolStripMenuItem.CheckOnClick = true; + this.setSelectedCoordinatesLightPropertyToolStripMenuItem.Image = global::Map_Editor.Properties.Resources.TagXY24; + this.setSelectedCoordinatesLightPropertyToolStripMenuItem.Name = "setSelectedCoordinatesLightPropertyToolStripMenuItem"; + this.setSelectedCoordinatesLightPropertyToolStripMenuItem.Size = new System.Drawing.Size(299, 26); + this.setSelectedCoordinatesLightPropertyToolStripMenuItem.Text = "Show Light Tags [Toggle] L"; + this.setSelectedCoordinatesLightPropertyToolStripMenuItem.Click += new System.EventHandler(this.chkLightTag_Click); + // + // toolStripSeparator51 + // + this.toolStripSeparator51.Name = "toolStripSeparator51"; + this.toolStripSeparator51.Size = new System.Drawing.Size(296, 6); + // + // setSelectedAreaLightPropertyToolStripMenuItem + // + this.setSelectedAreaLightPropertyToolStripMenuItem.Image = global::Map_Editor.Properties.Resources.Fire32; + this.setSelectedAreaLightPropertyToolStripMenuItem.Name = "setSelectedAreaLightPropertyToolStripMenuItem"; + this.setSelectedAreaLightPropertyToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.L))); + this.setSelectedAreaLightPropertyToolStripMenuItem.Size = new System.Drawing.Size(299, 26); + this.setSelectedAreaLightPropertyToolStripMenuItem.Text = "Set Selected Area Light"; + this.setSelectedAreaLightPropertyToolStripMenuItem.ToolTipText = "Light Value (1-9)\r\nCan UnDo, alternatively Set Light to \'0\'\r\n"; + this.setSelectedAreaLightPropertyToolStripMenuItem.Click += new System.EventHandler(this.btnSetLightArea_Click); + // + // toolStripSeparator52 + // + this.toolStripSeparator52.Name = "toolStripSeparator52"; + this.toolStripSeparator52.Size = new System.Drawing.Size(296, 6); + // + // setSelectedAreaFishingLightPropertyToolStripMenuItem + // + this.setSelectedAreaFishingLightPropertyToolStripMenuItem.Image = global::Map_Editor.Properties.Resources.Fish32; + this.setSelectedAreaFishingLightPropertyToolStripMenuItem.Name = "setSelectedAreaFishingLightPropertyToolStripMenuItem"; + this.setSelectedAreaFishingLightPropertyToolStripMenuItem.Size = new System.Drawing.Size(299, 26); + this.setSelectedAreaFishingLightPropertyToolStripMenuItem.Text = "Set Selected Area Fishing Light [100]"; + this.setSelectedAreaFishingLightPropertyToolStripMenuItem.ToolTipText = "Fishing Light (100-119 values)\r\nSet Other Fishing Values via Area Light Setting A" + + "bove"; + this.setSelectedAreaFishingLightPropertyToolStripMenuItem.Click += new System.EventHandler(this.btnSetFishingLightArea_Click); + // + // toolStripDropDownButton8 + // + this.toolStripDropDownButton8.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.cellAnimationInfoPanelToolStripMenuItem, + this.toolStripSeparator49, + this.showFrontAnimationTagToolStripMenuItem, + this.setSelectedAreaFrontAnimAttributesToolStripMenuItem, + this.toolStripSeparator50, + this.showMiddleAnimationTagToggleToolStripMenuItem, + this.setSelectedAreaMiddleLAnimationToolStripMenuItem}); + this.toolStripDropDownButton8.Image = global::Map_Editor.Properties.Resources.Animation32; + this.toolStripDropDownButton8.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.toolStripDropDownButton8.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripDropDownButton8.Name = "toolStripDropDownButton8"; + this.toolStripDropDownButton8.Size = new System.Drawing.Size(76, 51); + this.toolStripDropDownButton8.Text = "Animation"; + this.toolStripDropDownButton8.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + this.toolStripDropDownButton8.ToolTipText = "(Ctrl-F9)"; + // + // cellAnimationInfoPanelToolStripMenuItem + // + this.cellAnimationInfoPanelToolStripMenuItem.CheckOnClick = true; + this.cellAnimationInfoPanelToolStripMenuItem.Image = global::Map_Editor.Properties.Resources.Info24; + this.cellAnimationInfoPanelToolStripMenuItem.Name = "cellAnimationInfoPanelToolStripMenuItem"; + this.cellAnimationInfoPanelToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.F9))); + this.cellAnimationInfoPanelToolStripMenuItem.Size = new System.Drawing.Size(317, 26); + this.cellAnimationInfoPanelToolStripMenuItem.Text = "Cell Animation Info Panel"; + this.cellAnimationInfoPanelToolStripMenuItem.Click += new System.EventHandler(this.chkShowCellInfo_2_Click); + // + // toolStripSeparator49 + // + this.toolStripSeparator49.Name = "toolStripSeparator49"; + this.toolStripSeparator49.Size = new System.Drawing.Size(314, 6); + // + // showFrontAnimationTagToolStripMenuItem + // + this.showFrontAnimationTagToolStripMenuItem.CheckOnClick = true; + this.showFrontAnimationTagToolStripMenuItem.Image = global::Map_Editor.Properties.Resources.TagXY24; + this.showFrontAnimationTagToolStripMenuItem.Name = "showFrontAnimationTagToolStripMenuItem"; + this.showFrontAnimationTagToolStripMenuItem.Size = new System.Drawing.Size(317, 26); + this.showFrontAnimationTagToolStripMenuItem.Text = "Show Front Layer Animation Tag [Toggle]"; + this.showFrontAnimationTagToolStripMenuItem.Click += new System.EventHandler(this.chkFrontAnimationTag_Click); + // + // setSelectedAreaFrontAnimAttributesToolStripMenuItem + // + this.setSelectedAreaFrontAnimAttributesToolStripMenuItem.Image = global::Map_Editor.Properties.Resources.Animation24; + this.setSelectedAreaFrontAnimAttributesToolStripMenuItem.Name = "setSelectedAreaFrontAnimAttributesToolStripMenuItem"; + this.setSelectedAreaFrontAnimAttributesToolStripMenuItem.Size = new System.Drawing.Size(317, 26); + this.setSelectedAreaFrontAnimAttributesToolStripMenuItem.Text = "Set Front Layer Animation On Selected Area"; + this.setSelectedAreaFrontAnimAttributesToolStripMenuItem.Click += new System.EventHandler(this.btnSetAnimationArea_Click); + // + // toolStripSeparator50 + // + this.toolStripSeparator50.Name = "toolStripSeparator50"; + this.toolStripSeparator50.Size = new System.Drawing.Size(314, 6); + // + // showMiddleAnimationTagToggleToolStripMenuItem + // + this.showMiddleAnimationTagToggleToolStripMenuItem.BackColor = System.Drawing.SystemColors.ButtonFace; + this.showMiddleAnimationTagToggleToolStripMenuItem.CheckOnClick = true; + this.showMiddleAnimationTagToggleToolStripMenuItem.Image = global::Map_Editor.Properties.Resources.TagXY24; + this.showMiddleAnimationTagToggleToolStripMenuItem.Name = "showMiddleAnimationTagToggleToolStripMenuItem"; + this.showMiddleAnimationTagToggleToolStripMenuItem.Size = new System.Drawing.Size(317, 26); + this.showMiddleAnimationTagToggleToolStripMenuItem.Text = "Show Middle Layer Animation Tag [Toggle]"; + this.showMiddleAnimationTagToggleToolStripMenuItem.Click += new System.EventHandler(this.chkMiddleAnimationTag_Click); + // + // setSelectedAreaMiddleLAnimationToolStripMenuItem + // + this.setSelectedAreaMiddleLAnimationToolStripMenuItem.BackColor = System.Drawing.SystemColors.ButtonFace; + this.setSelectedAreaMiddleLAnimationToolStripMenuItem.Image = global::Map_Editor.Properties.Resources.Animation2M16; + this.setSelectedAreaMiddleLAnimationToolStripMenuItem.Name = "setSelectedAreaMiddleLAnimationToolStripMenuItem"; + this.setSelectedAreaMiddleLAnimationToolStripMenuItem.Size = new System.Drawing.Size(317, 26); + this.setSelectedAreaMiddleLAnimationToolStripMenuItem.Text = "Set Middle Layer Animation On Selected Area"; + this.setSelectedAreaMiddleLAnimationToolStripMenuItem.Click += new System.EventHandler(this.btnSetMiddleAnimationArea_Click); + // + // tabControl1 + // + this.tabControl1.Alignment = System.Windows.Forms.TabAlignment.Left; + this.tabControl1.Controls.Add(this.tabMap); + this.tabControl1.Controls.Add(this.tabWemadeMir2); + this.tabControl1.Controls.Add(this.tabObjects); + this.tabControl1.Controls.Add(this.tabTiles); + this.tabControl1.Controls.Add(this.tabTileCutter); + this.tabControl1.Controls.Add(this.tabHelp); + this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tabControl1.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)), true); + this.tabControl1.Location = new System.Drawing.Point(0, 0); + this.tabControl1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.tabControl1.Multiline = true; + this.tabControl1.Name = "tabControl1"; + this.tabControl1.SelectedIndex = 0; + this.tabControl1.ShowToolTips = true; + this.tabControl1.Size = new System.Drawing.Size(1723, 1007); + this.tabControl1.TabIndex = 4; + this.tabControl1.SelectedIndexChanged += new System.EventHandler(this.tabControl1_SelectedIndexChanged); + // + // tabMap + // + this.tabMap.BackColor = System.Drawing.Color.Black; + this.tabMap.Controls.Add(this.tableLayoutPanel1); + this.tabMap.Location = new System.Drawing.Point(27, 4); + this.tabMap.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.tabMap.Name = "tabMap"; + this.tabMap.Size = new System.Drawing.Size(1692, 999); + this.tabMap.TabIndex = 2; + this.tabMap.Text = "Map"; + this.tabMap.ToolTipText = "(F5)"; + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.ColumnCount = 2; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel1.Controls.Add(this.vScrollBar, 1, 0); + this.tableLayoutPanel1.Controls.Add(this.MapPanel, 0, 0); + this.tableLayoutPanel1.Controls.Add(this.hScrollBar, 0, 1); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 2; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(1692, 999); + this.tableLayoutPanel1.TabIndex = 10; + // + // vScrollBar + // + this.vScrollBar.Dock = System.Windows.Forms.DockStyle.Fill; + this.vScrollBar.LargeChange = 1; + this.vScrollBar.Location = new System.Drawing.Point(1672, 0); + this.vScrollBar.Name = "vScrollBar"; + this.vScrollBar.Size = new System.Drawing.Size(20, 979); + this.vScrollBar.TabIndex = 1; + this.vScrollBar.Scroll += new System.Windows.Forms.ScrollEventHandler(this.vScrollBar_Scroll); + // + // MapPanel + // + this.MapPanel.BackColor = System.Drawing.Color.Transparent; + this.MapPanel.ContextMenuStrip = this.contextMenuStrip1; + this.MapPanel.Dock = System.Windows.Forms.DockStyle.Fill; + this.MapPanel.Location = new System.Drawing.Point(4, 5); + this.MapPanel.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.MapPanel.Name = "MapPanel"; + this.MapPanel.Size = new System.Drawing.Size(1664, 969); + this.MapPanel.TabIndex = 9; + this.MapPanel.MouseClick += new System.Windows.Forms.MouseEventHandler(this.MapPanel_MouseClick); + this.MapPanel.MouseDown += new System.Windows.Forms.MouseEventHandler(this.MapPanel_MouseDown); + this.MapPanel.MouseMove += new System.Windows.Forms.MouseEventHandler(this.MapPanel_MouseMove); + this.MapPanel.MouseUp += new System.Windows.Forms.MouseEventHandler(this.MapPanel_MouseUp); + // + // contextMenuStrip1 + // + this.contextMenuStrip1.ImageScalingSize = new System.Drawing.Size(20, 20); + this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.撤销ToolStripMenuItem, + this.返回ToolStripMenuItem, + this.toolStripSeparator2, + this.menu_SaveObject, + this.toolStripSeparator21, + this.toolStripSeparator17, + this.toolStripSeparator19, + this.menu_deleteSelectedFrontLayerCellData, + this.menu_deleteSelectedMiddleLayerCellData, + this.menu_deleteSelectedBackLayerCellData, + this.menu_deleteSelectedCellDataOnAll3Layers, + this.toolStripSeparator18, + this.menu_deleteSelectedBackLimitCellData, + this.menu_deleteSelectedFrontLimitCellData, + this.toolStripSeparator32, + this.toolStripSeparator33, + this.PlaceBackLimitOnSelectedArea, + this.PlaceFrontLimitOnSelectedArea, + this.toolStripSeparator20, + this.toolStripSeparator16, + this.InvertFrontMiddleToggle, + this.toolStripSeparator34, + this.setAnimationBrightnessDoorPropertiesToolStripMenuItem, + this.viewToolStripMenuItem}); + this.contextMenuStrip1.Name = "contextMenuStrip1"; + this.contextMenuStrip1.Size = new System.Drawing.Size(375, 428); + // + // 撤销ToolStripMenuItem + // + this.撤销ToolStripMenuItem.Image = global::Map_Editor.Properties.Resources._1110; + this.撤销ToolStripMenuItem.Name = "撤销ToolStripMenuItem"; + this.撤销ToolStripMenuItem.Size = new System.Drawing.Size(374, 26); + this.撤销ToolStripMenuItem.Text = "UnDo Z"; + this.撤销ToolStripMenuItem.Click += new System.EventHandler(this.撤销ToolStripMenuItem_Click); + // + // 返回ToolStripMenuItem + // + this.返回ToolStripMenuItem.Image = global::Map_Editor.Properties.Resources._1120; + this.返回ToolStripMenuItem.Name = "返回ToolStripMenuItem"; + this.返回ToolStripMenuItem.Size = new System.Drawing.Size(374, 26); + this.返回ToolStripMenuItem.Text = "ReDo Ctrl-Z"; + this.返回ToolStripMenuItem.Click += new System.EventHandler(this.返回ToolStripMenuItem_Click); + // + // toolStripSeparator2 + // + this.toolStripSeparator2.Name = "toolStripSeparator2"; + this.toolStripSeparator2.Size = new System.Drawing.Size(371, 6); + // + // menu_SaveObject + // + this.menu_SaveObject.Image = global::Map_Editor.Properties.Resources.XG24; + this.menu_SaveObject.Name = "menu_SaveObject"; + this.menu_SaveObject.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Alt | System.Windows.Forms.Keys.X))); + this.menu_SaveObject.Size = new System.Drawing.Size(374, 26); + this.menu_SaveObject.Text = "Save Selection As Object (.X)"; + this.menu_SaveObject.Click += new System.EventHandler(this.menu_SaveObject_Click); + // + // toolStripSeparator21 + // + this.toolStripSeparator21.Name = "toolStripSeparator21"; + this.toolStripSeparator21.Size = new System.Drawing.Size(371, 6); + // + // toolStripSeparator17 + // + this.toolStripSeparator17.Name = "toolStripSeparator17"; + this.toolStripSeparator17.Size = new System.Drawing.Size(371, 6); + // + // toolStripSeparator19 + // + this.toolStripSeparator19.Name = "toolStripSeparator19"; + this.toolStripSeparator19.Size = new System.Drawing.Size(371, 6); + // + // menu_deleteSelectedFrontLayerCellData + // + this.menu_deleteSelectedFrontLayerCellData.Image = global::Map_Editor.Properties.Resources.Delete16; + this.menu_deleteSelectedFrontLayerCellData.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.menu_deleteSelectedFrontLayerCellData.Name = "menu_deleteSelectedFrontLayerCellData"; + this.menu_deleteSelectedFrontLayerCellData.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.D7))); + this.menu_deleteSelectedFrontLayerCellData.Size = new System.Drawing.Size(374, 26); + this.menu_deleteSelectedFrontLayerCellData.Text = "Delete Selected Cell Data On Front Layer"; + this.menu_deleteSelectedFrontLayerCellData.Click += new System.EventHandler(this.menu_DeleteSelectedFrontLayerCellData_Click); + // + // menu_deleteSelectedMiddleLayerCellData + // + this.menu_deleteSelectedMiddleLayerCellData.Image = global::Map_Editor.Properties.Resources.Delete16; + this.menu_deleteSelectedMiddleLayerCellData.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.menu_deleteSelectedMiddleLayerCellData.Name = "menu_deleteSelectedMiddleLayerCellData"; + this.menu_deleteSelectedMiddleLayerCellData.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.D8))); + this.menu_deleteSelectedMiddleLayerCellData.Size = new System.Drawing.Size(374, 26); + this.menu_deleteSelectedMiddleLayerCellData.Text = "Delete Selected Cell Data On Middle Layer"; + this.menu_deleteSelectedMiddleLayerCellData.Click += new System.EventHandler(this.menu_DeleteSelectedMiddleLayerCellData_Click); + // + // menu_deleteSelectedBackLayerCellData + // + this.menu_deleteSelectedBackLayerCellData.Image = global::Map_Editor.Properties.Resources.Delete16; + this.menu_deleteSelectedBackLayerCellData.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.menu_deleteSelectedBackLayerCellData.Name = "menu_deleteSelectedBackLayerCellData"; + this.menu_deleteSelectedBackLayerCellData.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.D9))); + this.menu_deleteSelectedBackLayerCellData.Size = new System.Drawing.Size(374, 26); + this.menu_deleteSelectedBackLayerCellData.Text = "Delete Selected Cell Data On Back Layer"; + this.menu_deleteSelectedBackLayerCellData.Click += new System.EventHandler(this.menu_DeleteSelectedBackLayerCellData_Click); + // + // menu_deleteSelectedCellDataOnAll3Layers + // + this.menu_deleteSelectedCellDataOnAll3Layers.BackColor = System.Drawing.SystemColors.ControlLight; + this.menu_deleteSelectedCellDataOnAll3Layers.Image = global::Map_Editor.Properties.Resources.DelLayerXR24; + this.menu_deleteSelectedCellDataOnAll3Layers.Name = "menu_deleteSelectedCellDataOnAll3Layers"; + this.menu_deleteSelectedCellDataOnAll3Layers.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.D0))); + this.menu_deleteSelectedCellDataOnAll3Layers.Size = new System.Drawing.Size(374, 26); + this.menu_deleteSelectedCellDataOnAll3Layers.Text = "Delete Selected Cell Data On All 3 Layers"; + this.menu_deleteSelectedCellDataOnAll3Layers.Click += new System.EventHandler(this.menu_DeleteSelectedCellDataOnAll3Layers_Click); + // + // toolStripSeparator18 + // + this.toolStripSeparator18.Name = "toolStripSeparator18"; + this.toolStripSeparator18.Size = new System.Drawing.Size(371, 6); + // + // menu_deleteSelectedBackLimitCellData + // + this.menu_deleteSelectedBackLimitCellData.BackColor = System.Drawing.SystemColors.Control; + this.menu_deleteSelectedBackLimitCellData.Image = global::Map_Editor.Properties.Resources.Yellow24; + this.menu_deleteSelectedBackLimitCellData.Name = "menu_deleteSelectedBackLimitCellData"; + this.menu_deleteSelectedBackLimitCellData.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.B))); + this.menu_deleteSelectedBackLimitCellData.Size = new System.Drawing.Size(374, 26); + this.menu_deleteSelectedBackLimitCellData.Text = "Delete Back Limit On Selected Area"; + this.menu_deleteSelectedBackLimitCellData.Click += new System.EventHandler(this.menu_DeleteSelectedBackLimitCellData_Click); + // + // menu_deleteSelectedFrontLimitCellData + // + this.menu_deleteSelectedFrontLimitCellData.BackColor = System.Drawing.SystemColors.Control; + this.menu_deleteSelectedFrontLimitCellData.Image = global::Map_Editor.Properties.Resources.RedLim24; + this.menu_deleteSelectedFrontLimitCellData.Name = "menu_deleteSelectedFrontLimitCellData"; + this.menu_deleteSelectedFrontLimitCellData.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.F))); + this.menu_deleteSelectedFrontLimitCellData.Size = new System.Drawing.Size(374, 26); + this.menu_deleteSelectedFrontLimitCellData.Text = "Delete Front Limit On Selected Area"; + this.menu_deleteSelectedFrontLimitCellData.Click += new System.EventHandler(this.menu_DeleteSelectedFrontLimitCellData_Click); + // + // toolStripSeparator32 + // + this.toolStripSeparator32.Name = "toolStripSeparator32"; + this.toolStripSeparator32.Size = new System.Drawing.Size(371, 6); + // + // toolStripSeparator33 + // + this.toolStripSeparator33.Name = "toolStripSeparator33"; + this.toolStripSeparator33.Size = new System.Drawing.Size(371, 6); + // + // PlaceBackLimitOnSelectedArea + // + this.PlaceBackLimitOnSelectedArea.Image = global::Map_Editor.Properties.Resources.Yellow24; + this.PlaceBackLimitOnSelectedArea.Name = "PlaceBackLimitOnSelectedArea"; + this.PlaceBackLimitOnSelectedArea.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Alt | System.Windows.Forms.Keys.B))); + this.PlaceBackLimitOnSelectedArea.Size = new System.Drawing.Size(374, 26); + this.PlaceBackLimitOnSelectedArea.Text = "Place Back (Low Wall) Limit On Selected Area"; + this.PlaceBackLimitOnSelectedArea.Click += new System.EventHandler(this.menu_PlaceBackLimitOnSelectedArea_Click); + // + // PlaceFrontLimitOnSelectedArea + // + this.PlaceFrontLimitOnSelectedArea.Image = global::Map_Editor.Properties.Resources.RedLim24; + this.PlaceFrontLimitOnSelectedArea.Name = "PlaceFrontLimitOnSelectedArea"; + this.PlaceFrontLimitOnSelectedArea.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Alt | System.Windows.Forms.Keys.F))); + this.PlaceFrontLimitOnSelectedArea.Size = new System.Drawing.Size(374, 26); + this.PlaceFrontLimitOnSelectedArea.Text = "Place Front (High Wall) Limit On Selected Area"; + this.PlaceFrontLimitOnSelectedArea.Click += new System.EventHandler(this.menu_PlaceFrontLimitOnSelectedArea_Click); + // + // toolStripSeparator20 + // + this.toolStripSeparator20.Name = "toolStripSeparator20"; + this.toolStripSeparator20.Size = new System.Drawing.Size(371, 6); + // + // toolStripSeparator16 + // + this.toolStripSeparator16.Name = "toolStripSeparator16"; + this.toolStripSeparator16.Size = new System.Drawing.Size(371, 6); + // + // InvertFrontMiddleToggle + // + this.InvertFrontMiddleToggle.Image = global::Map_Editor.Properties.Resources.SwapLayersG24; + this.InvertFrontMiddleToggle.Name = "InvertFrontMiddleToggle"; + this.InvertFrontMiddleToggle.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.I))); + this.InvertFrontMiddleToggle.Size = new System.Drawing.Size(374, 26); + this.InvertFrontMiddleToggle.Text = "Invert Selected Area Front/Middle Layers - Toggle"; + this.InvertFrontMiddleToggle.Click += new System.EventHandler(this.menu_InvertMiddleFrontLayersToggle_Click); + // + // toolStripSeparator34 + // + this.toolStripSeparator34.Name = "toolStripSeparator34"; + this.toolStripSeparator34.Size = new System.Drawing.Size(371, 6); + // + // setAnimationBrightnessDoorPropertiesToolStripMenuItem + // + this.setAnimationBrightnessDoorPropertiesToolStripMenuItem.BackColor = System.Drawing.SystemColors.ControlLight; + this.setAnimationBrightnessDoorPropertiesToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.setCurrentCoordinatesFrontAnimationAttributesToolStripMenuItem, + this.setCurrentCoordinatesMiddleAnimationAttributesToolStripMenuItem, + this.toolStripSeparator36, + this.setSelectedCoordinatesFrontAnimationAttributes, + this.setSelectedAreaCellsMiddleAnimationAttributes, + this.toolStripSeparator35, + this.setTheCurrentCoordinatesLightPropertyToolStripMenuItem, + this.setSelectedAreaCellLightProperty, + this.toolStripSeparator37, + this.setTheCurrentCoordinatesDoorPropertiesToolStripMenuItem}); + this.setAnimationBrightnessDoorPropertiesToolStripMenuItem.Image = global::Map_Editor.Properties.Resources.Fire32; + this.setAnimationBrightnessDoorPropertiesToolStripMenuItem.Name = "setAnimationBrightnessDoorPropertiesToolStripMenuItem"; + this.setAnimationBrightnessDoorPropertiesToolStripMenuItem.Size = new System.Drawing.Size(374, 26); + this.setAnimationBrightnessDoorPropertiesToolStripMenuItem.Text = "Set Animation-Light-Door Properties"; + // + // setCurrentCoordinatesFrontAnimationAttributesToolStripMenuItem + // + this.setCurrentCoordinatesFrontAnimationAttributesToolStripMenuItem.Image = global::Map_Editor.Properties.Resources.SelectA24; + this.setCurrentCoordinatesFrontAnimationAttributesToolStripMenuItem.Name = "setCurrentCoordinatesFrontAnimationAttributesToolStripMenuItem"; + this.setCurrentCoordinatesFrontAnimationAttributesToolStripMenuItem.Size = new System.Drawing.Size(327, 22); + this.setCurrentCoordinatesFrontAnimationAttributesToolStripMenuItem.Text = "Set Current Coordinates Front Layer Animation"; + this.setCurrentCoordinatesFrontAnimationAttributesToolStripMenuItem.Click += new System.EventHandler(this.btnSetAnimation_Click); + // + // setCurrentCoordinatesMiddleAnimationAttributesToolStripMenuItem + // + this.setCurrentCoordinatesMiddleAnimationAttributesToolStripMenuItem.Image = global::Map_Editor.Properties.Resources.SelectA24; + this.setCurrentCoordinatesMiddleAnimationAttributesToolStripMenuItem.Name = "setCurrentCoordinatesMiddleAnimationAttributesToolStripMenuItem"; + this.setCurrentCoordinatesMiddleAnimationAttributesToolStripMenuItem.Size = new System.Drawing.Size(327, 22); + this.setCurrentCoordinatesMiddleAnimationAttributesToolStripMenuItem.Text = "Set Current Coordinates Middle layer Animation"; + this.setCurrentCoordinatesMiddleAnimationAttributesToolStripMenuItem.Click += new System.EventHandler(this.btnSetMiddleAnimation_Click); + // + // toolStripSeparator36 + // + this.toolStripSeparator36.Name = "toolStripSeparator36"; + this.toolStripSeparator36.Size = new System.Drawing.Size(324, 6); + // + // setSelectedCoordinatesFrontAnimationAttributes + // + this.setSelectedCoordinatesFrontAnimationAttributes.Image = global::Map_Editor.Properties.Resources.Animation24; + this.setSelectedCoordinatesFrontAnimationAttributes.Name = "setSelectedCoordinatesFrontAnimationAttributes"; + this.setSelectedCoordinatesFrontAnimationAttributes.Size = new System.Drawing.Size(327, 22); + this.setSelectedCoordinatesFrontAnimationAttributes.Text = "Set Selected Area Front Layer Animation"; + this.setSelectedCoordinatesFrontAnimationAttributes.Click += new System.EventHandler(this.btnSetAnimationArea_Click); + // + // setSelectedAreaCellsMiddleAnimationAttributes + // + this.setSelectedAreaCellsMiddleAnimationAttributes.Image = global::Map_Editor.Properties.Resources.Animation2M16; + this.setSelectedAreaCellsMiddleAnimationAttributes.Name = "setSelectedAreaCellsMiddleAnimationAttributes"; + this.setSelectedAreaCellsMiddleAnimationAttributes.Size = new System.Drawing.Size(327, 22); + this.setSelectedAreaCellsMiddleAnimationAttributes.Text = "Set Selected Area Middle Layer Animation"; + this.setSelectedAreaCellsMiddleAnimationAttributes.Click += new System.EventHandler(this.btnSetMiddleAnimationArea_Click); + // + // toolStripSeparator35 + // + this.toolStripSeparator35.Name = "toolStripSeparator35"; + this.toolStripSeparator35.Size = new System.Drawing.Size(324, 6); + // + // setTheCurrentCoordinatesLightPropertyToolStripMenuItem + // + this.setTheCurrentCoordinatesLightPropertyToolStripMenuItem.Image = global::Map_Editor.Properties.Resources.Fire32; + this.setTheCurrentCoordinatesLightPropertyToolStripMenuItem.Name = "setTheCurrentCoordinatesLightPropertyToolStripMenuItem"; + this.setTheCurrentCoordinatesLightPropertyToolStripMenuItem.Size = new System.Drawing.Size(327, 22); + this.setTheCurrentCoordinatesLightPropertyToolStripMenuItem.Text = "Set Current Coordinates Light"; + this.setTheCurrentCoordinatesLightPropertyToolStripMenuItem.Click += new System.EventHandler(this.btnSetLight_Click); + // + // setSelectedAreaCellLightProperty + // + this.setSelectedAreaCellLightProperty.Image = global::Map_Editor.Properties.Resources.Fish32; + this.setSelectedAreaCellLightProperty.Name = "setSelectedAreaCellLightProperty"; + this.setSelectedAreaCellLightProperty.Size = new System.Drawing.Size(327, 22); + this.setSelectedAreaCellLightProperty.Text = "Set Selected Area Light/Fishing"; + this.setSelectedAreaCellLightProperty.Click += new System.EventHandler(this.btnSetLightArea_Click); + // + // toolStripSeparator37 + // + this.toolStripSeparator37.Name = "toolStripSeparator37"; + this.toolStripSeparator37.Size = new System.Drawing.Size(324, 6); + // + // setTheCurrentCoordinatesDoorPropertiesToolStripMenuItem + // + this.setTheCurrentCoordinatesDoorPropertiesToolStripMenuItem.Image = global::Map_Editor.Properties.Resources._150; + this.setTheCurrentCoordinatesDoorPropertiesToolStripMenuItem.Name = "setTheCurrentCoordinatesDoorPropertiesToolStripMenuItem"; + this.setTheCurrentCoordinatesDoorPropertiesToolStripMenuItem.Size = new System.Drawing.Size(327, 22); + this.setTheCurrentCoordinatesDoorPropertiesToolStripMenuItem.Text = "Set Current Coordinates Door Properties"; + this.setTheCurrentCoordinatesDoorPropertiesToolStripMenuItem.Click += new System.EventHandler(this.btnSetDoor_Click); + // + // viewToolStripMenuItem + // + this.viewToolStripMenuItem.BackColor = System.Drawing.SystemColors.GradientActiveCaption; + this.viewToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.chkFront2, + this.chkMidd2, + this.chkBack2, + this.toolStripSeparator30, + this.chkShowCellInfo0, + this.chkShowCellInfo2, + this.chkShowCellInfo1, + this.toolStripSeparator31, + this.chkFrontTag2, + this.chkMiddleTag2, + this.toolStripSeparator27, + this.chkDrawGridsLine2, + this.chkDrawGridsBig2, + this.chkDrawGridsSmall2, + this.toolStripSeparator29, + this.chkBackMask2, + this.chkFrontMask2, + this.toolStripSeparator28, + this.chkFrontAnimationTag2, + this.chkMiddleAnimationTag2, + this.toolStripSeparator55, + this.chkLightTag2, + this.toolStripSeparator58, + this.chkDoorSign2, + this.chkDoor2}); + this.viewToolStripMenuItem.ForeColor = System.Drawing.SystemColors.InfoText; + this.viewToolStripMenuItem.Image = global::Map_Editor.Properties.Resources._190; + this.viewToolStripMenuItem.Name = "viewToolStripMenuItem"; + this.viewToolStripMenuItem.Size = new System.Drawing.Size(374, 26); + this.viewToolStripMenuItem.Text = "View"; + // + // chkFront2 + // + this.chkFront2.Checked = true; + this.chkFront2.CheckOnClick = true; + this.chkFront2.CheckState = System.Windows.Forms.CheckState.Checked; + this.chkFront2.Name = "chkFront2"; + this.chkFront2.ShortcutKeys = System.Windows.Forms.Keys.F6; + this.chkFront2.Size = new System.Drawing.Size(277, 30); + this.chkFront2.Text = "Front Image"; + this.chkFront2.Click += new System.EventHandler(this.chkFront_Click); + // + // chkMidd2 + // + this.chkMidd2.Checked = true; + this.chkMidd2.CheckOnClick = true; + this.chkMidd2.CheckState = System.Windows.Forms.CheckState.Checked; + this.chkMidd2.Name = "chkMidd2"; + this.chkMidd2.ShortcutKeys = System.Windows.Forms.Keys.F7; + this.chkMidd2.Size = new System.Drawing.Size(277, 30); + this.chkMidd2.Text = "Middle Image"; + this.chkMidd2.Click += new System.EventHandler(this.chkMidd_Click); + // + // chkBack2 + // + this.chkBack2.Checked = true; + this.chkBack2.CheckOnClick = true; + this.chkBack2.CheckState = System.Windows.Forms.CheckState.Checked; + this.chkBack2.Name = "chkBack2"; + this.chkBack2.ShortcutKeys = System.Windows.Forms.Keys.F8; + this.chkBack2.Size = new System.Drawing.Size(277, 30); + this.chkBack2.Text = "Background Image"; + this.chkBack2.Click += new System.EventHandler(this.chkBack_Click); + // + // toolStripSeparator30 + // + this.toolStripSeparator30.Name = "toolStripSeparator30"; + this.toolStripSeparator30.Size = new System.Drawing.Size(274, 6); + // + // chkShowCellInfo0 + // + this.chkShowCellInfo0.BackColor = System.Drawing.SystemColors.ControlLight; + this.chkShowCellInfo0.CheckOnClick = true; + this.chkShowCellInfo0.Image = global::Map_Editor.Properties.Resources.Info24; + this.chkShowCellInfo0.Name = "chkShowCellInfo0"; + this.chkShowCellInfo0.ShortcutKeys = System.Windows.Forms.Keys.F9; + this.chkShowCellInfo0.Size = new System.Drawing.Size(277, 30); + this.chkShowCellInfo0.Text = "Cell Library Info"; + this.chkShowCellInfo0.Click += new System.EventHandler(this.chkShowCellInfo_Click); + // + // chkShowCellInfo2 + // + this.chkShowCellInfo2.BackColor = System.Drawing.SystemColors.ControlLight; + this.chkShowCellInfo2.CheckOnClick = true; + this.chkShowCellInfo2.Image = global::Map_Editor.Properties.Resources.Info24; + this.chkShowCellInfo2.Name = "chkShowCellInfo2"; + this.chkShowCellInfo2.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.F9))); + this.chkShowCellInfo2.Size = new System.Drawing.Size(277, 30); + this.chkShowCellInfo2.Text = "Cell Animation Info"; + this.chkShowCellInfo2.Click += new System.EventHandler(this.chkShowCellInfo_2_Click); + // + // chkShowCellInfo1 + // + this.chkShowCellInfo1.BackColor = System.Drawing.SystemColors.ControlLight; + this.chkShowCellInfo1.CheckOnClick = true; + this.chkShowCellInfo1.Image = global::Map_Editor.Properties.Resources.Info24; + this.chkShowCellInfo1.Name = "chkShowCellInfo1"; + this.chkShowCellInfo1.ShortcutKeys = System.Windows.Forms.Keys.Insert; + this.chkShowCellInfo1.Size = new System.Drawing.Size(277, 30); + this.chkShowCellInfo1.Text = "Cell Coordinates Info"; + this.chkShowCellInfo1.Click += new System.EventHandler(this.chkShowCellInfo_1_Click); + // + // toolStripSeparator31 + // + this.toolStripSeparator31.Name = "toolStripSeparator31"; + this.toolStripSeparator31.Size = new System.Drawing.Size(274, 6); + // + // chkFrontTag2 + // + this.chkFrontTag2.CheckOnClick = true; + this.chkFrontTag2.Image = global::Map_Editor.Properties.Resources.F24; + this.chkFrontTag2.Name = "chkFrontTag2"; + this.chkFrontTag2.ShortcutKeys = System.Windows.Forms.Keys.F10; + this.chkFrontTag2.Size = new System.Drawing.Size(277, 30); + this.chkFrontTag2.Text = "Front Tag"; + this.chkFrontTag2.Click += new System.EventHandler(this.chkFrontTag_Click); + // + // chkMiddleTag2 + // + this.chkMiddleTag2.CheckOnClick = true; + this.chkMiddleTag2.Image = global::Map_Editor.Properties.Resources.M24; + this.chkMiddleTag2.Name = "chkMiddleTag2"; + this.chkMiddleTag2.ShortcutKeys = System.Windows.Forms.Keys.F11; + this.chkMiddleTag2.Size = new System.Drawing.Size(277, 30); + this.chkMiddleTag2.Text = "Middle Tag"; + this.chkMiddleTag2.Click += new System.EventHandler(this.chkMiddleTag_Click); + // + // toolStripSeparator27 + // + this.toolStripSeparator27.Name = "toolStripSeparator27"; + this.toolStripSeparator27.Size = new System.Drawing.Size(274, 6); + // + // chkDrawGridsLine2 + // + this.chkDrawGridsLine2.BackColor = System.Drawing.SystemColors.ControlLight; + this.chkDrawGridsLine2.CheckOnClick = true; + this.chkDrawGridsLine2.Image = global::Map_Editor.Properties.Resources.GridA24; + this.chkDrawGridsLine2.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.chkDrawGridsLine2.Name = "chkDrawGridsLine2"; + this.chkDrawGridsLine2.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Alt | System.Windows.Forms.Keys.G))); + this.chkDrawGridsLine2.Size = new System.Drawing.Size(277, 30); + this.chkDrawGridsLine2.Text = "Grid - 2x2 Big Tile"; + this.chkDrawGridsLine2.Click += new System.EventHandler(this.chkDrawGridsLine_Click); + // + // chkDrawGridsBig2 + // + this.chkDrawGridsBig2.BackColor = System.Drawing.SystemColors.ControlLight; + this.chkDrawGridsBig2.CheckOnClick = true; + this.chkDrawGridsBig2.Image = global::Map_Editor.Properties.Resources.GridA24; + this.chkDrawGridsBig2.Name = "chkDrawGridsBig2"; + this.chkDrawGridsBig2.Size = new System.Drawing.Size(277, 30); + this.chkDrawGridsBig2.Text = "Grid - BigTile G"; + this.chkDrawGridsBig2.Click += new System.EventHandler(this.chkDrawGridsBig_Click); + // + // chkDrawGridsSmall2 + // + this.chkDrawGridsSmall2.BackColor = System.Drawing.SystemColors.ControlLight; + this.chkDrawGridsSmall2.CheckOnClick = true; + this.chkDrawGridsSmall2.Image = global::Map_Editor.Properties.Resources.GridA16; + this.chkDrawGridsSmall2.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.chkDrawGridsSmall2.Name = "chkDrawGridsSmall2"; + this.chkDrawGridsSmall2.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.G))); + this.chkDrawGridsSmall2.Size = new System.Drawing.Size(277, 30); + this.chkDrawGridsSmall2.Text = "Grid - SmTiles"; + this.chkDrawGridsSmall2.Click += new System.EventHandler(this.chkDrawGridsSmall_Click); + // + // toolStripSeparator29 + // + this.toolStripSeparator29.Name = "toolStripSeparator29"; + this.toolStripSeparator29.Size = new System.Drawing.Size(274, 6); + // + // chkBackMask2 + // + this.chkBackMask2.BackColor = System.Drawing.SystemColors.Control; + this.chkBackMask2.CheckOnClick = true; + this.chkBackMask2.Image = global::Map_Editor.Properties.Resources.Yellow24; + this.chkBackMask2.Name = "chkBackMask2"; + this.chkBackMask2.ShortcutKeys = System.Windows.Forms.Keys.F12; + this.chkBackMask2.Size = new System.Drawing.Size(277, 30); + this.chkBackMask2.Text = "Back Move Limit Tag (Yellow)"; + this.chkBackMask2.ToolTipText = "Low Objects\r\n(Can Shoot Over)"; + this.chkBackMask2.Click += new System.EventHandler(this.chkBackMask_Click); + // + // chkFrontMask2 + // + this.chkFrontMask2.BackColor = System.Drawing.SystemColors.Control; + this.chkFrontMask2.CheckOnClick = true; + this.chkFrontMask2.Image = global::Map_Editor.Properties.Resources.RedLim24; + this.chkFrontMask2.Name = "chkFrontMask2"; + this.chkFrontMask2.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.F12))); + this.chkFrontMask2.Size = new System.Drawing.Size(277, 30); + this.chkFrontMask2.Text = "Front Move Limit Tag (Red)"; + this.chkFrontMask2.ToolTipText = "High Objects \r\n(Cannot Shoot Over)"; + this.chkFrontMask2.Click += new System.EventHandler(this.chkFrontMask_Click); + // + // toolStripSeparator28 + // + this.toolStripSeparator28.Name = "toolStripSeparator28"; + this.toolStripSeparator28.Size = new System.Drawing.Size(274, 6); + // + // chkFrontAnimationTag2 + // + this.chkFrontAnimationTag2.CheckOnClick = true; + this.chkFrontAnimationTag2.Image = global::Map_Editor.Properties.Resources.TagXY24; + this.chkFrontAnimationTag2.Name = "chkFrontAnimationTag2"; + this.chkFrontAnimationTag2.Size = new System.Drawing.Size(277, 30); + this.chkFrontAnimationTag2.Text = "Front Animation Tag"; + this.chkFrontAnimationTag2.Click += new System.EventHandler(this.chkFrontAnimationTag_Click); + // + // chkMiddleAnimationTag2 + // + this.chkMiddleAnimationTag2.CheckOnClick = true; + this.chkMiddleAnimationTag2.ForeColor = System.Drawing.SystemColors.ControlText; + this.chkMiddleAnimationTag2.Image = global::Map_Editor.Properties.Resources.TagXY24; + this.chkMiddleAnimationTag2.Name = "chkMiddleAnimationTag2"; + this.chkMiddleAnimationTag2.Size = new System.Drawing.Size(277, 30); + this.chkMiddleAnimationTag2.Text = "Middle Animation Tag"; + this.chkMiddleAnimationTag2.Click += new System.EventHandler(this.chkMiddleAnimationTag_Click); + // + // toolStripSeparator55 + // + this.toolStripSeparator55.Name = "toolStripSeparator55"; + this.toolStripSeparator55.Size = new System.Drawing.Size(274, 6); + // + // chkLightTag2 + // + this.chkLightTag2.CheckOnClick = true; + this.chkLightTag2.Image = global::Map_Editor.Properties.Resources.TagXY24; + this.chkLightTag2.Name = "chkLightTag2"; + this.chkLightTag2.Size = new System.Drawing.Size(277, 30); + this.chkLightTag2.Text = "Light Tag L"; + this.chkLightTag2.Click += new System.EventHandler(this.chkLightTag_Click); + // + // toolStripSeparator58 + // + this.toolStripSeparator58.Name = "toolStripSeparator58"; + this.toolStripSeparator58.Size = new System.Drawing.Size(274, 6); + // + // chkDoorSign2 + // + this.chkDoorSign2.CheckOnClick = true; + this.chkDoorSign2.Image = global::Map_Editor.Properties.Resources._150; + this.chkDoorSign2.Name = "chkDoorSign2"; + this.chkDoorSign2.Size = new System.Drawing.Size(277, 30); + this.chkDoorSign2.Text = "Door Tag"; + this.chkDoorSign2.Click += new System.EventHandler(this.chkDoorSign_Click); + // + // chkDoor2 + // + this.chkDoor2.CheckOnClick = true; + this.chkDoor2.Image = global::Map_Editor.Properties.Resources.Door24; + this.chkDoor2.Name = "chkDoor2"; + this.chkDoor2.Size = new System.Drawing.Size(277, 30); + this.chkDoor2.Text = "Door Open"; + this.chkDoor2.Click += new System.EventHandler(this.chkDoor_Click); + // + // hScrollBar + // + this.hScrollBar.Dock = System.Windows.Forms.DockStyle.Fill; + this.hScrollBar.LargeChange = 1; + this.hScrollBar.Location = new System.Drawing.Point(0, 979); + this.hScrollBar.Name = "hScrollBar"; + this.hScrollBar.Size = new System.Drawing.Size(1672, 20); + this.hScrollBar.TabIndex = 0; + this.hScrollBar.Scroll += new System.Windows.Forms.ScrollEventHandler(this.hScrollBar_Scroll); + // + // tabWemadeMir2 + // + this.tabWemadeMir2.Controls.Add(this.labWemadeMir2OffSetY); + this.tabWemadeMir2.Controls.Add(this.labeWemadeMir2OffSetX); + this.tabWemadeMir2.Controls.Add(this.LabWemadeMir2Height); + this.tabWemadeMir2.Controls.Add(this.LabWemadeMir2Width); + this.tabWemadeMir2.Controls.Add(this.picWemdeMir2); + this.tabWemadeMir2.Controls.Add(this.WemadeMir2LibListBox); + this.tabWemadeMir2.Controls.Add(this.WemadeMir2LibListView); + this.tabWemadeMir2.Location = new System.Drawing.Point(27, 4); + this.tabWemadeMir2.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.tabWemadeMir2.Name = "tabWemadeMir2"; + this.tabWemadeMir2.Size = new System.Drawing.Size(1692, 999); + this.tabWemadeMir2.TabIndex = 5; + this.tabWemadeMir2.Text = "WemadeMir1"; + this.tabWemadeMir2.ToolTipText = "(F1)"; + this.tabWemadeMir2.UseVisualStyleBackColor = true; + this.tabWemadeMir2.Click += new System.EventHandler(this.tabWemadeMir2_Click); + // + // labWemadeMir2OffSetY + // + this.labWemadeMir2OffSetY.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.labWemadeMir2OffSetY.AutoSize = true; + this.labWemadeMir2OffSetY.Font = new System.Drawing.Font("Microsoft YaHei", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.labWemadeMir2OffSetY.Location = new System.Drawing.Point(1537, 109); + this.labWemadeMir2OffSetY.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.labWemadeMir2OffSetY.Name = "labWemadeMir2OffSetY"; + this.labWemadeMir2OffSetY.Size = new System.Drawing.Size(59, 20); + this.labWemadeMir2OffSetY.TabIndex = 15; + this.labWemadeMir2OffSetY.Text = "OffSetY"; + // + // labeWemadeMir2OffSetX + // + this.labeWemadeMir2OffSetX.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.labeWemadeMir2OffSetX.AutoSize = true; + this.labeWemadeMir2OffSetX.Font = new System.Drawing.Font("Microsoft YaHei", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.labeWemadeMir2OffSetX.Location = new System.Drawing.Point(1536, 81); + this.labeWemadeMir2OffSetX.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.labeWemadeMir2OffSetX.Name = "labeWemadeMir2OffSetX"; + this.labeWemadeMir2OffSetX.Size = new System.Drawing.Size(60, 20); + this.labeWemadeMir2OffSetX.TabIndex = 14; + this.labeWemadeMir2OffSetX.Text = "OffSetX"; + // + // LabWemadeMir2Height + // + this.LabWemadeMir2Height.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.LabWemadeMir2Height.AutoSize = true; + this.LabWemadeMir2Height.Font = new System.Drawing.Font("Microsoft YaHei", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.LabWemadeMir2Height.Location = new System.Drawing.Point(1536, 32); + this.LabWemadeMir2Height.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.LabWemadeMir2Height.Name = "LabWemadeMir2Height"; + this.LabWemadeMir2Height.Size = new System.Drawing.Size(55, 20); + this.LabWemadeMir2Height.TabIndex = 13; + this.LabWemadeMir2Height.Text = "Height"; + // + // LabWemadeMir2Width + // + this.LabWemadeMir2Width.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.LabWemadeMir2Width.AutoSize = true; + this.LabWemadeMir2Width.Font = new System.Drawing.Font("Microsoft YaHei", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.LabWemadeMir2Width.Location = new System.Drawing.Point(1541, 9); + this.LabWemadeMir2Width.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.LabWemadeMir2Width.Name = "LabWemadeMir2Width"; + this.LabWemadeMir2Width.Size = new System.Drawing.Size(50, 20); + this.LabWemadeMir2Width.TabIndex = 12; + this.LabWemadeMir2Width.Text = "Width"; + // + // picWemdeMir2 + // + this.picWemdeMir2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.picWemdeMir2.BackColor = System.Drawing.Color.Black; + this.picWemdeMir2.Location = new System.Drawing.Point(1580, 146); + this.picWemdeMir2.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.picWemdeMir2.Name = "picWemdeMir2"; + this.picWemdeMir2.Size = new System.Drawing.Size(100, 50); + this.picWemdeMir2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize; + this.picWemdeMir2.TabIndex = 11; + this.picWemdeMir2.TabStop = false; + this.picWemdeMir2.Click += new System.EventHandler(this.picWemdeMir2_Click); + // + // WemadeMir2LibListBox + // + this.WemadeMir2LibListBox.Dock = System.Windows.Forms.DockStyle.Left; + this.WemadeMir2LibListBox.Font = new System.Drawing.Font("Comic Sans MS", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.WemadeMir2LibListBox.FormattingEnabled = true; + this.WemadeMir2LibListBox.ItemHeight = 19; + this.WemadeMir2LibListBox.Location = new System.Drawing.Point(0, 0); + this.WemadeMir2LibListBox.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.WemadeMir2LibListBox.Name = "WemadeMir2LibListBox"; + this.WemadeMir2LibListBox.Size = new System.Drawing.Size(120, 999); + this.WemadeMir2LibListBox.TabIndex = 10; + this.WemadeMir2LibListBox.SelectedIndexChanged += new System.EventHandler(this.WemadeMir2LibListBox_SelectedIndexChanged); + // + // WemadeMir2LibListView + // + this.WemadeMir2LibListView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.WemadeMir2LibListView.HideSelection = false; + this.WemadeMir2LibListView.LargeImageList = this.WemadeMir2ImageList; + this.WemadeMir2LibListView.Location = new System.Drawing.Point(120, 0); + this.WemadeMir2LibListView.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.WemadeMir2LibListView.Name = "WemadeMir2LibListView"; + this.WemadeMir2LibListView.Size = new System.Drawing.Size(1381, 999); + this.WemadeMir2LibListView.TabIndex = 9; + this.WemadeMir2LibListView.UseCompatibleStateImageBehavior = false; + this.WemadeMir2LibListView.VirtualMode = true; + this.WemadeMir2LibListView.RetrieveVirtualItem += new System.Windows.Forms.RetrieveVirtualItemEventHandler(this.WemadeMir2LibListView_RetrieveVirtualItem); + this.WemadeMir2LibListView.SelectedIndexChanged += new System.EventHandler(this.WemadeMir2LibListView_SelectedIndexChanged); + this.WemadeMir2LibListView.Click += new System.EventHandler(this.WemadeMir2LibListView_Click); + // + // WemadeMir2ImageList + // + this.WemadeMir2ImageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit; + this.WemadeMir2ImageList.ImageSize = new System.Drawing.Size(64, 64); + this.WemadeMir2ImageList.TransparentColor = System.Drawing.Color.Transparent; + // + // tabObjects + // + this.tabObjects.Controls.Add(this.splitContainer1); + this.tabObjects.Location = new System.Drawing.Point(27, 4); + this.tabObjects.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.tabObjects.Name = "tabObjects"; + this.tabObjects.Size = new System.Drawing.Size(1692, 999); + this.tabObjects.TabIndex = 8; + this.tabObjects.Text = "Objects"; + this.tabObjects.ToolTipText = "(R)"; + this.tabObjects.UseVisualStyleBackColor = true; + // + // 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.ObjectslistBox); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.splitContainer2); + this.splitContainer1.Size = new System.Drawing.Size(1692, 999); + this.splitContainer1.SplitterDistance = 169; + this.splitContainer1.TabIndex = 8; + // + // ObjectslistBox + // + this.ObjectslistBox.Dock = System.Windows.Forms.DockStyle.Fill; + this.ObjectslistBox.Font = new System.Drawing.Font("Comic Sans MS", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ObjectslistBox.FormattingEnabled = true; + this.ObjectslistBox.ItemHeight = 19; + this.ObjectslistBox.Location = new System.Drawing.Point(0, 0); + this.ObjectslistBox.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.ObjectslistBox.Name = "ObjectslistBox"; + this.ObjectslistBox.Size = new System.Drawing.Size(169, 999); + this.ObjectslistBox.TabIndex = 6; + this.ObjectslistBox.SelectedIndexChanged += new System.EventHandler(this.ObjectslistBox_SelectedIndexChanged); + // + // splitContainer2 + // + this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer2.Location = new System.Drawing.Point(0, 0); + this.splitContainer2.Name = "splitContainer2"; + this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.Controls.Add(this.btnRefreshList); + this.splitContainer2.Panel1.Controls.Add(this.btnDeleteObjects); + // + // splitContainer2.Panel2 + // + this.splitContainer2.Panel2.Controls.Add(this.picObjects); + this.splitContainer2.Size = new System.Drawing.Size(1519, 999); + this.splitContainer2.SplitterDistance = 40; + this.splitContainer2.TabIndex = 3; + // + // btnRefreshList + // + this.btnRefreshList.Location = new System.Drawing.Point(111, 5); + this.btnRefreshList.Name = "btnRefreshList"; + this.btnRefreshList.Size = new System.Drawing.Size(100, 36); + this.btnRefreshList.TabIndex = 3; + this.btnRefreshList.Text = "Refresh"; + this.btnRefreshList.UseVisualStyleBackColor = true; + this.btnRefreshList.Click += new System.EventHandler(this.btnRefreshList_Click); + // + // btnDeleteObjects + // + this.btnDeleteObjects.Location = new System.Drawing.Point(4, 5); + this.btnDeleteObjects.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.btnDeleteObjects.Name = "btnDeleteObjects"; + this.btnDeleteObjects.Size = new System.Drawing.Size(100, 36); + this.btnDeleteObjects.TabIndex = 2; + this.btnDeleteObjects.Text = "Delete"; + this.btnDeleteObjects.UseVisualStyleBackColor = true; + this.btnDeleteObjects.Click += new System.EventHandler(this.btnDeleteObjects_Click); + // + // picObjects + // + this.picObjects.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.picObjects.BackColor = System.Drawing.Color.Transparent; + this.picObjects.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.picObjects.Location = new System.Drawing.Point(0, 0); + this.picObjects.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.picObjects.Name = "picObjects"; + this.picObjects.Size = new System.Drawing.Size(1519, 955); + this.picObjects.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.picObjects.TabIndex = 0; + this.picObjects.TabStop = false; + // + // tabTiles + // + this.tabTiles.Controls.Add(this.picTile); + this.tabTiles.Controls.Add(this.TileslistView); + this.tabTiles.Location = new System.Drawing.Point(27, 4); + this.tabTiles.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.tabTiles.Name = "tabTiles"; + this.tabTiles.Size = new System.Drawing.Size(1692, 999); + this.tabTiles.TabIndex = 9; + this.tabTiles.Text = "Tiles"; + this.tabTiles.ToolTipText = "(T)"; + this.tabTiles.UseVisualStyleBackColor = true; + // + // picTile + // + this.picTile.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.picTile.BackColor = System.Drawing.Color.Black; + this.picTile.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.picTile.Location = new System.Drawing.Point(1563, 24); + this.picTile.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.picTile.Name = "picTile"; + this.picTile.Size = new System.Drawing.Size(935, 787); + this.picTile.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize; + this.picTile.TabIndex = 11; + this.picTile.TabStop = false; + // + // TileslistView + // + this.TileslistView.Dock = System.Windows.Forms.DockStyle.Left; + this.TileslistView.HideSelection = false; + this.TileslistView.LargeImageList = this.TilesImageList; + this.TileslistView.Location = new System.Drawing.Point(0, 0); + this.TileslistView.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.TileslistView.Name = "TileslistView"; + this.TileslistView.Size = new System.Drawing.Size(1539, 999); + this.TileslistView.TabIndex = 10; + this.TileslistView.UseCompatibleStateImageBehavior = false; + this.TileslistView.VirtualMode = true; + this.TileslistView.RetrieveVirtualItem += new System.Windows.Forms.RetrieveVirtualItemEventHandler(this.TileslistView_RetrieveVirtualItem); + this.TileslistView.SelectedIndexChanged += new System.EventHandler(this.TileslistView_SelectedIndexChanged); + // + // TilesImageList + // + this.TilesImageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit; + this.TilesImageList.ImageSize = new System.Drawing.Size(144, 96); + this.TilesImageList.TransparentColor = System.Drawing.Color.Transparent; + // + // tabTileCutter + // + this.tabTileCutter.Controls.Add(this.splitContainer3); + this.tabTileCutter.Location = new System.Drawing.Point(27, 4); + this.tabTileCutter.Name = "tabTileCutter"; + this.tabTileCutter.Padding = new System.Windows.Forms.Padding(3); + this.tabTileCutter.Size = new System.Drawing.Size(1692, 999); + this.tabTileCutter.TabIndex = 10; + this.tabTileCutter.Text = "TileCutter"; + this.tabTileCutter.ToolTipText = "(F4)"; + this.tabTileCutter.UseVisualStyleBackColor = true; + // + // splitContainer3 + // + this.splitContainer3.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer3.Location = new System.Drawing.Point(3, 3); + this.splitContainer3.Name = "splitContainer3"; + // + // splitContainer3.Panel1 + // + this.splitContainer3.Panel1.Controls.Add(this.btn_grid); + this.splitContainer3.Panel1.Controls.Add(this.btn_vCut); + this.splitContainer3.Panel1.Controls.Add(this.btn_load); + this.splitContainer3.Panel1.Controls.Add(this.label1); + this.splitContainer3.Panel1.Controls.Add(this.btn_up); + this.splitContainer3.Panel1.Controls.Add(this.comboBox_cellSize); + this.splitContainer3.Panel1.Controls.Add(this.btn_left); + this.splitContainer3.Panel1.Controls.Add(this.btn_down); + this.splitContainer3.Panel1.Controls.Add(this.btn_right); + this.splitContainer3.Panel1MinSize = 170; + // + // splitContainer3.Panel2 + // + this.splitContainer3.Panel2.AutoScroll = true; + this.splitContainer3.Panel2.Controls.Add(this.pictureBox_Highlight); + this.splitContainer3.Panel2.Controls.Add(this.pictureBox_Grid); + this.splitContainer3.Panel2.Controls.Add(this.pictureBox_Image); + this.splitContainer3.Panel2MinSize = 50; + this.splitContainer3.Size = new System.Drawing.Size(1686, 993); + this.splitContainer3.SplitterDistance = 170; + this.splitContainer3.TabIndex = 0; + // + // btn_grid + // + this.btn_grid.Location = new System.Drawing.Point(125, 19); + this.btn_grid.Margin = new System.Windows.Forms.Padding(0); + this.btn_grid.Name = "btn_grid"; + this.btn_grid.Size = new System.Drawing.Size(27, 25); + this.btn_grid.TabIndex = 17; + this.btn_grid.Text = "#"; + this.btn_grid.UseVisualStyleBackColor = true; + this.btn_grid.Click += new System.EventHandler(this.btn_grid_Click); + // + // btn_vCut + // + this.btn_vCut.Location = new System.Drawing.Point(21, 212); + this.btn_vCut.Margin = new System.Windows.Forms.Padding(4); + this.btn_vCut.Name = "btn_vCut"; + this.btn_vCut.Size = new System.Drawing.Size(100, 28); + this.btn_vCut.TabIndex = 16; + this.btn_vCut.Text = "Save Lib"; + this.btn_vCut.UseVisualStyleBackColor = true; + this.btn_vCut.Click += new System.EventHandler(this.btn_vCut_Click); + // + // btn_load + // + this.btn_load.Location = new System.Drawing.Point(21, 17); + this.btn_load.Margin = new System.Windows.Forms.Padding(4); + this.btn_load.Name = "btn_load"; + this.btn_load.Size = new System.Drawing.Size(100, 28); + this.btn_load.TabIndex = 9; + this.btn_load.Text = "Load Image"; + this.btn_load.UseVisualStyleBackColor = true; + this.btn_load.Click += new System.EventHandler(this.btn_load_Click); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(21, 141); + this.label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(58, 17); + this.label1.TabIndex = 15; + this.label1.Text = "Tile Size"; + // + // btn_up + // + this.btn_up.Location = new System.Drawing.Point(58, 54); + this.btn_up.Margin = new System.Windows.Forms.Padding(0); + this.btn_up.Name = "btn_up"; + this.btn_up.Size = new System.Drawing.Size(27, 25); + this.btn_up.TabIndex = 10; + this.btn_up.UseVisualStyleBackColor = true; + this.btn_up.Click += new System.EventHandler(this.btn_up_Click); + // + // comboBox_cellSize + // + this.comboBox_cellSize.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboBox_cellSize.FormattingEnabled = true; + this.comboBox_cellSize.Items.AddRange(new object[] { + "48 x 32", + "96 x 64"}); + this.comboBox_cellSize.Location = new System.Drawing.Point(21, 161); + this.comboBox_cellSize.Margin = new System.Windows.Forms.Padding(4); + this.comboBox_cellSize.Name = "comboBox_cellSize"; + this.comboBox_cellSize.Size = new System.Drawing.Size(99, 23); + this.comboBox_cellSize.TabIndex = 14; + this.comboBox_cellSize.SelectedIndexChanged += new System.EventHandler(this.comboBox_cellSize_SelectedIndexChanged); + // + // btn_left + // + this.btn_left.Location = new System.Drawing.Point(32, 78); + this.btn_left.Margin = new System.Windows.Forms.Padding(0); + this.btn_left.Name = "btn_left"; + this.btn_left.Size = new System.Drawing.Size(27, 25); + this.btn_left.TabIndex = 11; + this.btn_left.UseVisualStyleBackColor = true; + this.btn_left.Click += new System.EventHandler(this.btn_left_Click); + // + // btn_down + // + this.btn_down.Location = new System.Drawing.Point(58, 103); + this.btn_down.Margin = new System.Windows.Forms.Padding(0); + this.btn_down.Name = "btn_down"; + this.btn_down.Size = new System.Drawing.Size(27, 25); + this.btn_down.TabIndex = 13; + this.btn_down.UseVisualStyleBackColor = true; + this.btn_down.Click += new System.EventHandler(this.btn_down_Click); + // + // btn_right + // + this.btn_right.Location = new System.Drawing.Point(85, 78); + this.btn_right.Margin = new System.Windows.Forms.Padding(0); + this.btn_right.Name = "btn_right"; + this.btn_right.Size = new System.Drawing.Size(27, 25); + this.btn_right.TabIndex = 12; + this.btn_right.UseVisualStyleBackColor = true; + this.btn_right.Click += new System.EventHandler(this.btn_right_Click); + // + // pictureBox_Highlight + // + this.pictureBox_Highlight.BackColor = System.Drawing.Color.Transparent; + this.pictureBox_Highlight.ContextMenuStrip = this.contextMenuTileCutter; + this.pictureBox_Highlight.Location = new System.Drawing.Point(0, 0); + this.pictureBox_Highlight.Margin = new System.Windows.Forms.Padding(4); + this.pictureBox_Highlight.Name = "pictureBox_Highlight"; + this.pictureBox_Highlight.Size = new System.Drawing.Size(1500, 900); + this.pictureBox_Highlight.TabIndex = 5; + this.pictureBox_Highlight.TabStop = false; + this.pictureBox_Highlight.Click += new System.EventHandler(this.pictureBox_Highlight_Click); + // + // contextMenuTileCutter + // + this.contextMenuTileCutter.ImageScalingSize = new System.Drawing.Size(20, 20); + this.contextMenuTileCutter.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.menuSelectAllCells, + this.menuDeselectAllCells}); + this.contextMenuTileCutter.Name = "contextMenuStrip1"; + this.contextMenuTileCutter.Size = new System.Drawing.Size(133, 48); + // + // menuSelectAllCells + // + this.menuSelectAllCells.Name = "menuSelectAllCells"; + this.menuSelectAllCells.Size = new System.Drawing.Size(132, 22); + this.menuSelectAllCells.Text = "SelectAll"; + this.menuSelectAllCells.Click += new System.EventHandler(this.menuSelectAllCells_Click); + // + // menuDeselectAllCells + // + this.menuDeselectAllCells.Name = "menuDeselectAllCells"; + this.menuDeselectAllCells.Size = new System.Drawing.Size(132, 22); + this.menuDeselectAllCells.Text = "DeselectAll"; + this.menuDeselectAllCells.Click += new System.EventHandler(this.menuDeselectAllCells_Click); + // + // pictureBox_Grid + // + this.pictureBox_Grid.BackColor = System.Drawing.Color.Transparent; + this.pictureBox_Grid.Location = new System.Drawing.Point(0, 0); + this.pictureBox_Grid.Margin = new System.Windows.Forms.Padding(0); + this.pictureBox_Grid.Name = "pictureBox_Grid"; + this.pictureBox_Grid.Size = new System.Drawing.Size(1550, 950); + this.pictureBox_Grid.TabIndex = 4; + this.pictureBox_Grid.TabStop = false; + // + // pictureBox_Image + // + this.pictureBox_Image.Location = new System.Drawing.Point(0, 0); + this.pictureBox_Image.Margin = new System.Windows.Forms.Padding(4); + this.pictureBox_Image.Name = "pictureBox_Image"; + this.pictureBox_Image.Size = new System.Drawing.Size(1600, 1000); + this.pictureBox_Image.TabIndex = 3; + this.pictureBox_Image.TabStop = false; + // + // tabHelp + // + this.tabHelp.AutoScroll = true; + this.tabHelp.BackColor = System.Drawing.SystemColors.ActiveCaptionText; + this.tabHelp.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None; + this.tabHelp.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; + this.tabHelp.Controls.Add(this.textBox1); + this.tabHelp.Location = new System.Drawing.Point(27, 4); + this.tabHelp.Name = "tabHelp"; + this.tabHelp.Padding = new System.Windows.Forms.Padding(3); + this.tabHelp.Size = new System.Drawing.Size(1692, 999); + this.tabHelp.TabIndex = 11; + this.tabHelp.Text = "Help"; + this.tabHelp.ToolTipText = "(H)"; + // + // textBox1 + // + this.textBox1.AcceptsReturn = true; + this.textBox1.AcceptsTab = true; + this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBox1.BackColor = System.Drawing.SystemColors.Highlight; + this.textBox1.Font = new System.Drawing.Font("Comic Sans MS", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.textBox1.ForeColor = System.Drawing.Color.Black; + this.textBox1.Location = new System.Drawing.Point(0, 0); + this.textBox1.Multiline = true; + this.textBox1.Name = "textBox1"; + this.textBox1.ReadOnly = true; + this.textBox1.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.textBox1.Size = new System.Drawing.Size(1692, 999); + this.textBox1.TabIndex = 2; + this.textBox1.Text = resources.GetString("textBox1.Text"); + // + // ShandaMir2ImageList + // + this.ShandaMir2ImageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit; + this.ShandaMir2ImageList.ImageSize = new System.Drawing.Size(64, 64); + this.ShandaMir2ImageList.TransparentColor = System.Drawing.Color.Transparent; + // + // WemadeMir3ImageList + // + this.WemadeMir3ImageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit; + this.WemadeMir3ImageList.ImageSize = new System.Drawing.Size(64, 64); + this.WemadeMir3ImageList.TransparentColor = System.Drawing.Color.Transparent; + // + // ShandaMir3ImageList + // + this.ShandaMir3ImageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit; + this.ShandaMir3ImageList.ImageSize = new System.Drawing.Size(64, 64); + this.ShandaMir3ImageList.TransparentColor = System.Drawing.Color.Transparent; + // + // ObjectsimageList + // + this.ObjectsimageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit; + this.ObjectsimageList.ImageSize = new System.Drawing.Size(96, 96); + this.ObjectsimageList.TransparentColor = System.Drawing.Color.Transparent; + // + // menuStrip1 + // + this.menuStrip1.ImageScalingSize = new System.Drawing.Size(20, 20); + this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolStripMenuItem1, + this.toolStripMenuItem2, + this.toolsToolStripMenuItem, + this.toolStripMenuItem9, + this.helpToolStripMenuItem}); + this.menuStrip1.Location = new System.Drawing.Point(0, 0); + this.menuStrip1.Name = "menuStrip1"; + this.menuStrip1.Size = new System.Drawing.Size(1982, 24); + this.menuStrip1.TabIndex = 5; + this.menuStrip1.Text = "menuStrip1"; + this.menuStrip1.Visible = false; + // + // toolStripMenuItem1 + // + this.toolStripMenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.menuNew, + this.menuOpen, + this.menuSave}); + this.toolStripMenuItem1.Name = "toolStripMenuItem1"; + this.toolStripMenuItem1.Size = new System.Drawing.Size(37, 20); + this.toolStripMenuItem1.Text = "File"; + // + // menuNew + // + this.menuNew.Name = "menuNew"; + this.menuNew.Size = new System.Drawing.Size(134, 22); + this.menuNew.Text = "New"; + this.menuNew.Click += new System.EventHandler(this.menuNew_Click); + // + // menuOpen + // + this.menuOpen.Name = "menuOpen"; + this.menuOpen.Size = new System.Drawing.Size(134, 22); + this.menuOpen.Text = "Open"; + this.menuOpen.Click += new System.EventHandler(this.menuOpen_Click); + // + // menuSave + // + this.menuSave.Name = "menuSave"; + this.menuSave.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Alt | System.Windows.Forms.Keys.S))); + this.menuSave.Size = new System.Drawing.Size(134, 22); + this.menuSave.Text = "Save"; + this.menuSave.Click += new System.EventHandler(this.menuSave_Click); + // + // toolStripMenuItem2 + // + this.toolStripMenuItem2.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.menuUndo, + this.menuRedo, + this.toolStripSeparator1, + this.menuClearMap}); + this.toolStripMenuItem2.Name = "toolStripMenuItem2"; + this.toolStripMenuItem2.Size = new System.Drawing.Size(39, 20); + this.toolStripMenuItem2.Text = "Edit"; + // + // menuUndo + // + this.menuUndo.Name = "menuUndo"; + this.menuUndo.Size = new System.Drawing.Size(128, 22); + this.menuUndo.Text = "Undo"; + this.menuUndo.Click += new System.EventHandler(this.menuUndo_Click); + // + // menuRedo + // + this.menuRedo.Name = "menuRedo"; + this.menuRedo.Size = new System.Drawing.Size(128, 22); + this.menuRedo.Text = "Redo"; + this.menuRedo.Click += new System.EventHandler(this.menuRedo_Click); + // + // toolStripSeparator1 + // + this.toolStripSeparator1.Name = "toolStripSeparator1"; + this.toolStripSeparator1.Size = new System.Drawing.Size(125, 6); + // + // menuClearMap + // + this.menuClearMap.Name = "menuClearMap"; + this.menuClearMap.Size = new System.Drawing.Size(128, 22); + this.menuClearMap.Text = "Clear Map"; + this.menuClearMap.Click += new System.EventHandler(this.menuClearMap_Click); + // + // toolsToolStripMenuItem + // + this.toolsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.menuFreeMemory, + this.menuJump, + this.menuInvertMir3Layer}); + this.toolsToolStripMenuItem.Name = "toolsToolStripMenuItem"; + this.toolsToolStripMenuItem.Size = new System.Drawing.Size(46, 20); + this.toolsToolStripMenuItem.Text = "Tools"; + // + // menuFreeMemory + // + this.menuFreeMemory.Name = "menuFreeMemory"; + this.menuFreeMemory.Size = new System.Drawing.Size(198, 22); + this.menuFreeMemory.Text = "Free Memory"; + this.menuFreeMemory.Click += new System.EventHandler(this.menuFreeMemory_Click); + // + // menuJump + // + this.menuJump.Name = "menuJump"; + this.menuJump.Size = new System.Drawing.Size(198, 22); + this.menuJump.Text = "Jump"; + this.menuJump.Click += new System.EventHandler(this.menuJump_Click); + // + // toolStripMenuItem9 + // + this.toolStripMenuItem9.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.menuZoomIn, + this.menuZoomOut}); + this.toolStripMenuItem9.Name = "toolStripMenuItem9"; + this.toolStripMenuItem9.Size = new System.Drawing.Size(44, 20); + this.toolStripMenuItem9.Text = "View"; + // + // menuZoomIn + // + this.menuZoomIn.Name = "menuZoomIn"; + this.menuZoomIn.Size = new System.Drawing.Size(145, 22); + this.menuZoomIn.Text = "Zoom In (+)"; + this.menuZoomIn.Click += new System.EventHandler(this.menuZoomIn_Click); + // + // menuZoomOut + // + this.menuZoomOut.Name = "menuZoomOut"; + this.menuZoomOut.Size = new System.Drawing.Size(145, 22); + this.menuZoomOut.Text = "Zoom Out (-)"; + this.menuZoomOut.Click += new System.EventHandler(this.menuZoomOut_Click); + // + // helpToolStripMenuItem + // + this.helpToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.menuAbout}); + this.helpToolStripMenuItem.Name = "helpToolStripMenuItem"; + this.helpToolStripMenuItem.Size = new System.Drawing.Size(44, 20); + this.helpToolStripMenuItem.Text = "Help"; + // + // menuAbout + // + this.menuAbout.Name = "menuAbout"; + this.menuAbout.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Alt | System.Windows.Forms.Keys.A))); + this.menuAbout.Size = new System.Drawing.Size(145, 22); + this.menuAbout.Text = "About"; + this.menuAbout.Click += new System.EventHandler(this.menuAbout_Click); + // + // SaveLibraryDialog + // + this.SaveLibraryDialog.Filter = "Lib|*.lib"; + // + // splitContainer4 + // + this.splitContainer4.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer4.Location = new System.Drawing.Point(0, 54); + this.splitContainer4.Name = "splitContainer4"; + // + // splitContainer4.Panel1 + // + this.splitContainer4.Panel1.Controls.Add(this.tabControl1); + // + // splitContainer4.Panel2 + // + this.splitContainer4.Panel2.Controls.Add(this.splitContainer5); + this.splitContainer4.Size = new System.Drawing.Size(1982, 1007); + this.splitContainer4.SplitterDistance = 1723; + this.splitContainer4.TabIndex = 6; + // + // splitContainer5 + // + this.splitContainer5.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer5.Location = new System.Drawing.Point(0, 0); + this.splitContainer5.Name = "splitContainer5"; + this.splitContainer5.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer5.Panel1 + // + this.splitContainer5.Panel1.Controls.Add(this.OpenBtn); + this.splitContainer5.Panel1.Controls.Add(this.PathTxtBox); + // + // splitContainer5.Panel2 + // + this.splitContainer5.Panel2.Controls.Add(this.TreeBrowser); + this.splitContainer5.Size = new System.Drawing.Size(255, 1007); + this.splitContainer5.SplitterDistance = 35; + this.splitContainer5.TabIndex = 0; + // + // OpenBtn + // + this.OpenBtn.Font = new System.Drawing.Font("Comic Sans MS", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.OpenBtn.Location = new System.Drawing.Point(220, 6); + this.OpenBtn.Name = "OpenBtn"; + this.OpenBtn.Size = new System.Drawing.Size(30, 23); + this.OpenBtn.TabIndex = 3; + this.OpenBtn.Text = "Go"; + this.OpenBtn.UseVisualStyleBackColor = true; + this.OpenBtn.Click += new System.EventHandler(this.OpenBtn_Click); + // + // PathTxtBox + // + this.PathTxtBox.Location = new System.Drawing.Point(0, 4); + this.PathTxtBox.Name = "PathTxtBox"; + this.PathTxtBox.Size = new System.Drawing.Size(216, 27); + this.PathTxtBox.TabIndex = 2; + // + // TreeBrowser + // + this.TreeBrowser.Dock = System.Windows.Forms.DockStyle.Fill; + this.TreeBrowser.Location = new System.Drawing.Point(0, 0); + this.TreeBrowser.Name = "TreeBrowser"; + this.TreeBrowser.Size = new System.Drawing.Size(255, 968); + this.TreeBrowser.TabIndex = 1; + // + // Main + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 19F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1982, 1061); + this.Controls.Add(this.splitContainer4); + this.Controls.Add(this.toolStrip1); + this.Controls.Add(this.menuStrip1); + this.Font = new System.Drawing.Font("Comic Sans MS", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.KeyPreview = true; + this.MainMenuStrip = this.menuStrip1; + this.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.Name = "Main"; + this.Text = "Legend Of Mir 1 Map Editor"; + this.WindowState = System.Windows.Forms.FormWindowState.Maximized; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Main_FormClosing); + this.Load += new System.EventHandler(this.Main_Load); + this.ResizeEnd += new System.EventHandler(this.Main_ResizeEnd); + this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.Main_KeyDown); + this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.TreeBrowser_OnKeyPress); + this.KeyUp += new System.Windows.Forms.KeyEventHandler(this.Main_KeyUp); + this.toolStrip1.ResumeLayout(false); + this.toolStrip1.PerformLayout(); + this.tabControl1.ResumeLayout(false); + this.tabMap.ResumeLayout(false); + this.tableLayoutPanel1.ResumeLayout(false); + this.contextMenuStrip1.ResumeLayout(false); + this.tabWemadeMir2.ResumeLayout(false); + this.tabWemadeMir2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.picWemdeMir2)).EndInit(); + this.tabObjects.ResumeLayout(false); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.splitContainer2.Panel1.ResumeLayout(false); + this.splitContainer2.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); + this.splitContainer2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.picObjects)).EndInit(); + this.tabTiles.ResumeLayout(false); + this.tabTiles.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.picTile)).EndInit(); + this.tabTileCutter.ResumeLayout(false); + this.splitContainer3.Panel1.ResumeLayout(false); + this.splitContainer3.Panel1.PerformLayout(); + this.splitContainer3.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).EndInit(); + this.splitContainer3.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox_Highlight)).EndInit(); + this.contextMenuTileCutter.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox_Grid)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox_Image)).EndInit(); + this.tabHelp.ResumeLayout(false); + this.tabHelp.PerformLayout(); + this.menuStrip1.ResumeLayout(false); + this.menuStrip1.PerformLayout(); + this.splitContainer4.Panel1.ResumeLayout(false); + this.splitContainer4.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer4)).EndInit(); + this.splitContainer4.ResumeLayout(false); + this.splitContainer5.Panel1.ResumeLayout(false); + this.splitContainer5.Panel1.PerformLayout(); + this.splitContainer5.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer5)).EndInit(); + this.splitContainer5.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ToolStrip toolStrip1; + private System.Windows.Forms.ToolStripButton btnOpen; + private System.Windows.Forms.TabControl tabControl1; + private System.Windows.Forms.TabPage tabMap; + private System.Windows.Forms.ToolStripDropDownButton toolStripDropDownButton2; + private System.Windows.Forms.ToolStripMenuItem chkBack; + private System.Windows.Forms.ToolStripMenuItem chkMidd; + private System.Windows.Forms.ToolStripMenuItem chkFront; + private System.Windows.Forms.ToolStripMenuItem chkBackMask; + private System.Windows.Forms.ToolStripMenuItem chkFrontMask; + private System.Windows.Forms.ToolStripMenuItem chkDoor; + private System.Windows.Forms.ToolStripMenuItem chkDoorSign; + private System.Windows.Forms.ToolStripMenuItem chkLightTag; + private System.Windows.Forms.ImageList ShandaMir2ImageList; + private System.Windows.Forms.TabPage tabWemadeMir2; + private System.Windows.Forms.ListBox WemadeMir2LibListBox; + private System.Windows.Forms.ListView WemadeMir2LibListView; + private System.Windows.Forms.ImageList WemadeMir2ImageList; + private System.Windows.Forms.ImageList ShandaMir3ImageList; + private System.Windows.Forms.ImageList WemadeMir3ImageList; + private System.Windows.Forms.ToolStripMenuItem chkMiddleAnimationTag; + private System.Windows.Forms.ToolStripLabel toolStripLabel1; + private System.Windows.Forms.ToolStripComboBox cmbEditorLayer; + private System.Windows.Forms.PictureBox picWemdeMir2; + private System.Windows.Forms.Label labWemadeMir2OffSetY; + private System.Windows.Forms.Label labeWemadeMir2OffSetX; + private System.Windows.Forms.Label LabWemadeMir2Height; + private System.Windows.Forms.Label LabWemadeMir2Width; + private System.Windows.Forms.TabPage tabObjects; + private System.Windows.Forms.PictureBox picObjects; + private System.Windows.Forms.ImageList ObjectsimageList; + private System.Windows.Forms.ToolStripMenuItem chkFrontTag; + private System.Windows.Forms.Button btnDeleteObjects; + private System.Windows.Forms.ContextMenuStrip contextMenuStrip1; + private System.Windows.Forms.ToolStripMenuItem 撤销ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 返回ToolStripMenuItem; + private System.Windows.Forms.TabPage tabTiles; + private System.Windows.Forms.Panel MapPanel; + private System.Windows.Forms.ListBox ObjectslistBox; + private System.Windows.Forms.ToolStripMenuItem chkMiddleTag; + private System.Windows.Forms.ToolStripMenuItem chkShowCellInfo; + private System.Windows.Forms.PictureBox picTile; + private System.Windows.Forms.ListView TileslistView; + private System.Windows.Forms.ImageList TilesImageList; + private System.Windows.Forms.MenuStrip menuStrip1; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem menuNew; + private System.Windows.Forms.ToolStripMenuItem menuOpen; + private System.Windows.Forms.ToolStripMenuItem menuSave; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem2; + private System.Windows.Forms.ToolStripMenuItem menuClearMap; + private System.Windows.Forms.ToolStripMenuItem menuUndo; + private System.Windows.Forms.ToolStripMenuItem menuRedo; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem9; + private System.Windows.Forms.ToolStripMenuItem menuZoomIn; + private System.Windows.Forms.ToolStripMenuItem menuZoomOut; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; + private System.Windows.Forms.VScrollBar vScrollBar; + private System.Windows.Forms.HScrollBar hScrollBar; + private System.Windows.Forms.ToolStripMenuItem menu_SaveObject; + private System.Windows.Forms.SplitContainer splitContainer1; + private System.Windows.Forms.SplitContainer splitContainer2; + private System.Windows.Forms.ToolStripMenuItem toolsToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem menuFreeMemory; + private System.Windows.Forms.ToolStripMenuItem menuJump; + private System.Windows.Forms.ToolStripButton btnNew; + private System.Windows.Forms.ToolStripMenuItem menuInvertMir3Layer; + private System.Windows.Forms.ToolStripMenuItem helpToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem menuAbout; + private System.Windows.Forms.ToolStripButton btnJump; + private System.Windows.Forms.ToolStripButton btnFreeMemory; + private System.Windows.Forms.ToolStripButton btnSave; + private System.Windows.Forms.TabPage tabTileCutter; + private System.Windows.Forms.SplitContainer splitContainer3; + private System.Windows.Forms.Button btn_grid; + private System.Windows.Forms.Button btn_vCut; + private System.Windows.Forms.Button btn_load; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button btn_up; + private System.Windows.Forms.ComboBox comboBox_cellSize; + private System.Windows.Forms.Button btn_left; + private System.Windows.Forms.Button btn_down; + private System.Windows.Forms.Button btn_right; + private System.Windows.Forms.PictureBox pictureBox_Highlight; + private System.Windows.Forms.PictureBox pictureBox_Grid; + private System.Windows.Forms.PictureBox pictureBox_Image; + private System.Windows.Forms.OpenFileDialog loadImageDialog; + private System.Windows.Forms.SaveFileDialog SaveLibraryDialog; + private System.Windows.Forms.Button btnRefreshList; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; + private System.Windows.Forms.ContextMenuStrip contextMenuTileCutter; + private System.Windows.Forms.ToolStripMenuItem menuSelectAllCells; + private System.Windows.Forms.ToolStripMenuItem menuDeselectAllCells; + private System.Windows.Forms.ToolStripButton BtnUnDo; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator4; + private System.Windows.Forms.ToolStripButton BtnReDo; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator3; + private System.Windows.Forms.ToolStripButton BtnZoomIn; + private System.Windows.Forms.ToolStripButton BtnZoomOut; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator5; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator6; + private System.Windows.Forms.ToolStripButton BtnAbout; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator7; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator8; + private System.Windows.Forms.ToolStripButton toolStripButton1; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator9; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator10; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator12; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator13; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator14; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator15; + private System.Windows.Forms.TabPage tabHelp; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator17; + private System.Windows.Forms.ToolStripMenuItem menu_deleteSelectedFrontLayerCellData; + private System.Windows.Forms.ToolStripMenuItem menu_deleteSelectedMiddleLayerCellData; + private System.Windows.Forms.ToolStripMenuItem menu_deleteSelectedBackLayerCellData; + private System.Windows.Forms.ToolStripMenuItem menu_deleteSelectedFrontLimitCellData; + private System.Windows.Forms.ToolStripMenuItem menu_deleteSelectedBackLimitCellData; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator16; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator18; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator21; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator19; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator20; + private System.Windows.Forms.ToolStripMenuItem menu_deleteSelectedCellDataOnAll3Layers; + private System.Windows.Forms.ToolStripMenuItem setAnimationBrightnessDoorPropertiesToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem setCurrentCoordinatesFrontAnimationAttributesToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem setTheCurrentCoordinatesLightPropertyToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem setTheCurrentCoordinatesDoorPropertiesToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator22; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator23; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator24; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator26; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator25; + private System.Windows.Forms.ToolStripMenuItem viewToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem chkFront2; + private System.Windows.Forms.ToolStripMenuItem chkMidd2; + private System.Windows.Forms.ToolStripMenuItem chkBack2; + private System.Windows.Forms.ToolStripMenuItem chkShowCellInfo0; + private System.Windows.Forms.ToolStripMenuItem chkFrontTag2; + private System.Windows.Forms.ToolStripMenuItem chkBackMask2; + private System.Windows.Forms.ToolStripMenuItem chkFrontMask2; + private System.Windows.Forms.ToolStripMenuItem chkFrontAnimationTag2; + private System.Windows.Forms.ToolStripMenuItem chkMiddleAnimationTag2; + private System.Windows.Forms.ToolStripMenuItem chkLightTag2; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator30; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator31; + private System.Windows.Forms.ToolStripMenuItem chkMiddleTag2; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator27; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator29; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator28; + private System.Windows.Forms.ToolStripMenuItem chkDoorSign2; + private System.Windows.Forms.ToolStripMenuItem chkDoor2; + private System.Windows.Forms.ToolStripMenuItem chkShowCellInfo_1; + private System.Windows.Forms.ToolStripMenuItem chkFrontAnimationTag; + private System.Windows.Forms.ToolStripMenuItem chkShowCellInfo1; + private System.Windows.Forms.ToolStripMenuItem chkShowCellInfo_2; + private System.Windows.Forms.ToolStripMenuItem chkShowCellInfo2; + private System.Windows.Forms.ToolStripMenuItem chkDrawGridsBig; + private System.Windows.Forms.ToolStripMenuItem chkDrawGridsSmall; + private System.Windows.Forms.ToolStripMenuItem chkDrawGridsBig2; + private System.Windows.Forms.ToolStripMenuItem chkDrawGridsSmall2; + private System.Windows.Forms.ToolStripMenuItem chkDrawGridsLine; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.ToolStripMenuItem setCurrentCoordinatesMiddleAnimationAttributesToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem chkDrawGridsLine2; + private System.Windows.Forms.ToolStripMenuItem PlaceFrontLimitOnSelectedArea; + private System.Windows.Forms.ToolStripMenuItem PlaceBackLimitOnSelectedArea; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator32; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator33; + private System.Windows.Forms.ToolStripMenuItem InvertFrontMiddleToggle; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator34; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator36; + private System.Windows.Forms.ToolStripMenuItem setSelectedCoordinatesFrontAnimationAttributes; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator35; + private System.Windows.Forms.ToolStripMenuItem setSelectedAreaCellsMiddleAnimationAttributes; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator37; + private System.Windows.Forms.ToolStripMenuItem setSelectedAreaCellLightProperty; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator40; + private System.Windows.Forms.ToolStripDropDownButton toolStripDropDownButton1; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator38; + private System.Windows.Forms.ToolStripDropDownButton toolStripDropDownButton3; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator39; + private System.Windows.Forms.ToolStripDropDownButton toolStripDropDownButton4; + private System.Windows.Forms.ToolStripMenuItem deleteSelectedCellDataOnAll3LayersToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem deleteSelectedCellDataOnFrontLayerToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem deleteSelectedCellDataOnMiddleLayerToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem deleteSelectedCellDataOnBackLayerToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem placeBackLowWallLimitOnSelectedAreaToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem placeFrontHighWallLimitOnSelectedAreaToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem deleteBackLimitOnSelectedAreaToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem deleteFrontLimitOnSelectedAreaToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem invertSelectedAreaFrontMiddleLayersToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator42; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator41; + private System.Windows.Forms.ToolStripMenuItem showBackMoveLimitTagHighWallToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem showFrontMoveLimitTagHighWallToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator43; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator44; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator45; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator46; + private System.Windows.Forms.ToolStripMenuItem singleTileLimitPlaceBFDeleteCToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator47; + private System.Windows.Forms.ToolStripDropDownButton toolStripDropDownButton5; + private System.Windows.Forms.ToolStripMenuItem x2BigTileGridToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem bigTileGridToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem smTileGridToolStripMenuItem; + private System.Windows.Forms.ToolStripDropDownButton toolStripDropDownButton6; + private System.Windows.Forms.ToolStripMenuItem miniMapStandardMToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem bigMapToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem deletionsCanBeUnDoneButToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem xLargeMapToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem xXLargeMapCtrlAltMToolStripMenuItem; + private System.Windows.Forms.ToolStripDropDownButton toolStripDropDownButton7; + private System.Windows.Forms.ToolStripMenuItem setSelectedCoordinatesLightPropertyToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem setSelectedAreaLightPropertyToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem setSelectedAreaFishingLightPropertyToolStripMenuItem; + private System.Windows.Forms.ToolStripDropDownButton toolStripDropDownButton8; + private System.Windows.Forms.ToolStripMenuItem cellAnimationInfoPanelToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem showFrontAnimationTagToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem showMiddleAnimationTagToggleToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem setSelectedAreaFrontAnimAttributesToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem setSelectedAreaMiddleLAnimationToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator48; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator51; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator52; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator49; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator50; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator53; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator54; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator56; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator57; + private System.Windows.Forms.ToolStripMenuItem shortcutsForMouseClickSingleTileDeletingToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator55; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator58; + private System.Windows.Forms.SplitContainer splitContainer4; + private System.Windows.Forms.SplitContainer splitContainer5; + private System.Windows.Forms.Button OpenBtn; + private System.Windows.Forms.TextBox PathTxtBox; + private System.Windows.Forms.TreeView TreeBrowser; + } +} + diff --git a/MapEditor/Map Editor/Main.cs b/MapEditor/Map Editor/Main.cs new file mode 100644 index 0000000..05bbd46 --- /dev/null +++ b/MapEditor/Map Editor/Main.cs @@ -0,0 +1,6404 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Drawing.Imaging; +using System.IO; +using System.Runtime.InteropServices; +using System.Security; +using System.Threading; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Font = System.Drawing.Font; +using System.Linq; + +namespace Map_Editor +{ + public partial class Main : Form + { + public delegate void DelJump(int x, int y); + + public delegate void DelSetAnimationProperty(bool blend, byte frame, byte tick); + + public delegate void DelSetDoorProperty(bool door, byte index, byte offSet); + + public delegate void DelSetLightProperty(byte light); + + public delegate void DelSetMapSize(int w, int h); + + + + private const int CellWidth = 48; + private const int CellHeight = 32; + private const int Mir2BigTileBlock = 50; + private const int Mir3BigTileBlock = 30; + private const int smTileBlock = 60; + public static Font font = new Font("Tahoma", 10, FontStyle.Bold); + private static int zoomMIN; + private static readonly int zoomMAX = zoomMIN = 20; + + public static readonly Stopwatch Timer = Stopwatch.StartNew(); + public static readonly DateTime StartTime = DateTime.Now; + public static long Time, OldTime; + private static long _fpsTime; + private static int _fps; + public static int FPS; + public static long MoveTime; + private static readonly Vector2[] vector2S = new Vector2[5]; + private static readonly Vector2[] line = new Vector2[2]; + + private static readonly Random random = new Random(); + + private static int AutoTileRange; + private static int AutoTileChanges; + private readonly Editor _editor = new Editor(); + private readonly Dictionary _shandaMir2IndexList = new Dictionary(); + private readonly Dictionary _shandaMir3IndexList = new Dictionary(); + private readonly Dictionary _tilesIndexList = new Dictionary(); + private readonly Dictionary _wemadeMir2IndexList = new Dictionary(); + private readonly Dictionary _wemadeMir3IndexList = new Dictionary(); + private readonly List bigTilePoints = new List(); + private readonly CellInfoControl cellInfoControl = new CellInfoControl(); + private readonly CellInfoControl_1 cellInfoControl_1 = new CellInfoControl_1(); + private readonly CellInfoControl_2 cellInfoControl_2 = new CellInfoControl_2(); + private readonly int[] Mir2BigTilesPreviewIndex = {5, 15, 6, 20, 0, 21, 7, 17, 8}; + private readonly int[] Mir3BigTilesPreviewIndex1 = {10, 20, 11, 25, 0, 26, 12, 22, 13}; + private readonly int[] Mir3BigTilesPreviewIndex2 = {18, 22, 17, 26, 5, 27, 16, 20, 15}; + private readonly List smTilePoints = new List(); + private readonly int[] smTilesPreviewIndex = {39, 11, 15, 35, 0, 19, 31, 25, 23}; + public int AnimationCount; + private CellInfoData[] cellInfoDatas; + private int cellX, cellY; + private int drawY, drawX, libIndex, index; + private Graphics graphics; + + private bool Grasping; + private bool keyDown; + + private Layer layer = Layer.None; + + public CellInfo[,] M2CellInfo; + private MapReader map; + private string mapFileName; + private Point mapPoint; + + private int mapWidth, mapHeight; + public CellInfo[,] NewCellInfo; + private CellInfoData[] objectDatas; + + private int OffSetX; + private int OffSetY; + + private Point p1, p2; + private int selectImageIndex; + private MLibrary.MImage selectLibMImage; + private ListItem selectListItem; + private int selectTilesIndex = -1; + private CellInfoData[] unTemp, reTemp; + + private ListItem wemadeMir2ListItem; + + //TileCutter + private bool grid = true; + public static Point MPoint; + private Bitmap cellHighlight = new Bitmap(48, 32); + public int CellSizeX; + public int CellSizeY; + public int[,] SelectedCells; + private MLibrary _library; + //private MLibrary.MImage _selectedImage; + public Bitmap _mainImage; + private bool pictureBox_loaded = false; + + public string openFileName = ""; + + //Far (M2P) + [DllImport("user32.dll")] + private static extern int SendMessage(IntPtr hWnd, int msg, int wParam, int lParam); + + public Main() + { + InitializeComponent(); + + SetStyle(ControlStyles.AllPaintingInWmPaint, true); + SetStyle(ControlStyles.UserPaint, true); + SetStyle(ControlStyles.OptimizedDoubleBuffer, true); + + Application.Idle += Application_Idle; + + TreeBrowser.AfterSelect += (o, e) => TreeAfterSelect(); + + //Tilecutter + pictureBox_Grid.Parent = pictureBox_Image; + pictureBox_Highlight.Parent = pictureBox_Grid; + + //Far (M2P) Tighter Tile spacing in Libraries List View + + SendMessage(WemadeMir2LibListView.Handle, 4149, 0, 5242946); //80 x 66 + } + + private void Application_Idle(object sender, EventArgs e) + { + try + { + while (AppStillIdle) + { + UpdateTime(); + UpdateEnviroment(); + RenderEnviroment(); + } + } + catch (Exception) + { + } + } + + private void UpdateTime() + { + Time = Timer.ElapsedMilliseconds; + } + + private void UpdateEnviroment() + { + if (Time >= _fpsTime) + { + _fpsTime = Time + 1000; + FPS = _fps; + _fps = 0; + } + else + _fps++; + + if (Time >= MoveTime) + { + MoveTime += 100; + + AnimationCount++; + } + + Text = string.Format("FPS: {0}---Map:W {1}:H {2} ----W,S,A,D,--Suprcode--v.1.4--<{3}>", FPS, mapWidth, mapHeight, // M2P v1.4 released July 03 2022 + mapFileName); + } + + private void RenderEnviroment() + { + try + { + if (DXManager.DeviceLost) + { + DXManager.AttemptReset(); + Thread.Sleep(1); + return; + } + + if (M2CellInfo == null) + { + } + else + { + DXManager.Device.Clear(ClearFlags.Target, Color.White, 0, 0); + DXManager.Device.BeginScene(); + DXManager.Sprite.Begin(SpriteFlags.AlphaBlend); + DXManager.TextSprite.Begin(SpriteFlags.AlphaBlend); + + OffSetX = MapPanel.Width/(CellWidth*zoomMIN/zoomMAX); + OffSetY = MapPanel.Height/(CellHeight*zoomMIN/zoomMAX); + + + //back + DrawBack(chkBack.Checked); + //midd + DrawMidd(chkMidd.Checked); + //front + DrawFront(chkFront.Checked); + //Draw Select Object + DrawObject(objectDatas); + //Draw Select TextureImage + DrawSelectTextureImage(); + //Draw Limit + DrawLimit(); + //门标记 Translation: Open the door + DrawDoorTag(chkDoorSign.Checked); + //前景动画标记 Translation: Previous report + DrawFrontAnimationTag(chkFrontAnimationTag.Checked); + //背景动画标记 Translation: Background animated markers + DrawMiddleAnimationTag(chkMiddleAnimationTag.Checked); + //亮光标记 Translation: Highlight mark + DrawLightTag(chkLightTag.Checked); + //背景移动限制 Translation: Background movement restrictions + DrawBackLimit(chkBackMask.Checked); + //前景移动限制 Translation: Foreground movement restrictions + DrawFrontMask(chkFrontMask.Checked); + //前景标记 Translation: Foreground mark + DrawFrontTag(chkFrontTag.Checked); + //中间层标记 Translation: Middle layer markup + DrawMiddleTag(chkMiddleTag.Checked); + + DXManager.Sprite.End(); + DXManager.TextSprite.End(); + + //网格 Grid + //4800 条短线版本 画格子 - 4800 Short-line version + DrawGridsSmall(chkDrawGridsSmall.Checked); + + DrawGridsBig(chkDrawGridsBig.Checked); + + //1200 条长线版本 画长线,交叉,变成格子 - 1200 Long line version Draw long lines, cross them, and turn into grids + DrawGridsLine(chkDrawGridsLine.Checked); + //M2P - Code for DrawGrids2 now re-named DrawGridsLine + // (originally commented out @line ~684 in the original Xiyue edition, probably because it is more + // resource hungry (FPS dropping) than 'DrawGridsSmall/Big' that uses 'DrawCube' method) + + + //画选择的矩形 - Draw selected rectangle + GraspingRectangle(); + + //DXManager.Sprite.End(); + //DXManager.TextSprite.End(); + + DXManager.Device.EndScene(); + DXManager.Device.Present(); + } + } + catch (DeviceLostException) + { + } + catch (Exception) + { + DXManager.AttemptRecovery(); + } + } + + [DllImport("kernel32.dll", EntryPoint = "SetProcessWorkingSetSize", ExactSpelling = true, CharSet = + CharSet.Ansi, SetLastError = true)] + private static extern int SetProcessWorkingSetSize(IntPtr process, int minimumWorkingSetSize, + int maximumWorkingSetSize); + + public new void Dispose() + { + GC.Collect(); + GC.SuppressFinalize(this); + + if (Environment.OSVersion.Platform == PlatformID.Win32NT) + { + SetProcessWorkingSetSize(Process.GetCurrentProcess().Handle, -1, -1); + } + } + + public void SetMapSize(int w, int h) + { + mapWidth = w; + mapHeight = h; + graphics = Graphics.FromHwnd(MapPanel.Handle); + } + + private void Main_Load(object sender, EventArgs e) + { + Libraries.LoadGameLibraries(); + + ReadWemadeMir2LibToListBox(); + + ReadObjectsToListBox(); + + DXManager.Create(MapPanel); + + //TileCutter + comboBox_cellSize.SelectedIndex = 0; + gridUpdate(false); + + //loads embedded icons + System.Reflection.Assembly thisExe; + thisExe = System.Reflection.Assembly.GetExecutingAssembly(); + System.IO.Stream file = thisExe.GetManifestResourceStream("Map_Editor.Resources.Square.png"); + using (Graphics g = Graphics.FromImage(cellHighlight)) + { + g.DrawImage(Image.FromStream(file), new Point(0, 0)); + } + } + + + private void Draw(int libIndex, int index, int drawX, int drawY) + { + Libraries.MapLibs[libIndex].CheckImage(index); + var mi = Libraries.MapLibs[libIndex].Images[index]; + if (mi.Image == null || mi.ImageTexture == null) return; + int w = mi.Width; + int h = mi.Height; + DXManager.Sprite.Draw2D(mi.ImageTexture, Rectangle.Empty, new SizeF(w*zoomMIN/zoomMAX, h*zoomMIN/zoomMAX), new PointF(drawX, drawY), Color.White); + + //DXManager.Sprite.Draw2D(mi.ImageTexture, new Rectangle(Point.Empty, new Size(w * zoomMIN / zoomMAX, h * zoomMIN / zoomMAX)), new Rectangle(Point.Empty, new Size(w * zoomMIN / zoomMAX, h * zoomMIN / zoomMAX)), new Point(drawX, drawY), Color.White); + } + + public void DrawBlend(int libindex, int index, Point point, Color colour, bool offSet = false, float rate = 1f) + { + Libraries.MapLibs[libIndex].CheckImage(index); + var mi = Libraries.MapLibs[libIndex].Images[index]; + if (mi.Image == null || mi.ImageTexture == null) return; + int w = mi.Width; + int h = mi.Height; + + if (offSet) point.Offset(mi.X*zoomMIN/zoomMAX, mi.Y*zoomMIN/zoomMAX); + var oldBlend = DXManager.Blending; + DXManager.SetBlend(true, rate); + DXManager.Sprite.Draw2D(mi.ImageTexture, Rectangle.Empty, new SizeF(w*zoomMIN/zoomMAX, h*zoomMIN/zoomMAX), point, Color.White); + + //DXManager.Sprite.Draw2D(mi.ImageTexture, new Rectangle(Point.Empty, new Size(w * zoomMIN / zoomMAX, h * zoomMIN / zoomMAX)), new Rectangle(Point.Empty, new Size(w * zoomMIN / zoomMAX, h * zoomMIN / zoomMAX)), point, Color.White); + DXManager.SetBlend(oldBlend); + } + + private string GetLibName(int index) + { + if (index < 0 || index >= Libraries.ListItems.Length) + { + return string.Empty; + } + try + { + return Libraries.ListItems[index].Text; + } + catch (Exception) + { + return string.Empty; + } + } + + private void MapPanel_MouseMove(object sender, MouseEventArgs e) + { + // + if (M2CellInfo == null) return; + var p = MapPanel.PointToClient(MousePosition); + cellX = p.X/(CellWidth*zoomMIN/zoomMAX) + mapPoint.X; + cellY = p.Y/(CellHeight*zoomMIN/zoomMAX) + mapPoint.Y; + + // + if (cellX >= mapWidth || cellY >= mapHeight || cellX < 0 || cellY < 0) + { + return; + } + + // + ShowCellInfo(chkShowCellInfo.Checked); + // + // + ShowCellInfo_1(chkShowCellInfo_1.Checked); + // + // + ShowCellInfo_2(chkShowCellInfo_2.Checked); + // + + if (keyDown) + { + MapPanel_MouseClick(sender, e); + } + // + if (M2CellInfo != null) + { + switch (layer) + { + case Layer.GraspingMir2Front: + if (Grasping) + { + if (p1.IsEmpty) + { + return; + } + p2 = new Point(cellX, cellY); + } + break; + case Layer.GraspingInvertMir3FrontMiddle: + if (Grasping) + { + if (p1.IsEmpty) + { + return; + } + p2 = new Point(cellX, cellY); + } + break; + case Layer.GraspingFrontMiddleBack: + if (Grasping) + { + if (p1.IsEmpty) + { + return; + } + p2 = new Point(cellX, cellY); + } + break; + + } + } + } + + private void DrawLimit() + { + var drawX = (cellX - mapPoint.X)*(CellWidth*zoomMIN/zoomMAX); + var drawY = (cellY - mapPoint.Y)*(CellHeight*zoomMIN/zoomMAX); + switch (layer) + { + case Layer.BackLimit: + Draw(1, 58, drawX, drawY); + break; + case Layer.FrontLimit: + Draw(1, 59, drawX, drawY); + break; + case Layer.BackFrontLimit: + Draw(1, 58, drawX, drawY); + Draw(1, 59, drawX, drawY); + break; + } + } + + private void DrawSelectTextureImage() + { + if (selectLibMImage == null) return; + if (selectLibMImage.ImageTexture == null) return; + if (selectListItem == null) return; + if (layer == Layer.MiddleImage || layer == Layer.FrontImage) + { + var libIndex = selectListItem.Value; + var index = selectImageIndex; + var drawX = (cellX - mapPoint.X)*(CellWidth*zoomMIN/zoomMAX); + var drawY = (cellY - mapPoint.Y)*(CellHeight*zoomMIN/zoomMAX); + var s = Libraries.MapLibs[libIndex].GetSize(index); + if ((s.Width != CellWidth || s.Height != CellHeight) && + (s.Width != CellWidth*2 || s.Height != CellHeight*2)) + { + drawY = (cellY - mapPoint.Y + 1)*(CellHeight*zoomMIN/zoomMAX); + Draw(libIndex, index, drawX, drawY - s.Height*zoomMIN/zoomMAX); + } + else + { + drawY = (cellY - mapPoint.Y)*(CellHeight*zoomMIN/zoomMAX); + Draw(libIndex, index, drawX, drawY); + } + } + else if (layer == Layer.BackImage) + { + var temp = CheckPointIsEven(new Point(cellX, cellY)); + cellX = temp.X; + cellY = temp.Y; + var libIndex = selectListItem.Value; + var index = selectImageIndex; + var drawX = (cellX - mapPoint.X)*(CellWidth*zoomMIN/zoomMAX); + var drawY = (cellY - mapPoint.Y)*(CellHeight*zoomMIN/zoomMAX); + var s = Libraries.MapLibs[libIndex].GetSize(index); + if ((s.Width != CellWidth || s.Height != CellHeight) && + (s.Width != CellWidth*2 || s.Height != CellHeight*2)) + { + drawY = (cellY - mapPoint.Y + 1)*(CellHeight*zoomMIN/zoomMAX); + Draw(libIndex, index, drawX, drawY - s.Height*zoomMIN/zoomMAX); + } + else + { + drawY = (cellY - mapPoint.Y)*(CellHeight*zoomMIN/zoomMAX); + Draw(libIndex, index, drawX, drawY); + } + } + } + + private void DrawObject(CellInfoData[] datas) + { + if (datas == null) return; + if (layer != Layer.PlaceObjects) return; + + + for (var i = 0; i < datas.Length; i++) + { + if (datas[i].X%2 != 0) continue; + if (datas[i].Y%2 != 0) continue; + if (datas[i].X + cellX >= mapWidth) continue; + if (datas[i].Y + cellY >= mapWidth) continue; + + drawX = (datas[i].X + cellX - mapPoint.X)*(CellWidth*zoomMIN/zoomMAX); + drawY = (datas[i].Y + cellY - mapPoint.Y)*(CellHeight*zoomMIN/zoomMAX); + index = (datas[i].CellInfo.BackImage & 0x1FFFFFFF) - 1; + libIndex = datas[i].CellInfo.BackIndex; + if (libIndex < 0 || libIndex >= Libraries.MapLibs.Length) continue; + if (index < 0 || index >= Libraries.MapLibs[libIndex].Images.Count) continue; + Draw(libIndex, index, drawX, drawY); + } + + + for (var i = 0; i < datas.Length; i++) + { + byte animation; + bool blend; + if (datas[i].X + cellX >= mapWidth) continue; + if (datas[i].Y + cellY >= mapWidth) continue; + + drawX = (datas[i].X + cellX - mapPoint.X)*(CellWidth*zoomMIN/zoomMAX); + index = datas[i].CellInfo.MiddleImage - 1; + libIndex = datas[i].CellInfo.MiddleIndex; + if (libIndex < 0 || libIndex >= Libraries.MapLibs.Length) continue; + if (index < 0 || index >= Libraries.MapLibs[libIndex].Images.Count) continue; + + animation = datas[i].CellInfo.MiddleAnimationFrame; + blend = false; + if ((animation > 0) && (animation < 255)) + { + if ((animation & 0x0f) > 0) + { + blend = true; + animation &= 0x0f; + } + if (animation > 0) + { + var animationTick = datas[i].CellInfo.MiddleAnimationTick; + index += AnimationCount%(animation + animation*animationTick)/(1 + animationTick); + } + } + + var s = Libraries.MapLibs[libIndex].GetSize(index); + if ((s.Width != CellWidth || s.Height != CellHeight) && + (s.Width != CellWidth*2 || s.Height != CellHeight*2)) + { + drawY = (datas[i].Y + cellY - mapPoint.Y + 1)*(CellHeight*zoomMIN/zoomMAX); + Draw(libIndex, index, drawX, drawY - s.Height*zoomMIN/zoomMAX); + } + else + { + drawY = (datas[i].Y + cellY - mapPoint.Y)*(CellHeight*zoomMIN/zoomMAX); + Draw(libIndex, index, drawX, drawY); + } + if ((datas[i].CellInfo.MiddleImage & 0x7FFF) - 1 >= 0) + { + drawY = (datas[i].Y + cellY - mapPoint.Y)*(CellHeight*zoomMIN/zoomMAX); + Draw(1, 56, drawX, drawY); + } + } + + for (var i = 0; i < datas.Length; i++) + { + if (datas[i].X + cellX >= mapWidth) continue; + if (datas[i].Y + cellY >= mapWidth) continue; + + drawX = (datas[i].X + cellX - mapPoint.X)*(CellWidth*zoomMIN/zoomMAX); + drawY = (datas[i].Y + cellY - mapPoint.Y)*(CellHeight*zoomMIN/zoomMAX); + index = (datas[i].CellInfo.FrontImage & 0x7FFF) - 1; + libIndex = datas[i].CellInfo.FrontIndex; + if (libIndex < 0 || libIndex >= Libraries.MapLibs.Length) continue; + if (index < 0 || index >= Libraries.MapLibs[libIndex].Images.Count) continue; + var s = Libraries.MapLibs[libIndex].GetSize(index); + byte animation; + bool blend; + animation = datas[i].CellInfo.FrontAnimationFrame; + if ((animation & 0x80) > 0) + { + blend = true; + animation &= 0x7F; + } + else + { + blend = false; + } + + if (animation > 0) + { + var animationTick = datas[i].CellInfo.FrontAnimationTick; + index += AnimationCount%(animation + animation*animationTick)/(1 + animationTick); + } + + //不是 48*32 或96*64 的地砖 是大物体 Floor tiles that are not 48*32 or 96*64 are large objects + if ((s.Width != CellWidth || s.Height != CellHeight) && + (s.Width != CellWidth*2 || s.Height != CellHeight*2)) + { + drawY = (datas[i].Y + cellY - mapPoint.Y + 1)*(CellHeight*zoomMIN/zoomMAX); + //如果有动画 If there is an animation + if (animation > 0) + { + //如果需要混合 If you need to mix + if (blend) + { + //新盛大地图 Xinshengda Map + if ((libIndex > 99) & (libIndex < 199)) + { + DrawBlend(libIndex, index, new Point(drawX, drawY - 3*CellHeight*zoomMIN/zoomMAX), + Color.White, true); + } + //老地图灯柱 Old map lamppost index >= 2723 && index <= 2732 + else + { + DrawBlend(libIndex, index, new Point(drawX, drawY - s.Height*zoomMIN/zoomMAX), + Color.White, index >= 2723 && index <= 2732); + } + } + //不需要混合 No need to mix (M2P - Blend?) + else + { + Draw(libIndex, index, drawX, drawY - s.Height*zoomMIN/zoomMAX); + } + } + //如果没动画 If there is no animation + else + { + Draw(libIndex, index, drawX, drawY - s.Height*zoomMIN/zoomMAX); + } + } + //是 48*32 或96*64 的地砖 Is 48*32 or 96*64 floor tiles + else + { + drawY = (datas[i].Y + cellY - mapPoint.Y)*(CellHeight*zoomMIN/zoomMAX); + Draw(libIndex, index, drawX, drawY); + } + + + if ((datas[i].CellInfo.FrontImage & 0x7FFF) - 1 >= 0) + { + drawY = (datas[i].Y + cellY - mapPoint.Y)*(CellHeight*zoomMIN/zoomMAX); + Draw(1, 56, drawX, drawY); + } + } + } + + private void DrawGridsSmall(bool blGrids) //This displays SmTile Grid (Ctrl-G) + { + if (blGrids) + { + if (FPS < 8) return; //M2P - Changed original 25 FPS setting to 8, allows more zooming out steps before grids begins to cycle ON/OFF + for (var y = mapPoint.Y; y <= mapPoint.Y + OffSetY + 2; y++) + { + if (y >= mapHeight || y < 0) continue; + drawY = (y - mapPoint.Y) * (CellHeight * zoomMIN / zoomMAX); + for (var x = mapPoint.X; x <= mapPoint.X + OffSetX + 2; x++) + { + if (x >= mapWidth || x < 0) continue; + drawX = (x - mapPoint.X) * (CellWidth * zoomMIN / zoomMAX); + DrawCube(drawX, drawY); + //Draw(99, 1, drawX, drawY); + } + } + } + } + + private void DrawGridsBig(bool blGrids) //M2P This displays BigTile Grid (2x2 SmTiles Grid) (Shortcut 'G') + { + if (blGrids) + { + if (FPS < 8) return; + for (var y = mapPoint.Y; y <= mapPoint.Y + OffSetY + 2; y++) + { + if (y >= mapHeight || y < 0) continue; + drawY = (y - mapPoint.Y) * (CellHeight * zoomMIN / zoomMAX) * (2); //M2P add multiply by 2 + for (var x = mapPoint.X; x <= mapPoint.X + OffSetX + 2; x++) + { + if (x >= mapWidth || x < 0) continue; + drawX = (x - mapPoint.X) * (CellWidth * zoomMIN / zoomMAX) * (2); //M2P add multiply by 2 + DrawCube(drawX, drawY); + //Draw(99, 1, drawX, drawY); + } + } + } + } + + private void DrawGridsLine(bool blGrids) //M2P This displays 2x2 Big Tile Grid (4x4 SmTiles Grid) (Alt-G) - Perhaps could be adapted to draw crossed lines at 45 degree angle to use for object alignment + { + if (blGrids) + { + if (FPS < 8) return; + for (var x = 0; x <= OffSetX; x++) + { + if (x >= mapHeight || x < 0) continue; + for (var y = 0; y <= OffSetY; y++) + { + if (y >= mapWidth || y < 0) continue; + DrawHorizontalLine(x, y); + DrawVerticalLine(x, y); + } + } + } + } + + private void DrawCube(int x, int y) + { + vector2S[0] = new Vector2(x, y); + vector2S[1] = new Vector2(CellWidth*zoomMIN/zoomMAX, y); + vector2S[2] = new Vector2(CellWidth*zoomMIN/zoomMAX, CellHeight*zoomMIN/zoomMAX); + vector2S[3] = new Vector2(x, CellHeight*zoomMIN/zoomMAX); + vector2S[4] = new Vector2(x, y); + DXManager.Line.Width = 0.5F; + DXManager.Line.Draw(vector2S, Color.Magenta); + } + + private void DrawHorizontalLine(int x, int y) //M2P add multiply by 4 + { + line[0] = new Vector2(x*CellWidth*zoomMIN/zoomMAX, y*CellHeight*zoomMIN/zoomMAX*4); + line[1] = new Vector2(MapPanel.Width, y*CellHeight*zoomMIN/zoomMAX*4); + + DXManager.Line.Width = 0.5F; + DXManager.Line.Draw(line, Color.Cyan); + } + + private void DrawVerticalLine(int x, int y) + { + line[0] = new Vector2(x*CellWidth*zoomMIN/zoomMAX*4, y*CellHeight*zoomMIN/zoomMAX); + line[1] = new Vector2(x*CellWidth*zoomMIN/zoomMAX*4, MapPanel.Height); + + DXManager.Line.Width = 0.5F; + DXManager.Line.Draw(line, Color.Cyan); + } + + private void DrawCube(Point p1, Point p2) + { + //缩放时需要优先计算缩放系数加上括号 When zooming, you need to first calculate the zoom factor plus parentheses + var vector2S = new Vector2[5]; + vector2S[0] = new Vector2((p1.X - mapPoint.X)*(CellWidth*zoomMIN/zoomMAX), + (p1.Y - mapPoint.Y)*(CellHeight*zoomMIN/zoomMAX)); + vector2S[1] = new Vector2((p2.X - mapPoint.X + 1)*(CellWidth*zoomMIN/zoomMAX), + (p1.Y - mapPoint.Y)*(CellHeight*zoomMIN/zoomMAX)); + vector2S[2] = new Vector2((p2.X - mapPoint.X + 1)*(CellWidth*zoomMIN/zoomMAX), + (p2.Y - mapPoint.Y + 1)*(CellHeight*zoomMIN/zoomMAX)); + vector2S[3] = new Vector2((p1.X - mapPoint.X)*(CellWidth*zoomMIN/zoomMAX), + (p2.Y - mapPoint.Y + 1)*(CellHeight*zoomMIN/zoomMAX)); + vector2S[4] = new Vector2((p1.X - mapPoint.X)*(CellWidth*zoomMIN/zoomMAX), + (p1.Y - mapPoint.Y)*(CellHeight*zoomMIN/zoomMAX)); + DXManager.Line.Width = 2F; + DXManager.Line.Draw(vector2S, Color.Red); + } + + private void GraspingRectangle() + { + if (p1.IsEmpty || p2.IsEmpty) return; + if ((layer == Layer.GraspingMir2Front) || (layer == Layer.GraspingInvertMir3FrontMiddle) || (layer == Layer.GraspingFrontMiddleBack)) + { + DrawCube(p1, p2); + } + } + + private void DrawFrontMask(bool blFrontMask) + { + if (blFrontMask) + { + for (var y = mapPoint.Y - 1; y <= mapPoint.Y + OffSetY + 35; y++) + { + if (y >= mapHeight || y < 0) continue; + drawY = (y - mapPoint.Y)*(CellHeight*zoomMIN/zoomMAX); + for (var x = mapPoint.X; x <= mapPoint.X + OffSetX + 35; x++) + { + if (x >= mapWidth || x < 0) continue; + drawX = (x - mapPoint.X)*(CellWidth*zoomMIN/zoomMAX); + if (Convert.ToBoolean(M2CellInfo[x, y].FrontImage & 0x8000)) + { + Draw(1, 1999, drawX, drawY); + } + } + } + } + } + + private void DrawBackLimit(bool blBackMask) + { + if (blBackMask) + { + for (var y = mapPoint.Y - 1; y <= mapPoint.Y + OffSetY + 35; y++) + { + if (y >= mapHeight || y < 0) continue; + drawY = (y - mapPoint.Y)*(CellHeight*zoomMIN/zoomMAX); + for (var x = mapPoint.X; x <= mapPoint.X + OffSetX + 35; x++) + { + if (x >= mapWidth || x < 0) continue; + drawX = (x - mapPoint.X)*(CellWidth*zoomMIN/zoomMAX); + if (Convert.ToBoolean(M2CellInfo[x, y].BackImage & 0x20000000)) + { + Draw(1, 2000, drawX, drawY); + } + } + } + } + } + + private void DrawFront(bool blFront) + { + if (blFront) + { + byte animation; + bool blend; + + for (var y = mapPoint.Y - 1; y <= mapPoint.Y + OffSetY + 35; y++) + { + if (y >= mapHeight || y < 0) continue; + //drawY = (y + 1) * (cellHeight * zoomMIN / zoomMAX); + for (var x = mapPoint.X; x <= mapPoint.X + OffSetX + 35; x++) + { + if (x >= mapWidth || x < 0) continue; + drawX = (x - mapPoint.X)*(CellWidth*zoomMIN/zoomMAX); + index = (M2CellInfo[x, y].FrontImage & 0x7FFF) - 1; + libIndex = M2CellInfo[x, y].FrontIndex; + if (libIndex < 0 || libIndex >= Libraries.MapLibs.Length) continue; + if (index < 0 || index >= Libraries.MapLibs[libIndex].Images.Count) continue; + + animation = M2CellInfo[x, y].FrontAnimationFrame; + if ((animation & 0x80) > 0) + { + blend = true; + animation &= 0x7F; + } + else + { + blend = false; + } + + if (animation > 0) + { + var animationTick = M2CellInfo[x, y].FrontAnimationTick; + index += AnimationCount%(animation + animation*animationTick)/(1 + animationTick); + } + + var doorOffset = M2CellInfo[x, y].DoorOffset; + var s = Libraries.MapLibs[libIndex].GetSize(index); + //不是 48*32 或96*64 的地砖 是大物体 Translation: It is not a 48*32 or 96*64 floor tile, it is a large object + if ((s.Width != CellWidth || s.Height != CellHeight) && + (s.Width != CellWidth*2 || s.Height != CellHeight*2)) + { + drawY = (y - mapPoint.Y + 1)*(CellHeight*zoomMIN/zoomMAX); + //如果有动画 Translation: If there is animation + if (animation > 0) + { + //如果需要混合 Translation: Mix if needed + if (blend) + { + //新盛大地图 Translation: New Shanda Map + if ((libIndex > 99) & (libIndex < 199)) + { + DrawBlend(libIndex, index, + new Point(drawX, drawY - 3*CellHeight*zoomMIN/zoomMAX), Color.White, true); + } + //老地图灯柱 index >= 2723 && index <= 2732 Translation: Old map lamppost + else + { + DrawBlend(libIndex, index, new Point(drawX, drawY - s.Height*zoomMIN/zoomMAX), + Color.White, index >= 2723 && index <= 2732); + } + } + //不需要混合 Translation: No mixing required + else + { + Draw(libIndex, index, drawX, drawY - s.Height*zoomMIN/zoomMAX); + } + } + //如果没动画 Translation: If there is no animation + else + { + Draw(libIndex, index, drawX, drawY - s.Height*zoomMIN/zoomMAX); + } + } + //是 48*32 或96*64 的地砖 Translation: Is 48*32 or 96*64 floor tiles + else + { + drawY = (y - mapPoint.Y)*(CellHeight*zoomMIN/zoomMAX); + Draw(libIndex, index, drawX, drawY); + } + //显示门打开 Translation: Show door open + if (chkDoor.Checked && (doorOffset > 0)) + { + drawY = (y - mapPoint.Y + 1)*(CellHeight*zoomMIN/zoomMAX); + Draw(libIndex, index + doorOffset, drawX, drawY - s.Height*zoomMIN/zoomMAX); + } + } + } + } + } + + private void DrawFrontTag(bool blFront) + { + if (blFront) + { + for (var y = mapPoint.Y - 1; y <= mapPoint.Y + OffSetY + 35; y++) + { + if (y >= mapHeight || y < 0) continue; + drawY = (y - mapPoint.Y)*(CellHeight*zoomMIN/zoomMAX); + for (var x = mapPoint.X; x <= mapPoint.X + OffSetX + 35; x++) + { + if (x >= mapWidth || x < 0) continue; + drawX = (x - mapPoint.X)*(CellWidth*zoomMIN/zoomMAX); + if ((M2CellInfo[x, y].FrontImage & 0x7FFF) - 1 >= 0) + { + Draw(1, 56, drawX, drawY); + } + } + } + } + } + + private void DrawMiddleTag(bool blMiddle) + { + if (blMiddle) + { + for (var y = mapPoint.Y - 1; y <= mapPoint.Y + OffSetY + 35; y++) + { + if (y >= mapHeight || y < 0) continue; + drawY = (y - mapPoint.Y)*(CellHeight*zoomMIN/zoomMAX); + for (var x = mapPoint.X; x <= mapPoint.X + OffSetX + 35; x++) + { + if (x >= mapWidth || x < 0) continue; + drawX = (x - mapPoint.X)*(CellWidth*zoomMIN/zoomMAX); + if ((M2CellInfo[x, y].MiddleImage & 0x7FFF) - 1 >= 0) + { + Draw(1, 116, drawX, drawY); + } + } + } + } + } + + private void DrawMidd(bool blMidd) + { + if (blMidd) + { + byte animation; + bool blend; + + for (var y = mapPoint.Y - 1; y <= mapPoint.Y + OffSetY + 35; y++) + { + if (y >= mapHeight || y < 0) continue; + for (var x = mapPoint.X - 1; x <= mapPoint.X + OffSetX + 35; x++) + { + if (x >= mapWidth || x < 0) continue; + drawX = (x - mapPoint.X)*(CellWidth*zoomMIN/zoomMAX); + index = M2CellInfo[x, y].MiddleImage - 1; + libIndex = M2CellInfo[x, y].MiddleIndex; + if (libIndex < 0 || libIndex >= Libraries.MapLibs.Length) continue; + if (index < 0 || index >= Libraries.MapLibs[libIndex].Images.Count) continue; + + animation = M2CellInfo[x, y].MiddleAnimationFrame; + blend = false; + if ((animation > 0) && (animation < 255)) + { + if ((animation & 0x0f) > 0) + { + blend = true; + animation &= 0x0f; + } + if (animation > 0) + { + var animationTick = M2CellInfo[x, y].MiddleAnimationTick; + index += AnimationCount%(animation + animation*animationTick)/(1 + animationTick); + } + } + + var s = Libraries.MapLibs[libIndex].GetSize(index); + if ((s.Width != CellWidth || s.Height != CellHeight) && + (s.Width != CellWidth*2 || s.Height != CellHeight*2)) + { + drawY = (y - mapPoint.Y + 1)*(CellHeight*zoomMIN/zoomMAX); + Draw(libIndex, index, drawX, drawY - s.Height*zoomMIN/zoomMAX); + } + else + { + drawY = (y - mapPoint.Y)*(CellHeight*zoomMIN/zoomMAX); + Draw(libIndex, index, drawX, drawY); + } + } + } + } + } + + private void DrawBack(bool blBack) + { + if (blBack) + { + for (var y = mapPoint.Y - 1; y <= mapPoint.Y + OffSetY; y++) + { + if (y%2 != 0) continue; + if (y >= mapHeight) continue; + drawY = (y - mapPoint.Y)*(CellHeight*zoomMIN/zoomMAX); + for (var x = mapPoint.X - 1; x <= mapPoint.X + OffSetX; x++) + { + if (x%2 != 0) continue; + if (x >= mapWidth) continue; + drawX = (x - mapPoint.X)*(CellWidth*zoomMIN/zoomMAX); + index = (M2CellInfo[x, y].BackImage & 0x1FFFFFFF) - 1; + libIndex = M2CellInfo[x, y].BackIndex; + if (libIndex < 0 || libIndex >= Libraries.MapLibs.Length) continue; + if (index < 0 || index >= Libraries.MapLibs[libIndex].Images.Count) continue; + Draw(libIndex, index, drawX, drawY); + } + } + } + } + + private void ReadWemadeMir2LibToListBox() + { + for (var i = 0; i < 100; i++) + { + if (Libraries.ListItems[i] != null) + { + WemadeMir2LibListBox.Items.Add(Libraries.ListItems[i]); + } + } + } + + private void Clear() + { + _wemadeMir2IndexList.Clear(); + WemadeMir2ImageList.Images.Clear(); + TilesImageList.Images.Clear(); + _tilesIndexList.Clear(); + } + + private void ClearImage() + { + for (var i = 0; i < Libraries.MapLibs.Length; i++) + { + for (var j = 0; j < Libraries.MapLibs[i].Images.Count; j++) + { + Libraries.MapLibs[i].Images[j] = null; + } + } + } + + public void EnlargeZoom() + { + graphics.Clear(Color.Black); + zoomMIN += 1; + if (zoomMIN >= zoomMAX) + { + zoomMIN = zoomMAX; + } + } + + public void NarrowZoom() + { + graphics.Clear(Color.Black); + zoomMIN -= 1; + if (zoomMIN <= 0) + { + zoomMIN = 1; + } + } + + private void btnDispose_Click(object sender, EventArgs e) + { + Dispose(); + } + + private void chkBack_Click(object sender, EventArgs e) + { + chkBack.Checked = !chkBack.Checked; + } + + private void chkMidd_Click(object sender, EventArgs e) + { + chkMidd.Checked = !chkMidd.Checked; + } + + private void chkFront_Click(object sender, EventArgs e) + { + chkFront.Checked = !chkFront.Checked; + } + + private void chkBackMask_Click(object sender, EventArgs e) + { + chkBackMask.Checked = !chkBackMask.Checked; + } + + private void chkFrontMask_Click(object sender, EventArgs e) + { + chkFrontMask.Checked = !chkFrontMask.Checked; + } + + private void btnToImage_Click(object sender, EventArgs e) + { +/* MessageBox.Show("Too lazy to write the ........."); + var bit = new Bitmap(Width, Height); //实例化一个和窗体一样大的bitmap Instantiate a bitmap as big as the window + var g = Graphics.FromImage(bit); + g.CompositingQuality = CompositingQuality.HighQuality; //质量设为最高 Quality is set to highest + g.CopyFromScreen(Left, Top, 0, 0, new Size(Width, Height)); //保存整个窗体为图片 Save the entire form as a picture + //g.CopyFromScreen(panel游戏区 .PointToScreen(Point.Empty), Point.Empty, panel游戏区.Size);//只保存某个控件(这里是panel游戏区)Only save a certain control (here is the panel game area) + bit.Save("weiboTemp.png"); //默认保存格式为PNG,保存成jpg格式质量不是很好 The default save format is PNG, and the quality of saving in jpg format is not very good +*/ } + + private void chkDoor_Click(object sender, EventArgs e) + { + chkDoor.Checked = !chkDoor.Checked; + } + + private void DrawDoorTag(bool blDoorTag) + { + if (!blDoorTag) + { + return; + } + var szText = ""; + int DoorIndex; + byte DoorOffset; + bool EntityDoor; + var font = new Font("Comic Sans MS", 10, FontStyle.Bold); + var dxFont = new Microsoft.DirectX.Direct3D.Font(DXManager.Device, font); + for (var y = mapPoint.Y; y <= mapPoint.Y + OffSetY; y++) + { + if (y >= mapHeight || y < 0) continue; + drawY = (y - mapPoint.Y)*(CellHeight*zoomMIN/zoomMAX); + for (var x = mapPoint.X; x <= mapPoint.X + OffSetX + 35; x++) + { + if (x >= mapWidth || x < 0) continue; + drawX = (x - mapPoint.X)*(CellWidth*zoomMIN/zoomMAX); + DoorIndex = M2CellInfo[x, y].DoorIndex & 0x7F; + DoorOffset = M2CellInfo[x, y].DoorOffset; + EntityDoor = Convert.ToBoolean(M2CellInfo[x, y].DoorIndex & 0x80); + + if (DoorIndex > 0) + { + if (EntityDoor) + { + szText = string.Format("Dx{0}/{1}", DoorIndex, DoorOffset); + } + else + { + szText = string.Format("D{0}/{1}", DoorIndex, DoorOffset); + } + dxFont.DrawText(DXManager.TextSprite, szText, drawX, drawY, Color.AliceBlue); + } + } + } + font.Dispose(); + dxFont.Dispose(); + } + + private void chkDoorSign_Click(object sender, EventArgs e) + { + chkDoorSign.Checked = !chkDoorSign.Checked; + } + + private void DrawFrontAnimationTag(bool blFrontAnimationTag) + { + if (!blFrontAnimationTag) + { + return; + } + var szText = ""; + int FrontAnimationFrame; + byte FrontAnimationTick; + bool CoreAnimation; + var font = new Font("Comic Sans MS", 10, FontStyle.Bold); + var dxFont = new Microsoft.DirectX.Direct3D.Font(DXManager.Device, font); + for (var y = mapPoint.Y; y <= mapPoint.Y + OffSetY; y++) + { + if (y >= mapHeight || y < 0) continue; + drawY = (y - mapPoint.Y)*(CellHeight*zoomMIN/zoomMAX); + for (var x = mapPoint.X; x <= mapPoint.X + OffSetX + 35; x++) + { + if (x >= mapWidth || x < 0) continue; + drawX = (x - mapPoint.X)*(CellWidth*zoomMIN/zoomMAX); + if (M2CellInfo[x, y].FrontAnimationFrame == 255) + { + continue; + } + FrontAnimationFrame = M2CellInfo[x, y].FrontAnimationFrame & 0x7F; + FrontAnimationTick = M2CellInfo[x, y].FrontAnimationTick; + CoreAnimation = Convert.ToBoolean(M2CellInfo[x, y].FrontAnimationFrame & 0x80); + + if (FrontAnimationFrame > 0) + { + if (CoreAnimation) + { + szText = string.Format("FAb{0}/{1}", FrontAnimationFrame, FrontAnimationTick); + } + else + { + szText = string.Format("FA{0}/{1}", FrontAnimationFrame, FrontAnimationTick); + } + dxFont.DrawText(DXManager.TextSprite, szText, drawX, drawY, Color.Linen); + } + } + } + font.Dispose(); + dxFont.Dispose(); + } + + private void DrawMiddleAnimationTag(bool blMiddleAnimationTag) + { + if (!blMiddleAnimationTag) + { + return; + } + var szText = ""; + int MiddleAnimationFrame; + byte MiddleAnimationTick; + bool BlendAnimation; + var font = new Font("Comic Sans MS", 10, FontStyle.Bold); + var dxFont = new Microsoft.DirectX.Direct3D.Font(DXManager.Device, font); + for (var y = mapPoint.Y; y <= mapPoint.Y + OffSetY; y++) + { + if (y >= mapHeight || y < 0) continue; + drawY = (y - mapPoint.Y)*(CellHeight*zoomMIN/zoomMAX); + for (var x = mapPoint.X; x <= mapPoint.X + OffSetX + 35; x++) + { + if (x >= mapWidth || x < 0) continue; + drawX = (x - mapPoint.X)*(CellWidth*zoomMIN/zoomMAX); + if (M2CellInfo[x, y].MiddleAnimationFrame == 255) + { + continue; + } + MiddleAnimationFrame = M2CellInfo[x, y].MiddleAnimationFrame & 0x0F; + MiddleAnimationTick = M2CellInfo[x, y].MiddleAnimationTick; + BlendAnimation = Convert.ToBoolean(M2CellInfo[x, y].MiddleAnimationFrame & 0x08); + + if (MiddleAnimationFrame > 0) + { + if (BlendAnimation) + { + szText = string.Format("MAb{0}/{1}", MiddleAnimationFrame, MiddleAnimationTick); + } + else + { + szText = string.Format("MA{0}/{1}", MiddleAnimationFrame, MiddleAnimationTick); + } + dxFont.DrawText(DXManager.TextSprite, szText, drawX, drawY, Color.NavajoWhite); + } + } + } + font.Dispose(); + dxFont.Dispose(); + } + + private void chkFrontAnimationTag_Click(object sender, EventArgs e) + { + chkFrontAnimationTag.Checked = !chkFrontAnimationTag.Checked; + } + + private void chkMiddleAnimationTag_Click(object sender, EventArgs e) + { + chkMiddleAnimationTag.Checked = !chkMiddleAnimationTag.Checked; + } + + + private void DrawLightTag(bool blLightTag) + { + if (!blLightTag) + { + return; + } + var szText = ""; + int Light; + var font = new Font("Comic Sans MS", 10, FontStyle.Bold); + var dxFont = new Microsoft.DirectX.Direct3D.Font(DXManager.Device, font); + for (var y = mapPoint.Y - 1; y <= mapPoint.Y + OffSetY + 35; y++) + { + if (y >= mapHeight || y < 0) continue; + drawY = (y - mapPoint.Y)*(CellHeight*zoomMIN/zoomMAX); + for (var x = mapPoint.X; x <= mapPoint.X + OffSetX + 35; x++) + { + if (x >= mapWidth || x < 0) continue; + drawX = (x - mapPoint.X)*(CellWidth*zoomMIN/zoomMAX); + Light = M2CellInfo[x, y].Light; + + if (Light > 0) + { + Draw(1, 57, drawX, drawY); + szText = string.Format("L{0}", Light); + dxFont.DrawText(DXManager.TextSprite, szText, drawX + 32*zoomMIN/zoomMAX, drawY, Color.AliceBlue); + } + } + } + font.Dispose(); + dxFont.Dispose(); + } + + private void chkLightTag_Click(object sender, EventArgs e) + { + chkLightTag.Checked = !chkLightTag.Checked; + } + + private void Save() + { + if (M2CellInfo == null) + { + } + else + { + var saveFileDialog = new SaveFileDialog(); + saveFileDialog.Filter = "Custom Map (*.Map)|*.Map"; + saveFileDialog.FileName = "Custom Map"; + if (saveFileDialog.ShowDialog() == DialogResult.OK) + { + var fileStream = new FileStream(saveFileDialog.FileName, FileMode.Create); + var binaryWriter = new BinaryWriter(fileStream); + short ver = 1; + char[] tag = {'C', '#'}; + binaryWriter.Write(ver); + binaryWriter.Write(tag); + + binaryWriter.Write(Convert.ToInt16(mapWidth)); + binaryWriter.Write(Convert.ToInt16(mapHeight)); + for (var x = 0; x < mapWidth; x++) + { + for (var y = 0; y < mapHeight; y++) + { + binaryWriter.Write(M2CellInfo[x, y].BackIndex); + binaryWriter.Write(M2CellInfo[x, y].BackImage); + binaryWriter.Write(M2CellInfo[x, y].MiddleIndex); + binaryWriter.Write(M2CellInfo[x, y].MiddleImage); + binaryWriter.Write(M2CellInfo[x, y].FrontIndex); + binaryWriter.Write(M2CellInfo[x, y].FrontImage); + binaryWriter.Write(M2CellInfo[x, y].DoorIndex); + binaryWriter.Write(M2CellInfo[x, y].DoorOffset); + binaryWriter.Write(M2CellInfo[x, y].FrontAnimationFrame); + binaryWriter.Write(M2CellInfo[x, y].FrontAnimationTick); + binaryWriter.Write(M2CellInfo[x, y].MiddleAnimationFrame); + binaryWriter.Write(M2CellInfo[x, y].MiddleAnimationTick); + binaryWriter.Write(M2CellInfo[x, y].TileAnimationImage); + binaryWriter.Write(M2CellInfo[x, y].TileAnimationOffset); + binaryWriter.Write(M2CellInfo[x, y].TileAnimationFrames); + binaryWriter.Write(M2CellInfo[x, y].Light); + } + } + binaryWriter.Flush(); + binaryWriter.Dispose(); + MessageBox.Show("Map Saved"); + } + } + } + + private void InvertMir3Layer() + { + if (M2CellInfo != null) + { + var saveFileDialog = new SaveFileDialog(); + saveFileDialog.Filter = "Custom Map (*.Mir3)|*.Mir3"; + saveFileDialog.FileName = "Invert Mir3 Layer"; + if (saveFileDialog.ShowDialog() == DialogResult.OK) + { + var fileStream = new FileStream(saveFileDialog.FileName, FileMode.Create); + var binaryWriter = new BinaryWriter(fileStream); + short ver = 1; + char[] tag = {'C', '#'}; + string str; + binaryWriter.Write(ver); + binaryWriter.Write(tag); + + binaryWriter.Write(Convert.ToInt16(mapWidth)); + binaryWriter.Write(Convert.ToInt16(mapHeight)); + for (var x = 0; x < mapWidth; x++) + { + for (var y = 0; y < mapHeight; y++) + { + binaryWriter.Write(M2CellInfo[x, y].BackIndex); + binaryWriter.Write(M2CellInfo[x, y].BackImage); + + if ((M2CellInfo[x, y].MiddleImage != 0) && ((M2CellInfo[x, y].FrontImage & 0x7FFF) == 0)) //M2P if MiddleImage exists & FrontImage does not exist + { + str = GetLibName(M2CellInfo[x, y].MiddleIndex); + if (!(str.IndexOf("SmTiles", StringComparison.Ordinal) > -1)) + { + if ((M2CellInfo[x, y].MiddleAnimationFrame != 0) && + (M2CellInfo[x, y].MiddleAnimationFrame != 255) && + (M2CellInfo[x, y].FrontAnimationFrame == 0)) + { + M2CellInfo[x, y].FrontAnimationFrame = + (byte) (M2CellInfo[x, y].MiddleAnimationFrame & 0x0F); + M2CellInfo[x, y].FrontAnimationTick = M2CellInfo[x, y].MiddleAnimationTick; + M2CellInfo[x, y].MiddleAnimationFrame = 0; + M2CellInfo[x, y].MiddleAnimationTick = 0; + } + M2CellInfo[x, y].FrontImage = M2CellInfo[x, y].MiddleImage; + M2CellInfo[x, y].FrontIndex = M2CellInfo[x, y].MiddleIndex; + M2CellInfo[x, y].MiddleImage = 0; + M2CellInfo[x, y].MiddleIndex = 0; + } + } + else if ((M2CellInfo[x, y].MiddleImage != 0) && ((M2CellInfo[x, y].FrontImage & 0x7FFF) != 0)) //M2P if MiddleImage exists & FrontImage also exists + { + str = GetLibName(M2CellInfo[x, y].MiddleIndex); + if (!(str.IndexOf("SmTiles", StringComparison.Ordinal) > -1)) + { + if ((M2CellInfo[x, y].MiddleAnimationFrame == 255) || + (M2CellInfo[x, y].MiddleAnimationFrame == 0)) + { + if (M2CellInfo[x, y].FrontAnimationFrame == 0) + { + var temp = M2CellInfo[x, y].MiddleImage; + M2CellInfo[x, y].MiddleImage = + (short) (M2CellInfo[x, y].FrontImage & 0x7FFF); + M2CellInfo[x, y].FrontImage = temp; + temp = M2CellInfo[x, y].MiddleIndex; + M2CellInfo[x, y].MiddleIndex = M2CellInfo[x, y].FrontIndex; + M2CellInfo[x, y].FrontIndex = temp; + } + } + } + } + + + binaryWriter.Write(M2CellInfo[x, y].MiddleIndex); + binaryWriter.Write(M2CellInfo[x, y].MiddleImage); + binaryWriter.Write(M2CellInfo[x, y].FrontIndex); + binaryWriter.Write(M2CellInfo[x, y].FrontImage); + binaryWriter.Write(M2CellInfo[x, y].DoorIndex); + binaryWriter.Write(M2CellInfo[x, y].DoorOffset); + binaryWriter.Write(M2CellInfo[x, y].FrontAnimationFrame); + binaryWriter.Write(M2CellInfo[x, y].FrontAnimationTick); + binaryWriter.Write(M2CellInfo[x, y].MiddleAnimationFrame); + binaryWriter.Write(M2CellInfo[x, y].MiddleAnimationTick); + binaryWriter.Write(M2CellInfo[x, y].TileAnimationImage); + binaryWriter.Write(M2CellInfo[x, y].TileAnimationOffset); + binaryWriter.Write(M2CellInfo[x, y].TileAnimationFrames); + binaryWriter.Write(M2CellInfo[x, y].Light); + } + } + binaryWriter.Flush(); + binaryWriter.Dispose(); + fileStream.Dispose(); + MessageBox.Show("Map Saved"); + } + } + } + + private void WemadeMir2LibListView_RetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e) + { + int index; + + if (_wemadeMir2IndexList.TryGetValue(e.ItemIndex, out index)) + { + e.Item = new ListViewItem {ImageIndex = index, Text = e.ItemIndex.ToString()}; + return; + } + + _wemadeMir2IndexList.Add(e.ItemIndex, WemadeMir2ImageList.Images.Count); + Libraries.MapLibs[wemadeMir2ListItem.Value].CheckImage(e.ItemIndex); + WemadeMir2ImageList.Images.Add(Libraries.MapLibs[wemadeMir2ListItem.Value].GetPreview(e.ItemIndex)); + e.Item = new ListViewItem {ImageIndex = index, Text = e.ItemIndex.ToString()}; + Libraries.MapLibs[wemadeMir2ListItem.Value].Images[e.ItemIndex] = null; + } + + private void WemadeMir2LibListBox_SelectedIndexChanged(object sender, EventArgs e) + { + Clear(); + wemadeMir2ListItem = (ListItem) WemadeMir2LibListBox.SelectedItem; + selectListItem = wemadeMir2ListItem; + selectListItem.Version = (byte) MirVerSion.WemadeMir2; + WemadeMir2LibListView.VirtualListSize = Libraries.MapLibs[wemadeMir2ListItem.Value].Images.Count; + TileslistView.VirtualListSize = Libraries.MapLibs[wemadeMir2ListItem.Value].Images.Count/Mir2BigTileBlock; + } + + private void cmbEditorLayer_SelectedIndexChanged(object sender, EventArgs e) + { + switch (cmbEditorLayer.SelectedIndex) + { + case 0: + layer = Layer.None; + break; + case 2: + layer = Layer.FrontImage; + break; + case 3: + layer = Layer.MiddleImage; + break; + case 4: + layer = Layer.BackImage; + break; + case 6: + layer = Layer.FrontLimit; + break; + case 7: + layer = Layer.BackLimit; + break; + case 8: + layer = Layer.BackFrontLimit; + break; + case 10: + layer = Layer.GraspingMir2Front; + break; + case 11: + layer = Layer.PlaceObjects; + break; + case 12: + layer = Layer.GraspingInvertMir3FrontMiddle; + break; + case 13: + layer = Layer.GraspingFrontMiddleBack; + break; + case 15: + layer = Layer.ClearFront; + break; + case 16: + layer = Layer.ClearMidd; + break; + case 17: + layer = Layer.ClearBack; + break; + case 18: + layer = Layer.ClearAll; + break; + case 20: + layer = Layer.ClearFrontLimit; + break; + case 21: + layer = Layer.ClearBackLimit; + break; + case 22: + layer = Layer.ClearBackFrontLimit; + break; + case 24: + layer = Layer.BrushMir2BigTiles; + break; + case 25: + layer = Layer.BrushSmTiles; + break; + case 26: + layer = Layer.BrushMir3BigTiles; + break; + } + } + + private void WemadeMir2LibListView_SelectedIndexChanged(object sender, EventArgs e) + { + selectListItem = wemadeMir2ListItem; + //在此处设断点,发现点击不同的Item后,此事件居然执行了2次 //第一次是取消当前Item选中状态,导致整个ListView的SelectedIndices变为0 Translation: Set a breakpoint here and find that after clicking on different Items, this event is actually executed twice //The first time is to cancel the current Item selection state, causing the SelectedIndices of the entire ListView to become 0 + //第二次才将新选中的Item设置为选中状态,SelectedIndices变为1 Translation: The newly selected Item is set to the selected state for the second time, and SelectedIndices becomes 1. + //如果不加listview.SelectedIndices.Count>0判断,将导致获取listview.Items[]索引超界的异常 Translation: If you do not add listview.SelectedIndices.Count>0 to determine, it will result in an out-of-bounds exception in obtaining listview.Items[] index. + if (WemadeMir2LibListView.SelectedIndices.Count > 0) + { + selectLibMImage = + Libraries.MapLibs[wemadeMir2ListItem.Value].GetMImage(WemadeMir2LibListView.SelectedIndices[0]); + if (selectLibMImage != null) + { + selectImageIndex = WemadeMir2LibListView.SelectedIndices[0]; + + picWemdeMir2.Image = selectLibMImage.Image; + LabWemadeMir2Width.Text = "Width : " + selectLibMImage.Width; + LabWemadeMir2Height.Text = "Height : " + selectLibMImage.Height; + labeWemadeMir2OffSetX.Text = "OffSetX : " + selectLibMImage.X; + labWemadeMir2OffSetY.Text = "OffSetY : " + selectLibMImage.Y; + Libraries.MapLibs[wemadeMir2ListItem.Value].Images[WemadeMir2LibListView.SelectedIndices[0]] = null; + } + } + } + + private bool CheckImageSizeIsBigTile(int libIndex, int index) + { + var s = Libraries.MapLibs[libIndex].GetSize(index); + if ((s.Width != 2*CellWidth) && (s.Height != 2*CellHeight)) + { + return false; + } + return true; + } + + private Point CheckPointIsEven(Point point) + { + if ((point.X%2 == 0) && (point.Y%2 == 0)) + { + return point; + } + if (point.X%2 != 0) + { + point.X = point.X - 1; + } + if (point.Y%2 != 0) + { + point.Y = point.Y - 1; + } + return point; + } + + private void MapPanel_MouseClick(object sender, MouseEventArgs e) + { + Point[] points; + Point temp; + if (M2CellInfo == null) return; + switch (layer) + { + case Layer.BackImage: + if (selectListItem == null) return; + if (CheckImageSizeIsBigTile(selectListItem.Value, selectImageIndex)) + { + temp = CheckPointIsEven(new Point(cellX, cellY)); + cellX = temp.X; + cellY = temp.Y; + points = new[] {new Point(cellX, cellY)}; + AddCellInfoPoints(points); + M2CellInfo[cellX, cellY].BackIndex = Convert.ToInt16(selectListItem.Value); + M2CellInfo[cellX, cellY].BackImage = selectImageIndex + 1; + } + break; + case Layer.MiddleImage: + if (selectListItem == null) return; + points = new[] {new Point(cellX, cellY)}; + AddCellInfoPoints(points); + M2CellInfo[cellX, cellY].MiddleIndex = Convert.ToInt16(selectListItem.Value); + M2CellInfo[cellX, cellY].MiddleImage = Convert.ToInt16(selectImageIndex + 1); + + break; + case Layer.FrontImage: + if (selectListItem == null) return; + points = new[] {new Point(cellX, cellY)}; + AddCellInfoPoints(points); + M2CellInfo[cellX, cellY].FrontIndex = Convert.ToInt16(selectListItem.Value); + M2CellInfo[cellX, cellY].FrontImage = Convert.ToInt16(selectImageIndex + 1); + break; + case Layer.BackLimit: + points = new[] {new Point(cellX, cellY)}; + AddCellInfoPoints(points); + SetBackLimit(); + break; + case Layer.FrontLimit: + points = new[] {new Point(cellX, cellY)}; + AddCellInfoPoints(points); + SetFrontLimit(); + break; + case Layer.BackFrontLimit: + points = new[] {new Point(cellX, cellY)}; + AddCellInfoPoints(points); + SetBackLimit(); + SetFrontLimit(); + break; + case Layer.PlaceObjects: + points = GetObjectDatasPoints(objectDatas); + if (AddCellInfoPoints(points) && (objectDatas != null)) + { + ModifyM2CellInfo(objectDatas); + } + break; + case Layer.ClearAll: + points = new[] {new Point(cellX, cellY)}; + AddCellInfoPoints(points); + ClearAll(); + break; + case Layer.ClearBack: + points = new[] {new Point(cellX, cellY)}; + AddCellInfoPoints(points); + ClearBack(); + break; + case Layer.ClearMidd: + points = new[] {new Point(cellX, cellY)}; + AddCellInfoPoints(points); + ClearMidd(); + break; + case Layer.ClearFront: + points = new[] {new Point(cellX, cellY)}; + AddCellInfoPoints(points); + ClearFront(); + break; + case Layer.ClearBackFrontLimit: + points = new[] {new Point(cellX, cellY)}; + AddCellInfoPoints(points); + ClearBackLimit(); + ClearFrontLimit(); + break; + case Layer.ClearBackLimit: + points = new[] {new Point(cellX, cellY)}; + AddCellInfoPoints(points); + ClearBackLimit(); + break; + case Layer.ClearFrontLimit: + points = new[] {new Point(cellX, cellY)}; + AddCellInfoPoints(points); + ClearFrontLimit(); + break; + case Layer.BrushMir2BigTiles: + temp = CheckPointIsEven(new Point(cellX, cellY)); + cellX = temp.X; + cellY = temp.Y; + CreateMir2BigTiles(); + AddCellInfoPoints(bigTilePoints.ToArray()); + break; + case Layer.BrushSmTiles: + CreateSmTiles(); + AddCellInfoPoints(smTilePoints.ToArray()); + break; + case Layer.BrushMir3BigTiles: + temp = CheckPointIsEven(new Point(cellX, cellY)); + cellX = temp.X; + cellY = temp.Y; + CreateMir3BigTiles(); + AddCellInfoPoints(bigTilePoints.ToArray()); + break; + } + } + + private Point[] GetObjectDatasPoints(CellInfoData[] datas) + { + if (datas == null) return null; + var list = new List(); + for (var i = 0; i < datas.Length; i++) + { + list.Add(new Point(datas[i].X + cellX, datas[i].Y + cellY)); + } + return list.ToArray(); + } + + private void ModifyM2CellInfo(CellInfoData[] datas) + { + for (var i = 0; i < objectDatas.Length; i++) + { + if ((datas[i].CellInfo.BackImage & 0x20000000) != 0) + { + if (((datas[i].CellInfo.BackImage & 0x1FFFF) - 1) == -1 || datas[i].CellInfo.BackIndex == -1) + { + M2CellInfo[cellX + datas[i].X, cellY + datas[i].Y].BackImage |= 0x20000000; + + } + else + { + M2CellInfo[cellX + datas[i].X, cellY + datas[i].Y].BackImage = datas[i].CellInfo.BackImage; + M2CellInfo[cellX + datas[i].X, cellY + datas[i].Y].BackIndex = datas[i].CellInfo.BackIndex; + } + } + else + { + if (((datas[i].CellInfo.BackImage & 0x1FFFF) - 1) == -1 || datas[i].CellInfo.BackIndex == -1) + { + //do nothing + } + else + { + M2CellInfo[cellX + datas[i].X, cellY + datas[i].Y].BackImage = datas[i].CellInfo.BackImage; + M2CellInfo[cellX + datas[i].X, cellY + datas[i].Y].BackIndex = datas[i].CellInfo.BackIndex; + } + } + + //middle + if (objectDatas[i].CellInfo.MiddleImage != 0) + { + if ((M2CellInfo[cellX + datas[i].X, cellY + datas[i].Y].MiddleAnimationFrame & 0x7F) != 0) + { + M2CellInfo[cellX + datas[i].X, cellY + datas[i].Y].MiddleAnimationFrame = 0; + M2CellInfo[cellX + datas[i].X, cellY + datas[i].Y].MiddleAnimationTick = 0; + } + M2CellInfo[cellX + datas[i].X, cellY + datas[i].Y].MiddleImage = datas[i].CellInfo.MiddleImage; + M2CellInfo[cellX + datas[i].X, cellY + datas[i].Y].MiddleIndex = datas[i].CellInfo.MiddleIndex; + } + if (objectDatas[i].CellInfo.MiddleIndex != 0) + { + M2CellInfo[cellX + datas[i].X, cellY + datas[i].Y].MiddleIndex = datas[i].CellInfo.MiddleIndex; + } + //front + if (objectDatas[i].CellInfo.FrontImage != 0) + { + if ((M2CellInfo[cellX + datas[i].X, cellY + datas[i].Y].FrontAnimationFrame & 0x7F) != 0) + { + M2CellInfo[cellX + datas[i].X, cellY + datas[i].Y].FrontAnimationFrame = 0; + M2CellInfo[cellX + datas[i].X, cellY + datas[i].Y].FrontAnimationTick = 0; + } + M2CellInfo[cellX + datas[i].X, cellY + datas[i].Y].FrontImage = datas[i].CellInfo.FrontImage; + M2CellInfo[cellX + datas[i].X, cellY + datas[i].Y].FrontIndex = datas[i].CellInfo.FrontIndex; + } + if (objectDatas[i].CellInfo.FrontIndex != 0) + { + M2CellInfo[cellX + datas[i].X, cellY + datas[i].Y].FrontIndex = datas[i].CellInfo.FrontIndex; + } + //Door + if (datas[i].CellInfo.DoorIndex != 0) + { + M2CellInfo[cellX + datas[i].X, cellY + datas[i].Y].DoorIndex = datas[i].CellInfo.DoorIndex; + } + if (datas[i].CellInfo.DoorOffset != 0) + { + M2CellInfo[cellX + datas[i].X, cellY + datas[i].Y].DoorOffset = datas[i].CellInfo.DoorOffset; + } + //Animation + if (datas[i].CellInfo.MiddleAnimationFrame != 0) + { + M2CellInfo[cellX + datas[i].X, cellY + datas[i].Y].MiddleAnimationFrame = datas[i].CellInfo.MiddleAnimationFrame; + } + if (datas[i].CellInfo.MiddleAnimationTick != 0) + { + M2CellInfo[cellX + datas[i].X, cellY + datas[i].Y].MiddleAnimationTick = datas[i].CellInfo.MiddleAnimationTick; + } + if (datas[i].CellInfo.FrontAnimationFrame != 0) + { + M2CellInfo[cellX + datas[i].X, cellY + datas[i].Y].FrontAnimationFrame = datas[i].CellInfo.FrontAnimationFrame; + } + if (datas[i].CellInfo.FrontAnimationTick != 0) + { + M2CellInfo[cellX + datas[i].X, cellY + datas[i].Y].FrontAnimationTick = datas[i].CellInfo.FrontAnimationTick; + } + //light + if (datas[i].CellInfo.Light != 0) + { + M2CellInfo[cellX + datas[i].X, cellY + datas[i].Y].Light = datas[i].CellInfo.Light; + } + } + } + + private bool CheckCellInfoIsZero(CellInfo cellInfo) + { + if ((cellInfo.BackImage == 0) && + (cellInfo.BackIndex == 0) && + (cellInfo.MiddleImage == 0) && + (cellInfo.MiddleIndex == 0) && + (cellInfo.FrontImage == 0) && + (cellInfo.FrontIndex == 0) && + (cellInfo.DoorIndex == 0) && + (cellInfo.DoorOffset == 0) && + (cellInfo.FrontAnimationFrame == 0) && + (cellInfo.FrontAnimationTick == 0) && + (cellInfo.MiddleAnimationFrame == 0) && + (cellInfo.MiddleAnimationTick == 0) && + (cellInfo.TileAnimationImage == 0) && + (cellInfo.TileAnimationOffset == 0) && + (cellInfo.TileAnimationFrames == 0) && + (cellInfo.Light == 0)) + { + return true; + } + return false; + } + + private void chkDrawGridsSmall_Click(object sender, EventArgs e) + { + chkDrawGridsSmall.Checked = !chkDrawGridsSmall.Checked; + } + private void chkDrawGridsBig_Click(object sender, EventArgs e) + { + chkDrawGridsBig.Checked = !chkDrawGridsBig.Checked; + } + private void chkDrawGridsLine_Click(object sender, EventArgs e) + { + chkDrawGridsLine.Checked = !chkDrawGridsLine.Checked; + } + + private bool AddCellInfoPoints(Point[] points) + { + if (points == null) return false; + if (M2CellInfo != null) + { + cellInfoDatas = new CellInfoData[points.Length]; + for (var i = 0; i < cellInfoDatas.Length; i++) + { + if (points[i].X >= mapWidth || points[i].Y >= mapHeight || points[i].X < 0 || points[i].Y < 0) + { + MessageBox.Show("Object Outside Map Boundary!"); + return false; + } + cellInfoDatas[i] = new CellInfoData(points[i].X, points[i].Y, + M2CellInfo[points[i].X, points[i].Y]); + } + _editor.UnDo = cellInfoDatas; + return true; + } + return false; + } + + private bool AddCellInfoPoints(CellInfoData[] datas) + { + if (datas.Length <= 0) + { + return false; + } + _editor.UnDo = datas; + return true; + } + + private void UnDo() + { + unTemp = _editor.UnDo; + if (unTemp == null) return; + reTemp = new CellInfoData[unTemp.Length]; + for (var i = 0; i < unTemp.Length; i++) + { + var x = unTemp[i].X; + var y = unTemp[i].Y; + reTemp[i] = new CellInfoData(unTemp[i].X, unTemp[i].Y, M2CellInfo[unTemp[i].X, unTemp[i].Y]); + M2CellInfo[x, y] = unTemp[i].CellInfo; + } + _editor.ReDo = reTemp; + } + + private void ReDo() + { + reTemp = _editor.ReDo; + if (reTemp == null) return; + unTemp = new CellInfoData[reTemp.Length]; + for (var i = 0; i < reTemp.Length; i++) + { + var x = reTemp[i].X; + var y = reTemp[i].Y; + unTemp[i] = new CellInfoData(reTemp[i].X, reTemp[i].Y, M2CellInfo[reTemp[i].X, reTemp[i].Y]); + M2CellInfo[x, y] = reTemp[i].CellInfo; + } + _editor.UnDo = unTemp; + } + + private void SaveObjectsFile() + { + var saveFileDialog = new SaveFileDialog(); + saveFileDialog.Filter = "Object (*.X)|*.X"; + saveFileDialog.FileName = "Object"; + if (saveFileDialog.ShowDialog() == DialogResult.OK) + { + var file = new FileStream(saveFileDialog.FileName, FileMode.Create, FileAccess.ReadWrite); + var binaryWriter = new BinaryWriter(file); + var flag = false; + int tempX = 0, tempY = 0; + var list = new List(); + for (var y = p1.Y; y <= p2.Y; y++) + { + for (var x = p1.X; x <= p2.X; x++) + { + if (!flag) + { + if (CheckCellInfoIsZero(M2CellInfo[x, y])) + { + } + else + { + flag = true; + tempX = x; + tempY = y; + list.Add(new CellInfoData(x - tempX, y - tempY, M2CellInfo[x, y])); + } + } + else + { + if (CheckCellInfoIsZero(M2CellInfo[x, y])) + { + } + else + { + list.Add(new CellInfoData(x - tempX, y - tempY, M2CellInfo[x, y])); + } + } + } + } + + binaryWriter.Write(list.Count); + for (var i = 0; i < list.Count; i++) + { + binaryWriter.Write(list[i].X); + binaryWriter.Write(list[i].Y); + binaryWriter.Write(list[i].CellInfo.BackIndex); + binaryWriter.Write(list[i].CellInfo.BackImage); + binaryWriter.Write(list[i].CellInfo.MiddleIndex); + binaryWriter.Write(list[i].CellInfo.MiddleImage); + binaryWriter.Write(list[i].CellInfo.FrontIndex); + binaryWriter.Write(list[i].CellInfo.FrontImage); + binaryWriter.Write(list[i].CellInfo.DoorIndex); + binaryWriter.Write(list[i].CellInfo.DoorOffset); + binaryWriter.Write(list[i].CellInfo.FrontAnimationFrame); + binaryWriter.Write(list[i].CellInfo.FrontAnimationTick); + binaryWriter.Write(list[i].CellInfo.MiddleAnimationFrame); + binaryWriter.Write(list[i].CellInfo.MiddleAnimationTick); + binaryWriter.Write(list[i].CellInfo.TileAnimationImage); + binaryWriter.Write(list[i].CellInfo.TileAnimationOffset); + binaryWriter.Write(list[i].CellInfo.TileAnimationFrames); + binaryWriter.Write(list[i].CellInfo.Light); + } + binaryWriter.Flush(); + binaryWriter.Dispose(); + file.Dispose(); + } + } + + private void MapPanel_MouseDown(object sender, MouseEventArgs e) + { + //stops the p1 and p2 values resetting when right clicking to get the menu + if (e.Button == System.Windows.Forms.MouseButtons.Right) + { + return; + } + + + + if (M2CellInfo != null) + { + switch (layer) + { + case Layer.GraspingMir2Front: + p1 = new Point(cellX, cellY); + p2 = p1; //sets p2 to the first cell clicked so we don't have to move mouse to update the area selected + //p2 = Point.Empty; + Grasping = true; + break; + case Layer.GraspingInvertMir3FrontMiddle: + p1 = new Point(cellX, cellY); + p2 = p1; + //p2 = Point.Empty; + Grasping = true; + break; + case Layer.GraspingFrontMiddleBack: + p1 = new Point(cellX, cellY); + p2 = p1; + //p2 = Point.Empty; + Grasping = true; + break; + } + } + } + + private void MapPanel_MouseUp(object sender, MouseEventArgs e) + { + if (M2CellInfo != null) + { + switch (layer) + { + case Layer.GraspingMir2Front: + GraspingData(); + Grasping = false; + break; + case Layer.GraspingInvertMir3FrontMiddle: + GraspingData(); + Grasping = false; + break; + case Layer.GraspingFrontMiddleBack: + GraspingData(); + Grasping = false; + break; + } + } + } + + private void GraspingData() + { + if (p1.IsEmpty || p2.IsEmpty) return; + if ((layer == Layer.GraspingMir2Front) || (layer == Layer.GraspingInvertMir3FrontMiddle) || (layer == Layer.GraspingFrontMiddleBack)) + { + if (M2CellInfo != null) + { + var w = Math.Abs(p2.X - p1.X + 1); + var h = Math.Abs(p2.Y - p1.Y + 1); + objectDatas = new CellInfoData[w*h]; + var z = 0; + for (int x = p1.X, i = 0; x <= p2.X; x++, i++) + { + for (int y = p1.Y, j = 0; y <= p2.Y; y++, j++) + { + objectDatas[z] = new CellInfoData(); + objectDatas[z].CellInfo = new CellInfo(); + objectDatas[z].X = x - p1.X - 1; + objectDatas[z].Y = y - p2.Y - 1; + objectDatas[z].CellInfo.BackImage = M2CellInfo[x, y].BackImage & 0x20000000; //M2P enables BackLimit inclusion in the Grasping of F or F&M (FrontLimit is included regardless) + objectDatas[z].CellInfo.BackIndex = 0; //M2P disables inclusion of BackLayer in the Grasping of F or F&M + if (layer == Layer.GraspingMir2Front) + { + objectDatas[z].CellInfo.MiddleImage = 0; + objectDatas[z].CellInfo.MiddleIndex = 0; + objectDatas[z].CellInfo.MiddleAnimationFrame = 0; + objectDatas[z].CellInfo.MiddleAnimationTick = 0; + } + else if (layer == Layer.GraspingInvertMir3FrontMiddle) + { + objectDatas[z].CellInfo.MiddleImage = M2CellInfo[x, y].MiddleImage; + objectDatas[z].CellInfo.MiddleIndex = M2CellInfo[x, y].MiddleIndex; + objectDatas[z].CellInfo.MiddleAnimationFrame = M2CellInfo[x, y].MiddleAnimationFrame; + objectDatas[z].CellInfo.MiddleAnimationTick = M2CellInfo[x, y].MiddleAnimationTick; + } + else if (layer == Layer.GraspingFrontMiddleBack) + { + objectDatas[z].CellInfo.MiddleImage = M2CellInfo[x, y].MiddleImage; + objectDatas[z].CellInfo.MiddleIndex = M2CellInfo[x, y].MiddleIndex; + objectDatas[z].CellInfo.MiddleAnimationFrame = M2CellInfo[x, y].MiddleAnimationFrame; + objectDatas[z].CellInfo.MiddleAnimationTick = M2CellInfo[x, y].MiddleAnimationTick; + objectDatas[z].CellInfo.BackImage = M2CellInfo[x, y].BackImage; //M2P this enables BackLayer inclusion in the Grasping of all three layers - FrontMiddleBack + objectDatas[z].CellInfo.BackIndex = M2CellInfo[x, y].BackIndex; + } + objectDatas[z].CellInfo.FrontImage = M2CellInfo[x, y].FrontImage; + objectDatas[z].CellInfo.FrontIndex = M2CellInfo[x, y].FrontIndex; + objectDatas[z].CellInfo.FrontAnimationFrame = M2CellInfo[x, y].FrontAnimationFrame; + objectDatas[z].CellInfo.FrontAnimationTick = M2CellInfo[x, y].FrontAnimationTick; + objectDatas[z].CellInfo.DoorIndex = M2CellInfo[x, y].DoorIndex; + objectDatas[z].CellInfo.DoorOffset = M2CellInfo[x, y].DoorOffset; + objectDatas[z].CellInfo.TileAnimationImage = M2CellInfo[x, y].TileAnimationImage; + objectDatas[z].CellInfo.TileAnimationFrames = M2CellInfo[x, y].TileAnimationFrames; + objectDatas[z].CellInfo.TileAnimationOffset = M2CellInfo[x, y].TileAnimationOffset; + objectDatas[z].CellInfo.Light = M2CellInfo[x, y].Light; + objectDatas[z].CellInfo.FishingCell = M2CellInfo[x, y].FishingCell; + z++; + } + } + } + } + } + + private void ReadObjectsToListBox() + { + if (!Directory.Exists(Libraries.ObjectsPath)) + { + Directory.CreateDirectory(Libraries.ObjectsPath); + } + + var files = (from x in Directory.EnumerateFileSystemEntries(Libraries.ObjectsPath, "*.X", SearchOption.AllDirectories) + orderby x + select x).ToArray(); + + Array.Sort(files, new AlphanumComparatorFast()); + + foreach (string file in files) + { + ObjectslistBox.Items.Add(file.Replace(Libraries.ObjectsPath, "").Replace(".X", "")); + } + } + + private CellInfoData[] ReadObjectsFile(string objectFile) + { + byte[] Bytes; + var offset = 0; + var count = 0; + CellInfoData[] objectDatas = null; + if (File.Exists(objectFile)) + { + Bytes = File.ReadAllBytes(objectFile); + count = BitConverter.ToInt32(Bytes, offset); + offset += 4; + objectDatas = new CellInfoData[count]; + for (var i = 0; i < count; i++) + { + objectDatas[i] = new CellInfoData(); + objectDatas[i].CellInfo = new CellInfo(); + objectDatas[i].X = BitConverter.ToInt32(Bytes, offset); + offset += 4; + objectDatas[i].Y = BitConverter.ToInt32(Bytes, offset); + offset += 4; + objectDatas[i].CellInfo.BackIndex = BitConverter.ToInt16(Bytes, offset); + offset += 2; + objectDatas[i].CellInfo.BackImage = BitConverter.ToInt32(Bytes, offset); + offset += 4; + objectDatas[i].CellInfo.MiddleIndex = BitConverter.ToInt16(Bytes, offset); + offset += 2; + objectDatas[i].CellInfo.MiddleImage = BitConverter.ToInt16(Bytes, offset); + offset += 2; + objectDatas[i].CellInfo.FrontIndex = BitConverter.ToInt16(Bytes, offset); + offset += 2; + objectDatas[i].CellInfo.FrontImage = BitConverter.ToInt16(Bytes, offset); + offset += 2; + objectDatas[i].CellInfo.DoorIndex = Bytes[offset++]; + objectDatas[i].CellInfo.DoorOffset = Bytes[offset++]; + objectDatas[i].CellInfo.FrontAnimationFrame = Bytes[offset++]; + objectDatas[i].CellInfo.FrontAnimationTick = Bytes[offset++]; + objectDatas[i].CellInfo.MiddleAnimationFrame = Bytes[offset++]; + objectDatas[i].CellInfo.MiddleAnimationTick = Bytes[offset++]; + objectDatas[i].CellInfo.TileAnimationImage = BitConverter.ToInt16(Bytes, offset); + offset += 2; + objectDatas[i].CellInfo.TileAnimationOffset = BitConverter.ToInt16(Bytes, offset); + offset += 2; + objectDatas[i].CellInfo.TileAnimationFrames = Bytes[offset++]; + objectDatas[i].CellInfo.Light = Bytes[offset++]; + + if (objectDatas[i].CellInfo.Light == 100 || objectDatas[i].CellInfo.Light == 101) + objectDatas[i].CellInfo.FishingCell = true; + } + } + return objectDatas; + } + + private Bitmap GetObjectPreview(int w, int h, CellInfoData[] datas) + { + if (datas == null) + { + return null; + } + var preview = new Bitmap(w*CellWidth, h*CellHeight); + var graphics = Graphics.FromImage(preview); + graphics.InterpolationMode = InterpolationMode.Low; + + for (var i = 0; i < datas.Length; i++) + { + if (datas[i].Y%2 != 0) continue; + drawY = (datas[i].Y + h/4)*CellHeight; + if (datas[i].X%2 != 0) continue; + drawX = (datas[i].X + w/4)*CellWidth; + + index = (datas[i].CellInfo.BackImage & 0x1FFFFFFF) - 1; + libIndex = datas[i].CellInfo.BackIndex; + + if (libIndex < 0 || libIndex >= Libraries.MapLibs.Length) continue; + if (index < 0 || index >= Libraries.MapLibs[libIndex].Images.Count) continue; + + Libraries.MapLibs[libIndex].CheckImage(index); + var mi = Libraries.MapLibs[libIndex].Images[index]; + + if (mi.Image == null) continue; + + var destRect = new Rectangle(drawX, drawY, mi.Width, mi.Height); + var srcRect = new Rectangle(0, 0, mi.Width, mi.Height); + graphics.DrawImage(mi.Image, destRect, srcRect, GraphicsUnit.Pixel); + Libraries.MapLibs[libIndex].Images[index] = null; + } + + for (var i = 0; i < datas.Length; i++) + { + drawX = (datas[i].X + w/4)*CellWidth; + index = datas[i].CellInfo.MiddleImage - 1; + libIndex = datas[i].CellInfo.MiddleIndex; + if (libIndex < 0 || libIndex >= Libraries.MapLibs.Length) continue; + if (index < 0 || index >= Libraries.MapLibs[libIndex].Images.Count) continue; + + var s = Libraries.MapLibs[libIndex].GetSize(index); + if ((s.Width != CellWidth || s.Height != CellHeight) && + (s.Width != CellWidth*2 || s.Height != CellHeight*2)) + { + drawY = (datas[i].Y + 1 + h/4)*CellHeight - s.Height; + } + else + { + drawY = (datas[i].Y + h/4)*CellHeight; + } + Libraries.MapLibs[libIndex].CheckImage(index); + var mi = Libraries.MapLibs[libIndex].Images[index]; + if (mi.Image == null) continue; + var destRect = new Rectangle(drawX, drawY, mi.Width, mi.Height); + var srcRect = new Rectangle(0, 0, mi.Width, mi.Height); + graphics.DrawImage(mi.Image, destRect, srcRect, GraphicsUnit.Pixel); + Libraries.MapLibs[libIndex].Images[index] = null; + } + + for (var i = 0; i < datas.Length; i++) + { + drawX = (datas[i].X + w/4)*CellWidth; + index = (datas[i].CellInfo.FrontImage & 0x7FFF) - 1; + libIndex = datas[i].CellInfo.FrontIndex; + if (libIndex < 0 || libIndex >= Libraries.MapLibs.Length) continue; + if (index < 0 || index >= Libraries.MapLibs[libIndex].Images.Count) continue; + + var s = Libraries.MapLibs[libIndex].GetSize(index); + if ((s.Width != CellWidth || s.Height != CellHeight) && + (s.Width != CellWidth*2 || s.Height != CellHeight*2)) + { + drawY = (datas[i].Y + 1 + h/4)*CellHeight - s.Height; + } + else + { + drawY = (datas[i].Y + h/4)*CellHeight; + } + Libraries.MapLibs[libIndex].CheckImage(index); + var mi = Libraries.MapLibs[libIndex].Images[index]; + if (mi.Image == null) continue; + var destRect = new Rectangle(drawX, drawY, mi.Width, mi.Height); + var srcRect = new Rectangle(0, 0, mi.Width, mi.Height); + graphics.DrawImage(mi.Image, destRect, srcRect, GraphicsUnit.Pixel); + Libraries.MapLibs[libIndex].Images[index] = null; + } + + graphics.Save(); + graphics.Dispose(); + + return preview; + } + + private void chkFrontTag_Click(object sender, EventArgs e) + { + chkFrontTag.Checked = !chkFrontTag.Checked; + } + + private void btnDeleteObjects_Click(object sender, EventArgs e) + { + var name = ObjectslistBox.SelectedItem + ".X"; + var objectFile = Application.StartupPath + "\\Data\\Objects\\" + name; + if (File.Exists(objectFile)) + { + File.Delete(objectFile); + ObjectslistBox.Items.Clear(); + ReadObjectsToListBox(); + } + } + + private void ClearAll() + { + M2CellInfo[cellX, cellY] = new CellInfo(); + } + + private void ClearBack() + { + M2CellInfo[cellX, cellY].BackIndex = 0; + M2CellInfo[cellX, cellY].BackImage = 0; + } + + private void ClearMidd() + { + M2CellInfo[cellX, cellY].MiddleImage = 0; + M2CellInfo[cellX, cellY].MiddleIndex = 0; + M2CellInfo[cellX, cellY].MiddleAnimationFrame = 0; + M2CellInfo[cellX, cellY].MiddleAnimationTick = 0; + } + + private void ClearFront() + { + M2CellInfo[cellX, cellY].FrontImage = 0; + M2CellInfo[cellX, cellY].FrontIndex = 0; + M2CellInfo[cellX, cellY].FrontAnimationFrame = 0; + M2CellInfo[cellX, cellY].FrontAnimationTick = 0; + } + + private void ClearBackLimit() + { + M2CellInfo[cellX, cellY].BackImage = M2CellInfo[cellX, cellY].BackImage & 0x1fffffff; + } + + private void ClearFrontLimit() + { + M2CellInfo[cellX, cellY].FrontImage = (short) (M2CellInfo[cellX, cellY].FrontImage & 0x7fff); + } + + private void 撤销ToolStripMenuItem_Click(object sender, EventArgs e) + { + UnDo(); + } + + private void 返回ToolStripMenuItem_Click(object sender, EventArgs e) + { + ReDo(); + } + + private void btnSetDoor_Click(object sender, EventArgs e) + { + if (M2CellInfo != null) + { + Form setDoorForm = new FrmSetDoor(SetDoorProperty); + if (setDoorForm.ShowDialog() == DialogResult.OK) + { + } + } + } + + private void SetDoorProperty(bool blCoreDoor, byte index, byte offSet) + { + Point[] points = {new Point(cellX, cellY)}; + AddCellInfoPoints(points); + + M2CellInfo[cellX, cellY].DoorIndex = (byte) (M2CellInfo[cellX, cellY].DoorIndex | index); + M2CellInfo[cellX, cellY].DoorOffset = offSet; + if (blCoreDoor) + { + M2CellInfo[cellX, cellY].DoorIndex = (byte) (M2CellInfo[cellX, cellY].DoorIndex | 0x80); + } + else + { + M2CellInfo[cellX, cellY].DoorIndex = (byte) (M2CellInfo[cellX, cellY].DoorIndex & 0x7F); + } + } + + private void btnSetAnimation_Click(object sender, EventArgs e) + { + if (M2CellInfo != null) + { + Form setAnimation = new FrmSetAnimation(SetAnimationProperty); + if (setAnimation.ShowDialog() == DialogResult.OK) + { + } + } + } + + private void SetAnimationProperty(bool blend, byte frame, byte tick) + { + Point[] points = { new Point(cellX, cellY) }; + AddCellInfoPoints(points); + //(byte)(M2CellInfo[cellX, cellY].FrontAnimationFrame | frame) + M2CellInfo[cellX, cellY].FrontAnimationFrame = frame; + M2CellInfo[cellX, cellY].FrontAnimationTick = tick; + if (blend) + { + M2CellInfo[cellX, cellY].FrontAnimationFrame = + (byte)(M2CellInfo[cellX, cellY].FrontAnimationFrame | 0x80); + } + else + { + M2CellInfo[cellX, cellY].FrontAnimationFrame = + (byte)(M2CellInfo[cellX, cellY].FrontAnimationFrame & 0x7F); + } + } + + + private void btnSetAnimationArea_Click(object sender, EventArgs e) + { + if (M2CellInfo != null) + { + Form setAnimation = new FrmSetAnimation(SetAnimationAreaProperty); + if (setAnimation.ShowDialog() == DialogResult.OK) + { + } + } + } + + + private void SetAnimationAreaProperty(bool blend, byte frame, byte tick) //M2P added 'Area' to enable it alongside the orig animation + { + if (M2CellInfo != null) + { + if (p1.X > p2.X) + { + p1.X += p2.X; + p2.X = p1.X - p2.X - 1; + p1.X -= p2.X; + } + + if (p1.Y > p2.Y) + { + p1.Y += p2.Y; + p2.Y = p1.Y - p2.Y - 1; + p1.Y -= p2.Y; + } + + for (var x = p1.X; x <= p2.X; x++) + { + for (var y = p1.Y; y <= p2.Y; y++) + { + Point[] points = { new Point(x, y) }; + AddCellInfoPoints(points); + //(byte)(M2CellInfo[cellX, cellY].FrontAnimationFrame | frame) + M2CellInfo[x, y].FrontAnimationFrame = frame; + M2CellInfo[x, y].FrontAnimationTick = tick; + if (blend) + { + M2CellInfo[x, y].FrontAnimationFrame = + (byte)(M2CellInfo[x, y].FrontAnimationFrame | 0x80); + } + else + { + M2CellInfo[x, y].FrontAnimationFrame = + (byte)(M2CellInfo[x, y].FrontAnimationFrame & 0x7F); + } + } + } + } + } + + + + private void btnSetMiddleAnimation_Click(object sender, EventArgs e) //M2P - copied the code for Front Animation above and changed all occurences of 'Front' to 'Middle' + { + if (M2CellInfo != null) + { + Form setMiddleAnimation = new FrmSetAnimation(SetMiddleAnimationProperty); + if (setMiddleAnimation.ShowDialog() == DialogResult.OK) + { + } + } + } + + private void SetMiddleAnimationProperty(bool blend, byte frame, byte tick) + { + Point[] points = { new Point(cellX, cellY) }; + AddCellInfoPoints(points); + //(byte)(M2CellInfo[cellX, cellY].FrontAnimationFrame | frame) + M2CellInfo[cellX, cellY].MiddleAnimationFrame = frame; + M2CellInfo[cellX, cellY].MiddleAnimationTick = tick; + if (blend) + { + M2CellInfo[cellX, cellY].MiddleAnimationFrame = + (byte)(M2CellInfo[cellX, cellY].MiddleAnimationFrame | 0x80); + } + else + { + M2CellInfo[cellX, cellY].MiddleAnimationFrame = + (byte)(M2CellInfo[cellX, cellY].MiddleAnimationFrame & 0x7F); + } + } + + private void btnSetMiddleAnimationArea_Click(object sender, EventArgs e) + { + if (M2CellInfo != null) + { + Form setMiddleAnimation = new FrmSetAnimation(SetMiddleAnimationAreaProperty); + if (setMiddleAnimation.ShowDialog() == DialogResult.OK) + { + } + } + } + + private void SetMiddleAnimationAreaProperty(bool blend, byte frame, byte tick) + { + if (M2CellInfo != null) + { + //this should swap the points if point 2 is not a higher value + if (p1.X > p2.X) + { + p1.X += p2.X; + p2.X = p1.X - p2.X - 1; + p1.X -= p2.X; + } + + if (p1.Y > p2.Y) + { + p1.Y += p2.Y; + p2.Y = p1.Y - p2.Y - 1; + p1.Y -= p2.Y; + } + + for (var x = p1.X; x <= p2.X; x++) + { + for (var y = p1.Y; y <= p2.Y; y++) + { + Point[] points = { new Point(x, y) }; + AddCellInfoPoints(points); + //(byte)(M2CellInfo[cellX, cellY].FrontAnimationFrame | frame) + M2CellInfo[x, y].MiddleAnimationFrame = frame; + M2CellInfo[x, y].MiddleAnimationTick = tick; + if (blend) + { + M2CellInfo[x, y].MiddleAnimationFrame = + (byte)(M2CellInfo[x, y].MiddleAnimationFrame | 0x80); + } + else + { + M2CellInfo[x, y].MiddleAnimationFrame = + (byte)(M2CellInfo[x, y].MiddleAnimationFrame & 0x7F); + } + } + } + } + } + + + private void btnSetLight_Click(object sender, EventArgs e) + { + if (M2CellInfo != null) + { + Form setLight = new FrmSetLight(SetLightProperty); + if (setLight.ShowDialog() == DialogResult.OK) + { + } + } + } + + private void SetLightProperty(byte light) //M2P - this is now effectivelly replaced by the bellow 'selected area' light setting, leaving it in for now anyway + { + Point[] points = { new Point(cellX, cellY) }; + AddCellInfoPoints(points); + M2CellInfo[cellX, cellY].Light = light; + } + + private void btnSetLightArea_Click(object sender, EventArgs e) + { + if (M2CellInfo != null) + { + Form setLight = new FrmSetLight(SetLightAreaProperty); + if (setLight.ShowDialog() == DialogResult.OK) + { + } + } + } + + private void SetLightAreaProperty(byte light) + { + if (M2CellInfo != null) + { + if (p1.X > p2.X) + { + p1.X += p2.X; + p2.X = p1.X - p2.X - 1; + p1.X -= p2.X; + } + + if (p1.Y > p2.Y) + { + p1.Y += p2.Y; + p2.Y = p1.Y - p2.Y - 1; + p1.Y -= p2.Y; + } + + for (var x = p1.X; x <= p2.X; x++) + { + for (var y = p1.Y; y <= p2.Y; y++) + { + { + Point[] points = { new Point(x, y) }; + AddCellInfoPoints(points); + M2CellInfo[x, y].Light = light; + } + } + } + } + } + + private void btnSetFishingLightArea_Click(object sender, EventArgs e) + { + if (M2CellInfo != null) + { + SetFishingLightAreaProperty(100); + { + } + } + } + + private void SetFishingLightAreaProperty(byte light) + { + if (M2CellInfo != null) + { + if (p1.X > p2.X) + { + p1.X += p2.X; + p2.X = p1.X - p2.X - 1; + p1.X -= p2.X; + } + + if (p1.Y > p2.Y) + { + p1.Y += p2.Y; + p2.Y = p1.Y - p2.Y - 1; + p1.Y -= p2.Y; + } + + for (var x = p1.X; x <= p2.X; x++) + { + for (var y = p1.Y; y <= p2.Y; y++) + { + { + Point[] points = { new Point(x, y) }; + AddCellInfoPoints(points); + M2CellInfo[x, y].Light = 100; + } + } + } + } + } + + private void SetBackLimit() + { + if (M2CellInfo != null) + { + M2CellInfo[cellX, cellY].BackImage = M2CellInfo[cellX, cellY].BackImage | 0x20000000; + } + } + + private void SetFrontLimit() + { + if (M2CellInfo != null) + { + M2CellInfo[cellX, cellY].FrontImage = + (short) (M2CellInfo[cellX, cellY].FrontImage | 0x8000); + } + } + + private void btnJump_Click(object sender, EventArgs e) + { + if (M2CellInfo != null) + { + Form jump = new FrmJump(Jump); + if (jump.ShowDialog() == DialogResult.OK) + { + } + } + } + + private void Jump(int x, int y) + { + //if (x - OffSetX/2 >= mapWidth || y - OffSetY/2 >= mapHeight) + //{ + // MessageBox.Show("X,Y is error point"); + // return; + //} + //if (x - OffSetX/2 < 0 || y - OffSetY/2 < 0) + //{ + // mapPoint.X = x; + // mapPoint.Y = y; + // return; + //} + //mapPoint.X = x - OffSetX/2; + //mapPoint.Y = y - OffSetX/2; + + //sets the mapPoint + mapPoint.X = x; + mapPoint.Y = y; + + + //checks if the mapPoint is within the map limits and sets it to min or max position if not + if (mapPoint.X + OffSetX >= mapWidth) + { + mapPoint.X = mapWidth - OffSetX - 1; + } + + if (mapPoint.X < 0) + { + mapPoint.X = 0; + } + + if (mapPoint.Y < 0) + { + mapPoint.Y = 0; + } + + if (mapPoint.Y + OffSetY >= mapHeight) + { + mapPoint.Y = mapHeight - OffSetY - 1; + } + setScrollBar(); + } + + private void Main_KeyDown(object sender, KeyEventArgs e) + { + switch (e.KeyCode) + { + //Movement + case Keys.D: + Jump(mapPoint.X + 2, mapPoint.Y); + break; + case Keys.A: + Jump(mapPoint.X - 2, mapPoint.Y); + break; + case Keys.W: + Jump(mapPoint.X, mapPoint.Y - 2); + break; + case Keys.S: + Jump(mapPoint.X, mapPoint.Y + 2); + break; + + //Movement - 'Jump by Tile Block' using Numpad Keys - M2P (keys 8, 4, 5, 6 are mapped as WASD keys, keys 7, 9, 1, 3 scroll @45 degree directions). + case Keys.NumPad8: + Jump(mapPoint.X, mapPoint.Y - 20); + break; + case Keys.NumPad5: + Jump(mapPoint.X, mapPoint.Y + 20); + break; + case Keys.NumPad4: + Jump(mapPoint.X - 26, mapPoint.Y); + break; + case Keys.NumPad6: + Jump(mapPoint.X + 26, mapPoint.Y); + break; + case Keys.NumPad2: + Jump(mapPoint.X, mapPoint.Y + 40); // #2 Jumps down twice as fast as #5 does (40 Tiles vs 20 Tiles). + break; + case Keys.NumPad7: + Jump(mapPoint.X - 26, mapPoint.Y - 20); // #7, 9, 1 & 3 Jump diagonally + break; + case Keys.NumPad9: + Jump(mapPoint.X + 26, mapPoint.Y - 20); + break; + case Keys.NumPad1: + Jump(mapPoint.X - 26, mapPoint.Y + 20); + break; + case Keys.NumPad3: + Jump(mapPoint.X + 26, mapPoint.Y + 20); + break; + case Keys.NumPad0: + Jump(mapPoint.X - 4000, mapPoint.Y - 4000); // This will Jump to map origin 0:0 no matter the map size (Max size map in NoMenu Editor edition is 4kx4k Tiles). + break; + case Keys.Enter: + Jump(mapPoint.X + 4000, mapPoint.Y + 4000); // This will Jump to map bottom right corner no matter the map size (Max size map in NoMenu Editor edition is 4kx4k Tiles). + break; + case Keys.Up: + e.SuppressKeyPress = true; + Jump(mapPoint.X, mapPoint.Y - 4); + break; + case Keys.Down: + e.SuppressKeyPress = true; + Jump(mapPoint.X, mapPoint.Y + 4); + break; + case Keys.Left: + e.SuppressKeyPress = true; + Jump(mapPoint.X - 4, mapPoint.Y); + break; + case Keys.Right: + e.SuppressKeyPress = true; + Jump(mapPoint.X + 4, mapPoint.Y); + break; + + case Keys.Divide: // Fully 'Zoom Out' using NumPad '/' key (equivalent to Shift-Add) + zoomMIN = 1; + break; + case Keys.Multiply: // Fully 'Zoom In' using NumPad '*' key (equivalent to Shift-Subtract) + zoomMIN = zoomMAX; + break; + + #region Shortcut Keys + //Shortcuts + case Keys.J: + if (M2CellInfo != null) + { + Form jump = new FrmJump(Jump); + if (jump.ShowDialog() == DialogResult.OK) + { + } + } + break; + case Keys.B: //Added by M2P + layer = Layer.BackLimit; + cmbEditorLayer.SelectedIndex = 7; + break; + case Keys.F: //Added by M2P + layer = Layer.FrontLimit; + cmbEditorLayer.SelectedIndex = 6; + break; + case Keys.C: //Added by M2P + layer = Layer.ClearBackFrontLimit; + cmbEditorLayer.SelectedIndex = 22; + break; + case Keys.G: + if (e.Control) + { + chkDrawGridsSmall.Checked = !chkDrawGridsSmall.Checked; + return; + } + if (e.Alt) + { + chkDrawGridsLine.Checked = !chkDrawGridsLine.Checked; + return; + } + else + { + chkDrawGridsBig.Checked = !chkDrawGridsBig.Checked; + } + break; + case Keys.H: //Added by M2P + tabControl1.SelectedTab = tabHelp; + break; + case Keys.L: //M2P Shortcut L added to toggle Light Tags view. Experimental! + chkLightTag.Checked = !chkLightTag.Checked; + break; + case Keys.M: + if (e.Alt) + { + createBigMap(); // "_BigMap" is 1/2 MiniMap size + return; + } + else if (e.Control) + { + createLargeMap(); // "_XLargeMap" is 2x MiniMap size + return; + } + else if (e.Alt & e.Control) + { + createXLargeMap(); // "_XXLargeMap" is 4x MiniMap size + return; + } + else + { + createMiniMap(); // Minimap is 'Standard' size (/4). Its size is btw BigMap and the L, XL MapImages. + } + break; + case Keys.N: + NewMap(); + break; + case Keys.O: + OpenMap(); + break; + case Keys.R: + tabControl1.SelectedTab = tabObjects; + break; + case Keys.Oemtilde: //Added by M2P - An alternate way to Save Map by single key click. Alt-S is the more conventional one (changed from Ctrl-S since that interferes with Tile Brushing.) + { + Save(); + } + break; + case Keys.T: + tabControl1.SelectedTab = tabTiles; + break; + case Keys.X: //Added by M2P + if (e.Alt) + SaveObjectsFile(); + break; + case Keys.Y: + tabControl1.SelectedTab = tabTileCutter; + break; + case Keys.Z: + if (e.Control) + { + ReDo(); + } + else + { + UnDo(); + } + break; + case Keys.Oemcomma: + selectImageIndex--; + break; + case Keys.OemPeriod: + selectImageIndex++; + break; + + case Keys.Add: + if (e.Shift) + { + zoomMIN = zoomMAX; + } + ZoomIn(); + break; + + case Keys.Subtract: + if (e.Shift) + { + zoomMIN = 1; + } + ZoomOut(); + break; + + + //case Keys.Oem8: //The ` key next to the number keys ... not a tilde and not a ' // Commented out by M2P - will use this key to Save map with a single key click (Alt-S can also be used to Save map). + // layer = Layer.None; + // cmbEditorLayer.SelectedIndex = 0; + // break; + case Keys.Escape: + layer = Layer.None; + cmbEditorLayer.SelectedIndex = 0; + break; + //case Keys.Oemtilde: //Commnented out by M2P - for the same reason as above for Oem8 key. Escape key fills that role now. + // layer = Layer.None; + // cmbEditorLayer.SelectedIndex = 0; + // break; + + + case Keys.D1: + layer = Layer.FrontImage; + cmbEditorLayer.SelectedIndex = 2; + break; + case Keys.D2: + layer = Layer.MiddleImage; + cmbEditorLayer.SelectedIndex = 3; + break; + case Keys.D3: + layer = Layer.BackImage; + cmbEditorLayer.SelectedIndex = 4; + break; + case Keys.D4: //Added by M2P + layer = Layer.GraspingMir2Front; + cmbEditorLayer.SelectedIndex = 10; + break; + case Keys.D5: + layer = Layer.PlaceObjects; + cmbEditorLayer.SelectedIndex = 11; + break; + case Keys.D6: //Added by M2P + if (e.Control) + { + layer = Layer.GraspingFrontMiddleBack; + cmbEditorLayer.SelectedIndex = 13; + } + else + { + layer = Layer.GraspingInvertMir3FrontMiddle; + cmbEditorLayer.SelectedIndex = 12; + } + break; + case Keys.D7: + layer = Layer.ClearFront; + cmbEditorLayer.SelectedIndex = 15; + break; + case Keys.D8: + layer = Layer.ClearMidd; + cmbEditorLayer.SelectedIndex = 16; + break; + case Keys.D9: + layer = Layer.ClearBack; + cmbEditorLayer.SelectedIndex = 17; + break; + case Keys.D0: + layer = Layer.BrushMir2BigTiles; + cmbEditorLayer.SelectedIndex = 24; + break; + case Keys.OemMinus: + layer = Layer.BrushSmTiles; + cmbEditorLayer.SelectedIndex = 25; + break; + case Keys.Oemplus: + layer = Layer.BrushMir3BigTiles; + cmbEditorLayer.SelectedIndex = 26; + break; + + + case Keys.F1: + e.SuppressKeyPress = true; + tabControl1.SelectedTab = tabWemadeMir2; + break; + //case Keys.F2: + // e.SuppressKeyPress = true; + // tabControl1.SelectedTab = tabShandaMir2; + // break; + //case Keys.F3: + // e.SuppressKeyPress = true; + // tabControl1.SelectedTab = tabWemadeMir3; + // break; + //case Keys.F4: //M2P - in release v1.3 returned ShandaMir3 to F4, moved TileCutter to shortcut 'Y' + // e.SuppressKeyPress = true; + // tabControl1.SelectedTab = tabShandaMir3; + // break; + case Keys.F5: + e.SuppressKeyPress = true; + tabControl1.SelectedTab = tabMap; + break; + case Keys.F6: + e.SuppressKeyPress = true; + chkFront.Checked = !chkFront.Checked; + break; + case Keys.F7: + e.SuppressKeyPress = true; + chkMidd.Checked = !chkMidd.Checked; + break; + case Keys.F8: + e.SuppressKeyPress = true; + chkBack.Checked = !chkBack.Checked; + break; + case Keys.F9: + e.SuppressKeyPress = true; + chkShowCellInfo.Checked = !chkShowCellInfo.Checked; + cellInfoControl.Visible = chkShowCellInfo.Checked; + break; + case Keys.F10: + e.SuppressKeyPress = true; //Stops the F10 key switching focus to the File Menu + chkFrontTag.Checked = !chkFrontTag.Checked; + break; + case Keys.F11: + e.SuppressKeyPress = true; + chkMiddleTag.Checked = !chkMiddleTag.Checked; + break; + case Keys.F12: //M2P: added (Ctrl-F12) & F12 shortcut to toggle (View Front Limit) & 'View Back Limit' via GUI element property panel! + e.SuppressKeyPress = true; + //chkTopTag.Checked = !chkTopTag.Checked; + break; + } + + #endregion + + if (M2CellInfo != null) + { + if (layer == Layer.BackImage) + { + if (e.Control) + { + keyDown = true; + } + + } + + if (layer == Layer.BrushMir2BigTiles || layer == Layer.BrushSmTiles || layer == Layer.BrushMir3BigTiles) + { + if (e.Control) + { + keyDown = true; + } + } + } + } + + private void Main_KeyUp(object sender, KeyEventArgs e) + { + if (e.KeyData == Keys.ControlKey) + { + keyDown = false; + } + } + + private void ObjectslistBox_SelectedIndexChanged(object sender, EventArgs e) + { + var name = ObjectslistBox.SelectedItem + ".X"; + var objectFile = Application.StartupPath + "\\Data\\Objects\\" + name; + objectDatas = ReadObjectsFile(objectFile); + + + picObjects.Image = GetObjectPreview(48, 42, objectDatas); + } + + private void chkMiddleTag_Click(object sender, EventArgs e) + { + chkMiddleTag.Checked = !chkMiddleTag.Checked; + } + + private void Main_FormClosing(object sender, FormClosingEventArgs e) + { + Dispose(); + } + + private void chkShowCellInfo_Click(object sender, EventArgs e) + { + chkShowCellInfo.Checked = !chkShowCellInfo.Checked; + cellInfoControl.Visible = chkShowCellInfo.Checked; + } + + private void ShowCellInfo(bool blShow) + { + if (blShow) + { + cellInfoControl.SetText( + cellX, + cellY, + (M2CellInfo[cellX, cellY].BackImage & 0x1FFFF) - 1, + M2CellInfo[cellX, cellY].MiddleImage - 1, + (M2CellInfo[cellX, cellY].FrontImage & 0x7FFF) - 1, + M2CellInfo[cellX, cellY].BackIndex, + M2CellInfo[cellX, cellY].MiddleIndex, + M2CellInfo[cellX, cellY].FrontIndex, + GetLibName(M2CellInfo[cellX, cellY].BackIndex), + GetLibName(M2CellInfo[cellX, cellY].MiddleIndex), + GetLibName(M2CellInfo[cellX, cellY].FrontIndex), + M2CellInfo[cellX, cellY].BackImage & 0x20000000, + M2CellInfo[cellX, cellY].FrontImage & 0x8000, + (byte) (M2CellInfo[cellX, cellY].FrontAnimationFrame & 0x7F), + M2CellInfo[cellX, cellY].FrontAnimationTick, + Convert.ToBoolean(M2CellInfo[cellX, cellY].FrontAnimationFrame & 0x80), + M2CellInfo[cellX, cellY].MiddleAnimationFrame, + M2CellInfo[cellX, cellY].MiddleAnimationTick, + Convert.ToBoolean(M2CellInfo[cellX, cellY].MiddleAnimationFrame), + M2CellInfo[cellX, cellY].DoorOffset, + (byte) (M2CellInfo[cellX, cellY].DoorIndex & 0x7F), + Convert.ToBoolean(M2CellInfo[cellX, cellY].DoorIndex & 0x80), + M2CellInfo[cellX, cellY].Light, + M2CellInfo[cellX, cellY].FishingCell + ); + drawX = (cellX - mapPoint.X + 1)*(CellWidth*zoomMIN/zoomMAX); + drawY = (cellY - mapPoint.Y + 1)*(CellHeight*zoomMIN/zoomMAX); + if (drawX + cellInfoControl.Width >= MapPanel.Width) + { + drawX = drawX - cellInfoControl.Width - 1; + } + cellInfoControl.Location = new Point(drawX, drawY); + if (!MapPanel.Controls.Contains(cellInfoControl)) + { + MapPanel.Controls.Add(cellInfoControl); + } + } + } + + private void chkShowCellInfo_1_Click(object sender, EventArgs e) + { + chkShowCellInfo_1.Checked = !chkShowCellInfo_1.Checked; + cellInfoControl_1.Visible = chkShowCellInfo_1.Checked; + } + + private void ShowCellInfo_1(bool blShow) + { + if (blShow) + { + cellInfoControl_1.SetText( + cellX, + cellY + ); + drawX = (cellX - mapPoint.X + 1) * (CellWidth * zoomMIN / zoomMAX); + drawY = (cellY - mapPoint.Y + 1) * (CellHeight * zoomMIN / zoomMAX); + if (drawX + cellInfoControl_1.Width >= MapPanel.Width) + { + drawX = drawX - cellInfoControl_1.Width - 1; + } + cellInfoControl_1.Location = new Point(drawX, drawY); + if (!MapPanel.Controls.Contains(cellInfoControl_1)) + { + MapPanel.Controls.Add(cellInfoControl_1); + } + } + } + + private void chkShowCellInfo_2_Click(object sender, EventArgs e) + { + chkShowCellInfo_2.Checked = !chkShowCellInfo_2.Checked; + cellInfoControl_2.Visible = chkShowCellInfo_2.Checked; + } + + private void ShowCellInfo_2(bool blShow) + { + if (blShow) + { + cellInfoControl_2.SetText( + cellX, + cellY, + M2CellInfo[cellX, cellY].BackImage & 0x20000000, + M2CellInfo[cellX, cellY].FrontImage & 0x8000, + (byte)(M2CellInfo[cellX, cellY].FrontAnimationFrame & 0x7F), + M2CellInfo[cellX, cellY].FrontAnimationTick, + Convert.ToBoolean(M2CellInfo[cellX, cellY].FrontAnimationFrame & 0x80), + M2CellInfo[cellX, cellY].MiddleAnimationFrame, + M2CellInfo[cellX, cellY].MiddleAnimationTick, + Convert.ToBoolean(M2CellInfo[cellX, cellY].MiddleAnimationFrame), + M2CellInfo[cellX, cellY].DoorOffset, + (byte)(M2CellInfo[cellX, cellY].DoorIndex & 0x7F), + Convert.ToBoolean(M2CellInfo[cellX, cellY].DoorIndex & 0x80), + M2CellInfo[cellX, cellY].Light, + M2CellInfo[cellX, cellY].FishingCell + ); + drawX = (cellX - mapPoint.X + 1) * (CellWidth * zoomMIN / zoomMAX); + drawY = (cellY - mapPoint.Y + 1) * (CellHeight * zoomMIN / zoomMAX); + if (drawX + cellInfoControl_2.Width >= MapPanel.Width) + { + drawX = drawX - cellInfoControl_2.Width - 1; + } + cellInfoControl_2.Location = new Point(drawX, drawY); + if (!MapPanel.Controls.Contains(cellInfoControl_2)) + { + MapPanel.Controls.Add(cellInfoControl_2); + } + } + } + + + + private void WemadeMir2LibListView_Click(object sender, EventArgs e) + { + selectListItem = wemadeMir2ListItem; + //在此处设断点,发现点击不同的Item后,此事件居然执行了2次 //第一次是取消当前Item选中状态,导致整个ListView的SelectedIndices变为0 Translation: Set a breakpoint here and find that after clicking on different Items, this event is actually executed twice //The first time is to cancel the current Item selection state, causing the SelectedIndices of the entire ListView to become 0 + //第二次才将新选中的Item设置为选中状态,SelectedIndices变为1 Translation: The newly selected Item is set to the selected state for the second time, and SelectedIndices becomes 1. + //如果不加listview.SelectedIndices.Count>0判断,将导致获取listview.Items[]索引超界的异常 Translation: If you do not add listview.SelectedIndices.Count>0 to determine, it will result in an out-of-bounds exception in obtaining listview.Items[] index. + if (WemadeMir2LibListView.SelectedIndices.Count > 0) + { + selectLibMImage = + Libraries.MapLibs[wemadeMir2ListItem.Value].GetMImage(WemadeMir2LibListView.SelectedIndices[0]); + if (selectLibMImage != null) + { + selectImageIndex = WemadeMir2LibListView.SelectedIndices[0]; + + picWemdeMir2.Image = selectLibMImage.Image; + LabWemadeMir2Width.Text = "Width : " + selectLibMImage.Width; + LabWemadeMir2Height.Text = "Height : " + selectLibMImage.Height; + labeWemadeMir2OffSetX.Text = "OffSetX : " + selectLibMImage.X; + labWemadeMir2OffSetY.Text = "OffSetY : " + selectLibMImage.Y; + Libraries.MapLibs[wemadeMir2ListItem.Value].Images[WemadeMir2LibListView.SelectedIndices[0]] = null; + } + } + } + + private void CreateMir2BigTiles() + { + if (selectListItem == null || selectTilesIndex == -1) return; + bigTilePoints.Clear(); + PutAutoTile(cellX, cellY, RandomAutoMir2Tile(TileType.Center)); + DrawAutoMir2TileSide(cellX, cellY); + AutoTileRange = 2; + + for (var i = 0; i < 30; ++i) + { + AutoTileChanges = 0; + DrawAutoMir2TilePattern(cellX, cellY); + if (AutoTileChanges == 0) + { + break; + } + AutoTileRange += 2; + } + } + + private void CreateMir3BigTiles() + { + if (selectListItem == null || selectTilesIndex == -1) return; + bigTilePoints.Clear(); + PutAutoTile(cellX, cellY, RandomAutoMir3Tile(TileType.Center)); + DrawAutoMir3TileSide(cellX, cellY); + AutoTileRange = 2; + + for (var i = 0; i < 30; ++i) + { + AutoTileChanges = 0; + DrawAutoMir3TilePattern(cellX, cellY); + if (AutoTileChanges == 0) + { + break; + } + AutoTileRange += 2; + } + } + + private void CreateSmTiles() + { + if (selectListItem == null || selectTilesIndex == -1) return; + smTilePoints.Clear(); + PutAutoSmTile(cellX, cellY, RandomAutoSmTile(TileType.Center)); + DrawAutoSmTileSide(cellX, cellY); + AutoTileRange = 2; + for (var i = 0; i < 30; ++i) + { + AutoTileChanges = 0; + DrawAutoSmTilePattern(cellX, cellY); + if (AutoTileChanges == 0) + { + break; + } + AutoTileRange += 2; + } + } + + private int GetTile(int x, int y) + { + if (x < 0 || (y < 0) || (x >= mapWidth) || (y >= mapHeight)) + { + return -1; + } + return (M2CellInfo[x, y].BackImage & 0X1FFFFFFF) - 1; + } + + private int GetSmTile(int x, int y) + { + if (x < 0 || (y < 0) || (x >= mapWidth) || (y >= mapHeight)) + { + return -1; + } + return M2CellInfo[x, y].MiddleImage - 1; + } + + private TileType GetAutoMir2TileType(int x, int y) + { + var imageIndex = GetTile(x, y); + if (imageIndex/Mir2BigTileBlock != selectTilesIndex) + { + return TileType.None; + } + switch (imageIndex%Mir2BigTileBlock) + { + case 0: + case 1: + case 2: + case 3: + case 4: + return TileType.Center; + case 5: + return TileType.UpLeft; + case 6: + return TileType.UpRight; + case 7: + return TileType.DownLeft; + case 8: + return TileType.DownRight; + case 10: + return TileType.InUpLeft; + case 11: + return TileType.InUpRight; + case 12: + return TileType.InDownLeft; + case 13: + return TileType.InDownRight; + case 15: + case 16: + return TileType.Up; + case 17: + case 18: + return TileType.Down; + case 20: + case 22: + return TileType.Left; + case 21: + case 23: + return TileType.Right; + } + return TileType.None; + } + + private TileType GetAutoMir3TileType(int x, int y) + { + var imageIndex = GetTile(x, y); + + int flag; + if (Libraries.MapLibs[selectListItem.Value].Images.Count%10 != 0) + { + flag = (Libraries.MapLibs[selectListItem.Value].Images.Count + 1)/Mir3BigTileBlock; + } + else + { + flag = Libraries.MapLibs[selectListItem.Value].Images.Count/Mir3BigTileBlock; + } + + if ((imageIndex/Mir3BigTileBlock != selectTilesIndex) && + imageIndex/Mir3BigTileBlock != selectTilesIndex - flag) + { + return TileType.None; + } + if (selectTilesIndex < flag) + { + switch (imageIndex%Mir3BigTileBlock) + { + case 0: + case 1: + case 2: + case 3: + case 4: + return TileType.Center; + case 10: + return TileType.UpLeft; + case 11: + return TileType.UpRight; + case 12: + return TileType.DownLeft; + case 13: + return TileType.DownRight; + case 15: + return TileType.InUpLeft; + case 16: + return TileType.InUpRight; + case 17: + return TileType.InDownLeft; + case 18: + return TileType.InDownRight; + case 20: + case 21: + return TileType.Up; + case 22: + case 23: + return TileType.Down; + case 25: + case 27: + return TileType.Left; + case 26: + case 28: + return TileType.Right; + } + } + else + { + switch (imageIndex%Mir3BigTileBlock) + { + case 5: + case 6: + case 7: + case 8: + case 9: + return TileType.Center; + case 18: + return TileType.UpLeft; + case 17: + return TileType.UpRight; + case 16: + return TileType.DownLeft; + case 15: + return TileType.DownRight; + case 13: + return TileType.InUpLeft; + case 12: + return TileType.InUpRight; + case 11: + return TileType.InDownLeft; + case 10: + return TileType.InDownRight; + case 22: + case 23: + return TileType.Up; + case 20: + case 21: + return TileType.Down; + case 26: + case 28: + return TileType.Left; + case 25: + case 27: + return TileType.Right; + } + } + return TileType.None; + } + + private TileType GetAutoSmTileType(int iX, int iY) + { + //获取格子iX, iY中小地砖所属的地砖类型, 上中下等等。。。Translation: Get the floor tile type of the small and medium-sized floor tiles in the grid iX, iY, top, middle, bottom, etc. . . + int iImageIndex; + + iImageIndex = GetSmTile(iX, iY); //获取小地砖的图片索引 Get the image index of small floor tiles + //然后判断这个索引是否是当前选择的样式 Then determine whether this index is the currently selected style + if (iImageIndex >= selectTilesIndex*smTileBlock && iImageIndex < (selectTilesIndex + 1)*smTileBlock) + { + //如果是则可以根据小地砖样式中各种类型地砖的布局来计算出是属于哪种类型的地砖了 + //If so, you can calculate which type of floor tile it belongs to based on the layout of various types of floor tiles in the small floor tile style. + iImageIndex -= selectTilesIndex*smTileBlock; + if (iImageIndex < 8) + { + return 0; + } + return (TileType) ((iImageIndex - 8)/4 + 1); + } + + //return -1; //如果不是属于当前的样式的则返回-1 If it does not belong to the current style, return -1 + return TileType.None; + } + + private void PutAutoTile(int x, int y, int imageIndex) + { + if (x < 0 || (y < 0) || (x >= mapWidth) || (y >= mapHeight)) return; + + ++AutoTileChanges; + + for (var i = 0; i < bigTilePoints.Count; i++) + { + if (bigTilePoints[i].X == x && bigTilePoints[i].Y == y) + { + M2CellInfo[x, y].BackImage = imageIndex + 1; + M2CellInfo[x, y].BackIndex = (short) selectListItem.Value; + return; + } + } + bigTilePoints.Add(new CellInfoData(x, y, M2CellInfo[x, y])); + M2CellInfo[x, y].BackImage = imageIndex + 1; + M2CellInfo[x, y].BackIndex = (short) selectListItem.Value; + } + + private void PutAutoSmTile(int x, int y, int imageIndex) + { + if (x < 0 || (y < 0) || (x >= mapWidth) || (y >= mapHeight)) return; + ++AutoTileChanges; + + for (var i = 0; i < smTilePoints.Count; i++) + { + if (smTilePoints[i].X == x && smTilePoints[i].Y == y) + { + M2CellInfo[x, y].MiddleImage = (short) (imageIndex + 1); + M2CellInfo[x, y].MiddleIndex = (short) selectListItem.Value; + return; + } + } + smTilePoints.Add(new CellInfoData(x, y, M2CellInfo[x, y])); + M2CellInfo[x, y].MiddleImage = (short) (imageIndex + 1); + M2CellInfo[x, y].MiddleIndex = (short) selectListItem.Value; + } + + private void DrawAutoMir2TileSide(int iX, int iY) + { + if (GetAutoMir2TileType(iX, iY - 2) < 0) //上 Superior + { + PutAutoTile(iX, iY - 2, RandomAutoMir2Tile(TileType.Up)); + } + if (GetAutoMir2TileType(iX + 2, iY - 2) < 0) //右上 Upper Right + { + PutAutoTile(iX + 2, iY - 2, RandomAutoMir2Tile(TileType.UpRight)); + } + if (GetAutoMir2TileType(iX + 2, iY) < 0) //右 Right + { + PutAutoTile(iX + 2, iY, RandomAutoMir2Tile(TileType.Right)); + } + if (GetAutoMir2TileType(iX + 2, iY + 2) < 0) //右下 Lower Right + { + PutAutoTile(iX + 2, iY + 2, RandomAutoMir2Tile(TileType.DownRight)); + } + if (GetAutoMir2TileType(iX, iY + 2) < 0) //下 Down + { + PutAutoTile(iX, iY + 2, RandomAutoMir2Tile(TileType.Down)); + } + if (GetAutoMir2TileType(iX - 2, iY + 2) < 0) //左下 Lower Left + { + PutAutoTile(iX - 2, iY + 2, RandomAutoMir2Tile(TileType.DownLeft)); + } + if (GetAutoMir2TileType(iX - 2, iY) < 0) //左 Left + { + PutAutoTile(iX - 2, iY, RandomAutoMir2Tile(TileType.Left)); + } + if (GetAutoMir2TileType(iX - 2, iY - 2) < 0) //左上 Upper Left + { + PutAutoTile(iX - 2, iY - 2, RandomAutoMir2Tile(TileType.UpLeft)); + } + } + + private void DrawAutoMir3TileSide(int iX, int iY) + { + if (GetAutoMir3TileType(iX, iY - 2) < 0) //上 Superior + { + PutAutoTile(iX, iY - 2, RandomAutoMir3Tile(TileType.Up)); + } + if (GetAutoMir3TileType(iX + 2, iY - 2) < 0) //右上 Upper Right + { + PutAutoTile(iX + 2, iY - 2, RandomAutoMir3Tile(TileType.UpRight)); + } + if (GetAutoMir3TileType(iX + 2, iY) < 0) //右 Right + { + PutAutoTile(iX + 2, iY, RandomAutoMir3Tile(TileType.Right)); + } + if (GetAutoMir3TileType(iX + 2, iY + 2) < 0) //右下 Lower Right + { + PutAutoTile(iX + 2, iY + 2, RandomAutoMir3Tile(TileType.DownRight)); + } + if (GetAutoMir3TileType(iX, iY + 2) < 0) //下 Down + { + PutAutoTile(iX, iY + 2, RandomAutoMir3Tile(TileType.Down)); + } + if (GetAutoMir3TileType(iX - 2, iY + 2) < 0) //左下 Lower Left + { + PutAutoTile(iX - 2, iY + 2, RandomAutoMir3Tile(TileType.DownLeft)); + } + if (GetAutoMir3TileType(iX - 2, iY) < 0) //左 Left + { + PutAutoTile(iX - 2, iY, RandomAutoMir3Tile(TileType.Left)); + } + if (GetAutoMir3TileType(iX - 2, iY - 2) < 0) //左上 Upper Left + { + PutAutoTile(iX - 2, iY - 2, RandomAutoMir3Tile(TileType.UpLeft)); + } + } + + private void DrawAutoSmTileSide(int iX, int iY) + { + //这个就是绘制一个边 This is to draw an edge + if (GetAutoSmTileType(iX, iY - 1) < 0) //上 上下左右这样逐个绘制, 不过绘制之前先要检查这个格子是否已经有当前样式的地砖, 如果有则不绘制 Translation: Draw up, down, left, and right one by one, but before drawing, you must first check whether the grid already has floor tiles of the current style. If so, do not draw it. + { + PutAutoSmTile(iX, iY - 1, RandomAutoSmTile(TileType.Up)); //随机返回上的一个地砖然后绘制 Translation: Randomly returns a tile on top and then draws + } + if (GetAutoSmTileType(iX + 1, iY - 1) < 0) //右上 Upper Right + { + PutAutoSmTile(iX + 1, iY - 1, RandomAutoSmTile(TileType.UpRight)); + } + if (GetAutoSmTileType(iX + 1, iY) < 0) //右 Right + { + PutAutoSmTile(iX + 1, iY, RandomAutoSmTile(TileType.Right)); + } + if (GetAutoSmTileType(iX + 1, iY + 1) < 0) //右下 Lower Right + { + PutAutoSmTile(iX + 1, iY + 1, RandomAutoSmTile(TileType.DownRight)); + } + if (GetAutoSmTileType(iX, iY + 1) < 0) //下 Down + { + PutAutoSmTile(iX, iY + 1, RandomAutoSmTile(TileType.Down)); + } + if (GetAutoSmTileType(iX - 1, iY + 1) < 0) //左下 Lower Left + { + PutAutoSmTile(iX - 1, iY + 1, RandomAutoSmTile(TileType.DownLeft)); + } + if (GetAutoSmTileType(iX - 1, iY) < 0) //左 Left + { + PutAutoSmTile(iX - 1, iY, RandomAutoSmTile(TileType.Left)); + } + if (GetAutoSmTileType(iX - 1, iY - 1) < 0) //左上 Upper Left + { + PutAutoSmTile(iX - 1, iY - 1, RandomAutoSmTile(TileType.UpLeft)); + } + } + + private void DrawAutoMir2TilePattern(int iX, int iY) + { + int i, j, c; + TileType n1, n2; + + for (j = iY - AutoTileRange; j <= iY + AutoTileRange; j += 2) //间隔为2 The interval is 2 + { + for (i = iX - AutoTileRange; i <= iX + AutoTileRange; i += 2) //间隔为2, 其他算法跟小地砖一样 The interval is 2, and other algorithms are the same as those for small floor tiles. + { + if (i > 1 && j > 1) + { + if (GetAutoMir2TileType(i, j) > 0) + { + //Check CENTER + if (GetAutoMir2TileType(i, j) != TileType.Center) + { + c = 0; + if (GetAutoMir2TileType(i, j - 2) >= 0) + { + ++c; + } + if (GetAutoMir2TileType(i + 2, j - 2) >= 0) + { + ++c; + } + if (GetAutoMir2TileType(i + 2, j) >= 0) + { + ++c; + } + if (GetAutoMir2TileType(i + 2, j + 2) >= 0) + { + ++c; + } + if (GetAutoMir2TileType(i, j + 2) >= 0) + { + ++c; + } + if (GetAutoMir2TileType(i - 2, j + 2) >= 0) + { + ++c; + } + if (GetAutoMir2TileType(i - 2, j) >= 0) + { + ++c; + } + if (GetAutoMir2TileType(i - 2, j - 2) >= 0) + { + ++c; + } + if (c >= 8) + { + PutAutoTile(i, j, RandomAutoMir2Tile(TileType.Center)); + } + } + + //Check UP + if (GetAutoMir2TileType(i, j) != TileType.Up) + { + n1 = GetAutoMir2TileType(i - 2, j); + n2 = GetAutoMir2TileType(i + 2, j); + if ((n1 == TileType.Up || n1 == TileType.UpLeft || n1 == TileType.InDownLeft) && + (n2 == TileType.Up || n2 == TileType.UpRight || n2 == TileType.InDownRight) && + GetAutoMir2TileType(i, j - 2) < 0) + { + PutAutoTile(i, j, RandomAutoMir2Tile(TileType.Up)); + } + if (GetAutoMir2TileType(i, j) == TileType.UpRight && + ((GetAutoMir2TileType(i, j + 2) == TileType.Center && + GetAutoMir2TileType(i + 2, j + 2) == TileType.Center) || + GetAutoMir2TileType(i + 2, j) == TileType.UpLeft || + GetAutoMir2TileType(i + 2, j) == TileType.Left)) + { + PutAutoTile(i, j, RandomAutoMir2Tile(TileType.Up)); + } + if (GetAutoMir2TileType(i, j) == TileType.UpLeft && + ((GetAutoMir2TileType(i, j + 2) == TileType.Center && + GetAutoMir2TileType(i - 2, j + 2) == TileType.Center) || + GetAutoMir2TileType(i - 2, j) == TileType.UpRight || + GetAutoMir2TileType(i - 2, j) == TileType.Right)) + { + PutAutoTile(i, j, RandomAutoMir2Tile(TileType.Up)); + } + } + + //Check RIGHT + if (GetAutoMir2TileType(i, j) != TileType.Right) + { + n1 = GetAutoMir2TileType(i, j - 2); + n2 = GetAutoMir2TileType(i, j + 2); + if ((n1 == TileType.Right || n1 == TileType.UpRight || n1 == TileType.InUpLeft) && + (n2 == TileType.Right || n2 == TileType.DownRight || n2 == TileType.InDownLeft) && + GetAutoMir2TileType(i + 2, j) < 0) + { + PutAutoTile(i, j, RandomAutoMir2Tile(TileType.Right)); + } + if (GetAutoMir2TileType(i, j) == TileType.DownRight && + ((GetAutoMir2TileType(i - 2, j) == TileType.Center && + GetAutoMir2TileType(i - 2, j + 2) == TileType.Center) || + GetAutoMir2TileType(i, j + 2) == TileType.UpRight || + GetAutoMir2TileType(i, j + 2) == TileType.Up)) + { + PutAutoTile(i, j, RandomAutoMir2Tile(TileType.Right)); + } + if (GetAutoMir2TileType(i, j) == TileType.UpRight && + ((GetAutoMir2TileType(i - 2, j) == TileType.Center && + GetAutoMir2TileType(i - 2, j - 2) == TileType.Center) || + GetAutoMir2TileType(i, j - 2) == TileType.DownRight || + GetAutoMir2TileType(i, j - 2) == TileType.Down)) + { + PutAutoTile(i, j, RandomAutoMir2Tile(TileType.Right)); + } + } + + //Check DOWN + if (GetAutoMir2TileType(i, j) != TileType.Down) + { + n1 = GetAutoMir2TileType(i - 2, j); + n2 = GetAutoMir2TileType(i + 2, j); + if ((n1 == TileType.Down || n1 == TileType.DownLeft || n1 == TileType.InUpLeft) && + (n2 == TileType.Down || n2 == TileType.DownRight || n2 == TileType.InUpRight) && + GetAutoMir2TileType(i, j + 2) < 0) + { + PutAutoTile(i, j, RandomAutoMir2Tile(TileType.Down)); + } + if (GetAutoMir2TileType(i, j) == TileType.DownRight && + ((GetAutoMir2TileType(i, j - 2) == TileType.Center && + GetAutoMir2TileType(i + 2, j - 2) == TileType.Center) || + GetAutoMir2TileType(i + 2, j) == TileType.DownLeft || + GetAutoMir2TileType(i + 2, j) == TileType.Left)) + { + PutAutoTile(i, j, RandomAutoMir2Tile(TileType.Down)); + } + if (GetAutoMir2TileType(i, j) == TileType.DownLeft && + ((GetAutoMir2TileType(i - 2, j - 2) == TileType.Center && + GetAutoMir2TileType(i, j - 2) == TileType.Center) || + GetAutoMir2TileType(i - 2, j) == TileType.DownRight || + GetAutoMir2TileType(i - 2, j) == TileType.Right)) + { + PutAutoTile(i, j, RandomAutoMir2Tile(TileType.Down)); + } + } + + //Check LEFT + if (GetAutoMir2TileType(i, j) != TileType.Left) + { + n1 = GetAutoMir2TileType(i, j - 2); + n2 = GetAutoMir2TileType(i, j + 2); + if ((n1 == TileType.Left || n1 == TileType.UpLeft || n1 == TileType.InUpRight) && + (n2 == TileType.Left || n2 == TileType.DownLeft || n2 == TileType.InDownRight) && + GetAutoMir2TileType(i - 2, j) < 0) + { + PutAutoTile(i, j, RandomAutoMir2Tile(TileType.Left)); + } + if (GetAutoMir2TileType(i, j) == TileType.DownLeft && + ((GetAutoMir2TileType(i + 2, j) == TileType.Center && + GetAutoMir2TileType(i + 2, j + 2) == TileType.Center) || + GetAutoMir2TileType(i, j + 2) == TileType.UpLeft || + GetAutoMir2TileType(i, j + 2) == TileType.Up)) + { + PutAutoTile(i, j, RandomAutoMir2Tile(TileType.Left)); + } + if (GetAutoMir2TileType(i, j) == TileType.UpLeft && + ((GetAutoMir2TileType(i + 2, j) == TileType.Center && + GetAutoMir2TileType(i + 2, j + 2) == TileType.Center) || + GetAutoMir2TileType(i, j - 2) == TileType.DownLeft || + GetAutoMir2TileType(i, j - 2) == TileType.Down)) + { + PutAutoTile(i, j, RandomAutoMir2Tile(TileType.Left)); + } + } + + //Check INUPRIGHT + n1 = GetAutoMir2TileType(i - 2, j); + n2 = GetAutoMir2TileType(i, j + 2); + if (GetAutoMir2TileType(i, j) != TileType.InDownLeft) + { + if ((n1 == TileType.DownLeft || n1 == TileType.Down || n1 == TileType.InUpLeft) && + (n2 == TileType.DownLeft || n2 == TileType.Left || n2 == TileType.InDownRight)) + { + //PutAutoTile(i, j, RandomAutoMir2Tile(TileType.InUpRight)); + PutAutoTile(i, j, RandomAutoMir2Tile(TileType.InDownLeft)); + } + } + + //Check INDOWNRIGHT + n1 = GetAutoMir2TileType(i, j - 2); + n2 = GetAutoMir2TileType(i - 2, j); + if (GetAutoMir2TileType(i, j) != TileType.InUpLeft) + { + if ((n1 == TileType.UpLeft || n1 == TileType.Left || n1 == TileType.InUpRight) && + (n2 == TileType.UpLeft || n2 == TileType.Up || n2 == TileType.InDownLeft)) + { + //PutAutoTile(i, j, RandomAutoMir2Tile(TileType.InDownRight)); + PutAutoTile(i, j, RandomAutoMir2Tile(TileType.InUpLeft)); + } + } + + //Check INDOWNLEFT + n1 = GetAutoMir2TileType(i, j - 2); + n2 = GetAutoMir2TileType(i + 2, j); + if (GetAutoMir2TileType(i, j) != TileType.InUpRight) + { + if ((n1 == TileType.UpRight || n1 == TileType.Right || n1 == TileType.InUpLeft) && + (n2 == TileType.UpRight || n2 == TileType.Up || n2 == TileType.InDownRight)) + { + //PutAutoTile(i, j, RandomAutoMir2Tile(TileType.InDownLeft)); + PutAutoTile(i, j, RandomAutoMir2Tile(TileType.InUpRight)); + } + } + + //Check INUPLEFT + n1 = GetAutoMir2TileType(i + 2, j); + n2 = GetAutoMir2TileType(i, j + 2); + if (GetAutoMir2TileType(i, j) != TileType.InDownRight) + { + if ((n1 == TileType.DownRight || n1 == TileType.Down || n1 == TileType.InUpRight) && + (n2 == TileType.DownRight || n2 == TileType.Right || n2 == TileType.InDownLeft)) + { + //PutAutoTile(i, j, RandomAutoMir2Tile(TileType.InUpLeft)); + PutAutoTile(i, j, RandomAutoMir2Tile(TileType.InDownRight)); + } + } + + //Check Paradox + if ((GetAutoMir2TileType(i - 2, j) == TileType.Down && + GetAutoMir2TileType(i, j - 2) == TileType.Right && + GetAutoMir2TileType(i + 2, j) == TileType.Up && + GetAutoMir2TileType(i, j + 2) == TileType.Left) || + (GetAutoMir2TileType(i - 2, j) == TileType.Up && + GetAutoMir2TileType(i, j + 2) == TileType.Right && + GetAutoMir2TileType(i, j - 2) == TileType.Left && + GetAutoMir2TileType(i + 2, j) == TileType.Down)) + { + PutAutoTile(i, j, RandomAutoMir2Tile(TileType.Center)); + DrawAutoMir2TileSide(i, j); + } + } + } + } + } + } + + private void DrawAutoMir3TilePattern(int iX, int iY) + { + int i, j, c; + TileType n1, n2; + + for (j = iY - AutoTileRange; j <= iY + AutoTileRange; j += 2) //间隔为2 The interval is 2 + { + for (i = iX - AutoTileRange; i <= iX + AutoTileRange; i += 2) //间隔为2, 其他算法跟小地砖一样 The interval is 2, and other algorithms are the same as those for small floor tiles. + { + if (i > 1 && j > 1) + { + if (GetAutoMir3TileType(i, j) > 0) + { + //Check CENTER + if (GetAutoMir3TileType(i, j) != TileType.Center) + { + c = 0; + if (GetAutoMir3TileType(i, j - 2) >= 0) + { + ++c; + } + if (GetAutoMir3TileType(i + 2, j - 2) >= 0) + { + ++c; + } + if (GetAutoMir3TileType(i + 2, j) >= 0) + { + ++c; + } + if (GetAutoMir3TileType(i + 2, j + 2) >= 0) + { + ++c; + } + if (GetAutoMir3TileType(i, j + 2) >= 0) + { + ++c; + } + if (GetAutoMir3TileType(i - 2, j + 2) >= 0) + { + ++c; + } + if (GetAutoMir3TileType(i - 2, j) >= 0) + { + ++c; + } + if (GetAutoMir3TileType(i - 2, j - 2) >= 0) + { + ++c; + } + if (c >= 8) + { + PutAutoTile(i, j, RandomAutoMir3Tile(TileType.Center)); + } + } + + //Check UP + if (GetAutoMir3TileType(i, j) != TileType.Up) + { + n1 = GetAutoMir3TileType(i - 2, j); + n2 = GetAutoMir3TileType(i + 2, j); + if ((n1 == TileType.Up || n1 == TileType.UpLeft || n1 == TileType.InDownLeft) && + (n2 == TileType.Up || n2 == TileType.UpRight || n2 == TileType.InDownRight) && + GetAutoMir3TileType(i, j - 2) < 0) + { + PutAutoTile(i, j, RandomAutoMir3Tile(TileType.Up)); + } + if (GetAutoMir3TileType(i, j) == TileType.UpRight && + ((GetAutoMir3TileType(i, j + 2) == TileType.Center && + GetAutoMir3TileType(i + 2, j + 2) == TileType.Center) || + GetAutoMir3TileType(i + 2, j) == TileType.UpLeft || + GetAutoMir3TileType(i + 2, j) == TileType.Left)) + { + PutAutoTile(i, j, RandomAutoMir3Tile(TileType.Up)); + } + if (GetAutoMir3TileType(i, j) == TileType.UpLeft && + ((GetAutoMir3TileType(i, j + 2) == TileType.Center && + GetAutoMir3TileType(i - 2, j + 2) == TileType.Center) || + GetAutoMir3TileType(i - 2, j) == TileType.UpRight || + GetAutoMir3TileType(i - 2, j) == TileType.Right)) + { + PutAutoTile(i, j, RandomAutoMir3Tile(TileType.Up)); + } + } + + //Check RIGHT + if (GetAutoMir3TileType(i, j) != TileType.Right) + { + n1 = GetAutoMir3TileType(i, j - 2); + n2 = GetAutoMir3TileType(i, j + 2); + if ((n1 == TileType.Right || n1 == TileType.UpRight || n1 == TileType.InUpLeft) && + (n2 == TileType.Right || n2 == TileType.DownRight || n2 == TileType.InDownLeft) && + GetAutoMir3TileType(i + 2, j) < 0) + { + PutAutoTile(i, j, RandomAutoMir3Tile(TileType.Right)); + } + if (GetAutoMir3TileType(i, j) == TileType.DownRight && + ((GetAutoMir3TileType(i - 2, j) == TileType.Center && + GetAutoMir3TileType(i - 2, j + 2) == TileType.Center) || + GetAutoMir3TileType(i, j + 2) == TileType.UpRight || + GetAutoMir3TileType(i, j + 2) == TileType.Up)) + { + PutAutoTile(i, j, RandomAutoMir3Tile(TileType.Right)); + } + if (GetAutoMir3TileType(i, j) == TileType.UpRight && + ((GetAutoMir3TileType(i - 2, j) == TileType.Center && + GetAutoMir3TileType(i - 2, j - 2) == TileType.Center) || + GetAutoMir3TileType(i, j - 2) == TileType.DownRight || + GetAutoMir3TileType(i, j - 2) == TileType.Down)) + { + PutAutoTile(i, j, RandomAutoMir3Tile(TileType.Right)); + } + } + + //Check DOWN + if (GetAutoMir3TileType(i, j) != TileType.Down) + { + n1 = GetAutoMir3TileType(i - 2, j); + n2 = GetAutoMir3TileType(i + 2, j); + if ((n1 == TileType.Down || n1 == TileType.DownLeft || n1 == TileType.InUpLeft) && + (n2 == TileType.Down || n2 == TileType.DownRight || n2 == TileType.InUpRight) && + GetAutoMir3TileType(i, j + 2) < 0) + { + PutAutoTile(i, j, RandomAutoMir3Tile(TileType.Down)); + } + if (GetAutoMir3TileType(i, j) == TileType.DownRight && + ((GetAutoMir3TileType(i, j - 2) == TileType.Center && + GetAutoMir3TileType(i + 2, j - 2) == TileType.Center) || + GetAutoMir3TileType(i + 2, j) == TileType.DownLeft || + GetAutoMir3TileType(i + 2, j) == TileType.Left)) + { + PutAutoTile(i, j, RandomAutoMir3Tile(TileType.Down)); + } + if (GetAutoMir3TileType(i, j) == TileType.DownLeft && + ((GetAutoMir3TileType(i - 2, j - 2) == TileType.Center && + GetAutoMir3TileType(i, j - 2) == TileType.Center) || + GetAutoMir3TileType(i - 2, j) == TileType.DownRight || + GetAutoMir3TileType(i - 2, j) == TileType.Right)) + { + PutAutoTile(i, j, RandomAutoMir3Tile(TileType.Down)); + } + } + + //Check LEFT + if (GetAutoMir3TileType(i, j) != TileType.Left) + { + n1 = GetAutoMir3TileType(i, j - 2); + n2 = GetAutoMir3TileType(i, j + 2); + if ((n1 == TileType.Left || n1 == TileType.UpLeft || n1 == TileType.InUpRight) && + (n2 == TileType.Left || n2 == TileType.DownLeft || n2 == TileType.InDownRight) && + GetAutoMir3TileType(i - 2, j) < 0) + { + PutAutoTile(i, j, RandomAutoMir3Tile(TileType.Left)); + } + if (GetAutoMir3TileType(i, j) == TileType.DownLeft && + ((GetAutoMir3TileType(i + 2, j) == TileType.Center && + GetAutoMir3TileType(i + 2, j + 2) == TileType.Center) || + GetAutoMir3TileType(i, j + 2) == TileType.UpLeft || + GetAutoMir3TileType(i, j + 2) == TileType.Up)) + { + PutAutoTile(i, j, RandomAutoMir3Tile(TileType.Left)); + } + if (GetAutoMir3TileType(i, j) == TileType.UpLeft && + ((GetAutoMir3TileType(i + 2, j) == TileType.Center && + GetAutoMir3TileType(i + 2, j + 2) == TileType.Center) || + GetAutoMir3TileType(i, j - 2) == TileType.DownLeft || + GetAutoMir3TileType(i, j - 2) == TileType.Down)) + { + PutAutoTile(i, j, RandomAutoMir3Tile(TileType.Left)); + } + } + + //Check INUPRIGHT + n1 = GetAutoMir3TileType(i - 2, j); + n2 = GetAutoMir3TileType(i, j + 2); + if (GetAutoMir3TileType(i, j) != TileType.InDownLeft) + { + if ((n1 == TileType.DownLeft || n1 == TileType.Down || n1 == TileType.InUpLeft) && + (n2 == TileType.DownLeft || n2 == TileType.Left || n2 == TileType.InDownRight)) + { + //PutAutoTile(i, j, RandomAutoMir3Tile(TileType.InUpRight)); + PutAutoTile(i, j, RandomAutoMir3Tile(TileType.InDownLeft)); + } + } + + //Check INDOWNRIGHT + n1 = GetAutoMir3TileType(i, j - 2); + n2 = GetAutoMir3TileType(i - 2, j); + if (GetAutoMir3TileType(i, j) != TileType.InUpLeft) + { + if ((n1 == TileType.UpLeft || n1 == TileType.Left || n1 == TileType.InUpRight) && + (n2 == TileType.UpLeft || n2 == TileType.Up || n2 == TileType.InDownLeft)) + { + //PutAutoTile(i, j, RandomAutoMir3Tile(TileType.InDownRight)); + PutAutoTile(i, j, RandomAutoMir3Tile(TileType.InUpLeft)); + } + } + + //Check INDOWNLEFT + n1 = GetAutoMir3TileType(i, j - 2); + n2 = GetAutoMir3TileType(i + 2, j); + if (GetAutoMir3TileType(i, j) != TileType.InUpRight) + { + if ((n1 == TileType.UpRight || n1 == TileType.Right || n1 == TileType.InUpLeft) && + (n2 == TileType.UpRight || n2 == TileType.Up || n2 == TileType.InDownRight)) + { + //PutAutoTile(i, j, RandomAutoMir3Tile(TileType.InDownLeft)); + PutAutoTile(i, j, RandomAutoMir3Tile(TileType.InUpRight)); + } + } + + //Check INUPLEFT + n1 = GetAutoMir3TileType(i + 2, j); + n2 = GetAutoMir3TileType(i, j + 2); + if (GetAutoMir3TileType(i, j) != TileType.InDownRight) + { + if ((n1 == TileType.DownRight || n1 == TileType.Down || n1 == TileType.InUpRight) && + (n2 == TileType.DownRight || n2 == TileType.Right || n2 == TileType.InDownLeft)) + { + //PutAutoTile(i, j, RandomAutoMir3Tile(TileType.InUpLeft)); + PutAutoTile(i, j, RandomAutoMir3Tile(TileType.InDownRight)); + } + } + + //Check Paradox + if ((GetAutoMir3TileType(i - 2, j) == TileType.Down && + GetAutoMir3TileType(i, j - 2) == TileType.Right && + GetAutoMir3TileType(i + 2, j) == TileType.Up && + GetAutoMir3TileType(i, j + 2) == TileType.Left) || + (GetAutoMir3TileType(i - 2, j) == TileType.Up && + GetAutoMir3TileType(i, j + 2) == TileType.Right && + GetAutoMir3TileType(i, j - 2) == TileType.Left && + GetAutoMir3TileType(i + 2, j) == TileType.Down)) + { + PutAutoTile(i, j, RandomAutoMir3Tile(TileType.Center)); + DrawAutoMir3TileSide(i, j); + } + } + } + } + } + } + + private void DrawAutoSmTilePattern(int iX, int iY) + { + //这个算法就比较复杂了。。他是通过检查周边的地砖的类型来自动化绘制的, 根据已经绘制的地砖来动态调整和增加需要绘制的地砖, 从而达到自动绘制的目的 + //This algorithm is more complicated. . It automatically draws by checking the types of surrounding floor tiles, and dynamically adjusts and adds the floor tiles that need to be drawn based on the already drawn floor tiles, thereby achieving the purpose of automatic drawing. + int i, j, c; + TileType n1, n2; + for (j = iY - AutoTileRange; j <= iY + AutoTileRange; ++j) + { + for (i = iX - AutoTileRange; i <= iX + AutoTileRange; ++i) + //根据当前鼠标所指格子的周边m_iAutoTileRange范围的格子开始检查调整 + //Start checking and adjusting based on the cells in the m_iAutoTileRange range surrounding the cell currently pointed by the mouse. + { + if (i > 0 && j > 0) //首先去确保检查的格子的合法性 First, make sure the checked grid is legal. + { + if (GetAutoSmTileType(i, j) > 0) //然后获取格子的小地砖类型, 是否是当前样式的格子, 如果是则需要检查调整 Then get the small floor tile type of the grid, whether it is the grid of the current style, if so, you need to check and adjust + { + //Check CENTER + if (GetAutoSmTileType(i, j) != TileType.Center) //首先检查是否需要调整为中间类型的格子 First check whether you need to adjust to an intermediate type of grid + { + c = 0; + if (GetAutoSmTileType(i, j - 1) >= 0) + { + ++c; + } + if (GetAutoSmTileType(i + 1, j - 1) >= 0) + { + ++c; + } + if (GetAutoSmTileType(i + 1, j) >= 0) + { + ++c; + } + if (GetAutoSmTileType(i + 1, j + 1) >= 0) + { + ++c; + } + if (GetAutoSmTileType(i, j + 1) >= 0) + { + ++c; + } + if (GetAutoSmTileType(i - 1, j + 1) >= 0) + { + ++c; + } + if (GetAutoSmTileType(i - 1, j) >= 0) + { + ++c; + } + if (GetAutoSmTileType(i - 1, j - 1) >= 0) + { + ++c; + } + if (c >= 8) //只要是被8个格子包围的格子就要被调整为中间类型的格子 As long as it is a grid surrounded by 8 grids, it will be adjusted to an intermediate type of grid. + { + PutAutoSmTile(i, j, RandomAutoSmTile(TileType.Center)); + } + } + + //Check UP + if (GetAutoSmTileType(i, j) != TileType.Up) //然后检查是否需要调整为上类型的格子。。 Then check whether it needs to be adjusted to the above type of grid. + { + //下面的算法有3种情况需要调整为上的格子。。。大家可以自己看看。。There are three situations in which the following algorithm needs to be adjusted to the upper grid. . . You can take a look for yourself. . + n1 = GetAutoSmTileType(i - 1, j); + n2 = GetAutoSmTileType(i + 1, j); + if ((n1 == TileType.Up || n1 == TileType.UpLeft || n1 == TileType.InDownLeft) && + (n2 == TileType.Up || n2 == TileType.UpRight || n2 == TileType.InDownRight) && + GetAutoSmTileType(i, j - 1) < 0) + { + PutAutoSmTile(i, j, RandomAutoSmTile(TileType.Up)); + } + if (GetAutoSmTileType(i, j) == TileType.UpRight && + ((GetAutoSmTileType(i, j + 1) == TileType.Center && + GetAutoSmTileType(i + 1, j + 1) == TileType.Center) || + GetAutoSmTileType(i + 1, j) == TileType.UpLeft || + GetAutoSmTileType(i + 1, j) == TileType.Left)) + { + PutAutoSmTile(i, j, RandomAutoSmTile(TileType.Up)); + } + if (GetAutoSmTileType(i, j) == TileType.UpLeft && + ((GetAutoSmTileType(i, j + 1) == TileType.Center && + GetAutoSmTileType(i - 1, j + 1) == TileType.Center) || + GetAutoSmTileType(i - 1, j) == TileType.UpRight || + GetAutoSmTileType(i - 1, j) == TileType.Right)) + { + PutAutoSmTile(i, j, RandomAutoSmTile(TileType.Up)); + } + } + + //Check RIGHT //然后检查是否需要调整为右类型的格子。。Then check whether it needs to be adjusted to the right type of grid. . + if (GetAutoSmTileType(i, j) != TileType.Right) + { + n1 = GetAutoSmTileType(i, j - 1); + n2 = GetAutoSmTileType(i, j + 1); + if ((n1 == TileType.Right || n1 == TileType.UpRight || n1 == TileType.InUpLeft) && + (n2 == TileType.Right || n2 == TileType.DownRight || n2 == TileType.InDownLeft) && + GetAutoSmTileType(i + 1, j) < 0) + { + PutAutoSmTile(i, j, RandomAutoSmTile(TileType.Right)); + } + if (GetAutoSmTileType(i, j) == TileType.DownRight && + ((GetAutoSmTileType(i - 1, j) == TileType.Center && + GetAutoSmTileType(i - 1, j + 1) == TileType.Center) || + GetAutoSmTileType(i, j + 1) == TileType.UpRight || + GetAutoSmTileType(i, j + 1) == TileType.Up)) + { + PutAutoSmTile(i, j, RandomAutoSmTile(TileType.Right)); + } + if (GetAutoSmTileType(i, j) == TileType.UpRight && + ((GetAutoSmTileType(i - 1, j) == TileType.Center && + GetAutoSmTileType(i - 1, j - 1) == TileType.Center) || + GetAutoSmTileType(i, j - 1) == TileType.DownRight || + GetAutoSmTileType(i, j - 1) == TileType.Down)) + { + PutAutoSmTile(i, j, RandomAutoSmTile(TileType.Right)); + } + } + + //Check DOWN //然后检查是否需要调整为下类型的格子。。Then check whether you need to adjust it to the following type of grid. . + if (GetAutoSmTileType(i, j) != TileType.Down) + { + n1 = GetAutoSmTileType(i - 1, j); + n2 = GetAutoSmTileType(i + 1, j); + if ((n1 == TileType.Down || n1 == TileType.DownLeft || n1 == TileType.InUpLeft) && + (n2 == TileType.Down || n2 == TileType.DownRight || n2 == TileType.InUpRight) && + GetAutoSmTileType(i, j + 1) < 0) + { + PutAutoSmTile(i, j, RandomAutoSmTile(TileType.Down)); + } + if (GetAutoSmTileType(i, j) == TileType.DownRight && + ((GetAutoSmTileType(i, j - 1) == TileType.Center && + GetAutoSmTileType(i + 1, j - 1) == TileType.Center) || + GetAutoSmTileType(i + 1, j) == TileType.DownLeft || + GetAutoSmTileType(i + 1, j) == TileType.Left)) + { + PutAutoSmTile(i, j, RandomAutoSmTile(TileType.Down)); + } + if (GetAutoSmTileType(i, j) == TileType.DownLeft && + ((GetAutoSmTileType(i - 1, j - 1) == TileType.Center && + GetAutoSmTileType(i, j - 1) == TileType.Center) || + GetAutoSmTileType(i - 1, j) == TileType.DownRight || + GetAutoSmTileType(i - 1, j) == TileType.Right)) + { + PutAutoSmTile(i, j, RandomAutoSmTile(TileType.Down)); + } + } + + //Check LEFT //然后检查是否需要调整为左类型的格子。。Then check whether it needs to be adjusted to the left type of grid. . + if (GetAutoSmTileType(i, j) != TileType.Left) + { + n1 = GetAutoSmTileType(i, j - 1); + n2 = GetAutoSmTileType(i, j + 1); + if ((n1 == TileType.Left || n1 == TileType.UpLeft || n1 == TileType.InUpRight) && + (n2 == TileType.Left || n2 == TileType.DownLeft || n2 == TileType.InDownRight) && + GetAutoSmTileType(i - 1, j) < 0) + { + PutAutoSmTile(i, j, RandomAutoSmTile(TileType.Left)); + } + if (GetAutoSmTileType(i, j) == TileType.DownLeft && + ((GetAutoSmTileType(i + 1, j) == TileType.Center && + GetAutoSmTileType(i + 1, j + 1) == TileType.Center) || + GetAutoSmTileType(i, j + 1) == TileType.UpLeft || + GetAutoSmTileType(i, j + 1) == TileType.Up)) + { + PutAutoSmTile(i, j, RandomAutoSmTile(TileType.Left)); + } + if (GetAutoSmTileType(i, j) == TileType.UpLeft && + ((GetAutoSmTileType(i + 1, j) == TileType.Center && + GetAutoSmTileType(i + 1, j + 1) == TileType.Center) || + GetAutoSmTileType(i, j - 1) == TileType.DownLeft || + GetAutoSmTileType(i, j - 1) == TileType.Down)) + { + PutAutoSmTile(i, j, RandomAutoSmTile(TileType.Left)); + } + } + + //Check INUPRIGHT //然后检查是否需要调整为内右上类型的格子。。Then check whether it needs to be adjusted to the inner upper right type of grid. . + if (GetAutoSmTileType(i, j) != TileType.InUpRight) + { + n1 = GetAutoSmTileType(i - 1, j); + n2 = GetAutoSmTileType(i, j + 1); + if ((n1 == TileType.DownLeft || n1 == TileType.Down || n1 == TileType.InUpLeft) && + (n2 == TileType.DownLeft || n2 == TileType.Left || n2 == TileType.InDownRight)) + { + PutAutoSmTile(i, j, RandomAutoSmTile(TileType.InUpRight)); + } + } + + //Check INDOWNRIGHT //然后检查是否需要调整为内右下类型的格子。。Then check whether you need to adjust it to the inner and lower right type of grid. . + if (GetAutoSmTileType(i, j) != TileType.InDownRight) + { + n1 = GetAutoSmTileType(i, j - 1); + n2 = GetAutoSmTileType(i - 1, j); + if ((n1 == TileType.UpLeft || n1 == TileType.Left || n1 == TileType.InUpRight) && + (n2 == TileType.UpLeft || n2 == TileType.Up || n2 == TileType.InDownLeft)) + { + PutAutoSmTile(i, j, RandomAutoSmTile(TileType.InDownRight)); + } + } + + //Check INDOWNLEFT //然后检查是否需要调整为内左下类型的格子。。Then check whether it needs to be adjusted to the inner lower left type of grid. . + if (GetAutoSmTileType(i, j) != TileType.InDownLeft) + { + n1 = GetAutoSmTileType(i, j - 1); + n2 = GetAutoSmTileType(i + 1, j); + if ((n1 == TileType.UpRight || n1 == TileType.Right || n1 == TileType.InUpLeft) && + (n2 == TileType.UpRight || n2 == TileType.Up || n2 == TileType.InDownRight)) + { + PutAutoSmTile(i, j, RandomAutoSmTile(TileType.InDownLeft)); + } + } + + //Check INUPLEFT //然后检查是否需要调整为内左上类型的格子。。Then check whether it needs to be adjusted to the inner upper left type of grid. . + if (GetAutoSmTileType(i, j) != TileType.InUpLeft) + { + n1 = GetAutoSmTileType(i + 1, j); + n2 = GetAutoSmTileType(i, j + 1); + if ((n1 == TileType.DownRight || n1 == TileType.Down || n1 == TileType.InUpRight) && + (n2 == TileType.DownRight || n2 == TileType.Right || n2 == TileType.InDownLeft)) + { + PutAutoSmTile(i, j, RandomAutoSmTile(TileType.InUpLeft)); + } + } + + //四个外角是不用检查的哦。。。 There is no need to check the four outer corners. . . + + //Check Paradox //最后检查完后看看是否出现了矛盾的地方, 假如出现了, 可能就需要增加地砖来调和这种矛盾, 所以在这个矛盾的地方的周边绘制一个样式 + //After the final inspection, see if there is any contradiction. If so, you may need to add floor tiles to reconcile the contradiction, so draw a pattern around the contradiction. + if ((GetAutoSmTileType(i - 1, j) == TileType.Down && + GetAutoSmTileType(i, j - 1) == TileType.Right && + GetAutoSmTileType(i + 1, j) == TileType.Up && + GetAutoSmTileType(i, j + 1) == TileType.Left) || + (GetAutoSmTileType(i - 1, j) == TileType.Up && + GetAutoSmTileType(i, j + 1) == TileType.Right && + GetAutoSmTileType(i, j - 1) == TileType.Left && + GetAutoSmTileType(i + 1, j) == TileType.Down)) + { + PutAutoSmTile(i, j, RandomAutoSmTile(TileType.Center)); + DrawAutoSmTileSide(i, j); + } + } + } + } + } //最后检查完一趟, 假如发现没有地砖需要变化调整, 则说明调整完毕了。。算法比较复杂, 大家可以慢慢看代码搞清楚, 调整地砖也不止这一种算法, 大家有兴趣的可以想想自己的一些算法来绘制自动化的样式 + //After the final inspection, if it is found that no floor tiles need to be changed or adjusted, it means that the adjustment is completed. . The algorithm is quite complicated. You can slowly read the code to figure it out. There is more than one algorithm for adjusting floor tiles. If you are interested, you can think of some of your own algorithms to draw automated styles. + } + + private Bitmap GetTilesPreview(ListItem selectListView, int index) + { + var preview = new Bitmap(6*CellWidth, 6*CellHeight); + var graphics = Graphics.FromImage(preview); + graphics.InterpolationMode = InterpolationMode.Low; + switch (selectListItem.Version) + { + case (byte) MirVerSion.WemadeMir2: + case (byte) MirVerSion.ShandaMir2: + if ((selectListView.Text.IndexOf("SmTiles", StringComparison.Ordinal) > -1) || + (selectListView.Text.IndexOf("Smtiles", StringComparison.Ordinal) > -1)) + { + var i = 0; + preview = new Bitmap(3*CellWidth, 3*CellHeight); + graphics = Graphics.FromImage(preview); + graphics.InterpolationMode = InterpolationMode.Low; + for (var y = 0; y < 3; y++) + { + drawY = y*CellHeight; + for (var x = 0; x < 3; x++) + { + drawX = x*CellWidth; + if (index*smTileBlock + smTilesPreviewIndex[i] >= + Libraries.MapLibs[selectListView.Value].Images.Count) + { + continue; + } + Libraries.MapLibs[selectListView.Value].CheckImage(index*smTileBlock + + smTilesPreviewIndex[i]); + var mi = + Libraries.MapLibs[selectListView.Value].Images[ + index*smTileBlock + smTilesPreviewIndex[i]]; + if (mi.Image == null) + { + continue; + } + var destRect = new Rectangle(drawX, drawY, mi.Width, mi.Height); + var srcRect = new Rectangle(0, 0, mi.Width, mi.Height); + graphics.DrawImage(mi.Image, destRect, srcRect, GraphicsUnit.Pixel); + Libraries.MapLibs[libIndex].Images[index] = null; + i++; + } + } + } + else if (selectListView.Text.IndexOf("Tiles", StringComparison.Ordinal) > -1) + { + var i = 0; + preview = new Bitmap(6*CellWidth, 6*CellHeight); + graphics = Graphics.FromImage(preview); + graphics.InterpolationMode = InterpolationMode.Low; + for (var y = 0; y < 3; y++) + { + drawY = y*2*CellHeight; + for (var x = 0; x < 3; x++) + { + drawX = x*2*CellWidth; + if (index*Mir2BigTileBlock + Mir2BigTilesPreviewIndex[i] >= + Libraries.MapLibs[selectListView.Value].Images.Count) + { + continue; + } + Libraries.MapLibs[selectListView.Value].CheckImage(index*Mir2BigTileBlock + + Mir2BigTilesPreviewIndex[i]); + var mi = + Libraries.MapLibs[selectListView.Value].Images[ + index*Mir2BigTileBlock + Mir2BigTilesPreviewIndex[i]]; + if (mi.Image == null) + { + continue; + } + var destRect = new Rectangle(drawX, drawY, mi.Width, mi.Height); + var srcRect = new Rectangle(0, 0, mi.Width, mi.Height); + graphics.DrawImage(mi.Image, destRect, srcRect, GraphicsUnit.Pixel); + Libraries.MapLibs[libIndex].Images[index] = null; + i++; + } + } + } + break; + case (byte) MirVerSion.WemadeMir3: + case (byte) MirVerSion.ShandaMir3: + if ((selectListView.Text.IndexOf("SmTiles", StringComparison.Ordinal) > -1) || + (selectListView.Text.IndexOf("Smtiles", StringComparison.Ordinal) > -1)) + { + var i = 0; + preview = new Bitmap(3*CellWidth, 3*CellHeight); + graphics = Graphics.FromImage(preview); + graphics.InterpolationMode = InterpolationMode.Low; + + for (var y = 0; y < 3; y++) + { + drawY = y*CellHeight; + for (var x = 0; x < 3; x++) + { + drawX = x*CellWidth; + if (index*smTileBlock + smTilesPreviewIndex[i] >= + Libraries.MapLibs[selectListView.Value].Images.Count) + { + continue; + } + Libraries.MapLibs[selectListView.Value].CheckImage(index*smTileBlock + + smTilesPreviewIndex[i]); + var mi = + Libraries.MapLibs[selectListView.Value].Images[ + index*smTileBlock + smTilesPreviewIndex[i]]; + if (mi.Image == null) + { + continue; + } + var destRect = new Rectangle(drawX, drawY, mi.Width, mi.Height); + var srcRect = new Rectangle(0, 0, mi.Width, mi.Height); + graphics.DrawImage(mi.Image, destRect, srcRect, GraphicsUnit.Pixel); + Libraries.MapLibs[libIndex].Images[index] = null; + i++; + } + } + } + else if (selectListView.Text.IndexOf("Tiles30", StringComparison.Ordinal) > -1) + { + var i = 0; + int flag; + if (Libraries.MapLibs[selectListView.Value].Images.Count%10 != 0) + { + flag = (Libraries.MapLibs[selectListView.Value].Images.Count + 1)/Mir3BigTileBlock; + } + else + { + flag = Libraries.MapLibs[selectListView.Value].Images.Count/Mir3BigTileBlock; + } + int[] bigTilesIndex; + int tempIndex; + preview = new Bitmap(6*CellWidth, 6*CellHeight); + graphics = Graphics.FromImage(preview); + graphics.InterpolationMode = InterpolationMode.Low; + if (index < flag) + { + bigTilesIndex = Mir3BigTilesPreviewIndex1; + } + else + { + bigTilesIndex = Mir3BigTilesPreviewIndex2; + } + if (index < flag) + { + tempIndex = index; + } + else + { + tempIndex = index - flag; + } + for (var y = 0; y < 3; y++) + { + drawY = y*2*CellHeight; + for (var x = 0; x < 3; x++) + { + drawX = x*2*CellWidth; + if (tempIndex*Mir3BigTileBlock + bigTilesIndex[i] >= + Libraries.MapLibs[selectListView.Value].Images.Count) + { + continue; + } + Libraries.MapLibs[selectListView.Value].CheckImage(tempIndex*Mir3BigTileBlock + + bigTilesIndex[i]); + var mi = + Libraries.MapLibs[selectListView.Value].Images[ + tempIndex*Mir3BigTileBlock + bigTilesIndex[i]]; + if (mi.Image == null) + { + continue; + } + var destRect = new Rectangle(drawX, drawY, mi.Width, mi.Height); + var srcRect = new Rectangle(0, 0, mi.Width, mi.Height); + graphics.DrawImage(mi.Image, destRect, srcRect, GraphicsUnit.Pixel); + Libraries.MapLibs[libIndex].Images[tempIndex] = null; + i++; + } + } + } + break; + } + return preview; + } + + private void TileslistView_RetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e) + { + int index; + + if (_tilesIndexList.TryGetValue(e.ItemIndex, out index)) + { + e.Item = new ListViewItem {ImageIndex = index, Text = e.ItemIndex.ToString()}; + return; + } + + _tilesIndexList.Add(e.ItemIndex, TilesImageList.Images.Count); + + TilesImageList.Images.Add(GetTilesPreview(selectListItem, e.ItemIndex)); + e.Item = new ListViewItem {ImageIndex = index, Text = e.ItemIndex.ToString()}; + Libraries.MapLibs[selectListItem.Value].Images[e.ItemIndex] = null; + } + + private void TileslistView_SelectedIndexChanged(object sender, EventArgs e) + { + if (TileslistView.SelectedIndices.Count > 0) + { + picTile.Image = GetTilesPreview(selectListItem, TileslistView.SelectedIndices[0]); + selectTilesIndex = TileslistView.SelectedIndices[0]; + } + } + + private int RandomAutoMir2Tile(TileType tileType) + { + if (selectTilesIndex < 0) return -1; + + switch (tileType) + { + case TileType.Center: + return selectTilesIndex*Mir2BigTileBlock + random.Next(5); + case TileType.Up: + return selectTilesIndex*Mir2BigTileBlock + random.Next(15, 17); + case TileType.Down: + return selectTilesIndex*Mir2BigTileBlock + random.Next(17, 19); + case TileType.Left: + if (random.Next(2) == 0) + { + return selectTilesIndex*Mir2BigTileBlock + 20; + } + return selectTilesIndex*Mir2BigTileBlock + 22; + case TileType.Right: + if (random.Next(2) == 0) + { + return selectTilesIndex*Mir2BigTileBlock + 21; + } + return selectTilesIndex*Mir2BigTileBlock + 23; + case TileType.UpLeft: + return selectTilesIndex*Mir2BigTileBlock + 5; + + case TileType.UpRight: + return selectTilesIndex*Mir2BigTileBlock + 6; + + case TileType.DownLeft: + return selectTilesIndex*Mir2BigTileBlock + 7; + case TileType.DownRight: + return selectTilesIndex*Mir2BigTileBlock + 8; + + case TileType.InUpLeft: + return selectTilesIndex*Mir2BigTileBlock + 10; + case TileType.InUpRight: + return selectTilesIndex*Mir2BigTileBlock + 11; + case TileType.InDownLeft: + return selectTilesIndex*Mir2BigTileBlock + 12; + case TileType.InDownRight: + return selectTilesIndex*Mir2BigTileBlock + 13; + } + return -1; + } + + private void menuClearMap_Click(object sender, EventArgs e) + { + DialogResult dr = MessageBox.Show("Are You sure you want to clear map tiles?", "Clear Map", MessageBoxButtons.OKCancel); + + if (dr == DialogResult.OK) + { + if (M2CellInfo != null) + { + for (var x = 0; x < mapWidth; x++) + { + for (var y = 0; y < mapHeight; y++) + { + M2CellInfo[x, y] = new CellInfo(); + } + } + } + } + } + + private void setScrollBar() + { + OffSetX = MapPanel.Width / (CellWidth * zoomMIN / zoomMAX); + OffSetY = MapPanel.Height / (CellHeight * zoomMIN / zoomMAX); + + if (mapWidth - OffSetX >= 0) hScrollBar.Maximum = mapWidth - OffSetX; + else hScrollBar.Maximum = 0; + if (mapHeight - OffSetY >= 0) vScrollBar.Maximum = mapHeight - OffSetY; + else vScrollBar.Maximum = 0; + + if (mapPoint.X >= 0) + { + if (mapPoint.X <= mapWidth) hScrollBar.Value = mapPoint.X; + else hScrollBar.Value = mapWidth - 1; + } + else hScrollBar.Value = 0; + + if (mapPoint.Y >= 0) + { + if (mapPoint.Y <= mapHeight) vScrollBar.Value = mapPoint.Y; + else vScrollBar.Value = mapHeight - 1; + } + else vScrollBar.Value = 0; + } + + private void menuNew_Click(object sender, EventArgs e) + { + NewMap(); + } + + private void NewMap() + { + var frm = new NewFileFrm(SetMapSize); + if (frm.ShowDialog() == DialogResult.OK) + { + M2CellInfo = new CellInfo[mapWidth, mapHeight]; + for (var x = 0; x < mapWidth; x++) + { + for (var y = 0; y < mapHeight; y++) + { + M2CellInfo[x, y] = new CellInfo(); + } + } + mapPoint = new Point(0, 0); + setScrollBar(); + } + + } + + private void menuOpen_Click(object sender, EventArgs e) + { + OpenMap(); + } + + private void OpenMap() + { + ClearImage(); + var openFileDialog = new OpenFileDialog(); + if (openFileDialog.ShowDialog() == DialogResult.OK) + { + var filePath = openFileDialog.FileName; + map = new MapReader(filePath); + M2CellInfo = map.MapCells; + mapPoint = new Point(0, 0); + SetMapSize(map.Width, map.Height); + mapFileName = openFileDialog.FileName; + } + } + + private void OpenMapFromTree(string path) + { + ClearImage(); + + var filePath = path; + map = new MapReader(filePath); + M2CellInfo = map.MapCells; + mapPoint = new Point(0, 0); + SetMapSize(map.Width, map.Height); + mapFileName = path; + + } + + private void menuSave_Click(object sender, EventArgs e) + { + Save(); + } + + private void menuUndo_Click(object sender, EventArgs e) + { + UnDo(); + } + + private void menuRedo_Click(object sender, EventArgs e) + { + ReDo(); + } + + private void menuZoomIn_Click(object sender, EventArgs e) + { + ZoomIn(); + } + + private void ZoomIn() + { + if (map != null) + { + EnlargeZoom(); + SetMapSize(mapWidth, mapHeight); + } + + } + + private void menuZoomOut_Click(object sender, EventArgs e) + { + ZoomOut(); + } + + private void ZoomOut() + { + if (map != null) + { + NarrowZoom(); + SetMapSize(mapWidth, mapHeight); + } + } + + + //#region Tool panel buttons + ////Buttons for the Tool panel + //private void btn_Move_Click(object sender, EventArgs e) + //{ + // layer = Layer.None; + //} + + //private void btn_Select_Click(object sender, EventArgs e) + //{ + // layer = Layer.GraspingMir2Front; + //} + + + + //#endregion + + private void hScrollBar_Scroll(object sender, ScrollEventArgs e) + { + Jump(hScrollBar.Value, mapPoint.Y); + } + + private void vScrollBar_Scroll(object sender, ScrollEventArgs e) + { + Jump(mapPoint.X , vScrollBar.Value); + } + + private void menu_DeleteSelectedCellDataOnAll3Layers_Click(object sender, EventArgs e) + { + Point[] points; + if (M2CellInfo != null) + { + // DialogResult dr = MessageBox.Show("Are You Sure You Want to Delete Selected Cell Data On All 3 Layers?" + "\n" + "The Operation Cannot Be UnDone!", "Delete", MessageBoxButtons.OKCancel); + + // if (dr == DialogResult.OK) + { + //this should swap the points if point 2 is not a higher value + if (p1.X > p2.X) + { + p1.X += p2.X; + p2.X = p1.X - p2.X - 1; + p1.X -= p2.X; + } + + if (p1.Y > p2.Y) + { + p1.Y += p2.Y; + p2.Y = p1.Y - p2.Y - 1; + p1.Y -= p2.Y; + } + + for (var x = p1.X; x <= p2.X; x++) + { + for (var y = p1.Y; y <= p2.Y; y++) + { + points = new[] { new Point(x, y) }; + AddCellInfoPoints(points); + + M2CellInfo[x, y] = new CellInfo(); + } + } + } + } + } + + private void menu_DeleteSelectedFrontLayerCellData_Click(object sender, EventArgs e) //M2P + { + Point[] points; + if (M2CellInfo != null) + { + // DialogResult dr = MessageBox.Show("Are You Sure You Want to Delete Selected Cell Data On Front Layer?" + "\n" + "The Operation Cannot Be UnDone!", "Delete", MessageBoxButtons.OKCancel); + + // if (dr == DialogResult.OK) + { + //this should swap the points if point 2 is not a higher value + if (p1.X > p2.X) + { + p1.X += p2.X; + p2.X = p1.X - p2.X - 1; + p1.X -= p2.X; + } + + if (p1.Y > p2.Y) + { + p1.Y += p2.Y; + p2.Y = p1.Y - p2.Y - 1; + p1.Y -= p2.Y; + } + + for (var x = p1.X; x <= p2.X; x++) + { + for (var y = p1.Y; y <= p2.Y; y++) + { + points = new[] { new Point(x, y) }; + AddCellInfoPoints(points); + + M2CellInfo[x, y].FrontImage = 0; + M2CellInfo[x, y].FrontIndex = 0; + M2CellInfo[x, y].FrontAnimationFrame = 0; + M2CellInfo[x, y].FrontAnimationTick = 0; + } + } + } + } + } + + + private void menu_DeleteSelectedMiddleLayerCellData_Click(object sender, EventArgs e) //M2P + { + Point[] points; + if (M2CellInfo != null) + { + // DialogResult dr = MessageBox.Show("Are You Sure You Want to Delete Selected Cell Data On Middle Layer?" + "\n" + "The Operation Cannot Be UnDone!", "Delete", MessageBoxButtons.OKCancel); + + // if (dr == DialogResult.OK) + { + //this should swap the points if point 2 is not a higher value + if (p1.X > p2.X) + { + p1.X += p2.X; + p2.X = p1.X - p2.X - 1; + p1.X -= p2.X; + } + + if (p1.Y > p2.Y) + { + p1.Y += p2.Y; + p2.Y = p1.Y - p2.Y - 1; + p1.Y -= p2.Y; + } + + for (var x = p1.X; x <= p2.X; x++) + { + for (var y = p1.Y; y <= p2.Y; y++) + { + points = new[] { new Point(x, y) }; + AddCellInfoPoints(points); + + M2CellInfo[x, y].MiddleImage = 0; + M2CellInfo[x, y].MiddleIndex = 0; + M2CellInfo[x, y].MiddleAnimationFrame = 0; + M2CellInfo[x, y].MiddleAnimationTick = 0; + } + } + } + } + } + + + private void menu_DeleteSelectedBackLayerCellData_Click(object sender, EventArgs e) //M2P + { + Point[] points; + if (M2CellInfo != null) + { + // DialogResult dr = MessageBox.Show("Are You Sure You Want to Delete Selected Cell Data On Back Layer?" + "\n" + "The Operation Cannot Be UnDone!", "Delete", MessageBoxButtons.OKCancel); + + // if (dr == DialogResult.OK) + { + //this should swap the points if point 2 is not a higher value + if (p1.X > p2.X) + { + p1.X += p2.X; + p2.X = p1.X - p2.X - 1; + p1.X -= p2.X; + } + + if (p1.Y > p2.Y) + { + p1.Y += p2.Y; + p2.Y = p1.Y - p2.Y - 1; + p1.Y -= p2.Y; + } + + for (var x = p1.X; x <= p2.X; x++) + { + for (var y = p1.Y; y <= p2.Y; y++) + { + points = new[] { new Point(x, y) }; + AddCellInfoPoints(points); + + M2CellInfo[x, y].BackIndex = 0; + M2CellInfo[x, y].BackImage = 0; + } + } + } + } + } + + + private void menu_DeleteSelectedBackLimitCellData_Click(object sender, EventArgs e) //M2P + { + if (M2CellInfo != null) + { + //this should swap the points if point 2 is not a higher value + if (p1.X > p2.X) + { + p1.X += p2.X; + p2.X = p1.X - p2.X - 1; + p1.X -= p2.X; + } + + if (p1.Y > p2.Y) + { + p1.Y += p2.Y; + p2.Y = p1.Y - p2.Y - 1; + p1.Y -= p2.Y; + } + + for (var x = p1.X; x <= p2.X; x++) + { + for (var y = p1.Y; y <= p2.Y; y++) + { + M2CellInfo[x, y].BackImage = M2CellInfo[x, y].BackImage & 0x1fffffff; + } + } + } + } + + + private void menu_DeleteSelectedFrontLimitCellData_Click(object sender, EventArgs e) //M2P + { + if (M2CellInfo != null) + { + //this should swap the points if point 2 is not a higher value + if (p1.X > p2.X) + { + p1.X += p2.X; + p2.X = p1.X - p2.X - 1; + p1.X -= p2.X; + } + + if (p1.Y > p2.Y) + { + p1.Y += p2.Y; + p2.Y = p1.Y - p2.Y - 1; + p1.Y -= p2.Y; + } + + for (var x = p1.X; x <= p2.X; x++) + { + for (var y = p1.Y; y <= p2.Y; y++) + { + M2CellInfo[x, y].FrontImage = (short)(M2CellInfo[x, y].FrontImage & 0x7fff); + } + } + } + } + + private void menu_PlaceFrontLimitOnSelectedArea_Click(object sender, EventArgs e) //M2P + { + if (M2CellInfo != null) + { + //this should swap the points if point 2 is not a higher value + if (p1.X > p2.X) + { + p1.X += p2.X; + p2.X = p1.X - p2.X - 1; + p1.X -= p2.X; + } + + if (p1.Y > p2.Y) + { + p1.Y += p2.Y; + p2.Y = p1.Y - p2.Y - 1; + p1.Y -= p2.Y; + } + + for (var x = p1.X; x <= p2.X; x++) + { + for (var y = p1.Y; y <= p2.Y; y++) + { + M2CellInfo[x, y].FrontImage = + (short)(M2CellInfo[x, y].FrontImage | 0x8000); + } + } + } + } + + private void menu_PlaceBackLimitOnSelectedArea_Click(object sender, EventArgs e) //M2P + { + if (M2CellInfo != null) + { + //this should swap the points if point 2 is not a higher value + if (p1.X > p2.X) + { + p1.X += p2.X; + p2.X = p1.X - p2.X - 1; + p1.X -= p2.X; + } + + if (p1.Y > p2.Y) + { + p1.Y += p2.Y; + p2.Y = p1.Y - p2.Y - 1; + p1.Y -= p2.Y; + } + + for (var x = p1.X; x <= p2.X; x++) + { + for (var y = p1.Y; y <= p2.Y; y++) + { + M2CellInfo[x, y].BackImage = M2CellInfo[x, y].BackImage | 0x20000000; + } + } + } + } + + private void menu_InvertMiddleFrontLayersToggle_Click(object sender, EventArgs e) //M2P + { + if (M2CellInfo != null) + { + //this should swap the points if point 2 is not a higher value + if (p1.X > p2.X) + { + p1.X += p2.X; + p2.X = p1.X - p2.X - 1; + p1.X -= p2.X; + } + + if (p1.Y > p2.Y) + { + p1.Y += p2.Y; + p2.Y = p1.Y - p2.Y - 1; + p1.Y -= p2.Y; + } + + for (var x = p1.X; x <= p2.X; x++) + { + for (var y = p1.Y; y <= p2.Y; y++) + { + string str; + if ((M2CellInfo[x, y].MiddleImage != 0) && ((M2CellInfo[x, y].FrontImage & 0x7FFF) == 0)) //M2P - Invert Middle to Front if Only MiddleImage Exists + { + str = GetLibName(M2CellInfo[x, y].MiddleIndex); + if (!(str.IndexOf("SmTiles", StringComparison.Ordinal) > -1)) + { + if ((M2CellInfo[x, y].MiddleAnimationFrame != 0) && + (M2CellInfo[x, y].MiddleAnimationFrame != 255) && + (M2CellInfo[x, y].FrontAnimationFrame == 0)) + { + M2CellInfo[x, y].FrontAnimationFrame = + (byte)(M2CellInfo[x, y].MiddleAnimationFrame & 0x0F); + M2CellInfo[x, y].FrontAnimationTick = M2CellInfo[x, y].MiddleAnimationTick; + M2CellInfo[x, y].MiddleAnimationFrame = 0; + M2CellInfo[x, y].MiddleAnimationTick = 0; + } + M2CellInfo[x, y].FrontImage = M2CellInfo[x, y].MiddleImage; + M2CellInfo[x, y].FrontIndex = M2CellInfo[x, y].MiddleIndex; + M2CellInfo[x, y].MiddleImage = 0; + M2CellInfo[x, y].MiddleIndex = 0; + } + } + else if ((M2CellInfo[x, y].FrontImage != 0) && ((M2CellInfo[x, y].MiddleImage & 0x7FFF) == 0)) //M2P - Invert Front to Middle if Only Front Exists + { + str = GetLibName(M2CellInfo[x, y].FrontIndex); + if (!(str.IndexOf("SmTiles", StringComparison.Ordinal) > -1)) + { + if ((M2CellInfo[x, y].FrontAnimationFrame != 0) && + (M2CellInfo[x, y].FrontAnimationFrame != 255) && + (M2CellInfo[x, y].MiddleAnimationFrame == 0)) + { + M2CellInfo[x, y].MiddleAnimationFrame = + (byte)(M2CellInfo[x, y].FrontAnimationFrame & 0x0F); + M2CellInfo[x, y].MiddleAnimationTick = M2CellInfo[x, y].FrontAnimationTick; + M2CellInfo[x, y].FrontAnimationFrame = 0; + M2CellInfo[x, y].FrontAnimationTick = 0; + } + M2CellInfo[x, y].MiddleImage = M2CellInfo[x, y].FrontImage; + M2CellInfo[x, y].MiddleIndex = M2CellInfo[x, y].FrontIndex; + M2CellInfo[x, y].FrontImage = 0; + M2CellInfo[x, y].FrontIndex = 0; + } + } + else if ((M2CellInfo[x, y].MiddleImage != 0) && ((M2CellInfo[x, y].FrontImage & 0x7FFF) != 0)) //M2P - Invert (Swap) Layers if Both FrontImage & MiddleImage Exist [Toggle] + { + str = GetLibName(M2CellInfo[x, y].MiddleIndex); + if (!(str.IndexOf("SmTiles", StringComparison.Ordinal) > -1)) + { + if ((M2CellInfo[x, y].MiddleAnimationFrame == 255) || + (M2CellInfo[x, y].MiddleAnimationFrame == 0)) + { + if (M2CellInfo[x, y].FrontAnimationFrame == 0) + { + var temp = M2CellInfo[x, y].MiddleImage; + M2CellInfo[x, y].MiddleImage = + (short)(M2CellInfo[x, y].FrontImage & 0x7FFF); + M2CellInfo[x, y].FrontImage = temp; + temp = M2CellInfo[x, y].MiddleIndex; + M2CellInfo[x, y].MiddleIndex = M2CellInfo[x, y].FrontIndex; + M2CellInfo[x, y].FrontIndex = temp; + } + } + } + } + } + } + } + } + + private void menu_SaveObject_Click(object sender, EventArgs e) + { + if (M2CellInfo == null) return; + + //this should swap the points if point 2 is not a higher value + if (p1.X > p2.X) + { + p1.X += p2.X; + p2.X = p1.X - p2.X - 1; + p1.X -= p2.X; + } + + if (p1.Y > p2.Y) + { + p1.Y += p2.Y; + p2.Y = p1.Y - p2.Y - 1; + p1.Y -= p2.Y; + } + + SaveObjectsFile(); + ObjectslistBox.Items.Clear(); + ReadObjectsToListBox(); + } + + private void menuFreeMemory_Click(object sender, EventArgs e) + { + Dispose(); + } + + private void menuJump_Click(object sender, EventArgs e) + { + if (M2CellInfo != null) + { + Form jump = new FrmJump(Jump); + if (jump.ShowDialog() == DialogResult.OK) + { + } + } + } + + private void menuAbout_Click(object sender, EventArgs e) + { + Form frmAbout = new FrmAbout(); + frmAbout.ShowDialog(); + } + + private void btnOpen_Click(object sender, EventArgs e) + { + OpenMap(); + } + + private void btnNew_Click(object sender, EventArgs e) + { + NewMap(); + } + + private int RandomAutoMir3Tile(TileType tileType) + { + //传奇3 bigTile 30块 2 中组合 Legend 3 bigTile 30 pieces 2 medium combination + + //中 0-4 Medium + //左上 10 Upper Left + //右上 11 Upper Right + //左下 12 Lower Left + //右下 13 Lower Right + //上 20,21 On + //下 22,23 Next + //左 25,27 Left + //右 26,28 Right + //内左上 15 Inner Upper Left + //内右上 16 Inner Upper Right + //内左下 17 Inner Lower Left + //内右下 18 Inner Lower Right + + //中 5-9 In + //左上 18 Upper Left + //右上 17 Upper Right + //左下 16 Lower Left + //右下 15 Lower Right + //上 22,23 On + //下 20,21 Next + //左 26,28 Left + //右 25 ,27 Right + //内左上 13 Inner Upper Left + //内右上 12 Inner Upper Right + //内左下 11 Inner Lower Left + //内右下 10 Inner Lower Right + if (selectTilesIndex < 0) return -1; + int flag; + if (Libraries.MapLibs[selectListItem.Value].Images.Count%10 != 0) + { + flag = (Libraries.MapLibs[selectListItem.Value].Images.Count + 1)/Mir3BigTileBlock; + } + else + { + flag = Libraries.MapLibs[selectListItem.Value].Images.Count/Mir3BigTileBlock; + } + + if (selectTilesIndex < flag) + { + switch (tileType) + { + case TileType.Center: + return selectTilesIndex*Mir3BigTileBlock + random.Next(5); + case TileType.Up: + return selectTilesIndex*Mir3BigTileBlock + random.Next(20, 22); + case TileType.Down: + return selectTilesIndex*Mir3BigTileBlock + random.Next(22, 24); + case TileType.Left: + if (random.Next(2) == 0) + { + return selectTilesIndex*Mir3BigTileBlock + 25; + } + return selectTilesIndex*Mir3BigTileBlock + 27; + case TileType.Right: + if (random.Next(2) == 0) + { + return selectTilesIndex*Mir3BigTileBlock + 26; + } + return selectTilesIndex*Mir3BigTileBlock + 28; + case TileType.UpLeft: + return selectTilesIndex*Mir3BigTileBlock + 10; + + case TileType.UpRight: + return selectTilesIndex*Mir3BigTileBlock + 11; + + case TileType.DownLeft: + return selectTilesIndex*Mir3BigTileBlock + 12; + case TileType.DownRight: + return selectTilesIndex*Mir3BigTileBlock + 13; + + case TileType.InUpLeft: + return selectTilesIndex*Mir3BigTileBlock + 15; + case TileType.InUpRight: + return selectTilesIndex*Mir3BigTileBlock + 16; + case TileType.InDownLeft: + return selectTilesIndex*Mir3BigTileBlock + 17; + case TileType.InDownRight: + return selectTilesIndex*Mir3BigTileBlock + 18; + } + } + else + { + switch (tileType) + { + case TileType.Center: + return (selectTilesIndex - flag)*Mir3BigTileBlock + random.Next(5, 10); + case TileType.Up: + return (selectTilesIndex - flag)*Mir3BigTileBlock + random.Next(22, 24); + case TileType.Down: + return (selectTilesIndex - flag)*Mir3BigTileBlock + random.Next(20, 22); + case TileType.Left: + if (random.Next(2) == 0) + { + return (selectTilesIndex - flag)*Mir3BigTileBlock + 26; + } + return (selectTilesIndex - flag)*Mir3BigTileBlock + 28; + case TileType.Right: + if (random.Next(2) == 0) + { + return (selectTilesIndex - flag)*Mir3BigTileBlock + 25; + } + return (selectTilesIndex - flag)*Mir3BigTileBlock + 27; + case TileType.UpLeft: + return (selectTilesIndex - flag)*Mir3BigTileBlock + 18; + + case TileType.UpRight: + return (selectTilesIndex - flag)*Mir3BigTileBlock + 17; + + case TileType.DownLeft: + return (selectTilesIndex - flag)*Mir3BigTileBlock + 16; + case TileType.DownRight: + return (selectTilesIndex - flag)*Mir3BigTileBlock + 15; + + case TileType.InUpLeft: + return (selectTilesIndex - flag)*Mir3BigTileBlock + 13; + case TileType.InUpRight: + return (selectTilesIndex - flag)*Mir3BigTileBlock + 12; + case TileType.InDownLeft: + return (selectTilesIndex - flag)*Mir3BigTileBlock + 11; + case TileType.InDownRight: + return (selectTilesIndex - flag)*Mir3BigTileBlock + 10; + } + } + + return -1; + } + + private void btnMiniMap_Click(object sender, EventArgs e) + { + createMiniMap(); + } + + private void btnBigMap_Click(object sender, EventArgs e) + { + createBigMap(); + } + + private void btnLargeMap_Click(object sender, EventArgs e) + { + createLargeMap(); + } + + private void btnXLargeMap_Click(object sender, EventArgs e) + { + createXLargeMap(); + } + + private void btnFreeMemory_Click(object sender, EventArgs e) + { + Dispose(); + } + + private void btnSave_Click(object sender, EventArgs e) + { + Save(); + } + + //loads image for TileCutter + private void btn_load_Click(object sender, EventArgs e) + { + if (loadImageDialog.ShowDialog() != DialogResult.OK) return; + string fileName = loadImageDialog.FileName; + + try + { + _mainImage = new Bitmap(fileName); + pictureBox_Image.Image = _mainImage; + + //resize the picturebox to force scrollbars to appear if too large to fit on screen + pictureBox_Image.Width = _mainImage.Width; + pictureBox_Image.Height = _mainImage.Height; + pictureBox_Grid.Width = _mainImage.Width; + pictureBox_Grid.Height = _mainImage.Height; + pictureBox_Highlight.Width = _mainImage.Width; + pictureBox_Highlight.Height = _mainImage.Height; + pictureBox_loaded = true; + } + catch + { + //error loading image + } + + //loads array for storing selected cells + CellSizeX = (comboBox_cellSize.SelectedIndex + 1) * 48; + CellSizeY = (comboBox_cellSize.SelectedIndex + 1) * 32; + SelectedCells = new int[(pictureBox_Image.Image.Width / CellSizeX + 2), (pictureBox_Image.Image.Height / CellSizeY + 2)]; + + //update grid + gridUpdate(false); + } + + //TileCutter + private void gridUpdate(bool toggle) + { + if (pictureBox_Image.Image != null) + { + if (toggle) + grid = grid == true ? false : true; + + + Bitmap image; + if (grid) + { + + image = new Bitmap(pictureBox_Grid.Width, pictureBox_Grid.Height); + CellSizeX = (comboBox_cellSize.SelectedIndex + 1) * 48; + CellSizeY = (comboBox_cellSize.SelectedIndex + 1) * 32; + + + //vert + for (int y = 0; y < ((pictureBox_Image.Image.Height / CellSizeY) + 2) * CellSizeY + 1; y++) + { + for (int x = 0; x < ((pictureBox_Image.Image.Width / CellSizeX) + 2) * CellSizeX; x++) + { + if (x >= pictureBox_Grid.Width || y >= pictureBox_Grid.Height) continue; + image.SetPixel(x, y, Color.HotPink); + } + y += CellSizeY - 1; + } + + //horiz + for (int x = 0; x < ((pictureBox_Image.Image.Width / CellSizeX) + 2) * CellSizeX + 1; x++) + { + for (int y = 0; y < ((pictureBox_Image.Image.Height / CellSizeY) + 2) * CellSizeY; y++) + { + if (x >= pictureBox_Grid.Width || y >= pictureBox_Grid.Height) continue; + image.SetPixel(x, y, Color.HotPink); + } + x += CellSizeX - 1; + } + + + + pictureBox_Grid.Image = image; + } + else + { + image = new Bitmap(1, 1); + pictureBox_Grid.Image = image; + } + } + } + + //TileCutter + #region Move TileCutter Image + private void btn_up_Click(object sender, EventArgs e) + { + pictureBox_Image.Padding = new Padding(pictureBox_Image.Padding.Left, pictureBox_Image.Padding.Top - 1, 0, 0); + pictureBox_Image.Image = pictureBox_Image.Image; + } + + private void btn_down_Click(object sender, EventArgs e) + { + pictureBox_Image.Padding = new Padding(pictureBox_Image.Padding.Left, pictureBox_Image.Padding.Top + 1, 0, 0); + pictureBox_Image.Image = pictureBox_Image.Image; + } + + private void btn_left_Click(object sender, EventArgs e) + { + pictureBox_Image.Padding = new Padding(pictureBox_Image.Padding.Left - 1, pictureBox_Image.Padding.Top, 0, 0); + pictureBox_Image.Image = pictureBox_Image.Image; + //MessageBox.Show(pictureBox_Image.Padding.Left.ToString()); + } + + private void btn_right_Click(object sender, EventArgs e) + { + pictureBox_Image.Padding = new Padding(pictureBox_Image.Padding.Left + 1, pictureBox_Image.Padding.Top, 0, 0); + pictureBox_Image.Image = pictureBox_Image.Image; + } + #endregion + + //TileCutter + private void btn_grid_Click(object sender, EventArgs e) + { + gridUpdate(true); + } + + //TileCutter + private void pictureBox_Highlight_Click(object sender, EventArgs e) + { + if (pictureBox_loaded != true) return; + + //Find mouse position + MPoint = pictureBox_Grid.PointToClient(Cursor.Position); + + //test mouse select cells + if (MPoint.Y >= 0) + { + MPoint.Y = (MPoint.Y / CellSizeY); + if (MPoint.X >= 0) + { + MPoint.X = (MPoint.X / CellSizeX); + + } + else + MPoint.X = -1; + } + else + MPoint.Y = -1; + + if (MPoint.X >= 0 && MPoint.Y >= 0 && MPoint.X <= (pictureBox_Image.Image.Width / CellSizeX) + 1 && MPoint.Y <= (pictureBox_Image.Image.Height / CellSizeY) + 1) + { + Bitmap image; + if (grid) + { + image = new Bitmap(pictureBox_Grid.Width, pictureBox_Grid.Height); + + SelectedCells[MPoint.X, MPoint.Y] = SelectedCells[MPoint.X, MPoint.Y] == 1 ? 0 : 1; + + + for (int y = 0; y <= (pictureBox_Image.Image.Height / CellSizeY) + 1; y++) + { + for (int x = 0; x <= (pictureBox_Image.Image.Width / CellSizeX) + 1; x++) + { + if (SelectedCells[x, y] == 1) + { + //MessageBox.Show(x + " " + y); + using (Graphics g = Graphics.FromImage(image)) + { + g.DrawImage(cellHighlight, new Point(x * CellSizeX, y * CellSizeY)); + } + } + } + } + + + //using (Graphics g = Graphics.FromImage(image)) + //{ + //g.DrawImage(cellHighlight, new Point(MPoint.X * CellSizeX, MPoint.Y * CellSizeY)); + //} + pictureBox_Highlight.Image = image; + } + else + { + image = new Bitmap(1, 1); + pictureBox_Highlight.Image = image; + } + } + } + + //TileCutter + private void comboBox_cellSize_SelectedIndexChanged(object sender, EventArgs e) + { + gridUpdate(false); + } + + //TileCutter + private void Main_ResizeEnd(object sender, EventArgs e) + { + gridUpdate(false); + } + + private void btn_vCut_Click(object sender, EventArgs e) + { + //add the padding to the mainimage + Bitmap _mainImageTemp = new Bitmap(_mainImage.Width + pictureBox_Image.Padding.Left, _mainImage.Height + pictureBox_Image.Padding.Top); + using (Graphics g = Graphics.FromImage(_mainImageTemp)) + { + g.DrawImage(_mainImage, pictureBox_Image.Padding.Left, pictureBox_Image.Padding.Top, _mainImage.Width, _mainImage.Height); + } + + //Create a Library file to save the images in + if (SaveLibraryDialog.ShowDialog() != DialogResult.OK) return; + if (_library != null) _library.Close(); + _library = new MLibrary(SaveLibraryDialog.FileName); + + //adds a single blank cell to the library + _library.AddImage(null, 0, 0); + + //cycle through and find image segments + int tempY = 0; + for (int x = 0; x < ((pictureBox_Image.Image.Width / CellSizeX) + 2); x++) + { + for (int y = 0; y < ((pictureBox_Image.Image.Height / CellSizeY) + 2); y++) + { + //looks for blank parts at top of cell + bool isBlank = true; + if (tempY == 0) + { + for (int h = 0; h < CellSizeY; h++) + { + for (int w = 0; w < CellSizeX; w++) + { + if (w * x > _mainImageTemp.Width || h * y > _mainImageTemp.Height) continue; + Color col = _mainImageTemp.GetPixel(w * x, h * y); + + if (col.A != 0) + { + isBlank = false; + break; + } + //MessageBox.Show(w + " " + h); + } + if (!isBlank) break; + } + if (isBlank) continue; + } + + if (SelectedCells[x, y] == 1) + { + Bitmap image = new Bitmap(CellSizeX, CellSizeY * (tempY + 1), PixelFormat.Format32bppArgb); + using (Graphics g = Graphics.FromImage(image)) + { + g.DrawImage(_mainImageTemp, new Rectangle(0, 0, image.Width, image.Height), new Rectangle(x * CellSizeX, (y - tempY) * CellSizeY, image.Width, image.Height), GraphicsUnit.Pixel); + } + //checks if cell image is blank + //bool isBlank = true; + for (int h = 0; h < image.Height; h++) + { + for (int w = 0; w < image.Width; w++) + { + Color col = image.GetPixel(w, h); + if (col.A != 0) isBlank = false; + //MessageBox.Show(col.A.ToString()); + } + } + + if (!isBlank) _library.AddImage(image, 0, 0); + tempY = 0; + continue; + } + tempY++; + } + + //force last image in column to save if it has not already + if (tempY > 0) + { + Bitmap image = new Bitmap(CellSizeX, CellSizeY * (tempY), PixelFormat.Format32bppArgb); + using (Graphics g = Graphics.FromImage(image)) + { + g.DrawImage(_mainImageTemp, new Rectangle(0, 0, image.Width, image.Height), new Rectangle(x * CellSizeX, (((pictureBox_Image.Image.Height / CellSizeY) + 2) - tempY) * CellSizeY, image.Width, image.Height), GraphicsUnit.Pixel); + } + //checks if cell image is blank + bool isBlank = true; + for (int h = 0; h < image.Height; h++) + { + for (int w = 0; w < image.Width; w++) + { + Color col = image.GetPixel(w, h); + if (col.A != 0) isBlank = false; + //MessageBox.Show(col.A.ToString()); + } + } + + if (!isBlank) + { + //trim image + + _library.AddImage(image, 0, 0); + } + tempY = 0; //reset when moving to next column + } + } + _library.Save(); + } + + private void btnRefreshList_Click(object sender, EventArgs e) + { + ObjectslistBox.Items.Clear(); + ReadObjectsToListBox(); + } + + private void menuSelectAllCells_Click(object sender, EventArgs e) + { + Bitmap image = new Bitmap(pictureBox_Grid.Width, pictureBox_Grid.Height); + for (int y = 0; y <= (pictureBox_Image.Image.Height / CellSizeY) + 1; y++) + { + for (int x = 0; x <= (pictureBox_Image.Image.Width / CellSizeX) + 1; x++) + { + SelectedCells[x, y] = 1; + + using (Graphics g = Graphics.FromImage(image)) + { + g.DrawImage(cellHighlight, new Point(x * CellSizeX, y * CellSizeY)); + } + } + } + pictureBox_Highlight.Image = image; + } + + private void menuDeselectAllCells_Click(object sender, EventArgs e) + { + for (int y = 0; y <= (pictureBox_Image.Image.Height / CellSizeY) + 1; y++) + { + for (int x = 0; x <= (pictureBox_Image.Image.Width / CellSizeX) + 1; x++) + { + SelectedCells[x, y] = 0; + } + } + pictureBox_Highlight.Image = new Bitmap(pictureBox_Grid.Width, pictureBox_Grid.Height); + } + + private void toolStripDropDownButton2_Click(object sender, EventArgs e) + { + + } + + private void cmbEditorLayer_Click(object sender, EventArgs e) + { + + } + + private void toolStripLabel1_Click(object sender, EventArgs e) + { + + } + + private void tabControl1_SelectedIndexChanged(object sender, EventArgs e) + { + + } + + private void tabWemadeMir2_Click(object sender, EventArgs e) + { + + } + + private void picWemdeMir2_Click(object sender, EventArgs e) + { + + } + + private int RandomAutoSmTile(TileType iTileType) + { + //然后我们根据这个规律就可以返回某种地砖类型的某一块了。。Then we can return a certain floor tile type based on this rule. + if ((int) iTileType >= 1) //这除了中这种地砖类型 In addition to this type of floor tiles + { + return selectTilesIndex*smTileBlock + 8 + ((int) iTileType - 1)*4 + random.Next(4); + } + //中间地砖 middle floor tile + return selectTilesIndex *smTileBlock + random.Next(8); + } + + //Akaras: This should create the correct size MiniMap to use in game... just photoshop it to add caves and doorway icons if needed. //M2P Shortcut is 'M'. + public void createMiniMap() + { + Bitmap miniBitmap = new Bitmap(mapWidth * 12, mapHeight * 8, System.Drawing.Imaging.PixelFormat.Format32bppArgb); + + //backimage + for (int y = 0; y <= mapHeight - 1; y++) + { + for (int x = 0; x <= mapWidth - 1; x++) + { + if ((M2CellInfo[x, y].BackImage & 0x1FFFFFFF) != 0) + { + try + { + Libraries.MapLibs[M2CellInfo[x, y].BackIndex].CheckImage((M2CellInfo[x, y].BackImage & 0x1FFFFFFF) - 1); + var mi = Libraries.MapLibs[M2CellInfo[x, y].BackIndex].Images[(M2CellInfo[x, y].BackImage & 0x1FFFFFFF) - 1]; + if (mi.Image != null || mi.ImageTexture != null) + { + using (Graphics g = Graphics.FromImage(miniBitmap)) + { + Rectangle temprect = new Rectangle((x * 12), (y * 8), 24, 16); + g.DrawImage(mi.Image, temprect); + } + } + } + catch + { + + } + + } + x++; + } + y++; + } + + //MiddleImage + for (int y = 0; y <= mapHeight - 1; y++) + { + for (int x = 0; x <= mapWidth - 1; x++) + { + if ((M2CellInfo[x, y].MiddleImage) != 0) + { + try + { + Libraries.MapLibs[M2CellInfo[x, y].MiddleIndex].CheckImage((M2CellInfo[x, y].MiddleImage) - 1); + var mi = Libraries.MapLibs[M2CellInfo[x, y].MiddleIndex].Images[(M2CellInfo[x, y].MiddleImage) - 1]; + if (mi.Image != null || mi.ImageTexture != null) + { + using (Graphics g = Graphics.FromImage(miniBitmap)) + { + Rectangle temprect = new Rectangle((x * 12), (y * 8) - (mi.Image.Height / 4) + 8, mi.Image.Width / 4, mi.Image.Height / 4); + g.DrawImage(mi.Image, temprect); + } + } + } + catch + { + + } + } + + } + } + + //FrontImage + for (int y = 0; y <= mapHeight - 1; y++) + { + for (int x = 0; x <= mapWidth - 1; x++) + { + if ((M2CellInfo[x, y].FrontImage & 0x7FFF) != 0 && (M2CellInfo[x, y].FrontAnimationFrame & 0x80) < 1) //skips drawing if image is animated < + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 138, 17 + + + Make Various Size Map Images + +'BigMap' is 1/2 MiniMap Size (to use as BigMap in Crystal Client) +Good for Catalogue Images for Very Large Maps (700 Tile sq & Up) + +Inversely - XXLarge Size is for Small Maps (150-200 Tiles sq) + + + + 1146, 17 + + + 428, 17 + + + 1304, 17 + + + 1943, 17 + + + + F1 WemadeMir2 Libraries + F2 ShandaMir2 Libraries + F3 WemadeMir3 Libraries + F4 ShandaMir3 Libraries + + F5 Map Tab + + F6 Front Layer + F7 Middle Layer + F8 Back Layer + + F9 Cell Libraries Info + Del Cell Animation Info // Shortcut changed for v.1.4 - added Del key - for easy one key 'hit' to open/close the Animation Info panel. Original Ctrl-F9 shortcut continues to work. + INS Cell Coordinates Info + + + F10 Front Tag + F11 Middle Tag (Magenta) + + F12 Back Limit (Yellow) + Ctrl-F12 Front Limit (Red) + + Escape EditorLayer menu returns to selection 'None' //If menu selected by mouseclick, second click switches to 'None' choice + //If selectd by shortcut - single Escape click switches to 'None' choice + + 1 Place Front Tiles + 2 Place Middle Tiles + 3 Place Back Tiles // Ctrl key triggers BigTile Brushing + + 4 Grasp Mir2 Front + 5 Place Objects + 6 Grasp Mir3 Front&Middle // Originally named 'Grasp Invert Mir3 Front and Middle' but no layer is inverted +Ctrl-6 Grasp Front, Middle & Back + + 7 Clear Front image // Shortcuts 7,8,9 Clear Single Tag at a MouseClick +Ctrl-7 Delete Selected Cell Data On Front Layer // Use Area Selection to Clear Multiple Tile Tags. All Area Deletions can be UnDone + + 8 Clear Middle image +Ctrl-8 Delete Selected Cell Data On Middle Layer + + 9 Clear Back images +Ctrl-9 Delete Selected Cell Data On Back Layer + +Ctrl-0 Delete Selected Cell Data On All 3 Layers + + 0 Brush Mir2 Big Tiles // Brush Mir2 Big Tiles (selected on Tiles Tab) on Back Layer (Hold Ctrl to Brush) + - Brush Small Tiles // Brush Mir2 or Mir3 SmTiles on Middle Layer + = Brush Mir3 Big Tiles // Brush Mir3 Big Tiles (Tiles30c) on Back Layer + + O Open Map + N New Map // Create maps up to 4k x 4k size (useful for map manipulation, not release) + J Jump // Press Tab to switch input fields, hit Enter to Jump. + + Alt-S Save Map // Standard Ctrl-S triggered Tile Brushing that also uses Ctrl key + ` Save Map // Alternate Shortcut to Save Map using single key press (located below Escape key) + + Z UnDo + Ctrl-Z ReDo + + R Objects Tab + T Tiles Tab + Y TileCutter // Can also be used to load an image or MiniMap for quick access reference. + + G Big Tile Grid + Ctrl-G Small Tile Grid + Alt-G 4x4 Big Tile Grid + + + Alt-M Create BigMap // Half MiniMap size for use as BigMap in Client *_BigMap.png for maps ~ 600-1000sq + M Create MiniMap // Standard size for use in Mir2 Client 'mmap.Lib' *_MiniMap.png for maps ~ 500-800sq + Ctrl-M Create XLargeMap // Twice the MiniMap size *_XLargeMap.png for maps ~ 300-500sq + Alt-Ctrl-M Create XXLargeMap // Quadruple the MiniMap size *_XXLargeMap.png for maps ~ 150-300sq + + // The actual screenshot naming is different from menu description to insure alphabetic & screenshot sizes follow the same increasing order + + B Place Back Limit + F Place Front Limit + C Clear Back&Front Limit + + H Help Tab // Now with Scrolling enabled + + Alt-X Save As Object.X // Save Selection As Object.X + Alt-I Invert Mir3 Layer // Save Mir3 Map As *.Mir3 With Middle & Front Layers Inverted. Current Map May Also Invert. Cannot UnDo! + + Ctrl-I Invert Selected Area Front/Middle Layers // Toggles Selected Tags BTW the Two Layers [Note: Middle Tags are Now Magenta Color, Requires Implementing Client Changes To Display Image Strips on Middle Layer Correctly] + + Alt-A About the MapEditor + + L Light Tag // Light Values 1-9, Fishing 100-119. Remove Light or Fishing by Setting the Value to 0 (or UnDo) + Ctrl-L Set Selected Area Light // Select Using Either (4) or (6) Selection Shortcut. Selecting Only One Tile Defaults to Context Menu Single (Right Click) Coordinate Light Setting. + + , Previous tile (<) // Selecting tiles when building up objects from Libraries + . Next tile (>) + + - (Numpad - ) Zooms Out in several steps (Shift & -) Zooms out fully in one step. // Zoom steps are now smaller, more numerous for more exact zooming + + (Numpad + ) Zooms In in several steps (SHift & +) Zooms in fully in one step. + + / Zooms Out to minimum size in single key press + * Zooms In to 100% size in single key press + + Up Arrow // Arrow keys scroll map 4 SmTiles per key press (Note: WASD movement keys now scroll 2 SmTiles - implemented so Grid 'stays on even coordinate #s' + Down Arrow // -"- + Left Arrow // -"- + Right Arrow // -"- + + Numpad Scrolling // Map Movement via NumPad's Number Keys -> #s 8, 4, 5 & 6 are mapped as WASD keys, each press Jumps by 20 tiles vertically and 26 tiles horizontally. + // At full map size view, that is jump by half screen view. + // NumPad2 Jumps down by twice the amount of NumPad5 + // NumPad's 'corner' #s 7, 9, 1 & 3 scroll diagonally in four directions. + + NumPad0 Jumps to Map origin coordinates (0:0) + NumPad Enter Jumps to Map's extreme bottom right corner + + + + + 248, 17 + + + 797, 17 + + + 617, 17 + + + 986, 17 + + + 1456, 17 + + + 1591, 17 + + + 1764, 17 + + + 68 + + + + + AAABAAEAQEAAAAEAIAAoQgAAFgAAACgAAABAAAAAgAAAAAEAIAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACgAA + ABYAAAAaAAAAHgAAAB4AAAAaAAAAFgAAABAAAAAOAAAAEAAAABYAAAAcAAAAHgAAACAAAAAgAAAAIAAA + ACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAA + ACAAAAAgAAAAIAAAACAAAAAgAAAAHgAAABgAAAASAAAADAAAAAoAAAAQAAAAFgAAABoAAAAYAAAAEgAA + AAoAAAAGAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAACAAAACgAAABQAAAAmAAAAMgAAADgAAAA4AAAAMgAAACoAAAAiAAAAIAAAACIAAAAqAAAANAAA + ADgAAAA6AAAAOgAAADoAAAA6AAAAOgAAADoAAAA6AAAAOgAAADoAAAA6AAAAOgAAADoAAAA6AAAAOgAA + ADoAAAA6AAAAOgAAADoAAAA6AAAAOgAAADoAAAA6AAAAOgAAADYAAAAuAAAAJAAAABoAAAAYAAAAIgAA + ACoAAAAyAAAALgAAACYAAAAcAAAAEAAAAAoAAAAEAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAgApOhxtlKJwhKm0iYOotImDqLSJg6iziVNyfWoPJCxMAAUHQAAD + BD5Ea3legqeyh4OotImDqLSJg6i0iYOotImDqLSJg6i0iYOotImDqLSJg6i0iYOotImDqLSJg6i0iYOo + tImDqLSJg6i0iYOotImDqLSJg6i0iYOotImDqLSJg6i0iYOotImDqLSJg6i0iYOotImEqbSJY4iUcAQV + HUIAAAA0AAsPNld9i2aBprGJf5+qgz1ZZFwACg9CAAECOAAAACgAAAAcAAAAEAAAAAoAAAAEAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIALkEiutTaxdPp7f/S6ez/0uns/9Lo + 7P/H3+ThrsnQtUlrd2YAHitOs87Vu9Pp7P3S6ez/0uns/9Lp7P/S6ez/0uns/9Lp7P/S6ez/0uns/9Lp + 7P/S6ez/0uns/9Lp7P/S6ez/0uns/9Lp7P/S6ez/0uns/9Lp7P/S6ez/0uns/9Lp7P/S6ez/0uns/9Lp + 7P/S6ez/0+ns/8Pc4ddDYWtkAAgLSk1ve2TF3+Pf0OXp/9Hk5/fY5OfVfpiifgspNU4AAwQ+AAAAMgAA + ACIAAAAWAAAACgAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAC5BIrjT + 2cXQ5+r/z+bq/8/m6v/P5ur/z+bq/9Ho6//R5+v5wNrf1dHn6//P5ur/z+bq/8/m6v/P5ur/z+bq/8/m + 6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m + 6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/R6Ov/qMbOr3qZoofK4ebnz+bq/8zi5v/F29//0eDj//v8 + /P3f6OrXg56ngSQ+R1YACAs+AAAALgAAABwAAAAQAAAABAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAgAuQSK409nF0Ofq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m + 6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m + 6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8zk6PPJ4ebr0efr/87l + 6f/N4+f/x93h/7/U2P/p7/D///////T39/HT3uHHUW95agANEkQAAAAuAAAAHAAAAAwAAAAEAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIALkEiuNPZxdDn6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m + 6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/zOPn/7vU2f+kwMX/nrq//6XBxv+yzdH/xd3h/87l + 6f/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m + 6v/P5ur/z+bq/8/m6v/P5ur/zeTo/8rg5P/C19v/yNfa//f5+f////////////L19u2esLaRAxskRgAC + AzQAAAAcAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAC5BIrjT2cXQ5+r/z+bq/8/m + 6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/7vV2f+fu8D/nLm+/5y5 + vv+cub7/nLm+/6XAxf/C29//z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m + 6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/87l6f/M4ub/xtzf/73Q1P/p7u////////// + ////////9vj58ZOqs4UDHCZGAAAALAAAABgAAAAIAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAu + QSK409nF0Ofq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m + 6v+ivsP/nLm+/5y5vv+cub7/nLm+/5y5vv+cub7/q8bL/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m + 6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/zeTo/8rg + 5P+/1Nj/09/h///////////////////////4+vrzscTMmwQfKkIAAwUmAAAADgAAAAQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAIALkEiuNPZxdDn6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m + 6v/P5ur/z+bq/8/m6v/P5ur/nrvA/5y5vv+cub7/nLm+/5y5vv+cub7/nLm+/6rFyv/P5ur/z+bq/8/m + 6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m + 6v/P5ur/z+bq/87l6f/M4ub/xNre/8fY2//9/f3/7/Lz/9vk5f/V4OL/2+bo/97p6/OMpq+BABIZMAAA + ABIAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAC5BIrjT2cXQ5+r/z+bq/8/m6v/P5ur/z+bq/8/m + 6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/63IzP+cub7/nLm+/5y5vv+cub7/nLm+/5y5 + vv+yzND/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/zuXp/8zj + 5//P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/O5en/zeTo/8ng4//F297/x9rd/77S1v++0tb/v9TY/8LY + 3P/H3eD/sczSvQAeKzAAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAuQSK409nF0Ofq/8/m + 6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/B2d7/ob3C/5y5 + vv+cub7/nLm+/5y5vv+cub7/u9TZ/87l6f/O5en/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m + 6v/N5Oj/w9vf/7PN0v+rxsv/zuXp/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/87l6f/M4+b/yuDk/8je + 4v/H3eH/yN7h/8je4v/J3+P/zOLm/7PO1L0AIS8sAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAIALkEiuNPZxdDn6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m + 6v/P5ur/zuXp/7rT2P+dub7/nLm+/5y5vv+cub7/pMDF/8be4v+xxeD/v9Tl/8/m6v/P5ur/z+bq/8/m + 6v/O5en/yODk/7zV2v+vyc7/n7zB/5y5vv+cub7/nLm+/8Xd4f/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m + 6v/P5ur/zuXp/83k6P/N5Oj/zeTo/83k6P/O5en/z+bq/9Hn6/2mxMujACQ0IgAAAAYAAAACAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAACAC9DIrjT2cXQ5+r/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m + 6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/N5Oj/scvQ/526v/+cub7/nLm+/7LM0f/A1uT/d4XP/8nf + 6P/P5ur/z+bq/87l6f/F3eH/scvQ/6bCx/+dur//nLm+/5y5vv+cub7/nLm+/5y5vv+609j/z+bq/8/m + 6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/9Dn6/uzz9W9PmRxRAAP + FRIAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAzSB6409nF0Ofq/8/m6v/P5ur/z+bq/8/m + 6v/P5ur/z+bq/8/m6v/P5ur/z+bq/7jN4/+Wp9j/tsvi/83j6f/P5ur/z+bq/83l6f++19v/qcXJ/67I + zf+4zOH/R0/A/6/C4P/P5ur/z+bq/8fe4/+pxMn/nLm+/5y5vv+cub7/nLm+/5y5vv+cub7/nLm+/5y5 + vv+cub7/rsnN/87l6f/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/9Dn + 6v+gvcalEDI/RgAAAB4AAAAMAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANUwcuNLZwdHo + 6//P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/J4Oj/kaHW/zQ6uv9ve83/yuHo/8/m + 6v/P5ur/z+bq/8vj5//M5Oj/U1zE/0VMv//O5en/z+bq/83k6P+vyc7/nLm+/5y5vv+cub7/nLm+/5y5 + vv+cub7/nLm+/5y5vv+cub7/nLm+/6jEyf/K4ub/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m + 6v/P5ur/z+bq/8/m6v/Q5+r/qMXMrQgdJkQAAAAiAAAAEAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAC5CDGCKmFLM5Ojt0Ofq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m + 6v+TpNj/Iia1/ykut/+HltT/yuHo/8/m6v/F2+f/ZnLK/xQXsf+dr9r/z+bq/8/m6v/J4OT/p8LH/5y5 + vv+cub7/m7e8/5q3vP+at7z/mre8/5q3vP+buL3/m7i9/5u4vf+jv8T/xd3h/8/m6v/P5ur/z+bq/8/m + 6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8nh5edhhI9uAAAAKgAAABQAAAAGAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAJTUWkbO9k8/l6fPP5ur/z+bq/8/m6v/P5ur/z+bq/8/m + 6v/P5ur/z+bq/8/m6v/P5ur/zOPp/6O13P8ZHLP/DA2u/256zP/E2ub/d4XP/w4Pr/9LU8H/xdvn/8/m + 6v/P5ur/xd3i/6O/xP+cub7/nLm+/5q3vP+Ztbr/k6+0/4Wfpv98lp7/cIqS/3SOl/+DnqX/mre8/8HZ + 3v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/R5+v9ocDIpQAP + FTQAAAAYAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAwxPzacvMSd0Ofr/8/m + 6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/tsri/0tTwv8CAqv/Ki63/wIC + q/8QEq//uc7j/8/m6v/P5ur/z+bq/7LM0P+cub7/nLm+/5Sxtv9KaXf/QmR3/1Vzhf9Vc4b/VHKF/1Nx + hP9RcIP/Tmx//yZFWP93kJv/zePn/87l6f/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m + 6v/P5ur/0Ofr/8Lb4NUAIS88AAAAHAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAF + CBgpTVtGpcLKp9Dn6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m + 6v+/1eX/Qkq//wAAq/8AAKv/XGbH/8/m6v/P5ur/z+bq/8be4v+eu8D/nLm+/5y5vv+Usbb/XoCN/52t + tf/j4+P/5+fn//v7+//4+Pj/8/Pz/+jo6P90iZX/epSf/8bc4P/M4ub/z+Xp/8/m6v/P5ur/z+bq/8/m + 6v/P5ur/z+bq/8/m6v/P5ur/z+bq/9Dn6v/F3uPbACMyPgAAABwAAAAIAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAgAhLxRghpJawtvg1dHo6//P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m + 6v/P5ur/zuXp/8be4v+91tv/mq3V/wwOr/8AAKv/Bger/wcIrf+DktL/x93n/83k6P+tyMz/nLm+/5y5 + vv+cub7/nLm+/36irf+ltb3/2tra/87Ozv/39/f/9PT0/+/v7//k5OT/j6Co/3yWnv+vwsb/vtPX/8nf + 4//N5Oj/z+Xp/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/Q5ur/yuLm5wAnN0AAAAAeAAAACgAA + AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIALD8esc3TsdLo7P/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m + 6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8Pb4P+mwcb/gpq7/yIpr/8AAKv/ERSt/1xttv8RFK3/EBKv/3WC + z//H3+P/pcHG/5y5vv+cub7/nLm+/5y5vv9/oq3/pbW8/9jY2P/Dw8P/9PT0//Dw8P/r6+v/4eHh/5Si + qf9mfof/lqeq/6q9wf++1Nf/yN/j/83k6P/O5en/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/0Obq/87k + 6e8AKjtCAAAAIAAAAAoAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACACw/Hq/L0rHR5+v/z+bq/8/m + 6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/87l6f+nw8j/jqm8/xwhrv8AAKv/Fxut/3aM + uf+cub7/f5e6/xQXrf8AAav/fIzL/6G9w/+cub7/nLm+/5y5vv+cub7/f6Kt/6Ozu//W1tb/u7u7/+7u + 7v/s7Oz/5ubm/93d3f+Xoqj/VGpz/3eEhv+JmZv/pbe7/7nN0P/G3OD/zOPn/87l6f/P5ur/z+bq/8/m + 6v/P5ur/z+bq/8/m6v/R6Ov7AC1AQgAAACAAAAAKAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAr + Phyoxc2j0efr/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/G3uL/nLm+/09e + tP8AAKv/CQus/3CFuP+Ztr3/nLm+/5y5vv9sgLj/Ehat/ywytP+RqsD/nLm+/5y5vv+cub7/nLm+/3+i + rf+isrn/09PT/7m5uf/h4eH/6Ojo/+Li4v/a2tr/maSp/1Focf9qdnj/d4SG/5Cgo/+mubz/u9DU/8fd + 4f/N5Oj/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/0+ns/ww5S0YAAQEiAAAADAAAAAIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAIAKToYnr7Fk9Ho6//P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m + 6v/O5en/tc/T/5y5vv9/l7r/UF+0/4Obu/+cub7/nLm+/5y5vv+cub7/nLm+/3qRuv9IVbT/kqy9/5y5 + vv+cub7/nLm+/5y5vv9/oq3/n6+3/9DQ0P+3t7f/0dHR/+Li4v/d3d3/1dXV/56mq/9WbXj/aXV3/256 + fP9+jI7/kKCj/6q9wP+90tb/yeDk/83k6P/P5ur/z+bq/8/m6v/P5ur/z+bq/9Pp7f8wWmpSAAQGJgAA + AAwAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACACY1FpO0vYXS6Oz/z+bq/8/m6v/P5ur/z+bq/8/m + 6v/P5ur/z+bq/8/m6v/P5ur/zOTo/6vGy/+cub7/nLm+/5y5vv+cub7/nLm+/5y5vv+cub7/nLm+/5y5 + vv+cub7/mLS9/5y5vv+cub7/nLm+/5y5vv+cub7/f6Kt/52ttf/Kysr/tbW1/8fHx//e3t7/2dnZ/9LS + 0v+hqa3/WnJ9/255e/9uenz/doOG/4SSlf+drrL/ssXJ/8PZ3f/L4ub/z+bq/8/m6v/P5ur/z+bq/8/m + 6v/T6e3/SG58XAAHCiYAAAAMAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkMhKDprBy0ujs/8/m + 6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/83k6P/E3OD/v9jc/7HM0P+hvcL/nLm+/5y5 + vv+cub7/nLm+/5y5vv+cub7/nLm+/5y5vv+cub7/nLm+/5y5vv+cub7/nLm+/3+irf+ZqbD/wcHB/7Gx + sf++vr7/1NTU/9DQ0P/Ly8v/o6ms/1t2gf9od3n/Y3J0/2p4ev93hIf/ipqc/5utsP+yxsr/v9XZ/8nf + 4//M4+f/zuXp/87l6f/P5ur/0uns/16BjmYACg4qAAAADgAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAHywQcpikZtLp7P/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m + 6v/O5en/wNnd/6bCx/+cub7/nLm+/5y5vv+cub7/nLm+/5y5vv+cub7/nLm+/5y5vv+cub7/nLm+/5y5 + vv9/oq3/i5uj/6mpqf+VlZX/oqKi/7e3t/+2trb/srKy/5Wanf9VcH3/X3Bz/1prbv9ba27/YnJ1/3uK + jP+Lmp3/m6yw/6m7v/+4zdD/wdba/8je4v/M4+f/zuXp/9Lp7P9tj5pwAAwRLAAAAA4AAAAEAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAABsmDFaBkFTT6ez/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m + 6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/L4+f/pMDF/5y5vv+cub7/nLm+/5y5vv+cub7/nLm+/5y5 + vv+cub7/nLm+/5y5vv+cub7/e5yq/2Z1hP9kZHH/QURV/0ROZ/9cZ3//b29+/3BwfP9sb3f/Um17/3+N + j/96iIv/aXp8/2Bydf9idHf/dYWI/4aVmP+NnaD/maqt/6a4u/+1yc3/v9XZ/8nf4//P5un/fZ6ofAAP + FSwAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASGgo2ZnhG0+nt/8/m6v/P5ur/z+bq/8/m + 6v/P5ur/z+bq/8/m6v/C3OL/c5yz/0t8m/+CqLz/z+bq/8/m6v/P5ur/z+bq/7rT2P+dub7/nLm+/5y5 + vv+cub7/nLm+/5y5vv+cub7/nLm+/5y5vv+Wsbn/epGm/0dtm/8lW5n/GlKX/w5Jkv8LTZn/DE+c/xJM + lP8VUJT/JVCG/zBKcv9yf4v/gZCT/36OkP9pe33/Y3V4/2Z4fP9/jpH/hpWX/4uanf+To6b/oLO1/67B + xf+90tb/yd/i/4emr4cAERguAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgMGBTxTONLp + 7P3P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/sM3X/5G1xf+309z/LWWJ/7/Z4P/P5ur/z+bq/8/m + 6v/J4eX/qsXK/5y5vv+cub7/nLm+/5y5vv+cub7/nLm+/5ezu/95kqn/QXGo/yFuu/8VbL//EWe7/wxg + tv8IXLL/BFmv/wJYrf8AV63/AFqv/wBfs/8AZLb/EmGn/zpkk/9ufYf/aHt//2h8f/9ofH//b4GF/4WU + mP+Lmp3/jJyf/5Ojpv+crrL/rsHF/7/U1/+OrLWRABMaMAAAABIAAAAEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAABAA2TTLP5unxz+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/nL3L/zBo + i//F3uT/z+bq/8/m6v/P5ur/zuXp/8Td4f+gvcL/nLm+/5y5vv+cub7/nLm+/5y5vv92kKn/OXGu/x54 + x/8ac8X/Fm/B/xRwv/8Rbr3/Dm26/wpqt/8IZ7T/BWOx/wNisP8BYbH/AGS2/wBrvP8Ebrr/L2SS/2N1 + f/9sgIP/bICD/2yAhP+Bk5b/j6Ci/5Cho/+UpKf/mqyv/6m7v/+4zdD/krC3mQAUHTIAAAASAAAABAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAM0ouyODl49Dm6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m + 6v/P5ur/qsjT/zhukP+ty9X/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/xNzg/6jDyP+cub7/nLm+/5y5 + vv+Xs7r/QnKp/yJ+zf8jgdD/JIbS/yKH0f8fg83/Gn7I/xd7xP8TdsD/EHO8/wxvuP8JbLX/Bmmy/wRn + sP8CaLT/AG67/wVwu/86YYr/cIaK/3CFif9whor/gZSX/5mqrf+crbD/n7C0/6O1uP+sv8L/uM3Q/5q3 + vqMAGCIwAAAAEgAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEADJHKsTd4tnQ5+r/z+bq/8/m + 6v/P5ur/z+bq/8/m6v/P5ur/z+bq/4uwwf9UhKD/yOHm/3ykuP/L4+j/z+bq/8/m6v/P5ur/z+bq/87l + 6f/H3+P/q8bK/5y5vv+cub7/iaOw/y91uv8rjNn/MJXh/y6T3v8pjtn/JYrV/yGF0P8dgcv/GH3G/xV5 + w/8RdL7/DnG7/wtut/8IarT/BWix/wNnsf8Bcb7/KVmO/3aNkP90io3/dIqN/3+UmP+itLf/p7q9/6zA + w/+xxcj/t8zP/8DV2P+jwMatABwoLAAAAA4AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAv + Qia8193L0efr/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/Y5Cp/0V4l/+evsz/z+bq/8/m + 6v/P5ur/z+bq/8/m6v/P5ur/zuXp/7PN0v+cub7/nLm+/46ptP89f7//O6Lt/zif6v81nOb/MZfi/0Cd + 4P+pzej/1Nre/8XGx/+vtbn/l6m3/12Tu/8Tdb3/DnG7/wpttv8IarT/BWq0/zBckP99lJj/eZCU/3eO + kv9+lJj/pbi7/63BxP+4zdD/wNXZ/8bc4P/M4eX/r8vRtQAkMiYAAAAIAAAAAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAIALD4gtdDXwdHn6//P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8Lb + 4v/I4Ob/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8Ha3v+eu8D/nLm+/5y5vv+Jo7D/RZPV/0Kp + 9f8+pfD/O6Lt/zed6P+LxfD/lsPj/2Gi0P9EjMD/N4C2/zt+r/9pk7P/M4TB/xN3wf8Qc7z/DG+5/wls + tf8xW5D/hJyh/32Vmf+DmZ3/lams/6W3uv+rvsH/t8vP/8LX2//M4uX/zOPn73Wap3IAIS8cAAAABAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACACg5GqvJ0LHR6Ov/z+bq/8/m6v/P5ur/z+bq/8zk + 6P+ty9b/T4Cd/x1YgP8cV3//G1d+/yxkif9tmK//udTc/8/m6v/P5ur/z+bq/8Tc4f+kwMX/nLm+/5y5 + vv+cub7/k663/02JxP9Hr/n/RKz3/0Kp9f89pPD/HY3c/wl7zP8IdsX/Bm+8/wVqtf8CZKz/AmCn/xyA + yv8bf8n/FnrE/xN3wP8Scbn/SHCd/5WvtP+ftrr/qr3B/6i6vf+ou77/q77B/7TIy/+/1dj/t9DVzVZ8 + imYAFyEiAAAACgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAjMRahwMml0ejr/8/m + 6v/P5ur/z+bq/8/m6v+JrsD/LWWJ/z5zk/+FrL7/nr/N/56/zP9+prr/NWuO/0N2lv+uy9b/z+bq/87l + 6f+qxcr/nLm+/5y5vv+cub7/nLm+/5y5vv9lhqr/SqHn/0iw/P9Grvn/P6j0/xmL2/8Je8z/CHbF/wZv + vP8FarX/AmSs/wFfpv8egsv/IYbQ/xyBy/8Zfcf/Lnax/36br/+81Nn/w9rd/7zR1P+2ys3/scXI/7HF + yP+3y87/wNXZ/4alro0AFBw8AAAAGgAAAAoAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAIAGSQQlLa/mdLo7P/P5ur/z+bq/87l6f+Xusn/GFR8/0l7mv+919//z+bq/8/m6v/P5ur/z+bq/8ri + 5/9Ddpb/MWiL/8Da4P+0ztL/nLm+/5y5vv+cub7/nLm+/5y5vv+cub7/k6+4/2mEpP9QnNv/Sqz1/0Gr + +P8Yitv/CXvM/wh2xf8Gb7z/BWq1/wJkrP8BX6b/IYTN/ymO2P8pgsf/O3qz/4KbrP+mwcf/w9vf/8Tc + 4P/I3+T/yeDj/8Xb3v/C2dz/w9nc/8bc4P+syM65DCQtQgAAACAAAAAOAAAAAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAACAAoPComtt43S6ez/z+bq/8/m6v++2OD/QnaW/01/nP+NscP/RHiX/6DA + zv/P5ur/z+bq/8Hb4v91nrT/YI6o/ztwkv9znLD/o7/E/5y5vv+cub7/nLm+/5y5vv+cub7/nLm+/5y5 + vv+Wsrr/gJyx/1+Is/8+iMr/FIbW/wl7zP8IdsX/Bm+8/wVqtf8CZKz/AV+m/yR3vP9Ddqz/Zous/4ah + sf+buL3/nLm+/6G9wv+jv8T/qMPI/7PN0v/J4OT/zOPn/8zj5//N5Oj/wtvg2UZkb14AAAAmAAAAEgAA + AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaApbCB0Ofr+c/m6v/P5ur/mrzK/xhU + ff+sytX/z+bq/zNqjf8NS3b/ZJCq/4KpvP8jXYP/E1B6/7XR2v+VuMf/O3CS/7DM1P+ivsP/nLm+/5y5 + vv+cub7/nLm+/5y5vv+cub7/nLm+/5y5vv+cub7/T36q/w5+zv8Je8z/CHbF/wZvvP8FarX/AmSs/wFf + pv8sZ5z/i6Wy/5y5vv+cub7/nLm+/5y5vv+cub7/nLm+/5y5vv+cub7/n7zB/7XP1P/M4+j/z+bq/8/l + 6fV8nqmDAAECMAAAABgAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGfKGtds7l + 6fXP5ur/z+bq/4Sqvf8SUHn/y+Po/8/m6v98pLn/Dkx3/w1Mdv8OTHf/C0p1/0+Anf/P5ur/vdff/ytj + iP+ty9b/wNjc/6S/xP+cub7/nLm+/5y5vv+cub7/nLm+/5y5vv+cub7/nLm+/0d4qP8Nf9D/CXvM/wh2 + xf8Gb7z/BWq1/wJkrP8BX6b/J2Sc/4mjsf+cub7/nLm+/5y5vv+cub7/nLm+/5y5vv+cub7/nLm+/5y5 + vv+dur//sMvQ/73W2v/E3eD/l7nBpwAOFDoAAAAeAAAACgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAnWbqGTM4+frz+bq/8/m6v+Ap7r/F1N8/87l6f/P5ur/t9Pb/zZsjv8LSnX/C0p1/yFc + gv+kxND/z+bq/8Hb4v8oYYb/q8nU/8/m6v/J4eX/qMPI/5y5vv+rxsv/vdba/7nS1v+rxsv/n7vA/5y5 + vv8+b6X/DIDS/wp8zP8IdsX/Bm+8/wVqtf8CZKz/AV+m/yBgmv+Fnq7/nLm+/5y5vv+cub7/nLm+/5y5 + vv+cub7/nLm+/5y5vv+cub7/nLm+/5y5vv+cub7/nrzB/5y9wuMEKDZEAAAAJgAAAA4AAAAEAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJGcoM2u9bcydHn6//P5ur/lLfH/xNRev+61d3/z+bq/83k + 6P9umbD/C0p1/wtKdf9VhKH/yODl/8/m6v+jw9D/NGuO/7fT3P/P5ur/z+bq/8ff4/+2z9T/yuHm/8/m + 6v/P5ur/y+Pn/7/Y3P+uyc7/N2eh/xqL2v8pk97/JI3Z/xuE0f8Vf8z/DHbD/wRnsf8bXZr/gpqr/5y5 + vv+cub7/nLm+/5y5vv+cub7/nLm+/5y5vv+cub7/nLm+/5y5vv+cub7/nLm+/526v/+jwcb9Pmd0YAAH + CiwAAAASAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACw+DFuFlFLP5urz0Ofq/7XR + 2v80a43/aJSs/8ri5//P5ur/wNrh/xdTfP8ST3n/sc7Y/8/m6v/G3uT/U4Og/2WRqv/N5On/z+bq/8/m + 6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/wtfg/1KOyP9LrPH/Rafu/zyg6f8xmOP/KJHe/x2J + 2P8Vg9P/Hmuw/3yWq/+cub7/nLm+/5y5vv+cub7/nLm+/5y5vv+cub7/nLm+/5y5vv+cub7/nLm+/5y5 + vv+cub7/ob7D/36iq50AFR00AAAAFAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAIAL0IcpsTMq9Hn6/3N5Oj/d6C1/yFbgv+Wucj/z+bq/8/m6v9VhaH/Snyb/87l6f/P5ur/hau+/yNd + g/+00Nn/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8Xb4/9ekcj/WLX4/0+v + 8/9Hqe//PKHp/zSa5P8okt7/IIvZ/yZ3vP96lav/nLm+/5y5vv+cub7/nLm+/5y5vv+cub7/nLm+/5y5 + vv+cub7/nLm+/5y5vv+cub7/nLm+/5+8wf+Osbi7ABsmNgAAABQAAAAGAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAEAAAADEdue0q+2N3P0Ofq/8/m6v9ciqX/HlmA/3Kcs/+nxtL/nb/M/5u9 + y/+iws//ZZKr/yZghf+StcX/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m + 6v/P5ur/k7DN/2Wo4f9atvj/VLL2/0qr8f9CpOz/N5vl/zGL0v9Yg63/kq23/5y5vv+cub7/nLm+/5y5 + vv+cub7/nLm+/5y5vv+cub7/nLm+/5y5vv+cub7/nLm+/5y5vv+evMH/jrC4vQAbJzYAAAAUAAAABgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACgAAABYBFR0ydpmketHn6//P5ur/xN3j/42x + wv8iXIL/JF6E/zhukP83bY//I12D/zlvkP+fwM3/y+Ln/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m + 6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8bd5P+hutH/b5bC/1h/sv9OisT/SXiw/055qv9ni63/kay2/5y5 + vv+cub7/nLm+/5y5vv+cub7/nLm+/5y5vv+cub7/nLm+/5y5vv+cub7/nLm+/5y5vv+cub7/nrzB/46w + uL0AGyc2AAAAFAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAUHBZWeIROi664j6zK + 0bXO5en3z+bq/8/m6v/P5ur/yeHm/6bG0f+GrL7/j7PE/7bS2//O5en/z+bq/8/m6v/P5ur/z+bq/8/m + 6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v+zzNH/kay2/5i1 + u/+cub7/nLm+/5y5vv+cub7/nLm+/5y5vv+cub7/nLm+/5y5vv+cub7/nLm+/5y5vv+cub7/nLm+/5y5 + vv+cub7/nLm+/568wf+OsLi9ABsnNgAAABQAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAYDKTgkrcnQrdLo7P3R5+v/0Obq/8/m6v/P5ur/z+bq/4itv/9FeJf/ttLb/8/m6v+OssP/v9ng/8/m + 6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m + 6v/N5Oj/q8bL/5y5vv+cub7/nLm+/5y5vv+cub7/nLm+/5y5vv+cub7/nLm+/5y5vv+cub7/nLm+/5y5 + vv+cub7/nLm+/5y5vv+cub7/nLm+/5y5vv+evMH/jrC4vQAbJzYAAAAUAAAABgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAIAAAAKUHWCSMLb4dfQ5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/L4+j/bJev/8/m + 6v+z0Nn/LmWJ/6XF0f/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m + 6v/P5ur/z+bq/87l6f/L4ub/utPY/6C8wf+cub7/nLm+/5y5vv+cub7/nLm+/5y5vv+cub7/nLm+/5y5 + vv+cub7/nLm+/5y5vv+cub7/nLm+/5y5vv+cub7/nLm+/5y5vv+cub7/nrzB/46wuL0AGyc2AAAAFAAA + AAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAADnKVoWzL4uftz+bq/8/m6v/P5ur/z+bq/8/m + 6v/P5ur/z+bq/3ykuP+8197/Y5Cp/2WRqv+Zu8n/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m + 6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v+81tr/qcXK/6C8wf+cub7/nLm+/5y5vv+cub7/nLm+/5y5 + vv+cub7/nLm+/5y5vv+cub7/nLm+/5y5vv+cub7/nLm+/5y5vv+cub7/nLm+/5y5vv+cub7/nLm+/568 + wf+OsLi9ABsnNgAAABQAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAARGBaTtb+X0ejr/8/m + 6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v+ty9b/Xoym/0x+m/+00dr/hqy+/8/m6v/P5ur/z+bq/8/m + 6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/87l6f++1tv/nLm+/5y5vv+cub7/nLm+/5y5 + vv+cub7/nLm+/5y5vv+cub7/nLm+/5y5vv+cub7/nLm+/5y5vv+cub7/nLm+/5y5vv+cub7/nLm+/5y5 + vv+cub7/nLm+/5y5vv+evMH/jrC4vQAbJzYAAAAUAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAgAJjYmtdHXv9Hn6//P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/y+Po/yVehP+Ap7v/yuLn/3eg + tf/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/H3+P/pcHG/5y5 + vv+cub7/nLm+/5y5vv+cub7/nLm+/5y5vv+dur//nrzB/6C+w/+hvsP/n7zB/5y5vv+cub7/nLm+/5y5 + vv+cub7/nLm+/5y5vv+cub7/nLm+/5y5vv+cub7/nrzB/46wuL0AHCg2AAAAFAAAAAYAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAABAUKDkJWOM7l6fHQ5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/5e6 + yf9di6b/udTd/63L1f9RgZ7/kbXF/8/m6v/P5ur/z+bq/9Hn6//L4+fvzeXo9c/m6v/P5ur/z+bq/8/m + 6v/P5ur/s83S/5y5vv+cub7/nLm+/5y5vv+cub7/nbq//5+8wf+hv8T9nr3C65K1u8V9o62RVIGOYpW3 + vcmgvcL/nbq//5y5vv+cub7/nLm+/5y5vv+cub7/nLm+/5y5vv+cub7/nLm+/568wf+Osbm9AB4rMAAA + ABAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0qDmaOm1zT6ez/z+bq/8/m6v/P5ur/z+bq/8/m + 6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/z+bq/8/m6v/P5ur/0Ofr/9Lp7P+61NrHgKOueK/L + 0rfR6Ov/z+bq/8/m6v/P5ur/z+bq/6jDyP+cub7/nLm+/526v/+evMD/oL7D/6PBxvuZusDXdp6ol1yH + lGQqWWksAC0/FgApOhJJeIhaocHG66LBxf+hvsP/oL3C/5+9wf+eu8D/nrvA/567wP+dur//nbq//5y6 + vv+fvMH/jrG5vQAiMSwAAAAMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzSBalw8uZ1Oru/9Lp + 7P/S6ez/0uns/9Lp7P/S6ez/0uns/9Lp7P/S6ez/0uns/9Lp7P/S6ez/0uns/9Lp7P/S6ez/0ejr+77X + 3cmFqLN4ADBEJgAVHg5slKBayuLm49Pp7P/S6ez/0uns/9Ho6/+kwcb/osDE/6LAxf2evsPtlLa8y4Go + sZk9bX1MADVMJgAiMAwAAAAEAAAAAgAAAAAAAAAAADVKDEFyg05umKN0faStjYWrs6GLr7exkLO6w5S2 + vc+XuL7VmrvA3Zy8weWevsPtosHG9ZK1vL0ALD4iAAAABgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAOVEQbJSiZISptImEqLSJg6i0iYOotImDqLSJg6i0iYOotImDqLSJg6i0iYOotImDqLSJg6i0iYOo + tImDqLSJhKi0iYKmsoFJdYQ6ACw+FAAAAAQAAAACKFlsHnWcqXKEqLSJg6i0iYOotImBp7KJZ5GdiWeR + nYlnkp6HX4uYajRicjAAMEQWAB8sCAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMkgGADhPDAA0 + SxIANk0WADdOGAA3ThwzZHUwRHOCPFJ/jExahZJaX4uXamSPm3ZXhJJqADBEFgAAAAIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAA + AAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA + AAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAIAAAACAAAAAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA///////////////////////////////////////////8PgAAAD5///gMAAAAHD//+AAAAAAA + B//4AAAAAAAD//gAAAAAAAD/+AAAAAAAAH/4AAAAAAAAP/gAAAAAAAAf+AAAAAAAAB/4AAAAAAAAH/gA + AAAAAAAf+AAAAAAAAD/4AAAAAAAAf/gAAAAAAAB//AAAAAAAAH/8AAAAAAAAP/4AAAAAAAA//gAAAAAA + AD/8AAAAAAAAP/gAAAAAAAA/+AAAAAAAAD/4AAAAAAAAP/gAAAAAAAA/+AAAAAAAAD/8AAAAAAAAP/wA + AAAAAAA//AAAAAAAAD/8AAAAAAAAH/wAAAAAAAAf/AAAAAAAAB/8AAAAAAAAH/wAAAAAAAAf/AAAAAAA + AB/8AAAAAAAAP/wAAAAAAAB//AAAAAAAAH/8AAAAAAAAf/wAAAAAAAB//AAAAAAAAD/+AAAAAAAAP/4A + AAAAAAA//gAAAAAAAD//AAAAAAAAH/8AAAAAAAAf/4AAAAAAAB//wAAAAAAAH/8AAAAAAAAf/gAAAAAA + AB/+AAAAAAAAH/4AAAAAAAAf/AAAAAAAAB/8AAAAAAAAH/wAAAAACAAf/AAAQAB8AB/4AAHgA/8AH/wA + A/Af//////////////////////////////////////////////8= + + + \ No newline at end of file diff --git a/MapEditor/Map Editor/Map Editor.csproj b/MapEditor/Map Editor/Map Editor.csproj new file mode 100644 index 0000000..c2002b4 --- /dev/null +++ b/MapEditor/Map Editor/Map Editor.csproj @@ -0,0 +1,357 @@ + + + + + Debug + AnyCPU + {667362DB-5C56-4B9F-9FD5-0797D13C8766} + WinExe + Properties + Map_Editor + Map Editor + v4.7.2 + 512 + false + 2017.3.13.1858 + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.1.0.0 + false + true + + + x86 + false + none + false + bin\Release\ + DEBUG;TRACE + prompt + 4 + true + AllRules.ruleset + true + false + + + x86 + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + false + true + + + ico.ico + + + Map_Editor.Program + + + + False + C:\Windows\Microsoft.NET\DirectX for Managed Code\1.0.2902.0\Microsoft.DirectX.dll + + + False + C:\Windows\Microsoft.NET\DirectX for Managed Code\1.0.2902.0\Microsoft.DirectX.Direct3D.dll + + + False + C:\Windows\Microsoft.NET\DirectX for Managed Code\1.0.2911.0\Microsoft.DirectX.Direct3DX.dll + + + + + + + + + + + UserControl + + + CellInfoControl.cs + + + + + + + Form + + + FrmAbout.cs + + + Form + + + FrmJump.cs + + + Form + + + FrmSetLight.cs + + + Form + + + FrmSetAnimation.cs + + + + Form + + + Main.cs + + + + + Form + + + NewFileFrm.cs + + + + + Form + + + FrmSetDoor.cs + + + UserControl + + + CellInfoControl_1.cs + + + UserControl + + + CellInfoControl_2.cs + + + + CellInfoControl.cs + + + CellInfoControl_1.cs + + + FrmAbout.cs + Designer + + + FrmJump.cs + + + FrmSetAnimation.cs + + + FrmSetLight.cs + + + Main.cs + + + NewFileFrm.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + FrmSetDoor.cs + + + CellInfoControl_2.cs + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + False + Microsoft .NET Framework 4 %28x86 and x64%29 + true + + + False + .NET Framework 3.5 SP1 + false + + + False + Windows Installer 4.5 + true + + + + + False + Mir2 Map Editor v1.1 + 1 + ico.ico + + + + + \ No newline at end of file diff --git a/MapEditor/Map Editor/MapCode.cs b/MapEditor/Map Editor/MapCode.cs new file mode 100644 index 0000000..f04f538 --- /dev/null +++ b/MapEditor/Map Editor/MapCode.cs @@ -0,0 +1,117 @@ +using System; +using System.IO; + +namespace Map_Editor +{ + public class CellInfo + { + /// + /// 资源编号 + /// + public short BackIndex; + /// + /// 资源内图片索引 + /// + public int BackImage; + public short MiddleIndex; + public short MiddleImage; + public short FrontIndex; + public short FrontImage; + + public byte DoorIndex; + public byte DoorOffset; + + public byte FrontAnimationFrame; + public byte FrontAnimationTick; + + public byte MiddleAnimationFrame; + public byte MiddleAnimationTick; + + public short TileAnimationImage; + public short TileAnimationOffset; + public byte TileAnimationFrames; + + public byte Light; + public byte Unknown; + + + public bool FishingCell; + //public List CellObjects; + //public void DrawObjects() + //{ + // if (CellObjects == null) return; + // for (int i = 0; i < CellObjects.Count; i++) + // CellObjects[i].Draw(); + //} + } + + public class MapReader + { + public int Width, Height; + public CellInfo[,] MapCells; + private string FileName; + private byte[] Bytes; + + public MapReader(string FileName) + { + this.FileName = FileName; + initiate(); + } + + private void initiate() + { + if (File.Exists(FileName)) + { + Bytes = File.ReadAllBytes(FileName); + } + else + { + Width = 1000; + Height = 1000; + MapCells = new CellInfo[Width, Height]; + + for (int x = 0; x < Width; x++) + for (int y = 0; y < Height; y++) + { + MapCells[x, y] = new CellInfo(); + } + return; + } + LoadMapType8(); + + } + private void LoadMapType8() + { + try + { + int offset = 0; + Width = BitConverter.ToInt16(Bytes, offset); + offset += 2; + Height = BitConverter.ToInt16(Bytes, offset); + MapCells = new CellInfo[Width, Height]; + + offset = 56; + + for (int x = 0; x < Width; x++) + for (int y = 0; y < Height; y++) + { + MapCells[x, y] = new CellInfo(); + MapCells[x, y].MiddleIndex = 1; + MapCells[x, y].MiddleImage = (short)BitConverter.ToInt16(Bytes, offset); + offset += 2; + MapCells[x, y].FrontIndex = 2; + MapCells[x, y].FrontImage = (short)BitConverter.ToInt16(Bytes, offset); + offset += 2; + if ((MapCells[x, y].MiddleImage & 0x8000) != 0) + MapCells[x, y].BackImage = 0x20000000; + MapCells[x, y].MiddleImage = (short)(MapCells[x, y].MiddleImage & 0x7FFF); + } + } + catch (Exception ex) + { + // if (Settings.LogErrors) CMain.SaveError(ex.ToString()); + } + } + } +} + \ No newline at end of file diff --git a/MapEditor/Map Editor/NewFileFrm.Designer.cs b/MapEditor/Map Editor/NewFileFrm.Designer.cs new file mode 100644 index 0000000..1c5b395 --- /dev/null +++ b/MapEditor/Map Editor/NewFileFrm.Designer.cs @@ -0,0 +1,122 @@ +namespace Map_Editor +{ + partial class NewFileFrm + { + /// + /// 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.txtWidth = new System.Windows.Forms.TextBox(); + this.txtHeight = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.btnOk = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("Microsoft YaHei", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label1.Location = new System.Drawing.Point(98, 27); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(96, 21); + this.label1.TabIndex = 0; + this.label1.Text = "Map Width"; + this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + this.label1.Click += new System.EventHandler(this.label1_Click); + // + // txtWidth + // + this.txtWidth.Font = new System.Drawing.Font("Microsoft YaHei", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.txtWidth.Location = new System.Drawing.Point(196, 24); + this.txtWidth.Name = "txtWidth"; + this.txtWidth.Size = new System.Drawing.Size(100, 29); + this.txtWidth.TabIndex = 1; + this.txtWidth.Text = "200"; + this.txtWidth.TextChanged += new System.EventHandler(this.txtWidth_TextChanged); + this.txtWidth.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txtWidth_KeyDown); + // + // txtHeight + // + this.txtHeight.Font = new System.Drawing.Font("Microsoft YaHei", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.txtHeight.Location = new System.Drawing.Point(196, 76); + this.txtHeight.Name = "txtHeight"; + this.txtHeight.Size = new System.Drawing.Size(100, 29); + this.txtHeight.TabIndex = 3; + this.txtHeight.Text = "200"; + this.txtHeight.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txtHeight_KeyDown); + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Font = new System.Drawing.Font("Microsoft YaHei", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label2.Location = new System.Drawing.Point(92, 79); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(101, 21); + this.label2.TabIndex = 2; + this.label2.Text = "Map Height"; + // + // btnOk + // + this.btnOk.DialogResult = System.Windows.Forms.DialogResult.OK; + this.btnOk.Font = new System.Drawing.Font("Microsoft YaHei", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnOk.Location = new System.Drawing.Point(119, 136); + this.btnOk.Name = "btnOk"; + this.btnOk.Size = new System.Drawing.Size(96, 45); + this.btnOk.TabIndex = 4; + this.btnOk.Text = "OK"; + this.btnOk.UseVisualStyleBackColor = true; + this.btnOk.Click += new System.EventHandler(this.btnOk_Click); + // + // NewFileFrm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(351, 194); + this.Controls.Add(this.btnOk); + this.Controls.Add(this.txtHeight); + this.Controls.Add(this.label2); + this.Controls.Add(this.txtWidth); + this.Controls.Add(this.label1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "NewFileFrm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "NewFileFrm"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox txtWidth; + private System.Windows.Forms.TextBox txtHeight; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Button btnOk; + } +} \ No newline at end of file diff --git a/MapEditor/Map Editor/NewFileFrm.cs b/MapEditor/Map Editor/NewFileFrm.cs new file mode 100644 index 0000000..afc6a97 --- /dev/null +++ b/MapEditor/Map Editor/NewFileFrm.cs @@ -0,0 +1,68 @@ +using System; +using System.Windows.Forms; + +namespace Map_Editor +{ + public partial class NewFileFrm : Form + { + private readonly Main.DelSetMapSize _delSetMapSize; + public NewFileFrm() + { + InitializeComponent(); + } + + public NewFileFrm(Main.DelSetMapSize delSetMapSize) + { + InitializeComponent(); + _delSetMapSize = delSetMapSize; + } + + private void btnOk_Click(object sender, EventArgs e) + { + int w = Convert.ToInt32(txtWidth.Text.Trim()); + int h = Convert.ToInt32(txtHeight.Text.Trim()); + if (w<=0||h<=0||w>=4003||h>=4003) + { + MessageBox.Show("Map Size Max 4000*4000"); + } + else + { + _delSetMapSize(w, h); + DialogResult = DialogResult.OK; + Close(); + } + } + + private void txtWidth_KeyDown(object sender, KeyEventArgs e) + { + switch (e.KeyCode) + { + case Keys.Enter: + KeyPressEventArgs arg = new KeyPressEventArgs(Convert.ToChar(Keys.Enter)); + btnOk_Click(sender, arg); + break; + } + } + + private void txtHeight_KeyDown(object sender, KeyEventArgs e) + { + switch (e.KeyCode) + { + case Keys.Enter: + KeyPressEventArgs arg = new KeyPressEventArgs(Convert.ToChar(Keys.Enter)); + btnOk_Click(sender, arg); + break; + } + } + + private void txtWidth_TextChanged(object sender, EventArgs e) + { + + } + + private void label1_Click(object sender, EventArgs e) + { + + } + } +} diff --git a/MapEditor/Map Editor/NewFileFrm.resx b/MapEditor/Map Editor/NewFileFrm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/MapEditor/Map Editor/NewFileFrm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/MapEditor/Map Editor/Program.cs b/MapEditor/Map Editor/Program.cs new file mode 100644 index 0000000..936db59 --- /dev/null +++ b/MapEditor/Map Editor/Program.cs @@ -0,0 +1,30 @@ +using System; +using System.IO; +using System.Windows.Forms; + +namespace Map_Editor +{ + static class Program + { + public static string openFileWith { get; set; } = string.Empty; + /// + /// The main entry point for the application。 + /// + [STAThread] + static void Main(string[] args) + { + if (args.Length == 1) + { + FileInfo file = new FileInfo(args[0]); + if (file.Exists) + { + openFileWith = args[0]; + } + } + + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Main()); + } + } +} diff --git a/MapEditor/Map Editor/Properties/AssemblyInfo.cs b/MapEditor/Map Editor/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..8ce65b7 --- /dev/null +++ b/MapEditor/Map Editor/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.InteropServices; + +// 有关程序集的常规信息通过以下 +// 特性集控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("Map Editor")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Map Editor")] +[assembly: AssemblyCopyright("Copyright © 2016")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// 将 ComVisible 设置为 false 使此程序集中的类型 +// 对 COM 组件不可见。 如果需要从 COM 访问此程序集中的类型, +// 则将该类型上的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("788c172e-1a3b-45b8-bf62-d7f998e77bf5")] + +// 程序集的版本信息由下面四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +// 可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值, +// 方法是按如下所示使用“*”: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("2017.3.13.1858")] +[assembly: AssemblyFileVersion("2017.3.13.1858")] diff --git a/MapEditor/Map Editor/Properties/Resources.Designer.cs b/MapEditor/Map Editor/Properties/Resources.Designer.cs new file mode 100644 index 0000000..e0d5a82 --- /dev/null +++ b/MapEditor/Map Editor/Properties/Resources.Designer.cs @@ -0,0 +1,733 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Map_Editor.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", "16.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("Map_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(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap _100 { + get { + object obj = ResourceManager.GetObject("100", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap _110 { + get { + object obj = ResourceManager.GetObject("110", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap _1100 { + get { + object obj = ResourceManager.GetObject("1100", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap _1110 { + get { + object obj = ResourceManager.GetObject("1110", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap _1120 { + get { + object obj = ResourceManager.GetObject("1120", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap _1130 { + get { + object obj = ResourceManager.GetObject("1130", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap _1140 { + get { + object obj = ResourceManager.GetObject("1140", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap _1150 { + get { + object obj = ResourceManager.GetObject("1150", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap _120 { + get { + object obj = ResourceManager.GetObject("120", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap _130 { + get { + object obj = ResourceManager.GetObject("130", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap _140 { + get { + object obj = ResourceManager.GetObject("140", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap _150 { + get { + object obj = ResourceManager.GetObject("150", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap _160 { + get { + object obj = ResourceManager.GetObject("160", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap _170 { + get { + object obj = ResourceManager.GetObject("170", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap _180 { + get { + object obj = ResourceManager.GetObject("180", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap _190 { + get { + object obj = ResourceManager.GetObject("190", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Animation24 { + get { + object obj = ResourceManager.GetObject("Animation24", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Animation2M16 { + get { + object obj = ResourceManager.GetObject("Animation2M16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Animation32 { + get { + object obj = ResourceManager.GetObject("Animation32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap AnimationM16 { + get { + object obj = ResourceManager.GetObject("AnimationM16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap B24 { + get { + object obj = ResourceManager.GetObject("B24", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap BlackFace32 { + get { + object obj = ResourceManager.GetObject("BlackFace32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Camera { + get { + object obj = ResourceManager.GetObject("Camera", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Delete16 { + get { + object obj = ResourceManager.GetObject("Delete16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Delete24 { + get { + object obj = ResourceManager.GetObject("Delete24", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap DelLayerXR24 { + get { + object obj = ResourceManager.GetObject("DelLayerXR24", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap DelLayerXR32 { + get { + object obj = ResourceManager.GetObject("DelLayerXR32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Door24 { + get { + object obj = ResourceManager.GetObject("Door24", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap F24 { + get { + object obj = ResourceManager.GetObject("F24", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Fire32 { + get { + object obj = ResourceManager.GetObject("Fire32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Fish32 { + get { + object obj = ResourceManager.GetObject("Fish32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap GridA16 { + get { + object obj = ResourceManager.GetObject("GridA16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap GridA24 { + get { + object obj = ResourceManager.GetObject("GridA24", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap GridA32 { + get { + object obj = ResourceManager.GetObject("GridA32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap HelpMan32 { + get { + object obj = ResourceManager.GetObject("HelpMan32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Info24 { + get { + object obj = ResourceManager.GetObject("Info24", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap LayerF32 { + get { + object obj = ResourceManager.GetObject("LayerF32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Limits32 { + get { + object obj = ResourceManager.GetObject("Limits32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap M24 { + get { + object obj = ResourceManager.GetObject("M24", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Map16 { + get { + object obj = ResourceManager.GetObject("Map16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Map24 { + get { + object obj = ResourceManager.GetObject("Map24", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Map32 { + get { + object obj = ResourceManager.GetObject("Map32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap MapC32 { + get { + object obj = ResourceManager.GetObject("MapC32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Minus { + get { + object obj = ResourceManager.GetObject("Minus", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Navigator { + get { + object obj = ResourceManager.GetObject("Navigator", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap New32 { + get { + object obj = ResourceManager.GetObject("New32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap NewB32 { + get { + object obj = ResourceManager.GetObject("NewB32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Off { + get { + object obj = ResourceManager.GetObject("Off", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap On { + get { + object obj = ResourceManager.GetObject("On", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Plus { + get { + object obj = ResourceManager.GetObject("Plus", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Radar { + get { + object obj = ResourceManager.GetObject("Radar", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap RAM32 { + get { + object obj = ResourceManager.GetObject("RAM32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap RedLim24 { + get { + object obj = ResourceManager.GetObject("RedLim24", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap RedLim32 { + get { + object obj = ResourceManager.GetObject("RedLim32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Select32 { + get { + object obj = ResourceManager.GetObject("Select32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap SelectA24 { + get { + object obj = ResourceManager.GetObject("SelectA24", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap SelectB32 { + get { + object obj = ResourceManager.GetObject("SelectB32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap SwapLayersG24 { + get { + object obj = ResourceManager.GetObject("SwapLayersG24", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap SwapLayersG32 { + get { + object obj = ResourceManager.GetObject("SwapLayersG32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap System_folder { + get { + object obj = ResourceManager.GetObject("System folder", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap TagXY24 { + get { + object obj = ResourceManager.GetObject("TagXY24", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap TagXY241 { + get { + object obj = ResourceManager.GetObject("TagXY241", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Text24 { + get { + object obj = ResourceManager.GetObject("Text24", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap XG24 { + get { + object obj = ResourceManager.GetObject("XG24", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Yellow16 { + get { + object obj = ResourceManager.GetObject("Yellow16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Yellow24 { + get { + object obj = ResourceManager.GetObject("Yellow24", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Yellow32 { + get { + object obj = ResourceManager.GetObject("Yellow32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/MapEditor/Map Editor/Properties/Resources.resx b/MapEditor/Map Editor/Properties/Resources.resx new file mode 100644 index 0000000..248179f --- /dev/null +++ b/MapEditor/Map Editor/Properties/Resources.resx @@ -0,0 +1,322 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\M24.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Map16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\1110.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\1120.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\DelLayerXR24.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\New32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Off.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\SwapLayersG24.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\180.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\GridA24.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\TagXY24.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Animation24.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\On.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\1140.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\HelpMan32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\B24.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\130.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\1100.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\RedLim32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Fire32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\F24.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\TagXY241.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Yellow32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\150.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\BlackFace32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\SelectA24.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\1130.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Fish32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\XG24.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\System folder.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Select32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Map24.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Plus.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\1150.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\SwapLayersG32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Yellow24.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Camera.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Yellow16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Info24.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\120.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\SelectB32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Minus.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Navigator.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Text24.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Animation2M16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\140.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\170.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\GridA32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Limits32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Animation32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\AnimationM16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\DelLayerXR32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\LayerF32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\NewB32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\160.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\190.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Delete24.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Radar.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\RedLim24.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Delete16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\110.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\GridA16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\RAM32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\MapC32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Map32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\100.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Door24.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/MapEditor/Map Editor/Properties/Settings.Designer.cs b/MapEditor/Map Editor/Properties/Settings.Designer.cs new file mode 100644 index 0000000..96d1415 --- /dev/null +++ b/MapEditor/Map Editor/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Map_Editor.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.10.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/MapEditor/Map Editor/Properties/Settings.settings b/MapEditor/Map Editor/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/MapEditor/Map Editor/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/MapEditor/Map Editor/Resources/100.jpg b/MapEditor/Map Editor/Resources/100.jpg new file mode 100644 index 0000000..e1506ec Binary files /dev/null and b/MapEditor/Map Editor/Resources/100.jpg differ diff --git a/MapEditor/Map Editor/Resources/110.jpg b/MapEditor/Map Editor/Resources/110.jpg new file mode 100644 index 0000000..ed57658 Binary files /dev/null and b/MapEditor/Map Editor/Resources/110.jpg differ diff --git a/MapEditor/Map Editor/Resources/1100.jpg b/MapEditor/Map Editor/Resources/1100.jpg new file mode 100644 index 0000000..48804e6 Binary files /dev/null and b/MapEditor/Map Editor/Resources/1100.jpg differ diff --git a/MapEditor/Map Editor/Resources/1110.jpg b/MapEditor/Map Editor/Resources/1110.jpg new file mode 100644 index 0000000..b8de12d Binary files /dev/null and b/MapEditor/Map Editor/Resources/1110.jpg differ diff --git a/MapEditor/Map Editor/Resources/1120.jpg b/MapEditor/Map Editor/Resources/1120.jpg new file mode 100644 index 0000000..d66f4ba Binary files /dev/null and b/MapEditor/Map Editor/Resources/1120.jpg differ diff --git a/MapEditor/Map Editor/Resources/1130.jpg b/MapEditor/Map Editor/Resources/1130.jpg new file mode 100644 index 0000000..e49feb0 Binary files /dev/null and b/MapEditor/Map Editor/Resources/1130.jpg differ diff --git a/MapEditor/Map Editor/Resources/1140.jpg b/MapEditor/Map Editor/Resources/1140.jpg new file mode 100644 index 0000000..ac859b2 Binary files /dev/null and b/MapEditor/Map Editor/Resources/1140.jpg differ diff --git a/MapEditor/Map Editor/Resources/1150.jpg b/MapEditor/Map Editor/Resources/1150.jpg new file mode 100644 index 0000000..f2167e1 Binary files /dev/null and b/MapEditor/Map Editor/Resources/1150.jpg differ diff --git a/MapEditor/Map Editor/Resources/120.jpg b/MapEditor/Map Editor/Resources/120.jpg new file mode 100644 index 0000000..6aff842 Binary files /dev/null and b/MapEditor/Map Editor/Resources/120.jpg differ diff --git a/MapEditor/Map Editor/Resources/130.jpg b/MapEditor/Map Editor/Resources/130.jpg new file mode 100644 index 0000000..6ff87b4 Binary files /dev/null and b/MapEditor/Map Editor/Resources/130.jpg differ diff --git a/MapEditor/Map Editor/Resources/140.jpg b/MapEditor/Map Editor/Resources/140.jpg new file mode 100644 index 0000000..773706b Binary files /dev/null and b/MapEditor/Map Editor/Resources/140.jpg differ diff --git a/MapEditor/Map Editor/Resources/150.jpg b/MapEditor/Map Editor/Resources/150.jpg new file mode 100644 index 0000000..91a3bf2 Binary files /dev/null and b/MapEditor/Map Editor/Resources/150.jpg differ diff --git a/MapEditor/Map Editor/Resources/160.jpg b/MapEditor/Map Editor/Resources/160.jpg new file mode 100644 index 0000000..a40d120 Binary files /dev/null and b/MapEditor/Map Editor/Resources/160.jpg differ diff --git a/MapEditor/Map Editor/Resources/170.jpg b/MapEditor/Map Editor/Resources/170.jpg new file mode 100644 index 0000000..e4a910e Binary files /dev/null and b/MapEditor/Map Editor/Resources/170.jpg differ diff --git a/MapEditor/Map Editor/Resources/180.jpg b/MapEditor/Map Editor/Resources/180.jpg new file mode 100644 index 0000000..6b470f9 Binary files /dev/null and b/MapEditor/Map Editor/Resources/180.jpg differ diff --git a/MapEditor/Map Editor/Resources/190.jpg b/MapEditor/Map Editor/Resources/190.jpg new file mode 100644 index 0000000..2870b0d Binary files /dev/null and b/MapEditor/Map Editor/Resources/190.jpg differ diff --git a/MapEditor/Map Editor/Resources/Animation24.png b/MapEditor/Map Editor/Resources/Animation24.png new file mode 100644 index 0000000..f7cd512 Binary files /dev/null and b/MapEditor/Map Editor/Resources/Animation24.png differ diff --git a/MapEditor/Map Editor/Resources/Animation2M16.png b/MapEditor/Map Editor/Resources/Animation2M16.png new file mode 100644 index 0000000..fd869a5 Binary files /dev/null and b/MapEditor/Map Editor/Resources/Animation2M16.png differ diff --git a/MapEditor/Map Editor/Resources/Animation32.png b/MapEditor/Map Editor/Resources/Animation32.png new file mode 100644 index 0000000..f6c34d3 Binary files /dev/null and b/MapEditor/Map Editor/Resources/Animation32.png differ diff --git a/MapEditor/Map Editor/Resources/AnimationM16.png b/MapEditor/Map Editor/Resources/AnimationM16.png new file mode 100644 index 0000000..167bb80 Binary files /dev/null and b/MapEditor/Map Editor/Resources/AnimationM16.png differ diff --git a/MapEditor/Map Editor/Resources/B24.png b/MapEditor/Map Editor/Resources/B24.png new file mode 100644 index 0000000..fe8e47b Binary files /dev/null and b/MapEditor/Map Editor/Resources/B24.png differ diff --git a/MapEditor/Map Editor/Resources/BlackFace32.png b/MapEditor/Map Editor/Resources/BlackFace32.png new file mode 100644 index 0000000..1989d24 Binary files /dev/null and b/MapEditor/Map Editor/Resources/BlackFace32.png differ diff --git a/MapEditor/Map Editor/Resources/Camera.png b/MapEditor/Map Editor/Resources/Camera.png new file mode 100644 index 0000000..b965090 Binary files /dev/null and b/MapEditor/Map Editor/Resources/Camera.png differ diff --git a/MapEditor/Map Editor/Resources/DelLayerXR24.png b/MapEditor/Map Editor/Resources/DelLayerXR24.png new file mode 100644 index 0000000..6bdda0a Binary files /dev/null and b/MapEditor/Map Editor/Resources/DelLayerXR24.png differ diff --git a/MapEditor/Map Editor/Resources/DelLayerXR32.png b/MapEditor/Map Editor/Resources/DelLayerXR32.png new file mode 100644 index 0000000..4689cf0 Binary files /dev/null and b/MapEditor/Map Editor/Resources/DelLayerXR32.png differ diff --git a/MapEditor/Map Editor/Resources/Delete16.png b/MapEditor/Map Editor/Resources/Delete16.png new file mode 100644 index 0000000..7173b4e Binary files /dev/null and b/MapEditor/Map Editor/Resources/Delete16.png differ diff --git a/MapEditor/Map Editor/Resources/Delete24.png b/MapEditor/Map Editor/Resources/Delete24.png new file mode 100644 index 0000000..5f1f703 Binary files /dev/null and b/MapEditor/Map Editor/Resources/Delete24.png differ diff --git a/MapEditor/Map Editor/Resources/Door24.png b/MapEditor/Map Editor/Resources/Door24.png new file mode 100644 index 0000000..532ab10 Binary files /dev/null and b/MapEditor/Map Editor/Resources/Door24.png differ diff --git a/MapEditor/Map Editor/Resources/F24.png b/MapEditor/Map Editor/Resources/F24.png new file mode 100644 index 0000000..fa054df Binary files /dev/null and b/MapEditor/Map Editor/Resources/F24.png differ diff --git a/MapEditor/Map Editor/Resources/Fire32.png b/MapEditor/Map Editor/Resources/Fire32.png new file mode 100644 index 0000000..e2f1e00 Binary files /dev/null and b/MapEditor/Map Editor/Resources/Fire32.png differ diff --git a/MapEditor/Map Editor/Resources/Fish32.png b/MapEditor/Map Editor/Resources/Fish32.png new file mode 100644 index 0000000..1c14257 Binary files /dev/null and b/MapEditor/Map Editor/Resources/Fish32.png differ diff --git a/MapEditor/Map Editor/Resources/GridA16.png b/MapEditor/Map Editor/Resources/GridA16.png new file mode 100644 index 0000000..71c34af Binary files /dev/null and b/MapEditor/Map Editor/Resources/GridA16.png differ diff --git a/MapEditor/Map Editor/Resources/GridA24.png b/MapEditor/Map Editor/Resources/GridA24.png new file mode 100644 index 0000000..3bc3c2e Binary files /dev/null and b/MapEditor/Map Editor/Resources/GridA24.png differ diff --git a/MapEditor/Map Editor/Resources/GridA32.png b/MapEditor/Map Editor/Resources/GridA32.png new file mode 100644 index 0000000..fe21b21 Binary files /dev/null and b/MapEditor/Map Editor/Resources/GridA32.png differ diff --git a/MapEditor/Map Editor/Resources/HelpMan32.png b/MapEditor/Map Editor/Resources/HelpMan32.png new file mode 100644 index 0000000..11c574d Binary files /dev/null and b/MapEditor/Map Editor/Resources/HelpMan32.png differ diff --git a/MapEditor/Map Editor/Resources/Info24.png b/MapEditor/Map Editor/Resources/Info24.png new file mode 100644 index 0000000..ef0e203 Binary files /dev/null and b/MapEditor/Map Editor/Resources/Info24.png differ diff --git a/MapEditor/Map Editor/Resources/LayerF32.png b/MapEditor/Map Editor/Resources/LayerF32.png new file mode 100644 index 0000000..0e2fb22 Binary files /dev/null and b/MapEditor/Map Editor/Resources/LayerF32.png differ diff --git a/MapEditor/Map Editor/Resources/Limits32.png b/MapEditor/Map Editor/Resources/Limits32.png new file mode 100644 index 0000000..8f19093 Binary files /dev/null and b/MapEditor/Map Editor/Resources/Limits32.png differ diff --git a/MapEditor/Map Editor/Resources/M24.png b/MapEditor/Map Editor/Resources/M24.png new file mode 100644 index 0000000..9fcff78 Binary files /dev/null and b/MapEditor/Map Editor/Resources/M24.png differ diff --git a/MapEditor/Map Editor/Resources/Map16.png b/MapEditor/Map Editor/Resources/Map16.png new file mode 100644 index 0000000..44d804d Binary files /dev/null and b/MapEditor/Map Editor/Resources/Map16.png differ diff --git a/MapEditor/Map Editor/Resources/Map24.png b/MapEditor/Map Editor/Resources/Map24.png new file mode 100644 index 0000000..7e87d8c Binary files /dev/null and b/MapEditor/Map Editor/Resources/Map24.png differ diff --git a/MapEditor/Map Editor/Resources/Map32.png b/MapEditor/Map Editor/Resources/Map32.png new file mode 100644 index 0000000..56f22d7 Binary files /dev/null and b/MapEditor/Map Editor/Resources/Map32.png differ diff --git a/MapEditor/Map Editor/Resources/MapC32.png b/MapEditor/Map Editor/Resources/MapC32.png new file mode 100644 index 0000000..f919638 Binary files /dev/null and b/MapEditor/Map Editor/Resources/MapC32.png differ diff --git a/MapEditor/Map Editor/Resources/Minus.png b/MapEditor/Map Editor/Resources/Minus.png new file mode 100644 index 0000000..610669d Binary files /dev/null and b/MapEditor/Map Editor/Resources/Minus.png differ diff --git a/MapEditor/Map Editor/Resources/Navigator.png b/MapEditor/Map Editor/Resources/Navigator.png new file mode 100644 index 0000000..772d326 Binary files /dev/null and b/MapEditor/Map Editor/Resources/Navigator.png differ diff --git a/MapEditor/Map Editor/Resources/New32.png b/MapEditor/Map Editor/Resources/New32.png new file mode 100644 index 0000000..91c11aa Binary files /dev/null and b/MapEditor/Map Editor/Resources/New32.png differ diff --git a/MapEditor/Map Editor/Resources/NewB32.png b/MapEditor/Map Editor/Resources/NewB32.png new file mode 100644 index 0000000..9bbe435 Binary files /dev/null and b/MapEditor/Map Editor/Resources/NewB32.png differ diff --git a/MapEditor/Map Editor/Resources/Off.png b/MapEditor/Map Editor/Resources/Off.png new file mode 100644 index 0000000..fc698ca Binary files /dev/null and b/MapEditor/Map Editor/Resources/Off.png differ diff --git a/MapEditor/Map Editor/Resources/On.png b/MapEditor/Map Editor/Resources/On.png new file mode 100644 index 0000000..9f04f61 Binary files /dev/null and b/MapEditor/Map Editor/Resources/On.png differ diff --git a/MapEditor/Map Editor/Resources/Plus.png b/MapEditor/Map Editor/Resources/Plus.png new file mode 100644 index 0000000..ecaa967 Binary files /dev/null and b/MapEditor/Map Editor/Resources/Plus.png differ diff --git a/MapEditor/Map Editor/Resources/RAM32.png b/MapEditor/Map Editor/Resources/RAM32.png new file mode 100644 index 0000000..e62f394 Binary files /dev/null and b/MapEditor/Map Editor/Resources/RAM32.png differ diff --git a/MapEditor/Map Editor/Resources/Radar.png b/MapEditor/Map Editor/Resources/Radar.png new file mode 100644 index 0000000..1bba5fb Binary files /dev/null and b/MapEditor/Map Editor/Resources/Radar.png differ diff --git a/MapEditor/Map Editor/Resources/RedLim24.png b/MapEditor/Map Editor/Resources/RedLim24.png new file mode 100644 index 0000000..90047f3 Binary files /dev/null and b/MapEditor/Map Editor/Resources/RedLim24.png differ diff --git a/MapEditor/Map Editor/Resources/RedLim32.png b/MapEditor/Map Editor/Resources/RedLim32.png new file mode 100644 index 0000000..4343cab Binary files /dev/null and b/MapEditor/Map Editor/Resources/RedLim32.png differ diff --git a/MapEditor/Map Editor/Resources/Select32.png b/MapEditor/Map Editor/Resources/Select32.png new file mode 100644 index 0000000..2d4271e Binary files /dev/null and b/MapEditor/Map Editor/Resources/Select32.png differ diff --git a/MapEditor/Map Editor/Resources/SelectA24.png b/MapEditor/Map Editor/Resources/SelectA24.png new file mode 100644 index 0000000..4efdd68 Binary files /dev/null and b/MapEditor/Map Editor/Resources/SelectA24.png differ diff --git a/MapEditor/Map Editor/Resources/SelectB32.png b/MapEditor/Map Editor/Resources/SelectB32.png new file mode 100644 index 0000000..6de3b5d Binary files /dev/null and b/MapEditor/Map Editor/Resources/SelectB32.png differ diff --git a/MapEditor/Map Editor/Resources/Square.png b/MapEditor/Map Editor/Resources/Square.png new file mode 100644 index 0000000..e5470ab Binary files /dev/null and b/MapEditor/Map Editor/Resources/Square.png differ diff --git a/MapEditor/Map Editor/Resources/SwapLayersG24.png b/MapEditor/Map Editor/Resources/SwapLayersG24.png new file mode 100644 index 0000000..5569dce Binary files /dev/null and b/MapEditor/Map Editor/Resources/SwapLayersG24.png differ diff --git a/MapEditor/Map Editor/Resources/SwapLayersG32.png b/MapEditor/Map Editor/Resources/SwapLayersG32.png new file mode 100644 index 0000000..6730f2f Binary files /dev/null and b/MapEditor/Map Editor/Resources/SwapLayersG32.png differ diff --git a/MapEditor/Map Editor/Resources/System folder.png b/MapEditor/Map Editor/Resources/System folder.png new file mode 100644 index 0000000..5482db3 Binary files /dev/null and b/MapEditor/Map Editor/Resources/System folder.png differ diff --git a/MapEditor/Map Editor/Resources/TagXY24.png b/MapEditor/Map Editor/Resources/TagXY24.png new file mode 100644 index 0000000..79b5c86 Binary files /dev/null and b/MapEditor/Map Editor/Resources/TagXY24.png differ diff --git a/MapEditor/Map Editor/Resources/TagXY241.png b/MapEditor/Map Editor/Resources/TagXY241.png new file mode 100644 index 0000000..79b5c86 Binary files /dev/null and b/MapEditor/Map Editor/Resources/TagXY241.png differ diff --git a/MapEditor/Map Editor/Resources/Text24.png b/MapEditor/Map Editor/Resources/Text24.png new file mode 100644 index 0000000..4475847 Binary files /dev/null and b/MapEditor/Map Editor/Resources/Text24.png differ diff --git a/MapEditor/Map Editor/Resources/XG24.png b/MapEditor/Map Editor/Resources/XG24.png new file mode 100644 index 0000000..360e3cf Binary files /dev/null and b/MapEditor/Map Editor/Resources/XG24.png differ diff --git a/MapEditor/Map Editor/Resources/Yellow16.png b/MapEditor/Map Editor/Resources/Yellow16.png new file mode 100644 index 0000000..a0bb7e5 Binary files /dev/null and b/MapEditor/Map Editor/Resources/Yellow16.png differ diff --git a/MapEditor/Map Editor/Resources/Yellow24.png b/MapEditor/Map Editor/Resources/Yellow24.png new file mode 100644 index 0000000..9107db0 Binary files /dev/null and b/MapEditor/Map Editor/Resources/Yellow24.png differ diff --git a/MapEditor/Map Editor/Resources/Yellow32.png b/MapEditor/Map Editor/Resources/Yellow32.png new file mode 100644 index 0000000..e733127 Binary files /dev/null and b/MapEditor/Map Editor/Resources/Yellow32.png differ diff --git a/MapEditor/Map Editor/SetrProperty.resx b/MapEditor/Map Editor/SetrProperty.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/MapEditor/Map Editor/SetrProperty.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/MapEditor/Map Editor/Utility.cs b/MapEditor/Map Editor/Utility.cs new file mode 100644 index 0000000..d9167f5 --- /dev/null +++ b/MapEditor/Map Editor/Utility.cs @@ -0,0 +1,104 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Map_Editor +{ + class Utility + { + } + + public class AlphanumComparatorFast : IComparer + { + public int Compare(object x, object y) + { + string s1 = x as string; + if (s1 == null) + { + return 0; + } + string s2 = y as string; + if (s2 == null) + { + return 0; + } + + int len1 = s1.Length; + int len2 = s2.Length; + int marker1 = 0; + int marker2 = 0; + + // Walk through two the strings with two markers. + while (marker1 < len1 && marker2 < len2) + { + char ch1 = s1[marker1]; + char ch2 = s2[marker2]; + + // Some buffers we can build up characters in for each chunk. + char[] space1 = new char[len1]; + int loc1 = 0; + char[] space2 = new char[len2]; + int loc2 = 0; + + // Walk through all following characters that are digits or + // characters in BOTH strings starting at the appropriate marker. + // Collect char arrays. + do + { + space1[loc1++] = ch1; + marker1++; + + if (marker1 < len1) + { + ch1 = s1[marker1]; + } + else + { + break; + } + } while (char.IsDigit(ch1) == char.IsDigit(space1[0])); + + do + { + space2[loc2++] = ch2; + marker2++; + + if (marker2 < len2) + { + ch2 = s2[marker2]; + } + else + { + break; + } + } while (char.IsDigit(ch2) == char.IsDigit(space2[0])); + + // If we have collected numbers, compare them numerically. + // Otherwise, if we have strings, compare them alphabetically. + string str1 = new string(space1); + string str2 = new string(space2); + + int result; + + if (char.IsDigit(space1[0]) && char.IsDigit(space2[0])) + { + int thisNumericChunk = int.Parse(str1); + int thatNumericChunk = int.Parse(str2); + result = thisNumericChunk.CompareTo(thatNumericChunk); + } + else + { + result = str1.CompareTo(str2); + } + + if (result != 0) + { + return result; + } + } + return len1 - len2; + } + } +} diff --git a/MapEditor/Map Editor/ico.ico b/MapEditor/Map Editor/ico.ico new file mode 100644 index 0000000..5f2fc8b Binary files /dev/null and b/MapEditor/Map Editor/ico.ico differ diff --git a/MonsterAttackMethods.txt b/MonsterAttackMethods.txt new file mode 100644 index 0000000..ff340e6 --- /dev/null +++ b/MonsterAttackMethods.txt @@ -0,0 +1,17 @@ +The following current pre-made attack methods for monsters are available. + +* Methods can be found at the bottom of Server.Library/MonsterObject.cs. +* All methods are virtual so can be overriden. + + +PoisonTarget(int chanceToPoison, long poisonDuration, PoisonType poison, long poisonTickSpeed = 1000) + +LineAttack(int distance, int additionalDelay = 500) + +HalfmoonAttack(int delay = 500) + +RangeAttack(int minAttackStat, int maxAttackStat, byte rangeAttackTypeNumber = 0, DefenceType type = DefenceType.MACAgility, int additionalDelay = 500) + +ArrowAttack(int minAttackStat, int maxAttackStat, DefenceType type = DefenceType.MACAgility, int additionalDelay = 500) + +SinglePushAttack(int minAttackStat, int MaxAttackStat, DefenceType type = DefenceType.AC, int delay = 500) \ No newline at end of file diff --git a/MonsterReferenceVideos.txt b/MonsterReferenceVideos.txt new file mode 100644 index 0000000..e4c8f10 --- /dev/null +++ b/MonsterReferenceVideos.txt @@ -0,0 +1,35 @@ +MirEmperor = 459 - https://youtu.be/XsA4l21UCu4?list=PLrocFAbts7oDVgfUgOnyPvrG_lpwultjT +(Part of the PvPvE feature in Korean Mir). + +TreeQueen Video: https://youtu.be/gkXWRJGwsRA + +KingGuard: https://youtu.be/an352zRO9Ug?t=104 + +FlamingMutant & FlyingStatue (Battle System) Fight: https://youtu.be/Xph0hyRFzBo?t=2716 + +FlyingStatue: https://youtu.be/m5wvx-JWz_Q?list=FL8b6JrFIThM4uhYhwfSbTEg + : https://youtu.be/1u-YYtt7Xts + : https://youtu.be/F00LHWFy_Ec?list=PLrocFAbts7oDVgfUgOnyPvrG_lpwultjT&t=7826 + + +Pots/Cats = https://www.youtube.com/watch?v=PyRlSs_Wz9o + +Rhinos = https://www.youtube.com/watch?v=QWu-B70zR5M + +GeneralMeowMeow = https://www.youtube.com/watch?v=HuhdiLT5fRA +KingHydrax = https://www.youtube.com/watch?v=C2H2cdD8HHI +TucsonGeneral = https://www.youtube.com/watch?v=2NXZ0xXchrs +PeacockSpider = https://www.youtube.com/watch?v=nSZ2VCYkQJQ +DarkCaptain = https://www.youtube.com/watch?v=gX0RXr6zG10 + +?? (Bosses) = https://www.youtube.com/watch?v=pQBoatqaKAQ + + +TucsonGeneral = https://www.youtube.com/watch?v=2NXZ0xXchrs + +HornedWarrior + Others = https://www.youtube.com/watch?v=M59ZDpiKJ5M&t=65s +HornedWarrior + Others = https://www.youtube.com/watch?v=C71jvoBxB7Y +HornedSorcerer = https://www.youtube.com/watch?v=UgHyLUMnzho +HornedCommander = https://www.youtube.com/watch?v=KNNmGI-wFnY + +371-376 = https://www.youtube.com/watch?v=TSkeFjeLiq8 \ No newline at end of file diff --git a/PatcherWebSite/Web.config b/PatcherWebSite/Web.config new file mode 100644 index 0000000..a2dbc98 --- /dev/null +++ b/PatcherWebSite/Web.config @@ -0,0 +1,15 @@ + + + + + + + + \ No newline at end of file diff --git a/PatcherWebSite/mir2-patchsite/assets/Mir2 Mir3 logo.psd b/PatcherWebSite/mir2-patchsite/assets/Mir2 Mir3 logo.psd new file mode 100644 index 0000000..acaf859 Binary files /dev/null and b/PatcherWebSite/mir2-patchsite/assets/Mir2 Mir3 logo.psd differ diff --git a/PatcherWebSite/mir2-patchsite/assets/No Glow.psd b/PatcherWebSite/mir2-patchsite/assets/No Glow.psd new file mode 100644 index 0000000..78c7c2c Binary files /dev/null and b/PatcherWebSite/mir2-patchsite/assets/No Glow.psd differ diff --git a/PatcherWebSite/mir2-patchsite/assets/bg_launcher_2.png b/PatcherWebSite/mir2-patchsite/assets/bg_launcher_2.png new file mode 100644 index 0000000..fc72fe4 Binary files /dev/null and b/PatcherWebSite/mir2-patchsite/assets/bg_launcher_2.png differ diff --git a/PatcherWebSite/mir2-patchsite/assets/bg_patcher.psd b/PatcherWebSite/mir2-patchsite/assets/bg_patcher.psd new file mode 100644 index 0000000..3326aa5 Binary files /dev/null and b/PatcherWebSite/mir2-patchsite/assets/bg_patcher.psd differ diff --git a/PatcherWebSite/mir2-patchsite/css/reset.css b/PatcherWebSite/mir2-patchsite/css/reset.css new file mode 100644 index 0000000..3c78598 --- /dev/null +++ b/PatcherWebSite/mir2-patchsite/css/reset.css @@ -0,0 +1,53 @@ +/* http://meyerweb.com/eric/tools/css/reset/ + v2.0 | 20110126 + License: none (public domain) +*/ + +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td, +article, aside, canvas, details, embed, +figure, figcaption, footer, header, hgroup, +menu, nav, output, ruby, section, summary, +time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; +} +/* HTML5 display-role reset for older browsers */ +article, aside, details, figcaption, figure, +footer, header, hgroup, menu, nav, section { + display: block; +} + +body { + line-height: 1; +} + +ol, ul { + list-style: none; +} + +blockquote, q { + quotes: none; +} + + blockquote:before, blockquote:after, + q:before, q:after { + content: ''; + content: none; + } + +table { + border-collapse: collapse; + border-spacing: 0; +} \ No newline at end of file diff --git a/PatcherWebSite/mir2-patchsite/css/style.css b/PatcherWebSite/mir2-patchsite/css/style.css new file mode 100644 index 0000000..ff3767f --- /dev/null +++ b/PatcherWebSite/mir2-patchsite/css/style.css @@ -0,0 +1,134 @@ +html { + width: 786px; + height: 411px; + overflow: hidden; + /* background-color: #151D26;*/ + background-color: black; + color: white; + /* border: 2px solid white;*/ +} + +body { + background: url(../img/bg_launcher_3.png); + width: 100%; + height: 100%; +} + +.main { + height: 411px; + width: 584px; + background-color: #282828; + float:left; +} + +#banner { + position: absolute; + left: 220px; + top: 15px; + width: 550px; + height: 160px; + border: 1px solid black; + background-color: white; + box-shadow: 2px 2px 2px 2px rgba(0, 0, 0, 0.1); +} + +#updates { + position: absolute; + left: 220px; + top: 200px; + width: 320px; + height: 180px; + color: black; +} + +#updates h2 { + color: black; + font-family: Tahoma; + font-weight: bold; + font-size: 18px; + border-bottom: 2px solid black; + width: 100%; + padding: 5px 5px 10px 5px; +} + + #updates ul { + list-style-type: none; + color: black; + font-family: Tahoma; + font-size: 14px; + width: 330px; + } + + #updates ul li { + padding: 3px 0; + white-space: nowrap; + } + + #updates ul li a { + text-decoration: none; + color: black; + width: 250px; + display: inline-block; + overflow: hidden; + text-overflow: ellipsis; + } + + #updates ul li a:hover { + text-decoration: underline; + } + + #updates ul li span { + float: right; + } + +#buttons { + position: absolute; + left: 612px; + top: 230px; + width: 157px; + height: 140px; + color: black; + background-color: white; + border: 1px solid black; +} + +#buttons ul { + height: 100%; +} + +#buttons ul li { + height: 37px; + width: 147px; + border-bottom: 1px solid black; + padding: 5px; +} + + #buttons ul li:first-child + li + li { + border-bottom: none; + } + + +/* +.col { + width: 200px; + height: 411px; + border-left: 1px solid #000000; + border-right: 1px solid #000000; + float: left; +} + + .col ul { + background-color: #1e1e1e + } + + .col ul li { + width: 100%; + height: 67.5px; + border-top: 1px solid #262626; + border-bottom: 1px solid black; + } + + .col ul li:hover { + background-color: #151515; + cursor: pointer; + }*/ \ No newline at end of file diff --git a/PatcherWebSite/mir2-patchsite/img/bg_launcher.png b/PatcherWebSite/mir2-patchsite/img/bg_launcher.png new file mode 100644 index 0000000..d67564c Binary files /dev/null and b/PatcherWebSite/mir2-patchsite/img/bg_launcher.png differ diff --git a/PatcherWebSite/mir2-patchsite/img/bg_launcher_1.png b/PatcherWebSite/mir2-patchsite/img/bg_launcher_1.png new file mode 100644 index 0000000..c0592c4 Binary files /dev/null and b/PatcherWebSite/mir2-patchsite/img/bg_launcher_1.png differ diff --git a/PatcherWebSite/mir2-patchsite/img/bg_launcher_2.png b/PatcherWebSite/mir2-patchsite/img/bg_launcher_2.png new file mode 100644 index 0000000..fc72fe4 Binary files /dev/null and b/PatcherWebSite/mir2-patchsite/img/bg_launcher_2.png differ diff --git a/PatcherWebSite/mir2-patchsite/img/bg_launcher_3.png b/PatcherWebSite/mir2-patchsite/img/bg_launcher_3.png new file mode 100644 index 0000000..122ed77 Binary files /dev/null and b/PatcherWebSite/mir2-patchsite/img/bg_launcher_3.png differ diff --git a/PatcherWebSite/mir2-patchsite/index.html b/PatcherWebSite/mir2-patchsite/index.html new file mode 100644 index 0000000..eb7778a --- /dev/null +++ b/PatcherWebSite/mir2-patchsite/index.html @@ -0,0 +1,137 @@ + + + + + + + + Mir 1 Battle of the King Patcher + + + + + + + +
+

Recent Commits

+
    +
+
+ +
+
    +
  • LOMCN
  • +
  • WIKI
  • +
  • ...
  • +
+
+ + + + + + + + \ No newline at end of file diff --git a/PatcherWebSite/mir2-patchsite/js/moment.js b/PatcherWebSite/mir2-patchsite/js/moment.js new file mode 100644 index 0000000..1484d6c --- /dev/null +++ b/PatcherWebSite/mir2-patchsite/js/moment.js @@ -0,0 +1,5670 @@ +//! moment.js +//! version : 2.29.1 +//! authors : Tim Wood, Iskren Chernev, Moment.js contributors +//! license : MIT +//! momentjs.com + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + global.moment = factory() +}(this, (function () { 'use strict'; + + var hookCallback; + + function hooks() { + return hookCallback.apply(null, arguments); + } + + // This is done to register the method called with moment() + // without creating circular dependencies. + function setHookCallback(callback) { + hookCallback = callback; + } + + function isArray(input) { + return ( + input instanceof Array || + Object.prototype.toString.call(input) === '[object Array]' + ); + } + + function isObject(input) { + // IE8 will treat undefined and null as object if it wasn't for + // input != null + return ( + input != null && + Object.prototype.toString.call(input) === '[object Object]' + ); + } + + function hasOwnProp(a, b) { + return Object.prototype.hasOwnProperty.call(a, b); + } + + function isObjectEmpty(obj) { + if (Object.getOwnPropertyNames) { + return Object.getOwnPropertyNames(obj).length === 0; + } else { + var k; + for (k in obj) { + if (hasOwnProp(obj, k)) { + return false; + } + } + return true; + } + } + + function isUndefined(input) { + return input === void 0; + } + + function isNumber(input) { + return ( + typeof input === 'number' || + Object.prototype.toString.call(input) === '[object Number]' + ); + } + + function isDate(input) { + return ( + input instanceof Date || + Object.prototype.toString.call(input) === '[object Date]' + ); + } + + function map(arr, fn) { + var res = [], + i; + for (i = 0; i < arr.length; ++i) { + res.push(fn(arr[i], i)); + } + return res; + } + + function extend(a, b) { + for (var i in b) { + if (hasOwnProp(b, i)) { + a[i] = b[i]; + } + } + + if (hasOwnProp(b, 'toString')) { + a.toString = b.toString; + } + + if (hasOwnProp(b, 'valueOf')) { + a.valueOf = b.valueOf; + } + + return a; + } + + function createUTC(input, format, locale, strict) { + return createLocalOrUTC(input, format, locale, strict, true).utc(); + } + + function defaultParsingFlags() { + // We need to deep clone this object. + return { + empty: false, + unusedTokens: [], + unusedInput: [], + overflow: -2, + charsLeftOver: 0, + nullInput: false, + invalidEra: null, + invalidMonth: null, + invalidFormat: false, + userInvalidated: false, + iso: false, + parsedDateParts: [], + era: null, + meridiem: null, + rfc2822: false, + weekdayMismatch: false, + }; + } + + function getParsingFlags(m) { + if (m._pf == null) { + m._pf = defaultParsingFlags(); + } + return m._pf; + } + + var some; + if (Array.prototype.some) { + some = Array.prototype.some; + } else { + some = function (fun) { + var t = Object(this), + len = t.length >>> 0, + i; + + for (i = 0; i < len; i++) { + if (i in t && fun.call(this, t[i], i, t)) { + return true; + } + } + + return false; + }; + } + + function isValid(m) { + if (m._isValid == null) { + var flags = getParsingFlags(m), + parsedParts = some.call(flags.parsedDateParts, function (i) { + return i != null; + }), + isNowValid = + !isNaN(m._d.getTime()) && + flags.overflow < 0 && + !flags.empty && + !flags.invalidEra && + !flags.invalidMonth && + !flags.invalidWeekday && + !flags.weekdayMismatch && + !flags.nullInput && + !flags.invalidFormat && + !flags.userInvalidated && + (!flags.meridiem || (flags.meridiem && parsedParts)); + + if (m._strict) { + isNowValid = + isNowValid && + flags.charsLeftOver === 0 && + flags.unusedTokens.length === 0 && + flags.bigHour === undefined; + } + + if (Object.isFrozen == null || !Object.isFrozen(m)) { + m._isValid = isNowValid; + } else { + return isNowValid; + } + } + return m._isValid; + } + + function createInvalid(flags) { + var m = createUTC(NaN); + if (flags != null) { + extend(getParsingFlags(m), flags); + } else { + getParsingFlags(m).userInvalidated = true; + } + + return m; + } + + // Plugins that add properties should also add the key here (null value), + // so we can properly clone ourselves. + var momentProperties = (hooks.momentProperties = []), + updateInProgress = false; + + function copyConfig(to, from) { + var i, prop, val; + + if (!isUndefined(from._isAMomentObject)) { + to._isAMomentObject = from._isAMomentObject; + } + if (!isUndefined(from._i)) { + to._i = from._i; + } + if (!isUndefined(from._f)) { + to._f = from._f; + } + if (!isUndefined(from._l)) { + to._l = from._l; + } + if (!isUndefined(from._strict)) { + to._strict = from._strict; + } + if (!isUndefined(from._tzm)) { + to._tzm = from._tzm; + } + if (!isUndefined(from._isUTC)) { + to._isUTC = from._isUTC; + } + if (!isUndefined(from._offset)) { + to._offset = from._offset; + } + if (!isUndefined(from._pf)) { + to._pf = getParsingFlags(from); + } + if (!isUndefined(from._locale)) { + to._locale = from._locale; + } + + if (momentProperties.length > 0) { + for (i = 0; i < momentProperties.length; i++) { + prop = momentProperties[i]; + val = from[prop]; + if (!isUndefined(val)) { + to[prop] = val; + } + } + } + + return to; + } + + // Moment prototype object + function Moment(config) { + copyConfig(this, config); + this._d = new Date(config._d != null ? config._d.getTime() : NaN); + if (!this.isValid()) { + this._d = new Date(NaN); + } + // Prevent infinite loop in case updateOffset creates new moment + // objects. + if (updateInProgress === false) { + updateInProgress = true; + hooks.updateOffset(this); + updateInProgress = false; + } + } + + function isMoment(obj) { + return ( + obj instanceof Moment || (obj != null && obj._isAMomentObject != null) + ); + } + + function warn(msg) { + if ( + hooks.suppressDeprecationWarnings === false && + typeof console !== 'undefined' && + console.warn + ) { + console.warn('Deprecation warning: ' + msg); + } + } + + function deprecate(msg, fn) { + var firstTime = true; + + return extend(function () { + if (hooks.deprecationHandler != null) { + hooks.deprecationHandler(null, msg); + } + if (firstTime) { + var args = [], + arg, + i, + key; + for (i = 0; i < arguments.length; i++) { + arg = ''; + if (typeof arguments[i] === 'object') { + arg += '\n[' + i + '] '; + for (key in arguments[0]) { + if (hasOwnProp(arguments[0], key)) { + arg += key + ': ' + arguments[0][key] + ', '; + } + } + arg = arg.slice(0, -2); // Remove trailing comma and space + } else { + arg = arguments[i]; + } + args.push(arg); + } + warn( + msg + + '\nArguments: ' + + Array.prototype.slice.call(args).join('') + + '\n' + + new Error().stack + ); + firstTime = false; + } + return fn.apply(this, arguments); + }, fn); + } + + var deprecations = {}; + + function deprecateSimple(name, msg) { + if (hooks.deprecationHandler != null) { + hooks.deprecationHandler(name, msg); + } + if (!deprecations[name]) { + warn(msg); + deprecations[name] = true; + } + } + + hooks.suppressDeprecationWarnings = false; + hooks.deprecationHandler = null; + + function isFunction(input) { + return ( + (typeof Function !== 'undefined' && input instanceof Function) || + Object.prototype.toString.call(input) === '[object Function]' + ); + } + + function set(config) { + var prop, i; + for (i in config) { + if (hasOwnProp(config, i)) { + prop = config[i]; + if (isFunction(prop)) { + this[i] = prop; + } else { + this['_' + i] = prop; + } + } + } + this._config = config; + // Lenient ordinal parsing accepts just a number in addition to + // number + (possibly) stuff coming from _dayOfMonthOrdinalParse. + // TODO: Remove "ordinalParse" fallback in next major release. + this._dayOfMonthOrdinalParseLenient = new RegExp( + (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) + + '|' + + /\d{1,2}/.source + ); + } + + function mergeConfigs(parentConfig, childConfig) { + var res = extend({}, parentConfig), + prop; + for (prop in childConfig) { + if (hasOwnProp(childConfig, prop)) { + if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) { + res[prop] = {}; + extend(res[prop], parentConfig[prop]); + extend(res[prop], childConfig[prop]); + } else if (childConfig[prop] != null) { + res[prop] = childConfig[prop]; + } else { + delete res[prop]; + } + } + } + for (prop in parentConfig) { + if ( + hasOwnProp(parentConfig, prop) && + !hasOwnProp(childConfig, prop) && + isObject(parentConfig[prop]) + ) { + // make sure changes to properties don't modify parent config + res[prop] = extend({}, res[prop]); + } + } + return res; + } + + function Locale(config) { + if (config != null) { + this.set(config); + } + } + + var keys; + + if (Object.keys) { + keys = Object.keys; + } else { + keys = function (obj) { + var i, + res = []; + for (i in obj) { + if (hasOwnProp(obj, i)) { + res.push(i); + } + } + return res; + }; + } + + var defaultCalendar = { + sameDay: '[Today at] LT', + nextDay: '[Tomorrow at] LT', + nextWeek: 'dddd [at] LT', + lastDay: '[Yesterday at] LT', + lastWeek: '[Last] dddd [at] LT', + sameElse: 'L', + }; + + function calendar(key, mom, now) { + var output = this._calendar[key] || this._calendar['sameElse']; + return isFunction(output) ? output.call(mom, now) : output; + } + + function zeroFill(number, targetLength, forceSign) { + var absNumber = '' + Math.abs(number), + zerosToFill = targetLength - absNumber.length, + sign = number >= 0; + return ( + (sign ? (forceSign ? '+' : '') : '-') + + Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + + absNumber + ); + } + + var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g, + localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g, + formatFunctions = {}, + formatTokenFunctions = {}; + + // token: 'M' + // padded: ['MM', 2] + // ordinal: 'Mo' + // callback: function () { this.month() + 1 } + function addFormatToken(token, padded, ordinal, callback) { + var func = callback; + if (typeof callback === 'string') { + func = function () { + return this[callback](); + }; + } + if (token) { + formatTokenFunctions[token] = func; + } + if (padded) { + formatTokenFunctions[padded[0]] = function () { + return zeroFill(func.apply(this, arguments), padded[1], padded[2]); + }; + } + if (ordinal) { + formatTokenFunctions[ordinal] = function () { + return this.localeData().ordinal( + func.apply(this, arguments), + token + ); + }; + } + } + + function removeFormattingTokens(input) { + if (input.match(/\[[\s\S]/)) { + return input.replace(/^\[|\]$/g, ''); + } + return input.replace(/\\/g, ''); + } + + function makeFormatFunction(format) { + var array = format.match(formattingTokens), + i, + length; + + for (i = 0, length = array.length; i < length; i++) { + if (formatTokenFunctions[array[i]]) { + array[i] = formatTokenFunctions[array[i]]; + } else { + array[i] = removeFormattingTokens(array[i]); + } + } + + return function (mom) { + var output = '', + i; + for (i = 0; i < length; i++) { + output += isFunction(array[i]) + ? array[i].call(mom, format) + : array[i]; + } + return output; + }; + } + + // format date using native date object + function formatMoment(m, format) { + if (!m.isValid()) { + return m.localeData().invalidDate(); + } + + format = expandFormat(format, m.localeData()); + formatFunctions[format] = + formatFunctions[format] || makeFormatFunction(format); + + return formatFunctions[format](m); + } + + function expandFormat(format, locale) { + var i = 5; + + function replaceLongDateFormatTokens(input) { + return locale.longDateFormat(input) || input; + } + + localFormattingTokens.lastIndex = 0; + while (i >= 0 && localFormattingTokens.test(format)) { + format = format.replace( + localFormattingTokens, + replaceLongDateFormatTokens + ); + localFormattingTokens.lastIndex = 0; + i -= 1; + } + + return format; + } + + var defaultLongDateFormat = { + LTS: 'h:mm:ss A', + LT: 'h:mm A', + L: 'MM/DD/YYYY', + LL: 'MMMM D, YYYY', + LLL: 'MMMM D, YYYY h:mm A', + LLLL: 'dddd, MMMM D, YYYY h:mm A', + }; + + function longDateFormat(key) { + var format = this._longDateFormat[key], + formatUpper = this._longDateFormat[key.toUpperCase()]; + + if (format || !formatUpper) { + return format; + } + + this._longDateFormat[key] = formatUpper + .match(formattingTokens) + .map(function (tok) { + if ( + tok === 'MMMM' || + tok === 'MM' || + tok === 'DD' || + tok === 'dddd' + ) { + return tok.slice(1); + } + return tok; + }) + .join(''); + + return this._longDateFormat[key]; + } + + var defaultInvalidDate = 'Invalid date'; + + function invalidDate() { + return this._invalidDate; + } + + var defaultOrdinal = '%d', + defaultDayOfMonthOrdinalParse = /\d{1,2}/; + + function ordinal(number) { + return this._ordinal.replace('%d', number); + } + + var defaultRelativeTime = { + future: 'in %s', + past: '%s ago', + s: 'a few seconds', + ss: '%d seconds', + m: 'a minute', + mm: '%d minutes', + h: 'an hour', + hh: '%d hours', + d: 'a day', + dd: '%d days', + w: 'a week', + ww: '%d weeks', + M: 'a month', + MM: '%d months', + y: 'a year', + yy: '%d years', + }; + + function relativeTime(number, withoutSuffix, string, isFuture) { + var output = this._relativeTime[string]; + return isFunction(output) + ? output(number, withoutSuffix, string, isFuture) + : output.replace(/%d/i, number); + } + + function pastFuture(diff, output) { + var format = this._relativeTime[diff > 0 ? 'future' : 'past']; + return isFunction(format) ? format(output) : format.replace(/%s/i, output); + } + + var aliases = {}; + + function addUnitAlias(unit, shorthand) { + var lowerCase = unit.toLowerCase(); + aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit; + } + + function normalizeUnits(units) { + return typeof units === 'string' + ? aliases[units] || aliases[units.toLowerCase()] + : undefined; + } + + function normalizeObjectUnits(inputObject) { + var normalizedInput = {}, + normalizedProp, + prop; + + for (prop in inputObject) { + if (hasOwnProp(inputObject, prop)) { + normalizedProp = normalizeUnits(prop); + if (normalizedProp) { + normalizedInput[normalizedProp] = inputObject[prop]; + } + } + } + + return normalizedInput; + } + + var priorities = {}; + + function addUnitPriority(unit, priority) { + priorities[unit] = priority; + } + + function getPrioritizedUnits(unitsObj) { + var units = [], + u; + for (u in unitsObj) { + if (hasOwnProp(unitsObj, u)) { + units.push({ unit: u, priority: priorities[u] }); + } + } + units.sort(function (a, b) { + return a.priority - b.priority; + }); + return units; + } + + function isLeapYear(year) { + return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; + } + + function absFloor(number) { + if (number < 0) { + // -0 -> 0 + return Math.ceil(number) || 0; + } else { + return Math.floor(number); + } + } + + function toInt(argumentForCoercion) { + var coercedNumber = +argumentForCoercion, + value = 0; + + if (coercedNumber !== 0 && isFinite(coercedNumber)) { + value = absFloor(coercedNumber); + } + + return value; + } + + function makeGetSet(unit, keepTime) { + return function (value) { + if (value != null) { + set$1(this, unit, value); + hooks.updateOffset(this, keepTime); + return this; + } else { + return get(this, unit); + } + }; + } + + function get(mom, unit) { + return mom.isValid() + ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() + : NaN; + } + + function set$1(mom, unit, value) { + if (mom.isValid() && !isNaN(value)) { + if ( + unit === 'FullYear' && + isLeapYear(mom.year()) && + mom.month() === 1 && + mom.date() === 29 + ) { + value = toInt(value); + mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit]( + value, + mom.month(), + daysInMonth(value, mom.month()) + ); + } else { + mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value); + } + } + } + + // MOMENTS + + function stringGet(units) { + units = normalizeUnits(units); + if (isFunction(this[units])) { + return this[units](); + } + return this; + } + + function stringSet(units, value) { + if (typeof units === 'object') { + units = normalizeObjectUnits(units); + var prioritized = getPrioritizedUnits(units), + i; + for (i = 0; i < prioritized.length; i++) { + this[prioritized[i].unit](units[prioritized[i].unit]); + } + } else { + units = normalizeUnits(units); + if (isFunction(this[units])) { + return this[units](value); + } + } + return this; + } + + var match1 = /\d/, // 0 - 9 + match2 = /\d\d/, // 00 - 99 + match3 = /\d{3}/, // 000 - 999 + match4 = /\d{4}/, // 0000 - 9999 + match6 = /[+-]?\d{6}/, // -999999 - 999999 + match1to2 = /\d\d?/, // 0 - 99 + match3to4 = /\d\d\d\d?/, // 999 - 9999 + match5to6 = /\d\d\d\d\d\d?/, // 99999 - 999999 + match1to3 = /\d{1,3}/, // 0 - 999 + match1to4 = /\d{1,4}/, // 0 - 9999 + match1to6 = /[+-]?\d{1,6}/, // -999999 - 999999 + matchUnsigned = /\d+/, // 0 - inf + matchSigned = /[+-]?\d+/, // -inf - inf + matchOffset = /Z|[+-]\d\d:?\d\d/gi, // +00:00 -00:00 +0000 -0000 or Z + matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z + matchTimestamp = /[+-]?\d+(\.\d{1,3})?/, // 123456789 123456789.123 + // any word (or two) characters or numbers including two/three word month in arabic. + // includes scottish gaelic two word and hyphenated months + matchWord = /[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i, + regexes; + + regexes = {}; + + function addRegexToken(token, regex, strictRegex) { + regexes[token] = isFunction(regex) + ? regex + : function (isStrict, localeData) { + return isStrict && strictRegex ? strictRegex : regex; + }; + } + + function getParseRegexForToken(token, config) { + if (!hasOwnProp(regexes, token)) { + return new RegExp(unescapeFormat(token)); + } + + return regexes[token](config._strict, config._locale); + } + + // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript + function unescapeFormat(s) { + return regexEscape( + s + .replace('\\', '') + .replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function ( + matched, + p1, + p2, + p3, + p4 + ) { + return p1 || p2 || p3 || p4; + }) + ); + } + + function regexEscape(s) { + return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); + } + + var tokens = {}; + + function addParseToken(token, callback) { + var i, + func = callback; + if (typeof token === 'string') { + token = [token]; + } + if (isNumber(callback)) { + func = function (input, array) { + array[callback] = toInt(input); + }; + } + for (i = 0; i < token.length; i++) { + tokens[token[i]] = func; + } + } + + function addWeekParseToken(token, callback) { + addParseToken(token, function (input, array, config, token) { + config._w = config._w || {}; + callback(input, config._w, config, token); + }); + } + + function addTimeToArrayFromToken(token, input, config) { + if (input != null && hasOwnProp(tokens, token)) { + tokens[token](input, config._a, config, token); + } + } + + var YEAR = 0, + MONTH = 1, + DATE = 2, + HOUR = 3, + MINUTE = 4, + SECOND = 5, + MILLISECOND = 6, + WEEK = 7, + WEEKDAY = 8; + + function mod(n, x) { + return ((n % x) + x) % x; + } + + var indexOf; + + if (Array.prototype.indexOf) { + indexOf = Array.prototype.indexOf; + } else { + indexOf = function (o) { + // I know + var i; + for (i = 0; i < this.length; ++i) { + if (this[i] === o) { + return i; + } + } + return -1; + }; + } + + function daysInMonth(year, month) { + if (isNaN(year) || isNaN(month)) { + return NaN; + } + var modMonth = mod(month, 12); + year += (month - modMonth) / 12; + return modMonth === 1 + ? isLeapYear(year) + ? 29 + : 28 + : 31 - ((modMonth % 7) % 2); + } + + // FORMATTING + + addFormatToken('M', ['MM', 2], 'Mo', function () { + return this.month() + 1; + }); + + addFormatToken('MMM', 0, 0, function (format) { + return this.localeData().monthsShort(this, format); + }); + + addFormatToken('MMMM', 0, 0, function (format) { + return this.localeData().months(this, format); + }); + + // ALIASES + + addUnitAlias('month', 'M'); + + // PRIORITY + + addUnitPriority('month', 8); + + // PARSING + + addRegexToken('M', match1to2); + addRegexToken('MM', match1to2, match2); + addRegexToken('MMM', function (isStrict, locale) { + return locale.monthsShortRegex(isStrict); + }); + addRegexToken('MMMM', function (isStrict, locale) { + return locale.monthsRegex(isStrict); + }); + + addParseToken(['M', 'MM'], function (input, array) { + array[MONTH] = toInt(input) - 1; + }); + + addParseToken(['MMM', 'MMMM'], function (input, array, config, token) { + var month = config._locale.monthsParse(input, token, config._strict); + // if we didn't find a month name, mark the date as invalid. + if (month != null) { + array[MONTH] = month; + } else { + getParsingFlags(config).invalidMonth = input; + } + }); + + // LOCALES + + var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split( + '_' + ), + defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split( + '_' + ), + MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/, + defaultMonthsShortRegex = matchWord, + defaultMonthsRegex = matchWord; + + function localeMonths(m, format) { + if (!m) { + return isArray(this._months) + ? this._months + : this._months['standalone']; + } + return isArray(this._months) + ? this._months[m.month()] + : this._months[ + (this._months.isFormat || MONTHS_IN_FORMAT).test(format) + ? 'format' + : 'standalone' + ][m.month()]; + } + + function localeMonthsShort(m, format) { + if (!m) { + return isArray(this._monthsShort) + ? this._monthsShort + : this._monthsShort['standalone']; + } + return isArray(this._monthsShort) + ? this._monthsShort[m.month()] + : this._monthsShort[ + MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone' + ][m.month()]; + } + + function handleStrictParse(monthName, format, strict) { + var i, + ii, + mom, + llc = monthName.toLocaleLowerCase(); + if (!this._monthsParse) { + // this is not used + this._monthsParse = []; + this._longMonthsParse = []; + this._shortMonthsParse = []; + for (i = 0; i < 12; ++i) { + mom = createUTC([2000, i]); + this._shortMonthsParse[i] = this.monthsShort( + mom, + '' + ).toLocaleLowerCase(); + this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase(); + } + } + + if (strict) { + if (format === 'MMM') { + ii = indexOf.call(this._shortMonthsParse, llc); + return ii !== -1 ? ii : null; + } else { + ii = indexOf.call(this._longMonthsParse, llc); + return ii !== -1 ? ii : null; + } + } else { + if (format === 'MMM') { + ii = indexOf.call(this._shortMonthsParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._longMonthsParse, llc); + return ii !== -1 ? ii : null; + } else { + ii = indexOf.call(this._longMonthsParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._shortMonthsParse, llc); + return ii !== -1 ? ii : null; + } + } + } + + function localeMonthsParse(monthName, format, strict) { + var i, mom, regex; + + if (this._monthsParseExact) { + return handleStrictParse.call(this, monthName, format, strict); + } + + if (!this._monthsParse) { + this._monthsParse = []; + this._longMonthsParse = []; + this._shortMonthsParse = []; + } + + // TODO: add sorting + // Sorting makes sure if one month (or abbr) is a prefix of another + // see sorting in computeMonthsParse + for (i = 0; i < 12; i++) { + // make the regex if we don't have it already + mom = createUTC([2000, i]); + if (strict && !this._longMonthsParse[i]) { + this._longMonthsParse[i] = new RegExp( + '^' + this.months(mom, '').replace('.', '') + '$', + 'i' + ); + this._shortMonthsParse[i] = new RegExp( + '^' + this.monthsShort(mom, '').replace('.', '') + '$', + 'i' + ); + } + if (!strict && !this._monthsParse[i]) { + regex = + '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, ''); + this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i'); + } + // test the regex + if ( + strict && + format === 'MMMM' && + this._longMonthsParse[i].test(monthName) + ) { + return i; + } else if ( + strict && + format === 'MMM' && + this._shortMonthsParse[i].test(monthName) + ) { + return i; + } else if (!strict && this._monthsParse[i].test(monthName)) { + return i; + } + } + } + + // MOMENTS + + function setMonth(mom, value) { + var dayOfMonth; + + if (!mom.isValid()) { + // No op + return mom; + } + + if (typeof value === 'string') { + if (/^\d+$/.test(value)) { + value = toInt(value); + } else { + value = mom.localeData().monthsParse(value); + // TODO: Another silent failure? + if (!isNumber(value)) { + return mom; + } + } + } + + dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value)); + mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth); + return mom; + } + + function getSetMonth(value) { + if (value != null) { + setMonth(this, value); + hooks.updateOffset(this, true); + return this; + } else { + return get(this, 'Month'); + } + } + + function getDaysInMonth() { + return daysInMonth(this.year(), this.month()); + } + + function monthsShortRegex(isStrict) { + if (this._monthsParseExact) { + if (!hasOwnProp(this, '_monthsRegex')) { + computeMonthsParse.call(this); + } + if (isStrict) { + return this._monthsShortStrictRegex; + } else { + return this._monthsShortRegex; + } + } else { + if (!hasOwnProp(this, '_monthsShortRegex')) { + this._monthsShortRegex = defaultMonthsShortRegex; + } + return this._monthsShortStrictRegex && isStrict + ? this._monthsShortStrictRegex + : this._monthsShortRegex; + } + } + + function monthsRegex(isStrict) { + if (this._monthsParseExact) { + if (!hasOwnProp(this, '_monthsRegex')) { + computeMonthsParse.call(this); + } + if (isStrict) { + return this._monthsStrictRegex; + } else { + return this._monthsRegex; + } + } else { + if (!hasOwnProp(this, '_monthsRegex')) { + this._monthsRegex = defaultMonthsRegex; + } + return this._monthsStrictRegex && isStrict + ? this._monthsStrictRegex + : this._monthsRegex; + } + } + + function computeMonthsParse() { + function cmpLenRev(a, b) { + return b.length - a.length; + } + + var shortPieces = [], + longPieces = [], + mixedPieces = [], + i, + mom; + for (i = 0; i < 12; i++) { + // make the regex if we don't have it already + mom = createUTC([2000, i]); + shortPieces.push(this.monthsShort(mom, '')); + longPieces.push(this.months(mom, '')); + mixedPieces.push(this.months(mom, '')); + mixedPieces.push(this.monthsShort(mom, '')); + } + // Sorting makes sure if one month (or abbr) is a prefix of another it + // will match the longer piece. + shortPieces.sort(cmpLenRev); + longPieces.sort(cmpLenRev); + mixedPieces.sort(cmpLenRev); + for (i = 0; i < 12; i++) { + shortPieces[i] = regexEscape(shortPieces[i]); + longPieces[i] = regexEscape(longPieces[i]); + } + for (i = 0; i < 24; i++) { + mixedPieces[i] = regexEscape(mixedPieces[i]); + } + + this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i'); + this._monthsShortRegex = this._monthsRegex; + this._monthsStrictRegex = new RegExp( + '^(' + longPieces.join('|') + ')', + 'i' + ); + this._monthsShortStrictRegex = new RegExp( + '^(' + shortPieces.join('|') + ')', + 'i' + ); + } + + // FORMATTING + + addFormatToken('Y', 0, 0, function () { + var y = this.year(); + return y <= 9999 ? zeroFill(y, 4) : '+' + y; + }); + + addFormatToken(0, ['YY', 2], 0, function () { + return this.year() % 100; + }); + + addFormatToken(0, ['YYYY', 4], 0, 'year'); + addFormatToken(0, ['YYYYY', 5], 0, 'year'); + addFormatToken(0, ['YYYYYY', 6, true], 0, 'year'); + + // ALIASES + + addUnitAlias('year', 'y'); + + // PRIORITIES + + addUnitPriority('year', 1); + + // PARSING + + addRegexToken('Y', matchSigned); + addRegexToken('YY', match1to2, match2); + addRegexToken('YYYY', match1to4, match4); + addRegexToken('YYYYY', match1to6, match6); + addRegexToken('YYYYYY', match1to6, match6); + + addParseToken(['YYYYY', 'YYYYYY'], YEAR); + addParseToken('YYYY', function (input, array) { + array[YEAR] = + input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input); + }); + addParseToken('YY', function (input, array) { + array[YEAR] = hooks.parseTwoDigitYear(input); + }); + addParseToken('Y', function (input, array) { + array[YEAR] = parseInt(input, 10); + }); + + // HELPERS + + function daysInYear(year) { + return isLeapYear(year) ? 366 : 365; + } + + // HOOKS + + hooks.parseTwoDigitYear = function (input) { + return toInt(input) + (toInt(input) > 68 ? 1900 : 2000); + }; + + // MOMENTS + + var getSetYear = makeGetSet('FullYear', true); + + function getIsLeapYear() { + return isLeapYear(this.year()); + } + + function createDate(y, m, d, h, M, s, ms) { + // can't just apply() to create a date: + // https://stackoverflow.com/q/181348 + var date; + // the date constructor remaps years 0-99 to 1900-1999 + if (y < 100 && y >= 0) { + // preserve leap years using a full 400 year cycle, then reset + date = new Date(y + 400, m, d, h, M, s, ms); + if (isFinite(date.getFullYear())) { + date.setFullYear(y); + } + } else { + date = new Date(y, m, d, h, M, s, ms); + } + + return date; + } + + function createUTCDate(y) { + var date, args; + // the Date.UTC function remaps years 0-99 to 1900-1999 + if (y < 100 && y >= 0) { + args = Array.prototype.slice.call(arguments); + // preserve leap years using a full 400 year cycle, then reset + args[0] = y + 400; + date = new Date(Date.UTC.apply(null, args)); + if (isFinite(date.getUTCFullYear())) { + date.setUTCFullYear(y); + } + } else { + date = new Date(Date.UTC.apply(null, arguments)); + } + + return date; + } + + // start-of-first-week - start-of-year + function firstWeekOffset(year, dow, doy) { + var // first-week day -- which january is always in the first week (4 for iso, 1 for other) + fwd = 7 + dow - doy, + // first-week day local weekday -- which local weekday is fwd + fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7; + + return -fwdlw + fwd - 1; + } + + // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday + function dayOfYearFromWeeks(year, week, weekday, dow, doy) { + var localWeekday = (7 + weekday - dow) % 7, + weekOffset = firstWeekOffset(year, dow, doy), + dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset, + resYear, + resDayOfYear; + + if (dayOfYear <= 0) { + resYear = year - 1; + resDayOfYear = daysInYear(resYear) + dayOfYear; + } else if (dayOfYear > daysInYear(year)) { + resYear = year + 1; + resDayOfYear = dayOfYear - daysInYear(year); + } else { + resYear = year; + resDayOfYear = dayOfYear; + } + + return { + year: resYear, + dayOfYear: resDayOfYear, + }; + } + + function weekOfYear(mom, dow, doy) { + var weekOffset = firstWeekOffset(mom.year(), dow, doy), + week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1, + resWeek, + resYear; + + if (week < 1) { + resYear = mom.year() - 1; + resWeek = week + weeksInYear(resYear, dow, doy); + } else if (week > weeksInYear(mom.year(), dow, doy)) { + resWeek = week - weeksInYear(mom.year(), dow, doy); + resYear = mom.year() + 1; + } else { + resYear = mom.year(); + resWeek = week; + } + + return { + week: resWeek, + year: resYear, + }; + } + + function weeksInYear(year, dow, doy) { + var weekOffset = firstWeekOffset(year, dow, doy), + weekOffsetNext = firstWeekOffset(year + 1, dow, doy); + return (daysInYear(year) - weekOffset + weekOffsetNext) / 7; + } + + // FORMATTING + + addFormatToken('w', ['ww', 2], 'wo', 'week'); + addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek'); + + // ALIASES + + addUnitAlias('week', 'w'); + addUnitAlias('isoWeek', 'W'); + + // PRIORITIES + + addUnitPriority('week', 5); + addUnitPriority('isoWeek', 5); + + // PARSING + + addRegexToken('w', match1to2); + addRegexToken('ww', match1to2, match2); + addRegexToken('W', match1to2); + addRegexToken('WW', match1to2, match2); + + addWeekParseToken(['w', 'ww', 'W', 'WW'], function ( + input, + week, + config, + token + ) { + week[token.substr(0, 1)] = toInt(input); + }); + + // HELPERS + + // LOCALES + + function localeWeek(mom) { + return weekOfYear(mom, this._week.dow, this._week.doy).week; + } + + var defaultLocaleWeek = { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }; + + function localeFirstDayOfWeek() { + return this._week.dow; + } + + function localeFirstDayOfYear() { + return this._week.doy; + } + + // MOMENTS + + function getSetWeek(input) { + var week = this.localeData().week(this); + return input == null ? week : this.add((input - week) * 7, 'd'); + } + + function getSetISOWeek(input) { + var week = weekOfYear(this, 1, 4).week; + return input == null ? week : this.add((input - week) * 7, 'd'); + } + + // FORMATTING + + addFormatToken('d', 0, 'do', 'day'); + + addFormatToken('dd', 0, 0, function (format) { + return this.localeData().weekdaysMin(this, format); + }); + + addFormatToken('ddd', 0, 0, function (format) { + return this.localeData().weekdaysShort(this, format); + }); + + addFormatToken('dddd', 0, 0, function (format) { + return this.localeData().weekdays(this, format); + }); + + addFormatToken('e', 0, 0, 'weekday'); + addFormatToken('E', 0, 0, 'isoWeekday'); + + // ALIASES + + addUnitAlias('day', 'd'); + addUnitAlias('weekday', 'e'); + addUnitAlias('isoWeekday', 'E'); + + // PRIORITY + addUnitPriority('day', 11); + addUnitPriority('weekday', 11); + addUnitPriority('isoWeekday', 11); + + // PARSING + + addRegexToken('d', match1to2); + addRegexToken('e', match1to2); + addRegexToken('E', match1to2); + addRegexToken('dd', function (isStrict, locale) { + return locale.weekdaysMinRegex(isStrict); + }); + addRegexToken('ddd', function (isStrict, locale) { + return locale.weekdaysShortRegex(isStrict); + }); + addRegexToken('dddd', function (isStrict, locale) { + return locale.weekdaysRegex(isStrict); + }); + + addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) { + var weekday = config._locale.weekdaysParse(input, token, config._strict); + // if we didn't get a weekday name, mark the date as invalid + if (weekday != null) { + week.d = weekday; + } else { + getParsingFlags(config).invalidWeekday = input; + } + }); + + addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) { + week[token] = toInt(input); + }); + + // HELPERS + + function parseWeekday(input, locale) { + if (typeof input !== 'string') { + return input; + } + + if (!isNaN(input)) { + return parseInt(input, 10); + } + + input = locale.weekdaysParse(input); + if (typeof input === 'number') { + return input; + } + + return null; + } + + function parseIsoWeekday(input, locale) { + if (typeof input === 'string') { + return locale.weekdaysParse(input) % 7 || 7; + } + return isNaN(input) ? null : input; + } + + // LOCALES + function shiftWeekdays(ws, n) { + return ws.slice(n, 7).concat(ws.slice(0, n)); + } + + var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split( + '_' + ), + defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + defaultWeekdaysRegex = matchWord, + defaultWeekdaysShortRegex = matchWord, + defaultWeekdaysMinRegex = matchWord; + + function localeWeekdays(m, format) { + var weekdays = isArray(this._weekdays) + ? this._weekdays + : this._weekdays[ + m && m !== true && this._weekdays.isFormat.test(format) + ? 'format' + : 'standalone' + ]; + return m === true + ? shiftWeekdays(weekdays, this._week.dow) + : m + ? weekdays[m.day()] + : weekdays; + } + + function localeWeekdaysShort(m) { + return m === true + ? shiftWeekdays(this._weekdaysShort, this._week.dow) + : m + ? this._weekdaysShort[m.day()] + : this._weekdaysShort; + } + + function localeWeekdaysMin(m) { + return m === true + ? shiftWeekdays(this._weekdaysMin, this._week.dow) + : m + ? this._weekdaysMin[m.day()] + : this._weekdaysMin; + } + + function handleStrictParse$1(weekdayName, format, strict) { + var i, + ii, + mom, + llc = weekdayName.toLocaleLowerCase(); + if (!this._weekdaysParse) { + this._weekdaysParse = []; + this._shortWeekdaysParse = []; + this._minWeekdaysParse = []; + + for (i = 0; i < 7; ++i) { + mom = createUTC([2000, 1]).day(i); + this._minWeekdaysParse[i] = this.weekdaysMin( + mom, + '' + ).toLocaleLowerCase(); + this._shortWeekdaysParse[i] = this.weekdaysShort( + mom, + '' + ).toLocaleLowerCase(); + this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase(); + } + } + + if (strict) { + if (format === 'dddd') { + ii = indexOf.call(this._weekdaysParse, llc); + return ii !== -1 ? ii : null; + } else if (format === 'ddd') { + ii = indexOf.call(this._shortWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } else { + ii = indexOf.call(this._minWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } + } else { + if (format === 'dddd') { + ii = indexOf.call(this._weekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._shortWeekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._minWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } else if (format === 'ddd') { + ii = indexOf.call(this._shortWeekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._weekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._minWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } else { + ii = indexOf.call(this._minWeekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._weekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._shortWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } + } + } + + function localeWeekdaysParse(weekdayName, format, strict) { + var i, mom, regex; + + if (this._weekdaysParseExact) { + return handleStrictParse$1.call(this, weekdayName, format, strict); + } + + if (!this._weekdaysParse) { + this._weekdaysParse = []; + this._minWeekdaysParse = []; + this._shortWeekdaysParse = []; + this._fullWeekdaysParse = []; + } + + for (i = 0; i < 7; i++) { + // make the regex if we don't have it already + + mom = createUTC([2000, 1]).day(i); + if (strict && !this._fullWeekdaysParse[i]) { + this._fullWeekdaysParse[i] = new RegExp( + '^' + this.weekdays(mom, '').replace('.', '\\.?') + '$', + 'i' + ); + this._shortWeekdaysParse[i] = new RegExp( + '^' + this.weekdaysShort(mom, '').replace('.', '\\.?') + '$', + 'i' + ); + this._minWeekdaysParse[i] = new RegExp( + '^' + this.weekdaysMin(mom, '').replace('.', '\\.?') + '$', + 'i' + ); + } + if (!this._weekdaysParse[i]) { + regex = + '^' + + this.weekdays(mom, '') + + '|^' + + this.weekdaysShort(mom, '') + + '|^' + + this.weekdaysMin(mom, ''); + this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i'); + } + // test the regex + if ( + strict && + format === 'dddd' && + this._fullWeekdaysParse[i].test(weekdayName) + ) { + return i; + } else if ( + strict && + format === 'ddd' && + this._shortWeekdaysParse[i].test(weekdayName) + ) { + return i; + } else if ( + strict && + format === 'dd' && + this._minWeekdaysParse[i].test(weekdayName) + ) { + return i; + } else if (!strict && this._weekdaysParse[i].test(weekdayName)) { + return i; + } + } + } + + // MOMENTS + + function getSetDayOfWeek(input) { + if (!this.isValid()) { + return input != null ? this : NaN; + } + var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay(); + if (input != null) { + input = parseWeekday(input, this.localeData()); + return this.add(input - day, 'd'); + } else { + return day; + } + } + + function getSetLocaleDayOfWeek(input) { + if (!this.isValid()) { + return input != null ? this : NaN; + } + var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7; + return input == null ? weekday : this.add(input - weekday, 'd'); + } + + function getSetISODayOfWeek(input) { + if (!this.isValid()) { + return input != null ? this : NaN; + } + + // behaves the same as moment#day except + // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6) + // as a setter, sunday should belong to the previous week. + + if (input != null) { + var weekday = parseIsoWeekday(input, this.localeData()); + return this.day(this.day() % 7 ? weekday : weekday - 7); + } else { + return this.day() || 7; + } + } + + function weekdaysRegex(isStrict) { + if (this._weekdaysParseExact) { + if (!hasOwnProp(this, '_weekdaysRegex')) { + computeWeekdaysParse.call(this); + } + if (isStrict) { + return this._weekdaysStrictRegex; + } else { + return this._weekdaysRegex; + } + } else { + if (!hasOwnProp(this, '_weekdaysRegex')) { + this._weekdaysRegex = defaultWeekdaysRegex; + } + return this._weekdaysStrictRegex && isStrict + ? this._weekdaysStrictRegex + : this._weekdaysRegex; + } + } + + function weekdaysShortRegex(isStrict) { + if (this._weekdaysParseExact) { + if (!hasOwnProp(this, '_weekdaysRegex')) { + computeWeekdaysParse.call(this); + } + if (isStrict) { + return this._weekdaysShortStrictRegex; + } else { + return this._weekdaysShortRegex; + } + } else { + if (!hasOwnProp(this, '_weekdaysShortRegex')) { + this._weekdaysShortRegex = defaultWeekdaysShortRegex; + } + return this._weekdaysShortStrictRegex && isStrict + ? this._weekdaysShortStrictRegex + : this._weekdaysShortRegex; + } + } + + function weekdaysMinRegex(isStrict) { + if (this._weekdaysParseExact) { + if (!hasOwnProp(this, '_weekdaysRegex')) { + computeWeekdaysParse.call(this); + } + if (isStrict) { + return this._weekdaysMinStrictRegex; + } else { + return this._weekdaysMinRegex; + } + } else { + if (!hasOwnProp(this, '_weekdaysMinRegex')) { + this._weekdaysMinRegex = defaultWeekdaysMinRegex; + } + return this._weekdaysMinStrictRegex && isStrict + ? this._weekdaysMinStrictRegex + : this._weekdaysMinRegex; + } + } + + function computeWeekdaysParse() { + function cmpLenRev(a, b) { + return b.length - a.length; + } + + var minPieces = [], + shortPieces = [], + longPieces = [], + mixedPieces = [], + i, + mom, + minp, + shortp, + longp; + for (i = 0; i < 7; i++) { + // make the regex if we don't have it already + mom = createUTC([2000, 1]).day(i); + minp = regexEscape(this.weekdaysMin(mom, '')); + shortp = regexEscape(this.weekdaysShort(mom, '')); + longp = regexEscape(this.weekdays(mom, '')); + minPieces.push(minp); + shortPieces.push(shortp); + longPieces.push(longp); + mixedPieces.push(minp); + mixedPieces.push(shortp); + mixedPieces.push(longp); + } + // Sorting makes sure if one weekday (or abbr) is a prefix of another it + // will match the longer piece. + minPieces.sort(cmpLenRev); + shortPieces.sort(cmpLenRev); + longPieces.sort(cmpLenRev); + mixedPieces.sort(cmpLenRev); + + this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i'); + this._weekdaysShortRegex = this._weekdaysRegex; + this._weekdaysMinRegex = this._weekdaysRegex; + + this._weekdaysStrictRegex = new RegExp( + '^(' + longPieces.join('|') + ')', + 'i' + ); + this._weekdaysShortStrictRegex = new RegExp( + '^(' + shortPieces.join('|') + ')', + 'i' + ); + this._weekdaysMinStrictRegex = new RegExp( + '^(' + minPieces.join('|') + ')', + 'i' + ); + } + + // FORMATTING + + function hFormat() { + return this.hours() % 12 || 12; + } + + function kFormat() { + return this.hours() || 24; + } + + addFormatToken('H', ['HH', 2], 0, 'hour'); + addFormatToken('h', ['hh', 2], 0, hFormat); + addFormatToken('k', ['kk', 2], 0, kFormat); + + addFormatToken('hmm', 0, 0, function () { + return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2); + }); + + addFormatToken('hmmss', 0, 0, function () { + return ( + '' + + hFormat.apply(this) + + zeroFill(this.minutes(), 2) + + zeroFill(this.seconds(), 2) + ); + }); + + addFormatToken('Hmm', 0, 0, function () { + return '' + this.hours() + zeroFill(this.minutes(), 2); + }); + + addFormatToken('Hmmss', 0, 0, function () { + return ( + '' + + this.hours() + + zeroFill(this.minutes(), 2) + + zeroFill(this.seconds(), 2) + ); + }); + + function meridiem(token, lowercase) { + addFormatToken(token, 0, 0, function () { + return this.localeData().meridiem( + this.hours(), + this.minutes(), + lowercase + ); + }); + } + + meridiem('a', true); + meridiem('A', false); + + // ALIASES + + addUnitAlias('hour', 'h'); + + // PRIORITY + addUnitPriority('hour', 13); + + // PARSING + + function matchMeridiem(isStrict, locale) { + return locale._meridiemParse; + } + + addRegexToken('a', matchMeridiem); + addRegexToken('A', matchMeridiem); + addRegexToken('H', match1to2); + addRegexToken('h', match1to2); + addRegexToken('k', match1to2); + addRegexToken('HH', match1to2, match2); + addRegexToken('hh', match1to2, match2); + addRegexToken('kk', match1to2, match2); + + addRegexToken('hmm', match3to4); + addRegexToken('hmmss', match5to6); + addRegexToken('Hmm', match3to4); + addRegexToken('Hmmss', match5to6); + + addParseToken(['H', 'HH'], HOUR); + addParseToken(['k', 'kk'], function (input, array, config) { + var kInput = toInt(input); + array[HOUR] = kInput === 24 ? 0 : kInput; + }); + addParseToken(['a', 'A'], function (input, array, config) { + config._isPm = config._locale.isPM(input); + config._meridiem = input; + }); + addParseToken(['h', 'hh'], function (input, array, config) { + array[HOUR] = toInt(input); + getParsingFlags(config).bigHour = true; + }); + addParseToken('hmm', function (input, array, config) { + var pos = input.length - 2; + array[HOUR] = toInt(input.substr(0, pos)); + array[MINUTE] = toInt(input.substr(pos)); + getParsingFlags(config).bigHour = true; + }); + addParseToken('hmmss', function (input, array, config) { + var pos1 = input.length - 4, + pos2 = input.length - 2; + array[HOUR] = toInt(input.substr(0, pos1)); + array[MINUTE] = toInt(input.substr(pos1, 2)); + array[SECOND] = toInt(input.substr(pos2)); + getParsingFlags(config).bigHour = true; + }); + addParseToken('Hmm', function (input, array, config) { + var pos = input.length - 2; + array[HOUR] = toInt(input.substr(0, pos)); + array[MINUTE] = toInt(input.substr(pos)); + }); + addParseToken('Hmmss', function (input, array, config) { + var pos1 = input.length - 4, + pos2 = input.length - 2; + array[HOUR] = toInt(input.substr(0, pos1)); + array[MINUTE] = toInt(input.substr(pos1, 2)); + array[SECOND] = toInt(input.substr(pos2)); + }); + + // LOCALES + + function localeIsPM(input) { + // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays + // Using charAt should be more compatible. + return (input + '').toLowerCase().charAt(0) === 'p'; + } + + var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i, + // Setting the hour should keep the time, because the user explicitly + // specified which hour they want. So trying to maintain the same hour (in + // a new timezone) makes sense. Adding/subtracting hours does not follow + // this rule. + getSetHour = makeGetSet('Hours', true); + + function localeMeridiem(hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'pm' : 'PM'; + } else { + return isLower ? 'am' : 'AM'; + } + } + + var baseConfig = { + calendar: defaultCalendar, + longDateFormat: defaultLongDateFormat, + invalidDate: defaultInvalidDate, + ordinal: defaultOrdinal, + dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse, + relativeTime: defaultRelativeTime, + + months: defaultLocaleMonths, + monthsShort: defaultLocaleMonthsShort, + + week: defaultLocaleWeek, + + weekdays: defaultLocaleWeekdays, + weekdaysMin: defaultLocaleWeekdaysMin, + weekdaysShort: defaultLocaleWeekdaysShort, + + meridiemParse: defaultLocaleMeridiemParse, + }; + + // internal storage for locale config files + var locales = {}, + localeFamilies = {}, + globalLocale; + + function commonPrefix(arr1, arr2) { + var i, + minl = Math.min(arr1.length, arr2.length); + for (i = 0; i < minl; i += 1) { + if (arr1[i] !== arr2[i]) { + return i; + } + } + return minl; + } + + function normalizeLocale(key) { + return key ? key.toLowerCase().replace('_', '-') : key; + } + + // pick the locale from the array + // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each + // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root + function chooseLocale(names) { + var i = 0, + j, + next, + locale, + split; + + while (i < names.length) { + split = normalizeLocale(names[i]).split('-'); + j = split.length; + next = normalizeLocale(names[i + 1]); + next = next ? next.split('-') : null; + while (j > 0) { + locale = loadLocale(split.slice(0, j).join('-')); + if (locale) { + return locale; + } + if ( + next && + next.length >= j && + commonPrefix(split, next) >= j - 1 + ) { + //the next array item is better than a shallower substring of this one + break; + } + j--; + } + i++; + } + return globalLocale; + } + + function loadLocale(name) { + var oldLocale = null, + aliasedRequire; + // TODO: Find a better way to register and load all the locales in Node + if ( + locales[name] === undefined && + typeof module !== 'undefined' && + module && + module.exports + ) { + try { + oldLocale = globalLocale._abbr; + aliasedRequire = require; + aliasedRequire('./locale/' + name); + getSetGlobalLocale(oldLocale); + } catch (e) { + // mark as not found to avoid repeating expensive file require call causing high CPU + // when trying to find en-US, en_US, en-us for every format call + locales[name] = null; // null means not found + } + } + return locales[name]; + } + + // This function will load locale and then set the global locale. If + // no arguments are passed in, it will simply return the current global + // locale key. + function getSetGlobalLocale(key, values) { + var data; + if (key) { + if (isUndefined(values)) { + data = getLocale(key); + } else { + data = defineLocale(key, values); + } + + if (data) { + // moment.duration._locale = moment._locale = data; + globalLocale = data; + } else { + if (typeof console !== 'undefined' && console.warn) { + //warn user if arguments are passed but the locale could not be set + console.warn( + 'Locale ' + key + ' not found. Did you forget to load it?' + ); + } + } + } + + return globalLocale._abbr; + } + + function defineLocale(name, config) { + if (config !== null) { + var locale, + parentConfig = baseConfig; + config.abbr = name; + if (locales[name] != null) { + deprecateSimple( + 'defineLocaleOverride', + 'use moment.updateLocale(localeName, config) to change ' + + 'an existing locale. moment.defineLocale(localeName, ' + + 'config) should only be used for creating a new locale ' + + 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.' + ); + parentConfig = locales[name]._config; + } else if (config.parentLocale != null) { + if (locales[config.parentLocale] != null) { + parentConfig = locales[config.parentLocale]._config; + } else { + locale = loadLocale(config.parentLocale); + if (locale != null) { + parentConfig = locale._config; + } else { + if (!localeFamilies[config.parentLocale]) { + localeFamilies[config.parentLocale] = []; + } + localeFamilies[config.parentLocale].push({ + name: name, + config: config, + }); + return null; + } + } + } + locales[name] = new Locale(mergeConfigs(parentConfig, config)); + + if (localeFamilies[name]) { + localeFamilies[name].forEach(function (x) { + defineLocale(x.name, x.config); + }); + } + + // backwards compat for now: also set the locale + // make sure we set the locale AFTER all child locales have been + // created, so we won't end up with the child locale set. + getSetGlobalLocale(name); + + return locales[name]; + } else { + // useful for testing + delete locales[name]; + return null; + } + } + + function updateLocale(name, config) { + if (config != null) { + var locale, + tmpLocale, + parentConfig = baseConfig; + + if (locales[name] != null && locales[name].parentLocale != null) { + // Update existing child locale in-place to avoid memory-leaks + locales[name].set(mergeConfigs(locales[name]._config, config)); + } else { + // MERGE + tmpLocale = loadLocale(name); + if (tmpLocale != null) { + parentConfig = tmpLocale._config; + } + config = mergeConfigs(parentConfig, config); + if (tmpLocale == null) { + // updateLocale is called for creating a new locale + // Set abbr so it will have a name (getters return + // undefined otherwise). + config.abbr = name; + } + locale = new Locale(config); + locale.parentLocale = locales[name]; + locales[name] = locale; + } + + // backwards compat for now: also set the locale + getSetGlobalLocale(name); + } else { + // pass null for config to unupdate, useful for tests + if (locales[name] != null) { + if (locales[name].parentLocale != null) { + locales[name] = locales[name].parentLocale; + if (name === getSetGlobalLocale()) { + getSetGlobalLocale(name); + } + } else if (locales[name] != null) { + delete locales[name]; + } + } + } + return locales[name]; + } + + // returns locale data + function getLocale(key) { + var locale; + + if (key && key._locale && key._locale._abbr) { + key = key._locale._abbr; + } + + if (!key) { + return globalLocale; + } + + if (!isArray(key)) { + //short-circuit everything else + locale = loadLocale(key); + if (locale) { + return locale; + } + key = [key]; + } + + return chooseLocale(key); + } + + function listLocales() { + return keys(locales); + } + + function checkOverflow(m) { + var overflow, + a = m._a; + + if (a && getParsingFlags(m).overflow === -2) { + overflow = + a[MONTH] < 0 || a[MONTH] > 11 + ? MONTH + : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) + ? DATE + : a[HOUR] < 0 || + a[HOUR] > 24 || + (a[HOUR] === 24 && + (a[MINUTE] !== 0 || + a[SECOND] !== 0 || + a[MILLISECOND] !== 0)) + ? HOUR + : a[MINUTE] < 0 || a[MINUTE] > 59 + ? MINUTE + : a[SECOND] < 0 || a[SECOND] > 59 + ? SECOND + : a[MILLISECOND] < 0 || a[MILLISECOND] > 999 + ? MILLISECOND + : -1; + + if ( + getParsingFlags(m)._overflowDayOfYear && + (overflow < YEAR || overflow > DATE) + ) { + overflow = DATE; + } + if (getParsingFlags(m)._overflowWeeks && overflow === -1) { + overflow = WEEK; + } + if (getParsingFlags(m)._overflowWeekday && overflow === -1) { + overflow = WEEKDAY; + } + + getParsingFlags(m).overflow = overflow; + } + + return m; + } + + // iso 8601 regex + // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00) + var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/, + basicIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/, + tzRegex = /Z|[+-]\d\d(?::?\d\d)?/, + isoDates = [ + ['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/], + ['YYYY-MM-DD', /\d{4}-\d\d-\d\d/], + ['GGGG-[W]WW-E', /\d{4}-W\d\d-\d/], + ['GGGG-[W]WW', /\d{4}-W\d\d/, false], + ['YYYY-DDD', /\d{4}-\d{3}/], + ['YYYY-MM', /\d{4}-\d\d/, false], + ['YYYYYYMMDD', /[+-]\d{10}/], + ['YYYYMMDD', /\d{8}/], + ['GGGG[W]WWE', /\d{4}W\d{3}/], + ['GGGG[W]WW', /\d{4}W\d{2}/, false], + ['YYYYDDD', /\d{7}/], + ['YYYYMM', /\d{6}/, false], + ['YYYY', /\d{4}/, false], + ], + // iso time formats and regexes + isoTimes = [ + ['HH:mm:ss.SSSS', /\d\d:\d\d:\d\d\.\d+/], + ['HH:mm:ss,SSSS', /\d\d:\d\d:\d\d,\d+/], + ['HH:mm:ss', /\d\d:\d\d:\d\d/], + ['HH:mm', /\d\d:\d\d/], + ['HHmmss.SSSS', /\d\d\d\d\d\d\.\d+/], + ['HHmmss,SSSS', /\d\d\d\d\d\d,\d+/], + ['HHmmss', /\d\d\d\d\d\d/], + ['HHmm', /\d\d\d\d/], + ['HH', /\d\d/], + ], + aspNetJsonRegex = /^\/?Date\((-?\d+)/i, + // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3 + rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/, + obsOffsets = { + UT: 0, + GMT: 0, + EDT: -4 * 60, + EST: -5 * 60, + CDT: -5 * 60, + CST: -6 * 60, + MDT: -6 * 60, + MST: -7 * 60, + PDT: -7 * 60, + PST: -8 * 60, + }; + + // date from iso format + function configFromISO(config) { + var i, + l, + string = config._i, + match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string), + allowTime, + dateFormat, + timeFormat, + tzFormat; + + if (match) { + getParsingFlags(config).iso = true; + + for (i = 0, l = isoDates.length; i < l; i++) { + if (isoDates[i][1].exec(match[1])) { + dateFormat = isoDates[i][0]; + allowTime = isoDates[i][2] !== false; + break; + } + } + if (dateFormat == null) { + config._isValid = false; + return; + } + if (match[3]) { + for (i = 0, l = isoTimes.length; i < l; i++) { + if (isoTimes[i][1].exec(match[3])) { + // match[2] should be 'T' or space + timeFormat = (match[2] || ' ') + isoTimes[i][0]; + break; + } + } + if (timeFormat == null) { + config._isValid = false; + return; + } + } + if (!allowTime && timeFormat != null) { + config._isValid = false; + return; + } + if (match[4]) { + if (tzRegex.exec(match[4])) { + tzFormat = 'Z'; + } else { + config._isValid = false; + return; + } + } + config._f = dateFormat + (timeFormat || '') + (tzFormat || ''); + configFromStringAndFormat(config); + } else { + config._isValid = false; + } + } + + function extractFromRFC2822Strings( + yearStr, + monthStr, + dayStr, + hourStr, + minuteStr, + secondStr + ) { + var result = [ + untruncateYear(yearStr), + defaultLocaleMonthsShort.indexOf(monthStr), + parseInt(dayStr, 10), + parseInt(hourStr, 10), + parseInt(minuteStr, 10), + ]; + + if (secondStr) { + result.push(parseInt(secondStr, 10)); + } + + return result; + } + + function untruncateYear(yearStr) { + var year = parseInt(yearStr, 10); + if (year <= 49) { + return 2000 + year; + } else if (year <= 999) { + return 1900 + year; + } + return year; + } + + function preprocessRFC2822(s) { + // Remove comments and folding whitespace and replace multiple-spaces with a single space + return s + .replace(/\([^)]*\)|[\n\t]/g, ' ') + .replace(/(\s\s+)/g, ' ') + .replace(/^\s\s*/, '') + .replace(/\s\s*$/, ''); + } + + function checkWeekday(weekdayStr, parsedInput, config) { + if (weekdayStr) { + // TODO: Replace the vanilla JS Date object with an independent day-of-week check. + var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr), + weekdayActual = new Date( + parsedInput[0], + parsedInput[1], + parsedInput[2] + ).getDay(); + if (weekdayProvided !== weekdayActual) { + getParsingFlags(config).weekdayMismatch = true; + config._isValid = false; + return false; + } + } + return true; + } + + function calculateOffset(obsOffset, militaryOffset, numOffset) { + if (obsOffset) { + return obsOffsets[obsOffset]; + } else if (militaryOffset) { + // the only allowed military tz is Z + return 0; + } else { + var hm = parseInt(numOffset, 10), + m = hm % 100, + h = (hm - m) / 100; + return h * 60 + m; + } + } + + // date and time from ref 2822 format + function configFromRFC2822(config) { + var match = rfc2822.exec(preprocessRFC2822(config._i)), + parsedArray; + if (match) { + parsedArray = extractFromRFC2822Strings( + match[4], + match[3], + match[2], + match[5], + match[6], + match[7] + ); + if (!checkWeekday(match[1], parsedArray, config)) { + return; + } + + config._a = parsedArray; + config._tzm = calculateOffset(match[8], match[9], match[10]); + + config._d = createUTCDate.apply(null, config._a); + config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm); + + getParsingFlags(config).rfc2822 = true; + } else { + config._isValid = false; + } + } + + // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict + function configFromString(config) { + var matched = aspNetJsonRegex.exec(config._i); + if (matched !== null) { + config._d = new Date(+matched[1]); + return; + } + + configFromISO(config); + if (config._isValid === false) { + delete config._isValid; + } else { + return; + } + + configFromRFC2822(config); + if (config._isValid === false) { + delete config._isValid; + } else { + return; + } + + if (config._strict) { + config._isValid = false; + } else { + // Final attempt, use Input Fallback + hooks.createFromInputFallback(config); + } + } + + hooks.createFromInputFallback = deprecate( + 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' + + 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' + + 'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.', + function (config) { + config._d = new Date(config._i + (config._useUTC ? ' UTC' : '')); + } + ); + + // Pick the first defined of two or three arguments. + function defaults(a, b, c) { + if (a != null) { + return a; + } + if (b != null) { + return b; + } + return c; + } + + function currentDateArray(config) { + // hooks is actually the exported moment object + var nowValue = new Date(hooks.now()); + if (config._useUTC) { + return [ + nowValue.getUTCFullYear(), + nowValue.getUTCMonth(), + nowValue.getUTCDate(), + ]; + } + return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()]; + } + + // convert an array to a date. + // the array should mirror the parameters below + // note: all values past the year are optional and will default to the lowest possible value. + // [year, month, day , hour, minute, second, millisecond] + function configFromArray(config) { + var i, + date, + input = [], + currentDate, + expectedWeekday, + yearToUse; + + if (config._d) { + return; + } + + currentDate = currentDateArray(config); + + //compute day of the year from weeks and weekdays + if (config._w && config._a[DATE] == null && config._a[MONTH] == null) { + dayOfYearFromWeekInfo(config); + } + + //if the day of the year is set, figure out what it is + if (config._dayOfYear != null) { + yearToUse = defaults(config._a[YEAR], currentDate[YEAR]); + + if ( + config._dayOfYear > daysInYear(yearToUse) || + config._dayOfYear === 0 + ) { + getParsingFlags(config)._overflowDayOfYear = true; + } + + date = createUTCDate(yearToUse, 0, config._dayOfYear); + config._a[MONTH] = date.getUTCMonth(); + config._a[DATE] = date.getUTCDate(); + } + + // Default to current date. + // * if no year, month, day of month are given, default to today + // * if day of month is given, default month and year + // * if month is given, default only year + // * if year is given, don't default anything + for (i = 0; i < 3 && config._a[i] == null; ++i) { + config._a[i] = input[i] = currentDate[i]; + } + + // Zero out whatever was not defaulted, including time + for (; i < 7; i++) { + config._a[i] = input[i] = + config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i]; + } + + // Check for 24:00:00.000 + if ( + config._a[HOUR] === 24 && + config._a[MINUTE] === 0 && + config._a[SECOND] === 0 && + config._a[MILLISECOND] === 0 + ) { + config._nextDay = true; + config._a[HOUR] = 0; + } + + config._d = (config._useUTC ? createUTCDate : createDate).apply( + null, + input + ); + expectedWeekday = config._useUTC + ? config._d.getUTCDay() + : config._d.getDay(); + + // Apply timezone offset from input. The actual utcOffset can be changed + // with parseZone. + if (config._tzm != null) { + config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm); + } + + if (config._nextDay) { + config._a[HOUR] = 24; + } + + // check for mismatching day of week + if ( + config._w && + typeof config._w.d !== 'undefined' && + config._w.d !== expectedWeekday + ) { + getParsingFlags(config).weekdayMismatch = true; + } + } + + function dayOfYearFromWeekInfo(config) { + var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek; + + w = config._w; + if (w.GG != null || w.W != null || w.E != null) { + dow = 1; + doy = 4; + + // TODO: We need to take the current isoWeekYear, but that depends on + // how we interpret now (local, utc, fixed offset). So create + // a now version of current config (take local/utc/offset flags, and + // create now). + weekYear = defaults( + w.GG, + config._a[YEAR], + weekOfYear(createLocal(), 1, 4).year + ); + week = defaults(w.W, 1); + weekday = defaults(w.E, 1); + if (weekday < 1 || weekday > 7) { + weekdayOverflow = true; + } + } else { + dow = config._locale._week.dow; + doy = config._locale._week.doy; + + curWeek = weekOfYear(createLocal(), dow, doy); + + weekYear = defaults(w.gg, config._a[YEAR], curWeek.year); + + // Default to current week. + week = defaults(w.w, curWeek.week); + + if (w.d != null) { + // weekday -- low day numbers are considered next week + weekday = w.d; + if (weekday < 0 || weekday > 6) { + weekdayOverflow = true; + } + } else if (w.e != null) { + // local weekday -- counting starts from beginning of week + weekday = w.e + dow; + if (w.e < 0 || w.e > 6) { + weekdayOverflow = true; + } + } else { + // default to beginning of week + weekday = dow; + } + } + if (week < 1 || week > weeksInYear(weekYear, dow, doy)) { + getParsingFlags(config)._overflowWeeks = true; + } else if (weekdayOverflow != null) { + getParsingFlags(config)._overflowWeekday = true; + } else { + temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy); + config._a[YEAR] = temp.year; + config._dayOfYear = temp.dayOfYear; + } + } + + // constant that refers to the ISO standard + hooks.ISO_8601 = function () {}; + + // constant that refers to the RFC 2822 form + hooks.RFC_2822 = function () {}; + + // date from string and format string + function configFromStringAndFormat(config) { + // TODO: Move this to another part of the creation flow to prevent circular deps + if (config._f === hooks.ISO_8601) { + configFromISO(config); + return; + } + if (config._f === hooks.RFC_2822) { + configFromRFC2822(config); + return; + } + config._a = []; + getParsingFlags(config).empty = true; + + // This array is used to make a Date, either with `new Date` or `Date.UTC` + var string = '' + config._i, + i, + parsedInput, + tokens, + token, + skipped, + stringLength = string.length, + totalParsedInputLength = 0, + era; + + tokens = + expandFormat(config._f, config._locale).match(formattingTokens) || []; + + for (i = 0; i < tokens.length; i++) { + token = tokens[i]; + parsedInput = (string.match(getParseRegexForToken(token, config)) || + [])[0]; + if (parsedInput) { + skipped = string.substr(0, string.indexOf(parsedInput)); + if (skipped.length > 0) { + getParsingFlags(config).unusedInput.push(skipped); + } + string = string.slice( + string.indexOf(parsedInput) + parsedInput.length + ); + totalParsedInputLength += parsedInput.length; + } + // don't parse if it's not a known token + if (formatTokenFunctions[token]) { + if (parsedInput) { + getParsingFlags(config).empty = false; + } else { + getParsingFlags(config).unusedTokens.push(token); + } + addTimeToArrayFromToken(token, parsedInput, config); + } else if (config._strict && !parsedInput) { + getParsingFlags(config).unusedTokens.push(token); + } + } + + // add remaining unparsed input length to the string + getParsingFlags(config).charsLeftOver = + stringLength - totalParsedInputLength; + if (string.length > 0) { + getParsingFlags(config).unusedInput.push(string); + } + + // clear _12h flag if hour is <= 12 + if ( + config._a[HOUR] <= 12 && + getParsingFlags(config).bigHour === true && + config._a[HOUR] > 0 + ) { + getParsingFlags(config).bigHour = undefined; + } + + getParsingFlags(config).parsedDateParts = config._a.slice(0); + getParsingFlags(config).meridiem = config._meridiem; + // handle meridiem + config._a[HOUR] = meridiemFixWrap( + config._locale, + config._a[HOUR], + config._meridiem + ); + + // handle era + era = getParsingFlags(config).era; + if (era !== null) { + config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]); + } + + configFromArray(config); + checkOverflow(config); + } + + function meridiemFixWrap(locale, hour, meridiem) { + var isPm; + + if (meridiem == null) { + // nothing to do + return hour; + } + if (locale.meridiemHour != null) { + return locale.meridiemHour(hour, meridiem); + } else if (locale.isPM != null) { + // Fallback + isPm = locale.isPM(meridiem); + if (isPm && hour < 12) { + hour += 12; + } + if (!isPm && hour === 12) { + hour = 0; + } + return hour; + } else { + // this is not supposed to happen + return hour; + } + } + + // date from string and array of format strings + function configFromStringAndArray(config) { + var tempConfig, + bestMoment, + scoreToBeat, + i, + currentScore, + validFormatFound, + bestFormatIsValid = false; + + if (config._f.length === 0) { + getParsingFlags(config).invalidFormat = true; + config._d = new Date(NaN); + return; + } + + for (i = 0; i < config._f.length; i++) { + currentScore = 0; + validFormatFound = false; + tempConfig = copyConfig({}, config); + if (config._useUTC != null) { + tempConfig._useUTC = config._useUTC; + } + tempConfig._f = config._f[i]; + configFromStringAndFormat(tempConfig); + + if (isValid(tempConfig)) { + validFormatFound = true; + } + + // if there is any input that was not parsed add a penalty for that format + currentScore += getParsingFlags(tempConfig).charsLeftOver; + + //or tokens + currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10; + + getParsingFlags(tempConfig).score = currentScore; + + if (!bestFormatIsValid) { + if ( + scoreToBeat == null || + currentScore < scoreToBeat || + validFormatFound + ) { + scoreToBeat = currentScore; + bestMoment = tempConfig; + if (validFormatFound) { + bestFormatIsValid = true; + } + } + } else { + if (currentScore < scoreToBeat) { + scoreToBeat = currentScore; + bestMoment = tempConfig; + } + } + } + + extend(config, bestMoment || tempConfig); + } + + function configFromObject(config) { + if (config._d) { + return; + } + + var i = normalizeObjectUnits(config._i), + dayOrDate = i.day === undefined ? i.date : i.day; + config._a = map( + [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond], + function (obj) { + return obj && parseInt(obj, 10); + } + ); + + configFromArray(config); + } + + function createFromConfig(config) { + var res = new Moment(checkOverflow(prepareConfig(config))); + if (res._nextDay) { + // Adding is smart enough around DST + res.add(1, 'd'); + res._nextDay = undefined; + } + + return res; + } + + function prepareConfig(config) { + var input = config._i, + format = config._f; + + config._locale = config._locale || getLocale(config._l); + + if (input === null || (format === undefined && input === '')) { + return createInvalid({ nullInput: true }); + } + + if (typeof input === 'string') { + config._i = input = config._locale.preparse(input); + } + + if (isMoment(input)) { + return new Moment(checkOverflow(input)); + } else if (isDate(input)) { + config._d = input; + } else if (isArray(format)) { + configFromStringAndArray(config); + } else if (format) { + configFromStringAndFormat(config); + } else { + configFromInput(config); + } + + if (!isValid(config)) { + config._d = null; + } + + return config; + } + + function configFromInput(config) { + var input = config._i; + if (isUndefined(input)) { + config._d = new Date(hooks.now()); + } else if (isDate(input)) { + config._d = new Date(input.valueOf()); + } else if (typeof input === 'string') { + configFromString(config); + } else if (isArray(input)) { + config._a = map(input.slice(0), function (obj) { + return parseInt(obj, 10); + }); + configFromArray(config); + } else if (isObject(input)) { + configFromObject(config); + } else if (isNumber(input)) { + // from milliseconds + config._d = new Date(input); + } else { + hooks.createFromInputFallback(config); + } + } + + function createLocalOrUTC(input, format, locale, strict, isUTC) { + var c = {}; + + if (format === true || format === false) { + strict = format; + format = undefined; + } + + if (locale === true || locale === false) { + strict = locale; + locale = undefined; + } + + if ( + (isObject(input) && isObjectEmpty(input)) || + (isArray(input) && input.length === 0) + ) { + input = undefined; + } + // object construction must be done this way. + // https://github.com/moment/moment/issues/1423 + c._isAMomentObject = true; + c._useUTC = c._isUTC = isUTC; + c._l = locale; + c._i = input; + c._f = format; + c._strict = strict; + + return createFromConfig(c); + } + + function createLocal(input, format, locale, strict) { + return createLocalOrUTC(input, format, locale, strict, false); + } + + var prototypeMin = deprecate( + 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/', + function () { + var other = createLocal.apply(null, arguments); + if (this.isValid() && other.isValid()) { + return other < this ? this : other; + } else { + return createInvalid(); + } + } + ), + prototypeMax = deprecate( + 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/', + function () { + var other = createLocal.apply(null, arguments); + if (this.isValid() && other.isValid()) { + return other > this ? this : other; + } else { + return createInvalid(); + } + } + ); + + // Pick a moment m from moments so that m[fn](other) is true for all + // other. This relies on the function fn to be transitive. + // + // moments should either be an array of moment objects or an array, whose + // first element is an array of moment objects. + function pickBy(fn, moments) { + var res, i; + if (moments.length === 1 && isArray(moments[0])) { + moments = moments[0]; + } + if (!moments.length) { + return createLocal(); + } + res = moments[0]; + for (i = 1; i < moments.length; ++i) { + if (!moments[i].isValid() || moments[i][fn](res)) { + res = moments[i]; + } + } + return res; + } + + // TODO: Use [].sort instead? + function min() { + var args = [].slice.call(arguments, 0); + + return pickBy('isBefore', args); + } + + function max() { + var args = [].slice.call(arguments, 0); + + return pickBy('isAfter', args); + } + + var now = function () { + return Date.now ? Date.now() : +new Date(); + }; + + var ordering = [ + 'year', + 'quarter', + 'month', + 'week', + 'day', + 'hour', + 'minute', + 'second', + 'millisecond', + ]; + + function isDurationValid(m) { + var key, + unitHasDecimal = false, + i; + for (key in m) { + if ( + hasOwnProp(m, key) && + !( + indexOf.call(ordering, key) !== -1 && + (m[key] == null || !isNaN(m[key])) + ) + ) { + return false; + } + } + + for (i = 0; i < ordering.length; ++i) { + if (m[ordering[i]]) { + if (unitHasDecimal) { + return false; // only allow non-integers for smallest unit + } + if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) { + unitHasDecimal = true; + } + } + } + + return true; + } + + function isValid$1() { + return this._isValid; + } + + function createInvalid$1() { + return createDuration(NaN); + } + + function Duration(duration) { + var normalizedInput = normalizeObjectUnits(duration), + years = normalizedInput.year || 0, + quarters = normalizedInput.quarter || 0, + months = normalizedInput.month || 0, + weeks = normalizedInput.week || normalizedInput.isoWeek || 0, + days = normalizedInput.day || 0, + hours = normalizedInput.hour || 0, + minutes = normalizedInput.minute || 0, + seconds = normalizedInput.second || 0, + milliseconds = normalizedInput.millisecond || 0; + + this._isValid = isDurationValid(normalizedInput); + + // representation for dateAddRemove + this._milliseconds = + +milliseconds + + seconds * 1e3 + // 1000 + minutes * 6e4 + // 1000 * 60 + hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978 + // Because of dateAddRemove treats 24 hours as different from a + // day when working around DST, we need to store them separately + this._days = +days + weeks * 7; + // It is impossible to translate months into days without knowing + // which months you are are talking about, so we have to store + // it separately. + this._months = +months + quarters * 3 + years * 12; + + this._data = {}; + + this._locale = getLocale(); + + this._bubble(); + } + + function isDuration(obj) { + return obj instanceof Duration; + } + + function absRound(number) { + if (number < 0) { + return Math.round(-1 * number) * -1; + } else { + return Math.round(number); + } + } + + // compare two arrays, return the number of differences + function compareArrays(array1, array2, dontConvert) { + var len = Math.min(array1.length, array2.length), + lengthDiff = Math.abs(array1.length - array2.length), + diffs = 0, + i; + for (i = 0; i < len; i++) { + if ( + (dontConvert && array1[i] !== array2[i]) || + (!dontConvert && toInt(array1[i]) !== toInt(array2[i])) + ) { + diffs++; + } + } + return diffs + lengthDiff; + } + + // FORMATTING + + function offset(token, separator) { + addFormatToken(token, 0, 0, function () { + var offset = this.utcOffset(), + sign = '+'; + if (offset < 0) { + offset = -offset; + sign = '-'; + } + return ( + sign + + zeroFill(~~(offset / 60), 2) + + separator + + zeroFill(~~offset % 60, 2) + ); + }); + } + + offset('Z', ':'); + offset('ZZ', ''); + + // PARSING + + addRegexToken('Z', matchShortOffset); + addRegexToken('ZZ', matchShortOffset); + addParseToken(['Z', 'ZZ'], function (input, array, config) { + config._useUTC = true; + config._tzm = offsetFromString(matchShortOffset, input); + }); + + // HELPERS + + // timezone chunker + // '+10:00' > ['10', '00'] + // '-1530' > ['-15', '30'] + var chunkOffset = /([\+\-]|\d\d)/gi; + + function offsetFromString(matcher, string) { + var matches = (string || '').match(matcher), + chunk, + parts, + minutes; + + if (matches === null) { + return null; + } + + chunk = matches[matches.length - 1] || []; + parts = (chunk + '').match(chunkOffset) || ['-', 0, 0]; + minutes = +(parts[1] * 60) + toInt(parts[2]); + + return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes; + } + + // Return a moment from input, that is local/utc/zone equivalent to model. + function cloneWithOffset(input, model) { + var res, diff; + if (model._isUTC) { + res = model.clone(); + diff = + (isMoment(input) || isDate(input) + ? input.valueOf() + : createLocal(input).valueOf()) - res.valueOf(); + // Use low-level api, because this fn is low-level api. + res._d.setTime(res._d.valueOf() + diff); + hooks.updateOffset(res, false); + return res; + } else { + return createLocal(input).local(); + } + } + + function getDateOffset(m) { + // On Firefox.24 Date#getTimezoneOffset returns a floating point. + // https://github.com/moment/moment/pull/1871 + return -Math.round(m._d.getTimezoneOffset()); + } + + // HOOKS + + // This function will be called whenever a moment is mutated. + // It is intended to keep the offset in sync with the timezone. + hooks.updateOffset = function () {}; + + // MOMENTS + + // keepLocalTime = true means only change the timezone, without + // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]--> + // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset + // +0200, so we adjust the time as needed, to be valid. + // + // Keeping the time actually adds/subtracts (one hour) + // from the actual represented time. That is why we call updateOffset + // a second time. In case it wants us to change the offset again + // _changeInProgress == true case, then we have to adjust, because + // there is no such time in the given timezone. + function getSetOffset(input, keepLocalTime, keepMinutes) { + var offset = this._offset || 0, + localAdjust; + if (!this.isValid()) { + return input != null ? this : NaN; + } + if (input != null) { + if (typeof input === 'string') { + input = offsetFromString(matchShortOffset, input); + if (input === null) { + return this; + } + } else if (Math.abs(input) < 16 && !keepMinutes) { + input = input * 60; + } + if (!this._isUTC && keepLocalTime) { + localAdjust = getDateOffset(this); + } + this._offset = input; + this._isUTC = true; + if (localAdjust != null) { + this.add(localAdjust, 'm'); + } + if (offset !== input) { + if (!keepLocalTime || this._changeInProgress) { + addSubtract( + this, + createDuration(input - offset, 'm'), + 1, + false + ); + } else if (!this._changeInProgress) { + this._changeInProgress = true; + hooks.updateOffset(this, true); + this._changeInProgress = null; + } + } + return this; + } else { + return this._isUTC ? offset : getDateOffset(this); + } + } + + function getSetZone(input, keepLocalTime) { + if (input != null) { + if (typeof input !== 'string') { + input = -input; + } + + this.utcOffset(input, keepLocalTime); + + return this; + } else { + return -this.utcOffset(); + } + } + + function setOffsetToUTC(keepLocalTime) { + return this.utcOffset(0, keepLocalTime); + } + + function setOffsetToLocal(keepLocalTime) { + if (this._isUTC) { + this.utcOffset(0, keepLocalTime); + this._isUTC = false; + + if (keepLocalTime) { + this.subtract(getDateOffset(this), 'm'); + } + } + return this; + } + + function setOffsetToParsedOffset() { + if (this._tzm != null) { + this.utcOffset(this._tzm, false, true); + } else if (typeof this._i === 'string') { + var tZone = offsetFromString(matchOffset, this._i); + if (tZone != null) { + this.utcOffset(tZone); + } else { + this.utcOffset(0, true); + } + } + return this; + } + + function hasAlignedHourOffset(input) { + if (!this.isValid()) { + return false; + } + input = input ? createLocal(input).utcOffset() : 0; + + return (this.utcOffset() - input) % 60 === 0; + } + + function isDaylightSavingTime() { + return ( + this.utcOffset() > this.clone().month(0).utcOffset() || + this.utcOffset() > this.clone().month(5).utcOffset() + ); + } + + function isDaylightSavingTimeShifted() { + if (!isUndefined(this._isDSTShifted)) { + return this._isDSTShifted; + } + + var c = {}, + other; + + copyConfig(c, this); + c = prepareConfig(c); + + if (c._a) { + other = c._isUTC ? createUTC(c._a) : createLocal(c._a); + this._isDSTShifted = + this.isValid() && compareArrays(c._a, other.toArray()) > 0; + } else { + this._isDSTShifted = false; + } + + return this._isDSTShifted; + } + + function isLocal() { + return this.isValid() ? !this._isUTC : false; + } + + function isUtcOffset() { + return this.isValid() ? this._isUTC : false; + } + + function isUtc() { + return this.isValid() ? this._isUTC && this._offset === 0 : false; + } + + // ASP.NET json date format regex + var aspNetRegex = /^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/, + // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html + // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere + // and further modified to allow for strings containing both week and day + isoRegex = /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/; + + function createDuration(input, key) { + var duration = input, + // matching against regexp is expensive, do it on demand + match = null, + sign, + ret, + diffRes; + + if (isDuration(input)) { + duration = { + ms: input._milliseconds, + d: input._days, + M: input._months, + }; + } else if (isNumber(input) || !isNaN(+input)) { + duration = {}; + if (key) { + duration[key] = +input; + } else { + duration.milliseconds = +input; + } + } else if ((match = aspNetRegex.exec(input))) { + sign = match[1] === '-' ? -1 : 1; + duration = { + y: 0, + d: toInt(match[DATE]) * sign, + h: toInt(match[HOUR]) * sign, + m: toInt(match[MINUTE]) * sign, + s: toInt(match[SECOND]) * sign, + ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match + }; + } else if ((match = isoRegex.exec(input))) { + sign = match[1] === '-' ? -1 : 1; + duration = { + y: parseIso(match[2], sign), + M: parseIso(match[3], sign), + w: parseIso(match[4], sign), + d: parseIso(match[5], sign), + h: parseIso(match[6], sign), + m: parseIso(match[7], sign), + s: parseIso(match[8], sign), + }; + } else if (duration == null) { + // checks for null or undefined + duration = {}; + } else if ( + typeof duration === 'object' && + ('from' in duration || 'to' in duration) + ) { + diffRes = momentsDifference( + createLocal(duration.from), + createLocal(duration.to) + ); + + duration = {}; + duration.ms = diffRes.milliseconds; + duration.M = diffRes.months; + } + + ret = new Duration(duration); + + if (isDuration(input) && hasOwnProp(input, '_locale')) { + ret._locale = input._locale; + } + + if (isDuration(input) && hasOwnProp(input, '_isValid')) { + ret._isValid = input._isValid; + } + + return ret; + } + + createDuration.fn = Duration.prototype; + createDuration.invalid = createInvalid$1; + + function parseIso(inp, sign) { + // We'd normally use ~~inp for this, but unfortunately it also + // converts floats to ints. + // inp may be undefined, so careful calling replace on it. + var res = inp && parseFloat(inp.replace(',', '.')); + // apply sign while we're at it + return (isNaN(res) ? 0 : res) * sign; + } + + function positiveMomentsDifference(base, other) { + var res = {}; + + res.months = + other.month() - base.month() + (other.year() - base.year()) * 12; + if (base.clone().add(res.months, 'M').isAfter(other)) { + --res.months; + } + + res.milliseconds = +other - +base.clone().add(res.months, 'M'); + + return res; + } + + function momentsDifference(base, other) { + var res; + if (!(base.isValid() && other.isValid())) { + return { milliseconds: 0, months: 0 }; + } + + other = cloneWithOffset(other, base); + if (base.isBefore(other)) { + res = positiveMomentsDifference(base, other); + } else { + res = positiveMomentsDifference(other, base); + res.milliseconds = -res.milliseconds; + res.months = -res.months; + } + + return res; + } + + // TODO: remove 'name' arg after deprecation is removed + function createAdder(direction, name) { + return function (val, period) { + var dur, tmp; + //invert the arguments, but complain about it + if (period !== null && !isNaN(+period)) { + deprecateSimple( + name, + 'moment().' + + name + + '(period, number) is deprecated. Please use moment().' + + name + + '(number, period). ' + + 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.' + ); + tmp = val; + val = period; + period = tmp; + } + + dur = createDuration(val, period); + addSubtract(this, dur, direction); + return this; + }; + } + + function addSubtract(mom, duration, isAdding, updateOffset) { + var milliseconds = duration._milliseconds, + days = absRound(duration._days), + months = absRound(duration._months); + + if (!mom.isValid()) { + // No op + return; + } + + updateOffset = updateOffset == null ? true : updateOffset; + + if (months) { + setMonth(mom, get(mom, 'Month') + months * isAdding); + } + if (days) { + set$1(mom, 'Date', get(mom, 'Date') + days * isAdding); + } + if (milliseconds) { + mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding); + } + if (updateOffset) { + hooks.updateOffset(mom, days || months); + } + } + + var add = createAdder(1, 'add'), + subtract = createAdder(-1, 'subtract'); + + function isString(input) { + return typeof input === 'string' || input instanceof String; + } + + // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined + function isMomentInput(input) { + return ( + isMoment(input) || + isDate(input) || + isString(input) || + isNumber(input) || + isNumberOrStringArray(input) || + isMomentInputObject(input) || + input === null || + input === undefined + ); + } + + function isMomentInputObject(input) { + var objectTest = isObject(input) && !isObjectEmpty(input), + propertyTest = false, + properties = [ + 'years', + 'year', + 'y', + 'months', + 'month', + 'M', + 'days', + 'day', + 'd', + 'dates', + 'date', + 'D', + 'hours', + 'hour', + 'h', + 'minutes', + 'minute', + 'm', + 'seconds', + 'second', + 's', + 'milliseconds', + 'millisecond', + 'ms', + ], + i, + property; + + for (i = 0; i < properties.length; i += 1) { + property = properties[i]; + propertyTest = propertyTest || hasOwnProp(input, property); + } + + return objectTest && propertyTest; + } + + function isNumberOrStringArray(input) { + var arrayTest = isArray(input), + dataTypeTest = false; + if (arrayTest) { + dataTypeTest = + input.filter(function (item) { + return !isNumber(item) && isString(input); + }).length === 0; + } + return arrayTest && dataTypeTest; + } + + function isCalendarSpec(input) { + var objectTest = isObject(input) && !isObjectEmpty(input), + propertyTest = false, + properties = [ + 'sameDay', + 'nextDay', + 'lastDay', + 'nextWeek', + 'lastWeek', + 'sameElse', + ], + i, + property; + + for (i = 0; i < properties.length; i += 1) { + property = properties[i]; + propertyTest = propertyTest || hasOwnProp(input, property); + } + + return objectTest && propertyTest; + } + + function getCalendarFormat(myMoment, now) { + var diff = myMoment.diff(now, 'days', true); + return diff < -6 + ? 'sameElse' + : diff < -1 + ? 'lastWeek' + : diff < 0 + ? 'lastDay' + : diff < 1 + ? 'sameDay' + : diff < 2 + ? 'nextDay' + : diff < 7 + ? 'nextWeek' + : 'sameElse'; + } + + function calendar$1(time, formats) { + // Support for single parameter, formats only overload to the calendar function + if (arguments.length === 1) { + if (!arguments[0]) { + time = undefined; + formats = undefined; + } else if (isMomentInput(arguments[0])) { + time = arguments[0]; + formats = undefined; + } else if (isCalendarSpec(arguments[0])) { + formats = arguments[0]; + time = undefined; + } + } + // We want to compare the start of today, vs this. + // Getting start-of-today depends on whether we're local/utc/offset or not. + var now = time || createLocal(), + sod = cloneWithOffset(now, this).startOf('day'), + format = hooks.calendarFormat(this, sod) || 'sameElse', + output = + formats && + (isFunction(formats[format]) + ? formats[format].call(this, now) + : formats[format]); + + return this.format( + output || this.localeData().calendar(format, this, createLocal(now)) + ); + } + + function clone() { + return new Moment(this); + } + + function isAfter(input, units) { + var localInput = isMoment(input) ? input : createLocal(input); + if (!(this.isValid() && localInput.isValid())) { + return false; + } + units = normalizeUnits(units) || 'millisecond'; + if (units === 'millisecond') { + return this.valueOf() > localInput.valueOf(); + } else { + return localInput.valueOf() < this.clone().startOf(units).valueOf(); + } + } + + function isBefore(input, units) { + var localInput = isMoment(input) ? input : createLocal(input); + if (!(this.isValid() && localInput.isValid())) { + return false; + } + units = normalizeUnits(units) || 'millisecond'; + if (units === 'millisecond') { + return this.valueOf() < localInput.valueOf(); + } else { + return this.clone().endOf(units).valueOf() < localInput.valueOf(); + } + } + + function isBetween(from, to, units, inclusivity) { + var localFrom = isMoment(from) ? from : createLocal(from), + localTo = isMoment(to) ? to : createLocal(to); + if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) { + return false; + } + inclusivity = inclusivity || '()'; + return ( + (inclusivity[0] === '(' + ? this.isAfter(localFrom, units) + : !this.isBefore(localFrom, units)) && + (inclusivity[1] === ')' + ? this.isBefore(localTo, units) + : !this.isAfter(localTo, units)) + ); + } + + function isSame(input, units) { + var localInput = isMoment(input) ? input : createLocal(input), + inputMs; + if (!(this.isValid() && localInput.isValid())) { + return false; + } + units = normalizeUnits(units) || 'millisecond'; + if (units === 'millisecond') { + return this.valueOf() === localInput.valueOf(); + } else { + inputMs = localInput.valueOf(); + return ( + this.clone().startOf(units).valueOf() <= inputMs && + inputMs <= this.clone().endOf(units).valueOf() + ); + } + } + + function isSameOrAfter(input, units) { + return this.isSame(input, units) || this.isAfter(input, units); + } + + function isSameOrBefore(input, units) { + return this.isSame(input, units) || this.isBefore(input, units); + } + + function diff(input, units, asFloat) { + var that, zoneDelta, output; + + if (!this.isValid()) { + return NaN; + } + + that = cloneWithOffset(input, this); + + if (!that.isValid()) { + return NaN; + } + + zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4; + + units = normalizeUnits(units); + + switch (units) { + case 'year': + output = monthDiff(this, that) / 12; + break; + case 'month': + output = monthDiff(this, that); + break; + case 'quarter': + output = monthDiff(this, that) / 3; + break; + case 'second': + output = (this - that) / 1e3; + break; // 1000 + case 'minute': + output = (this - that) / 6e4; + break; // 1000 * 60 + case 'hour': + output = (this - that) / 36e5; + break; // 1000 * 60 * 60 + case 'day': + output = (this - that - zoneDelta) / 864e5; + break; // 1000 * 60 * 60 * 24, negate dst + case 'week': + output = (this - that - zoneDelta) / 6048e5; + break; // 1000 * 60 * 60 * 24 * 7, negate dst + default: + output = this - that; + } + + return asFloat ? output : absFloor(output); + } + + function monthDiff(a, b) { + if (a.date() < b.date()) { + // end-of-month calculations work correct when the start month has more + // days than the end month. + return -monthDiff(b, a); + } + // difference in months + var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()), + // b is in (anchor - 1 month, anchor + 1 month) + anchor = a.clone().add(wholeMonthDiff, 'months'), + anchor2, + adjust; + + if (b - anchor < 0) { + anchor2 = a.clone().add(wholeMonthDiff - 1, 'months'); + // linear across the month + adjust = (b - anchor) / (anchor - anchor2); + } else { + anchor2 = a.clone().add(wholeMonthDiff + 1, 'months'); + // linear across the month + adjust = (b - anchor) / (anchor2 - anchor); + } + + //check for negative zero, return zero if negative zero + return -(wholeMonthDiff + adjust) || 0; + } + + hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ'; + hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]'; + + function toString() { + return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ'); + } + + function toISOString(keepOffset) { + if (!this.isValid()) { + return null; + } + var utc = keepOffset !== true, + m = utc ? this.clone().utc() : this; + if (m.year() < 0 || m.year() > 9999) { + return formatMoment( + m, + utc + ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]' + : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ' + ); + } + if (isFunction(Date.prototype.toISOString)) { + // native implementation is ~50x faster, use it when we can + if (utc) { + return this.toDate().toISOString(); + } else { + return new Date(this.valueOf() + this.utcOffset() * 60 * 1000) + .toISOString() + .replace('Z', formatMoment(m, 'Z')); + } + } + return formatMoment( + m, + utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ' + ); + } + + /** + * Return a human readable representation of a moment that can + * also be evaluated to get a new moment which is the same + * + * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects + */ + function inspect() { + if (!this.isValid()) { + return 'moment.invalid(/* ' + this._i + ' */)'; + } + var func = 'moment', + zone = '', + prefix, + year, + datetime, + suffix; + if (!this.isLocal()) { + func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone'; + zone = 'Z'; + } + prefix = '[' + func + '("]'; + year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY'; + datetime = '-MM-DD[T]HH:mm:ss.SSS'; + suffix = zone + '[")]'; + + return this.format(prefix + year + datetime + suffix); + } + + function format(inputString) { + if (!inputString) { + inputString = this.isUtc() + ? hooks.defaultFormatUtc + : hooks.defaultFormat; + } + var output = formatMoment(this, inputString); + return this.localeData().postformat(output); + } + + function from(time, withoutSuffix) { + if ( + this.isValid() && + ((isMoment(time) && time.isValid()) || createLocal(time).isValid()) + ) { + return createDuration({ to: this, from: time }) + .locale(this.locale()) + .humanize(!withoutSuffix); + } else { + return this.localeData().invalidDate(); + } + } + + function fromNow(withoutSuffix) { + return this.from(createLocal(), withoutSuffix); + } + + function to(time, withoutSuffix) { + if ( + this.isValid() && + ((isMoment(time) && time.isValid()) || createLocal(time).isValid()) + ) { + return createDuration({ from: this, to: time }) + .locale(this.locale()) + .humanize(!withoutSuffix); + } else { + return this.localeData().invalidDate(); + } + } + + function toNow(withoutSuffix) { + return this.to(createLocal(), withoutSuffix); + } + + // If passed a locale key, it will set the locale for this + // instance. Otherwise, it will return the locale configuration + // variables for this instance. + function locale(key) { + var newLocaleData; + + if (key === undefined) { + return this._locale._abbr; + } else { + newLocaleData = getLocale(key); + if (newLocaleData != null) { + this._locale = newLocaleData; + } + return this; + } + } + + var lang = deprecate( + 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.', + function (key) { + if (key === undefined) { + return this.localeData(); + } else { + return this.locale(key); + } + } + ); + + function localeData() { + return this._locale; + } + + var MS_PER_SECOND = 1000, + MS_PER_MINUTE = 60 * MS_PER_SECOND, + MS_PER_HOUR = 60 * MS_PER_MINUTE, + MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR; + + // actual modulo - handles negative numbers (for dates before 1970): + function mod$1(dividend, divisor) { + return ((dividend % divisor) + divisor) % divisor; + } + + function localStartOfDate(y, m, d) { + // the date constructor remaps years 0-99 to 1900-1999 + if (y < 100 && y >= 0) { + // preserve leap years using a full 400 year cycle, then reset + return new Date(y + 400, m, d) - MS_PER_400_YEARS; + } else { + return new Date(y, m, d).valueOf(); + } + } + + function utcStartOfDate(y, m, d) { + // Date.UTC remaps years 0-99 to 1900-1999 + if (y < 100 && y >= 0) { + // preserve leap years using a full 400 year cycle, then reset + return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS; + } else { + return Date.UTC(y, m, d); + } + } + + function startOf(units) { + var time, startOfDate; + units = normalizeUnits(units); + if (units === undefined || units === 'millisecond' || !this.isValid()) { + return this; + } + + startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate; + + switch (units) { + case 'year': + time = startOfDate(this.year(), 0, 1); + break; + case 'quarter': + time = startOfDate( + this.year(), + this.month() - (this.month() % 3), + 1 + ); + break; + case 'month': + time = startOfDate(this.year(), this.month(), 1); + break; + case 'week': + time = startOfDate( + this.year(), + this.month(), + this.date() - this.weekday() + ); + break; + case 'isoWeek': + time = startOfDate( + this.year(), + this.month(), + this.date() - (this.isoWeekday() - 1) + ); + break; + case 'day': + case 'date': + time = startOfDate(this.year(), this.month(), this.date()); + break; + case 'hour': + time = this._d.valueOf(); + time -= mod$1( + time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), + MS_PER_HOUR + ); + break; + case 'minute': + time = this._d.valueOf(); + time -= mod$1(time, MS_PER_MINUTE); + break; + case 'second': + time = this._d.valueOf(); + time -= mod$1(time, MS_PER_SECOND); + break; + } + + this._d.setTime(time); + hooks.updateOffset(this, true); + return this; + } + + function endOf(units) { + var time, startOfDate; + units = normalizeUnits(units); + if (units === undefined || units === 'millisecond' || !this.isValid()) { + return this; + } + + startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate; + + switch (units) { + case 'year': + time = startOfDate(this.year() + 1, 0, 1) - 1; + break; + case 'quarter': + time = + startOfDate( + this.year(), + this.month() - (this.month() % 3) + 3, + 1 + ) - 1; + break; + case 'month': + time = startOfDate(this.year(), this.month() + 1, 1) - 1; + break; + case 'week': + time = + startOfDate( + this.year(), + this.month(), + this.date() - this.weekday() + 7 + ) - 1; + break; + case 'isoWeek': + time = + startOfDate( + this.year(), + this.month(), + this.date() - (this.isoWeekday() - 1) + 7 + ) - 1; + break; + case 'day': + case 'date': + time = startOfDate(this.year(), this.month(), this.date() + 1) - 1; + break; + case 'hour': + time = this._d.valueOf(); + time += + MS_PER_HOUR - + mod$1( + time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), + MS_PER_HOUR + ) - + 1; + break; + case 'minute': + time = this._d.valueOf(); + time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1; + break; + case 'second': + time = this._d.valueOf(); + time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1; + break; + } + + this._d.setTime(time); + hooks.updateOffset(this, true); + return this; + } + + function valueOf() { + return this._d.valueOf() - (this._offset || 0) * 60000; + } + + function unix() { + return Math.floor(this.valueOf() / 1000); + } + + function toDate() { + return new Date(this.valueOf()); + } + + function toArray() { + var m = this; + return [ + m.year(), + m.month(), + m.date(), + m.hour(), + m.minute(), + m.second(), + m.millisecond(), + ]; + } + + function toObject() { + var m = this; + return { + years: m.year(), + months: m.month(), + date: m.date(), + hours: m.hours(), + minutes: m.minutes(), + seconds: m.seconds(), + milliseconds: m.milliseconds(), + }; + } + + function toJSON() { + // new Date(NaN).toJSON() === null + return this.isValid() ? this.toISOString() : null; + } + + function isValid$2() { + return isValid(this); + } + + function parsingFlags() { + return extend({}, getParsingFlags(this)); + } + + function invalidAt() { + return getParsingFlags(this).overflow; + } + + function creationData() { + return { + input: this._i, + format: this._f, + locale: this._locale, + isUTC: this._isUTC, + strict: this._strict, + }; + } + + addFormatToken('N', 0, 0, 'eraAbbr'); + addFormatToken('NN', 0, 0, 'eraAbbr'); + addFormatToken('NNN', 0, 0, 'eraAbbr'); + addFormatToken('NNNN', 0, 0, 'eraName'); + addFormatToken('NNNNN', 0, 0, 'eraNarrow'); + + addFormatToken('y', ['y', 1], 'yo', 'eraYear'); + addFormatToken('y', ['yy', 2], 0, 'eraYear'); + addFormatToken('y', ['yyy', 3], 0, 'eraYear'); + addFormatToken('y', ['yyyy', 4], 0, 'eraYear'); + + addRegexToken('N', matchEraAbbr); + addRegexToken('NN', matchEraAbbr); + addRegexToken('NNN', matchEraAbbr); + addRegexToken('NNNN', matchEraName); + addRegexToken('NNNNN', matchEraNarrow); + + addParseToken(['N', 'NN', 'NNN', 'NNNN', 'NNNNN'], function ( + input, + array, + config, + token + ) { + var era = config._locale.erasParse(input, token, config._strict); + if (era) { + getParsingFlags(config).era = era; + } else { + getParsingFlags(config).invalidEra = input; + } + }); + + addRegexToken('y', matchUnsigned); + addRegexToken('yy', matchUnsigned); + addRegexToken('yyy', matchUnsigned); + addRegexToken('yyyy', matchUnsigned); + addRegexToken('yo', matchEraYearOrdinal); + + addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR); + addParseToken(['yo'], function (input, array, config, token) { + var match; + if (config._locale._eraYearOrdinalRegex) { + match = input.match(config._locale._eraYearOrdinalRegex); + } + + if (config._locale.eraYearOrdinalParse) { + array[YEAR] = config._locale.eraYearOrdinalParse(input, match); + } else { + array[YEAR] = parseInt(input, 10); + } + }); + + function localeEras(m, format) { + var i, + l, + date, + eras = this._eras || getLocale('en')._eras; + for (i = 0, l = eras.length; i < l; ++i) { + switch (typeof eras[i].since) { + case 'string': + // truncate time + date = hooks(eras[i].since).startOf('day'); + eras[i].since = date.valueOf(); + break; + } + + switch (typeof eras[i].until) { + case 'undefined': + eras[i].until = +Infinity; + break; + case 'string': + // truncate time + date = hooks(eras[i].until).startOf('day').valueOf(); + eras[i].until = date.valueOf(); + break; + } + } + return eras; + } + + function localeErasParse(eraName, format, strict) { + var i, + l, + eras = this.eras(), + name, + abbr, + narrow; + eraName = eraName.toUpperCase(); + + for (i = 0, l = eras.length; i < l; ++i) { + name = eras[i].name.toUpperCase(); + abbr = eras[i].abbr.toUpperCase(); + narrow = eras[i].narrow.toUpperCase(); + + if (strict) { + switch (format) { + case 'N': + case 'NN': + case 'NNN': + if (abbr === eraName) { + return eras[i]; + } + break; + + case 'NNNN': + if (name === eraName) { + return eras[i]; + } + break; + + case 'NNNNN': + if (narrow === eraName) { + return eras[i]; + } + break; + } + } else if ([name, abbr, narrow].indexOf(eraName) >= 0) { + return eras[i]; + } + } + } + + function localeErasConvertYear(era, year) { + var dir = era.since <= era.until ? +1 : -1; + if (year === undefined) { + return hooks(era.since).year(); + } else { + return hooks(era.since).year() + (year - era.offset) * dir; + } + } + + function getEraName() { + var i, + l, + val, + eras = this.localeData().eras(); + for (i = 0, l = eras.length; i < l; ++i) { + // truncate time + val = this.clone().startOf('day').valueOf(); + + if (eras[i].since <= val && val <= eras[i].until) { + return eras[i].name; + } + if (eras[i].until <= val && val <= eras[i].since) { + return eras[i].name; + } + } + + return ''; + } + + function getEraNarrow() { + var i, + l, + val, + eras = this.localeData().eras(); + for (i = 0, l = eras.length; i < l; ++i) { + // truncate time + val = this.clone().startOf('day').valueOf(); + + if (eras[i].since <= val && val <= eras[i].until) { + return eras[i].narrow; + } + if (eras[i].until <= val && val <= eras[i].since) { + return eras[i].narrow; + } + } + + return ''; + } + + function getEraAbbr() { + var i, + l, + val, + eras = this.localeData().eras(); + for (i = 0, l = eras.length; i < l; ++i) { + // truncate time + val = this.clone().startOf('day').valueOf(); + + if (eras[i].since <= val && val <= eras[i].until) { + return eras[i].abbr; + } + if (eras[i].until <= val && val <= eras[i].since) { + return eras[i].abbr; + } + } + + return ''; + } + + function getEraYear() { + var i, + l, + dir, + val, + eras = this.localeData().eras(); + for (i = 0, l = eras.length; i < l; ++i) { + dir = eras[i].since <= eras[i].until ? +1 : -1; + + // truncate time + val = this.clone().startOf('day').valueOf(); + + if ( + (eras[i].since <= val && val <= eras[i].until) || + (eras[i].until <= val && val <= eras[i].since) + ) { + return ( + (this.year() - hooks(eras[i].since).year()) * dir + + eras[i].offset + ); + } + } + + return this.year(); + } + + function erasNameRegex(isStrict) { + if (!hasOwnProp(this, '_erasNameRegex')) { + computeErasParse.call(this); + } + return isStrict ? this._erasNameRegex : this._erasRegex; + } + + function erasAbbrRegex(isStrict) { + if (!hasOwnProp(this, '_erasAbbrRegex')) { + computeErasParse.call(this); + } + return isStrict ? this._erasAbbrRegex : this._erasRegex; + } + + function erasNarrowRegex(isStrict) { + if (!hasOwnProp(this, '_erasNarrowRegex')) { + computeErasParse.call(this); + } + return isStrict ? this._erasNarrowRegex : this._erasRegex; + } + + function matchEraAbbr(isStrict, locale) { + return locale.erasAbbrRegex(isStrict); + } + + function matchEraName(isStrict, locale) { + return locale.erasNameRegex(isStrict); + } + + function matchEraNarrow(isStrict, locale) { + return locale.erasNarrowRegex(isStrict); + } + + function matchEraYearOrdinal(isStrict, locale) { + return locale._eraYearOrdinalRegex || matchUnsigned; + } + + function computeErasParse() { + var abbrPieces = [], + namePieces = [], + narrowPieces = [], + mixedPieces = [], + i, + l, + eras = this.eras(); + + for (i = 0, l = eras.length; i < l; ++i) { + namePieces.push(regexEscape(eras[i].name)); + abbrPieces.push(regexEscape(eras[i].abbr)); + narrowPieces.push(regexEscape(eras[i].narrow)); + + mixedPieces.push(regexEscape(eras[i].name)); + mixedPieces.push(regexEscape(eras[i].abbr)); + mixedPieces.push(regexEscape(eras[i].narrow)); + } + + this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i'); + this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i'); + this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i'); + this._erasNarrowRegex = new RegExp( + '^(' + narrowPieces.join('|') + ')', + 'i' + ); + } + + // FORMATTING + + addFormatToken(0, ['gg', 2], 0, function () { + return this.weekYear() % 100; + }); + + addFormatToken(0, ['GG', 2], 0, function () { + return this.isoWeekYear() % 100; + }); + + function addWeekYearFormatToken(token, getter) { + addFormatToken(0, [token, token.length], 0, getter); + } + + addWeekYearFormatToken('gggg', 'weekYear'); + addWeekYearFormatToken('ggggg', 'weekYear'); + addWeekYearFormatToken('GGGG', 'isoWeekYear'); + addWeekYearFormatToken('GGGGG', 'isoWeekYear'); + + // ALIASES + + addUnitAlias('weekYear', 'gg'); + addUnitAlias('isoWeekYear', 'GG'); + + // PRIORITY + + addUnitPriority('weekYear', 1); + addUnitPriority('isoWeekYear', 1); + + // PARSING + + addRegexToken('G', matchSigned); + addRegexToken('g', matchSigned); + addRegexToken('GG', match1to2, match2); + addRegexToken('gg', match1to2, match2); + addRegexToken('GGGG', match1to4, match4); + addRegexToken('gggg', match1to4, match4); + addRegexToken('GGGGG', match1to6, match6); + addRegexToken('ggggg', match1to6, match6); + + addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function ( + input, + week, + config, + token + ) { + week[token.substr(0, 2)] = toInt(input); + }); + + addWeekParseToken(['gg', 'GG'], function (input, week, config, token) { + week[token] = hooks.parseTwoDigitYear(input); + }); + + // MOMENTS + + function getSetWeekYear(input) { + return getSetWeekYearHelper.call( + this, + input, + this.week(), + this.weekday(), + this.localeData()._week.dow, + this.localeData()._week.doy + ); + } + + function getSetISOWeekYear(input) { + return getSetWeekYearHelper.call( + this, + input, + this.isoWeek(), + this.isoWeekday(), + 1, + 4 + ); + } + + function getISOWeeksInYear() { + return weeksInYear(this.year(), 1, 4); + } + + function getISOWeeksInISOWeekYear() { + return weeksInYear(this.isoWeekYear(), 1, 4); + } + + function getWeeksInYear() { + var weekInfo = this.localeData()._week; + return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy); + } + + function getWeeksInWeekYear() { + var weekInfo = this.localeData()._week; + return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy); + } + + function getSetWeekYearHelper(input, week, weekday, dow, doy) { + var weeksTarget; + if (input == null) { + return weekOfYear(this, dow, doy).year; + } else { + weeksTarget = weeksInYear(input, dow, doy); + if (week > weeksTarget) { + week = weeksTarget; + } + return setWeekAll.call(this, input, week, weekday, dow, doy); + } + } + + function setWeekAll(weekYear, week, weekday, dow, doy) { + var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy), + date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear); + + this.year(date.getUTCFullYear()); + this.month(date.getUTCMonth()); + this.date(date.getUTCDate()); + return this; + } + + // FORMATTING + + addFormatToken('Q', 0, 'Qo', 'quarter'); + + // ALIASES + + addUnitAlias('quarter', 'Q'); + + // PRIORITY + + addUnitPriority('quarter', 7); + + // PARSING + + addRegexToken('Q', match1); + addParseToken('Q', function (input, array) { + array[MONTH] = (toInt(input) - 1) * 3; + }); + + // MOMENTS + + function getSetQuarter(input) { + return input == null + ? Math.ceil((this.month() + 1) / 3) + : this.month((input - 1) * 3 + (this.month() % 3)); + } + + // FORMATTING + + addFormatToken('D', ['DD', 2], 'Do', 'date'); + + // ALIASES + + addUnitAlias('date', 'D'); + + // PRIORITY + addUnitPriority('date', 9); + + // PARSING + + addRegexToken('D', match1to2); + addRegexToken('DD', match1to2, match2); + addRegexToken('Do', function (isStrict, locale) { + // TODO: Remove "ordinalParse" fallback in next major release. + return isStrict + ? locale._dayOfMonthOrdinalParse || locale._ordinalParse + : locale._dayOfMonthOrdinalParseLenient; + }); + + addParseToken(['D', 'DD'], DATE); + addParseToken('Do', function (input, array) { + array[DATE] = toInt(input.match(match1to2)[0]); + }); + + // MOMENTS + + var getSetDayOfMonth = makeGetSet('Date', true); + + // FORMATTING + + addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear'); + + // ALIASES + + addUnitAlias('dayOfYear', 'DDD'); + + // PRIORITY + addUnitPriority('dayOfYear', 4); + + // PARSING + + addRegexToken('DDD', match1to3); + addRegexToken('DDDD', match3); + addParseToken(['DDD', 'DDDD'], function (input, array, config) { + config._dayOfYear = toInt(input); + }); + + // HELPERS + + // MOMENTS + + function getSetDayOfYear(input) { + var dayOfYear = + Math.round( + (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5 + ) + 1; + return input == null ? dayOfYear : this.add(input - dayOfYear, 'd'); + } + + // FORMATTING + + addFormatToken('m', ['mm', 2], 0, 'minute'); + + // ALIASES + + addUnitAlias('minute', 'm'); + + // PRIORITY + + addUnitPriority('minute', 14); + + // PARSING + + addRegexToken('m', match1to2); + addRegexToken('mm', match1to2, match2); + addParseToken(['m', 'mm'], MINUTE); + + // MOMENTS + + var getSetMinute = makeGetSet('Minutes', false); + + // FORMATTING + + addFormatToken('s', ['ss', 2], 0, 'second'); + + // ALIASES + + addUnitAlias('second', 's'); + + // PRIORITY + + addUnitPriority('second', 15); + + // PARSING + + addRegexToken('s', match1to2); + addRegexToken('ss', match1to2, match2); + addParseToken(['s', 'ss'], SECOND); + + // MOMENTS + + var getSetSecond = makeGetSet('Seconds', false); + + // FORMATTING + + addFormatToken('S', 0, 0, function () { + return ~~(this.millisecond() / 100); + }); + + addFormatToken(0, ['SS', 2], 0, function () { + return ~~(this.millisecond() / 10); + }); + + addFormatToken(0, ['SSS', 3], 0, 'millisecond'); + addFormatToken(0, ['SSSS', 4], 0, function () { + return this.millisecond() * 10; + }); + addFormatToken(0, ['SSSSS', 5], 0, function () { + return this.millisecond() * 100; + }); + addFormatToken(0, ['SSSSSS', 6], 0, function () { + return this.millisecond() * 1000; + }); + addFormatToken(0, ['SSSSSSS', 7], 0, function () { + return this.millisecond() * 10000; + }); + addFormatToken(0, ['SSSSSSSS', 8], 0, function () { + return this.millisecond() * 100000; + }); + addFormatToken(0, ['SSSSSSSSS', 9], 0, function () { + return this.millisecond() * 1000000; + }); + + // ALIASES + + addUnitAlias('millisecond', 'ms'); + + // PRIORITY + + addUnitPriority('millisecond', 16); + + // PARSING + + addRegexToken('S', match1to3, match1); + addRegexToken('SS', match1to3, match2); + addRegexToken('SSS', match1to3, match3); + + var token, getSetMillisecond; + for (token = 'SSSS'; token.length <= 9; token += 'S') { + addRegexToken(token, matchUnsigned); + } + + function parseMs(input, array) { + array[MILLISECOND] = toInt(('0.' + input) * 1000); + } + + for (token = 'S'; token.length <= 9; token += 'S') { + addParseToken(token, parseMs); + } + + getSetMillisecond = makeGetSet('Milliseconds', false); + + // FORMATTING + + addFormatToken('z', 0, 0, 'zoneAbbr'); + addFormatToken('zz', 0, 0, 'zoneName'); + + // MOMENTS + + function getZoneAbbr() { + return this._isUTC ? 'UTC' : ''; + } + + function getZoneName() { + return this._isUTC ? 'Coordinated Universal Time' : ''; + } + + var proto = Moment.prototype; + + proto.add = add; + proto.calendar = calendar$1; + proto.clone = clone; + proto.diff = diff; + proto.endOf = endOf; + proto.format = format; + proto.from = from; + proto.fromNow = fromNow; + proto.to = to; + proto.toNow = toNow; + proto.get = stringGet; + proto.invalidAt = invalidAt; + proto.isAfter = isAfter; + proto.isBefore = isBefore; + proto.isBetween = isBetween; + proto.isSame = isSame; + proto.isSameOrAfter = isSameOrAfter; + proto.isSameOrBefore = isSameOrBefore; + proto.isValid = isValid$2; + proto.lang = lang; + proto.locale = locale; + proto.localeData = localeData; + proto.max = prototypeMax; + proto.min = prototypeMin; + proto.parsingFlags = parsingFlags; + proto.set = stringSet; + proto.startOf = startOf; + proto.subtract = subtract; + proto.toArray = toArray; + proto.toObject = toObject; + proto.toDate = toDate; + proto.toISOString = toISOString; + proto.inspect = inspect; + if (typeof Symbol !== 'undefined' && Symbol.for != null) { + proto[Symbol.for('nodejs.util.inspect.custom')] = function () { + return 'Moment<' + this.format() + '>'; + }; + } + proto.toJSON = toJSON; + proto.toString = toString; + proto.unix = unix; + proto.valueOf = valueOf; + proto.creationData = creationData; + proto.eraName = getEraName; + proto.eraNarrow = getEraNarrow; + proto.eraAbbr = getEraAbbr; + proto.eraYear = getEraYear; + proto.year = getSetYear; + proto.isLeapYear = getIsLeapYear; + proto.weekYear = getSetWeekYear; + proto.isoWeekYear = getSetISOWeekYear; + proto.quarter = proto.quarters = getSetQuarter; + proto.month = getSetMonth; + proto.daysInMonth = getDaysInMonth; + proto.week = proto.weeks = getSetWeek; + proto.isoWeek = proto.isoWeeks = getSetISOWeek; + proto.weeksInYear = getWeeksInYear; + proto.weeksInWeekYear = getWeeksInWeekYear; + proto.isoWeeksInYear = getISOWeeksInYear; + proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear; + proto.date = getSetDayOfMonth; + proto.day = proto.days = getSetDayOfWeek; + proto.weekday = getSetLocaleDayOfWeek; + proto.isoWeekday = getSetISODayOfWeek; + proto.dayOfYear = getSetDayOfYear; + proto.hour = proto.hours = getSetHour; + proto.minute = proto.minutes = getSetMinute; + proto.second = proto.seconds = getSetSecond; + proto.millisecond = proto.milliseconds = getSetMillisecond; + proto.utcOffset = getSetOffset; + proto.utc = setOffsetToUTC; + proto.local = setOffsetToLocal; + proto.parseZone = setOffsetToParsedOffset; + proto.hasAlignedHourOffset = hasAlignedHourOffset; + proto.isDST = isDaylightSavingTime; + proto.isLocal = isLocal; + proto.isUtcOffset = isUtcOffset; + proto.isUtc = isUtc; + proto.isUTC = isUtc; + proto.zoneAbbr = getZoneAbbr; + proto.zoneName = getZoneName; + proto.dates = deprecate( + 'dates accessor is deprecated. Use date instead.', + getSetDayOfMonth + ); + proto.months = deprecate( + 'months accessor is deprecated. Use month instead', + getSetMonth + ); + proto.years = deprecate( + 'years accessor is deprecated. Use year instead', + getSetYear + ); + proto.zone = deprecate( + 'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', + getSetZone + ); + proto.isDSTShifted = deprecate( + 'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', + isDaylightSavingTimeShifted + ); + + function createUnix(input) { + return createLocal(input * 1000); + } + + function createInZone() { + return createLocal.apply(null, arguments).parseZone(); + } + + function preParsePostFormat(string) { + return string; + } + + var proto$1 = Locale.prototype; + + proto$1.calendar = calendar; + proto$1.longDateFormat = longDateFormat; + proto$1.invalidDate = invalidDate; + proto$1.ordinal = ordinal; + proto$1.preparse = preParsePostFormat; + proto$1.postformat = preParsePostFormat; + proto$1.relativeTime = relativeTime; + proto$1.pastFuture = pastFuture; + proto$1.set = set; + proto$1.eras = localeEras; + proto$1.erasParse = localeErasParse; + proto$1.erasConvertYear = localeErasConvertYear; + proto$1.erasAbbrRegex = erasAbbrRegex; + proto$1.erasNameRegex = erasNameRegex; + proto$1.erasNarrowRegex = erasNarrowRegex; + + proto$1.months = localeMonths; + proto$1.monthsShort = localeMonthsShort; + proto$1.monthsParse = localeMonthsParse; + proto$1.monthsRegex = monthsRegex; + proto$1.monthsShortRegex = monthsShortRegex; + proto$1.week = localeWeek; + proto$1.firstDayOfYear = localeFirstDayOfYear; + proto$1.firstDayOfWeek = localeFirstDayOfWeek; + + proto$1.weekdays = localeWeekdays; + proto$1.weekdaysMin = localeWeekdaysMin; + proto$1.weekdaysShort = localeWeekdaysShort; + proto$1.weekdaysParse = localeWeekdaysParse; + + proto$1.weekdaysRegex = weekdaysRegex; + proto$1.weekdaysShortRegex = weekdaysShortRegex; + proto$1.weekdaysMinRegex = weekdaysMinRegex; + + proto$1.isPM = localeIsPM; + proto$1.meridiem = localeMeridiem; + + function get$1(format, index, field, setter) { + var locale = getLocale(), + utc = createUTC().set(setter, index); + return locale[field](utc, format); + } + + function listMonthsImpl(format, index, field) { + if (isNumber(format)) { + index = format; + format = undefined; + } + + format = format || ''; + + if (index != null) { + return get$1(format, index, field, 'month'); + } + + var i, + out = []; + for (i = 0; i < 12; i++) { + out[i] = get$1(format, i, field, 'month'); + } + return out; + } + + // () + // (5) + // (fmt, 5) + // (fmt) + // (true) + // (true, 5) + // (true, fmt, 5) + // (true, fmt) + function listWeekdaysImpl(localeSorted, format, index, field) { + if (typeof localeSorted === 'boolean') { + if (isNumber(format)) { + index = format; + format = undefined; + } + + format = format || ''; + } else { + format = localeSorted; + index = format; + localeSorted = false; + + if (isNumber(format)) { + index = format; + format = undefined; + } + + format = format || ''; + } + + var locale = getLocale(), + shift = localeSorted ? locale._week.dow : 0, + i, + out = []; + + if (index != null) { + return get$1(format, (index + shift) % 7, field, 'day'); + } + + for (i = 0; i < 7; i++) { + out[i] = get$1(format, (i + shift) % 7, field, 'day'); + } + return out; + } + + function listMonths(format, index) { + return listMonthsImpl(format, index, 'months'); + } + + function listMonthsShort(format, index) { + return listMonthsImpl(format, index, 'monthsShort'); + } + + function listWeekdays(localeSorted, format, index) { + return listWeekdaysImpl(localeSorted, format, index, 'weekdays'); + } + + function listWeekdaysShort(localeSorted, format, index) { + return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort'); + } + + function listWeekdaysMin(localeSorted, format, index) { + return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin'); + } + + getSetGlobalLocale('en', { + eras: [ + { + since: '0001-01-01', + until: +Infinity, + offset: 1, + name: 'Anno Domini', + narrow: 'AD', + abbr: 'AD', + }, + { + since: '0000-12-31', + until: -Infinity, + offset: 1, + name: 'Before Christ', + narrow: 'BC', + abbr: 'BC', + }, + ], + dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/, + ordinal: function (number) { + var b = number % 10, + output = + toInt((number % 100) / 10) === 1 + ? 'th' + : b === 1 + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; + return number + output; + }, + }); + + // Side effect imports + + hooks.lang = deprecate( + 'moment.lang is deprecated. Use moment.locale instead.', + getSetGlobalLocale + ); + hooks.langData = deprecate( + 'moment.langData is deprecated. Use moment.localeData instead.', + getLocale + ); + + var mathAbs = Math.abs; + + function abs() { + var data = this._data; + + this._milliseconds = mathAbs(this._milliseconds); + this._days = mathAbs(this._days); + this._months = mathAbs(this._months); + + data.milliseconds = mathAbs(data.milliseconds); + data.seconds = mathAbs(data.seconds); + data.minutes = mathAbs(data.minutes); + data.hours = mathAbs(data.hours); + data.months = mathAbs(data.months); + data.years = mathAbs(data.years); + + return this; + } + + function addSubtract$1(duration, input, value, direction) { + var other = createDuration(input, value); + + duration._milliseconds += direction * other._milliseconds; + duration._days += direction * other._days; + duration._months += direction * other._months; + + return duration._bubble(); + } + + // supports only 2.0-style add(1, 's') or add(duration) + function add$1(input, value) { + return addSubtract$1(this, input, value, 1); + } + + // supports only 2.0-style subtract(1, 's') or subtract(duration) + function subtract$1(input, value) { + return addSubtract$1(this, input, value, -1); + } + + function absCeil(number) { + if (number < 0) { + return Math.floor(number); + } else { + return Math.ceil(number); + } + } + + function bubble() { + var milliseconds = this._milliseconds, + days = this._days, + months = this._months, + data = this._data, + seconds, + minutes, + hours, + years, + monthsFromDays; + + // if we have a mix of positive and negative values, bubble down first + // check: https://github.com/moment/moment/issues/2166 + if ( + !( + (milliseconds >= 0 && days >= 0 && months >= 0) || + (milliseconds <= 0 && days <= 0 && months <= 0) + ) + ) { + milliseconds += absCeil(monthsToDays(months) + days) * 864e5; + days = 0; + months = 0; + } + + // The following code bubbles up values, see the tests for + // examples of what that means. + data.milliseconds = milliseconds % 1000; + + seconds = absFloor(milliseconds / 1000); + data.seconds = seconds % 60; + + minutes = absFloor(seconds / 60); + data.minutes = minutes % 60; + + hours = absFloor(minutes / 60); + data.hours = hours % 24; + + days += absFloor(hours / 24); + + // convert days to months + monthsFromDays = absFloor(daysToMonths(days)); + months += monthsFromDays; + days -= absCeil(monthsToDays(monthsFromDays)); + + // 12 months -> 1 year + years = absFloor(months / 12); + months %= 12; + + data.days = days; + data.months = months; + data.years = years; + + return this; + } + + function daysToMonths(days) { + // 400 years have 146097 days (taking into account leap year rules) + // 400 years have 12 months === 4800 + return (days * 4800) / 146097; + } + + function monthsToDays(months) { + // the reverse of daysToMonths + return (months * 146097) / 4800; + } + + function as(units) { + if (!this.isValid()) { + return NaN; + } + var days, + months, + milliseconds = this._milliseconds; + + units = normalizeUnits(units); + + if (units === 'month' || units === 'quarter' || units === 'year') { + days = this._days + milliseconds / 864e5; + months = this._months + daysToMonths(days); + switch (units) { + case 'month': + return months; + case 'quarter': + return months / 3; + case 'year': + return months / 12; + } + } else { + // handle milliseconds separately because of floating point math errors (issue #1867) + days = this._days + Math.round(monthsToDays(this._months)); + switch (units) { + case 'week': + return days / 7 + milliseconds / 6048e5; + case 'day': + return days + milliseconds / 864e5; + case 'hour': + return days * 24 + milliseconds / 36e5; + case 'minute': + return days * 1440 + milliseconds / 6e4; + case 'second': + return days * 86400 + milliseconds / 1000; + // Math.floor prevents floating point math errors here + case 'millisecond': + return Math.floor(days * 864e5) + milliseconds; + default: + throw new Error('Unknown unit ' + units); + } + } + } + + // TODO: Use this.as('ms')? + function valueOf$1() { + if (!this.isValid()) { + return NaN; + } + return ( + this._milliseconds + + this._days * 864e5 + + (this._months % 12) * 2592e6 + + toInt(this._months / 12) * 31536e6 + ); + } + + function makeAs(alias) { + return function () { + return this.as(alias); + }; + } + + var asMilliseconds = makeAs('ms'), + asSeconds = makeAs('s'), + asMinutes = makeAs('m'), + asHours = makeAs('h'), + asDays = makeAs('d'), + asWeeks = makeAs('w'), + asMonths = makeAs('M'), + asQuarters = makeAs('Q'), + asYears = makeAs('y'); + + function clone$1() { + return createDuration(this); + } + + function get$2(units) { + units = normalizeUnits(units); + return this.isValid() ? this[units + 's']() : NaN; + } + + function makeGetter(name) { + return function () { + return this.isValid() ? this._data[name] : NaN; + }; + } + + var milliseconds = makeGetter('milliseconds'), + seconds = makeGetter('seconds'), + minutes = makeGetter('minutes'), + hours = makeGetter('hours'), + days = makeGetter('days'), + months = makeGetter('months'), + years = makeGetter('years'); + + function weeks() { + return absFloor(this.days() / 7); + } + + var round = Math.round, + thresholds = { + ss: 44, // a few seconds to seconds + s: 45, // seconds to minute + m: 45, // minutes to hour + h: 22, // hours to day + d: 26, // days to month/week + w: null, // weeks to month + M: 11, // months to year + }; + + // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize + function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) { + return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture); + } + + function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) { + var duration = createDuration(posNegDuration).abs(), + seconds = round(duration.as('s')), + minutes = round(duration.as('m')), + hours = round(duration.as('h')), + days = round(duration.as('d')), + months = round(duration.as('M')), + weeks = round(duration.as('w')), + years = round(duration.as('y')), + a = + (seconds <= thresholds.ss && ['s', seconds]) || + (seconds < thresholds.s && ['ss', seconds]) || + (minutes <= 1 && ['m']) || + (minutes < thresholds.m && ['mm', minutes]) || + (hours <= 1 && ['h']) || + (hours < thresholds.h && ['hh', hours]) || + (days <= 1 && ['d']) || + (days < thresholds.d && ['dd', days]); + + if (thresholds.w != null) { + a = + a || + (weeks <= 1 && ['w']) || + (weeks < thresholds.w && ['ww', weeks]); + } + a = a || + (months <= 1 && ['M']) || + (months < thresholds.M && ['MM', months]) || + (years <= 1 && ['y']) || ['yy', years]; + + a[2] = withoutSuffix; + a[3] = +posNegDuration > 0; + a[4] = locale; + return substituteTimeAgo.apply(null, a); + } + + // This function allows you to set the rounding function for relative time strings + function getSetRelativeTimeRounding(roundingFunction) { + if (roundingFunction === undefined) { + return round; + } + if (typeof roundingFunction === 'function') { + round = roundingFunction; + return true; + } + return false; + } + + // This function allows you to set a threshold for relative time strings + function getSetRelativeTimeThreshold(threshold, limit) { + if (thresholds[threshold] === undefined) { + return false; + } + if (limit === undefined) { + return thresholds[threshold]; + } + thresholds[threshold] = limit; + if (threshold === 's') { + thresholds.ss = limit - 1; + } + return true; + } + + function humanize(argWithSuffix, argThresholds) { + if (!this.isValid()) { + return this.localeData().invalidDate(); + } + + var withSuffix = false, + th = thresholds, + locale, + output; + + if (typeof argWithSuffix === 'object') { + argThresholds = argWithSuffix; + argWithSuffix = false; + } + if (typeof argWithSuffix === 'boolean') { + withSuffix = argWithSuffix; + } + if (typeof argThresholds === 'object') { + th = Object.assign({}, thresholds, argThresholds); + if (argThresholds.s != null && argThresholds.ss == null) { + th.ss = argThresholds.s - 1; + } + } + + locale = this.localeData(); + output = relativeTime$1(this, !withSuffix, th, locale); + + if (withSuffix) { + output = locale.pastFuture(+this, output); + } + + return locale.postformat(output); + } + + var abs$1 = Math.abs; + + function sign(x) { + return (x > 0) - (x < 0) || +x; + } + + function toISOString$1() { + // for ISO strings we do not use the normal bubbling rules: + // * milliseconds bubble up until they become hours + // * days do not bubble at all + // * months bubble up until they become years + // This is because there is no context-free conversion between hours and days + // (think of clock changes) + // and also not between days and months (28-31 days per month) + if (!this.isValid()) { + return this.localeData().invalidDate(); + } + + var seconds = abs$1(this._milliseconds) / 1000, + days = abs$1(this._days), + months = abs$1(this._months), + minutes, + hours, + years, + s, + total = this.asSeconds(), + totalSign, + ymSign, + daysSign, + hmsSign; + + if (!total) { + // this is the same as C#'s (Noda) and python (isodate)... + // but not other JS (goog.date) + return 'P0D'; + } + + // 3600 seconds -> 60 minutes -> 1 hour + minutes = absFloor(seconds / 60); + hours = absFloor(minutes / 60); + seconds %= 60; + minutes %= 60; + + // 12 months -> 1 year + years = absFloor(months / 12); + months %= 12; + + // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js + s = seconds ? seconds.toFixed(3).replace(/\.?0+$/, '') : ''; + + totalSign = total < 0 ? '-' : ''; + ymSign = sign(this._months) !== sign(total) ? '-' : ''; + daysSign = sign(this._days) !== sign(total) ? '-' : ''; + hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : ''; + + return ( + totalSign + + 'P' + + (years ? ymSign + years + 'Y' : '') + + (months ? ymSign + months + 'M' : '') + + (days ? daysSign + days + 'D' : '') + + (hours || minutes || seconds ? 'T' : '') + + (hours ? hmsSign + hours + 'H' : '') + + (minutes ? hmsSign + minutes + 'M' : '') + + (seconds ? hmsSign + s + 'S' : '') + ); + } + + var proto$2 = Duration.prototype; + + proto$2.isValid = isValid$1; + proto$2.abs = abs; + proto$2.add = add$1; + proto$2.subtract = subtract$1; + proto$2.as = as; + proto$2.asMilliseconds = asMilliseconds; + proto$2.asSeconds = asSeconds; + proto$2.asMinutes = asMinutes; + proto$2.asHours = asHours; + proto$2.asDays = asDays; + proto$2.asWeeks = asWeeks; + proto$2.asMonths = asMonths; + proto$2.asQuarters = asQuarters; + proto$2.asYears = asYears; + proto$2.valueOf = valueOf$1; + proto$2._bubble = bubble; + proto$2.clone = clone$1; + proto$2.get = get$2; + proto$2.milliseconds = milliseconds; + proto$2.seconds = seconds; + proto$2.minutes = minutes; + proto$2.hours = hours; + proto$2.days = days; + proto$2.weeks = weeks; + proto$2.months = months; + proto$2.years = years; + proto$2.humanize = humanize; + proto$2.toISOString = toISOString$1; + proto$2.toString = toISOString$1; + proto$2.toJSON = toISOString$1; + proto$2.locale = locale; + proto$2.localeData = localeData; + + proto$2.toIsoString = deprecate( + 'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', + toISOString$1 + ); + proto$2.lang = lang; + + // FORMATTING + + addFormatToken('X', 0, 0, 'unix'); + addFormatToken('x', 0, 0, 'valueOf'); + + // PARSING + + addRegexToken('x', matchSigned); + addRegexToken('X', matchTimestamp); + addParseToken('X', function (input, array, config) { + config._d = new Date(parseFloat(input) * 1000); + }); + addParseToken('x', function (input, array, config) { + config._d = new Date(toInt(input)); + }); + + //! moment.js + + hooks.version = '2.29.1'; + + setHookCallback(createLocal); + + hooks.fn = proto; + hooks.min = min; + hooks.max = max; + hooks.now = now; + hooks.utc = createUTC; + hooks.unix = createUnix; + hooks.months = listMonths; + hooks.isDate = isDate; + hooks.locale = getSetGlobalLocale; + hooks.invalid = createInvalid; + hooks.duration = createDuration; + hooks.isMoment = isMoment; + hooks.weekdays = listWeekdays; + hooks.parseZone = createInZone; + hooks.localeData = getLocale; + hooks.isDuration = isDuration; + hooks.monthsShort = listMonthsShort; + hooks.weekdaysMin = listWeekdaysMin; + hooks.defineLocale = defineLocale; + hooks.updateLocale = updateLocale; + hooks.locales = listLocales; + hooks.weekdaysShort = listWeekdaysShort; + hooks.normalizeUnits = normalizeUnits; + hooks.relativeTimeRounding = getSetRelativeTimeRounding; + hooks.relativeTimeThreshold = getSetRelativeTimeThreshold; + hooks.calendarFormat = getCalendarFormat; + hooks.prototype = proto; + + // currently HTML5 input type only supports 24-hour formats + hooks.HTML5_FMT = { + DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // + DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // + DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // + DATE: 'YYYY-MM-DD', // + TIME: 'HH:mm', // + TIME_SECONDS: 'HH:mm:ss', // + TIME_MS: 'HH:mm:ss.SSS', // + WEEK: 'GGGG-[W]WW', // + MONTH: 'YYYY-MM', // + }; + + return hooks; + +}))); diff --git a/PatcherWebSite/mir2-patchsite/js/script.js b/PatcherWebSite/mir2-patchsite/js/script.js new file mode 100644 index 0000000..5f28270 --- /dev/null +++ b/PatcherWebSite/mir2-patchsite/js/script.js @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Server.MirForms/Account/AccountInfoForm.Designer.cs b/Server.MirForms/Account/AccountInfoForm.Designer.cs new file mode 100644 index 0000000..e61828b --- /dev/null +++ b/Server.MirForms/Account/AccountInfoForm.Designer.cs @@ -0,0 +1,670 @@ + +namespace Server +{ + partial class AccountInfoForm + { + /// + /// 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(AccountInfoForm)); + CreateButton = new Button(); + label1 = new Label(); + FilterTextBox = new TextBox(); + RefreshButton = new Button(); + AccountInfoPanel = new Panel(); + CharactersListView = new ListView(); + characterName = new ColumnHeader(); + characterClass = new ColumnHeader(); + characterLevel = new ColumnHeader(); + characterPKPoints = new ColumnHeader(); + characterGuild = new ColumnHeader(); + characterStatus = new ColumnHeader(); + LastIPSearch = new Button(); + CreationIPSearch = new Button(); + PasswordChangeCheckBox = new CheckBox(); + setPasswordButton = new Button(); + AdminCheckBox = new CheckBox(); + PermBanButton = new Button(); + WeekBanButton = new Button(); + DayBanButton = new Button(); + BannedCheckBox = new CheckBox(); + ExpiryDateTextBox = new TextBox(); + label14 = new Label(); + BanReasonTextBox = new TextBox(); + label13 = new Label(); + LastDateTextBox = new TextBox(); + label11 = new Label(); + LastIPTextBox = new TextBox(); + label12 = new Label(); + CreationDateTextBox = new TextBox(); + label9 = new Label(); + CreationIPTextBox = new TextBox(); + label10 = new Label(); + label3 = new Label(); + AccountIDTextBox = new TextBox(); + label2 = new Label(); + label15 = new Label(); + FilterPlayerTextBox = new TextBox(); + AccountInfoListView = new CustomFormControl.ListViewNF(); + indexHeader = new ColumnHeader(); + accountIDHeader = new ColumnHeader(); + userNameHeader = new ColumnHeader(); + adminHeader = new ColumnHeader(); + bannedHeader = new ColumnHeader(); + banReasonHeader = new ColumnHeader(); + expiryDateHeader = new ColumnHeader(); + Gold = new ColumnHeader(); + Credits = new ColumnHeader(); + MatchFilterCheckBox = new CheckBox(); + WipeCharButton = new Button(); + TotalServerGold = new Label(); + ServerGoldTextBox = new TextBox(); + ServerCreditTextBox = new TextBox(); + TotalServerCredit = new Label(); + AccountInfoPanel.SuspendLayout(); + SuspendLayout(); + // + // CreateButton + // + CreateButton.Location = new Point(14, 14); + CreateButton.Margin = new Padding(4, 3, 4, 3); + CreateButton.Name = "CreateButton"; + CreateButton.Size = new Size(88, 27); + CreateButton.TabIndex = 9; + CreateButton.Text = "Create"; + CreateButton.UseVisualStyleBackColor = true; + CreateButton.Click += CreateButton_Click; + // + // label1 + // + label1.AutoSize = true; + label1.Location = new Point(14, 48); + label1.Margin = new Padding(4, 0, 4, 0); + label1.Name = "label1"; + label1.Size = new Size(98, 15); + label1.TabIndex = 11; + label1.Text = "Filter Account ID:"; + // + // FilterTextBox + // + FilterTextBox.Location = new Point(125, 45); + FilterTextBox.Margin = new Padding(4, 3, 4, 3); + FilterTextBox.Name = "FilterTextBox"; + FilterTextBox.Size = new Size(116, 23); + FilterTextBox.TabIndex = 12; + // + // RefreshButton + // + RefreshButton.Location = new Point(455, 43); + RefreshButton.Margin = new Padding(4, 3, 4, 3); + RefreshButton.Name = "RefreshButton"; + RefreshButton.Size = new Size(88, 27); + RefreshButton.TabIndex = 13; + RefreshButton.Text = "Refresh"; + RefreshButton.UseVisualStyleBackColor = true; + RefreshButton.Click += RefreshButton_Click; + // + // AccountInfoPanel + // + AccountInfoPanel.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; + AccountInfoPanel.Controls.Add(CharactersListView); + AccountInfoPanel.Controls.Add(LastIPSearch); + AccountInfoPanel.Controls.Add(CreationIPSearch); + AccountInfoPanel.Controls.Add(PasswordChangeCheckBox); + AccountInfoPanel.Controls.Add(setPasswordButton); + AccountInfoPanel.Controls.Add(AdminCheckBox); + AccountInfoPanel.Controls.Add(PermBanButton); + AccountInfoPanel.Controls.Add(WeekBanButton); + AccountInfoPanel.Controls.Add(DayBanButton); + AccountInfoPanel.Controls.Add(BannedCheckBox); + AccountInfoPanel.Controls.Add(ExpiryDateTextBox); + AccountInfoPanel.Controls.Add(label14); + AccountInfoPanel.Controls.Add(BanReasonTextBox); + AccountInfoPanel.Controls.Add(label13); + AccountInfoPanel.Controls.Add(LastDateTextBox); + AccountInfoPanel.Controls.Add(label11); + AccountInfoPanel.Controls.Add(LastIPTextBox); + AccountInfoPanel.Controls.Add(label12); + AccountInfoPanel.Controls.Add(CreationDateTextBox); + AccountInfoPanel.Controls.Add(label9); + AccountInfoPanel.Controls.Add(CreationIPTextBox); + AccountInfoPanel.Controls.Add(label10); + AccountInfoPanel.Controls.Add(label3); + AccountInfoPanel.Controls.Add(AccountIDTextBox); + AccountInfoPanel.Controls.Add(label2); + AccountInfoPanel.Location = new Point(14, 277); + AccountInfoPanel.Margin = new Padding(4, 3, 4, 3); + AccountInfoPanel.Name = "AccountInfoPanel"; + AccountInfoPanel.Size = new Size(941, 241); + AccountInfoPanel.TabIndex = 14; + // + // CharactersListView + // + CharactersListView.Columns.AddRange(new ColumnHeader[] { characterName, characterClass, characterLevel, characterPKPoints, characterGuild, characterStatus }); + CharactersListView.GridLines = true; + CharactersListView.Location = new Point(0, 78); + CharactersListView.Name = "CharactersListView"; + CharactersListView.Scrollable = false; + CharactersListView.Size = new Size(598, 163); + CharactersListView.TabIndex = 37; + CharactersListView.UseCompatibleStateImageBehavior = false; + CharactersListView.View = View.Details; + // + // characterName + // + characterName.Text = "Name"; + characterName.Width = 80; + // + // characterClass + // + characterClass.Text = "Class"; + characterClass.Width = 80; + // + // characterLevel + // + characterLevel.Text = "Level"; + // + // characterPKPoints + // + characterPKPoints.Text = "PKPoints"; + characterPKPoints.Width = 59; + // + // characterGuild + // + characterGuild.Text = "Guild"; + characterGuild.Width = 120; + // + // characterStatus + // + characterStatus.Text = "Status"; + characterStatus.Width = 200; + // + // LastIPSearch + // + LastIPSearch.Location = new Point(825, 81); + LastIPSearch.Name = "LastIPSearch"; + LastIPSearch.Size = new Size(25, 23); + LastIPSearch.TabIndex = 36; + LastIPSearch.Text = "🔎"; + LastIPSearch.UseVisualStyleBackColor = true; + LastIPSearch.Click += LastIPSearch_Click; + // + // CreationIPSearch + // + CreationIPSearch.Location = new Point(825, 21); + CreationIPSearch.Name = "CreationIPSearch"; + CreationIPSearch.Size = new Size(25, 23); + CreationIPSearch.TabIndex = 35; + CreationIPSearch.Text = "🔎"; + CreationIPSearch.UseVisualStyleBackColor = true; + CreationIPSearch.Click += CreationIPSearch_Click; + // + // PasswordChangeCheckBox + // + PasswordChangeCheckBox.AutoSize = true; + PasswordChangeCheckBox.Location = new Point(216, 50); + PasswordChangeCheckBox.Margin = new Padding(4, 3, 4, 3); + PasswordChangeCheckBox.Name = "PasswordChangeCheckBox"; + PasswordChangeCheckBox.Size = new Size(110, 19); + PasswordChangeCheckBox.TabIndex = 34; + PasswordChangeCheckBox.Text = "Require Change"; + PasswordChangeCheckBox.UseVisualStyleBackColor = true; + PasswordChangeCheckBox.CheckedChanged += PasswordChangeCheckBox_CheckedChanged; + // + // setPasswordButton + // + setPasswordButton.Location = new Point(111, 47); + setPasswordButton.Margin = new Padding(4, 3, 4, 3); + setPasswordButton.Name = "setPasswordButton"; + setPasswordButton.Size = new Size(98, 27); + setPasswordButton.TabIndex = 33; + setPasswordButton.Text = "Set Password"; + setPasswordButton.UseVisualStyleBackColor = true; + setPasswordButton.Click += button1_Click; + // + // AdminCheckBox + // + AdminCheckBox.AutoSize = true; + AdminCheckBox.Location = new Point(241, 20); + AdminCheckBox.Margin = new Padding(4, 3, 4, 3); + AdminCheckBox.Name = "AdminCheckBox"; + AdminCheckBox.Size = new Size(99, 19); + AdminCheckBox.TabIndex = 32; + AdminCheckBox.Text = "Administrator"; + AdminCheckBox.UseVisualStyleBackColor = true; + AdminCheckBox.CheckedChanged += AdminCheckBox_CheckedChanged; + // + // PermBanButton + // + PermBanButton.Location = new Point(840, 209); + PermBanButton.Margin = new Padding(4, 3, 4, 3); + PermBanButton.Name = "PermBanButton"; + PermBanButton.Size = new Size(88, 27); + PermBanButton.TabIndex = 31; + PermBanButton.Text = "Perm Ban"; + PermBanButton.UseVisualStyleBackColor = true; + PermBanButton.Click += PermBanButton_Click; + // + // WeekBanButton + // + WeekBanButton.Location = new Point(744, 209); + WeekBanButton.Margin = new Padding(4, 3, 4, 3); + WeekBanButton.Name = "WeekBanButton"; + WeekBanButton.Size = new Size(88, 27); + WeekBanButton.TabIndex = 30; + WeekBanButton.Text = "Week Ban"; + WeekBanButton.UseVisualStyleBackColor = true; + WeekBanButton.Click += WeekBanButton_Click; + // + // DayBanButton + // + DayBanButton.Location = new Point(649, 209); + DayBanButton.Margin = new Padding(4, 3, 4, 3); + DayBanButton.Name = "DayBanButton"; + DayBanButton.Size = new Size(88, 27); + DayBanButton.TabIndex = 29; + DayBanButton.Text = "Day Ban"; + DayBanButton.UseVisualStyleBackColor = true; + DayBanButton.Click += DayBanButton_Click; + // + // BannedCheckBox + // + BannedCheckBox.AutoSize = true; + BannedCheckBox.Location = new Point(852, 181); + BannedCheckBox.Margin = new Padding(4, 3, 4, 3); + BannedCheckBox.Name = "BannedCheckBox"; + BannedCheckBox.Size = new Size(66, 19); + BannedCheckBox.TabIndex = 28; + BannedCheckBox.Text = "Banned"; + BannedCheckBox.UseVisualStyleBackColor = true; + BannedCheckBox.CheckedChanged += BannedCheckBox_CheckedChanged; + // + // ExpiryDateTextBox + // + ExpiryDateTextBox.Location = new Point(702, 179); + ExpiryDateTextBox.Margin = new Padding(4, 3, 4, 3); + ExpiryDateTextBox.Name = "ExpiryDateTextBox"; + ExpiryDateTextBox.Size = new Size(139, 23); + ExpiryDateTextBox.TabIndex = 27; + ExpiryDateTextBox.TextChanged += ExpiryDateTextBox_TextChanged; + // + // label14 + // + label14.AutoSize = true; + label14.Location = new Point(620, 182); + label14.Margin = new Padding(4, 0, 4, 0); + label14.Name = "label14"; + label14.Size = new Size(69, 15); + label14.TabIndex = 26; + label14.Text = "Expiry Date:"; + // + // BanReasonTextBox + // + BanReasonTextBox.Location = new Point(702, 149); + BanReasonTextBox.Margin = new Padding(4, 3, 4, 3); + BanReasonTextBox.Name = "BanReasonTextBox"; + BanReasonTextBox.Size = new Size(223, 23); + BanReasonTextBox.TabIndex = 25; + BanReasonTextBox.TextChanged += BanReasonTextBox_TextChanged; + // + // label13 + // + label13.AutoSize = true; + label13.Location = new Point(614, 152); + label13.Margin = new Padding(4, 0, 4, 0); + label13.Name = "label13"; + label13.Size = new Size(71, 15); + label13.TabIndex = 24; + label13.Text = "Ban Reason:"; + // + // LastDateTextBox + // + LastDateTextBox.Location = new Point(702, 111); + LastDateTextBox.Margin = new Padding(4, 3, 4, 3); + LastDateTextBox.Name = "LastDateTextBox"; + LastDateTextBox.ReadOnly = true; + LastDateTextBox.Size = new Size(139, 23); + LastDateTextBox.TabIndex = 23; + // + // label11 + // + label11.AutoSize = true; + label11.Location = new Point(629, 114); + label11.Margin = new Padding(4, 0, 4, 0); + label11.Name = "label11"; + label11.Size = new Size(58, 15); + label11.TabIndex = 22; + label11.Text = "Last Date:"; + // + // LastIPTextBox + // + LastIPTextBox.Location = new Point(702, 81); + LastIPTextBox.Margin = new Padding(4, 3, 4, 3); + LastIPTextBox.Name = "LastIPTextBox"; + LastIPTextBox.ReadOnly = true; + LastIPTextBox.Size = new Size(116, 23); + LastIPTextBox.TabIndex = 21; + // + // label12 + // + label12.AutoSize = true; + label12.Location = new Point(644, 84); + label12.Margin = new Padding(4, 0, 4, 0); + label12.Name = "label12"; + label12.Size = new Size(44, 15); + label12.TabIndex = 20; + label12.Text = "Last IP:"; + // + // CreationDateTextBox + // + CreationDateTextBox.Location = new Point(702, 51); + CreationDateTextBox.Margin = new Padding(4, 3, 4, 3); + CreationDateTextBox.Name = "CreationDateTextBox"; + CreationDateTextBox.ReadOnly = true; + CreationDateTextBox.Size = new Size(139, 23); + CreationDateTextBox.TabIndex = 19; + // + // label9 + // + label9.AutoSize = true; + label9.Location = new Point(607, 54); + label9.Margin = new Padding(4, 0, 4, 0); + label9.Name = "label9"; + label9.Size = new Size(82, 15); + label9.TabIndex = 18; + label9.Text = "Creation Date:"; + // + // CreationIPTextBox + // + CreationIPTextBox.Location = new Point(702, 21); + CreationIPTextBox.Margin = new Padding(4, 3, 4, 3); + CreationIPTextBox.Name = "CreationIPTextBox"; + CreationIPTextBox.ReadOnly = true; + CreationIPTextBox.Size = new Size(116, 23); + CreationIPTextBox.TabIndex = 17; + // + // label10 + // + label10.AutoSize = true; + label10.Location = new Point(622, 24); + label10.Margin = new Padding(4, 0, 4, 0); + label10.Name = "label10"; + label10.Size = new Size(68, 15); + label10.TabIndex = 16; + label10.Text = "Creation IP:"; + // + // label3 + // + label3.AutoSize = true; + label3.Location = new Point(38, 50); + label3.Margin = new Padding(4, 0, 4, 0); + label3.Name = "label3"; + label3.Size = new Size(60, 15); + label3.TabIndex = 4; + label3.Text = "Password:"; + // + // AccountIDTextBox + // + AccountIDTextBox.Location = new Point(111, 16); + AccountIDTextBox.Margin = new Padding(4, 3, 4, 3); + AccountIDTextBox.Name = "AccountIDTextBox"; + AccountIDTextBox.Size = new Size(116, 23); + AccountIDTextBox.TabIndex = 3; + AccountIDTextBox.TextChanged += AccountIDTextBox_TextChanged; + // + // label2 + // + label2.AutoSize = true; + label2.Location = new Point(29, 20); + label2.Margin = new Padding(4, 0, 4, 0); + label2.Name = "label2"; + label2.Size = new Size(69, 15); + label2.TabIndex = 2; + label2.Text = "Account ID:"; + // + // label15 + // + label15.AutoSize = true; + label15.Location = new Point(250, 48); + label15.Margin = new Padding(4, 0, 4, 0); + label15.Name = "label15"; + label15.Size = new Size(71, 15); + label15.TabIndex = 15; + label15.Text = "Filter Player:"; + // + // FilterPlayerTextBox + // + FilterPlayerTextBox.Location = new Point(331, 45); + FilterPlayerTextBox.Margin = new Padding(4, 3, 4, 3); + FilterPlayerTextBox.Name = "FilterPlayerTextBox"; + FilterPlayerTextBox.Size = new Size(116, 23); + FilterPlayerTextBox.TabIndex = 16; + // + // AccountInfoListView + // + AccountInfoListView.AllowColumnReorder = true; + AccountInfoListView.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; + AccountInfoListView.Columns.AddRange(new ColumnHeader[] { indexHeader, accountIDHeader, userNameHeader, adminHeader, bannedHeader, banReasonHeader, expiryDateHeader, Gold, Credits }); + AccountInfoListView.FullRowSelect = true; + AccountInfoListView.GridLines = true; + AccountInfoListView.Location = new Point(12, 75); + AccountInfoListView.Margin = new Padding(4, 3, 4, 3); + AccountInfoListView.Name = "AccountInfoListView"; + AccountInfoListView.Size = new Size(942, 194); + AccountInfoListView.Sorting = SortOrder.Ascending; + AccountInfoListView.TabIndex = 8; + AccountInfoListView.UseCompatibleStateImageBehavior = false; + AccountInfoListView.View = View.Details; + AccountInfoListView.SelectedIndexChanged += AccountInfoListView_SelectedIndexChanged; + // + // indexHeader + // + indexHeader.Text = "Index"; + // + // accountIDHeader + // + accountIDHeader.Text = "Account ID"; + accountIDHeader.Width = 92; + // + // userNameHeader + // + userNameHeader.Text = "User Name"; + userNameHeader.Width = 75; + // + // adminHeader + // + adminHeader.Text = "Administrator"; + adminHeader.Width = 73; + // + // bannedHeader + // + bannedHeader.Text = "Banned"; + bannedHeader.Width = 54; + // + // banReasonHeader + // + banReasonHeader.Text = "Ban Reason"; + banReasonHeader.Width = 74; + // + // expiryDateHeader + // + expiryDateHeader.Text = "Expiry Date"; + expiryDateHeader.Width = 81; + // + // Gold + // + Gold.Text = "Gold"; + Gold.Width = 90; + // + // Credits + // + Credits.Text = "GameGold"; + Credits.Width = 70; + // + // MatchFilterCheckBox + // + MatchFilterCheckBox.AutoSize = true; + MatchFilterCheckBox.Location = new Point(551, 48); + MatchFilterCheckBox.Margin = new Padding(4, 3, 4, 3); + MatchFilterCheckBox.Name = "MatchFilterCheckBox"; + MatchFilterCheckBox.Size = new Size(89, 19); + MatchFilterCheckBox.TabIndex = 17; + MatchFilterCheckBox.Text = "Match Filter"; + MatchFilterCheckBox.UseVisualStyleBackColor = true; + // + // WipeCharButton + // + WipeCharButton.Location = new Point(108, 14); + WipeCharButton.Margin = new Padding(4, 3, 4, 3); + WipeCharButton.Name = "WipeCharButton"; + WipeCharButton.Size = new Size(134, 27); + WipeCharButton.TabIndex = 18; + WipeCharButton.Text = "Wipe All Characters"; + WipeCharButton.UseVisualStyleBackColor = true; + WipeCharButton.Click += WipeCharButton_Click; + // + // TotalServerGold + // + TotalServerGold.AutoSize = true; + TotalServerGold.Location = new Point(249, 20); + TotalServerGold.Name = "TotalServerGold"; + TotalServerGold.Size = new Size(98, 15); + TotalServerGold.TabIndex = 19; + TotalServerGold.Text = "Total Server Gold:"; + // + // ServerGoldTextBox + // + ServerGoldTextBox.Location = new Point(353, 17); + ServerGoldTextBox.Name = "ServerGoldTextBox"; + ServerGoldTextBox.ReadOnly = true; + ServerGoldTextBox.Size = new Size(153, 23); + ServerGoldTextBox.TabIndex = 20; + // + // ServerCreditTextBox + // + ServerCreditTextBox.Location = new Point(621, 18); + ServerCreditTextBox.Name = "ServerCreditTextBox"; + ServerCreditTextBox.ReadOnly = true; + ServerCreditTextBox.Size = new Size(153, 23); + ServerCreditTextBox.TabIndex = 22; + // + // TotalServerCredit + // + TotalServerCredit.AutoSize = true; + TotalServerCredit.Location = new Point(517, 21); + TotalServerCredit.Name = "TotalServerCredit"; + TotalServerCredit.Size = new Size(105, 15); + TotalServerCredit.TabIndex = 21; + TotalServerCredit.Text = "Total Server Credit:"; + // + // AccountInfoForm + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(969, 532); + Controls.Add(ServerCreditTextBox); + Controls.Add(TotalServerCredit); + Controls.Add(ServerGoldTextBox); + Controls.Add(TotalServerGold); + Controls.Add(WipeCharButton); + Controls.Add(MatchFilterCheckBox); + Controls.Add(FilterPlayerTextBox); + Controls.Add(label15); + Controls.Add(AccountInfoPanel); + Controls.Add(RefreshButton); + Controls.Add(FilterTextBox); + Controls.Add(label1); + Controls.Add(CreateButton); + Controls.Add(AccountInfoListView); + Icon = (Icon)resources.GetObject("$this.Icon"); + Margin = new Padding(4, 3, 4, 3); + Name = "AccountInfoForm"; + Text = "AccountInfoForm"; + FormClosed += AccountInfoForm_FormClosed; + AccountInfoPanel.ResumeLayout(false); + AccountInfoPanel.PerformLayout(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private System.Windows.Forms.Button CreateButton; + private CustomFormControl.ListViewNF AccountInfoListView; + private System.Windows.Forms.ColumnHeader indexHeader; + private System.Windows.Forms.ColumnHeader accountIDHeader; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox FilterTextBox; + private System.Windows.Forms.ColumnHeader userNameHeader; + private System.Windows.Forms.ColumnHeader bannedHeader; + private System.Windows.Forms.ColumnHeader banReasonHeader; + private System.Windows.Forms.ColumnHeader expiryDateHeader; + private System.Windows.Forms.Button RefreshButton; + private System.Windows.Forms.Panel AccountInfoPanel; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TextBox AccountIDTextBox; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox LastDateTextBox; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.TextBox LastIPTextBox; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.TextBox CreationDateTextBox; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.TextBox CreationIPTextBox; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.TextBox ExpiryDateTextBox; + private System.Windows.Forms.Label label14; + private System.Windows.Forms.TextBox BanReasonTextBox; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.CheckBox BannedCheckBox; + private System.Windows.Forms.Button PermBanButton; + private System.Windows.Forms.Button WeekBanButton; + private System.Windows.Forms.Button DayBanButton; + private System.Windows.Forms.CheckBox AdminCheckBox; + private System.Windows.Forms.ColumnHeader adminHeader; + private System.Windows.Forms.Label label15; + private System.Windows.Forms.TextBox FilterPlayerTextBox; + private System.Windows.Forms.CheckBox MatchFilterCheckBox; + private System.Windows.Forms.Button WipeCharButton; + private System.Windows.Forms.Button setPasswordButton; + private System.Windows.Forms.CheckBox PasswordChangeCheckBox; + private Button LastIPSearch; + private Button CreationIPSearch; + private ListView CharactersListView; + private ColumnHeader characterName; + private ColumnHeader characterClass; + private ColumnHeader characterLevel; + private ColumnHeader Gold; + private ColumnHeader Credits; + private ColumnHeader characterPKPoints; + private ColumnHeader characterGuild; + private ColumnHeader characterStatus; + private Label TotalServerGold; + private TextBox ServerGoldTextBox; + private TextBox ServerCreditTextBox; + private Label TotalServerCredit; + } +} \ No newline at end of file diff --git a/Server.MirForms/Account/AccountInfoForm.cs b/Server.MirForms/Account/AccountInfoForm.cs new file mode 100644 index 0000000..dd8258c --- /dev/null +++ b/Server.MirForms/Account/AccountInfoForm.cs @@ -0,0 +1,539 @@ +using Server.MirDatabase; +using Server.MirEnvir; +using Server.MirObjects; +using System.Globalization; + +namespace Server +{ + public partial class AccountInfoForm : Form + { + private List _selectedAccountInfos; + + public Envir AccountEnvir => SMain.Envir; + + public AccountInfoForm() + { + InitializeComponent(); + + Setup(); + } + + public AccountInfoForm(string accountId, bool match = false) + { + InitializeComponent(); + + FilterTextBox.Text = accountId; + MatchFilterCheckBox.Checked = match; + + Setup(); + } + + private void Setup() + { + RefreshInterface(); + AutoResize(); + + AccountIDTextBox.MaxLength = Globals.MaxAccountIDLength; + } + + private void AutoResize() + { + indexHeader.Width = -2; + accountIDHeader.Width = -2; + userNameHeader.Width = -2; + bannedHeader.Width = -2; + banReasonHeader.Width = -2; + expiryDateHeader.Width = -2; + Gold.Width = -2; + Credits.Width = -2; + } + + #region Update Account List View + private void Update(ListViewItem ListItem, AccountInfo account) + { + ListItem.SubItems[0].Text = account.Index.ToString(); + ListItem.SubItems[1].Text = account.AccountID; + ListItem.SubItems[2].Text = string.Empty; + ListItem.SubItems[3].Text = account.AdminAccount.ToString(); + ListItem.SubItems[4].Text = account.Banned.ToString(); + ListItem.SubItems[5].Text = account.BanReason; + ListItem.SubItems[6].Text = account.ExpiryDate.ToString(); + ListItem.SubItems[7].Text = account.Gold.ToString(); + ListItem.SubItems[8].Text = account.Credit.ToString(); + } + + #endregion + + #region Account List View + private ListViewItem CreateListView(AccountInfo account) + { + ListViewItem ListItem = new ListViewItem(account.Index.ToString()) { Tag = account }; + + ListItem.SubItems.Add(account.AccountID); + ListItem.SubItems.Add(string.Empty); + ListItem.SubItems.Add(account.AdminAccount.ToString()); + ListItem.SubItems.Add(account.Banned.ToString()); + ListItem.SubItems.Add(account.BanReason); + ListItem.SubItems.Add(account.ExpiryDate.ToString()); + ListItem.SubItems.Add(account.Gold.ToString()); + ListItem.SubItems.Add(account.Credit.ToString()); + + return ListItem; + } + + #endregion + + public void RefreshInterface() + { + if (InvokeRequired) + { + Invoke(new MethodInvoker(RefreshInterface)); + return; + } + + List accounts = SMain.Envir.AccountList; + + #region Credit/Gold Label + long totalGold = accounts + .Where(account => !account.AdminAccount && !account.Banned) + .Sum(account => account.Gold); + + ServerGoldTextBox.Text = totalGold.ToString("N0", CultureInfo.GetCultureInfo("en-GB")); + + + long totalCredit = accounts + .Where(account => !account.AdminAccount && !account.Banned) + .Sum(account => account.Credit); + + ServerCreditTextBox.Text = totalCredit.ToString("N0", CultureInfo.GetCultureInfo("en-GB")); + #endregion + + if (FilterTextBox.Text.Length > 0) + accounts = SMain.Envir.MatchAccounts(FilterTextBox.Text, MatchFilterCheckBox.Checked); + + else if (FilterPlayerTextBox.Text.Length > 0) + accounts = SMain.Envir.MatchAccountsByPlayer(FilterPlayerTextBox.Text, MatchFilterCheckBox.Checked); + + if (AccountInfoListView.Items.Count != accounts.Count) + { + AccountInfoListView.SelectedIndexChanged -= AccountInfoListView_SelectedIndexChanged; + AccountInfoListView.Items.Clear(); + for (int i = AccountInfoListView.Items.Count; i < accounts.Count; i++) + { + AccountInfo account = accounts[i]; + + ListViewItem tempItem = CreateListView(account); + + AccountInfoListView.Items.Add(tempItem); + } + AccountInfoListView.SelectedIndexChanged += AccountInfoListView_SelectedIndexChanged; + } + + _selectedAccountInfos = new List(); + CharactersListView.Items.Clear(); + + + for (int i = 0; i < AccountInfoListView.SelectedItems.Count; i++) + _selectedAccountInfos.Add(AccountInfoListView.SelectedItems[i].Tag as AccountInfo); + + + + if (_selectedAccountInfos.Count == 0) + { + AccountInfoPanel.Enabled = false; + + AccountIDTextBox.Text = string.Empty; + return; + } + + + AccountInfo info = _selectedAccountInfos[0]; + + AccountInfoPanel.Enabled = true; + + AccountIDTextBox.Enabled = _selectedAccountInfos.Count == 1; + AccountIDTextBox.Text = info.AccountID; + + CreationIPTextBox.Text = info.CreationIP; + CreationDateTextBox.Text = info.CreationDate.ToString(); + + LastIPTextBox.Text = info.LastIP; + LastDateTextBox.Text = info.LastDate.ToString(); + + BanReasonTextBox.Text = info.BanReason; + BannedCheckBox.CheckState = info.Banned ? CheckState.Checked : CheckState.Unchecked; + ExpiryDateTextBox.Text = info.ExpiryDate.ToString(); + AdminCheckBox.CheckState = info.AdminAccount ? CheckState.Checked : CheckState.Unchecked; + PasswordChangeCheckBox.CheckState = info.RequirePasswordChange ? CheckState.Checked : CheckState.Unchecked; + + + + for (int i = 0; i < _selectedAccountInfos.Count; i++) + { + info = _selectedAccountInfos[i]; + + if (AccountIDTextBox.Text != info.AccountID) AccountIDTextBox.Text = string.Empty; + + if (CreationIPTextBox.Text != info.CreationIP) CreationIPTextBox.Text = string.Empty; + if (CreationDateTextBox.Text != info.CreationDate.ToString()) CreationDateTextBox.Text = string.Empty; + + + if (LastIPTextBox.Text != info.LastIP) LastIPTextBox.Text = string.Empty; + if (LastDateTextBox.Text != info.LastDate.ToString()) LastDateTextBox.Text = string.Empty; + + + if (BanReasonTextBox.Text != info.BanReason) BanReasonTextBox.Text = string.Empty; + if (BannedCheckBox.Checked != info.Banned) BannedCheckBox.CheckState = CheckState.Indeterminate; + if (ExpiryDateTextBox.Text != info.ExpiryDate.ToString()) ExpiryDateTextBox.Text = string.Empty; + if (AdminCheckBox.Checked != info.AdminAccount) AdminCheckBox.CheckState = CheckState.Indeterminate; + if (PasswordChangeCheckBox.Checked != info.RequirePasswordChange) PasswordChangeCheckBox.CheckState = CheckState.Indeterminate; + + foreach (var character in info.Characters) + { + var listItem = new ListViewItem(character.Name) { Tag = character }; + listItem.SubItems.Add(character.Class.ToString()); + listItem.SubItems.Add(character.Level.ToString()); + listItem.SubItems.Add(character.PKPoints.ToString()); + + #region Guild Info + + GuildObject guild = null; + if (character.GuildIndex != -1) + { + guild = AccountEnvir.GetGuild(character.GuildIndex); + if (guild != null) + { + listItem.SubItems.Add(guild.Name.ToString()); + } + } + else + { + listItem.SubItems.Add("No Guild"); + } + + string status = $""; + + if (character.LastLoginDate > character.LastLogoutDate) + { + status = $"Online: {(SMain.Envir.Now - character.LastLoginDate).TotalMinutes.ToString("##")} minutes"; + listItem.ForeColor = Color.Green; + } + else + { + status = $"Offline: {character.LastLogoutDate}"; + } + + if (character.Deleted) + { + status = $"Deleted: {character.DeleteDate}"; + listItem.ForeColor = Color.Red; + } + + listItem.SubItems.Add(status.ToString()); + + CharactersListView.Items.Add(listItem); + } + } + } + + #endregion + + private void AccountInfoListView_SelectedIndexChanged(object sender, EventArgs e) + { + RefreshInterface(); + Update(AccountInfoListView.SelectedItems[0], _selectedAccountInfos[0]); + } + + #region Create Account Button + private void CreateButton_Click(object sender, EventArgs e) + { + lock (Envir.AccountLock) + { + SMain.Envir.CreateAccountInfo(); + RefreshInterface(); + } + } + + #endregion + + #region Account ID Change + private void AccountIDTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (_selectedAccountInfos.Count != 1) return; + + lock (Envir.AccountLock) + { + if (SMain.Envir.AccountExists(ActiveControl.Text)) + { + ActiveControl.BackColor = Color.Red; + return; + } + AccountInfoListView.BeginUpdate(); + + ActiveControl.BackColor = SystemColors.Window; + _selectedAccountInfos[0].AccountID = ActiveControl.Text; + Update(AccountInfoListView.SelectedItems[0], _selectedAccountInfos[0]); + + AutoResize(); + AccountInfoListView.EndUpdate(); + } + } + + #endregion + + #region Bans + private void DayBanButton_Click(object sender, EventArgs e) + { + if (MessageBox.Show("Are you sure you want to ban the selected Accounts?", "Ban Selected.", MessageBoxButtons.YesNoCancel) != DialogResult.Yes) return; + + DateTime expiry = SMain.Envir.Now.AddDays(1); + + AccountInfoListView.BeginUpdate(); + for (int i = 0; i < _selectedAccountInfos.Count; i++) + { + _selectedAccountInfos[i].Banned = true; + _selectedAccountInfos[i].ExpiryDate = expiry; + Update(AccountInfoListView.SelectedItems[i], _selectedAccountInfos[i]); + } + + RefreshInterface(); + AutoResize(); + AccountInfoListView.EndUpdate(); + } + + private void WeekBanButton_Click(object sender, EventArgs e) + { + if (MessageBox.Show("Are you sure you want to ban the selected Accounts?", "Ban Selected.", MessageBoxButtons.YesNoCancel) != DialogResult.Yes) return; + + DateTime expiry = SMain.Envir.Now.AddDays(7); + + AccountInfoListView.BeginUpdate(); + for (int i = 0; i < _selectedAccountInfos.Count; i++) + { + _selectedAccountInfos[i].Banned = true; + _selectedAccountInfos[i].ExpiryDate = expiry; + Update(AccountInfoListView.SelectedItems[i], _selectedAccountInfos[i]); + } + + RefreshInterface(); + AutoResize(); + AccountInfoListView.EndUpdate(); + } + + private void PermBanButton_Click(object sender, EventArgs e) + { + if (MessageBox.Show("Are you sure you want to ban the selected Accounts?", "Ban Selected.", MessageBoxButtons.YesNoCancel) != DialogResult.Yes) return; + + + AccountInfoListView.BeginUpdate(); + for (int i = 0; i < _selectedAccountInfos.Count; i++) + { + _selectedAccountInfos[i].Banned = true; + _selectedAccountInfos[i].ExpiryDate = DateTime.MaxValue; + Update(AccountInfoListView.SelectedItems[i], _selectedAccountInfos[i]); + } + + RefreshInterface(); + AutoResize(); + AccountInfoListView.EndUpdate(); + } + + private void BannedCheckBox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + AccountInfoListView.BeginUpdate(); + for (int i = 0; i < _selectedAccountInfos.Count; i++) + { + _selectedAccountInfos[i].Banned = false; + Update(AccountInfoListView.SelectedItems[i], _selectedAccountInfos[i]); + } + AutoResize(); + AccountInfoListView.EndUpdate(); + } + + private void BanReasonTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + AccountInfoListView.BeginUpdate(); + for (int i = 0; i < _selectedAccountInfos.Count; i++) + { + _selectedAccountInfos[i].BanReason = ActiveControl.Text; + Update(AccountInfoListView.SelectedItems[i], _selectedAccountInfos[i]); + } + + AutoResize(); + AccountInfoListView.EndUpdate(); + } + + private void ExpiryDateTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + DateTime temp; + + if (!DateTime.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + AccountInfoListView.BeginUpdate(); + for (int i = 0; i < _selectedAccountInfos.Count; i++) + { + _selectedAccountInfos[i].ExpiryDate = temp; + Update(AccountInfoListView.SelectedItems[i], _selectedAccountInfos[i]); + } + + AutoResize(); + AccountInfoListView.EndUpdate(); + } + + #endregion + + #region Refresh Accounts + private void RefreshButton_Click(object sender, EventArgs e) + { + RefreshInterface(); + } + + #endregion + + private void AccountInfoForm_FormClosed(object sender, FormClosedEventArgs e) + { + if (SMain.Envir.Running) return; + + SMain.Envir.SaveAccounts(); + } + + #region Admin Checkbox + private void AdminCheckBox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + AccountInfoListView.BeginUpdate(); + for (int i = 0; i < _selectedAccountInfos.Count; i++) + { + _selectedAccountInfos[i].AdminAccount = AdminCheckBox.CheckState == CheckState.Checked ? true : false; + Update(AccountInfoListView.SelectedItems[i], _selectedAccountInfos[i]); + } + AutoResize(); + AccountInfoListView.EndUpdate(); + } + + #endregion + + #region Wipe Char Button + private void WipeCharButton_Click(object sender, EventArgs e) + { + if (SMain.Envir.Running) + { + MessageBox.Show("Cannot wipe characters whilst the server is running", "Notice", + MessageBoxButtons.OK, MessageBoxIcon.Asterisk); + return; + } + + if (MessageBox.Show("Are you sure you want to wipe all characters from the database?", "Notice", + MessageBoxButtons.YesNo, MessageBoxIcon.Asterisk) == DialogResult.Yes) + { + for (int i = 0; i < SMain.Envir.AccountList.Count; i++) + { + AccountInfo account = SMain.Envir.AccountList[i]; + + account.Characters.Clear(); + } + + SMain.Envir.Auctions.Clear(); + SMain.Envir.GuildList.Clear(); + + MessageBox.Show("All characters and associated data has been cleared", "Notice", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); + + } + } + + #endregion + + #region Password Change + private void button1_Click(object sender, EventArgs e) + { + ChangePasswordDialog PasswordDialog = new ChangePasswordDialog(); + + if (PasswordDialog.ShowDialog(this) == DialogResult.OK && PasswordDialog.PasswordTextBox.Text.Length > 0) + { + AccountInfoListView.BeginUpdate(); + for (int i = 0; i < _selectedAccountInfos.Count; i++) + { + _selectedAccountInfos[i].Password = PasswordDialog.PasswordTextBox.Text; + _selectedAccountInfos[i].RequirePasswordChange = true; + PasswordChangeCheckBox.CheckState = CheckState.Checked; + Update(AccountInfoListView.SelectedItems[i], _selectedAccountInfos[i]); + MessageBox.Show("Password Changed"); + } + + AutoResize(); + AccountInfoListView.EndUpdate(); + } + } + + private void PasswordChangeCheckBox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + AccountInfoListView.BeginUpdate(); + for (int i = 0; i < _selectedAccountInfos.Count; i++) + { + _selectedAccountInfos[i].RequirePasswordChange = PasswordChangeCheckBox.CheckState == CheckState.Checked; + Update(AccountInfoListView.SelectedItems[i], _selectedAccountInfos[i]); + } + AutoResize(); + AccountInfoListView.EndUpdate(); + } + + #endregion + + #region IPSearch + private void CreationIPSearch_Click(object sender, EventArgs e) + { + string ipAddress = CreationIPTextBox.Text; + + string url = $"https://whatismyipaddress.com/ip/{ipAddress}"; + + try + { + System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(url) + { + UseShellExecute = true + }); + + } + catch (Exception ex) + { + MessageBox.Show($"Error opening URL: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void LastIPSearch_Click(object sender, EventArgs e) + { + string ipAddress = LastIPTextBox.Text; + + string url = $"https://whatismyipaddress.com/ip/{ipAddress}"; + + try + { + System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(url) + { + UseShellExecute = true + }); + + } + catch (Exception ex) + { + MessageBox.Show($"Error opening URL: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + #endregion + } +} diff --git a/Server.MirForms/Account/AccountInfoForm.resx b/Server.MirForms/Account/AccountInfoForm.resx new file mode 100644 index 0000000..1b01221 --- /dev/null +++ b/Server.MirForms/Account/AccountInfoForm.resx @@ -0,0 +1,1763 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAgAICAQAAAABADoAgAAhgAAACAgAAAAABgAqAwAAG4DAAAgIAAAAAAIAKgIAAAWEAAAQEAAAAAA + GAAoMgAAvhgAAEBAEAAAAAQAaAoAAOZKAABAQAAAAAAIACgWAABOVQAAgIAAAAAAGAAoyAAAdmsAAICA + AAAAAAgAKEwAAJ4zAQAoAAAAIAAAAEAAAAABAAQAAAAAAAACAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAA + gAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////ABER + ERAAAAAAAAAAAAAAAAARERERAAAAAAAAAAAAAAAAERERERAAAAAAAAAAAAAAABERERERAAAAAQAAAAAA + AAARERAAAQAAAAEAAAAAAAAAEREREQAAAAABAAAAAAAAABERERERAAAAABAAAAAAAAAREREREQAAAAAQ + AAAQAAAAEREREREAAAAAAAABEAAAAAERERERAAAAAAAxERAAAAAQERERERAAAAABEQAAAAAAAAAREREQ + AAAAAQARERARAAAAEREREAAAAAEBEAERERAAAAAAAAAAAAAQEQARMzERAAAAEREAAAABEBADMzMzEQAA + AAEQAAAAAAEAADMxMxEAAAAAAAAAAAEQEQAzMxEQAAABAAEAAAEREAAAMBMQEAAAAAARAAABEREQADEQ + EQAAAAABEBEBEREQATAREREAAAAQAQAQARERAQABEQERAAAAAAAAEBETEQMRERAREQAAAAAAARARExEQ + AREAAREQAAAAAAEBERMxMQEBAAABEQABAAAAAQERERMREQAAAAEAABAAABABERExERAAAAAAAAAAAAAA + EREREREAAAAAAAAAABAQEQAAAREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABAAAAAAAAAAAA + AAAAEAARAAAAAAAAAAAAAAAAAAABEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABABgAAAAAAAAM + AAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA + AACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAAAA + AAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA + AACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACA + AACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAACAAACAAACAAACAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAA + AACAAACAAACAAACAAACAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAAAAAAAAAACAAACAAACAAACAAACA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACAAAAAAACAAACAAAAAAAAAAACAAACAAICAAICAAICAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAA + AACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAACAAAAAAAAAAICAAICAAICA + AICAAICAAICAAICAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAICAAICAAICAAACAAICAAICAAACAAACAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAACAAACA + AAAAAAAAAICAAICAAICAAICAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAACA + AAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAICAAAAAAACAAICAAACAAAAA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAACAAACAAACA + AACAAACAAACAAAAAAAAAAAAAAICAAACAAACAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAACAAACAAAAAAACAAACAAAAAAACAAACAAACAAACAAACAAACAAAAAAAAAAACAAICAAAAAAACAAACA + AACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAACA + AACAAACAAACAAACAAAAAAACAAAAAAAAAAAAAAACAAACAAACAAAAAAACAAACAAACAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAICAAACAAACAAAAAAICAAACAAACA + AACAAACAAACAAAAAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + AACAAAAAAACAAACAAACAAICAAACAAACAAACAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAACAAACAAACA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAACAAICAAICAAACA + AICAAACAAAAAAACAAAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAACAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAACAAACAAACAAICAAACAAACAAACAAACAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACA + AACAAACAAACAAACAAICAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAAAA + AACAAACAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAA + AACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAACAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE + AAAAAAAAAAAAAAABAAAAAQAAAAD/AAD/AAD/AAAAAP//AP//AAD/AP8AwMDAAP/48ADX6/oA1P9/AP8A + AADiK4oAKiqlAAAAAAAEBAQACAgIAAwMDAAREREAFhYWABwcHAAiIiIAKSkpADMzMwA5OTkAQkJCAE1N + TQBVVVUAYGBgAGZmZgBwcHAAgICAAIyMjACUlJQAmZmZAKSkpACsrKwAtra2AMDAwADMzMwA1NTUANra + 2gDg4OAA7OzsAPj4+AD7+/sA////ADMAAABmAAAAmQAAAMwAAAD/AAAAADMAADMzAABmMwAAmTMAAMwz + AAD/MwAAAGYAADNmAABmZgAAmWYAAMxmAAD/ZgAAAJkAADOZAABmmQAAmZkAAMyZAAD/mQAAAMwAADPM + AABmzAAAmcwAAMzMAAD/zAAAAP8AADP/AABm/wAAmf8AAMz/AAD//wAAAAAzADMAMwBmADMAmQAzAMwA + MwD/ADMAADMzAGYzMwCZMzMAzDMzAP8zMwAAZjMAM2YzAGZmMwCZZjMAzGYzAP9mMwAAmTMAM5kzAGaZ + MwCZmTMAzJkzAP+ZMwAAzDMAM8wzAGbMMwCZzDMAzMwzAP/MMwAA/zMAM/8zAGb/MwCZ/zMAzP8zAP// + MwAAAGYAMwBmAGYAZgCZAGYAzABmAP8AZgAAM2YAMzNmAGYzZgCZM2YAzDNmAP8zZgAAZmYAM2ZmAJlm + ZgDMZmYA/2ZmAACZZgAzmWYAZplmAJmZZgDMmWYA/5lmAADMZgAzzGYAZsxmAJnMZgDMzGYA/8xmAAD/ + ZgAz/2YAZv9mAJn/ZgDM/2YA//9mAAAAmQAzAJkAZgCZAJkAmQDMAJkA/wCZAAAzmQAzM5kAZjOZAJkz + mQDMM5kA/zOZAABmmQAzZpkAZmaZAJlmmQDMZpkA/2aZAACZmQAzmZkAZpmZAMyZmQD/mZkAAcyZADPM + mQBmzJkAmcyZAMzMmQD/zJkAAP+ZADP/mQBm/5kAmf+ZAMz/mQD//5kAAADMADMAzABmAMwAmQDMAMwA + zAD/AMwAADPMADMzzABmM8wAmTPMAMwzzAD/M8wAAGbMADNmzABmZswAmWbMAMxmzAD/ZswAAJnMADOZ + zABmmcwAmZnMAMyZzAD/mcwAAMzMADPMzABmzMwAmczMAP/MzAAA/8wAM//MAGb/zACZ/8wAzP/MAP// + zAAAAP8AMwD/AGYA/wCZAP8AzAD/AP8A/wAAM/8AMzP/AGYz/wCZM/8AzDP/AP8z/wAAZv8AM2b/AGZm + /wCZZv8AzGb/AP9m/wAAmf8AM5n/AGaZ/wCZmf8AzJn/AP+Z/wAAzP8AM8z/AGbM/wCZzP8AzMz/AP/M + /wAA//8AM///AGb//wCZ//8AzP//AJ+fn5+fn58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQn5+fn5+f + n58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBCfn5+fn5+fn58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEJ+f + n5+fn5+fn58QEBAQEBAQnxAQEBAQEBAQEBAQEBAQn5+fn58QEBAQnxAQEBAQEBCfEBAQEBAQEBAQEBAQ + EBCfn5+fn5+fnxAQEBAQEBAQEJ8QEBAQEBAQEBAQEBAQEJ+fn5+fn5+fn58QEBAQEBAQEJ8QEBAQEBAQ + EBAQEBAQn5+fn5+fn5+fnxAQEBAQEBAQnxAQEBAQnxAQEBAQEBCfn5+fn5+fn5+fEBAQEBAQEBAQEBAQ + EJ+fEBAQEBAQEBCfn5+fn5+fn58QEBAQEBAQEBAQrZ+fn58QEBAQEBAQnxCfn5+fn5+fn58QEBAQEBAQ + EJ+fnxAQEBAQEBAQEBAQEBAQn5+fn5+fnxAQEBAQEBAQnxAQn5+fn58Qn58QEBAQEBCfn5+fn5+fEBAQ + EBAQEBCfEJ+fEBCfn5+fn58QEBAQEBAQEBAQEBAQEBAQEBAQnxCfnxAQn5+tra2fn58QEBAQEBCfn5+f + EBAQEBAQEJ+fEJ8QEK2tra2tra2fnxAQEBAQEBCfnxAQEBAQEBAQEBCfEBAQEK2trZ+trZ+fEBAQEBAQ + EBAQEBAQEBAQEBCfnxCfnxAQra2trZ+fnxAQEBAQEJ8QEBCfEBAQEBCfn5+fEBAQEBCtEJ+tnxCfEBAQ + EBAQEBAQn58QEBAQEJ+fn5+fnxAQEK2fnxCfnxAQEBAQEBAQEJ+fEJ+fEJ+fn5+fnxAQn60Qn5+fn5+f + EBAQEBAQnxAQnxAQnxAQn5+fn58QnxAQEJ+fnxCfn58QEBAQEBAQEBAQEBCfEJ+fn62fnxCtn5+fn58Q + n5+fnxAQEBAQEBAQEBAQn58Qn5+frZ+fnxAQn5+fEBAQn5+fnxAQEBAQEBAQEBCfEJ+fn5+trZ+tnxCf + EJ8QEBAQEJ+fnxAQEJ8QEBAQEBAQnxCfn5+fn5+tn5+fnxAQEBAQEBCfEBAQEJ8QEBAQEJ8QEJ+fn5+f + rZ+fn58QEBAQEBAQEBAQEBAQEBAQEBAQEBCfn5+fn5+fn5+fEBAQEBAQEBAQEBAQEBAQEJ8QnxCfnxAQ + EBAQn5+fEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEJ8QEJ8QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBCfEBAQn58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEJ+fEJ8QEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAABAAAAAgAAAAAEAGAAAAAAAADAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAA + AAAAAIAAAIAAAAAAAAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAA + gIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAAIAA + AIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAgIAA + gIAAgIAAgIAAAIAAAIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAAAAAAAAAIAAAIAAgIAAgIAAAIAAAIAAAAAA + AAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAAAAAAAAAIAAAIAAgIAA + gIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAA + AIAAgIAAgIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAA + AAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAIAAAIAAgIAAgIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAgIAAgIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAgIAA + gIAAgIAAgIAAAIAAAIAAgIAAgIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAgIAAgIAAgIAAgIAAAIAAAIAAgIAAgIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAgIAA + gIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAAAA + AAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAABAAAAAgAAAAAEABAAAAAAAAAgAAAAA + AAAAAAAAEAAAABAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAwMDAAICAgAAAAP8AAP8AAAD/ + /wD/AAAA/wD/AP//AAD///8AEREREREREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARERERERERAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAABERERERERERAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAERERERER + EREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAREREREREREREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABER + EREREREREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEREREREREREREQAAAAAAAAARAAAAAAAAAAAAAAAA + AAARERERERERERERAAAAAAAAABEAAAAAAAAAAAAAAAAAABERERERAAAAABEAAAAAAAAAEQAAAAAAAAAA + AAAAAAAAEREREREAAAAAEQAAAAAAAAARAAAAAAAAAAAAAAAAAAAREREREREREQAAAAAAAAAAABEAAAAA + AAAAAAAAAAAAABERERERERERAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAEREREREREREREQAAAAAAAAAA + EQAAAAAAAAAAAAAAAAARERERERERERERAAAAAAAAAAARAAAAAAAAAAAAAAAAABEREREREREREREAAAAA + AAAAABEAAAAAABEAAAAAAAAAEREREREREREREQAAAAAAAAAAEQAAAAAAEQAAAAAAAAARERERERERERER + AAAAAAAAAAAAAAAAABERAAAAAAAAABEREREREREREREAAAAAAAAAAAAAAAAAEREAAAAAAAAAABERERER + EREREQAAAAAAAAAAAAAzEREREQAAAAAAAAAAERERERERERERAAAAAAAAAAAAADMRERERAAAAAAAAABEA + ERERERERERERAAAAAAAAAAAREREAAAAAAAAAAAAAEQAREREREREREREAAAAAAAAAABEREQAAAAAAAAAA + AAAAAAAAEREREREREQAAAAAAAAAAEQAAEREREREAEREAAAAAAAARERERERERAAAAAAAAAAARAAARERER + EQAREQAAAAAAABEREREREREAAAAAAAAAABEAEREAABEREREREQAAAAAAEREREREREQAAAAAAAAAAEQAR + EQAAERERERERAAAAAAAAAAAAAAAAAAAAAAAAABEAEREAABERMzMzERERAAAAAAAAAAAAAAAAAAAAAAAA + EQAREQAAEREzMzMREREAAAAAAAARERERAAAAAAAAABERABEAADMzMzMzMzMREQAAAAAAABEREREAAAAA + AAAAEREAEQAAMzMzMzMzMxERAAAAAAAAABERAAAAAAAAAAAAABEAAAAAMzMzETMzEREAAAAAAAAAEREA + AAAAAAAAAAAAEQAAAAAzMzMRMzMREQAAAAAAAAAAAAAAAAAAAAAAEREAEREAADMzMzMREREAAAAAAAAA + AAAAAAAAAAAAAAAREQAREQAAMzMzMxEREQAAAAAAABEAAAARAAAAAAARERERAAAAAAAzABEzEQARAAAA + AAAAEQAAABEAAAAAABEREREAAAAAADMAETMRABEAAAAAAAAAAAAREQAAAAAAERERERERAAAAMxERABER + AAAAAAAAAAAAABERAAAAAAAREREREREAAAAzEREAEREAAAAAAAAAAAAREQAREQAREREREREAABEzABER + EREREQAAAAAAAAAAABERABERABEREREREQAAETMAERERERERAAAAAAAAEQAAEQAAEQAAEREREREAEQAA + ABEREQAREREAAAAAAAARAAARAAARAAAREREREQARAAAAERERABEREQAAAAAAAAAAAAAAABEAERERMxER + ADMREREREQARERERAAAAAAAAAAAAAAAAEQAREREzEREAMxERERERABEREREAAAAAAAAAAAAAABERABER + ETMREREAABEREQAAABEREREAAAAAAAAAAAAAEREAERERMxEREQAAERERAAAAEREREQAAAAAAAAAAAAAR + ABEREREzMxEzEQARABEAAAAAABEREQAAAAAAAAAAABEAERERETMzETMRABEAEQAAAAAAERERAAAAEQAA + AAAAAAARABERERERETMRERERAAAAAAAAABEAAAARAAAAAAAAABEAERERERERMxEREREAAAAAAAAAEQAA + AAARAAAAAAARAAARERERETMRERERAAAAAAAAAAAAAAAAABEAAAAAABEAABERERERMxEREREAAAAAAAAA + AAAAAAAAAAAAAAAAAAARERERERERERERAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEREREREREREREAAAAA + AAAAAAAAAAAAAAAAEQARABERAAAAAAAREREAAAAAAAAAAAAAAAAAAAAAAAARABEAEREAAAAAABEREQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + EQAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAAAREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + EQAAABERAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAREQARAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAABERABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgA + AABAAAAAgAAAAAEACAAAAAAAABAAAAAAAAAAAAAAAAEAAAABAAAAAP8AAP8AAP8AAAAA//8A//8AAP8A + /wDAwMAA//jwANfr+gDU/38A/wAAAOIrigAqKqUAAAAAAAQEBAAICAgADAwMABEREQAWFhYAHBwcACIi + IgApKSkAMzMzADk5OQBCQkIATU1NAFVVVQBgYGAAZmZmAHBwcACAgIAAjIyMAJSUlACZmZkApKSkAKys + rAC2trYAwMDAAMzMzADU1NQA2traAODg4ADs7OwA+Pj4APv7+wD///8AMwAAAGYAAACZAAAAzAAAAP8A + AAAAMwAAMzMAAGYzAACZMwAAzDMAAP8zAAAAZgAAM2YAAGZmAACZZgAAzGYAAP9mAAAAmQAAM5kAAGaZ + AACZmQAAzJkAAP+ZAAAAzAAAM8wAAGbMAACZzAAAzMwAAP/MAAAA/wAAM/8AAGb/AACZ/wAAzP8AAP// + AAAAADMAMwAzAGYAMwCZADMAzAAzAP8AMwAAMzMAZjMzAJkzMwDMMzMA/zMzAABmMwAzZjMAZmYzAJlm + MwDMZjMA/2YzAACZMwAzmTMAZpkzAJmZMwDMmTMA/5kzAADMMwAzzDMAZswzAJnMMwDMzDMA/8wzAAD/ + MwAz/zMAZv8zAJn/MwDM/zMA//8zAAAAZgAzAGYAZgBmAJkAZgDMAGYA/wBmAAAzZgAzM2YAZjNmAJkz + ZgDMM2YA/zNmAABmZgAzZmYAmWZmAMxmZgD/ZmYAAJlmADOZZgBmmWYAmZlmAMyZZgD/mWYAAMxmADPM + ZgBmzGYAmcxmAMzMZgD/zGYAAP9mADP/ZgBm/2YAmf9mAMz/ZgD//2YAAACZADMAmQBmAJkAmQCZAMwA + mQD/AJkAADOZADMzmQBmM5kAmTOZAMwzmQD/M5kAAGaZADNmmQBmZpkAmWaZAMxmmQD/ZpkAAJmZADOZ + mQBmmZkAzJmZAP+ZmQABzJkAM8yZAGbMmQCZzJkAzMyZAP/MmQAA/5kAM/+ZAGb/mQCZ/5kAzP+ZAP// + mQAAAMwAMwDMAGYAzACZAMwAzADMAP8AzAAAM8wAMzPMAGYzzACZM8wAzDPMAP8zzAAAZswAM2bMAGZm + zACZZswAzGbMAP9mzAAAmcwAM5nMAGaZzACZmcwAzJnMAP+ZzAAAzMwAM8zMAGbMzACZzMwA/8zMAAD/ + zAAz/8wAZv/MAJn/zADM/8wA///MAAAA/wAzAP8AZgD/AJkA/wDMAP8A/wD/AAAz/wAzM/8AZjP/AJkz + /wDMM/8A/zP/AABm/wAzZv8AZmb/AJlm/wDMZv8A/2b/AACZ/wAzmf8AZpn/AJmZ/wDMmf8A/5n/AADM + /wAzzP8AZsz/AJnM/wDMzP8A/8z/AAD//wAz//8AZv//AJn//wDM//8An5+fn5+fn5+fn5+fn58dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+f + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+f + n5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+f + n5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+f + n5+fn5+fn5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fn5+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn5+fn5+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHZ+fHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fHR0dHR0dHR2fnx0dHR0dHR0dHR0dHR0dn58dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fnx0dHR0dHR0dn58dHR0dHR0dHR0dHR0dHZ+fHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR2fnx0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0d + n58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0d + HR0dHR0dn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0d + HR0dHR0dHR0dHZ+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fn5+fn5+fnx0d + HR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dHR2fnx0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn5+fn5+f + n58dHR0dHR0dHR0dHR0dHR0dn58dHR0dHR0dHR0dn58dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+f + n5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+f + n5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fnx0dHR0dHR0dHR0dHR0dHR2fn5+f + n5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHa2tn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0d + n5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR2trZ+fn5+fn5+fHR0dHR0dHR0dHR0d + HR2fnx0dn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHZ+fn5+fnx0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHZ+fn5+fn5+fn5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR2fn5+fn58dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dn58dHR0dn5+fn5+f + n5+fnx0dn5+fnx0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHZ+fHR0dHZ+f + n5+fn5+fn58dHZ+fn58dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR2fnx0d + n5+fnx0dHR2fn5+fn5+fn5+fn58dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0d + n58dHZ+fn58dHR0dn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fnx0dn5+fnx0dHR2fn5+fra2tra2tn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHZ+fn58dHR0dn5+fn62tra2trZ+fn5+fnx0dHR0dHR0dHR0dHZ+fn5+fn5+fHR0dHR0d + HR0dHR0dHR2fn5+fHR2fnx0dHR2tra2tra2tra2tra2trZ+fn58dHR0dHR0dHR0dHR2fn5+fn5+fnx0d + HR0dHR0dHR0dHR0dn5+fnx0dn58dHR0dra2tra2tra2tra2tra2fn5+fHR0dHR0dHR0dHR0dHR2fn5+f + HR0dHR0dHR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dra2tra2tn5+tra2tn5+fnx0dHR0dHR0dHR0dHR0d + n5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dn58dHR0dHR0dHa2tra2trZ+fra2trZ+fn58dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fnx0dn5+fnx0dHR2tra2tra2trZ+fn5+fnx0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn58dHZ+fn58dHR0dra2tra2tra2fn5+fn58dHR0d + HR0dHR0dHR2fnx0dHR0dHZ+fHR0dHR0dHR0dHZ+fn5+fn5+fHR0dHR0dHR0dHa2tHR2fn62tn58dHZ+f + HR0dHR0dHR0dHR0dn58dHR0dHR2fnx0dHR0dHR0dHR2fn5+fn5+fnx0dHR0dHR0dHR2trR0dn5+trZ+f + HR2fnx0dHR0dHR0dHR0dHR0dHR0dHZ+fn58dHR0dHR0dHR0dn5+fn5+fn5+fn5+fHR0dHR0dra2fn5+f + HR2fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR0dHR0dHR0dHZ+fn5+fn5+fn5+fnx0dHR0dHa2t + n5+fnx0dn5+fnx0dHR0dHR0dHR0dHR0dHR0dHZ+fn58dHZ+fn58dHZ+fn5+fn5+fn5+fnx0dHR2fn62t + HR2fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR2fn5+fHR2fn5+fn5+fn5+fn58dHR0d + n5+trR0dn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dn58dHR0dn58dHR0dn58dHR0dn5+fn5+fn5+fnx0d + n58dHR0dHR2fn5+fn58dHZ+fn5+fnx0dHR0dHR0dHR0dHZ+fHR0dHZ+fHR0dHZ+fHR0dHZ+fn5+fn5+f + n58dHZ+fHR0dHR0dn5+fn5+fHR2fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fnx0dn5+fn5+f + ra2fn5+fHR2trZ+fn5+fn5+fn58dHZ+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn58dHZ+f + n5+fn62tn5+fnx0dra2fn5+fn5+fn5+fHR2fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+f + HR2fn5+fn5+trZ+fn5+fnx0dHR2fn5+fn58dHR0dHR2fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0d + n5+fnx0dn5+fn5+fra2fn5+fn58dHR0dn5+fn5+fHR0dHR0dn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0d + HR0dHZ+fHR2fn5+fn5+fn62tra2fn62tn58dHZ+fHR2fnx0dHR0dHR0dHR2fn5+fn58dHR0dHR0dHR0d + HR0dHR0dHR2fnx0dn5+fn5+fn5+tra2tn5+trZ+fHR2fnx0dn58dHR0dHR0dHR0dn5+fn5+fHR0dHR0d + n58dHR0dHR0dHR0dHR0dHZ+fHR2fn5+fn5+fn5+fn5+trZ+fn5+fn5+fHR0dHR0dHR0dHR0dHR2fnx0d + HR0dHZ+fHR0dHR0dHR0dHR0dHR2fnx0dn5+fn5+fn5+fn5+fra2fn5+fn5+fnx0dHR0dHR0dHR0dHR0d + n58dHR0dHR0dHZ+fHR0dHR0dHR0dHZ+fHR0dHZ+fn5+fn5+fn5+trZ+fn5+fn5+fHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dHR2fnx0dHR2fn5+fn5+fn5+fra2fn5+fn5+fnx0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fn5+fn5+fnx0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn58dHZ+fHR2fn5+fHR0dHR0dHR0dHZ+fn5+fnx0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fHR2fnx0dn5+fnx0dHR0dHR0dHR2fn5+f + n58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fnx0dHR2fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHR0dn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fnx0dHR0dHZ+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHR0dHR2fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHZ+fn58dHZ+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR2fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAIAAAAAAAQAAAQAYAAAAAAAAwAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAIAAAAAAAQAAAQAIAAAAAAAAQAAAAAAAAAAA + AAAAAQAAAAEAAAAA/wAA/wAA/wAAAAD//wD//wAA/wD/AMDAwAD/+PAA1+v6ANT/fwD/AAAA4iuKACoq + pQAAAAAABAQEAAgICAAMDAwAERERABYWFgAcHBwAIiIiACkpKQAzMzMAOTk5AEJCQgBNTU0AVVVVAGBg + YABmZmYAcHBwAICAgACMjIwAlJSUAJmZmQCkpKQArKysALa2tgDAwMAAzMzMANTU1ADa2toA4ODgAOzs + 7AD4+PgA+/v7AP///wAzAAAAZgAAAJkAAADMAAAA/wAAAAAzAAAzMwAAZjMAAJkzAADMMwAA/zMAAABm + AAAzZgAAZmYAAJlmAADMZgAA/2YAAACZAAAzmQAAZpkAAJmZAADMmQAA/5kAAADMAAAzzAAAZswAAJnM + AADMzAAA/8wAAAD/AAAz/wAAZv8AAJn/AADM/wAA//8AAAAAMwAzADMAZgAzAJkAMwDMADMA/wAzAAAz + MwBmMzMAmTMzAMwzMwD/MzMAAGYzADNmMwBmZjMAmWYzAMxmMwD/ZjMAAJkzADOZMwBmmTMAmZkzAMyZ + MwD/mTMAAMwzADPMMwBmzDMAmcwzAMzMMwD/zDMAAP8zADP/MwBm/zMAmf8zAMz/MwD//zMAAABmADMA + ZgBmAGYAmQBmAMwAZgD/AGYAADNmADMzZgBmM2YAmTNmAMwzZgD/M2YAAGZmADNmZgCZZmYAzGZmAP9m + ZgAAmWYAM5lmAGaZZgCZmWYAzJlmAP+ZZgAAzGYAM8xmAGbMZgCZzGYAzMxmAP/MZgAA/2YAM/9mAGb/ + ZgCZ/2YAzP9mAP//ZgAAAJkAMwCZAGYAmQCZAJkAzACZAP8AmQAAM5kAMzOZAGYzmQCZM5kAzDOZAP8z + mQAAZpkAM2aZAGZmmQCZZpkAzGaZAP9mmQAAmZkAM5mZAGaZmQDMmZkA/5mZAAHMmQAzzJkAZsyZAJnM + mQDMzJkA/8yZAAD/mQAz/5kAZv+ZAJn/mQDM/5kA//+ZAAAAzAAzAMwAZgDMAJkAzADMAMwA/wDMAAAz + zAAzM8wAZjPMAJkzzADMM8wA/zPMAABmzAAzZswAZmbMAJlmzADMZswA/2bMAACZzAAzmcwAZpnMAJmZ + zADMmcwA/5nMAADMzAAzzMwAZszMAJnMzAD/zMwAAP/MADP/zABm/8wAmf/MAMz/zAD//8wAAAD/ADMA + /wBmAP8AmQD/AMwA/wD/AP8AADP/ADMz/wBmM/8AmTP/AMwz/wD/M/8AAGb/ADNm/wBmZv8AmWb/AMxm + /wD/Zv8AAJn/ADOZ/wBmmf8AmZn/AMyZ/wD/mf8AAMz/ADPM/wBmzP8Amcz/AMzM/wD/zP8AAP//ADP/ + /wBm//8Amf//AMz//wCfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pra2trZ+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+tra2tn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD62tra2fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+f + n5+tra2tra2tra2tra2fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8P + Dw+fn5+fn5+fn62tra2tra2tra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+f + n58PDw8PDw8PD5+fn5+fn5+fra2tra2tra2tra2tn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8P + Dw+fn5+fDw8PDw8PDw+tra2tra2tra2tra2tra2tra2tra2tra2tra2tn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PD5+fn58PDw8PDw8PD62tra2tra2tra2tra2tra2tra2tra2tra2tra2fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8Pn5+fnw8PDw8PDw8Pra2tra2tra2tra2tra2tra2tra2tra2tra2trZ+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw+fn5+fDw8PDw8PDw+tra2tra2tra2tra2tra2tra2tra2t + ra2tra2tn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+fn58PDw8PDw8PD62tra2tra2tra2tra2t + ra2tra2tra2tra2tra2fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PD62t + ra2tra2tra2trZ+fn5+tra2tra2trZ+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8Pra2tra2tra2tra2tn5+fn62tra2tra2tn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PDw8PDw+tra2tra2tra2tra2fn5+fra2tra2tra2fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n58PDw8Pn5+fn5+fn58PDw8PDw8PD62tra2tra2tra2tra2tra2fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pra2tra2tra2tra2tra2trZ+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw+tra2tra2tra2tra2tra2tn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PD62tra2tra2tra2tra2t + ra2fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pra2tra2t + ra2tra2tra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw+tra2tDw8PD5+fn5+tra2tn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PD62tra0PDw8Pn5+fn62tra2fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pra2trQ8PDw+fn5+fra2trZ+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw+tra2tn5+fn5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PD62tra2fn5+fn5+fnw8PDw+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8Pra2trZ+fn5+fn5+fDw8PD5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw+tra2tn5+fn5+f + n58PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PD62t + ra2fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PD5+fn5+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8Pn5+fn62t + ra0PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw+fn5+fra2trQ8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PD5+fn5+tra2tDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PD5+fn58PDw8PDw8PD5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fDw8PD5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+fn58PDw8PDw8PD5+f + n58PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n58PDw8Pn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fnw8P + Dw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fnw8PDw+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fn5+fn62tra2fn5+fn5+fnw8PDw+tra2tn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fDw8PD62t + ra2fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+tra2tn5+fn5+f + n58PDw8Pra2trZ+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+fn5+fn5+fn5+fn62t + ra2fn5+fn5+fn5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+f + n5+fn5+fra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8P + Dw+fn5+fn5+fn5+fn5+tra2tn5+fn5+fn5+fn5+fDw8PDw8PDw+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PD5+fn5+fn5+fn5+fn62tra2fn5+fn5+fn5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn5+tra2tra2trZ+fn5+tra2tn5+fnw8P + Dw+fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn62tra2tra2tn5+fn62t + ra2fn5+fDw8PD5+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fra2tra2t + ra2fn5+fra2trZ+fn58PDw8Pn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+tra2tn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn62tra2fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+tra2tn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fra2trZ+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+tra2tn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn62tra2fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8Pn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n58PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + + + \ No newline at end of file diff --git a/Server.MirForms/Account/ChangePasswordDialog.Designer.cs b/Server.MirForms/Account/ChangePasswordDialog.Designer.cs new file mode 100644 index 0000000..7f01a6b --- /dev/null +++ b/Server.MirForms/Account/ChangePasswordDialog.Designer.cs @@ -0,0 +1,89 @@ + +namespace Server +{ + partial class ChangePasswordDialog + { + /// + /// 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(ChangePasswordDialog)); + PasswordTextBox = new TextBox(); + okButton = new Button(); + cancelButton = new Button(); + SuspendLayout(); + // + // PasswordTextBox + // + PasswordTextBox.Location = new Point(14, 14); + PasswordTextBox.Margin = new Padding(4, 3, 4, 3); + PasswordTextBox.Name = "PasswordTextBox"; + PasswordTextBox.Size = new Size(213, 23); + PasswordTextBox.TabIndex = 0; + // + // okButton + // + okButton.DialogResult = DialogResult.OK; + okButton.Location = new Point(14, 44); + okButton.Margin = new Padding(4, 3, 4, 3); + okButton.Name = "okButton"; + okButton.Size = new Size(88, 27); + okButton.TabIndex = 1; + okButton.Text = "OK"; + okButton.UseVisualStyleBackColor = true; + // + // cancelButton + // + cancelButton.DialogResult = DialogResult.Cancel; + cancelButton.Location = new Point(140, 44); + cancelButton.Margin = new Padding(4, 3, 4, 3); + cancelButton.Name = "cancelButton"; + cancelButton.Size = new Size(88, 27); + cancelButton.TabIndex = 2; + cancelButton.Text = "Cancel"; + cancelButton.UseVisualStyleBackColor = true; + // + // ChangePasswordDialog + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(241, 81); + Controls.Add(cancelButton); + Controls.Add(okButton); + Controls.Add(PasswordTextBox); + Icon = (Icon)resources.GetObject("$this.Icon"); + Margin = new Padding(4, 3, 4, 3); + Name = "ChangePasswordDialog"; + Text = "Set Password"; + ResumeLayout(false); + PerformLayout(); + } + + #endregion + private System.Windows.Forms.Button okButton; + private System.Windows.Forms.Button cancelButton; + public System.Windows.Forms.TextBox PasswordTextBox; + } +} \ No newline at end of file diff --git a/Server.MirForms/Account/ChangePasswordDialog.cs b/Server.MirForms/Account/ChangePasswordDialog.cs new file mode 100644 index 0000000..f06eb3f --- /dev/null +++ b/Server.MirForms/Account/ChangePasswordDialog.cs @@ -0,0 +1,12 @@ +namespace Server +{ + public partial class ChangePasswordDialog : Form + { + public ChangePasswordDialog() + { + InitializeComponent(); + + PasswordTextBox.MaxLength = Globals.MaxPasswordLength; + } + } +} diff --git a/Server.MirForms/Account/ChangePasswordDialog.resx b/Server.MirForms/Account/ChangePasswordDialog.resx new file mode 100644 index 0000000..1b01221 --- /dev/null +++ b/Server.MirForms/Account/ChangePasswordDialog.resx @@ -0,0 +1,1763 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAgAICAQAAAABADoAgAAhgAAACAgAAAAABgAqAwAAG4DAAAgIAAAAAAIAKgIAAAWEAAAQEAAAAAA + GAAoMgAAvhgAAEBAEAAAAAQAaAoAAOZKAABAQAAAAAAIACgWAABOVQAAgIAAAAAAGAAoyAAAdmsAAICA + AAAAAAgAKEwAAJ4zAQAoAAAAIAAAAEAAAAABAAQAAAAAAAACAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAA + gAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////ABER + ERAAAAAAAAAAAAAAAAARERERAAAAAAAAAAAAAAAAERERERAAAAAAAAAAAAAAABERERERAAAAAQAAAAAA + AAARERAAAQAAAAEAAAAAAAAAEREREQAAAAABAAAAAAAAABERERERAAAAABAAAAAAAAAREREREQAAAAAQ + AAAQAAAAEREREREAAAAAAAABEAAAAAERERERAAAAAAAxERAAAAAQERERERAAAAABEQAAAAAAAAAREREQ + AAAAAQARERARAAAAEREREAAAAAEBEAERERAAAAAAAAAAAAAQEQARMzERAAAAEREAAAABEBADMzMzEQAA + AAEQAAAAAAEAADMxMxEAAAAAAAAAAAEQEQAzMxEQAAABAAEAAAEREAAAMBMQEAAAAAARAAABEREQADEQ + EQAAAAABEBEBEREQATAREREAAAAQAQAQARERAQABEQERAAAAAAAAEBETEQMRERAREQAAAAAAARARExEQ + AREAAREQAAAAAAEBERMxMQEBAAABEQABAAAAAQERERMREQAAAAEAABAAABABERExERAAAAAAAAAAAAAA + EREREREAAAAAAAAAABAQEQAAAREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABAAAAAAAAAAAA + AAAAEAARAAAAAAAAAAAAAAAAAAABEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABABgAAAAAAAAM + AAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA + AACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAAAA + AAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA + AACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACA + AACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAACAAACAAACAAACAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAA + AACAAACAAACAAACAAACAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAAAAAAAAAACAAACAAACAAACAAACA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACAAAAAAACAAACAAAAAAAAAAACAAACAAICAAICAAICAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAA + AACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAACAAAAAAAAAAICAAICAAICA + AICAAICAAICAAICAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAICAAICAAICAAACAAICAAICAAACAAACAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAACAAACA + AAAAAAAAAICAAICAAICAAICAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAACA + AAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAICAAAAAAACAAICAAACAAAAA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAACAAACAAACA + AACAAACAAACAAAAAAAAAAAAAAICAAACAAACAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAACAAACAAAAAAACAAACAAAAAAACAAACAAACAAACAAACAAACAAAAAAAAAAACAAICAAAAAAACAAACA + AACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAACA + AACAAACAAACAAACAAAAAAACAAAAAAAAAAAAAAACAAACAAACAAAAAAACAAACAAACAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAICAAACAAACAAAAAAICAAACAAACA + AACAAACAAACAAAAAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + AACAAAAAAACAAACAAACAAICAAACAAACAAACAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAACAAACAAACA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAACAAICAAICAAACA + AICAAACAAAAAAACAAAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAACAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAACAAACAAACAAICAAACAAACAAACAAACAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACA + AACAAACAAACAAACAAICAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAAAA + AACAAACAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAA + AACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAACAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE + AAAAAAAAAAAAAAABAAAAAQAAAAD/AAD/AAD/AAAAAP//AP//AAD/AP8AwMDAAP/48ADX6/oA1P9/AP8A + AADiK4oAKiqlAAAAAAAEBAQACAgIAAwMDAAREREAFhYWABwcHAAiIiIAKSkpADMzMwA5OTkAQkJCAE1N + TQBVVVUAYGBgAGZmZgBwcHAAgICAAIyMjACUlJQAmZmZAKSkpACsrKwAtra2AMDAwADMzMwA1NTUANra + 2gDg4OAA7OzsAPj4+AD7+/sA////ADMAAABmAAAAmQAAAMwAAAD/AAAAADMAADMzAABmMwAAmTMAAMwz + AAD/MwAAAGYAADNmAABmZgAAmWYAAMxmAAD/ZgAAAJkAADOZAABmmQAAmZkAAMyZAAD/mQAAAMwAADPM + AABmzAAAmcwAAMzMAAD/zAAAAP8AADP/AABm/wAAmf8AAMz/AAD//wAAAAAzADMAMwBmADMAmQAzAMwA + MwD/ADMAADMzAGYzMwCZMzMAzDMzAP8zMwAAZjMAM2YzAGZmMwCZZjMAzGYzAP9mMwAAmTMAM5kzAGaZ + MwCZmTMAzJkzAP+ZMwAAzDMAM8wzAGbMMwCZzDMAzMwzAP/MMwAA/zMAM/8zAGb/MwCZ/zMAzP8zAP// + MwAAAGYAMwBmAGYAZgCZAGYAzABmAP8AZgAAM2YAMzNmAGYzZgCZM2YAzDNmAP8zZgAAZmYAM2ZmAJlm + ZgDMZmYA/2ZmAACZZgAzmWYAZplmAJmZZgDMmWYA/5lmAADMZgAzzGYAZsxmAJnMZgDMzGYA/8xmAAD/ + ZgAz/2YAZv9mAJn/ZgDM/2YA//9mAAAAmQAzAJkAZgCZAJkAmQDMAJkA/wCZAAAzmQAzM5kAZjOZAJkz + mQDMM5kA/zOZAABmmQAzZpkAZmaZAJlmmQDMZpkA/2aZAACZmQAzmZkAZpmZAMyZmQD/mZkAAcyZADPM + mQBmzJkAmcyZAMzMmQD/zJkAAP+ZADP/mQBm/5kAmf+ZAMz/mQD//5kAAADMADMAzABmAMwAmQDMAMwA + zAD/AMwAADPMADMzzABmM8wAmTPMAMwzzAD/M8wAAGbMADNmzABmZswAmWbMAMxmzAD/ZswAAJnMADOZ + zABmmcwAmZnMAMyZzAD/mcwAAMzMADPMzABmzMwAmczMAP/MzAAA/8wAM//MAGb/zACZ/8wAzP/MAP// + zAAAAP8AMwD/AGYA/wCZAP8AzAD/AP8A/wAAM/8AMzP/AGYz/wCZM/8AzDP/AP8z/wAAZv8AM2b/AGZm + /wCZZv8AzGb/AP9m/wAAmf8AM5n/AGaZ/wCZmf8AzJn/AP+Z/wAAzP8AM8z/AGbM/wCZzP8AzMz/AP/M + /wAA//8AM///AGb//wCZ//8AzP//AJ+fn5+fn58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQn5+fn5+f + n58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBCfn5+fn5+fn58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEJ+f + n5+fn5+fn58QEBAQEBAQnxAQEBAQEBAQEBAQEBAQn5+fn58QEBAQnxAQEBAQEBCfEBAQEBAQEBAQEBAQ + EBCfn5+fn5+fnxAQEBAQEBAQEJ8QEBAQEBAQEBAQEBAQEJ+fn5+fn5+fn58QEBAQEBAQEJ8QEBAQEBAQ + EBAQEBAQn5+fn5+fn5+fnxAQEBAQEBAQnxAQEBAQnxAQEBAQEBCfn5+fn5+fn5+fEBAQEBAQEBAQEBAQ + EJ+fEBAQEBAQEBCfn5+fn5+fn58QEBAQEBAQEBAQrZ+fn58QEBAQEBAQnxCfn5+fn5+fn58QEBAQEBAQ + EJ+fnxAQEBAQEBAQEBAQEBAQn5+fn5+fnxAQEBAQEBAQnxAQn5+fn58Qn58QEBAQEBCfn5+fn5+fEBAQ + EBAQEBCfEJ+fEBCfn5+fn58QEBAQEBAQEBAQEBAQEBAQEBAQnxCfnxAQn5+tra2fn58QEBAQEBCfn5+f + EBAQEBAQEJ+fEJ8QEK2tra2tra2fnxAQEBAQEBCfnxAQEBAQEBAQEBCfEBAQEK2trZ+trZ+fEBAQEBAQ + EBAQEBAQEBAQEBCfnxCfnxAQra2trZ+fnxAQEBAQEJ8QEBCfEBAQEBCfn5+fEBAQEBCtEJ+tnxCfEBAQ + EBAQEBAQn58QEBAQEJ+fn5+fnxAQEK2fnxCfnxAQEBAQEBAQEJ+fEJ+fEJ+fn5+fnxAQn60Qn5+fn5+f + EBAQEBAQnxAQnxAQnxAQn5+fn58QnxAQEJ+fnxCfn58QEBAQEBAQEBAQEBCfEJ+fn62fnxCtn5+fn58Q + n5+fnxAQEBAQEBAQEBAQn58Qn5+frZ+fnxAQn5+fEBAQn5+fnxAQEBAQEBAQEBCfEJ+fn5+trZ+tnxCf + EJ8QEBAQEJ+fnxAQEJ8QEBAQEBAQnxCfn5+fn5+tn5+fnxAQEBAQEBCfEBAQEJ8QEBAQEJ8QEJ+fn5+f + rZ+fn58QEBAQEBAQEBAQEBAQEBAQEBAQEBCfn5+fn5+fn5+fEBAQEBAQEBAQEBAQEBAQEJ8QnxCfnxAQ + EBAQn5+fEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEJ8QEJ8QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBCfEBAQn58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEJ+fEJ8QEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAABAAAAAgAAAAAEAGAAAAAAAADAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAA + AAAAAIAAAIAAAAAAAAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAA + gIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAAIAA + AIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAgIAA + gIAAgIAAgIAAAIAAAIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAAAAAAAAAIAAAIAAgIAAgIAAAIAAAIAAAAAA + AAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAAAAAAAAAIAAAIAAgIAA + gIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAA + AIAAgIAAgIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAA + AAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAIAAAIAAgIAAgIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAgIAAgIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAgIAA + gIAAgIAAgIAAAIAAAIAAgIAAgIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAgIAAgIAAgIAAgIAAAIAAAIAAgIAAgIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAgIAA + gIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAAAA + AAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAABAAAAAgAAAAAEABAAAAAAAAAgAAAAA + AAAAAAAAEAAAABAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAwMDAAICAgAAAAP8AAP8AAAD/ + /wD/AAAA/wD/AP//AAD///8AEREREREREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARERERERERAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAABERERERERERAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAERERERER + EREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAREREREREREREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABER + EREREREREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEREREREREREREQAAAAAAAAARAAAAAAAAAAAAAAAA + AAARERERERERERERAAAAAAAAABEAAAAAAAAAAAAAAAAAABERERERAAAAABEAAAAAAAAAEQAAAAAAAAAA + AAAAAAAAEREREREAAAAAEQAAAAAAAAARAAAAAAAAAAAAAAAAAAAREREREREREQAAAAAAAAAAABEAAAAA + AAAAAAAAAAAAABERERERERERAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAEREREREREREREQAAAAAAAAAA + EQAAAAAAAAAAAAAAAAARERERERERERERAAAAAAAAAAARAAAAAAAAAAAAAAAAABEREREREREREREAAAAA + AAAAABEAAAAAABEAAAAAAAAAEREREREREREREQAAAAAAAAAAEQAAAAAAEQAAAAAAAAARERERERERERER + AAAAAAAAAAAAAAAAABERAAAAAAAAABEREREREREREREAAAAAAAAAAAAAAAAAEREAAAAAAAAAABERERER + EREREQAAAAAAAAAAAAAzEREREQAAAAAAAAAAERERERERERERAAAAAAAAAAAAADMRERERAAAAAAAAABEA + ERERERERERERAAAAAAAAAAAREREAAAAAAAAAAAAAEQAREREREREREREAAAAAAAAAABEREQAAAAAAAAAA + AAAAAAAAEREREREREQAAAAAAAAAAEQAAEREREREAEREAAAAAAAARERERERERAAAAAAAAAAARAAARERER + EQAREQAAAAAAABEREREREREAAAAAAAAAABEAEREAABEREREREQAAAAAAEREREREREQAAAAAAAAAAEQAR + EQAAERERERERAAAAAAAAAAAAAAAAAAAAAAAAABEAEREAABERMzMzERERAAAAAAAAAAAAAAAAAAAAAAAA + EQAREQAAEREzMzMREREAAAAAAAARERERAAAAAAAAABERABEAADMzMzMzMzMREQAAAAAAABEREREAAAAA + AAAAEREAEQAAMzMzMzMzMxERAAAAAAAAABERAAAAAAAAAAAAABEAAAAAMzMzETMzEREAAAAAAAAAEREA + AAAAAAAAAAAAEQAAAAAzMzMRMzMREQAAAAAAAAAAAAAAAAAAAAAAEREAEREAADMzMzMREREAAAAAAAAA + AAAAAAAAAAAAAAAREQAREQAAMzMzMxEREQAAAAAAABEAAAARAAAAAAARERERAAAAAAAzABEzEQARAAAA + AAAAEQAAABEAAAAAABEREREAAAAAADMAETMRABEAAAAAAAAAAAAREQAAAAAAERERERERAAAAMxERABER + AAAAAAAAAAAAABERAAAAAAAREREREREAAAAzEREAEREAAAAAAAAAAAAREQAREQAREREREREAABEzABER + EREREQAAAAAAAAAAABERABERABEREREREQAAETMAERERERERAAAAAAAAEQAAEQAAEQAAEREREREAEQAA + ABEREQAREREAAAAAAAARAAARAAARAAAREREREQARAAAAERERABEREQAAAAAAAAAAAAAAABEAERERMxER + ADMREREREQARERERAAAAAAAAAAAAAAAAEQAREREzEREAMxERERERABEREREAAAAAAAAAAAAAABERABER + ETMREREAABEREQAAABEREREAAAAAAAAAAAAAEREAERERMxEREQAAERERAAAAEREREQAAAAAAAAAAAAAR + ABEREREzMxEzEQARABEAAAAAABEREQAAAAAAAAAAABEAERERETMzETMRABEAEQAAAAAAERERAAAAEQAA + AAAAAAARABERERERETMRERERAAAAAAAAABEAAAARAAAAAAAAABEAERERERERMxEREREAAAAAAAAAEQAA + AAARAAAAAAARAAARERERETMRERERAAAAAAAAAAAAAAAAABEAAAAAABEAABERERERMxEREREAAAAAAAAA + AAAAAAAAAAAAAAAAAAARERERERERERERAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEREREREREREREAAAAA + AAAAAAAAAAAAAAAAEQARABERAAAAAAAREREAAAAAAAAAAAAAAAAAAAAAAAARABEAEREAAAAAABEREQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + EQAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAAAREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + EQAAABERAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAREQARAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAABERABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgA + AABAAAAAgAAAAAEACAAAAAAAABAAAAAAAAAAAAAAAAEAAAABAAAAAP8AAP8AAP8AAAAA//8A//8AAP8A + /wDAwMAA//jwANfr+gDU/38A/wAAAOIrigAqKqUAAAAAAAQEBAAICAgADAwMABEREQAWFhYAHBwcACIi + IgApKSkAMzMzADk5OQBCQkIATU1NAFVVVQBgYGAAZmZmAHBwcACAgIAAjIyMAJSUlACZmZkApKSkAKys + rAC2trYAwMDAAMzMzADU1NQA2traAODg4ADs7OwA+Pj4APv7+wD///8AMwAAAGYAAACZAAAAzAAAAP8A + AAAAMwAAMzMAAGYzAACZMwAAzDMAAP8zAAAAZgAAM2YAAGZmAACZZgAAzGYAAP9mAAAAmQAAM5kAAGaZ + AACZmQAAzJkAAP+ZAAAAzAAAM8wAAGbMAACZzAAAzMwAAP/MAAAA/wAAM/8AAGb/AACZ/wAAzP8AAP// + AAAAADMAMwAzAGYAMwCZADMAzAAzAP8AMwAAMzMAZjMzAJkzMwDMMzMA/zMzAABmMwAzZjMAZmYzAJlm + MwDMZjMA/2YzAACZMwAzmTMAZpkzAJmZMwDMmTMA/5kzAADMMwAzzDMAZswzAJnMMwDMzDMA/8wzAAD/ + MwAz/zMAZv8zAJn/MwDM/zMA//8zAAAAZgAzAGYAZgBmAJkAZgDMAGYA/wBmAAAzZgAzM2YAZjNmAJkz + ZgDMM2YA/zNmAABmZgAzZmYAmWZmAMxmZgD/ZmYAAJlmADOZZgBmmWYAmZlmAMyZZgD/mWYAAMxmADPM + ZgBmzGYAmcxmAMzMZgD/zGYAAP9mADP/ZgBm/2YAmf9mAMz/ZgD//2YAAACZADMAmQBmAJkAmQCZAMwA + mQD/AJkAADOZADMzmQBmM5kAmTOZAMwzmQD/M5kAAGaZADNmmQBmZpkAmWaZAMxmmQD/ZpkAAJmZADOZ + mQBmmZkAzJmZAP+ZmQABzJkAM8yZAGbMmQCZzJkAzMyZAP/MmQAA/5kAM/+ZAGb/mQCZ/5kAzP+ZAP// + mQAAAMwAMwDMAGYAzACZAMwAzADMAP8AzAAAM8wAMzPMAGYzzACZM8wAzDPMAP8zzAAAZswAM2bMAGZm + zACZZswAzGbMAP9mzAAAmcwAM5nMAGaZzACZmcwAzJnMAP+ZzAAAzMwAM8zMAGbMzACZzMwA/8zMAAD/ + zAAz/8wAZv/MAJn/zADM/8wA///MAAAA/wAzAP8AZgD/AJkA/wDMAP8A/wD/AAAz/wAzM/8AZjP/AJkz + /wDMM/8A/zP/AABm/wAzZv8AZmb/AJlm/wDMZv8A/2b/AACZ/wAzmf8AZpn/AJmZ/wDMmf8A/5n/AADM + /wAzzP8AZsz/AJnM/wDMzP8A/8z/AAD//wAz//8AZv//AJn//wDM//8An5+fn5+fn5+fn5+fn58dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+f + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+f + n5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+f + n5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+f + n5+fn5+fn5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fn5+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn5+fn5+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHZ+fHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fHR0dHR0dHR2fnx0dHR0dHR0dHR0dHR0dn58dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fnx0dHR0dHR0dn58dHR0dHR0dHR0dHR0dHZ+fHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR2fnx0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0d + n58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0d + HR0dHR0dn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0d + HR0dHR0dHR0dHZ+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fn5+fn5+fnx0d + HR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dHR2fnx0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn5+fn5+f + n58dHR0dHR0dHR0dHR0dHR0dn58dHR0dHR0dHR0dn58dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+f + n5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+f + n5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fnx0dHR0dHR0dHR0dHR0dHR2fn5+f + n5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHa2tn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0d + n5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR2trZ+fn5+fn5+fHR0dHR0dHR0dHR0d + HR2fnx0dn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHZ+fn5+fnx0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHZ+fn5+fn5+fn5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR2fn5+fn58dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dn58dHR0dn5+fn5+f + n5+fnx0dn5+fnx0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHZ+fHR0dHZ+f + n5+fn5+fn58dHZ+fn58dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR2fnx0d + n5+fnx0dHR2fn5+fn5+fn5+fn58dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0d + n58dHZ+fn58dHR0dn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fnx0dn5+fnx0dHR2fn5+fra2tra2tn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHZ+fn58dHR0dn5+fn62tra2trZ+fn5+fnx0dHR0dHR0dHR0dHZ+fn5+fn5+fHR0dHR0d + HR0dHR0dHR2fn5+fHR2fnx0dHR2tra2tra2tra2tra2trZ+fn58dHR0dHR0dHR0dHR2fn5+fn5+fnx0d + HR0dHR0dHR0dHR0dn5+fnx0dn58dHR0dra2tra2tra2tra2tra2fn5+fHR0dHR0dHR0dHR0dHR2fn5+f + HR0dHR0dHR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dra2tra2tn5+tra2tn5+fnx0dHR0dHR0dHR0dHR0d + n5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dn58dHR0dHR0dHa2tra2trZ+fra2trZ+fn58dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fnx0dn5+fnx0dHR2tra2tra2trZ+fn5+fnx0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn58dHZ+fn58dHR0dra2tra2tra2fn5+fn58dHR0d + HR0dHR0dHR2fnx0dHR0dHZ+fHR0dHR0dHR0dHZ+fn5+fn5+fHR0dHR0dHR0dHa2tHR2fn62tn58dHZ+f + HR0dHR0dHR0dHR0dn58dHR0dHR2fnx0dHR0dHR0dHR2fn5+fn5+fnx0dHR0dHR0dHR2trR0dn5+trZ+f + HR2fnx0dHR0dHR0dHR0dHR0dHR0dHZ+fn58dHR0dHR0dHR0dn5+fn5+fn5+fn5+fHR0dHR0dra2fn5+f + HR2fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR0dHR0dHR0dHZ+fn5+fn5+fn5+fnx0dHR0dHa2t + n5+fnx0dn5+fnx0dHR0dHR0dHR0dHR0dHR0dHZ+fn58dHZ+fn58dHZ+fn5+fn5+fn5+fnx0dHR2fn62t + HR2fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR2fn5+fHR2fn5+fn5+fn5+fn58dHR0d + n5+trR0dn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dn58dHR0dn58dHR0dn58dHR0dn5+fn5+fn5+fnx0d + n58dHR0dHR2fn5+fn58dHZ+fn5+fnx0dHR0dHR0dHR0dHZ+fHR0dHZ+fHR0dHZ+fHR0dHZ+fn5+fn5+f + n58dHZ+fHR0dHR0dn5+fn5+fHR2fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fnx0dn5+fn5+f + ra2fn5+fHR2trZ+fn5+fn5+fn58dHZ+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn58dHZ+f + n5+fn62tn5+fnx0dra2fn5+fn5+fn5+fHR2fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+f + HR2fn5+fn5+trZ+fn5+fnx0dHR2fn5+fn58dHR0dHR2fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0d + n5+fnx0dn5+fn5+fra2fn5+fn58dHR0dn5+fn5+fHR0dHR0dn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0d + HR0dHZ+fHR2fn5+fn5+fn62tra2fn62tn58dHZ+fHR2fnx0dHR0dHR0dHR2fn5+fn58dHR0dHR0dHR0d + HR0dHR0dHR2fnx0dn5+fn5+fn5+tra2tn5+trZ+fHR2fnx0dn58dHR0dHR0dHR0dn5+fn5+fHR0dHR0d + n58dHR0dHR0dHR0dHR0dHZ+fHR2fn5+fn5+fn5+fn5+trZ+fn5+fn5+fHR0dHR0dHR0dHR0dHR2fnx0d + HR0dHZ+fHR0dHR0dHR0dHR0dHR2fnx0dn5+fn5+fn5+fn5+fra2fn5+fn5+fnx0dHR0dHR0dHR0dHR0d + n58dHR0dHR0dHZ+fHR0dHR0dHR0dHZ+fHR0dHZ+fn5+fn5+fn5+trZ+fn5+fn5+fHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dHR2fnx0dHR2fn5+fn5+fn5+fra2fn5+fn5+fnx0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fn5+fn5+fnx0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn58dHZ+fHR2fn5+fHR0dHR0dHR0dHZ+fn5+fnx0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fHR2fnx0dn5+fnx0dHR0dHR0dHR2fn5+f + n58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fnx0dHR2fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHR0dn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fnx0dHR0dHZ+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHR0dHR2fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHZ+fn58dHZ+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR2fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAIAAAAAAAQAAAQAYAAAAAAAAwAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAIAAAAAAAQAAAQAIAAAAAAAAQAAAAAAAAAAA + AAAAAQAAAAEAAAAA/wAA/wAA/wAAAAD//wD//wAA/wD/AMDAwAD/+PAA1+v6ANT/fwD/AAAA4iuKACoq + pQAAAAAABAQEAAgICAAMDAwAERERABYWFgAcHBwAIiIiACkpKQAzMzMAOTk5AEJCQgBNTU0AVVVVAGBg + YABmZmYAcHBwAICAgACMjIwAlJSUAJmZmQCkpKQArKysALa2tgDAwMAAzMzMANTU1ADa2toA4ODgAOzs + 7AD4+PgA+/v7AP///wAzAAAAZgAAAJkAAADMAAAA/wAAAAAzAAAzMwAAZjMAAJkzAADMMwAA/zMAAABm + AAAzZgAAZmYAAJlmAADMZgAA/2YAAACZAAAzmQAAZpkAAJmZAADMmQAA/5kAAADMAAAzzAAAZswAAJnM + AADMzAAA/8wAAAD/AAAz/wAAZv8AAJn/AADM/wAA//8AAAAAMwAzADMAZgAzAJkAMwDMADMA/wAzAAAz + MwBmMzMAmTMzAMwzMwD/MzMAAGYzADNmMwBmZjMAmWYzAMxmMwD/ZjMAAJkzADOZMwBmmTMAmZkzAMyZ + MwD/mTMAAMwzADPMMwBmzDMAmcwzAMzMMwD/zDMAAP8zADP/MwBm/zMAmf8zAMz/MwD//zMAAABmADMA + ZgBmAGYAmQBmAMwAZgD/AGYAADNmADMzZgBmM2YAmTNmAMwzZgD/M2YAAGZmADNmZgCZZmYAzGZmAP9m + ZgAAmWYAM5lmAGaZZgCZmWYAzJlmAP+ZZgAAzGYAM8xmAGbMZgCZzGYAzMxmAP/MZgAA/2YAM/9mAGb/ + ZgCZ/2YAzP9mAP//ZgAAAJkAMwCZAGYAmQCZAJkAzACZAP8AmQAAM5kAMzOZAGYzmQCZM5kAzDOZAP8z + mQAAZpkAM2aZAGZmmQCZZpkAzGaZAP9mmQAAmZkAM5mZAGaZmQDMmZkA/5mZAAHMmQAzzJkAZsyZAJnM + mQDMzJkA/8yZAAD/mQAz/5kAZv+ZAJn/mQDM/5kA//+ZAAAAzAAzAMwAZgDMAJkAzADMAMwA/wDMAAAz + zAAzM8wAZjPMAJkzzADMM8wA/zPMAABmzAAzZswAZmbMAJlmzADMZswA/2bMAACZzAAzmcwAZpnMAJmZ + zADMmcwA/5nMAADMzAAzzMwAZszMAJnMzAD/zMwAAP/MADP/zABm/8wAmf/MAMz/zAD//8wAAAD/ADMA + /wBmAP8AmQD/AMwA/wD/AP8AADP/ADMz/wBmM/8AmTP/AMwz/wD/M/8AAGb/ADNm/wBmZv8AmWb/AMxm + /wD/Zv8AAJn/ADOZ/wBmmf8AmZn/AMyZ/wD/mf8AAMz/ADPM/wBmzP8Amcz/AMzM/wD/zP8AAP//ADP/ + /wBm//8Amf//AMz//wCfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pra2trZ+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+tra2tn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD62tra2fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+f + n5+tra2tra2tra2tra2fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8P + Dw+fn5+fn5+fn62tra2tra2tra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+f + n58PDw8PDw8PD5+fn5+fn5+fra2tra2tra2tra2tn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8P + Dw+fn5+fDw8PDw8PDw+tra2tra2tra2tra2tra2tra2tra2tra2tra2tn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PD5+fn58PDw8PDw8PD62tra2tra2tra2tra2tra2tra2tra2tra2tra2fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8Pn5+fnw8PDw8PDw8Pra2tra2tra2tra2tra2tra2tra2tra2tra2trZ+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw+fn5+fDw8PDw8PDw+tra2tra2tra2tra2tra2tra2tra2t + ra2tra2tn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+fn58PDw8PDw8PD62tra2tra2tra2tra2t + ra2tra2tra2tra2tra2fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PD62t + ra2tra2tra2trZ+fn5+tra2tra2trZ+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8Pra2tra2tra2tra2tn5+fn62tra2tra2tn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PDw8PDw+tra2tra2tra2tra2fn5+fra2tra2tra2fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n58PDw8Pn5+fn5+fn58PDw8PDw8PD62tra2tra2tra2tra2tra2fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pra2tra2tra2tra2tra2trZ+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw+tra2tra2tra2tra2tra2tn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PD62tra2tra2tra2tra2t + ra2fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pra2tra2t + ra2tra2tra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw+tra2tDw8PD5+fn5+tra2tn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PD62tra0PDw8Pn5+fn62tra2fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pra2trQ8PDw+fn5+fra2trZ+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw+tra2tn5+fn5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PD62tra2fn5+fn5+fnw8PDw+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8Pra2trZ+fn5+fn5+fDw8PD5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw+tra2tn5+fn5+f + n58PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PD62t + ra2fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PD5+fn5+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8Pn5+fn62t + ra0PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw+fn5+fra2trQ8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PD5+fn5+tra2tDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PD5+fn58PDw8PDw8PD5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fDw8PD5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+fn58PDw8PDw8PD5+f + n58PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n58PDw8Pn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fnw8P + Dw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fnw8PDw+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fn5+fn62tra2fn5+fn5+fnw8PDw+tra2tn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fDw8PD62t + ra2fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+tra2tn5+fn5+f + n58PDw8Pra2trZ+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+fn5+fn5+fn5+fn62t + ra2fn5+fn5+fn5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+f + n5+fn5+fra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8P + Dw+fn5+fn5+fn5+fn5+tra2tn5+fn5+fn5+fn5+fDw8PDw8PDw+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PD5+fn5+fn5+fn5+fn62tra2fn5+fn5+fn5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn5+tra2tra2trZ+fn5+tra2tn5+fnw8P + Dw+fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn62tra2tra2tn5+fn62t + ra2fn5+fDw8PD5+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fra2tra2t + ra2fn5+fra2trZ+fn58PDw8Pn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+tra2tn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn62tra2fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+tra2tn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fra2trZ+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+tra2tn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn62tra2fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8Pn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n58PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + + + \ No newline at end of file diff --git a/Server.MirForms/Account/PlayerInfoForm.Designer.cs b/Server.MirForms/Account/PlayerInfoForm.Designer.cs new file mode 100644 index 0000000..a17dad8 --- /dev/null +++ b/Server.MirForms/Account/PlayerInfoForm.Designer.cs @@ -0,0 +1,1008 @@ +namespace Server +{ + partial class PlayerInfoForm + { + /// + /// 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(PlayerInfoForm)); + PetInfoTab = new TabPage(); + PetView = new ListView(); + PetName = new ColumnHeader(); + Level = new ColumnHeader(); + HP = new ColumnHeader(); + AC = new ColumnHeader(); + AMC = new ColumnHeader(); + DC = new ColumnHeader(); + Location = new ColumnHeader(); + MagicInfoTab = new TabPage(); + MagicListViewNF = new CustomFormControl.ListViewNF(); + MagicNameHeader = new ColumnHeader(); + MagicLevelHeader = new ColumnHeader(); + MagicExperienceHeader = new ColumnHeader(); + Key = new ColumnHeader(); + ItemInfoTab = new TabPage(); + PlayerItemsTreeView = new TreeView(); + PlayerItemInfoListViewNF = new CustomFormControl.ListViewNF(); + UIDHeader = new ColumnHeader(); + LocationHeader = new ColumnHeader(); + NameHeader = new ColumnHeader(); + CountHeader = new ColumnHeader(); + DurabilityHeader = new ColumnHeader(); + QuestInfoTab = new TabPage(); + QuestInfoListViewNF = new CustomFormControl.ListViewNF(); + QuestIndexHeader = new ColumnHeader(); + QuestStatusHeader = new ColumnHeader(); + PlayerInfoTab = new TabPage(); + groupBox4 = new GroupBox(); + label6 = new Label(); + OnlineTimeLabel = new Label(); + label5 = new Label(); + label8 = new Label(); + CurrentMapLabel = new Label(); + CurrentIPLabel = new Label(); + label7 = new Label(); + CurrentXY = new Label(); + groupBox3 = new GroupBox(); + SendMessageButton = new Button(); + SendMessageTextBox = new TextBox(); + groupBox2 = new GroupBox(); + KickButton = new Button(); + KillButton = new Button(); + KillPetsButton = new Button(); + ChatBanButton = new Button(); + ChatBanExpiryTextBox = new TextBox(); + label9 = new Label(); + SafeZoneButton = new Button(); + OpenAccountButton = new Button(); + AccountBanButton = new Button(); + groupBox1 = new GroupBox(); + LevelTextBox = new TextBox(); + UpdateButton = new Button(); + IndexTextBox = new TextBox(); + NameTextBox = new TextBox(); + label3 = new Label(); + label1 = new Label(); + label2 = new Label(); + StatsLabel = new Label(); + ExpTextBox = new TextBox(); + ACBox = new TextBox(); + label12 = new Label(); + AMCBox = new TextBox(); + PKPointsTextBox = new TextBox(); + DCBox = new TextBox(); + PKPoints = new Label(); + MCBox = new TextBox(); + GoldTextBox = new TextBox(); + SCBox = new TextBox(); + Gold = new Label(); + ACCBox = new TextBox(); + GameGoldTextBox = new TextBox(); + AGILBox = new TextBox(); + GameGold = new Label(); + ATKSPDBox = new TextBox(); + SearchBox = new GroupBox(); + ResultLabel = new Label(); + FlagSearch = new Label(); + FlagSearchBox = new NumericUpDown(); + tabControl1 = new TabControl(); + PetInfoTab.SuspendLayout(); + MagicInfoTab.SuspendLayout(); + ItemInfoTab.SuspendLayout(); + QuestInfoTab.SuspendLayout(); + PlayerInfoTab.SuspendLayout(); + groupBox4.SuspendLayout(); + groupBox3.SuspendLayout(); + groupBox2.SuspendLayout(); + groupBox1.SuspendLayout(); + SearchBox.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)FlagSearchBox).BeginInit(); + tabControl1.SuspendLayout(); + SuspendLayout(); + // + // PetInfoTab + // + PetInfoTab.Controls.Add(PetView); + PetInfoTab.Location = new Point(4, 24); + PetInfoTab.Name = "PetInfoTab"; + PetInfoTab.Padding = new Padding(3); + PetInfoTab.Size = new Size(701, 443); + PetInfoTab.TabIndex = 4; + PetInfoTab.Text = "Pet Info"; + PetInfoTab.UseVisualStyleBackColor = true; + // + // PetView + // + PetView.Columns.AddRange(new ColumnHeader[] { PetName, Level, HP, AC, AMC, DC, Location }); + PetView.Dock = DockStyle.Fill; + PetView.GridLines = true; + PetView.Location = new Point(3, 3); + PetView.Name = "PetView"; + PetView.Size = new Size(695, 437); + PetView.TabIndex = 0; + PetView.UseCompatibleStateImageBehavior = false; + PetView.View = View.Details; + // + // PetName + // + PetName.Text = "Name"; + PetName.Width = 150; + // + // Level + // + Level.Text = "Level"; + // + // HP + // + HP.Text = "HP"; + // + // AC + // + AC.Text = "AC"; + // + // AMC + // + AMC.Text = "AMC"; + // + // DC + // + DC.Text = "DC"; + // + // Location + // + Location.Text = "Location"; + Location.Width = 240; + // + // MagicInfoTab + // + MagicInfoTab.Controls.Add(MagicListViewNF); + MagicInfoTab.Location = new Point(4, 24); + MagicInfoTab.Name = "MagicInfoTab"; + MagicInfoTab.Size = new Size(701, 443); + MagicInfoTab.TabIndex = 3; + MagicInfoTab.Text = "Magic Info"; + MagicInfoTab.UseVisualStyleBackColor = true; + // + // MagicListViewNF + // + MagicListViewNF.Columns.AddRange(new ColumnHeader[] { MagicNameHeader, MagicLevelHeader, MagicExperienceHeader, Key }); + MagicListViewNF.Dock = DockStyle.Fill; + MagicListViewNF.GridLines = true; + MagicListViewNF.Location = new Point(0, 0); + MagicListViewNF.Name = "MagicListViewNF"; + MagicListViewNF.Size = new Size(701, 443); + MagicListViewNF.TabIndex = 1; + MagicListViewNF.UseCompatibleStateImageBehavior = false; + MagicListViewNF.View = View.Details; + // + // MagicNameHeader + // + MagicNameHeader.Text = "Spell Name"; + MagicNameHeader.Width = 150; + // + // MagicLevelHeader + // + MagicLevelHeader.Text = "Level"; + MagicLevelHeader.Width = 50; + // + // MagicExperienceHeader + // + MagicExperienceHeader.Text = "Experience"; + MagicExperienceHeader.Width = 150; + // + // Key + // + Key.Text = "Key"; + Key.Width = 80; + // + // ItemInfoTab + // + ItemInfoTab.Controls.Add(PlayerItemInfoListViewNF); + ItemInfoTab.Controls.Add(PlayerItemsTreeView); + ItemInfoTab.Location = new Point(4, 24); + ItemInfoTab.Name = "ItemInfoTab"; + ItemInfoTab.Size = new Size(701, 443); + ItemInfoTab.TabIndex = 2; + ItemInfoTab.Text = "Item Info"; + ItemInfoTab.UseVisualStyleBackColor = true; + // + // PlayerItemsTreeView + // + PlayerItemsTreeView.Dock = DockStyle.Fill; + PlayerItemsTreeView.Location = new Point(0, 0); + PlayerItemsTreeView.Name = "PlayerItemsTreeView"; + PlayerItemsTreeView.Size = new Size(701, 443); + PlayerItemsTreeView.TabIndex = 1; + // + // PlayerItemInfoListViewNF + // + PlayerItemInfoListViewNF.Columns.AddRange(new ColumnHeader[] { UIDHeader, LocationHeader, NameHeader, CountHeader, DurabilityHeader }); + PlayerItemInfoListViewNF.Dock = DockStyle.Fill; + PlayerItemInfoListViewNF.GridLines = true; + PlayerItemInfoListViewNF.Location = new Point(0, 0); + PlayerItemInfoListViewNF.Name = "PlayerItemInfoListViewNF"; + PlayerItemInfoListViewNF.Size = new Size(701, 443); + PlayerItemInfoListViewNF.TabIndex = 3; + PlayerItemInfoListViewNF.UseCompatibleStateImageBehavior = false; + PlayerItemInfoListViewNF.View = View.Details; + // + // UIDHeader + // + UIDHeader.Text = "UID"; + UIDHeader.Width = 100; + // + // LocationHeader + // + LocationHeader.Text = "Location"; + LocationHeader.Width = 150; + // + // NameHeader + // + NameHeader.Text = "Name"; + NameHeader.Width = 150; + // + // CountHeader + // + CountHeader.Text = "Count"; + CountHeader.Width = 80; + // + // DurabilityHeader + // + DurabilityHeader.Text = "Durability"; + DurabilityHeader.Width = 90; + // + // QuestInfoTab + // + QuestInfoTab.Controls.Add(QuestInfoListViewNF); + QuestInfoTab.Location = new Point(4, 24); + QuestInfoTab.Name = "QuestInfoTab"; + QuestInfoTab.Padding = new Padding(3); + QuestInfoTab.Size = new Size(701, 443); + QuestInfoTab.TabIndex = 1; + QuestInfoTab.Text = "Quest Info"; + QuestInfoTab.UseVisualStyleBackColor = true; + // + // QuestInfoListViewNF + // + QuestInfoListViewNF.Columns.AddRange(new ColumnHeader[] { QuestIndexHeader, QuestStatusHeader }); + QuestInfoListViewNF.Dock = DockStyle.Fill; + QuestInfoListViewNF.GridLines = true; + QuestInfoListViewNF.Location = new Point(3, 3); + QuestInfoListViewNF.Name = "QuestInfoListViewNF"; + QuestInfoListViewNF.Size = new Size(695, 437); + QuestInfoListViewNF.TabIndex = 0; + QuestInfoListViewNF.UseCompatibleStateImageBehavior = false; + QuestInfoListViewNF.View = View.Details; + // + // QuestIndexHeader + // + QuestIndexHeader.Text = "Index"; + QuestIndexHeader.Width = 100; + // + // QuestStatusHeader + // + QuestStatusHeader.Text = "Status"; + QuestStatusHeader.Width = 100; + // + // PlayerInfoTab + // + PlayerInfoTab.Controls.Add(SearchBox); + PlayerInfoTab.Controls.Add(groupBox1); + PlayerInfoTab.Controls.Add(groupBox2); + PlayerInfoTab.Controls.Add(groupBox3); + PlayerInfoTab.Controls.Add(groupBox4); + PlayerInfoTab.Location = new Point(4, 24); + PlayerInfoTab.Name = "PlayerInfoTab"; + PlayerInfoTab.Padding = new Padding(3); + PlayerInfoTab.Size = new Size(701, 443); + PlayerInfoTab.TabIndex = 0; + PlayerInfoTab.Text = "Player Info"; + PlayerInfoTab.UseVisualStyleBackColor = true; + // + // groupBox4 + // + groupBox4.Controls.Add(CurrentXY); + groupBox4.Controls.Add(label7); + groupBox4.Controls.Add(CurrentIPLabel); + groupBox4.Controls.Add(CurrentMapLabel); + groupBox4.Controls.Add(label8); + groupBox4.Controls.Add(label5); + groupBox4.Controls.Add(OnlineTimeLabel); + groupBox4.Controls.Add(label6); + groupBox4.Location = new Point(21, 272); + groupBox4.Margin = new Padding(4, 3, 4, 3); + groupBox4.Name = "groupBox4"; + groupBox4.Padding = new Padding(4, 3, 4, 3); + groupBox4.Size = new Size(335, 108); + groupBox4.TabIndex = 25; + groupBox4.TabStop = false; + groupBox4.Text = "Details"; + // + // label6 + // + label6.AutoSize = true; + label6.Location = new Point(10, 59); + label6.Margin = new Padding(4, 0, 4, 0); + label6.Name = "label6"; + label6.Size = new Size(80, 15); + label6.TabIndex = 19; + label6.Text = "Online Time : "; + // + // OnlineTimeLabel + // + OnlineTimeLabel.AutoSize = true; + OnlineTimeLabel.Location = new Point(132, 59); + OnlineTimeLabel.Margin = new Padding(4, 0, 4, 0); + OnlineTimeLabel.Name = "OnlineTimeLabel"; + OnlineTimeLabel.Size = new Size(70, 15); + OnlineTimeLabel.TabIndex = 20; + OnlineTimeLabel.Text = "$onlinetime"; + // + // label5 + // + label5.AutoSize = true; + label5.Location = new Point(10, 19); + label5.Margin = new Padding(4, 0, 4, 0); + label5.Name = "label5"; + label5.Size = new Size(83, 15); + label5.TabIndex = 16; + label5.Text = "Current Map : "; + // + // label8 + // + label8.AutoSize = true; + label8.Location = new Point(10, 79); + label8.Margin = new Padding(4, 0, 4, 0); + label8.Name = "label8"; + label8.Size = new Size(69, 15); + label8.TabIndex = 23; + label8.Text = "Current IP : "; + // + // CurrentMapLabel + // + CurrentMapLabel.AutoSize = true; + CurrentMapLabel.Location = new Point(132, 19); + CurrentMapLabel.Margin = new Padding(4, 0, 4, 0); + CurrentMapLabel.Name = "CurrentMapLabel"; + CurrentMapLabel.Size = new Size(37, 15); + CurrentMapLabel.TabIndex = 15; + CurrentMapLabel.Text = "$map"; + // + // CurrentIPLabel + // + CurrentIPLabel.AutoSize = true; + CurrentIPLabel.Location = new Point(132, 79); + CurrentIPLabel.Margin = new Padding(4, 0, 4, 0); + CurrentIPLabel.Name = "CurrentIPLabel"; + CurrentIPLabel.Size = new Size(23, 15); + CurrentIPLabel.TabIndex = 24; + CurrentIPLabel.Text = "$IP"; + CurrentIPLabel.Click += CurrentIPLabel_Click; + // + // label7 + // + label7.AutoSize = true; + label7.Location = new Point(10, 39); + label7.Margin = new Padding(4, 0, 4, 0); + label7.Name = "label7"; + label7.Size = new Size(105, 15); + label7.TabIndex = 26; + label7.Text = "Current Location : "; + // + // CurrentXY + // + CurrentXY.AutoSize = true; + CurrentXY.Location = new Point(133, 39); + CurrentXY.Margin = new Padding(4, 0, 4, 0); + CurrentXY.Name = "CurrentXY"; + CurrentXY.Size = new Size(30, 15); + CurrentXY.TabIndex = 25; + CurrentXY.Text = "$x/y"; + // + // groupBox3 + // + groupBox3.Controls.Add(SendMessageTextBox); + groupBox3.Controls.Add(SendMessageButton); + groupBox3.Location = new Point(21, 386); + groupBox3.Margin = new Padding(4, 3, 4, 3); + groupBox3.Name = "groupBox3"; + groupBox3.Padding = new Padding(4, 3, 4, 3); + groupBox3.Size = new Size(436, 57); + groupBox3.TabIndex = 13; + groupBox3.TabStop = false; + groupBox3.Text = "Send Message"; + // + // SendMessageButton + // + SendMessageButton.Location = new Point(362, 20); + SendMessageButton.Margin = new Padding(4, 3, 4, 3); + SendMessageButton.Name = "SendMessageButton"; + SendMessageButton.Size = new Size(68, 27); + SendMessageButton.TabIndex = 10; + SendMessageButton.Text = "Send"; + SendMessageButton.UseVisualStyleBackColor = true; + SendMessageButton.Click += SendMessageButton_Click; + // + // SendMessageTextBox + // + SendMessageTextBox.Location = new Point(7, 20); + SendMessageTextBox.Margin = new Padding(4, 3, 4, 3); + SendMessageTextBox.Name = "SendMessageTextBox"; + SendMessageTextBox.Size = new Size(347, 23); + SendMessageTextBox.TabIndex = 9; + // + // groupBox2 + // + groupBox2.Controls.Add(AccountBanButton); + groupBox2.Controls.Add(OpenAccountButton); + groupBox2.Controls.Add(SafeZoneButton); + groupBox2.Controls.Add(label9); + groupBox2.Controls.Add(ChatBanExpiryTextBox); + groupBox2.Controls.Add(ChatBanButton); + groupBox2.Controls.Add(KillPetsButton); + groupBox2.Controls.Add(KillButton); + groupBox2.Controls.Add(KickButton); + groupBox2.Location = new Point(369, 11); + groupBox2.Margin = new Padding(4, 3, 4, 3); + groupBox2.Name = "groupBox2"; + groupBox2.Padding = new Padding(4, 3, 4, 3); + groupBox2.Size = new Size(324, 157); + groupBox2.TabIndex = 12; + groupBox2.TabStop = false; + groupBox2.Text = "Actions"; + // + // KickButton + // + KickButton.Location = new Point(7, 22); + KickButton.Margin = new Padding(4, 3, 4, 3); + KickButton.Name = "KickButton"; + KickButton.Size = new Size(88, 27); + KickButton.TabIndex = 8; + KickButton.Text = "Kick Player"; + KickButton.UseVisualStyleBackColor = true; + KickButton.Click += KickButton_Click; + // + // KillButton + // + KillButton.Location = new Point(7, 55); + KillButton.Margin = new Padding(4, 3, 4, 3); + KillButton.Name = "KillButton"; + KillButton.Size = new Size(88, 27); + KillButton.TabIndex = 17; + KillButton.Text = "Kill Player"; + KillButton.UseVisualStyleBackColor = true; + KillButton.Click += KillButton_Click; + // + // KillPetsButton + // + KillPetsButton.Location = new Point(102, 55); + KillPetsButton.Margin = new Padding(4, 3, 4, 3); + KillPetsButton.Name = "KillPetsButton"; + KillPetsButton.Size = new Size(88, 27); + KillPetsButton.TabIndex = 18; + KillPetsButton.Text = "Kill Pets"; + KillPetsButton.UseVisualStyleBackColor = true; + KillPetsButton.Click += KillPetsButton_Click; + // + // ChatBanButton + // + ChatBanButton.Location = new Point(7, 121); + ChatBanButton.Margin = new Padding(4, 3, 4, 3); + ChatBanButton.Name = "ChatBanButton"; + ChatBanButton.Size = new Size(88, 27); + ChatBanButton.TabIndex = 19; + ChatBanButton.Text = "Chat Ban"; + ChatBanButton.UseVisualStyleBackColor = true; + ChatBanButton.Click += ChatBanButton_Click; + // + // ChatBanExpiryTextBox + // + ChatBanExpiryTextBox.Location = new Point(174, 109); + ChatBanExpiryTextBox.Margin = new Padding(4, 3, 4, 3); + ChatBanExpiryTextBox.Name = "ChatBanExpiryTextBox"; + ChatBanExpiryTextBox.Size = new Size(137, 23); + ChatBanExpiryTextBox.TabIndex = 20; + ChatBanExpiryTextBox.TextChanged += ChatBanExpiryTextBox_TextChanged; + // + // label9 + // + label9.AutoSize = true; + label9.Location = new Point(108, 113); + label9.Margin = new Padding(4, 0, 4, 0); + label9.Name = "label9"; + label9.Size = new Size(53, 15); + label9.TabIndex = 21; + label9.Text = "Expires : "; + // + // SafeZoneButton + // + SafeZoneButton.Location = new Point(102, 22); + SafeZoneButton.Margin = new Padding(4, 3, 4, 3); + SafeZoneButton.Name = "SafeZoneButton"; + SafeZoneButton.Size = new Size(88, 27); + SafeZoneButton.TabIndex = 22; + SafeZoneButton.Text = "Safezone"; + SafeZoneButton.UseVisualStyleBackColor = true; + SafeZoneButton.Click += SafeZoneButton_Click; + // + // OpenAccountButton + // + OpenAccountButton.Location = new Point(196, 22); + OpenAccountButton.Margin = new Padding(4, 3, 4, 3); + OpenAccountButton.Name = "OpenAccountButton"; + OpenAccountButton.Size = new Size(115, 27); + OpenAccountButton.TabIndex = 23; + OpenAccountButton.Text = "Open Account"; + OpenAccountButton.UseVisualStyleBackColor = true; + OpenAccountButton.Click += OpenAccountButton_Click; + // + // AccountBanButton + // + AccountBanButton.Location = new Point(8, 88); + AccountBanButton.Margin = new Padding(4, 3, 4, 3); + AccountBanButton.Name = "AccountBanButton"; + AccountBanButton.Size = new Size(88, 27); + AccountBanButton.TabIndex = 24; + AccountBanButton.Text = "Account Ban"; + AccountBanButton.UseVisualStyleBackColor = true; + AccountBanButton.Click += AccountBanButton_Click; + // + // groupBox1 + // + groupBox1.Controls.Add(ATKSPDBox); + groupBox1.Controls.Add(GameGold); + groupBox1.Controls.Add(AGILBox); + groupBox1.Controls.Add(GameGoldTextBox); + groupBox1.Controls.Add(ACCBox); + groupBox1.Controls.Add(Gold); + groupBox1.Controls.Add(SCBox); + groupBox1.Controls.Add(GoldTextBox); + groupBox1.Controls.Add(MCBox); + groupBox1.Controls.Add(PKPoints); + groupBox1.Controls.Add(DCBox); + groupBox1.Controls.Add(PKPointsTextBox); + groupBox1.Controls.Add(AMCBox); + groupBox1.Controls.Add(label12); + groupBox1.Controls.Add(ACBox); + groupBox1.Controls.Add(ExpTextBox); + groupBox1.Controls.Add(StatsLabel); + groupBox1.Controls.Add(label2); + groupBox1.Controls.Add(label1); + groupBox1.Controls.Add(label3); + groupBox1.Controls.Add(NameTextBox); + groupBox1.Controls.Add(IndexTextBox); + groupBox1.Controls.Add(UpdateButton); + groupBox1.Controls.Add(LevelTextBox); + groupBox1.Location = new Point(21, 6); + groupBox1.Margin = new Padding(4, 3, 4, 3); + groupBox1.Name = "groupBox1"; + groupBox1.Padding = new Padding(4, 3, 4, 3); + groupBox1.Size = new Size(340, 254); + groupBox1.TabIndex = 11; + groupBox1.TabStop = false; + groupBox1.Text = "Character Info"; + // + // LevelTextBox + // + LevelTextBox.Location = new Point(70, 82); + LevelTextBox.Margin = new Padding(4, 3, 4, 3); + LevelTextBox.Name = "LevelTextBox"; + LevelTextBox.Size = new Size(116, 23); + LevelTextBox.TabIndex = 6; + // + // UpdateButton + // + UpdateButton.Location = new Point(83, 225); + UpdateButton.Margin = new Padding(4, 3, 4, 3); + UpdateButton.Name = "UpdateButton"; + UpdateButton.Size = new Size(88, 27); + UpdateButton.TabIndex = 7; + UpdateButton.Text = "Update"; + UpdateButton.UseVisualStyleBackColor = true; + UpdateButton.Click += UpdateButton_Click; + // + // IndexTextBox + // + IndexTextBox.Enabled = false; + IndexTextBox.Location = new Point(70, 20); + IndexTextBox.Margin = new Padding(4, 3, 4, 3); + IndexTextBox.Name = "IndexTextBox"; + IndexTextBox.ReadOnly = true; + IndexTextBox.Size = new Size(116, 23); + IndexTextBox.TabIndex = 5; + // + // NameTextBox + // + NameTextBox.Location = new Point(70, 50); + NameTextBox.Margin = new Padding(4, 3, 4, 3); + NameTextBox.Name = "NameTextBox"; + NameTextBox.Size = new Size(116, 23); + NameTextBox.TabIndex = 4; + // + // label3 + // + label3.AutoSize = true; + label3.Location = new Point(10, 85); + label3.Margin = new Padding(4, 0, 4, 0); + label3.Name = "label3"; + label3.Size = new Size(43, 15); + label3.TabIndex = 3; + label3.Text = "Level : "; + // + // label1 + // + label1.AutoSize = true; + label1.Location = new Point(10, 53); + label1.Margin = new Padding(4, 0, 4, 0); + label1.Name = "label1"; + label1.Size = new Size(48, 15); + label1.TabIndex = 1; + label1.Text = "Name : "; + // + // label2 + // + label2.AutoSize = true; + label2.Location = new Point(10, 23); + label2.Margin = new Padding(4, 0, 4, 0); + label2.Name = "label2"; + label2.Size = new Size(45, 15); + label2.TabIndex = 2; + label2.Text = "Index : "; + // + // StatsLabel + // + StatsLabel.AutoSize = true; + StatsLabel.Location = new Point(194, 23); + StatsLabel.Margin = new Padding(4, 0, 4, 0); + StatsLabel.Name = "StatsLabel"; + StatsLabel.Size = new Size(57, 225); + StatsLabel.TabIndex = 16; + StatsLabel.Text = "AC :\r\n\r\nAMC :\r\n\r\nDC :\r\n\r\nMC :\r\n\r\nSC :\r\n\r\nACC :\r\n\r\nAGIL :\r\n\r\nATK SPD :"; + // + // ExpTextBox + // + ExpTextBox.Location = new Point(70, 111); + ExpTextBox.Margin = new Padding(4, 3, 4, 3); + ExpTextBox.Name = "ExpTextBox"; + ExpTextBox.ReadOnly = true; + ExpTextBox.Size = new Size(116, 23); + ExpTextBox.TabIndex = 9; + // + // ACBox + // + ACBox.Enabled = false; + ACBox.Location = new Point(258, 20); + ACBox.Margin = new Padding(4, 3, 4, 3); + ACBox.Name = "ACBox"; + ACBox.ReadOnly = true; + ACBox.Size = new Size(73, 23); + ACBox.TabIndex = 16; + // + // label12 + // + label12.AutoSize = true; + label12.Location = new Point(10, 114); + label12.Margin = new Padding(4, 0, 4, 0); + label12.Name = "label12"; + label12.Size = new Size(36, 15); + label12.TabIndex = 8; + label12.Text = "EXP : "; + // + // AMCBox + // + AMCBox.Enabled = false; + AMCBox.Location = new Point(258, 49); + AMCBox.Margin = new Padding(4, 3, 4, 3); + AMCBox.Name = "AMCBox"; + AMCBox.ReadOnly = true; + AMCBox.Size = new Size(73, 23); + AMCBox.TabIndex = 17; + // + // PKPointsTextBox + // + PKPointsTextBox.Location = new Point(70, 140); + PKPointsTextBox.Margin = new Padding(4, 3, 4, 3); + PKPointsTextBox.Name = "PKPointsTextBox"; + PKPointsTextBox.Size = new Size(116, 23); + PKPointsTextBox.TabIndex = 11; + // + // DCBox + // + DCBox.Enabled = false; + DCBox.Location = new Point(258, 81); + DCBox.Margin = new Padding(4, 3, 4, 3); + DCBox.Name = "DCBox"; + DCBox.ReadOnly = true; + DCBox.Size = new Size(73, 23); + DCBox.TabIndex = 18; + // + // PKPoints + // + PKPoints.AutoSize = true; + PKPoints.Location = new Point(10, 143); + PKPoints.Margin = new Padding(4, 0, 4, 0); + PKPoints.Name = "PKPoints"; + PKPoints.Size = new Size(58, 15); + PKPoints.TabIndex = 10; + PKPoints.Text = "PKPoint : "; + // + // MCBox + // + MCBox.Enabled = false; + MCBox.Location = new Point(258, 110); + MCBox.Margin = new Padding(4, 3, 4, 3); + MCBox.Name = "MCBox"; + MCBox.ReadOnly = true; + MCBox.Size = new Size(73, 23); + MCBox.TabIndex = 19; + // + // GoldTextBox + // + GoldTextBox.Location = new Point(70, 169); + GoldTextBox.Margin = new Padding(4, 3, 4, 3); + GoldTextBox.Name = "GoldTextBox"; + GoldTextBox.Size = new Size(116, 23); + GoldTextBox.TabIndex = 13; + // + // SCBox + // + SCBox.Enabled = false; + SCBox.Location = new Point(258, 139); + SCBox.Margin = new Padding(4, 3, 4, 3); + SCBox.Name = "SCBox"; + SCBox.ReadOnly = true; + SCBox.Size = new Size(73, 23); + SCBox.TabIndex = 20; + // + // Gold + // + Gold.AutoSize = true; + Gold.Location = new Point(10, 172); + Gold.Margin = new Padding(4, 0, 4, 0); + Gold.Name = "Gold"; + Gold.Size = new Size(41, 15); + Gold.TabIndex = 12; + Gold.Text = "Gold : "; + // + // ACCBox + // + ACCBox.Enabled = false; + ACCBox.Location = new Point(258, 168); + ACCBox.Margin = new Padding(4, 3, 4, 3); + ACCBox.Name = "ACCBox"; + ACCBox.ReadOnly = true; + ACCBox.Size = new Size(73, 23); + ACCBox.TabIndex = 21; + // + // GameGoldTextBox + // + GameGoldTextBox.Location = new Point(70, 198); + GameGoldTextBox.Margin = new Padding(4, 3, 4, 3); + GameGoldTextBox.Name = "GameGoldTextBox"; + GameGoldTextBox.Size = new Size(116, 23); + GameGoldTextBox.TabIndex = 15; + // + // AGILBox + // + AGILBox.Enabled = false; + AGILBox.Location = new Point(258, 200); + AGILBox.Margin = new Padding(4, 3, 4, 3); + AGILBox.Name = "AGILBox"; + AGILBox.ReadOnly = true; + AGILBox.Size = new Size(73, 23); + AGILBox.TabIndex = 22; + // + // GameGold + // + GameGold.AutoSize = true; + GameGold.Font = new Font("Segoe UI", 8F); + GameGold.Location = new Point(10, 202); + GameGold.Margin = new Padding(4, 0, 4, 0); + GameGold.Name = "GameGold"; + GameGold.Size = new Size(52, 13); + GameGold.TabIndex = 14; + GameGold.Text = "Credits : "; + // + // ATKSPDBox + // + ATKSPDBox.Enabled = false; + ATKSPDBox.Location = new Point(258, 229); + ATKSPDBox.Margin = new Padding(4, 3, 4, 3); + ATKSPDBox.Name = "ATKSPDBox"; + ATKSPDBox.ReadOnly = true; + ATKSPDBox.Size = new Size(73, 23); + ATKSPDBox.TabIndex = 23; + // + // SearchBox + // + SearchBox.Controls.Add(FlagSearchBox); + SearchBox.Controls.Add(FlagSearch); + SearchBox.Controls.Add(ResultLabel); + SearchBox.Location = new Point(369, 178); + SearchBox.Name = "SearchBox"; + SearchBox.Size = new Size(183, 82); + SearchBox.TabIndex = 46; + SearchBox.TabStop = false; + SearchBox.Text = "Search"; + // + // ResultLabel + // + ResultLabel.AutoSize = true; + ResultLabel.Location = new Point(36, 63); + ResultLabel.Name = "ResultLabel"; + ResultLabel.Size = new Size(0, 15); + ResultLabel.TabIndex = 27; + // + // FlagSearch + // + FlagSearch.AutoSize = true; + FlagSearch.Location = new Point(54, 19); + FlagSearch.Name = "FlagSearch"; + FlagSearch.Size = new Size(67, 15); + FlagSearch.TabIndex = 25; + FlagSearch.Text = "Flag Search"; + // + // FlagSearchBox + // + FlagSearchBox.Location = new Point(33, 39); + FlagSearchBox.Name = "FlagSearchBox"; + FlagSearchBox.Size = new Size(120, 23); + FlagSearchBox.TabIndex = 45; + FlagSearchBox.ValueChanged += FlagSearchBox_ValueChanged; + // + // tabControl1 + // + tabControl1.Controls.Add(PlayerInfoTab); + tabControl1.Controls.Add(QuestInfoTab); + tabControl1.Controls.Add(ItemInfoTab); + tabControl1.Controls.Add(MagicInfoTab); + tabControl1.Controls.Add(PetInfoTab); + tabControl1.Dock = DockStyle.Fill; + tabControl1.Location = new Point(0, 0); + tabControl1.Name = "tabControl1"; + tabControl1.SelectedIndex = 0; + tabControl1.Size = new Size(709, 471); + tabControl1.TabIndex = 45; + tabControl1.SelectedIndexChanged += tabControl1_SelectedIndexChanged; + // + // PlayerInfoForm + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(709, 471); + Controls.Add(tabControl1); + Icon = (Icon)resources.GetObject("$this.Icon"); + Margin = new Padding(4, 3, 4, 3); + Name = "PlayerInfoForm"; + Text = "Player Info Form"; + PetInfoTab.ResumeLayout(false); + MagicInfoTab.ResumeLayout(false); + ItemInfoTab.ResumeLayout(false); + QuestInfoTab.ResumeLayout(false); + PlayerInfoTab.ResumeLayout(false); + groupBox4.ResumeLayout(false); + groupBox4.PerformLayout(); + groupBox3.ResumeLayout(false); + groupBox3.PerformLayout(); + groupBox2.ResumeLayout(false); + groupBox2.PerformLayout(); + groupBox1.ResumeLayout(false); + groupBox1.PerformLayout(); + SearchBox.ResumeLayout(false); + SearchBox.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)FlagSearchBox).EndInit(); + tabControl1.ResumeLayout(false); + ResumeLayout(false); + } + + #endregion + private Label SCLabel; + private Label MCLabel; + private Label DCLabel; + private Label AMCLabel; + private GroupBox Pets; + private TabPage PetInfoTab; + private ListView PetView; + private ColumnHeader PetName; + private ColumnHeader Level; + private ColumnHeader HP; + private ColumnHeader AC; + private ColumnHeader AMC; + private ColumnHeader DC; + private ColumnHeader Location; + private TabPage MagicInfoTab; + private CustomFormControl.ListViewNF MagicListViewNF; + private ColumnHeader MagicNameHeader; + private ColumnHeader MagicLevelHeader; + private ColumnHeader MagicExperienceHeader; + private ColumnHeader Key; + private TabPage ItemInfoTab; + private CustomFormControl.ListViewNF PlayerItemInfoListViewNF; + private ColumnHeader UIDHeader; + private ColumnHeader LocationHeader; + private ColumnHeader NameHeader; + private ColumnHeader CountHeader; + private ColumnHeader DurabilityHeader; + private TreeView PlayerItemsTreeView; + private TabPage QuestInfoTab; + private CustomFormControl.ListViewNF QuestInfoListViewNF; + private ColumnHeader QuestIndexHeader; + private ColumnHeader QuestStatusHeader; + private TabPage PlayerInfoTab; + private GroupBox SearchBox; + private NumericUpDown FlagSearchBox; + private Label FlagSearch; + private Label ResultLabel; + private GroupBox groupBox1; + private TextBox ATKSPDBox; + private Label GameGold; + private TextBox AGILBox; + private TextBox GameGoldTextBox; + private TextBox ACCBox; + private Label Gold; + private TextBox SCBox; + private TextBox GoldTextBox; + private TextBox MCBox; + private Label PKPoints; + private TextBox DCBox; + private TextBox PKPointsTextBox; + private TextBox AMCBox; + private Label label12; + private TextBox ACBox; + private TextBox ExpTextBox; + private Label StatsLabel; + private Label label2; + private Label label1; + private Label label3; + private TextBox NameTextBox; + private TextBox IndexTextBox; + private Button UpdateButton; + private TextBox LevelTextBox; + private GroupBox groupBox2; + private Button AccountBanButton; + private Button OpenAccountButton; + private Button SafeZoneButton; + private Label label9; + private TextBox ChatBanExpiryTextBox; + private Button ChatBanButton; + private Button KillPetsButton; + private Button KillButton; + private Button KickButton; + private GroupBox groupBox3; + private TextBox SendMessageTextBox; + private Button SendMessageButton; + private GroupBox groupBox4; + private Label CurrentXY; + private Label label7; + private Label CurrentIPLabel; + private Label CurrentMapLabel; + private Label label8; + private Label label5; + private Label OnlineTimeLabel; + private Label label6; + private TabControl tabControl1; + } +} \ No newline at end of file diff --git a/Server.MirForms/Account/PlayerInfoForm.cs b/Server.MirForms/Account/PlayerInfoForm.cs new file mode 100644 index 0000000..043152d --- /dev/null +++ b/Server.MirForms/Account/PlayerInfoForm.cs @@ -0,0 +1,462 @@ +using Server.Database; +using Server.MirDatabase; +using Server.MirObjects; +using System.Numerics; +using System.Security.Principal; +using static System.Windows.Forms.VisualStyles.VisualStyleElement.StartPanel; + +namespace Server +{ + public partial class PlayerInfoForm : Form + { + CharacterInfo Character = null; + + public PlayerInfoForm() + { + InitializeComponent(); + } + + public PlayerInfoForm(uint playerId) + { + InitializeComponent(); + + PlayerObject player = SMain.Envir.GetPlayer(playerId); + + if (player == null) + { + Close(); + return; + } + + Character = SMain.Envir.GetCharacterInfo(player.Name); + + UpdateTabs(); + } + + #region PlayerInfo + private void UpdatePlayerInfo() + { + IndexTextBox.Text = Character.Index.ToString(); + NameTextBox.Text = Character.Name; + LevelTextBox.Text = Character.Level.ToString(); + PKPointsTextBox.Text = Character.PKPoints.ToString(); + GoldTextBox.Text = $"{Character.AccountInfo.Gold:n0}"; + GameGoldTextBox.Text = String.Format("{0:n0}", Character.AccountInfo.Credit); + + + + if (Character?.Player != null) + { + CurrentMapLabel.Text = $"{Character.Player.CurrentMap.Info.Title} / {Character.Player.CurrentMap.Info.FileName}"; + CurrentXY.Text = $"X:{Character.CurrentLocation.X}: Y:{Character.CurrentLocation.Y}"; + + ExpTextBox.Text = $"{string.Format("{0:#0.##%}", Character.Player.Experience / (double)Character.Player.MaxExperience)}"; + ACBox.Text = $"{Character.Player.Stats[Stat.MinAC]}-{Character.Player.Stats[Stat.MaxAC]}"; + AMCBox.Text = $"{Character.Player.Stats[Stat.MinMAC]}-{Character.Player.Stats[Stat.MaxMAC]}"; + DCBox.Text = $"{Character.Player.Stats[Stat.MinDC]}-{Character.Player.Stats[Stat.MaxDC]}"; + MCBox.Text = $"{Character.Player.Stats[Stat.MinMC]}-{Character.Player.Stats[Stat.MaxMC]}"; + SCBox.Text = $"{Character.Player.Stats[Stat.MinSC]}-{Character.Player.Stats[Stat.MaxSC]}"; + ACCBox.Text = $"{Character.Player.Stats[Stat.Accuracy]}"; + AGILBox.Text = $"{Character.Player.Stats[Stat.Agility]}"; + ATKSPDBox.Text = $"{Character.Player.Stats[Stat.AttackSpeed]}"; + } + else + { + CurrentMapLabel.Text = "OFFLINE"; + CurrentXY.Text = "OFFLINE"; + } + + CurrentIPLabel.Text = Character.AccountInfo.LastIP; + OnlineTimeLabel.Text = Character.LastLoginDate > Character.LastLogoutDate ? (SMain.Envir.Now - Character.LastLoginDate).TotalMinutes.ToString("##") + " minutes" : "Offline"; + + ChatBanExpiryTextBox.Text = Character.ChatBanExpiryDate.ToString(); + } + #endregion + + #region PlayerPets + private void UpdatePetInfo() + { + ClearPetInfo(); + + if (Character?.Player == null) return; + + foreach (MonsterObject Pet in Character.Player.Pets) + { + var listItem = new ListViewItem(Pet.Name) { Tag = Pet }; + listItem.SubItems.Add(Pet.PetLevel.ToString()); + listItem.SubItems.Add($"{Pet.Health}/{Pet.MaxHealth}"); + listItem.SubItems.Add($"{Pet.Stats[Stat.MinAC]}-{Pet.Stats[Stat.MaxAC]}"); + listItem.SubItems.Add($"{Pet.Stats[Stat.MinMAC]}-{Pet.Stats[Stat.MaxMAC]}"); + listItem.SubItems.Add($"{Pet.Stats[Stat.MinDC]}-{Pet.Stats[Stat.MaxDC]}"); + listItem.SubItems.Add($"Map: {Pet.CurrentMap.Info.Title}, X: {Pet.CurrentLocation.X}, Y: {Pet.CurrentLocation.Y}"); + + PetView.Items.Add(listItem); + } + } + + private void ClearPetInfo() + { + PetView.Items.Clear(); + } + #endregion + + #region PlayerItems + private void UpdatePlayerItems() + { + PlayerItemInfoListViewNF.Items.Clear(); + + if (Character?.Player == null) return; + + for (int i = 0; i < Character.Inventory.Length; i++) + { + UserItem inventoryItem = Character.Inventory[i]; + + if (inventoryItem == null) continue; + + ListViewItem inventoryItemListItem = new ListViewItem($"{inventoryItem.UniqueID}"); + + if (i < 6) + { + inventoryItemListItem.SubItems.Add($"Belt | Slot: [{i + 1}]"); + } + else if (i >= 6 && i < 46) + { + inventoryItemListItem.SubItems.Add($"Inventory Bag | Slot: [{i - 5}]"); + } + + inventoryItemListItem.SubItems.Add($"{inventoryItem.FriendlyName}"); + inventoryItemListItem.SubItems.Add($"{inventoryItem.Count}/{inventoryItem.Info.StackSize}"); + inventoryItemListItem.SubItems.Add($"{inventoryItem.CurrentDura}/{inventoryItem.MaxDura}"); + + PlayerItemInfoListViewNF.Items.Add(inventoryItemListItem); + } + + for (int i = 0; i < Character.AccountInfo.Storage.Length; i++) + { + UserItem storeItem = Character.AccountInfo.Storage[i]; + + if (storeItem == null) continue; + + ListViewItem storeItemListItem = new ListViewItem($"{storeItem.UniqueID}"); + + if (i < 80) + { + storeItemListItem.SubItems.Add($"Storage | Slot: [{i + 1}]"); + } + + storeItemListItem.SubItems.Add($"{storeItem.FriendlyName}"); + storeItemListItem.SubItems.Add($"{storeItem.Count}/{storeItem.Info.StackSize}"); + storeItemListItem.SubItems.Add($"{storeItem.CurrentDura}/{storeItem.MaxDura}"); + + PlayerItemInfoListViewNF.Items.Add(storeItemListItem); + } + + for (int i = 0; i < Character.Equipment.Length; i++) + { + UserItem equipItem = Character.Equipment[i]; + + if (equipItem == null) continue; + + ListViewItem equipItemListItem = new ListViewItem($"{equipItem.UniqueID}"); + + equipItemListItem.SubItems.Add($"Equipment | Slot: [{i + 1}]"); + + equipItemListItem.SubItems.Add($"{equipItem.FriendlyName}"); + equipItemListItem.SubItems.Add($"{equipItem.Count}/{equipItem.Info.StackSize}"); + equipItemListItem.SubItems.Add($"{equipItem.CurrentDura}/{equipItem.MaxDura}"); + + PlayerItemInfoListViewNF.Items.Add(equipItemListItem); + } + } + #endregion + + #region PlayerMagics + private void UpdatePlayerMagics() + { + MagicListViewNF.Items.Clear(); + + for (int i = 0; i < Character.Magics.Count; i++) + { + UserMagic magic = Character.Magics[i]; + if (magic == null) continue; + + ListViewItem ListItem = new ListViewItem(magic.Info.Name.ToString()) { Tag = this }; + + ListItem.SubItems.Add(magic.Level.ToString()); + + switch (magic.Level) + { + case 0: + ListItem.SubItems.Add($"{magic.Experience}/{magic.Info.Need1}"); + break; + case 1: + ListItem.SubItems.Add($"{magic.Experience}/{magic.Info.Need2}"); + break; + case 2: + ListItem.SubItems.Add($"{magic.Experience}/{magic.Info.Need3}"); + break; + case 3: + ListItem.SubItems.Add($"-"); + break; + } + + if (magic.Key > 8) + { + var key = magic.Key % 8; + + ListItem.SubItems.Add(string.Format("CTRL+F{0}", key != 0 ? key : 8)); + } + else if (magic.Key > 0) + { + ListItem.SubItems.Add(string.Format("F{0}", magic.Key)); + } + else if (magic.Key == 0) + { + ListItem.SubItems.Add(string.Format("No Key", magic.Key)); + } + + ListItem.SubItems.Add(magic.Key.ToString()); + MagicListViewNF.Items.Add(ListItem); + } + } + #endregion + + #region PlayerQuests + private void UpdatePlayerQuests() + { + QuestInfoListViewNF.Items.Clear(); + + foreach (int completedQuestID in Character.CompletedQuests) + { + // Display the completed quest in the listview + ListViewItem item = new ListViewItem(completedQuestID.ToString()); + item.SubItems.Add("Completed"); + QuestInfoListViewNF.Items.Add(item); + } + } + #endregion + + #region UpdatePlayerInfo + private void UpdateButton_Click(object sender, EventArgs e) + { + if (Character?.Player == null) return; + + if (MessageBox.Show("Are you sure you want to Update?", "Are you sure buddy?.", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning) != DialogResult.Yes) return; + + SaveChanges(); + } + #endregion + + #region Buttons + private void SaveChanges() + { + CharacterInfo info = Character; + + string tempGold = GoldTextBox.Text.Replace(",", ""); + string tempCredit = GameGoldTextBox.Text.Replace(",", ""); + + info.Name = NameTextBox.Text; + info.Level = Convert.ToByte(LevelTextBox.Text); + info.PKPoints = Convert.ToInt32(PKPointsTextBox.Text); + info.AccountInfo.Gold = Convert.ToUInt32(tempGold); + info.AccountInfo.Credit = Convert.ToUInt32(tempCredit); + + UpdateTabs(); + } + + private void SendMessageButton_Click(object sender, EventArgs e) + { + if (Character?.Player == null) return; + + if (SendMessageTextBox.Text.Length < 1) return; + + Character.Player.ReceiveChat(SendMessageTextBox.Text, ChatType.Announcement); + } + + private void KickButton_Click(object sender, EventArgs e) + { + if (Character?.Player == null) return; + + Character.Player.Connection.SendDisconnect(4); + //also update account so player can't log back in for x minutes? + } + + private void KillButton_Click(object sender, EventArgs e) + { + if (Character?.Player == null) return; + + Character.Player.Die(); + } + + private void KillPetsButton_Click(object sender, EventArgs e) + { + if (Character?.Player == null) return; + + for (int i = Character.Player.Pets.Count - 1; i >= 0; i--) + Character.Player.Pets[i].Die(); + + ClearPetInfo(); + } + private void SafeZoneButton_Click(object sender, EventArgs e) + { + if (Character?.Player == null) return; + + Character.Player.Teleport(SMain.Envir.GetMap(Character.BindMapIndex), Character.BindLocation); + } + + private void ChatBanButton_Click(object sender, EventArgs e) + { + if (Character.AccountInfo.AdminAccount) return; + + Character.ChatBanned = true; + + DateTime date; + + DateTime.TryParse(ChatBanExpiryTextBox.Text, out date); + + Character.ChatBanExpiryDate = date; + } + + private void ChatBanExpiryTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + DateTime temp; + + if (!DateTime.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + } + + private void OpenAccountButton_Click(object sender, EventArgs e) + { + string accountId = Character.AccountInfo.AccountID; + + AccountInfoForm form = new AccountInfoForm(accountId, true); + + form.ShowDialog(); + } + #endregion + + #region IPSearch + private void CurrentIPLabel_Click(object sender, EventArgs e) + { + string ipAddress = CurrentIPLabel.Text; + + string url = $"https://whatismyipaddress.com/ip/{ipAddress}"; + + try + { + System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(url) + { + UseShellExecute = true + }); + + CurrentIPLabel.ForeColor = Color.Blue; + } + catch (Exception ex) + { + MessageBox.Show($"Error opening URL: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + #endregion + + #region AccountBan + private void AccountBanButton_Click(object sender, EventArgs e) + { + if (Character?.Player == null) return; + if (Character.AccountInfo.AdminAccount) return; + + Character.AccountInfo.Banned = true; + + DateTime date; + + DateTime.TryParse(ChatBanExpiryTextBox.Text, out date); + + Character.AccountInfo.ExpiryDate = date; + + if (Character?.Player != null) + { + Character.Player.Connection.SendDisconnect(6); + } + } + #endregion + + #region UpdateTabs + private void UpdateTabs() + { + UpdatePlayerInfo(); + UpdatePetInfo(); + UpdatePlayerItems(); + UpdatePlayerMagics(); + UpdatePlayerQuests(); + } + #endregion + + #region Tab Resize + private void tabControl1_SelectedIndexChanged(object sender, EventArgs e) + { + switch (tabControl1.SelectedIndex) + { + case 0: + Size = new Size(725, 510); + break; + case 1: + Size = new Size(423, 510); + break; + case 2: + Size = new Size(597, 510); + break; + case 3: + Size = new Size(458, 510); + break; + case 4: + Size = new Size(663, 510); + break; + } + + UpdateTabs(); + } + #endregion + + #region Player Flag Search + private void FlagSearchBox_ValueChanged(object sender, EventArgs e) + { + int flagIndex = 0; + if (string.IsNullOrWhiteSpace(FlagSearchBox.Value.ToString())) + { + ResultLabel.Text = string.Empty; + return; + } + else + { + flagIndex = Decimal.ToInt32(FlagSearchBox.Value); + } + + if (flagIndex >= 0 && flagIndex < Character.Flags.Length) + { + bool flagValue = Character.Flags[flagIndex]; + + if (flagValue) + { + ResultLabel.Text = $"Flag {flagIndex} is Active"; + ResultLabel.ForeColor = Color.Green; + } + else + { + ResultLabel.Text = $"Flag {flagIndex} is Inactive"; + ResultLabel.ForeColor = Color.Red; + } + } + else + { + ResultLabel.Text = "Invalid Flag Number"; + ResultLabel.ForeColor = Color.Red; + } + } + #endregion + } +} \ No newline at end of file diff --git a/Server.MirForms/Account/PlayerInfoForm.resx b/Server.MirForms/Account/PlayerInfoForm.resx new file mode 100644 index 0000000..1b01221 --- /dev/null +++ b/Server.MirForms/Account/PlayerInfoForm.resx @@ -0,0 +1,1763 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAgAICAQAAAABADoAgAAhgAAACAgAAAAABgAqAwAAG4DAAAgIAAAAAAIAKgIAAAWEAAAQEAAAAAA + GAAoMgAAvhgAAEBAEAAAAAQAaAoAAOZKAABAQAAAAAAIACgWAABOVQAAgIAAAAAAGAAoyAAAdmsAAICA + AAAAAAgAKEwAAJ4zAQAoAAAAIAAAAEAAAAABAAQAAAAAAAACAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAA + gAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////ABER + ERAAAAAAAAAAAAAAAAARERERAAAAAAAAAAAAAAAAERERERAAAAAAAAAAAAAAABERERERAAAAAQAAAAAA + AAARERAAAQAAAAEAAAAAAAAAEREREQAAAAABAAAAAAAAABERERERAAAAABAAAAAAAAAREREREQAAAAAQ + AAAQAAAAEREREREAAAAAAAABEAAAAAERERERAAAAAAAxERAAAAAQERERERAAAAABEQAAAAAAAAAREREQ + AAAAAQARERARAAAAEREREAAAAAEBEAERERAAAAAAAAAAAAAQEQARMzERAAAAEREAAAABEBADMzMzEQAA + AAEQAAAAAAEAADMxMxEAAAAAAAAAAAEQEQAzMxEQAAABAAEAAAEREAAAMBMQEAAAAAARAAABEREQADEQ + EQAAAAABEBEBEREQATAREREAAAAQAQAQARERAQABEQERAAAAAAAAEBETEQMRERAREQAAAAAAARARExEQ + AREAAREQAAAAAAEBERMxMQEBAAABEQABAAAAAQERERMREQAAAAEAABAAABABERExERAAAAAAAAAAAAAA + EREREREAAAAAAAAAABAQEQAAAREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABAAAAAAAAAAAA + AAAAEAARAAAAAAAAAAAAAAAAAAABEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABABgAAAAAAAAM + AAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA + AACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAAAA + AAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA + AACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACA + AACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAACAAACAAACAAACAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAA + AACAAACAAACAAACAAACAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAAAAAAAAAACAAACAAACAAACAAACA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACAAAAAAACAAACAAAAAAAAAAACAAACAAICAAICAAICAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAA + AACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAACAAAAAAAAAAICAAICAAICA + AICAAICAAICAAICAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAICAAICAAICAAACAAICAAICAAACAAACAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAACAAACA + AAAAAAAAAICAAICAAICAAICAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAACA + AAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAICAAAAAAACAAICAAACAAAAA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAACAAACAAACA + AACAAACAAACAAAAAAAAAAAAAAICAAACAAACAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAACAAACAAAAAAACAAACAAAAAAACAAACAAACAAACAAACAAACAAAAAAAAAAACAAICAAAAAAACAAACA + AACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAACA + AACAAACAAACAAACAAAAAAACAAAAAAAAAAAAAAACAAACAAACAAAAAAACAAACAAACAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAICAAACAAACAAAAAAICAAACAAACA + AACAAACAAACAAAAAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + AACAAAAAAACAAACAAACAAICAAACAAACAAACAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAACAAACAAACA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAACAAICAAICAAACA + AICAAACAAAAAAACAAAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAACAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAACAAACAAACAAICAAACAAACAAACAAACAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACA + AACAAACAAACAAACAAICAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAAAA + AACAAACAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAA + AACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAACAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE + AAAAAAAAAAAAAAABAAAAAQAAAAD/AAD/AAD/AAAAAP//AP//AAD/AP8AwMDAAP/48ADX6/oA1P9/AP8A + AADiK4oAKiqlAAAAAAAEBAQACAgIAAwMDAAREREAFhYWABwcHAAiIiIAKSkpADMzMwA5OTkAQkJCAE1N + TQBVVVUAYGBgAGZmZgBwcHAAgICAAIyMjACUlJQAmZmZAKSkpACsrKwAtra2AMDAwADMzMwA1NTUANra + 2gDg4OAA7OzsAPj4+AD7+/sA////ADMAAABmAAAAmQAAAMwAAAD/AAAAADMAADMzAABmMwAAmTMAAMwz + AAD/MwAAAGYAADNmAABmZgAAmWYAAMxmAAD/ZgAAAJkAADOZAABmmQAAmZkAAMyZAAD/mQAAAMwAADPM + AABmzAAAmcwAAMzMAAD/zAAAAP8AADP/AABm/wAAmf8AAMz/AAD//wAAAAAzADMAMwBmADMAmQAzAMwA + MwD/ADMAADMzAGYzMwCZMzMAzDMzAP8zMwAAZjMAM2YzAGZmMwCZZjMAzGYzAP9mMwAAmTMAM5kzAGaZ + MwCZmTMAzJkzAP+ZMwAAzDMAM8wzAGbMMwCZzDMAzMwzAP/MMwAA/zMAM/8zAGb/MwCZ/zMAzP8zAP// + MwAAAGYAMwBmAGYAZgCZAGYAzABmAP8AZgAAM2YAMzNmAGYzZgCZM2YAzDNmAP8zZgAAZmYAM2ZmAJlm + ZgDMZmYA/2ZmAACZZgAzmWYAZplmAJmZZgDMmWYA/5lmAADMZgAzzGYAZsxmAJnMZgDMzGYA/8xmAAD/ + ZgAz/2YAZv9mAJn/ZgDM/2YA//9mAAAAmQAzAJkAZgCZAJkAmQDMAJkA/wCZAAAzmQAzM5kAZjOZAJkz + mQDMM5kA/zOZAABmmQAzZpkAZmaZAJlmmQDMZpkA/2aZAACZmQAzmZkAZpmZAMyZmQD/mZkAAcyZADPM + mQBmzJkAmcyZAMzMmQD/zJkAAP+ZADP/mQBm/5kAmf+ZAMz/mQD//5kAAADMADMAzABmAMwAmQDMAMwA + zAD/AMwAADPMADMzzABmM8wAmTPMAMwzzAD/M8wAAGbMADNmzABmZswAmWbMAMxmzAD/ZswAAJnMADOZ + zABmmcwAmZnMAMyZzAD/mcwAAMzMADPMzABmzMwAmczMAP/MzAAA/8wAM//MAGb/zACZ/8wAzP/MAP// + zAAAAP8AMwD/AGYA/wCZAP8AzAD/AP8A/wAAM/8AMzP/AGYz/wCZM/8AzDP/AP8z/wAAZv8AM2b/AGZm + /wCZZv8AzGb/AP9m/wAAmf8AM5n/AGaZ/wCZmf8AzJn/AP+Z/wAAzP8AM8z/AGbM/wCZzP8AzMz/AP/M + /wAA//8AM///AGb//wCZ//8AzP//AJ+fn5+fn58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQn5+fn5+f + n58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBCfn5+fn5+fn58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEJ+f + n5+fn5+fn58QEBAQEBAQnxAQEBAQEBAQEBAQEBAQn5+fn58QEBAQnxAQEBAQEBCfEBAQEBAQEBAQEBAQ + EBCfn5+fn5+fnxAQEBAQEBAQEJ8QEBAQEBAQEBAQEBAQEJ+fn5+fn5+fn58QEBAQEBAQEJ8QEBAQEBAQ + EBAQEBAQn5+fn5+fn5+fnxAQEBAQEBAQnxAQEBAQnxAQEBAQEBCfn5+fn5+fn5+fEBAQEBAQEBAQEBAQ + EJ+fEBAQEBAQEBCfn5+fn5+fn58QEBAQEBAQEBAQrZ+fn58QEBAQEBAQnxCfn5+fn5+fn58QEBAQEBAQ + EJ+fnxAQEBAQEBAQEBAQEBAQn5+fn5+fnxAQEBAQEBAQnxAQn5+fn58Qn58QEBAQEBCfn5+fn5+fEBAQ + EBAQEBCfEJ+fEBCfn5+fn58QEBAQEBAQEBAQEBAQEBAQEBAQnxCfnxAQn5+tra2fn58QEBAQEBCfn5+f + EBAQEBAQEJ+fEJ8QEK2tra2tra2fnxAQEBAQEBCfnxAQEBAQEBAQEBCfEBAQEK2trZ+trZ+fEBAQEBAQ + EBAQEBAQEBAQEBCfnxCfnxAQra2trZ+fnxAQEBAQEJ8QEBCfEBAQEBCfn5+fEBAQEBCtEJ+tnxCfEBAQ + EBAQEBAQn58QEBAQEJ+fn5+fnxAQEK2fnxCfnxAQEBAQEBAQEJ+fEJ+fEJ+fn5+fnxAQn60Qn5+fn5+f + EBAQEBAQnxAQnxAQnxAQn5+fn58QnxAQEJ+fnxCfn58QEBAQEBAQEBAQEBCfEJ+fn62fnxCtn5+fn58Q + n5+fnxAQEBAQEBAQEBAQn58Qn5+frZ+fnxAQn5+fEBAQn5+fnxAQEBAQEBAQEBCfEJ+fn5+trZ+tnxCf + EJ8QEBAQEJ+fnxAQEJ8QEBAQEBAQnxCfn5+fn5+tn5+fnxAQEBAQEBCfEBAQEJ8QEBAQEJ8QEJ+fn5+f + rZ+fn58QEBAQEBAQEBAQEBAQEBAQEBAQEBCfn5+fn5+fn5+fEBAQEBAQEBAQEBAQEBAQEJ8QnxCfnxAQ + EBAQn5+fEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEJ8QEJ8QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBCfEBAQn58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEJ+fEJ8QEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAABAAAAAgAAAAAEAGAAAAAAAADAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAA + AAAAAIAAAIAAAAAAAAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAA + gIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAAIAA + AIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAgIAA + gIAAgIAAgIAAAIAAAIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAAAAAAAAAIAAAIAAgIAAgIAAAIAAAIAAAAAA + AAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAAAAAAAAAIAAAIAAgIAA + gIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAA + AIAAgIAAgIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAA + AAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAIAAAIAAgIAAgIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAgIAAgIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAgIAA + gIAAgIAAgIAAAIAAAIAAgIAAgIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAgIAAgIAAgIAAgIAAAIAAAIAAgIAAgIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAgIAA + gIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAAAA + AAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAABAAAAAgAAAAAEABAAAAAAAAAgAAAAA + AAAAAAAAEAAAABAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAwMDAAICAgAAAAP8AAP8AAAD/ + /wD/AAAA/wD/AP//AAD///8AEREREREREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARERERERERAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAABERERERERERAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAERERERER + EREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAREREREREREREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABER + EREREREREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEREREREREREREQAAAAAAAAARAAAAAAAAAAAAAAAA + AAARERERERERERERAAAAAAAAABEAAAAAAAAAAAAAAAAAABERERERAAAAABEAAAAAAAAAEQAAAAAAAAAA + AAAAAAAAEREREREAAAAAEQAAAAAAAAARAAAAAAAAAAAAAAAAAAAREREREREREQAAAAAAAAAAABEAAAAA + AAAAAAAAAAAAABERERERERERAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAEREREREREREREQAAAAAAAAAA + EQAAAAAAAAAAAAAAAAARERERERERERERAAAAAAAAAAARAAAAAAAAAAAAAAAAABEREREREREREREAAAAA + AAAAABEAAAAAABEAAAAAAAAAEREREREREREREQAAAAAAAAAAEQAAAAAAEQAAAAAAAAARERERERERERER + AAAAAAAAAAAAAAAAABERAAAAAAAAABEREREREREREREAAAAAAAAAAAAAAAAAEREAAAAAAAAAABERERER + EREREQAAAAAAAAAAAAAzEREREQAAAAAAAAAAERERERERERERAAAAAAAAAAAAADMRERERAAAAAAAAABEA + ERERERERERERAAAAAAAAAAAREREAAAAAAAAAAAAAEQAREREREREREREAAAAAAAAAABEREQAAAAAAAAAA + AAAAAAAAEREREREREQAAAAAAAAAAEQAAEREREREAEREAAAAAAAARERERERERAAAAAAAAAAARAAARERER + EQAREQAAAAAAABEREREREREAAAAAAAAAABEAEREAABEREREREQAAAAAAEREREREREQAAAAAAAAAAEQAR + EQAAERERERERAAAAAAAAAAAAAAAAAAAAAAAAABEAEREAABERMzMzERERAAAAAAAAAAAAAAAAAAAAAAAA + EQAREQAAEREzMzMREREAAAAAAAARERERAAAAAAAAABERABEAADMzMzMzMzMREQAAAAAAABEREREAAAAA + AAAAEREAEQAAMzMzMzMzMxERAAAAAAAAABERAAAAAAAAAAAAABEAAAAAMzMzETMzEREAAAAAAAAAEREA + AAAAAAAAAAAAEQAAAAAzMzMRMzMREQAAAAAAAAAAAAAAAAAAAAAAEREAEREAADMzMzMREREAAAAAAAAA + AAAAAAAAAAAAAAAREQAREQAAMzMzMxEREQAAAAAAABEAAAARAAAAAAARERERAAAAAAAzABEzEQARAAAA + AAAAEQAAABEAAAAAABEREREAAAAAADMAETMRABEAAAAAAAAAAAAREQAAAAAAERERERERAAAAMxERABER + AAAAAAAAAAAAABERAAAAAAAREREREREAAAAzEREAEREAAAAAAAAAAAAREQAREQAREREREREAABEzABER + EREREQAAAAAAAAAAABERABERABEREREREQAAETMAERERERERAAAAAAAAEQAAEQAAEQAAEREREREAEQAA + ABEREQAREREAAAAAAAARAAARAAARAAAREREREQARAAAAERERABEREQAAAAAAAAAAAAAAABEAERERMxER + ADMREREREQARERERAAAAAAAAAAAAAAAAEQAREREzEREAMxERERERABEREREAAAAAAAAAAAAAABERABER + ETMREREAABEREQAAABEREREAAAAAAAAAAAAAEREAERERMxEREQAAERERAAAAEREREQAAAAAAAAAAAAAR + ABEREREzMxEzEQARABEAAAAAABEREQAAAAAAAAAAABEAERERETMzETMRABEAEQAAAAAAERERAAAAEQAA + AAAAAAARABERERERETMRERERAAAAAAAAABEAAAARAAAAAAAAABEAERERERERMxEREREAAAAAAAAAEQAA + AAARAAAAAAARAAARERERETMRERERAAAAAAAAAAAAAAAAABEAAAAAABEAABERERERMxEREREAAAAAAAAA + AAAAAAAAAAAAAAAAAAARERERERERERERAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEREREREREREREAAAAA + AAAAAAAAAAAAAAAAEQARABERAAAAAAAREREAAAAAAAAAAAAAAAAAAAAAAAARABEAEREAAAAAABEREQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + EQAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAAAREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + EQAAABERAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAREQARAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAABERABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgA + AABAAAAAgAAAAAEACAAAAAAAABAAAAAAAAAAAAAAAAEAAAABAAAAAP8AAP8AAP8AAAAA//8A//8AAP8A + /wDAwMAA//jwANfr+gDU/38A/wAAAOIrigAqKqUAAAAAAAQEBAAICAgADAwMABEREQAWFhYAHBwcACIi + IgApKSkAMzMzADk5OQBCQkIATU1NAFVVVQBgYGAAZmZmAHBwcACAgIAAjIyMAJSUlACZmZkApKSkAKys + rAC2trYAwMDAAMzMzADU1NQA2traAODg4ADs7OwA+Pj4APv7+wD///8AMwAAAGYAAACZAAAAzAAAAP8A + AAAAMwAAMzMAAGYzAACZMwAAzDMAAP8zAAAAZgAAM2YAAGZmAACZZgAAzGYAAP9mAAAAmQAAM5kAAGaZ + AACZmQAAzJkAAP+ZAAAAzAAAM8wAAGbMAACZzAAAzMwAAP/MAAAA/wAAM/8AAGb/AACZ/wAAzP8AAP// + AAAAADMAMwAzAGYAMwCZADMAzAAzAP8AMwAAMzMAZjMzAJkzMwDMMzMA/zMzAABmMwAzZjMAZmYzAJlm + MwDMZjMA/2YzAACZMwAzmTMAZpkzAJmZMwDMmTMA/5kzAADMMwAzzDMAZswzAJnMMwDMzDMA/8wzAAD/ + MwAz/zMAZv8zAJn/MwDM/zMA//8zAAAAZgAzAGYAZgBmAJkAZgDMAGYA/wBmAAAzZgAzM2YAZjNmAJkz + ZgDMM2YA/zNmAABmZgAzZmYAmWZmAMxmZgD/ZmYAAJlmADOZZgBmmWYAmZlmAMyZZgD/mWYAAMxmADPM + ZgBmzGYAmcxmAMzMZgD/zGYAAP9mADP/ZgBm/2YAmf9mAMz/ZgD//2YAAACZADMAmQBmAJkAmQCZAMwA + mQD/AJkAADOZADMzmQBmM5kAmTOZAMwzmQD/M5kAAGaZADNmmQBmZpkAmWaZAMxmmQD/ZpkAAJmZADOZ + mQBmmZkAzJmZAP+ZmQABzJkAM8yZAGbMmQCZzJkAzMyZAP/MmQAA/5kAM/+ZAGb/mQCZ/5kAzP+ZAP// + mQAAAMwAMwDMAGYAzACZAMwAzADMAP8AzAAAM8wAMzPMAGYzzACZM8wAzDPMAP8zzAAAZswAM2bMAGZm + zACZZswAzGbMAP9mzAAAmcwAM5nMAGaZzACZmcwAzJnMAP+ZzAAAzMwAM8zMAGbMzACZzMwA/8zMAAD/ + zAAz/8wAZv/MAJn/zADM/8wA///MAAAA/wAzAP8AZgD/AJkA/wDMAP8A/wD/AAAz/wAzM/8AZjP/AJkz + /wDMM/8A/zP/AABm/wAzZv8AZmb/AJlm/wDMZv8A/2b/AACZ/wAzmf8AZpn/AJmZ/wDMmf8A/5n/AADM + /wAzzP8AZsz/AJnM/wDMzP8A/8z/AAD//wAz//8AZv//AJn//wDM//8An5+fn5+fn5+fn5+fn58dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+f + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+f + n5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+f + n5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+f + n5+fn5+fn5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fn5+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn5+fn5+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHZ+fHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fHR0dHR0dHR2fnx0dHR0dHR0dHR0dHR0dn58dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fnx0dHR0dHR0dn58dHR0dHR0dHR0dHR0dHZ+fHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR2fnx0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0d + n58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0d + HR0dHR0dn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0d + HR0dHR0dHR0dHZ+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fn5+fn5+fnx0d + HR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dHR2fnx0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn5+fn5+f + n58dHR0dHR0dHR0dHR0dHR0dn58dHR0dHR0dHR0dn58dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+f + n5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+f + n5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fnx0dHR0dHR0dHR0dHR0dHR2fn5+f + n5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHa2tn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0d + n5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR2trZ+fn5+fn5+fHR0dHR0dHR0dHR0d + HR2fnx0dn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHZ+fn5+fnx0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHZ+fn5+fn5+fn5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR2fn5+fn58dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dn58dHR0dn5+fn5+f + n5+fnx0dn5+fnx0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHZ+fHR0dHZ+f + n5+fn5+fn58dHZ+fn58dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR2fnx0d + n5+fnx0dHR2fn5+fn5+fn5+fn58dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0d + n58dHZ+fn58dHR0dn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fnx0dn5+fnx0dHR2fn5+fra2tra2tn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHZ+fn58dHR0dn5+fn62tra2trZ+fn5+fnx0dHR0dHR0dHR0dHZ+fn5+fn5+fHR0dHR0d + HR0dHR0dHR2fn5+fHR2fnx0dHR2tra2tra2tra2tra2trZ+fn58dHR0dHR0dHR0dHR2fn5+fn5+fnx0d + HR0dHR0dHR0dHR0dn5+fnx0dn58dHR0dra2tra2tra2tra2tra2fn5+fHR0dHR0dHR0dHR0dHR2fn5+f + HR0dHR0dHR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dra2tra2tn5+tra2tn5+fnx0dHR0dHR0dHR0dHR0d + n5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dn58dHR0dHR0dHa2tra2trZ+fra2trZ+fn58dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fnx0dn5+fnx0dHR2tra2tra2trZ+fn5+fnx0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn58dHZ+fn58dHR0dra2tra2tra2fn5+fn58dHR0d + HR0dHR0dHR2fnx0dHR0dHZ+fHR0dHR0dHR0dHZ+fn5+fn5+fHR0dHR0dHR0dHa2tHR2fn62tn58dHZ+f + HR0dHR0dHR0dHR0dn58dHR0dHR2fnx0dHR0dHR0dHR2fn5+fn5+fnx0dHR0dHR0dHR2trR0dn5+trZ+f + HR2fnx0dHR0dHR0dHR0dHR0dHR0dHZ+fn58dHR0dHR0dHR0dn5+fn5+fn5+fn5+fHR0dHR0dra2fn5+f + HR2fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR0dHR0dHR0dHZ+fn5+fn5+fn5+fnx0dHR0dHa2t + n5+fnx0dn5+fnx0dHR0dHR0dHR0dHR0dHR0dHZ+fn58dHZ+fn58dHZ+fn5+fn5+fn5+fnx0dHR2fn62t + HR2fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR2fn5+fHR2fn5+fn5+fn5+fn58dHR0d + n5+trR0dn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dn58dHR0dn58dHR0dn58dHR0dn5+fn5+fn5+fnx0d + n58dHR0dHR2fn5+fn58dHZ+fn5+fnx0dHR0dHR0dHR0dHZ+fHR0dHZ+fHR0dHZ+fHR0dHZ+fn5+fn5+f + n58dHZ+fHR0dHR0dn5+fn5+fHR2fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fnx0dn5+fn5+f + ra2fn5+fHR2trZ+fn5+fn5+fn58dHZ+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn58dHZ+f + n5+fn62tn5+fnx0dra2fn5+fn5+fn5+fHR2fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+f + HR2fn5+fn5+trZ+fn5+fnx0dHR2fn5+fn58dHR0dHR2fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0d + n5+fnx0dn5+fn5+fra2fn5+fn58dHR0dn5+fn5+fHR0dHR0dn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0d + HR0dHZ+fHR2fn5+fn5+fn62tra2fn62tn58dHZ+fHR2fnx0dHR0dHR0dHR2fn5+fn58dHR0dHR0dHR0d + HR0dHR0dHR2fnx0dn5+fn5+fn5+tra2tn5+trZ+fHR2fnx0dn58dHR0dHR0dHR0dn5+fn5+fHR0dHR0d + n58dHR0dHR0dHR0dHR0dHZ+fHR2fn5+fn5+fn5+fn5+trZ+fn5+fn5+fHR0dHR0dHR0dHR0dHR2fnx0d + HR0dHZ+fHR0dHR0dHR0dHR0dHR2fnx0dn5+fn5+fn5+fn5+fra2fn5+fn5+fnx0dHR0dHR0dHR0dHR0d + n58dHR0dHR0dHZ+fHR0dHR0dHR0dHZ+fHR0dHZ+fn5+fn5+fn5+trZ+fn5+fn5+fHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dHR2fnx0dHR2fn5+fn5+fn5+fra2fn5+fn5+fnx0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fn5+fn5+fnx0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn58dHZ+fHR2fn5+fHR0dHR0dHR0dHZ+fn5+fnx0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fHR2fnx0dn5+fnx0dHR0dHR0dHR2fn5+f + n58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fnx0dHR2fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHR0dn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fnx0dHR0dHZ+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHR0dHR2fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHZ+fn58dHZ+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR2fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAIAAAAAAAQAAAQAYAAAAAAAAwAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAIAAAAAAAQAAAQAIAAAAAAAAQAAAAAAAAAAA + AAAAAQAAAAEAAAAA/wAA/wAA/wAAAAD//wD//wAA/wD/AMDAwAD/+PAA1+v6ANT/fwD/AAAA4iuKACoq + pQAAAAAABAQEAAgICAAMDAwAERERABYWFgAcHBwAIiIiACkpKQAzMzMAOTk5AEJCQgBNTU0AVVVVAGBg + YABmZmYAcHBwAICAgACMjIwAlJSUAJmZmQCkpKQArKysALa2tgDAwMAAzMzMANTU1ADa2toA4ODgAOzs + 7AD4+PgA+/v7AP///wAzAAAAZgAAAJkAAADMAAAA/wAAAAAzAAAzMwAAZjMAAJkzAADMMwAA/zMAAABm + AAAzZgAAZmYAAJlmAADMZgAA/2YAAACZAAAzmQAAZpkAAJmZAADMmQAA/5kAAADMAAAzzAAAZswAAJnM + AADMzAAA/8wAAAD/AAAz/wAAZv8AAJn/AADM/wAA//8AAAAAMwAzADMAZgAzAJkAMwDMADMA/wAzAAAz + MwBmMzMAmTMzAMwzMwD/MzMAAGYzADNmMwBmZjMAmWYzAMxmMwD/ZjMAAJkzADOZMwBmmTMAmZkzAMyZ + MwD/mTMAAMwzADPMMwBmzDMAmcwzAMzMMwD/zDMAAP8zADP/MwBm/zMAmf8zAMz/MwD//zMAAABmADMA + ZgBmAGYAmQBmAMwAZgD/AGYAADNmADMzZgBmM2YAmTNmAMwzZgD/M2YAAGZmADNmZgCZZmYAzGZmAP9m + ZgAAmWYAM5lmAGaZZgCZmWYAzJlmAP+ZZgAAzGYAM8xmAGbMZgCZzGYAzMxmAP/MZgAA/2YAM/9mAGb/ + ZgCZ/2YAzP9mAP//ZgAAAJkAMwCZAGYAmQCZAJkAzACZAP8AmQAAM5kAMzOZAGYzmQCZM5kAzDOZAP8z + mQAAZpkAM2aZAGZmmQCZZpkAzGaZAP9mmQAAmZkAM5mZAGaZmQDMmZkA/5mZAAHMmQAzzJkAZsyZAJnM + mQDMzJkA/8yZAAD/mQAz/5kAZv+ZAJn/mQDM/5kA//+ZAAAAzAAzAMwAZgDMAJkAzADMAMwA/wDMAAAz + zAAzM8wAZjPMAJkzzADMM8wA/zPMAABmzAAzZswAZmbMAJlmzADMZswA/2bMAACZzAAzmcwAZpnMAJmZ + zADMmcwA/5nMAADMzAAzzMwAZszMAJnMzAD/zMwAAP/MADP/zABm/8wAmf/MAMz/zAD//8wAAAD/ADMA + /wBmAP8AmQD/AMwA/wD/AP8AADP/ADMz/wBmM/8AmTP/AMwz/wD/M/8AAGb/ADNm/wBmZv8AmWb/AMxm + /wD/Zv8AAJn/ADOZ/wBmmf8AmZn/AMyZ/wD/mf8AAMz/ADPM/wBmzP8Amcz/AMzM/wD/zP8AAP//ADP/ + /wBm//8Amf//AMz//wCfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pra2trZ+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+tra2tn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD62tra2fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+f + n5+tra2tra2tra2tra2fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8P + Dw+fn5+fn5+fn62tra2tra2tra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+f + n58PDw8PDw8PD5+fn5+fn5+fra2tra2tra2tra2tn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8P + Dw+fn5+fDw8PDw8PDw+tra2tra2tra2tra2tra2tra2tra2tra2tra2tn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PD5+fn58PDw8PDw8PD62tra2tra2tra2tra2tra2tra2tra2tra2tra2fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8Pn5+fnw8PDw8PDw8Pra2tra2tra2tra2tra2tra2tra2tra2tra2trZ+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw+fn5+fDw8PDw8PDw+tra2tra2tra2tra2tra2tra2tra2t + ra2tra2tn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+fn58PDw8PDw8PD62tra2tra2tra2tra2t + ra2tra2tra2tra2tra2fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PD62t + ra2tra2tra2trZ+fn5+tra2tra2trZ+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8Pra2tra2tra2tra2tn5+fn62tra2tra2tn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PDw8PDw+tra2tra2tra2tra2fn5+fra2tra2tra2fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n58PDw8Pn5+fn5+fn58PDw8PDw8PD62tra2tra2tra2tra2tra2fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pra2tra2tra2tra2tra2trZ+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw+tra2tra2tra2tra2tra2tn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PD62tra2tra2tra2tra2t + ra2fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pra2tra2t + ra2tra2tra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw+tra2tDw8PD5+fn5+tra2tn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PD62tra0PDw8Pn5+fn62tra2fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pra2trQ8PDw+fn5+fra2trZ+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw+tra2tn5+fn5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PD62tra2fn5+fn5+fnw8PDw+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8Pra2trZ+fn5+fn5+fDw8PD5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw+tra2tn5+fn5+f + n58PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PD62t + ra2fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PD5+fn5+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8Pn5+fn62t + ra0PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw+fn5+fra2trQ8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PD5+fn5+tra2tDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PD5+fn58PDw8PDw8PD5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fDw8PD5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+fn58PDw8PDw8PD5+f + n58PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n58PDw8Pn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fnw8P + Dw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fnw8PDw+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fn5+fn62tra2fn5+fn5+fnw8PDw+tra2tn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fDw8PD62t + ra2fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+tra2tn5+fn5+f + n58PDw8Pra2trZ+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+fn5+fn5+fn5+fn62t + ra2fn5+fn5+fn5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+f + n5+fn5+fra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8P + Dw+fn5+fn5+fn5+fn5+tra2tn5+fn5+fn5+fn5+fDw8PDw8PDw+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PD5+fn5+fn5+fn5+fn62tra2fn5+fn5+fn5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn5+tra2tra2trZ+fn5+tra2tn5+fnw8P + Dw+fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn62tra2tra2tn5+fn62t + ra2fn5+fDw8PD5+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fra2tra2t + ra2fn5+fra2trZ+fn58PDw8Pn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+tra2tn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn62tra2fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+tra2tn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fra2trZ+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+tra2tn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn62tra2fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8Pn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n58PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + + + \ No newline at end of file diff --git a/Server.MirForms/App.config b/Server.MirForms/App.config new file mode 100644 index 0000000..0deb6f7 --- /dev/null +++ b/Server.MirForms/App.config @@ -0,0 +1,15 @@ + + + + +
+ + + + + + + + + + \ No newline at end of file diff --git a/Server.MirForms/BalanceConfigForm.Designer.cs b/Server.MirForms/BalanceConfigForm.Designer.cs new file mode 100644 index 0000000..97dea07 --- /dev/null +++ b/Server.MirForms/BalanceConfigForm.Designer.cs @@ -0,0 +1,1890 @@ +namespace Server +{ + partial class BalanceConfigForm + { + /// + /// 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(BalanceConfigForm)); + MagicResistWeigttextbox = new TextBox(); + label2 = new Label(); + PoisonResistWeighttextbox = new TextBox(); + label3 = new Label(); + CritialRateWeighttextbox = new TextBox(); + label5 = new Label(); + CriticalDamagetextbox = new TextBox(); + label7 = new Label(); + tabControl1 = new TabControl(); + tabPage3 = new TabPage(); + panel2 = new Panel(); + classGridView = new DataGridView(); + BaseStatType = new DataGridViewComboBoxColumn(); + BaseStatFormula = new DataGridViewComboBoxColumn(); + BaseStatBase = new DataGridViewTextBoxColumn(); + BaseStatGain = new DataGridViewTextBoxColumn(); + BaseStatGainRate = new DataGridViewTextBoxColumn(); + BaseStatMax = new DataGridViewTextBoxColumn(); + ClassComboBox = new ComboBox(); + panel1 = new Panel(); + classCapGridView = new DataGridView(); + CapType = new DataGridViewComboBoxColumn(); + Value = new DataGridViewTextBoxColumn(); + tabPage2 = new TabPage(); + ManaRegenWeighttextBox = new TextBox(); + label37 = new Label(); + HealthRegenWeighttextBox = new TextBox(); + label35 = new Label(); + groupBox2 = new GroupBox(); + CanFreezecheckBox = new CheckBox(); + CanResistPoisoncheckBox = new CheckBox(); + CanResistMagiccheckBox = new CheckBox(); + PoisonAttackWeighttextbox = new TextBox(); + label11 = new Label(); + FreezingWeighttextbox = new TextBox(); + label10 = new Label(); + tabPage4 = new TabPage(); + RISDeleteIndexbutton = new Button(); + RISAddIndexbutton = new Button(); + groupBox3 = new GroupBox(); + label64 = new Label(); + label63 = new Label(); + label62 = new Label(); + label61 = new Label(); + label60 = new Label(); + label59 = new Label(); + label58 = new Label(); + label57 = new Label(); + label56 = new Label(); + label55 = new Label(); + label54 = new Label(); + label53 = new Label(); + label52 = new Label(); + label51 = new Label(); + label50 = new Label(); + label49 = new Label(); + label48 = new Label(); + label47 = new Label(); + label46 = new Label(); + label45 = new Label(); + label44 = new Label(); + label43 = new Label(); + label42 = new Label(); + label41 = new Label(); + groupBox6 = new GroupBox(); + RISSlotMaxStattextBox = new TextBox(); + RISLuckMaxStattextBox = new TextBox(); + RISAttackSpeedMaxStattextBox = new TextBox(); + RISPoisonAttackMaxStattextBox = new TextBox(); + RISFreezingMaxStattextBox = new TextBox(); + RISCriticalDamageMaxStattextBox = new TextBox(); + RISCriticalRateMaxStattextBox = new TextBox(); + RISPoisonRecovMaxStattextBox = new TextBox(); + RISMpRecovMaxStattextBox = new TextBox(); + RISHpRecovMaxStattextBox = new TextBox(); + RISPoisonResistMaxStattextBox = new TextBox(); + RISMagicResistMaxStattextBox = new TextBox(); + RISStrongMaxStattextBox = new TextBox(); + RISMaxMpMaxStattextBox = new TextBox(); + RISMaxHpMaxStattextBox = new TextBox(); + RISMaxAgilMaxStattextBox = new TextBox(); + RISMaxAccMaxStattextBox = new TextBox(); + RISMaxScMaxStattextBox = new TextBox(); + RISMaxMcMaxStattextBox = new TextBox(); + RISMaxDcMaxStattextBox = new TextBox(); + RISMaxMacMaxStattextBox = new TextBox(); + RISMaxAcMaxStattextBox = new TextBox(); + RISMaxDuraMaxStattextBox = new TextBox(); + groupBox5 = new GroupBox(); + RISSlotStatChancetextBox = new TextBox(); + RISLuckStatChancetextBox = new TextBox(); + RISMaxDuraStatChancetextBox = new TextBox(); + RISAttackSpeedStatChancetextBox = new TextBox(); + RISMaxAcStatChancetextBox = new TextBox(); + RISPoisonAttackStatChancetextBox = new TextBox(); + RISMaxMacStatChancetextBox = new TextBox(); + RISFreezingStatChancetextBox = new TextBox(); + RISMaxDcStatChancetextBox = new TextBox(); + RISCriticalDamageStatChancetextBox = new TextBox(); + RISMaxMcStatChancetextBox = new TextBox(); + RISCriticalRateStatChancetextBox = new TextBox(); + RISMaxScStatChancetextBox = new TextBox(); + RISPoisonRecovStatChancetextBox = new TextBox(); + RISMaxAccStatChancetextBox = new TextBox(); + RISMpRecovStatChancetextBox = new TextBox(); + RISMaxAgilStatChancetextBox = new TextBox(); + RISHpRecovStatChancetextBox = new TextBox(); + RISMaxHpStatChancetextBox = new TextBox(); + RISPoisonResistStatChancetextBox = new TextBox(); + RISMaxMpStatChancetextBox = new TextBox(); + RISMagicResistStatChancetextBox = new TextBox(); + RISStrongStatChancetextBox = new TextBox(); + groupBox4 = new GroupBox(); + RISCurseChancetextBox = new TextBox(); + RISSlotChancetextBox = new TextBox(); + RISLuckChancetextBox = new TextBox(); + RISAttackSpeedChancetextBox = new TextBox(); + RISPoisonAttackChancetextBox = new TextBox(); + RISFreezingChancetextBox = new TextBox(); + RISCriticalDamageChancetextBox = new TextBox(); + RISCriticalRateChancetextBox = new TextBox(); + RISPoisonRecovChancetextBox = new TextBox(); + RISMpRecovChancetextBox = new TextBox(); + RISHpRecovChancetextBox = new TextBox(); + RISPoisonResistChancetextBox = new TextBox(); + RISMagicResistChancetextBox = new TextBox(); + RISStrongChancetextBox = new TextBox(); + RISMaxMpChancetextBox = new TextBox(); + RISMaxHpChancetextBox = new TextBox(); + RISMaxAgilChancetextBox = new TextBox(); + RISMaxAccChancetextBox = new TextBox(); + RISMaxScChancetextBox = new TextBox(); + RISMaxMcChancetextBox = new TextBox(); + RISMaxDcChancetextBox = new TextBox(); + RISMaxMacChancetextBox = new TextBox(); + RISMaxAcChancetextBox = new TextBox(); + RISMaxDuraChancetextBox = new TextBox(); + label40 = new Label(); + RISIndexcomboBox = new ComboBox(); + lblClassStatExample = new Label(); + tabControl1.SuspendLayout(); + tabPage3.SuspendLayout(); + panel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)classGridView).BeginInit(); + panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)classCapGridView).BeginInit(); + tabPage2.SuspendLayout(); + groupBox2.SuspendLayout(); + tabPage4.SuspendLayout(); + groupBox3.SuspendLayout(); + groupBox6.SuspendLayout(); + groupBox5.SuspendLayout(); + groupBox4.SuspendLayout(); + SuspendLayout(); + // + // MagicResistWeigttextbox + // + MagicResistWeigttextbox.Location = new Point(141, 39); + MagicResistWeigttextbox.Margin = new Padding(4, 3, 4, 3); + MagicResistWeigttextbox.MaxLength = 3; + MagicResistWeigttextbox.Name = "MagicResistWeigttextbox"; + MagicResistWeigttextbox.Size = new Size(44, 23); + MagicResistWeigttextbox.TabIndex = 3; + MagicResistWeigttextbox.TextChanged += MagicResistWeigttextbox_TextChanged; + // + // label2 + // + label2.AutoSize = true; + label2.Location = new Point(18, 43); + label2.Margin = new Padding(4, 0, 4, 0); + label2.Name = "label2"; + label2.Size = new Size(111, 15); + label2.TabIndex = 2; + label2.Text = "MagicResist Weight"; + // + // PoisonResistWeighttextbox + // + PoisonResistWeighttextbox.Location = new Point(141, 69); + PoisonResistWeighttextbox.Margin = new Padding(4, 3, 4, 3); + PoisonResistWeighttextbox.MaxLength = 3; + PoisonResistWeighttextbox.Name = "PoisonResistWeighttextbox"; + PoisonResistWeighttextbox.Size = new Size(44, 23); + PoisonResistWeighttextbox.TabIndex = 7; + PoisonResistWeighttextbox.TextChanged += PoisonResistWeighttextbox_TextChanged; + // + // label3 + // + label3.AutoSize = true; + label3.Location = new Point(18, 73); + label3.Margin = new Padding(4, 0, 4, 0); + label3.Name = "label3"; + label3.Size = new Size(114, 15); + label3.TabIndex = 6; + label3.Text = "PoisonResist Weight"; + // + // CritialRateWeighttextbox + // + CritialRateWeighttextbox.Location = new Point(141, 99); + CritialRateWeighttextbox.Margin = new Padding(4, 3, 4, 3); + CritialRateWeighttextbox.MaxLength = 3; + CritialRateWeighttextbox.Name = "CritialRateWeighttextbox"; + CritialRateWeighttextbox.Size = new Size(44, 23); + CritialRateWeighttextbox.TabIndex = 11; + CritialRateWeighttextbox.TextChanged += CritialRateWeighttextbox_TextChanged; + // + // label5 + // + label5.AutoSize = true; + label5.Location = new Point(18, 103); + label5.Margin = new Padding(4, 0, 4, 0); + label5.Name = "label5"; + label5.Size = new Size(108, 15); + label5.TabIndex = 10; + label5.Text = "CriticalRate Weight"; + // + // CriticalDamagetextbox + // + CriticalDamagetextbox.Location = new Point(141, 129); + CriticalDamagetextbox.Margin = new Padding(4, 3, 4, 3); + CriticalDamagetextbox.MaxLength = 3; + CriticalDamagetextbox.Name = "CriticalDamagetextbox"; + CriticalDamagetextbox.Size = new Size(44, 23); + CriticalDamagetextbox.TabIndex = 15; + CriticalDamagetextbox.TextChanged += CriticalDamagetextbox_TextChanged; + // + // label7 + // + label7.AutoSize = true; + label7.Location = new Point(18, 133); + label7.Margin = new Padding(4, 0, 4, 0); + label7.Name = "label7"; + label7.Size = new Size(111, 15); + label7.TabIndex = 14; + label7.Text = "CriticalDmg Weight"; + // + // tabControl1 + // + tabControl1.Controls.Add(tabPage3); + tabControl1.Controls.Add(tabPage2); + tabControl1.Controls.Add(tabPage4); + tabControl1.Location = new Point(14, 14); + tabControl1.Margin = new Padding(4, 3, 4, 3); + tabControl1.Name = "tabControl1"; + tabControl1.SelectedIndex = 0; + tabControl1.Size = new Size(832, 843); + tabControl1.TabIndex = 16; + tabControl1.SelectedIndexChanged += tabControl1_SelectedIndexChanged; + // + // tabPage3 + // + tabPage3.Controls.Add(panel2); + tabPage3.Controls.Add(panel1); + tabPage3.Location = new Point(4, 24); + tabPage3.Margin = new Padding(4, 3, 4, 3); + tabPage3.Name = "tabPage3"; + tabPage3.Padding = new Padding(4, 3, 4, 3); + tabPage3.Size = new Size(824, 815); + tabPage3.TabIndex = 4; + tabPage3.Text = "Class"; + tabPage3.UseVisualStyleBackColor = true; + // + // panel2 + // + panel2.Controls.Add(classGridView); + panel2.Controls.Add(ClassComboBox); + panel2.Dock = DockStyle.Left; + panel2.Location = new Point(4, 3); + panel2.Margin = new Padding(4, 3, 4, 3); + panel2.Name = "panel2"; + panel2.Size = new Size(575, 809); + panel2.TabIndex = 9; + // + // classGridView + // + classGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + classGridView.Columns.AddRange(new DataGridViewColumn[] { BaseStatType, BaseStatFormula, BaseStatBase, BaseStatGain, BaseStatGainRate, BaseStatMax }); + classGridView.Dock = DockStyle.Bottom; + classGridView.Location = new Point(0, 37); + classGridView.Margin = new Padding(4, 3, 4, 3); + classGridView.Name = "classGridView"; + classGridView.Size = new Size(575, 772); + classGridView.TabIndex = 0; + classGridView.CellValidating += classGridView_CellValidating; + classGridView.CellValueChanged += classGridView_CellValueChanged; + classGridView.DefaultValuesNeeded += classGridView_DefaultValuesNeeded; + classGridView.SelectionChanged += classGridView_SelectionChanged; + classGridView.UserDeletedRow += classGridView_UserDeletedRow; + // + // BaseStatType + // + BaseStatType.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; + BaseStatType.HeaderText = "Type"; + BaseStatType.Name = "BaseStatType"; + BaseStatType.Resizable = DataGridViewTriState.True; + BaseStatType.SortMode = DataGridViewColumnSortMode.Automatic; + // + // BaseStatFormula + // + BaseStatFormula.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; + BaseStatFormula.HeaderText = "Formula"; + BaseStatFormula.Name = "BaseStatFormula"; + BaseStatFormula.Resizable = DataGridViewTriState.True; + BaseStatFormula.SortMode = DataGridViewColumnSortMode.Automatic; + // + // BaseStatBase + // + BaseStatBase.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; + BaseStatBase.HeaderText = "Base"; + BaseStatBase.Name = "BaseStatBase"; + // + // BaseStatGain + // + BaseStatGain.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; + BaseStatGain.HeaderText = "Gain"; + BaseStatGain.Name = "BaseStatGain"; + // + // BaseStatGainRate + // + BaseStatGainRate.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; + BaseStatGainRate.HeaderText = "GainRate"; + BaseStatGainRate.Name = "BaseStatGainRate"; + // + // BaseStatMax + // + BaseStatMax.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; + BaseStatMax.HeaderText = "Max"; + BaseStatMax.Name = "BaseStatMax"; + // + // ClassComboBox + // + ClassComboBox.DropDownStyle = ComboBoxStyle.DropDownList; + ClassComboBox.FormattingEnabled = true; + ClassComboBox.Location = new Point(4, 3); + ClassComboBox.Margin = new Padding(4, 3, 4, 3); + ClassComboBox.Name = "ClassComboBox"; + ClassComboBox.Size = new Size(107, 23); + ClassComboBox.TabIndex = 7; + ClassComboBox.SelectedIndexChanged += ClassComboBox_SelectedIndexChanged; + // + // panel1 + // + panel1.Controls.Add(classCapGridView); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(587, 3); + panel1.Margin = new Padding(4, 3, 4, 3); + panel1.Name = "panel1"; + panel1.Size = new Size(233, 809); + panel1.TabIndex = 8; + // + // classCapGridView + // + classCapGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + classCapGridView.Columns.AddRange(new DataGridViewColumn[] { CapType, Value }); + classCapGridView.Dock = DockStyle.Bottom; + classCapGridView.Location = new Point(0, 37); + classCapGridView.Margin = new Padding(4, 3, 4, 3); + classCapGridView.Name = "classCapGridView"; + classCapGridView.Size = new Size(233, 772); + classCapGridView.TabIndex = 0; + classCapGridView.CellValidating += classCapGridView_CellValidating; + classCapGridView.CellValueChanged += classCapGridView_CellValueChanged; + classCapGridView.DefaultValuesNeeded += classCapGridView_DefaultValuesNeeded; + classCapGridView.UserDeletedRow += classCapGridView_UserDeletedRow; + // + // CapType + // + CapType.HeaderText = "Cap Type"; + CapType.Name = "CapType"; + // + // Value + // + Value.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; + Value.HeaderText = "Value"; + Value.Name = "Value"; + // + // tabPage2 + // + tabPage2.Controls.Add(ManaRegenWeighttextBox); + tabPage2.Controls.Add(label37); + tabPage2.Controls.Add(HealthRegenWeighttextBox); + tabPage2.Controls.Add(label35); + tabPage2.Controls.Add(groupBox2); + tabPage2.Controls.Add(PoisonAttackWeighttextbox); + tabPage2.Controls.Add(label11); + tabPage2.Controls.Add(FreezingWeighttextbox); + tabPage2.Controls.Add(label10); + tabPage2.Controls.Add(CriticalDamagetextbox); + tabPage2.Controls.Add(label7); + tabPage2.Controls.Add(label2); + tabPage2.Controls.Add(MagicResistWeigttextbox); + tabPage2.Controls.Add(CritialRateWeighttextbox); + tabPage2.Controls.Add(label5); + tabPage2.Controls.Add(label3); + tabPage2.Controls.Add(PoisonResistWeighttextbox); + tabPage2.Location = new Point(4, 24); + tabPage2.Margin = new Padding(4, 3, 4, 3); + tabPage2.Name = "tabPage2"; + tabPage2.Padding = new Padding(4, 3, 4, 3); + tabPage2.Size = new Size(824, 815); + tabPage2.TabIndex = 1; + tabPage2.Text = "Itemstats"; + tabPage2.UseVisualStyleBackColor = true; + // + // ManaRegenWeighttextBox + // + ManaRegenWeighttextBox.Location = new Point(141, 249); + ManaRegenWeighttextBox.Margin = new Padding(4, 3, 4, 3); + ManaRegenWeighttextBox.MaxLength = 3; + ManaRegenWeighttextBox.Name = "ManaRegenWeighttextBox"; + ManaRegenWeighttextBox.Size = new Size(44, 23); + ManaRegenWeighttextBox.TabIndex = 32; + ManaRegenWeighttextBox.TextChanged += ManaRegenWeighttextBox_TextChanged; + // + // label37 + // + label37.AutoSize = true; + label37.Location = new Point(18, 253); + label37.Margin = new Padding(4, 0, 4, 0); + label37.Name = "label37"; + label37.Size = new Size(102, 15); + label37.TabIndex = 31; + label37.Text = "MP Regen Weight"; + // + // HealthRegenWeighttextBox + // + HealthRegenWeighttextBox.Location = new Point(141, 219); + HealthRegenWeighttextBox.Margin = new Padding(4, 3, 4, 3); + HealthRegenWeighttextBox.MaxLength = 3; + HealthRegenWeighttextBox.Name = "HealthRegenWeighttextBox"; + HealthRegenWeighttextBox.Size = new Size(44, 23); + HealthRegenWeighttextBox.TabIndex = 28; + HealthRegenWeighttextBox.TextChanged += HealthRegenWeighttextBox_TextChanged; + // + // label35 + // + label35.AutoSize = true; + label35.Location = new Point(18, 223); + label35.Margin = new Padding(4, 0, 4, 0); + label35.Name = "label35"; + label35.Size = new Size(100, 15); + label35.TabIndex = 27; + label35.Text = "HP Regen Weight"; + // + // groupBox2 + // + groupBox2.Controls.Add(CanFreezecheckBox); + groupBox2.Controls.Add(CanResistPoisoncheckBox); + groupBox2.Controls.Add(CanResistMagiccheckBox); + groupBox2.Location = new Point(460, 12); + groupBox2.Margin = new Padding(4, 3, 4, 3); + groupBox2.Name = "groupBox2"; + groupBox2.Padding = new Padding(4, 3, 4, 3); + groupBox2.Size = new Size(265, 108); + groupBox2.TabIndex = 24; + groupBox2.TabStop = false; + groupBox2.Text = "Pvp only"; + // + // CanFreezecheckBox + // + CanFreezecheckBox.AutoSize = true; + CanFreezecheckBox.Location = new Point(21, 77); + CanFreezecheckBox.Margin = new Padding(4, 3, 4, 3); + CanFreezecheckBox.Name = "CanFreezecheckBox"; + CanFreezecheckBox.Size = new Size(83, 19); + CanFreezecheckBox.TabIndex = 2; + CanFreezecheckBox.Text = "Can Freeze"; + CanFreezecheckBox.UseVisualStyleBackColor = true; + CanFreezecheckBox.CheckedChanged += CanFreezecheckBox_CheckedChanged; + // + // CanResistPoisoncheckBox + // + CanResistPoisoncheckBox.AutoSize = true; + CanResistPoisoncheckBox.Location = new Point(21, 51); + CanResistPoisoncheckBox.Margin = new Padding(4, 3, 4, 3); + CanResistPoisoncheckBox.Name = "CanResistPoisoncheckBox"; + CanResistPoisoncheckBox.Size = new Size(119, 19); + CanResistPoisoncheckBox.TabIndex = 1; + CanResistPoisoncheckBox.Text = "Can Resist Poison"; + CanResistPoisoncheckBox.UseVisualStyleBackColor = true; + CanResistPoisoncheckBox.CheckedChanged += CanResistPoisoncheckBox_CheckedChanged; + // + // CanResistMagiccheckBox + // + CanResistMagiccheckBox.AutoSize = true; + CanResistMagiccheckBox.Location = new Point(21, 24); + CanResistMagiccheckBox.Margin = new Padding(4, 3, 4, 3); + CanResistMagiccheckBox.Name = "CanResistMagiccheckBox"; + CanResistMagiccheckBox.Size = new Size(116, 19); + CanResistMagiccheckBox.TabIndex = 0; + CanResistMagiccheckBox.Text = "Can Resist Magic"; + CanResistMagiccheckBox.UseVisualStyleBackColor = true; + CanResistMagiccheckBox.CheckedChanged += CanResistMagiccheckBox_CheckedChanged; + // + // PoisonAttackWeighttextbox + // + PoisonAttackWeighttextbox.Location = new Point(141, 189); + PoisonAttackWeighttextbox.Margin = new Padding(4, 3, 4, 3); + PoisonAttackWeighttextbox.MaxLength = 3; + PoisonAttackWeighttextbox.Name = "PoisonAttackWeighttextbox"; + PoisonAttackWeighttextbox.Size = new Size(44, 23); + PoisonAttackWeighttextbox.TabIndex = 23; + PoisonAttackWeighttextbox.TextChanged += PoisonAttackWeighttextbox_TextChanged; + // + // label11 + // + label11.AutoSize = true; + label11.Location = new Point(18, 193); + label11.Margin = new Padding(4, 0, 4, 0); + label11.Name = "label11"; + label11.Size = new Size(102, 15); + label11.TabIndex = 22; + label11.Text = "PoisonAtk Weight"; + // + // FreezingWeighttextbox + // + FreezingWeighttextbox.Location = new Point(141, 159); + FreezingWeighttextbox.Margin = new Padding(4, 3, 4, 3); + FreezingWeighttextbox.MaxLength = 3; + FreezingWeighttextbox.Name = "FreezingWeighttextbox"; + FreezingWeighttextbox.Size = new Size(44, 23); + FreezingWeighttextbox.TabIndex = 19; + FreezingWeighttextbox.TextChanged += FreezingWeighttextbox_TextChanged; + // + // label10 + // + label10.AutoSize = true; + label10.Location = new Point(18, 163); + label10.Margin = new Padding(4, 0, 4, 0); + label10.Name = "label10"; + label10.Size = new Size(92, 15); + label10.TabIndex = 18; + label10.Text = "Freezing Weight"; + // + // tabPage4 + // + tabPage4.Controls.Add(RISDeleteIndexbutton); + tabPage4.Controls.Add(RISAddIndexbutton); + tabPage4.Controls.Add(groupBox3); + tabPage4.Controls.Add(label40); + tabPage4.Controls.Add(RISIndexcomboBox); + tabPage4.Location = new Point(4, 24); + tabPage4.Margin = new Padding(4, 3, 4, 3); + tabPage4.Name = "tabPage4"; + tabPage4.Padding = new Padding(4, 3, 4, 3); + tabPage4.Size = new Size(824, 815); + tabPage4.TabIndex = 3; + tabPage4.Text = "Random Item Stats"; + tabPage4.UseVisualStyleBackColor = true; + // + // RISDeleteIndexbutton + // + RISDeleteIndexbutton.Location = new Point(246, 3); + RISDeleteIndexbutton.Margin = new Padding(4, 3, 4, 3); + RISDeleteIndexbutton.Name = "RISDeleteIndexbutton"; + RISDeleteIndexbutton.Size = new Size(24, 24); + RISDeleteIndexbutton.TabIndex = 12; + RISDeleteIndexbutton.Text = "-"; + RISDeleteIndexbutton.UseVisualStyleBackColor = true; + RISDeleteIndexbutton.Click += RISDeleteIndexbutton_Click; + // + // RISAddIndexbutton + // + RISAddIndexbutton.Location = new Point(212, 3); + RISAddIndexbutton.Margin = new Padding(4, 3, 4, 3); + RISAddIndexbutton.Name = "RISAddIndexbutton"; + RISAddIndexbutton.Size = new Size(24, 24); + RISAddIndexbutton.TabIndex = 10; + RISAddIndexbutton.Text = "+"; + RISAddIndexbutton.UseVisualStyleBackColor = true; + RISAddIndexbutton.Click += RISAddIndexbutton_Click; + // + // groupBox3 + // + groupBox3.Controls.Add(label64); + groupBox3.Controls.Add(label63); + groupBox3.Controls.Add(label62); + groupBox3.Controls.Add(label61); + groupBox3.Controls.Add(label60); + groupBox3.Controls.Add(label59); + groupBox3.Controls.Add(label58); + groupBox3.Controls.Add(label57); + groupBox3.Controls.Add(label56); + groupBox3.Controls.Add(label55); + groupBox3.Controls.Add(label54); + groupBox3.Controls.Add(label53); + groupBox3.Controls.Add(label52); + groupBox3.Controls.Add(label51); + groupBox3.Controls.Add(label50); + groupBox3.Controls.Add(label49); + groupBox3.Controls.Add(label48); + groupBox3.Controls.Add(label47); + groupBox3.Controls.Add(label46); + groupBox3.Controls.Add(label45); + groupBox3.Controls.Add(label44); + groupBox3.Controls.Add(label43); + groupBox3.Controls.Add(label42); + groupBox3.Controls.Add(label41); + groupBox3.Controls.Add(groupBox6); + groupBox3.Controls.Add(groupBox5); + groupBox3.Controls.Add(groupBox4); + groupBox3.Location = new Point(7, 35); + groupBox3.Margin = new Padding(4, 3, 4, 3); + groupBox3.Name = "groupBox3"; + groupBox3.Padding = new Padding(4, 3, 4, 3); + groupBox3.Size = new Size(700, 801); + groupBox3.TabIndex = 9; + groupBox3.TabStop = false; + groupBox3.Text = "Random settings"; + // + // label64 + // + label64.AutoSize = true; + label64.Location = new Point(7, 738); + label64.Margin = new Padding(4, 0, 4, 0); + label64.Name = "label64"; + label64.Size = new Size(32, 15); + label64.TabIndex = 40; + label64.Text = "Slots"; + // + // label63 + // + label63.AutoSize = true; + label63.Location = new Point(7, 708); + label63.Margin = new Padding(4, 0, 4, 0); + label63.Name = "label63"; + label63.Size = new Size(81, 15); + label63.TabIndex = 39; + label63.Text = "Curse chance:"; + // + // label62 + // + label62.AutoSize = true; + label62.Location = new Point(7, 678); + label62.Margin = new Padding(4, 0, 4, 0); + label62.Name = "label62"; + label62.Size = new Size(32, 15); + label62.TabIndex = 38; + label62.Text = "Luck"; + // + // label61 + // + label61.AutoSize = true; + label61.Location = new Point(7, 648); + label61.Margin = new Padding(4, 0, 4, 0); + label61.Name = "label61"; + label61.Size = new Size(76, 15); + label61.TabIndex = 37; + label61.Text = "Attack Speed"; + // + // label60 + // + label60.AutoSize = true; + label60.Location = new Point(7, 618); + label60.Margin = new Padding(4, 0, 4, 0); + label60.Name = "label60"; + label60.Size = new Size(80, 15); + label60.TabIndex = 36; + label60.Text = "Poison Attack"; + // + // label59 + // + label59.AutoSize = true; + label59.Location = new Point(7, 588); + label59.Margin = new Padding(4, 0, 4, 0); + label59.Name = "label59"; + label59.Size = new Size(51, 15); + label59.TabIndex = 35; + label59.Text = "Freezing"; + // + // label58 + // + label58.AutoSize = true; + label58.Location = new Point(7, 558); + label58.Margin = new Padding(4, 0, 4, 0); + label58.Name = "label58"; + label58.Size = new Size(91, 15); + label58.TabIndex = 34; + label58.Text = "Critical Damage"; + // + // label57 + // + label57.AutoSize = true; + label57.Location = new Point(7, 528); + label57.Margin = new Padding(4, 0, 4, 0); + label57.Name = "label57"; + label57.Size = new Size(67, 15); + label57.TabIndex = 33; + label57.Text = "CriticalRate"; + // + // label56 + // + label56.AutoSize = true; + label56.Location = new Point(7, 498); + label56.Margin = new Padding(4, 0, 4, 0); + label56.Name = "label56"; + label56.Size = new Size(94, 15); + label56.TabIndex = 32; + label56.Text = "Poison Recovery"; + // + // label55 + // + label55.AutoSize = true; + label55.Location = new Point(7, 468); + label55.Margin = new Padding(4, 0, 4, 0); + label55.Name = "label55"; + label55.Size = new Size(88, 15); + label55.TabIndex = 31; + label55.Text = "Mana Recovery"; + // + // label54 + // + label54.AutoSize = true; + label54.Location = new Point(7, 438); + label54.Margin = new Padding(4, 0, 4, 0); + label54.Name = "label54"; + label54.Size = new Size(93, 15); + label54.TabIndex = 30; + label54.Text = "Health Recovery"; + // + // label53 + // + label53.AutoSize = true; + label53.Location = new Point(7, 408); + label53.Margin = new Padding(4, 0, 4, 0); + label53.Name = "label53"; + label53.Size = new Size(76, 15); + label53.TabIndex = 29; + label53.Text = "Poison Resist"; + // + // label52 + // + label52.AutoSize = true; + label52.Location = new Point(7, 378); + label52.Margin = new Padding(4, 0, 4, 0); + label52.Name = "label52"; + label52.Size = new Size(73, 15); + label52.TabIndex = 28; + label52.Text = "Magic Resist"; + // + // label51 + // + label51.AutoSize = true; + label51.Location = new Point(7, 348); + label51.Margin = new Padding(4, 0, 4, 0); + label51.Name = "label51"; + label51.Size = new Size(42, 15); + label51.TabIndex = 27; + label51.Text = "Strong"; + // + // label50 + // + label50.AutoSize = true; + label50.Location = new Point(7, 318); + label50.Margin = new Padding(4, 0, 4, 0); + label50.Name = "label50"; + label50.Size = new Size(51, 15); + label50.TabIndex = 26; + label50.Text = "Max Mp"; + // + // label49 + // + label49.AutoSize = true; + label49.Location = new Point(7, 288); + label49.Margin = new Padding(4, 0, 4, 0); + label49.Name = "label49"; + label49.Size = new Size(49, 15); + label49.TabIndex = 25; + label49.Text = "Max Hp"; + // + // label48 + // + label48.AutoSize = true; + label48.Location = new Point(7, 258); + label48.Margin = new Padding(4, 0, 4, 0); + label48.Name = "label48"; + label48.Size = new Size(67, 15); + label48.TabIndex = 24; + label48.Text = "Max Agility"; + // + // label47 + // + label47.AutoSize = true; + label47.Location = new Point(7, 228); + label47.Margin = new Padding(4, 0, 4, 0); + label47.Name = "label47"; + label47.Size = new Size(82, 15); + label47.TabIndex = 23; + label47.Text = "Max Accuracy"; + // + // label46 + // + label46.AutoSize = true; + label46.Location = new Point(7, 198); + label46.Margin = new Padding(4, 0, 4, 0); + label46.Name = "label46"; + label46.Size = new Size(45, 15); + label46.TabIndex = 22; + label46.Text = "Max Sc"; + // + // label45 + // + label45.AutoSize = true; + label45.Location = new Point(7, 168); + label45.Margin = new Padding(4, 0, 4, 0); + label45.Name = "label45"; + label45.Size = new Size(50, 15); + label45.TabIndex = 21; + label45.Text = "Max Mc"; + // + // label44 + // + label44.AutoSize = true; + label44.Location = new Point(7, 138); + label44.Margin = new Padding(4, 0, 4, 0); + label44.Name = "label44"; + label44.Size = new Size(47, 15); + label44.TabIndex = 20; + label44.Text = "Max Dc"; + // + // label43 + // + label43.AutoSize = true; + label43.Location = new Point(7, 113); + label43.Margin = new Padding(4, 0, 4, 0); + label43.Name = "label43"; + label43.Size = new Size(56, 15); + label43.TabIndex = 19; + label43.Text = "Max Mac"; + // + // label42 + // + label42.AutoSize = true; + label42.Location = new Point(7, 78); + label42.Margin = new Padding(4, 0, 4, 0); + label42.Name = "label42"; + label42.Size = new Size(47, 15); + label42.TabIndex = 18; + label42.Text = "Max Ac"; + // + // label41 + // + label41.AutoSize = true; + label41.Location = new Point(7, 48); + label41.Margin = new Padding(4, 0, 4, 0); + label41.Name = "label41"; + label41.Size = new Size(84, 15); + label41.TabIndex = 17; + label41.Text = "Max Durability"; + // + // groupBox6 + // + groupBox6.Controls.Add(RISSlotMaxStattextBox); + groupBox6.Controls.Add(RISLuckMaxStattextBox); + groupBox6.Controls.Add(RISAttackSpeedMaxStattextBox); + groupBox6.Controls.Add(RISPoisonAttackMaxStattextBox); + groupBox6.Controls.Add(RISFreezingMaxStattextBox); + groupBox6.Controls.Add(RISCriticalDamageMaxStattextBox); + groupBox6.Controls.Add(RISCriticalRateMaxStattextBox); + groupBox6.Controls.Add(RISPoisonRecovMaxStattextBox); + groupBox6.Controls.Add(RISMpRecovMaxStattextBox); + groupBox6.Controls.Add(RISHpRecovMaxStattextBox); + groupBox6.Controls.Add(RISPoisonResistMaxStattextBox); + groupBox6.Controls.Add(RISMagicResistMaxStattextBox); + groupBox6.Controls.Add(RISStrongMaxStattextBox); + groupBox6.Controls.Add(RISMaxMpMaxStattextBox); + groupBox6.Controls.Add(RISMaxHpMaxStattextBox); + groupBox6.Controls.Add(RISMaxAgilMaxStattextBox); + groupBox6.Controls.Add(RISMaxAccMaxStattextBox); + groupBox6.Controls.Add(RISMaxScMaxStattextBox); + groupBox6.Controls.Add(RISMaxMcMaxStattextBox); + groupBox6.Controls.Add(RISMaxDcMaxStattextBox); + groupBox6.Controls.Add(RISMaxMacMaxStattextBox); + groupBox6.Controls.Add(RISMaxAcMaxStattextBox); + groupBox6.Controls.Add(RISMaxDuraMaxStattextBox); + groupBox6.Location = new Point(405, 22); + groupBox6.Margin = new Padding(4, 3, 4, 3); + groupBox6.Name = "groupBox6"; + groupBox6.Padding = new Padding(4, 3, 4, 3); + groupBox6.Size = new Size(111, 748); + groupBox6.TabIndex = 3; + groupBox6.TabStop = false; + groupBox6.Text = "Maximum Stats"; + // + // RISSlotMaxStattextBox + // + RISSlotMaxStattextBox.Location = new Point(24, 713); + RISSlotMaxStattextBox.Margin = new Padding(4, 3, 4, 3); + RISSlotMaxStattextBox.Name = "RISSlotMaxStattextBox"; + RISSlotMaxStattextBox.Size = new Size(44, 23); + RISSlotMaxStattextBox.TabIndex = 53; + RISSlotMaxStattextBox.TextChanged += RISSlotMaxStattextBox_TextChanged; + // + // RISLuckMaxStattextBox + // + RISLuckMaxStattextBox.Location = new Point(24, 653); + RISLuckMaxStattextBox.Margin = new Padding(4, 3, 4, 3); + RISLuckMaxStattextBox.MaxLength = 3; + RISLuckMaxStattextBox.Name = "RISLuckMaxStattextBox"; + RISLuckMaxStattextBox.Size = new Size(44, 23); + RISLuckMaxStattextBox.TabIndex = 52; + RISLuckMaxStattextBox.TextChanged += RISLuckMaxStattextBox_TextChanged; + // + // RISAttackSpeedMaxStattextBox + // + RISAttackSpeedMaxStattextBox.Location = new Point(24, 623); + RISAttackSpeedMaxStattextBox.Margin = new Padding(4, 3, 4, 3); + RISAttackSpeedMaxStattextBox.MaxLength = 3; + RISAttackSpeedMaxStattextBox.Name = "RISAttackSpeedMaxStattextBox"; + RISAttackSpeedMaxStattextBox.Size = new Size(44, 23); + RISAttackSpeedMaxStattextBox.TabIndex = 51; + RISAttackSpeedMaxStattextBox.TextChanged += RISAttackSpeedMaxStattextBox_TextChanged; + // + // RISPoisonAttackMaxStattextBox + // + RISPoisonAttackMaxStattextBox.Location = new Point(24, 593); + RISPoisonAttackMaxStattextBox.Margin = new Padding(4, 3, 4, 3); + RISPoisonAttackMaxStattextBox.MaxLength = 3; + RISPoisonAttackMaxStattextBox.Name = "RISPoisonAttackMaxStattextBox"; + RISPoisonAttackMaxStattextBox.Size = new Size(44, 23); + RISPoisonAttackMaxStattextBox.TabIndex = 50; + RISPoisonAttackMaxStattextBox.TextChanged += RISPoisonAttackMaxStattextBox_TextChanged; + // + // RISFreezingMaxStattextBox + // + RISFreezingMaxStattextBox.Location = new Point(24, 563); + RISFreezingMaxStattextBox.Margin = new Padding(4, 3, 4, 3); + RISFreezingMaxStattextBox.MaxLength = 3; + RISFreezingMaxStattextBox.Name = "RISFreezingMaxStattextBox"; + RISFreezingMaxStattextBox.Size = new Size(44, 23); + RISFreezingMaxStattextBox.TabIndex = 49; + RISFreezingMaxStattextBox.TextChanged += RISFreezingMaxStattextBox_TextChanged; + // + // RISCriticalDamageMaxStattextBox + // + RISCriticalDamageMaxStattextBox.Location = new Point(24, 533); + RISCriticalDamageMaxStattextBox.Margin = new Padding(4, 3, 4, 3); + RISCriticalDamageMaxStattextBox.MaxLength = 3; + RISCriticalDamageMaxStattextBox.Name = "RISCriticalDamageMaxStattextBox"; + RISCriticalDamageMaxStattextBox.Size = new Size(44, 23); + RISCriticalDamageMaxStattextBox.TabIndex = 48; + RISCriticalDamageMaxStattextBox.TextChanged += RISCriticalDamageMaxStattextBox_TextChanged; + // + // RISCriticalRateMaxStattextBox + // + RISCriticalRateMaxStattextBox.Location = new Point(24, 503); + RISCriticalRateMaxStattextBox.Margin = new Padding(4, 3, 4, 3); + RISCriticalRateMaxStattextBox.MaxLength = 3; + RISCriticalRateMaxStattextBox.Name = "RISCriticalRateMaxStattextBox"; + RISCriticalRateMaxStattextBox.Size = new Size(44, 23); + RISCriticalRateMaxStattextBox.TabIndex = 47; + RISCriticalRateMaxStattextBox.TextChanged += RISCriticalRateMaxStattextBox_TextChanged; + // + // RISPoisonRecovMaxStattextBox + // + RISPoisonRecovMaxStattextBox.Location = new Point(24, 473); + RISPoisonRecovMaxStattextBox.Margin = new Padding(4, 3, 4, 3); + RISPoisonRecovMaxStattextBox.MaxLength = 3; + RISPoisonRecovMaxStattextBox.Name = "RISPoisonRecovMaxStattextBox"; + RISPoisonRecovMaxStattextBox.Size = new Size(44, 23); + RISPoisonRecovMaxStattextBox.TabIndex = 46; + RISPoisonRecovMaxStattextBox.TextChanged += RISPoisonRecovMaxStattextBox_TextChanged; + // + // RISMpRecovMaxStattextBox + // + RISMpRecovMaxStattextBox.Location = new Point(24, 443); + RISMpRecovMaxStattextBox.Margin = new Padding(4, 3, 4, 3); + RISMpRecovMaxStattextBox.MaxLength = 3; + RISMpRecovMaxStattextBox.Name = "RISMpRecovMaxStattextBox"; + RISMpRecovMaxStattextBox.Size = new Size(44, 23); + RISMpRecovMaxStattextBox.TabIndex = 45; + RISMpRecovMaxStattextBox.TextChanged += RISMpRecovMaxStattextBox_TextChanged; + // + // RISHpRecovMaxStattextBox + // + RISHpRecovMaxStattextBox.Location = new Point(24, 413); + RISHpRecovMaxStattextBox.Margin = new Padding(4, 3, 4, 3); + RISHpRecovMaxStattextBox.MaxLength = 3; + RISHpRecovMaxStattextBox.Name = "RISHpRecovMaxStattextBox"; + RISHpRecovMaxStattextBox.Size = new Size(44, 23); + RISHpRecovMaxStattextBox.TabIndex = 44; + RISHpRecovMaxStattextBox.TextChanged += RISHpRecovMaxStattextBox_TextChanged; + // + // RISPoisonResistMaxStattextBox + // + RISPoisonResistMaxStattextBox.Location = new Point(24, 383); + RISPoisonResistMaxStattextBox.Margin = new Padding(4, 3, 4, 3); + RISPoisonResistMaxStattextBox.MaxLength = 3; + RISPoisonResistMaxStattextBox.Name = "RISPoisonResistMaxStattextBox"; + RISPoisonResistMaxStattextBox.Size = new Size(44, 23); + RISPoisonResistMaxStattextBox.TabIndex = 43; + RISPoisonResistMaxStattextBox.TextChanged += RISPoisonResistMaxStattextBox_TextChanged; + // + // RISMagicResistMaxStattextBox + // + RISMagicResistMaxStattextBox.Location = new Point(24, 353); + RISMagicResistMaxStattextBox.Margin = new Padding(4, 3, 4, 3); + RISMagicResistMaxStattextBox.MaxLength = 3; + RISMagicResistMaxStattextBox.Name = "RISMagicResistMaxStattextBox"; + RISMagicResistMaxStattextBox.Size = new Size(44, 23); + RISMagicResistMaxStattextBox.TabIndex = 42; + RISMagicResistMaxStattextBox.TextChanged += RISMagicResistMaxStattextBox_TextChanged; + // + // RISStrongMaxStattextBox + // + RISStrongMaxStattextBox.Location = new Point(24, 323); + RISStrongMaxStattextBox.Margin = new Padding(4, 3, 4, 3); + RISStrongMaxStattextBox.MaxLength = 3; + RISStrongMaxStattextBox.Name = "RISStrongMaxStattextBox"; + RISStrongMaxStattextBox.Size = new Size(44, 23); + RISStrongMaxStattextBox.TabIndex = 41; + RISStrongMaxStattextBox.TextChanged += RISStrongMaxStattextBox_TextChanged; + // + // RISMaxMpMaxStattextBox + // + RISMaxMpMaxStattextBox.Location = new Point(24, 293); + RISMaxMpMaxStattextBox.Margin = new Padding(4, 3, 4, 3); + RISMaxMpMaxStattextBox.MaxLength = 3; + RISMaxMpMaxStattextBox.Name = "RISMaxMpMaxStattextBox"; + RISMaxMpMaxStattextBox.Size = new Size(44, 23); + RISMaxMpMaxStattextBox.TabIndex = 40; + RISMaxMpMaxStattextBox.TextChanged += RISMaxMpMaxStattextBox_TextChanged; + // + // RISMaxHpMaxStattextBox + // + RISMaxHpMaxStattextBox.Location = new Point(24, 263); + RISMaxHpMaxStattextBox.Margin = new Padding(4, 3, 4, 3); + RISMaxHpMaxStattextBox.MaxLength = 3; + RISMaxHpMaxStattextBox.Name = "RISMaxHpMaxStattextBox"; + RISMaxHpMaxStattextBox.Size = new Size(44, 23); + RISMaxHpMaxStattextBox.TabIndex = 39; + RISMaxHpMaxStattextBox.TextChanged += RISMaxHpMaxStattextBox_TextChanged; + // + // RISMaxAgilMaxStattextBox + // + RISMaxAgilMaxStattextBox.Location = new Point(24, 233); + RISMaxAgilMaxStattextBox.Margin = new Padding(4, 3, 4, 3); + RISMaxAgilMaxStattextBox.MaxLength = 3; + RISMaxAgilMaxStattextBox.Name = "RISMaxAgilMaxStattextBox"; + RISMaxAgilMaxStattextBox.Size = new Size(44, 23); + RISMaxAgilMaxStattextBox.TabIndex = 38; + RISMaxAgilMaxStattextBox.TextChanged += RISMaxAgilMaxStattextBox_TextChanged; + // + // RISMaxAccMaxStattextBox + // + RISMaxAccMaxStattextBox.Location = new Point(24, 203); + RISMaxAccMaxStattextBox.Margin = new Padding(4, 3, 4, 3); + RISMaxAccMaxStattextBox.MaxLength = 3; + RISMaxAccMaxStattextBox.Name = "RISMaxAccMaxStattextBox"; + RISMaxAccMaxStattextBox.Size = new Size(44, 23); + RISMaxAccMaxStattextBox.TabIndex = 37; + RISMaxAccMaxStattextBox.TextChanged += RISMaxAccMaxStattextBox_TextChanged; + // + // RISMaxScMaxStattextBox + // + RISMaxScMaxStattextBox.Location = new Point(24, 173); + RISMaxScMaxStattextBox.Margin = new Padding(4, 3, 4, 3); + RISMaxScMaxStattextBox.MaxLength = 3; + RISMaxScMaxStattextBox.Name = "RISMaxScMaxStattextBox"; + RISMaxScMaxStattextBox.Size = new Size(44, 23); + RISMaxScMaxStattextBox.TabIndex = 36; + RISMaxScMaxStattextBox.TextChanged += RISMaxScMaxStattextBox_TextChanged; + // + // RISMaxMcMaxStattextBox + // + RISMaxMcMaxStattextBox.Location = new Point(24, 143); + RISMaxMcMaxStattextBox.Margin = new Padding(4, 3, 4, 3); + RISMaxMcMaxStattextBox.MaxLength = 3; + RISMaxMcMaxStattextBox.Name = "RISMaxMcMaxStattextBox"; + RISMaxMcMaxStattextBox.Size = new Size(44, 23); + RISMaxMcMaxStattextBox.TabIndex = 35; + RISMaxMcMaxStattextBox.TextChanged += RISMaxMcMaxStattextBox_TextChanged; + // + // RISMaxDcMaxStattextBox + // + RISMaxDcMaxStattextBox.Location = new Point(24, 113); + RISMaxDcMaxStattextBox.Margin = new Padding(4, 3, 4, 3); + RISMaxDcMaxStattextBox.MaxLength = 3; + RISMaxDcMaxStattextBox.Name = "RISMaxDcMaxStattextBox"; + RISMaxDcMaxStattextBox.Size = new Size(44, 23); + RISMaxDcMaxStattextBox.TabIndex = 34; + RISMaxDcMaxStattextBox.TextChanged += RISMaxDcMaxStattextBox_TextChanged; + // + // RISMaxMacMaxStattextBox + // + RISMaxMacMaxStattextBox.Location = new Point(24, 83); + RISMaxMacMaxStattextBox.Margin = new Padding(4, 3, 4, 3); + RISMaxMacMaxStattextBox.MaxLength = 3; + RISMaxMacMaxStattextBox.Name = "RISMaxMacMaxStattextBox"; + RISMaxMacMaxStattextBox.Size = new Size(44, 23); + RISMaxMacMaxStattextBox.TabIndex = 33; + RISMaxMacMaxStattextBox.TextChanged += RISMaxMacMaxStattextBox_TextChanged; + // + // RISMaxAcMaxStattextBox + // + RISMaxAcMaxStattextBox.Location = new Point(24, 53); + RISMaxAcMaxStattextBox.Margin = new Padding(4, 3, 4, 3); + RISMaxAcMaxStattextBox.MaxLength = 3; + RISMaxAcMaxStattextBox.Name = "RISMaxAcMaxStattextBox"; + RISMaxAcMaxStattextBox.Size = new Size(44, 23); + RISMaxAcMaxStattextBox.TabIndex = 32; + RISMaxAcMaxStattextBox.TextChanged += RISMaxAcMaxStattextBox_TextChanged; + // + // RISMaxDuraMaxStattextBox + // + RISMaxDuraMaxStattextBox.Location = new Point(24, 23); + RISMaxDuraMaxStattextBox.Margin = new Padding(4, 3, 4, 3); + RISMaxDuraMaxStattextBox.MaxLength = 3; + RISMaxDuraMaxStattextBox.Name = "RISMaxDuraMaxStattextBox"; + RISMaxDuraMaxStattextBox.Size = new Size(44, 23); + RISMaxDuraMaxStattextBox.TabIndex = 31; + RISMaxDuraMaxStattextBox.TextChanged += RISMaxDuraMaxStattextBox_TextChanged; + // + // groupBox5 + // + groupBox5.Controls.Add(RISSlotStatChancetextBox); + groupBox5.Controls.Add(RISLuckStatChancetextBox); + groupBox5.Controls.Add(RISMaxDuraStatChancetextBox); + groupBox5.Controls.Add(RISAttackSpeedStatChancetextBox); + groupBox5.Controls.Add(RISMaxAcStatChancetextBox); + groupBox5.Controls.Add(RISPoisonAttackStatChancetextBox); + groupBox5.Controls.Add(RISMaxMacStatChancetextBox); + groupBox5.Controls.Add(RISFreezingStatChancetextBox); + groupBox5.Controls.Add(RISMaxDcStatChancetextBox); + groupBox5.Controls.Add(RISCriticalDamageStatChancetextBox); + groupBox5.Controls.Add(RISMaxMcStatChancetextBox); + groupBox5.Controls.Add(RISCriticalRateStatChancetextBox); + groupBox5.Controls.Add(RISMaxScStatChancetextBox); + groupBox5.Controls.Add(RISPoisonRecovStatChancetextBox); + groupBox5.Controls.Add(RISMaxAccStatChancetextBox); + groupBox5.Controls.Add(RISMpRecovStatChancetextBox); + groupBox5.Controls.Add(RISMaxAgilStatChancetextBox); + groupBox5.Controls.Add(RISHpRecovStatChancetextBox); + groupBox5.Controls.Add(RISMaxHpStatChancetextBox); + groupBox5.Controls.Add(RISPoisonResistStatChancetextBox); + groupBox5.Controls.Add(RISMaxMpStatChancetextBox); + groupBox5.Controls.Add(RISMagicResistStatChancetextBox); + groupBox5.Controls.Add(RISStrongStatChancetextBox); + groupBox5.Location = new Point(299, 22); + groupBox5.Margin = new Padding(4, 3, 4, 3); + groupBox5.Name = "groupBox5"; + groupBox5.Padding = new Padding(4, 3, 4, 3); + groupBox5.Size = new Size(99, 748); + groupBox5.TabIndex = 2; + groupBox5.TabStop = false; + groupBox5.Text = "Chance/Stat"; + // + // RISSlotStatChancetextBox + // + RISSlotStatChancetextBox.Location = new Point(28, 713); + RISSlotStatChancetextBox.Margin = new Padding(4, 3, 4, 3); + RISSlotStatChancetextBox.Name = "RISSlotStatChancetextBox"; + RISSlotStatChancetextBox.Size = new Size(44, 23); + RISSlotStatChancetextBox.TabIndex = 53; + RISSlotStatChancetextBox.TextChanged += RISSlotStatChancetextBox_TextChanged; + // + // RISLuckStatChancetextBox + // + RISLuckStatChancetextBox.Location = new Point(28, 653); + RISLuckStatChancetextBox.Margin = new Padding(4, 3, 4, 3); + RISLuckStatChancetextBox.MaxLength = 3; + RISLuckStatChancetextBox.Name = "RISLuckStatChancetextBox"; + RISLuckStatChancetextBox.Size = new Size(44, 23); + RISLuckStatChancetextBox.TabIndex = 52; + RISLuckStatChancetextBox.TextChanged += RISLuckStatChancetextBox_TextChanged; + // + // RISMaxDuraStatChancetextBox + // + RISMaxDuraStatChancetextBox.Location = new Point(28, 23); + RISMaxDuraStatChancetextBox.Margin = new Padding(4, 3, 4, 3); + RISMaxDuraStatChancetextBox.MaxLength = 3; + RISMaxDuraStatChancetextBox.Name = "RISMaxDuraStatChancetextBox"; + RISMaxDuraStatChancetextBox.Size = new Size(44, 23); + RISMaxDuraStatChancetextBox.TabIndex = 31; + RISMaxDuraStatChancetextBox.TextChanged += RISMaxDuraStatChancetextBox_TextChanged; + // + // RISAttackSpeedStatChancetextBox + // + RISAttackSpeedStatChancetextBox.Location = new Point(28, 623); + RISAttackSpeedStatChancetextBox.Margin = new Padding(4, 3, 4, 3); + RISAttackSpeedStatChancetextBox.MaxLength = 3; + RISAttackSpeedStatChancetextBox.Name = "RISAttackSpeedStatChancetextBox"; + RISAttackSpeedStatChancetextBox.Size = new Size(44, 23); + RISAttackSpeedStatChancetextBox.TabIndex = 51; + RISAttackSpeedStatChancetextBox.TextChanged += RISAttackSpeedStatChancetextBox_TextChanged; + // + // RISMaxAcStatChancetextBox + // + RISMaxAcStatChancetextBox.Location = new Point(28, 53); + RISMaxAcStatChancetextBox.Margin = new Padding(4, 3, 4, 3); + RISMaxAcStatChancetextBox.MaxLength = 3; + RISMaxAcStatChancetextBox.Name = "RISMaxAcStatChancetextBox"; + RISMaxAcStatChancetextBox.Size = new Size(44, 23); + RISMaxAcStatChancetextBox.TabIndex = 32; + RISMaxAcStatChancetextBox.TextChanged += RISMaxAcStatChancetextBox_TextChanged; + // + // RISPoisonAttackStatChancetextBox + // + RISPoisonAttackStatChancetextBox.Location = new Point(28, 593); + RISPoisonAttackStatChancetextBox.Margin = new Padding(4, 3, 4, 3); + RISPoisonAttackStatChancetextBox.MaxLength = 3; + RISPoisonAttackStatChancetextBox.Name = "RISPoisonAttackStatChancetextBox"; + RISPoisonAttackStatChancetextBox.Size = new Size(44, 23); + RISPoisonAttackStatChancetextBox.TabIndex = 50; + RISPoisonAttackStatChancetextBox.TextChanged += RISPoisonAttackStatChancetextBox_TextChanged; + // + // RISMaxMacStatChancetextBox + // + RISMaxMacStatChancetextBox.Location = new Point(28, 83); + RISMaxMacStatChancetextBox.Margin = new Padding(4, 3, 4, 3); + RISMaxMacStatChancetextBox.MaxLength = 3; + RISMaxMacStatChancetextBox.Name = "RISMaxMacStatChancetextBox"; + RISMaxMacStatChancetextBox.Size = new Size(44, 23); + RISMaxMacStatChancetextBox.TabIndex = 33; + RISMaxMacStatChancetextBox.TextChanged += RISMaxMacStatChancetextBox_TextChanged; + // + // RISFreezingStatChancetextBox + // + RISFreezingStatChancetextBox.Location = new Point(28, 563); + RISFreezingStatChancetextBox.Margin = new Padding(4, 3, 4, 3); + RISFreezingStatChancetextBox.MaxLength = 3; + RISFreezingStatChancetextBox.Name = "RISFreezingStatChancetextBox"; + RISFreezingStatChancetextBox.Size = new Size(44, 23); + RISFreezingStatChancetextBox.TabIndex = 49; + RISFreezingStatChancetextBox.TextChanged += RISFreezingStatChancetextBox_TextChanged; + // + // RISMaxDcStatChancetextBox + // + RISMaxDcStatChancetextBox.Location = new Point(28, 113); + RISMaxDcStatChancetextBox.Margin = new Padding(4, 3, 4, 3); + RISMaxDcStatChancetextBox.MaxLength = 3; + RISMaxDcStatChancetextBox.Name = "RISMaxDcStatChancetextBox"; + RISMaxDcStatChancetextBox.Size = new Size(44, 23); + RISMaxDcStatChancetextBox.TabIndex = 34; + RISMaxDcStatChancetextBox.TextChanged += RISMaxDcStatChancetextBox_TextChanged; + // + // RISCriticalDamageStatChancetextBox + // + RISCriticalDamageStatChancetextBox.Location = new Point(28, 533); + RISCriticalDamageStatChancetextBox.Margin = new Padding(4, 3, 4, 3); + RISCriticalDamageStatChancetextBox.MaxLength = 3; + RISCriticalDamageStatChancetextBox.Name = "RISCriticalDamageStatChancetextBox"; + RISCriticalDamageStatChancetextBox.Size = new Size(44, 23); + RISCriticalDamageStatChancetextBox.TabIndex = 48; + RISCriticalDamageStatChancetextBox.TextChanged += RISCriticalDamageStatChancetextBox_TextChanged; + // + // RISMaxMcStatChancetextBox + // + RISMaxMcStatChancetextBox.Location = new Point(28, 143); + RISMaxMcStatChancetextBox.Margin = new Padding(4, 3, 4, 3); + RISMaxMcStatChancetextBox.MaxLength = 3; + RISMaxMcStatChancetextBox.Name = "RISMaxMcStatChancetextBox"; + RISMaxMcStatChancetextBox.Size = new Size(44, 23); + RISMaxMcStatChancetextBox.TabIndex = 35; + RISMaxMcStatChancetextBox.TextChanged += RISMaxMcStatChancetextBox_TextChanged; + // + // RISCriticalRateStatChancetextBox + // + RISCriticalRateStatChancetextBox.Location = new Point(28, 503); + RISCriticalRateStatChancetextBox.Margin = new Padding(4, 3, 4, 3); + RISCriticalRateStatChancetextBox.MaxLength = 3; + RISCriticalRateStatChancetextBox.Name = "RISCriticalRateStatChancetextBox"; + RISCriticalRateStatChancetextBox.Size = new Size(44, 23); + RISCriticalRateStatChancetextBox.TabIndex = 47; + RISCriticalRateStatChancetextBox.TextChanged += RISCriticalRateStatChancetextBox_TextChanged; + // + // RISMaxScStatChancetextBox + // + RISMaxScStatChancetextBox.Location = new Point(28, 173); + RISMaxScStatChancetextBox.Margin = new Padding(4, 3, 4, 3); + RISMaxScStatChancetextBox.MaxLength = 3; + RISMaxScStatChancetextBox.Name = "RISMaxScStatChancetextBox"; + RISMaxScStatChancetextBox.Size = new Size(44, 23); + RISMaxScStatChancetextBox.TabIndex = 36; + RISMaxScStatChancetextBox.TextChanged += RISMaxScStatChancetextBox_TextChanged; + // + // RISPoisonRecovStatChancetextBox + // + RISPoisonRecovStatChancetextBox.Location = new Point(28, 473); + RISPoisonRecovStatChancetextBox.Margin = new Padding(4, 3, 4, 3); + RISPoisonRecovStatChancetextBox.MaxLength = 3; + RISPoisonRecovStatChancetextBox.Name = "RISPoisonRecovStatChancetextBox"; + RISPoisonRecovStatChancetextBox.Size = new Size(44, 23); + RISPoisonRecovStatChancetextBox.TabIndex = 46; + RISPoisonRecovStatChancetextBox.TextChanged += RISPoisonRecovStatChancetextBox_TextChanged; + // + // RISMaxAccStatChancetextBox + // + RISMaxAccStatChancetextBox.Location = new Point(28, 203); + RISMaxAccStatChancetextBox.Margin = new Padding(4, 3, 4, 3); + RISMaxAccStatChancetextBox.MaxLength = 3; + RISMaxAccStatChancetextBox.Name = "RISMaxAccStatChancetextBox"; + RISMaxAccStatChancetextBox.Size = new Size(44, 23); + RISMaxAccStatChancetextBox.TabIndex = 37; + RISMaxAccStatChancetextBox.TextChanged += RISMaxAccStatChancetextBox_TextChanged; + // + // RISMpRecovStatChancetextBox + // + RISMpRecovStatChancetextBox.Location = new Point(28, 443); + RISMpRecovStatChancetextBox.Margin = new Padding(4, 3, 4, 3); + RISMpRecovStatChancetextBox.MaxLength = 3; + RISMpRecovStatChancetextBox.Name = "RISMpRecovStatChancetextBox"; + RISMpRecovStatChancetextBox.Size = new Size(44, 23); + RISMpRecovStatChancetextBox.TabIndex = 45; + RISMpRecovStatChancetextBox.TextChanged += RISMpRecovStatChancetextBox_TextChanged; + // + // RISMaxAgilStatChancetextBox + // + RISMaxAgilStatChancetextBox.Location = new Point(28, 233); + RISMaxAgilStatChancetextBox.Margin = new Padding(4, 3, 4, 3); + RISMaxAgilStatChancetextBox.MaxLength = 3; + RISMaxAgilStatChancetextBox.Name = "RISMaxAgilStatChancetextBox"; + RISMaxAgilStatChancetextBox.Size = new Size(44, 23); + RISMaxAgilStatChancetextBox.TabIndex = 38; + RISMaxAgilStatChancetextBox.TextChanged += RISMaxAgilStatChancetextBox_TextChanged; + // + // RISHpRecovStatChancetextBox + // + RISHpRecovStatChancetextBox.Location = new Point(28, 413); + RISHpRecovStatChancetextBox.Margin = new Padding(4, 3, 4, 3); + RISHpRecovStatChancetextBox.MaxLength = 3; + RISHpRecovStatChancetextBox.Name = "RISHpRecovStatChancetextBox"; + RISHpRecovStatChancetextBox.Size = new Size(44, 23); + RISHpRecovStatChancetextBox.TabIndex = 44; + RISHpRecovStatChancetextBox.TextChanged += RISHpRecovStatChancetextBox_TextChanged; + // + // RISMaxHpStatChancetextBox + // + RISMaxHpStatChancetextBox.Location = new Point(28, 263); + RISMaxHpStatChancetextBox.Margin = new Padding(4, 3, 4, 3); + RISMaxHpStatChancetextBox.MaxLength = 3; + RISMaxHpStatChancetextBox.Name = "RISMaxHpStatChancetextBox"; + RISMaxHpStatChancetextBox.Size = new Size(44, 23); + RISMaxHpStatChancetextBox.TabIndex = 39; + RISMaxHpStatChancetextBox.TextChanged += RISMaxHpStatChancetextBox_TextChanged; + // + // RISPoisonResistStatChancetextBox + // + RISPoisonResistStatChancetextBox.Location = new Point(28, 383); + RISPoisonResistStatChancetextBox.Margin = new Padding(4, 3, 4, 3); + RISPoisonResistStatChancetextBox.MaxLength = 3; + RISPoisonResistStatChancetextBox.Name = "RISPoisonResistStatChancetextBox"; + RISPoisonResistStatChancetextBox.Size = new Size(44, 23); + RISPoisonResistStatChancetextBox.TabIndex = 43; + RISPoisonResistStatChancetextBox.TextChanged += RISPoisonResistStatChancetextBox_TextChanged; + // + // RISMaxMpStatChancetextBox + // + RISMaxMpStatChancetextBox.Location = new Point(28, 293); + RISMaxMpStatChancetextBox.Margin = new Padding(4, 3, 4, 3); + RISMaxMpStatChancetextBox.MaxLength = 3; + RISMaxMpStatChancetextBox.Name = "RISMaxMpStatChancetextBox"; + RISMaxMpStatChancetextBox.Size = new Size(44, 23); + RISMaxMpStatChancetextBox.TabIndex = 40; + RISMaxMpStatChancetextBox.TextChanged += RISMaxMpStatChancetextBox_TextChanged; + // + // RISMagicResistStatChancetextBox + // + RISMagicResistStatChancetextBox.Location = new Point(28, 353); + RISMagicResistStatChancetextBox.Margin = new Padding(4, 3, 4, 3); + RISMagicResistStatChancetextBox.MaxLength = 3; + RISMagicResistStatChancetextBox.Name = "RISMagicResistStatChancetextBox"; + RISMagicResistStatChancetextBox.Size = new Size(44, 23); + RISMagicResistStatChancetextBox.TabIndex = 42; + RISMagicResistStatChancetextBox.TextChanged += RISMagicResistStatChancetextBox_TextChanged; + // + // RISStrongStatChancetextBox + // + RISStrongStatChancetextBox.Location = new Point(28, 323); + RISStrongStatChancetextBox.Margin = new Padding(4, 3, 4, 3); + RISStrongStatChancetextBox.MaxLength = 3; + RISStrongStatChancetextBox.Name = "RISStrongStatChancetextBox"; + RISStrongStatChancetextBox.Size = new Size(44, 23); + RISStrongStatChancetextBox.TabIndex = 41; + RISStrongStatChancetextBox.TextChanged += RISStrongStatChancetextBox_TextChanged; + // + // groupBox4 + // + groupBox4.Controls.Add(RISCurseChancetextBox); + groupBox4.Controls.Add(RISSlotChancetextBox); + groupBox4.Controls.Add(RISLuckChancetextBox); + groupBox4.Controls.Add(RISAttackSpeedChancetextBox); + groupBox4.Controls.Add(RISPoisonAttackChancetextBox); + groupBox4.Controls.Add(RISFreezingChancetextBox); + groupBox4.Controls.Add(RISCriticalDamageChancetextBox); + groupBox4.Controls.Add(RISCriticalRateChancetextBox); + groupBox4.Controls.Add(RISPoisonRecovChancetextBox); + groupBox4.Controls.Add(RISMpRecovChancetextBox); + groupBox4.Controls.Add(RISHpRecovChancetextBox); + groupBox4.Controls.Add(RISPoisonResistChancetextBox); + groupBox4.Controls.Add(RISMagicResistChancetextBox); + groupBox4.Controls.Add(RISStrongChancetextBox); + groupBox4.Controls.Add(RISMaxMpChancetextBox); + groupBox4.Controls.Add(RISMaxHpChancetextBox); + groupBox4.Controls.Add(RISMaxAgilChancetextBox); + groupBox4.Controls.Add(RISMaxAccChancetextBox); + groupBox4.Controls.Add(RISMaxScChancetextBox); + groupBox4.Controls.Add(RISMaxMcChancetextBox); + groupBox4.Controls.Add(RISMaxDcChancetextBox); + groupBox4.Controls.Add(RISMaxMacChancetextBox); + groupBox4.Controls.Add(RISMaxAcChancetextBox); + groupBox4.Controls.Add(RISMaxDuraChancetextBox); + groupBox4.Location = new Point(168, 22); + groupBox4.Margin = new Padding(4, 3, 4, 3); + groupBox4.Name = "groupBox4"; + groupBox4.Padding = new Padding(4, 3, 4, 3); + groupBox4.Size = new Size(124, 748); + groupBox4.TabIndex = 1; + groupBox4.TabStop = false; + groupBox4.Text = "Random chance:"; + // + // RISCurseChancetextBox + // + RISCurseChancetextBox.Location = new Point(37, 683); + RISCurseChancetextBox.Margin = new Padding(4, 3, 4, 3); + RISCurseChancetextBox.MaxLength = 3; + RISCurseChancetextBox.Name = "RISCurseChancetextBox"; + RISCurseChancetextBox.Size = new Size(44, 23); + RISCurseChancetextBox.TabIndex = 31; + RISCurseChancetextBox.TextChanged += RISCurseChancetextBox_TextChanged; + // + // RISSlotChancetextBox + // + RISSlotChancetextBox.Location = new Point(37, 713); + RISSlotChancetextBox.Margin = new Padding(4, 3, 4, 3); + RISSlotChancetextBox.Name = "RISSlotChancetextBox"; + RISSlotChancetextBox.Size = new Size(44, 23); + RISSlotChancetextBox.TabIndex = 31; + RISSlotChancetextBox.TextChanged += RISSlotChancetextBox_TextChanged; + // + // RISLuckChancetextBox + // + RISLuckChancetextBox.Location = new Point(37, 653); + RISLuckChancetextBox.Margin = new Padding(4, 3, 4, 3); + RISLuckChancetextBox.MaxLength = 3; + RISLuckChancetextBox.Name = "RISLuckChancetextBox"; + RISLuckChancetextBox.Size = new Size(44, 23); + RISLuckChancetextBox.TabIndex = 30; + RISLuckChancetextBox.TextChanged += RISLuckChancetextBox_TextChanged; + // + // RISAttackSpeedChancetextBox + // + RISAttackSpeedChancetextBox.Location = new Point(37, 623); + RISAttackSpeedChancetextBox.Margin = new Padding(4, 3, 4, 3); + RISAttackSpeedChancetextBox.MaxLength = 3; + RISAttackSpeedChancetextBox.Name = "RISAttackSpeedChancetextBox"; + RISAttackSpeedChancetextBox.Size = new Size(44, 23); + RISAttackSpeedChancetextBox.TabIndex = 29; + RISAttackSpeedChancetextBox.TextChanged += RISAttackSpeedChancetextBox_TextChanged; + // + // RISPoisonAttackChancetextBox + // + RISPoisonAttackChancetextBox.Location = new Point(37, 593); + RISPoisonAttackChancetextBox.Margin = new Padding(4, 3, 4, 3); + RISPoisonAttackChancetextBox.MaxLength = 3; + RISPoisonAttackChancetextBox.Name = "RISPoisonAttackChancetextBox"; + RISPoisonAttackChancetextBox.Size = new Size(44, 23); + RISPoisonAttackChancetextBox.TabIndex = 28; + RISPoisonAttackChancetextBox.TextChanged += RISPoisonAttackChancetextBox_TextChanged; + // + // RISFreezingChancetextBox + // + RISFreezingChancetextBox.Location = new Point(37, 563); + RISFreezingChancetextBox.Margin = new Padding(4, 3, 4, 3); + RISFreezingChancetextBox.MaxLength = 3; + RISFreezingChancetextBox.Name = "RISFreezingChancetextBox"; + RISFreezingChancetextBox.Size = new Size(44, 23); + RISFreezingChancetextBox.TabIndex = 27; + RISFreezingChancetextBox.TextChanged += RISFreezingChancetextBox_TextChanged; + // + // RISCriticalDamageChancetextBox + // + RISCriticalDamageChancetextBox.Location = new Point(37, 533); + RISCriticalDamageChancetextBox.Margin = new Padding(4, 3, 4, 3); + RISCriticalDamageChancetextBox.MaxLength = 3; + RISCriticalDamageChancetextBox.Name = "RISCriticalDamageChancetextBox"; + RISCriticalDamageChancetextBox.Size = new Size(44, 23); + RISCriticalDamageChancetextBox.TabIndex = 26; + RISCriticalDamageChancetextBox.TextChanged += RISCriticalDamageChancetextBox_TextChanged; + // + // RISCriticalRateChancetextBox + // + RISCriticalRateChancetextBox.Location = new Point(37, 503); + RISCriticalRateChancetextBox.Margin = new Padding(4, 3, 4, 3); + RISCriticalRateChancetextBox.MaxLength = 3; + RISCriticalRateChancetextBox.Name = "RISCriticalRateChancetextBox"; + RISCriticalRateChancetextBox.Size = new Size(44, 23); + RISCriticalRateChancetextBox.TabIndex = 25; + RISCriticalRateChancetextBox.TextChanged += RISCriticalRateChancetextBox_TextChanged; + // + // RISPoisonRecovChancetextBox + // + RISPoisonRecovChancetextBox.Location = new Point(37, 473); + RISPoisonRecovChancetextBox.Margin = new Padding(4, 3, 4, 3); + RISPoisonRecovChancetextBox.MaxLength = 3; + RISPoisonRecovChancetextBox.Name = "RISPoisonRecovChancetextBox"; + RISPoisonRecovChancetextBox.Size = new Size(44, 23); + RISPoisonRecovChancetextBox.TabIndex = 24; + RISPoisonRecovChancetextBox.TextChanged += RISPoisonRecovChancetextBox_TextChanged; + // + // RISMpRecovChancetextBox + // + RISMpRecovChancetextBox.Location = new Point(37, 443); + RISMpRecovChancetextBox.Margin = new Padding(4, 3, 4, 3); + RISMpRecovChancetextBox.MaxLength = 3; + RISMpRecovChancetextBox.Name = "RISMpRecovChancetextBox"; + RISMpRecovChancetextBox.Size = new Size(44, 23); + RISMpRecovChancetextBox.TabIndex = 23; + RISMpRecovChancetextBox.TextChanged += RISMpRecovChancetextBox_TextChanged; + // + // RISHpRecovChancetextBox + // + RISHpRecovChancetextBox.Location = new Point(37, 413); + RISHpRecovChancetextBox.Margin = new Padding(4, 3, 4, 3); + RISHpRecovChancetextBox.MaxLength = 3; + RISHpRecovChancetextBox.Name = "RISHpRecovChancetextBox"; + RISHpRecovChancetextBox.Size = new Size(44, 23); + RISHpRecovChancetextBox.TabIndex = 22; + RISHpRecovChancetextBox.TextChanged += RISHpRecovChancetextBox_TextChanged; + // + // RISPoisonResistChancetextBox + // + RISPoisonResistChancetextBox.Location = new Point(37, 383); + RISPoisonResistChancetextBox.Margin = new Padding(4, 3, 4, 3); + RISPoisonResistChancetextBox.MaxLength = 3; + RISPoisonResistChancetextBox.Name = "RISPoisonResistChancetextBox"; + RISPoisonResistChancetextBox.Size = new Size(44, 23); + RISPoisonResistChancetextBox.TabIndex = 21; + RISPoisonResistChancetextBox.TextChanged += RISPoisonResistChancetextBox_TextChanged; + // + // RISMagicResistChancetextBox + // + RISMagicResistChancetextBox.Location = new Point(37, 353); + RISMagicResistChancetextBox.Margin = new Padding(4, 3, 4, 3); + RISMagicResistChancetextBox.MaxLength = 3; + RISMagicResistChancetextBox.Name = "RISMagicResistChancetextBox"; + RISMagicResistChancetextBox.Size = new Size(44, 23); + RISMagicResistChancetextBox.TabIndex = 20; + RISMagicResistChancetextBox.TextChanged += RISMagicResistChancetextBox_TextChanged; + // + // RISStrongChancetextBox + // + RISStrongChancetextBox.Location = new Point(37, 323); + RISStrongChancetextBox.Margin = new Padding(4, 3, 4, 3); + RISStrongChancetextBox.MaxLength = 3; + RISStrongChancetextBox.Name = "RISStrongChancetextBox"; + RISStrongChancetextBox.Size = new Size(44, 23); + RISStrongChancetextBox.TabIndex = 19; + RISStrongChancetextBox.TextChanged += RISStrongChancetextBox_TextChanged; + // + // RISMaxMpChancetextBox + // + RISMaxMpChancetextBox.Location = new Point(37, 293); + RISMaxMpChancetextBox.Margin = new Padding(4, 3, 4, 3); + RISMaxMpChancetextBox.MaxLength = 3; + RISMaxMpChancetextBox.Name = "RISMaxMpChancetextBox"; + RISMaxMpChancetextBox.Size = new Size(44, 23); + RISMaxMpChancetextBox.TabIndex = 18; + RISMaxMpChancetextBox.TextChanged += RISMaxMpChancetextBox_TextChanged; + // + // RISMaxHpChancetextBox + // + RISMaxHpChancetextBox.Location = new Point(37, 263); + RISMaxHpChancetextBox.Margin = new Padding(4, 3, 4, 3); + RISMaxHpChancetextBox.MaxLength = 3; + RISMaxHpChancetextBox.Name = "RISMaxHpChancetextBox"; + RISMaxHpChancetextBox.Size = new Size(44, 23); + RISMaxHpChancetextBox.TabIndex = 17; + RISMaxHpChancetextBox.TextChanged += RISMaxHpChancetextBox_TextChanged; + // + // RISMaxAgilChancetextBox + // + RISMaxAgilChancetextBox.Location = new Point(37, 233); + RISMaxAgilChancetextBox.Margin = new Padding(4, 3, 4, 3); + RISMaxAgilChancetextBox.MaxLength = 3; + RISMaxAgilChancetextBox.Name = "RISMaxAgilChancetextBox"; + RISMaxAgilChancetextBox.Size = new Size(44, 23); + RISMaxAgilChancetextBox.TabIndex = 16; + RISMaxAgilChancetextBox.TextChanged += RISMaxAgilChancetextBox_TextChanged; + // + // RISMaxAccChancetextBox + // + RISMaxAccChancetextBox.Location = new Point(37, 203); + RISMaxAccChancetextBox.Margin = new Padding(4, 3, 4, 3); + RISMaxAccChancetextBox.MaxLength = 3; + RISMaxAccChancetextBox.Name = "RISMaxAccChancetextBox"; + RISMaxAccChancetextBox.Size = new Size(44, 23); + RISMaxAccChancetextBox.TabIndex = 15; + RISMaxAccChancetextBox.TextChanged += RISMaxAccChancetextBox_TextChanged; + // + // RISMaxScChancetextBox + // + RISMaxScChancetextBox.Location = new Point(37, 173); + RISMaxScChancetextBox.Margin = new Padding(4, 3, 4, 3); + RISMaxScChancetextBox.MaxLength = 3; + RISMaxScChancetextBox.Name = "RISMaxScChancetextBox"; + RISMaxScChancetextBox.Size = new Size(44, 23); + RISMaxScChancetextBox.TabIndex = 14; + RISMaxScChancetextBox.TextChanged += RISMaxScChancetextBox_TextChanged; + // + // RISMaxMcChancetextBox + // + RISMaxMcChancetextBox.Location = new Point(37, 143); + RISMaxMcChancetextBox.Margin = new Padding(4, 3, 4, 3); + RISMaxMcChancetextBox.MaxLength = 3; + RISMaxMcChancetextBox.Name = "RISMaxMcChancetextBox"; + RISMaxMcChancetextBox.Size = new Size(44, 23); + RISMaxMcChancetextBox.TabIndex = 13; + RISMaxMcChancetextBox.TextChanged += RISMaxMcChancetextBox_TextChanged; + // + // RISMaxDcChancetextBox + // + RISMaxDcChancetextBox.Location = new Point(37, 113); + RISMaxDcChancetextBox.Margin = new Padding(4, 3, 4, 3); + RISMaxDcChancetextBox.MaxLength = 3; + RISMaxDcChancetextBox.Name = "RISMaxDcChancetextBox"; + RISMaxDcChancetextBox.Size = new Size(44, 23); + RISMaxDcChancetextBox.TabIndex = 12; + RISMaxDcChancetextBox.TextChanged += RISMaxDcChancetextBox_TextChanged; + // + // RISMaxMacChancetextBox + // + RISMaxMacChancetextBox.Location = new Point(37, 83); + RISMaxMacChancetextBox.Margin = new Padding(4, 3, 4, 3); + RISMaxMacChancetextBox.MaxLength = 3; + RISMaxMacChancetextBox.Name = "RISMaxMacChancetextBox"; + RISMaxMacChancetextBox.Size = new Size(44, 23); + RISMaxMacChancetextBox.TabIndex = 11; + RISMaxMacChancetextBox.TextChanged += RISMaxMacChancetextBox_TextChanged; + // + // RISMaxAcChancetextBox + // + RISMaxAcChancetextBox.Location = new Point(37, 53); + RISMaxAcChancetextBox.Margin = new Padding(4, 3, 4, 3); + RISMaxAcChancetextBox.MaxLength = 3; + RISMaxAcChancetextBox.Name = "RISMaxAcChancetextBox"; + RISMaxAcChancetextBox.Size = new Size(44, 23); + RISMaxAcChancetextBox.TabIndex = 10; + RISMaxAcChancetextBox.TextChanged += RISMaxAcChancetextBox_TextChanged; + // + // RISMaxDuraChancetextBox + // + RISMaxDuraChancetextBox.Location = new Point(37, 23); + RISMaxDuraChancetextBox.Margin = new Padding(4, 3, 4, 3); + RISMaxDuraChancetextBox.MaxLength = 3; + RISMaxDuraChancetextBox.Name = "RISMaxDuraChancetextBox"; + RISMaxDuraChancetextBox.Size = new Size(44, 23); + RISMaxDuraChancetextBox.TabIndex = 9; + RISMaxDuraChancetextBox.TextChanged += RISMaxDuraChancetextBox_TextChanged; + // + // label40 + // + label40.AutoSize = true; + label40.Location = new Point(4, 7); + label40.Margin = new Padding(4, 0, 4, 0); + label40.Name = "label40"; + label40.Size = new Size(87, 15); + label40.TabIndex = 8; + label40.Text = "Random Index:"; + // + // RISIndexcomboBox + // + RISIndexcomboBox.DropDownStyle = ComboBoxStyle.DropDownList; + RISIndexcomboBox.FormattingEnabled = true; + RISIndexcomboBox.Location = new Point(97, 3); + RISIndexcomboBox.Margin = new Padding(4, 3, 4, 3); + RISIndexcomboBox.Name = "RISIndexcomboBox"; + RISIndexcomboBox.Size = new Size(107, 23); + RISIndexcomboBox.TabIndex = 7; + RISIndexcomboBox.SelectedIndexChanged += RISIndexcomboBox_SelectedIndexChanged; + // + // lblClassStatExample + // + lblClassStatExample.AutoSize = true; + lblClassStatExample.Location = new Point(844, 39); + lblClassStatExample.Margin = new Padding(4, 0, 4, 0); + lblClassStatExample.Name = "lblClassStatExample"; + lblClassStatExample.Size = new Size(133, 15); + lblClassStatExample.TabIndex = 17; + lblClassStatExample.Text = "Level 1-50 Stat Preview.."; + // + // BalanceConfigForm + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(1004, 864); + Controls.Add(lblClassStatExample); + Controls.Add(tabControl1); + Icon = (Icon)resources.GetObject("$this.Icon"); + Margin = new Padding(4, 3, 4, 3); + Name = "BalanceConfigForm"; + Text = "BalanceConfigForm"; + FormClosed += BalanceConfigForm_FormClosed; + tabControl1.ResumeLayout(false); + tabPage3.ResumeLayout(false); + panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)classGridView).EndInit(); + panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)classCapGridView).EndInit(); + tabPage2.ResumeLayout(false); + tabPage2.PerformLayout(); + groupBox2.ResumeLayout(false); + groupBox2.PerformLayout(); + tabPage4.ResumeLayout(false); + tabPage4.PerformLayout(); + groupBox3.ResumeLayout(false); + groupBox3.PerformLayout(); + groupBox6.ResumeLayout(false); + groupBox6.PerformLayout(); + groupBox5.ResumeLayout(false); + groupBox5.PerformLayout(); + groupBox4.ResumeLayout(false); + groupBox4.PerformLayout(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + private System.Windows.Forms.TextBox MagicResistWeigttextbox; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox PoisonResistWeighttextbox; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TextBox CritialRateWeighttextbox; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.TextBox CriticalDamagetextbox; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.TabControl tabControl1; + private System.Windows.Forms.TabPage tabPage2; + private System.Windows.Forms.TextBox PoisonAttackWeighttextbox; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.TextBox FreezingWeighttextbox; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.CheckBox CanFreezecheckBox; + private System.Windows.Forms.CheckBox CanResistPoisoncheckBox; + private System.Windows.Forms.CheckBox CanResistMagiccheckBox; + private System.Windows.Forms.TextBox ManaRegenWeighttextBox; + private System.Windows.Forms.Label label37; + private System.Windows.Forms.TextBox HealthRegenWeighttextBox; + private System.Windows.Forms.Label label35; + private System.Windows.Forms.TabPage tabPage4; + private System.Windows.Forms.GroupBox groupBox3; + private System.Windows.Forms.GroupBox groupBox6; + private System.Windows.Forms.GroupBox groupBox5; + private System.Windows.Forms.GroupBox groupBox4; + private System.Windows.Forms.Label label40; + private System.Windows.Forms.ComboBox RISIndexcomboBox; + private System.Windows.Forms.Label label62; + private System.Windows.Forms.Label label61; + private System.Windows.Forms.Label label60; + private System.Windows.Forms.Label label59; + private System.Windows.Forms.Label label58; + private System.Windows.Forms.Label label57; + private System.Windows.Forms.Label label56; + private System.Windows.Forms.Label label55; + private System.Windows.Forms.Label label54; + private System.Windows.Forms.Label label53; + private System.Windows.Forms.Label label52; + private System.Windows.Forms.Label label51; + private System.Windows.Forms.Label label50; + private System.Windows.Forms.Label label49; + private System.Windows.Forms.Label label48; + private System.Windows.Forms.Label label47; + private System.Windows.Forms.Label label46; + private System.Windows.Forms.Label label45; + private System.Windows.Forms.Label label44; + private System.Windows.Forms.Label label43; + private System.Windows.Forms.Label label42; + private System.Windows.Forms.Label label41; + private System.Windows.Forms.TextBox RISLuckMaxStattextBox; + private System.Windows.Forms.TextBox RISAttackSpeedMaxStattextBox; + private System.Windows.Forms.TextBox RISPoisonAttackMaxStattextBox; + private System.Windows.Forms.TextBox RISFreezingMaxStattextBox; + private System.Windows.Forms.TextBox RISCriticalDamageMaxStattextBox; + private System.Windows.Forms.TextBox RISCriticalRateMaxStattextBox; + private System.Windows.Forms.TextBox RISPoisonRecovMaxStattextBox; + private System.Windows.Forms.TextBox RISMpRecovMaxStattextBox; + private System.Windows.Forms.TextBox RISHpRecovMaxStattextBox; + private System.Windows.Forms.TextBox RISPoisonResistMaxStattextBox; + private System.Windows.Forms.TextBox RISMagicResistMaxStattextBox; + private System.Windows.Forms.TextBox RISStrongMaxStattextBox; + private System.Windows.Forms.TextBox RISMaxMpMaxStattextBox; + private System.Windows.Forms.TextBox RISMaxHpMaxStattextBox; + private System.Windows.Forms.TextBox RISMaxAgilMaxStattextBox; + private System.Windows.Forms.TextBox RISMaxAccMaxStattextBox; + private System.Windows.Forms.TextBox RISMaxScMaxStattextBox; + private System.Windows.Forms.TextBox RISMaxMcMaxStattextBox; + private System.Windows.Forms.TextBox RISMaxDcMaxStattextBox; + private System.Windows.Forms.TextBox RISMaxMacMaxStattextBox; + private System.Windows.Forms.TextBox RISMaxAcMaxStattextBox; + private System.Windows.Forms.TextBox RISMaxDuraMaxStattextBox; + private System.Windows.Forms.TextBox RISLuckStatChancetextBox; + private System.Windows.Forms.TextBox RISMaxDuraStatChancetextBox; + private System.Windows.Forms.TextBox RISAttackSpeedStatChancetextBox; + private System.Windows.Forms.TextBox RISMaxAcStatChancetextBox; + private System.Windows.Forms.TextBox RISPoisonAttackStatChancetextBox; + private System.Windows.Forms.TextBox RISMaxMacStatChancetextBox; + private System.Windows.Forms.TextBox RISFreezingStatChancetextBox; + private System.Windows.Forms.TextBox RISMaxDcStatChancetextBox; + private System.Windows.Forms.TextBox RISCriticalDamageStatChancetextBox; + private System.Windows.Forms.TextBox RISMaxMcStatChancetextBox; + private System.Windows.Forms.TextBox RISCriticalRateStatChancetextBox; + private System.Windows.Forms.TextBox RISMaxScStatChancetextBox; + private System.Windows.Forms.TextBox RISPoisonRecovStatChancetextBox; + private System.Windows.Forms.TextBox RISMaxAccStatChancetextBox; + private System.Windows.Forms.TextBox RISMpRecovStatChancetextBox; + private System.Windows.Forms.TextBox RISMaxAgilStatChancetextBox; + private System.Windows.Forms.TextBox RISHpRecovStatChancetextBox; + private System.Windows.Forms.TextBox RISMaxHpStatChancetextBox; + private System.Windows.Forms.TextBox RISPoisonResistStatChancetextBox; + private System.Windows.Forms.TextBox RISMaxMpStatChancetextBox; + private System.Windows.Forms.TextBox RISMagicResistStatChancetextBox; + private System.Windows.Forms.TextBox RISStrongStatChancetextBox; + private System.Windows.Forms.TextBox RISLuckChancetextBox; + private System.Windows.Forms.TextBox RISAttackSpeedChancetextBox; + private System.Windows.Forms.TextBox RISPoisonAttackChancetextBox; + private System.Windows.Forms.TextBox RISFreezingChancetextBox; + private System.Windows.Forms.TextBox RISCriticalDamageChancetextBox; + private System.Windows.Forms.TextBox RISCriticalRateChancetextBox; + private System.Windows.Forms.TextBox RISPoisonRecovChancetextBox; + private System.Windows.Forms.TextBox RISMpRecovChancetextBox; + private System.Windows.Forms.TextBox RISHpRecovChancetextBox; + private System.Windows.Forms.TextBox RISPoisonResistChancetextBox; + private System.Windows.Forms.TextBox RISMagicResistChancetextBox; + private System.Windows.Forms.TextBox RISStrongChancetextBox; + private System.Windows.Forms.TextBox RISMaxMpChancetextBox; + private System.Windows.Forms.TextBox RISMaxHpChancetextBox; + private System.Windows.Forms.TextBox RISMaxAgilChancetextBox; + private System.Windows.Forms.TextBox RISMaxAccChancetextBox; + private System.Windows.Forms.TextBox RISMaxScChancetextBox; + private System.Windows.Forms.TextBox RISMaxMcChancetextBox; + private System.Windows.Forms.TextBox RISMaxDcChancetextBox; + private System.Windows.Forms.TextBox RISMaxMacChancetextBox; + private System.Windows.Forms.TextBox RISMaxAcChancetextBox; + private System.Windows.Forms.TextBox RISMaxDuraChancetextBox; + private System.Windows.Forms.Button RISDeleteIndexbutton; + private System.Windows.Forms.Button RISAddIndexbutton; + private System.Windows.Forms.TextBox RISCurseChancetextBox; + private System.Windows.Forms.Label label63; + private System.Windows.Forms.Label label64; + private System.Windows.Forms.TextBox RISSlotMaxStattextBox; + private System.Windows.Forms.TextBox RISSlotStatChancetextBox; + private System.Windows.Forms.TextBox RISSlotChancetextBox; + private System.Windows.Forms.TabPage tabPage3; + private System.Windows.Forms.DataGridView classGridView; + private System.Windows.Forms.ComboBox ClassComboBox; + private System.Windows.Forms.Label lblClassStatExample; + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.DataGridViewComboBoxColumn BaseStatType; + private System.Windows.Forms.DataGridViewComboBoxColumn BaseStatFormula; + private System.Windows.Forms.DataGridViewTextBoxColumn BaseStatBase; + private System.Windows.Forms.DataGridViewTextBoxColumn BaseStatGain; + private System.Windows.Forms.DataGridViewTextBoxColumn BaseStatGainRate; + private System.Windows.Forms.DataGridViewTextBoxColumn BaseStatMax; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.DataGridView classCapGridView; + private System.Windows.Forms.DataGridViewComboBoxColumn CapType; + private System.Windows.Forms.DataGridViewTextBoxColumn Value; + } +} \ No newline at end of file diff --git a/Server.MirForms/BalanceConfigForm.cs b/Server.MirForms/BalanceConfigForm.cs new file mode 100644 index 0000000..6dbeb66 --- /dev/null +++ b/Server.MirForms/BalanceConfigForm.cs @@ -0,0 +1,1736 @@ +using Server.MirEnvir; +using Shared.Extensions; + +namespace Server +{ + public partial class BalanceConfigForm : Form + { + public Envir Envir => SMain.EditEnvir; + public byte SelectedClassID = 0; + + public bool BaseStatsChanged = false; + public bool RandomItemStatsChanged = false; + public bool GuildsChanged = false; + + public bool Populating = false; + + public BalanceConfigForm() + { + InitializeComponent(); + ClassComboBox.Items.AddRange(Enum.GetValues(typeof(MirClass)).Cast().ToArray()); + + for (int i = 0; i < Settings.RandomItemStatsList.Count; i++) + RISIndexcomboBox.Items.Add(i); + + UpdateStatInterface(); + UpdateRandomItemStats(); + + + this.BaseStatType.ValueType = typeof(Stat); + this.BaseStatType.DataSource = Enum.GetValues(typeof(Stat)); + + this.BaseStatFormula.ValueType = typeof(StatFormula); + this.BaseStatFormula.DataSource = Enum.GetValues(typeof(StatFormula)); + + this.CapType.ValueType = typeof(Stat); + this.CapType.DataSource = Enum.GetValues(typeof(Stat)); + } + + private void BalanceConfigForm_FormClosed(object sender, FormClosedEventArgs e) + { + //save configs + if (BaseStatsChanged) + { + Settings.SaveBaseStats(); + SMain.Envir.RequiresBaseStatUpdate(); + } + + if (RandomItemStatsChanged) Settings.SaveRandomItemStats(); + if (GuildsChanged) Settings.SaveGuildSettings(); + } + + private void tabControl1_SelectedIndexChanged(object sender, EventArgs e) + { + lblClassStatExample.Visible = false; + + if (tabControl1.SelectedTab.Name == "tabPage3") + { + lblClassStatExample.Visible = true; + } + } + + private void ClassComboBox_SelectedIndexChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + SelectedClassID = (byte)ClassComboBox.SelectedItem; + + Populating = true; + UpdateClassStatGridView(); + UpdateClassCapGridView(); + Populating = false; + } + + private void UpdateStatInterface() + { + MagicResistWeigttextbox.Text = Settings.MagicResistWeight.ToString(); + PoisonResistWeighttextbox.Text = Settings.PoisonResistWeight.ToString(); + CritialRateWeighttextbox.Text = Settings.CriticalRateWeight.ToString(); + CriticalDamagetextbox.Text = Settings.CriticalDamageWeight.ToString(); + PoisonAttackWeighttextbox.Text = Settings.PoisonAttackWeight.ToString(); + FreezingWeighttextbox.Text = Settings.FreezingAttackWeight.ToString(); + HealthRegenWeighttextBox.Text = Settings.HealthRegenWeight.ToString(); + ManaRegenWeighttextBox.Text = Settings.ManaRegenWeight.ToString(); + + CanFreezecheckBox.Checked = Settings.PvpCanFreeze; + CanResistPoisoncheckBox.Checked = Settings.PvpCanResistPoison; + CanResistMagiccheckBox.Checked = Settings.PvpCanResistMagic; + } + + private void UpdateRandomItemStats() + { + if (RISIndexcomboBox.SelectedItem == null) + { + RISMaxDuraChancetextBox.Text = string.Empty; + RISMaxDuraStatChancetextBox.Text = string.Empty; + RISMaxDuraMaxStattextBox.Text = string.Empty; + RISMaxAcChancetextBox.Text = string.Empty; + RISMaxAcStatChancetextBox.Text = string.Empty; + RISMaxAcMaxStattextBox.Text = string.Empty; + RISMaxMacChancetextBox.Text = string.Empty; + RISMaxMacStatChancetextBox.Text = string.Empty; + RISMaxMacMaxStattextBox.Text = string.Empty; + RISMaxDcChancetextBox.Text = string.Empty; + RISMaxDcStatChancetextBox.Text = string.Empty; + RISMaxDcMaxStattextBox.Text = string.Empty; + RISMaxMcChancetextBox.Text = string.Empty; + RISMaxMcStatChancetextBox.Text = string.Empty; + RISMaxMcMaxStattextBox.Text = string.Empty; + RISMaxScChancetextBox.Text = string.Empty; + RISMaxScStatChancetextBox.Text = string.Empty; + RISMaxScMaxStattextBox.Text = string.Empty; + RISMaxAccChancetextBox.Text = string.Empty; + RISMaxAccStatChancetextBox.Text = string.Empty; + RISMaxAccMaxStattextBox.Text = string.Empty; + RISMaxAgilChancetextBox.Text = string.Empty; + RISMaxAgilStatChancetextBox.Text = string.Empty; + RISMaxAgilMaxStattextBox.Text = string.Empty; + RISMaxHpChancetextBox.Text = string.Empty; + RISMaxHpStatChancetextBox.Text = string.Empty; + RISMaxHpMaxStattextBox.Text = string.Empty; + RISMaxMpChancetextBox.Text = string.Empty; + RISMaxMpStatChancetextBox.Text = string.Empty; + RISMaxMpMaxStattextBox.Text = string.Empty; + RISStrongChancetextBox.Text = string.Empty; + RISStrongStatChancetextBox.Text = string.Empty; + RISStrongMaxStattextBox.Text = string.Empty; + RISMagicResistChancetextBox.Text = string.Empty; + RISMagicResistStatChancetextBox.Text = string.Empty; + RISMagicResistMaxStattextBox.Text = string.Empty; + RISPoisonResistChancetextBox.Text = string.Empty; + RISPoisonResistStatChancetextBox.Text = string.Empty; + RISPoisonResistMaxStattextBox.Text = string.Empty; + RISHpRecovChancetextBox.Text = string.Empty; + RISHpRecovStatChancetextBox.Text = string.Empty; + RISHpRecovMaxStattextBox.Text = string.Empty; + RISMpRecovChancetextBox.Text = string.Empty; + RISMpRecovStatChancetextBox.Text = string.Empty; + RISMpRecovMaxStattextBox.Text = string.Empty; + RISPoisonRecovChancetextBox.Text = string.Empty; + RISPoisonRecovStatChancetextBox.Text = string.Empty; + RISPoisonRecovMaxStattextBox.Text = string.Empty; + RISCriticalRateChancetextBox.Text = string.Empty; + RISCriticalRateStatChancetextBox.Text = string.Empty; + RISCriticalRateMaxStattextBox.Text = string.Empty; + RISCriticalDamageChancetextBox.Text = string.Empty; + RISCriticalDamageStatChancetextBox.Text = string.Empty; + RISCriticalDamageMaxStattextBox.Text = string.Empty; + RISFreezingChancetextBox.Text = string.Empty; + RISFreezingStatChancetextBox.Text = string.Empty; + RISFreezingMaxStattextBox.Text = string.Empty; + RISPoisonAttackChancetextBox.Text = string.Empty; + RISPoisonAttackStatChancetextBox.Text = string.Empty; + RISPoisonAttackMaxStattextBox.Text = string.Empty; + RISAttackSpeedChancetextBox.Text = string.Empty; + RISAttackSpeedStatChancetextBox.Text = string.Empty; + RISAttackSpeedMaxStattextBox.Text = string.Empty; + RISLuckChancetextBox.Text = string.Empty; + RISLuckStatChancetextBox.Text = string.Empty; + RISLuckMaxStattextBox.Text = string.Empty; + RISCurseChancetextBox.Text = string.Empty; + } + else + { + if (Settings.RandomItemStatsList.Count <= RISIndexcomboBox.SelectedIndex) + { + RISIndexcomboBox.SelectedItem = null; + UpdateRandomItemStats(); + return; + } + RandomItemStat stat = Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex]; + RISMaxDuraChancetextBox.Text = stat.MaxDuraChance.ToString(); + RISMaxDuraStatChancetextBox.Text = stat.MaxDuraStatChance.ToString(); + RISMaxDuraMaxStattextBox.Text = stat.MaxDuraMaxStat.ToString(); + RISMaxAcChancetextBox.Text = stat.MaxAcChance.ToString(); + RISMaxAcStatChancetextBox.Text = stat.MaxAcStatChance.ToString(); + RISMaxAcMaxStattextBox.Text = stat.MaxAcMaxStat.ToString(); + RISMaxMacChancetextBox.Text = stat.MaxMacChance.ToString(); + RISMaxMacStatChancetextBox.Text = stat.MaxMacStatChance.ToString(); + RISMaxMacMaxStattextBox.Text = stat.MaxMacMaxStat.ToString(); + RISMaxDcChancetextBox.Text = stat.MaxDcChance.ToString(); + RISMaxDcStatChancetextBox.Text = stat.MaxDcStatChance.ToString(); + RISMaxDcMaxStattextBox.Text = stat.MaxDcMaxStat.ToString(); + RISMaxMcChancetextBox.Text = stat.MaxMcChance.ToString(); + RISMaxMcStatChancetextBox.Text = stat.MaxMcStatChance.ToString(); + RISMaxMcMaxStattextBox.Text = stat.MaxMcMaxStat.ToString(); + RISMaxScChancetextBox.Text = stat.MaxScChance.ToString(); + RISMaxScStatChancetextBox.Text = stat.MaxScStatChance.ToString(); + RISMaxScMaxStattextBox.Text = stat.MaxScMaxStat.ToString(); + RISMaxAccChancetextBox.Text = stat.AccuracyChance.ToString(); + RISMaxAccStatChancetextBox.Text = stat.AccuracyStatChance.ToString(); + RISMaxAccMaxStattextBox.Text = stat.AccuracyMaxStat.ToString(); + RISMaxAgilChancetextBox.Text = stat.AgilityChance.ToString(); + RISMaxAgilStatChancetextBox.Text = stat.AgilityStatChance.ToString(); + RISMaxAgilMaxStattextBox.Text = stat.AgilityMaxStat.ToString(); + RISMaxHpChancetextBox.Text = stat.HpChance.ToString(); + RISMaxHpStatChancetextBox.Text = stat.HpStatChance.ToString(); + RISMaxHpMaxStattextBox.Text = stat.HpMaxStat.ToString(); + RISMaxMpChancetextBox.Text = stat.MpChance.ToString(); + RISMaxMpStatChancetextBox.Text = stat.MpStatChance.ToString(); + RISMaxMpMaxStattextBox.Text = stat.MpMaxStat.ToString(); + RISStrongChancetextBox.Text = stat.StrongChance.ToString(); + RISStrongStatChancetextBox.Text = stat.StrongStatChance.ToString(); + RISStrongMaxStattextBox.Text = stat.StrongMaxStat.ToString(); + RISMagicResistChancetextBox.Text = stat.MagicResistChance.ToString(); + RISMagicResistStatChancetextBox.Text = stat.MagicResistStatChance.ToString(); + RISMagicResistMaxStattextBox.Text = stat.MagicResistMaxStat.ToString(); + RISPoisonResistChancetextBox.Text = stat.PoisonResistChance.ToString(); + RISPoisonResistStatChancetextBox.Text = stat.PoisonResistStatChance.ToString(); + RISPoisonResistMaxStattextBox.Text = stat.PoisonResistMaxStat.ToString(); + RISHpRecovChancetextBox.Text = stat.HpRecovChance.ToString(); + RISHpRecovStatChancetextBox.Text = stat.HpRecovStatChance.ToString(); + RISHpRecovMaxStattextBox.Text = stat.HpRecovMaxStat.ToString(); + RISMpRecovChancetextBox.Text = stat.MpRecovChance.ToString(); + RISMpRecovStatChancetextBox.Text = stat.MpRecovStatChance.ToString(); + RISMpRecovMaxStattextBox.Text = stat.MpRecovMaxStat.ToString(); + RISPoisonRecovChancetextBox.Text = stat.PoisonRecovChance.ToString(); + RISPoisonRecovStatChancetextBox.Text = stat.PoisonRecovStatChance.ToString(); + RISPoisonRecovMaxStattextBox.Text = stat.PoisonRecovMaxStat.ToString(); + RISCriticalRateChancetextBox.Text = stat.CriticalRateChance.ToString(); + RISCriticalRateStatChancetextBox.Text = stat.CriticalRateStatChance.ToString(); + RISCriticalRateMaxStattextBox.Text = stat.CriticalRateMaxStat.ToString(); + RISCriticalDamageChancetextBox.Text = stat.CriticalDamageChance.ToString(); + RISCriticalDamageStatChancetextBox.Text = stat.CriticalDamageStatChance.ToString(); + RISCriticalDamageMaxStattextBox.Text = stat.CriticalDamageMaxStat.ToString(); + RISFreezingChancetextBox.Text = stat.FreezeChance.ToString(); + RISFreezingStatChancetextBox.Text = stat.FreezeStatChance.ToString(); + RISFreezingMaxStattextBox.Text = stat.FreezeMaxStat.ToString(); + RISPoisonAttackChancetextBox.Text = stat.PoisonAttackChance.ToString(); + RISPoisonAttackStatChancetextBox.Text = stat.PoisonAttackStatChance.ToString(); + RISPoisonAttackMaxStattextBox.Text = stat.PoisonAttackMaxStat.ToString(); + RISAttackSpeedChancetextBox.Text = stat.AttackSpeedChance.ToString(); + RISAttackSpeedStatChancetextBox.Text = stat.AttackSpeedStatChance.ToString(); + RISAttackSpeedMaxStattextBox.Text = stat.AttackSpeedMaxStat.ToString(); + RISLuckChancetextBox.Text = stat.LuckChance.ToString(); + RISLuckStatChancetextBox.Text = stat.LuckStatChance.ToString(); + RISLuckMaxStattextBox.Text = stat.LuckMaxStat.ToString(); + RISCurseChancetextBox.Text = stat.CurseChance.ToString(); + } + } + + #region ItemStats + + private void MagicResistWeigttextbox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + Settings.MagicResistWeight = temp; + } + + private void PoisonResistWeighttextbox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + Settings.PoisonResistWeight = temp; + } + + private void CritialRateWeighttextbox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + Settings.CriticalRateWeight = temp; + } + + private void CriticalDamagetextbox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + Settings.CriticalDamageWeight = temp; + } + + private void FreezingWeighttextbox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + Settings.FreezingAttackWeight = temp; + } + + private void PoisonAttackWeighttextbox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + Settings.PoisonAttackWeight = temp; + } + + private void CanResistMagiccheckBox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + Settings.PvpCanResistMagic = CanResistMagiccheckBox.Checked; + } + + private void CanResistPoisoncheckBox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + Settings.PvpCanResistPoison = CanResistPoisoncheckBox.Checked; + } + + private void CanFreezecheckBox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + Settings.PvpCanFreeze = CanFreezecheckBox.Checked; + } + + private void HealthRegenWeighttextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + BaseStatsChanged = true; + Settings.HealthRegenWeight = temp; + } + + private void ManaRegenWeighttextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + BaseStatsChanged = true; + Settings.ManaRegenWeight = temp; + } + + #endregion + + #region RandomItemStat + private void RISIndexcomboBox_SelectedIndexChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + UpdateRandomItemStats(); + } + + private void RISAddIndexbutton_Click(object sender, EventArgs e) + { + RandomItemStatsChanged = true; + Settings.RandomItemStatsList.Add(new RandomItemStat()); + RISIndexcomboBox.Items.Add(Settings.RandomItemStatsList.Count - 1); + RISIndexcomboBox.SelectedIndex = Settings.RandomItemStatsList.Count - 1; + UpdateRandomItemStats(); + } + + private void RISDeleteIndexbutton_Click(object sender, EventArgs e) + { + if (MessageBox.Show("Are you sure you want to delete the last index?", "Delete?", MessageBoxButtons.YesNo) != DialogResult.Yes) return; + RandomItemStatsChanged = true; + RISIndexcomboBox.Items.Remove(Settings.RandomItemStatsList.Count - 1); + Settings.RandomItemStatsList.RemoveAt(Settings.RandomItemStatsList.Count - 1); + UpdateRandomItemStats(); + } + + private void RISMaxDuraChancetextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].MaxDuraChance = temp; + } + + private void RISMaxDuraStatChancetextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].MaxDuraStatChance = temp; + } + + private void RISMaxDuraMaxStattextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if ((!byte.TryParse(ActiveControl.Text, out temp)) || (temp < 1)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].MaxDuraMaxStat = temp; + } + + private void RISMaxAcChancetextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].MaxAcChance = temp; + } + + private void RISMaxAcStatChancetextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].MaxAcStatChance = temp; + } + + private void RISMaxAcMaxStattextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if ((!byte.TryParse(ActiveControl.Text, out temp)) || (temp < 1)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].MaxAcMaxStat = temp; + } + + private void RISMaxMacChancetextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].MaxMacChance = temp; + } + + private void RISMaxMacStatChancetextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].MaxMacStatChance = temp; + } + + private void RISMaxMacMaxStattextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if ((!byte.TryParse(ActiveControl.Text, out temp)) || (temp < 1)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].MaxMacMaxStat = temp; + } + + private void RISMaxDcChancetextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].MaxDcChance = temp; + } + + private void RISMaxDcStatChancetextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].MaxDcStatChance = temp; + } + + private void RISMaxDcMaxStattextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if ((!byte.TryParse(ActiveControl.Text, out temp)) || (temp < 1)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].MaxDcMaxStat = temp; + } + + private void RISMaxMcChancetextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].MaxMcChance = temp; + } + + private void RISMaxMcStatChancetextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].MaxMcStatChance = temp; + } + + private void RISMaxMcMaxStattextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if ((!byte.TryParse(ActiveControl.Text, out temp)) || (temp < 1)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].MaxMcMaxStat = temp; + } + + private void RISMaxScChancetextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].MaxScChance = temp; + } + + private void RISMaxScStatChancetextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].MaxScStatChance = temp; + } + + private void RISMaxScMaxStattextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if ((!byte.TryParse(ActiveControl.Text, out temp)) || (temp < 1)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].MaxScMaxStat = temp; + } + + private void RISMaxAccChancetextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].AccuracyChance = temp; + } + + private void RISMaxAccStatChancetextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].AccuracyStatChance = temp; + } + + private void RISMaxAccMaxStattextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if ((!byte.TryParse(ActiveControl.Text, out temp)) || (temp < 1)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].AccuracyMaxStat = temp; + } + + private void RISMaxAgilChancetextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].AgilityChance = temp; + } + + private void RISMaxAgilStatChancetextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].AgilityStatChance = temp; + } + + private void RISMaxAgilMaxStattextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if ((!byte.TryParse(ActiveControl.Text, out temp)) || (temp < 1)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].AgilityMaxStat = temp; + } + + private void RISMaxHpChancetextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].HpChance = temp; + } + + private void RISMaxHpStatChancetextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].HpStatChance = temp; + } + + private void RISMaxHpMaxStattextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if ((!byte.TryParse(ActiveControl.Text, out temp)) || (temp < 1)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].HpMaxStat = temp; + } + + private void RISMaxMpChancetextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].MpChance = temp; + } + + private void RISMaxMpStatChancetextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].MpStatChance = temp; + } + + private void RISMaxMpMaxStattextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if ((!byte.TryParse(ActiveControl.Text, out temp)) || (temp < 1)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].MpMaxStat = temp; + } + + private void RISStrongChancetextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].StrongChance = temp; + } + + private void RISStrongStatChancetextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].StrongStatChance = temp; + } + + private void RISStrongMaxStattextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if ((!byte.TryParse(ActiveControl.Text, out temp)) || (temp < 1)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].StrongMaxStat = temp; + } + + private void RISMagicResistChancetextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].MagicResistChance = temp; + } + + private void RISMagicResistStatChancetextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].MagicResistStatChance = temp; + } + + private void RISMagicResistMaxStattextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if ((!byte.TryParse(ActiveControl.Text, out temp)) || (temp < 1)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].MagicResistMaxStat = temp; + } + + private void RISPoisonResistChancetextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].PoisonResistChance = temp; + } + + private void RISPoisonResistStatChancetextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].PoisonResistStatChance = temp; + } + + private void RISPoisonResistMaxStattextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if ((!byte.TryParse(ActiveControl.Text, out temp)) || (temp < 1)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].PoisonResistMaxStat = temp; + } + + private void RISHpRecovChancetextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].HpRecovChance = temp; + } + + private void RISHpRecovStatChancetextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].HpRecovStatChance = temp; + } + + private void RISHpRecovMaxStattextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if ((!byte.TryParse(ActiveControl.Text, out temp)) || (temp < 1)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].HpRecovMaxStat = temp; + } + + private void RISMpRecovChancetextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].MpRecovChance = temp; + } + + private void RISMpRecovStatChancetextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].MpRecovStatChance = temp; + } + + private void RISMpRecovMaxStattextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if ((!byte.TryParse(ActiveControl.Text, out temp)) || (temp < 1)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].MpRecovMaxStat = temp; + } + + private void RISPoisonRecovChancetextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].PoisonRecovChance = temp; + } + + private void RISPoisonRecovStatChancetextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].PoisonRecovStatChance = temp; + } + + private void RISPoisonRecovMaxStattextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if ((!byte.TryParse(ActiveControl.Text, out temp)) || (temp < 1)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].PoisonRecovMaxStat = temp; + } + + private void RISCriticalRateChancetextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].CriticalRateChance = temp; + } + + private void RISCriticalRateStatChancetextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].CriticalRateStatChance = temp; + } + + private void RISCriticalRateMaxStattextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if ((!byte.TryParse(ActiveControl.Text, out temp)) || (temp < 1)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].CriticalRateMaxStat = temp; + } + + private void RISCriticalDamageChancetextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].CriticalDamageChance = temp; + } + + private void RISCriticalDamageStatChancetextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].CriticalDamageStatChance = temp; + } + + private void RISCriticalDamageMaxStattextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if ((!byte.TryParse(ActiveControl.Text, out temp)) || (temp < 1)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].CriticalDamageMaxStat = temp; + } + + private void RISFreezingChancetextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].FreezeChance = temp; + } + + private void RISFreezingStatChancetextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].FreezeStatChance = temp; + } + + private void RISFreezingMaxStattextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if ((!byte.TryParse(ActiveControl.Text, out temp)) || (temp < 1)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].FreezeMaxStat = temp; + } + + private void RISPoisonAttackChancetextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].PoisonAttackChance = temp; + } + + private void RISPoisonAttackStatChancetextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].PoisonAttackStatChance = temp; + } + + private void RISPoisonAttackMaxStattextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if ((!byte.TryParse(ActiveControl.Text, out temp)) || (temp < 1)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].PoisonAttackMaxStat = temp; + } + + private void RISAttackSpeedChancetextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].AttackSpeedChance = temp; + } + + private void RISAttackSpeedStatChancetextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].AttackSpeedStatChance = temp; + } + + private void RISAttackSpeedMaxStattextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if ((!byte.TryParse(ActiveControl.Text, out temp)) || (temp < 1)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].AttackSpeedMaxStat = temp; + } + + private void RISLuckChancetextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].LuckChance = temp; + } + + private void RISLuckStatChancetextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].LuckStatChance = temp; + } + + private void RISLuckMaxStattextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if ((!byte.TryParse(ActiveControl.Text, out temp)) || (temp < 1)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].LuckMaxStat = temp; + } + + private void RISCurseChancetextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (RISIndexcomboBox.SelectedItem == null) return; + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + RandomItemStatsChanged = true; + Settings.RandomItemStatsList[RISIndexcomboBox.SelectedIndex].CurseChance = temp; + } + + private void RISSlotChancetextBox_TextChanged(object sender, EventArgs e) + { + } + + private void RISSlotStatChancetextBox_TextChanged(object sender, EventArgs e) + { + } + + private void RISSlotMaxStattextBox_TextChanged(object sender, EventArgs e) + { + } + #endregion + + #region Class + private void classGridView_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) + { + classGridView.Rows[e.RowIndex].ErrorText = ""; + + if (classGridView.Rows[e.RowIndex].IsNewRow) { return; } + + if (e.ColumnIndex == 2 || e.ColumnIndex == 5) + { + if (!int.TryParse(e.FormattedValue.ToString(), out _)) + { + e.Cancel = true; + classGridView.Rows[e.RowIndex].ErrorText = "the value must be an integer"; + } + } + else if (e.ColumnIndex == 3 || e.ColumnIndex == 4) + { + if (!float.TryParse(e.FormattedValue.ToString(), out _)) + { + e.Cancel = true; + classGridView.Rows[e.RowIndex].ErrorText = "the value must be a decimal"; + } + } + } + + private void classGridView_DefaultValuesNeeded(object sender, DataGridViewRowEventArgs e) + { + e.Row.Cells["BaseStatBase"].Value = 0; + e.Row.Cells["BaseStatGain"].Value = 0.0F; + e.Row.Cells["BaseStatGainRate"].Value = 0.0F; + e.Row.Cells["BaseStatMax"].Value = 0; + } + + private void classGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e) + { + if (e.RowIndex < 0) return; + if (classGridView.Rows[e.RowIndex].IsNewRow) return; + + if (classGridView.Columns[e.ColumnIndex].Name == "BaseStatFormula") + { + var formula = (StatFormula)classGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value; + + var gainRateCell = classGridView.Rows[e.RowIndex].Cells["BaseStatGainRate"]; + + if (formula == StatFormula.Health || formula == StatFormula.Mana) + { + gainRateCell.ReadOnly = false; + gainRateCell.Style.BackColor = gainRateCell.OwningColumn.DefaultCellStyle.BackColor; + gainRateCell.Style.ForeColor = gainRateCell.OwningColumn.DefaultCellStyle.ForeColor; + } + else + { + gainRateCell.ReadOnly = true; + gainRateCell.Style.BackColor = Color.LightGray; + gainRateCell.Style.ForeColor = Color.DarkGray; + } + } + + var statType = (Stat)classGridView.Rows[e.RowIndex].Cells["BaseStatType"].Value; + + UpdateBaseStatData(); + UpdateClassStatExample(statType); + } + + private void classGridView_SelectionChanged(object sender, EventArgs e) + { + if (classGridView.SelectedRows.Count == 1) + { + var row = classGridView.SelectedRows[0]; + + var statType = (Stat)row.Cells["BaseStatType"].Value; + + UpdateClassStatExample(statType); + } + } + + private void classGridView_UserDeletedRow(object sender, DataGridViewRowEventArgs e) + { + UpdateBaseStatData(); + } + + private void classCapGridView_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) + { + classCapGridView.Rows[e.RowIndex].ErrorText = ""; + + if (classCapGridView.Rows[e.RowIndex].IsNewRow) { return; } + + if (e.ColumnIndex == 1) + { + if (!int.TryParse(e.FormattedValue.ToString(), out _)) + { + e.Cancel = true; + classCapGridView.Rows[e.RowIndex].ErrorText = "the value must be an integer"; + } + } + } + + private void classCapGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e) + { + if (e.RowIndex < 0) return; + if (classCapGridView.Rows[e.RowIndex].IsNewRow) return; + + var capType = (Stat)classCapGridView.Rows[e.RowIndex].Cells["CapType"].Value; + + UpdateCapStatData(); + UpdateClassStatExample(capType); + } + + private void classCapGridView_DefaultValuesNeeded(object sender, DataGridViewRowEventArgs e) + { + e.Row.Cells["Value"].Value = 0; + } + + private void classCapGridView_UserDeletedRow(object sender, DataGridViewRowEventArgs e) + { + UpdateCapStatData(); + } + + private void UpdateClassStatExample(Stat type) + { + if (Populating) return; + + var str = string.Format("{0} - {1}\r\r", ((MirClass)SelectedClassID), type); + + BaseStats classStats = Settings.ClassBaseStats[SelectedClassID]; + + var stat = classStats.Stats.FirstOrDefault(x => x.Type == type); + + if (stat != null) + { + var cap = classStats.Caps[type]; + + if (cap == 0) cap = int.MaxValue; + + for (int level = 1; level <= 50; level++) + { + str += string.Format("Level {0}\t: {1}\n", level, Math.Min(cap, stat.Calculate((MirClass)SelectedClassID, level))); + } + + lblClassStatExample.Text = str; + } + } + + private void UpdateClassStatGridView() + { + classGridView.Rows.Clear(); + + BaseStats classStats = Settings.ClassBaseStats[SelectedClassID]; + + foreach (var stat in classStats.Stats) + { + int rowIndex = classGridView.Rows.Add(); + + var row = classGridView.Rows[rowIndex]; + + row.Cells["BaseStatType"].Value = stat.Type; + row.Cells["BaseStatFormula"].Value = stat.FormulaType; + row.Cells["BaseStatBase"].Value = stat.Base; + row.Cells["BaseStatGain"].Value = stat.Gain; + row.Cells["BaseStatGainRate"].Value = stat.GainRate; + row.Cells["BaseStatMax"].Value = stat.Max; + } + } + + private void UpdateClassCapGridView() + { + classCapGridView.Rows.Clear(); + + BaseStats classStats = Settings.ClassBaseStats[SelectedClassID]; + + foreach (var cap in classStats.Caps.Values) + { + int rowIndex = classCapGridView.Rows.Add(); + + var row = classCapGridView.Rows[rowIndex]; + + row.Cells["CapType"].Value = cap.Key; + row.Cells["Value"].Value = cap.Value; + } + } + + private void UpdateBaseStatData() + { + if (Populating) return; + + BaseStatsChanged = true; + + BaseStats classStats = Settings.ClassBaseStats[SelectedClassID]; + + classStats.Stats.Clear(); + + foreach (DataGridViewRow row in classGridView.Rows) + { + var cells = row.Cells; + + if (cells[0].Value == null || cells[1].Value == null) continue; + + var type = (Stat)row.Cells["BaseStatType"].Value; + var formula = (StatFormula)row.Cells["BaseStatFormula"].Value; + + if (classStats.Stats.Any(x => x.Type == type)) + { + MessageBox.Show(string.Format($"The stat '{type}' exists more than once so will not be saved.")); + continue; + } + + var baseStat = new BaseStat(type) + { + FormulaType = (StatFormula)cells["BaseStatFormula"].Value.ValueOrDefault(), + Base = cells["BaseStatBase"].Value.ValueOrDefault(), + Gain = cells["BaseStatGain"].Value.ValueOrDefault(), + GainRate = cells["BaseStatGainRate"].Value.ValueOrDefault(), + Max = cells["BaseStatMax"].Value.ValueOrDefault() + }; + + classStats.Stats.Add(baseStat); + } + } + + private void UpdateCapStatData() + { + if (Populating) return; + + BaseStatsChanged = true; + + BaseStats classStats = Settings.ClassBaseStats[SelectedClassID]; + + classStats.Caps.Clear(); + + foreach (DataGridViewRow row in classCapGridView.Rows) + { + var cells = row.Cells; + + if (cells[0].Value == null || cells[1].Value == null) continue; + + var type = (Stat)row.Cells["CapType"].Value; + var value = (int)row.Cells["Value"].Value.ValueOrDefault(); + + classStats.Caps[type] = value; + } + } + + #endregion + } +} diff --git a/Server.MirForms/BalanceConfigForm.resx b/Server.MirForms/BalanceConfigForm.resx new file mode 100644 index 0000000..fef4630 --- /dev/null +++ b/Server.MirForms/BalanceConfigForm.resx @@ -0,0 +1,1787 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + + + AAABAAgAICAQAAAABADoAgAAhgAAACAgAAAAABgAqAwAAG4DAAAgIAAAAAAIAKgIAAAWEAAAQEAAAAAA + GAAoMgAAvhgAAEBAEAAAAAQAaAoAAOZKAABAQAAAAAAIACgWAABOVQAAgIAAAAAAGAAoyAAAdmsAAICA + AAAAAAgAKEwAAJ4zAQAoAAAAIAAAAEAAAAABAAQAAAAAAAACAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAA + gAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////ABER + ERAAAAAAAAAAAAAAAAARERERAAAAAAAAAAAAAAAAERERERAAAAAAAAAAAAAAABERERERAAAAAQAAAAAA + AAARERAAAQAAAAEAAAAAAAAAEREREQAAAAABAAAAAAAAABERERERAAAAABAAAAAAAAAREREREQAAAAAQ + AAAQAAAAEREREREAAAAAAAABEAAAAAERERERAAAAAAAxERAAAAAQERERERAAAAABEQAAAAAAAAAREREQ + AAAAAQARERARAAAAEREREAAAAAEBEAERERAAAAAAAAAAAAAQEQARMzERAAAAEREAAAABEBADMzMzEQAA + AAEQAAAAAAEAADMxMxEAAAAAAAAAAAEQEQAzMxEQAAABAAEAAAEREAAAMBMQEAAAAAARAAABEREQADEQ + EQAAAAABEBEBEREQATAREREAAAAQAQAQARERAQABEQERAAAAAAAAEBETEQMRERAREQAAAAAAARARExEQ + AREAAREQAAAAAAEBERMxMQEBAAABEQABAAAAAQERERMREQAAAAEAABAAABABERExERAAAAAAAAAAAAAA + EREREREAAAAAAAAAABAQEQAAAREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABAAAAAAAAAAAA + AAAAEAARAAAAAAAAAAAAAAAAAAABEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABABgAAAAAAAAM + AAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA + AACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAAAA + AAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA + AACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACA + AACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAACAAACAAACAAACAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAA + AACAAACAAACAAACAAACAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAAAAAAAAAACAAACAAACAAACAAACA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACAAAAAAACAAACAAAAAAAAAAACAAACAAICAAICAAICAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAA + AACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAACAAAAAAAAAAICAAICAAICA + AICAAICAAICAAICAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAICAAICAAICAAACAAICAAICAAACAAACAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAACAAACA + AAAAAAAAAICAAICAAICAAICAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAACA + AAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAICAAAAAAACAAICAAACAAAAA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAACAAACAAACA + AACAAACAAACAAAAAAAAAAAAAAICAAACAAACAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAACAAACAAAAAAACAAACAAAAAAACAAACAAACAAACAAACAAACAAAAAAAAAAACAAICAAAAAAACAAACA + AACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAACA + AACAAACAAACAAACAAAAAAACAAAAAAAAAAAAAAACAAACAAACAAAAAAACAAACAAACAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAICAAACAAACAAAAAAICAAACAAACA + AACAAACAAACAAAAAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + AACAAAAAAACAAACAAACAAICAAACAAACAAACAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAACAAACAAACA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAACAAICAAICAAACA + AICAAACAAAAAAACAAAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAACAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAACAAACAAACAAICAAACAAACAAACAAACAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACA + AACAAACAAACAAACAAICAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAAAA + AACAAACAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAA + AACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAACAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE + AAAAAAAAAAAAAAABAAAAAQAAAAD/AAD/AAD/AAAAAP//AP//AAD/AP8AwMDAAP/48ADX6/oA1P9/AP8A + AADiK4oAKiqlAAAAAAAEBAQACAgIAAwMDAAREREAFhYWABwcHAAiIiIAKSkpADMzMwA5OTkAQkJCAE1N + TQBVVVUAYGBgAGZmZgBwcHAAgICAAIyMjACUlJQAmZmZAKSkpACsrKwAtra2AMDAwADMzMwA1NTUANra + 2gDg4OAA7OzsAPj4+AD7+/sA////ADMAAABmAAAAmQAAAMwAAAD/AAAAADMAADMzAABmMwAAmTMAAMwz + AAD/MwAAAGYAADNmAABmZgAAmWYAAMxmAAD/ZgAAAJkAADOZAABmmQAAmZkAAMyZAAD/mQAAAMwAADPM + AABmzAAAmcwAAMzMAAD/zAAAAP8AADP/AABm/wAAmf8AAMz/AAD//wAAAAAzADMAMwBmADMAmQAzAMwA + MwD/ADMAADMzAGYzMwCZMzMAzDMzAP8zMwAAZjMAM2YzAGZmMwCZZjMAzGYzAP9mMwAAmTMAM5kzAGaZ + MwCZmTMAzJkzAP+ZMwAAzDMAM8wzAGbMMwCZzDMAzMwzAP/MMwAA/zMAM/8zAGb/MwCZ/zMAzP8zAP// + MwAAAGYAMwBmAGYAZgCZAGYAzABmAP8AZgAAM2YAMzNmAGYzZgCZM2YAzDNmAP8zZgAAZmYAM2ZmAJlm + ZgDMZmYA/2ZmAACZZgAzmWYAZplmAJmZZgDMmWYA/5lmAADMZgAzzGYAZsxmAJnMZgDMzGYA/8xmAAD/ + ZgAz/2YAZv9mAJn/ZgDM/2YA//9mAAAAmQAzAJkAZgCZAJkAmQDMAJkA/wCZAAAzmQAzM5kAZjOZAJkz + mQDMM5kA/zOZAABmmQAzZpkAZmaZAJlmmQDMZpkA/2aZAACZmQAzmZkAZpmZAMyZmQD/mZkAAcyZADPM + mQBmzJkAmcyZAMzMmQD/zJkAAP+ZADP/mQBm/5kAmf+ZAMz/mQD//5kAAADMADMAzABmAMwAmQDMAMwA + zAD/AMwAADPMADMzzABmM8wAmTPMAMwzzAD/M8wAAGbMADNmzABmZswAmWbMAMxmzAD/ZswAAJnMADOZ + zABmmcwAmZnMAMyZzAD/mcwAAMzMADPMzABmzMwAmczMAP/MzAAA/8wAM//MAGb/zACZ/8wAzP/MAP// + zAAAAP8AMwD/AGYA/wCZAP8AzAD/AP8A/wAAM/8AMzP/AGYz/wCZM/8AzDP/AP8z/wAAZv8AM2b/AGZm + /wCZZv8AzGb/AP9m/wAAmf8AM5n/AGaZ/wCZmf8AzJn/AP+Z/wAAzP8AM8z/AGbM/wCZzP8AzMz/AP/M + /wAA//8AM///AGb//wCZ//8AzP//AJ+fn5+fn58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQn5+fn5+f + n58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBCfn5+fn5+fn58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEJ+f + n5+fn5+fn58QEBAQEBAQnxAQEBAQEBAQEBAQEBAQn5+fn58QEBAQnxAQEBAQEBCfEBAQEBAQEBAQEBAQ + EBCfn5+fn5+fnxAQEBAQEBAQEJ8QEBAQEBAQEBAQEBAQEJ+fn5+fn5+fn58QEBAQEBAQEJ8QEBAQEBAQ + EBAQEBAQn5+fn5+fn5+fnxAQEBAQEBAQnxAQEBAQnxAQEBAQEBCfn5+fn5+fn5+fEBAQEBAQEBAQEBAQ + EJ+fEBAQEBAQEBCfn5+fn5+fn58QEBAQEBAQEBAQrZ+fn58QEBAQEBAQnxCfn5+fn5+fn58QEBAQEBAQ + EJ+fnxAQEBAQEBAQEBAQEBAQn5+fn5+fnxAQEBAQEBAQnxAQn5+fn58Qn58QEBAQEBCfn5+fn5+fEBAQ + EBAQEBCfEJ+fEBCfn5+fn58QEBAQEBAQEBAQEBAQEBAQEBAQnxCfnxAQn5+tra2fn58QEBAQEBCfn5+f + EBAQEBAQEJ+fEJ8QEK2tra2tra2fnxAQEBAQEBCfnxAQEBAQEBAQEBCfEBAQEK2trZ+trZ+fEBAQEBAQ + EBAQEBAQEBAQEBCfnxCfnxAQra2trZ+fnxAQEBAQEJ8QEBCfEBAQEBCfn5+fEBAQEBCtEJ+tnxCfEBAQ + EBAQEBAQn58QEBAQEJ+fn5+fnxAQEK2fnxCfnxAQEBAQEBAQEJ+fEJ+fEJ+fn5+fnxAQn60Qn5+fn5+f + EBAQEBAQnxAQnxAQnxAQn5+fn58QnxAQEJ+fnxCfn58QEBAQEBAQEBAQEBCfEJ+fn62fnxCtn5+fn58Q + n5+fnxAQEBAQEBAQEBAQn58Qn5+frZ+fnxAQn5+fEBAQn5+fnxAQEBAQEBAQEBCfEJ+fn5+trZ+tnxCf + EJ8QEBAQEJ+fnxAQEJ8QEBAQEBAQnxCfn5+fn5+tn5+fnxAQEBAQEBCfEBAQEJ8QEBAQEJ8QEJ+fn5+f + rZ+fn58QEBAQEBAQEBAQEBAQEBAQEBAQEBCfn5+fn5+fn5+fEBAQEBAQEBAQEBAQEBAQEJ8QnxCfnxAQ + EBAQn5+fEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEJ8QEJ8QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBCfEBAQn58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEJ+fEJ8QEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAABAAAAAgAAAAAEAGAAAAAAAADAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAA + AAAAAIAAAIAAAAAAAAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAA + gIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAAIAA + AIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAgIAA + gIAAgIAAgIAAAIAAAIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAAAAAAAAAIAAAIAAgIAAgIAAAIAAAIAAAAAA + AAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAAAAAAAAAIAAAIAAgIAA + gIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAA + AIAAgIAAgIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAA + AAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAIAAAIAAgIAAgIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAgIAAgIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAgIAA + gIAAgIAAgIAAAIAAAIAAgIAAgIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAgIAAgIAAgIAAgIAAAIAAAIAAgIAAgIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAgIAA + gIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAAAA + AAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAABAAAAAgAAAAAEABAAAAAAAAAgAAAAA + AAAAAAAAEAAAABAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAwMDAAICAgAAAAP8AAP8AAAD/ + /wD/AAAA/wD/AP//AAD///8AEREREREREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARERERERERAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAABERERERERERAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAERERERER + EREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAREREREREREREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABER + EREREREREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEREREREREREREQAAAAAAAAARAAAAAAAAAAAAAAAA + AAARERERERERERERAAAAAAAAABEAAAAAAAAAAAAAAAAAABERERERAAAAABEAAAAAAAAAEQAAAAAAAAAA + AAAAAAAAEREREREAAAAAEQAAAAAAAAARAAAAAAAAAAAAAAAAAAAREREREREREQAAAAAAAAAAABEAAAAA + AAAAAAAAAAAAABERERERERERAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAEREREREREREREQAAAAAAAAAA + EQAAAAAAAAAAAAAAAAARERERERERERERAAAAAAAAAAARAAAAAAAAAAAAAAAAABEREREREREREREAAAAA + AAAAABEAAAAAABEAAAAAAAAAEREREREREREREQAAAAAAAAAAEQAAAAAAEQAAAAAAAAARERERERERERER + AAAAAAAAAAAAAAAAABERAAAAAAAAABEREREREREREREAAAAAAAAAAAAAAAAAEREAAAAAAAAAABERERER + EREREQAAAAAAAAAAAAAzEREREQAAAAAAAAAAERERERERERERAAAAAAAAAAAAADMRERERAAAAAAAAABEA + ERERERERERERAAAAAAAAAAAREREAAAAAAAAAAAAAEQAREREREREREREAAAAAAAAAABEREQAAAAAAAAAA + AAAAAAAAEREREREREQAAAAAAAAAAEQAAEREREREAEREAAAAAAAARERERERERAAAAAAAAAAARAAARERER + EQAREQAAAAAAABEREREREREAAAAAAAAAABEAEREAABEREREREQAAAAAAEREREREREQAAAAAAAAAAEQAR + EQAAERERERERAAAAAAAAAAAAAAAAAAAAAAAAABEAEREAABERMzMzERERAAAAAAAAAAAAAAAAAAAAAAAA + EQAREQAAEREzMzMREREAAAAAAAARERERAAAAAAAAABERABEAADMzMzMzMzMREQAAAAAAABEREREAAAAA + AAAAEREAEQAAMzMzMzMzMxERAAAAAAAAABERAAAAAAAAAAAAABEAAAAAMzMzETMzEREAAAAAAAAAEREA + AAAAAAAAAAAAEQAAAAAzMzMRMzMREQAAAAAAAAAAAAAAAAAAAAAAEREAEREAADMzMzMREREAAAAAAAAA + AAAAAAAAAAAAAAAREQAREQAAMzMzMxEREQAAAAAAABEAAAARAAAAAAARERERAAAAAAAzABEzEQARAAAA + AAAAEQAAABEAAAAAABEREREAAAAAADMAETMRABEAAAAAAAAAAAAREQAAAAAAERERERERAAAAMxERABER + AAAAAAAAAAAAABERAAAAAAAREREREREAAAAzEREAEREAAAAAAAAAAAAREQAREQAREREREREAABEzABER + EREREQAAAAAAAAAAABERABERABEREREREQAAETMAERERERERAAAAAAAAEQAAEQAAEQAAEREREREAEQAA + ABEREQAREREAAAAAAAARAAARAAARAAAREREREQARAAAAERERABEREQAAAAAAAAAAAAAAABEAERERMxER + ADMREREREQARERERAAAAAAAAAAAAAAAAEQAREREzEREAMxERERERABEREREAAAAAAAAAAAAAABERABER + ETMREREAABEREQAAABEREREAAAAAAAAAAAAAEREAERERMxEREQAAERERAAAAEREREQAAAAAAAAAAAAAR + ABEREREzMxEzEQARABEAAAAAABEREQAAAAAAAAAAABEAERERETMzETMRABEAEQAAAAAAERERAAAAEQAA + AAAAAAARABERERERETMRERERAAAAAAAAABEAAAARAAAAAAAAABEAERERERERMxEREREAAAAAAAAAEQAA + AAARAAAAAAARAAARERERETMRERERAAAAAAAAAAAAAAAAABEAAAAAABEAABERERERMxEREREAAAAAAAAA + AAAAAAAAAAAAAAAAAAARERERERERERERAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEREREREREREREAAAAA + AAAAAAAAAAAAAAAAEQARABERAAAAAAAREREAAAAAAAAAAAAAAAAAAAAAAAARABEAEREAAAAAABEREQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + EQAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAAAREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + EQAAABERAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAREQARAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAABERABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgA + AABAAAAAgAAAAAEACAAAAAAAABAAAAAAAAAAAAAAAAEAAAABAAAAAP8AAP8AAP8AAAAA//8A//8AAP8A + /wDAwMAA//jwANfr+gDU/38A/wAAAOIrigAqKqUAAAAAAAQEBAAICAgADAwMABEREQAWFhYAHBwcACIi + IgApKSkAMzMzADk5OQBCQkIATU1NAFVVVQBgYGAAZmZmAHBwcACAgIAAjIyMAJSUlACZmZkApKSkAKys + rAC2trYAwMDAAMzMzADU1NQA2traAODg4ADs7OwA+Pj4APv7+wD///8AMwAAAGYAAACZAAAAzAAAAP8A + AAAAMwAAMzMAAGYzAACZMwAAzDMAAP8zAAAAZgAAM2YAAGZmAACZZgAAzGYAAP9mAAAAmQAAM5kAAGaZ + AACZmQAAzJkAAP+ZAAAAzAAAM8wAAGbMAACZzAAAzMwAAP/MAAAA/wAAM/8AAGb/AACZ/wAAzP8AAP// + AAAAADMAMwAzAGYAMwCZADMAzAAzAP8AMwAAMzMAZjMzAJkzMwDMMzMA/zMzAABmMwAzZjMAZmYzAJlm + MwDMZjMA/2YzAACZMwAzmTMAZpkzAJmZMwDMmTMA/5kzAADMMwAzzDMAZswzAJnMMwDMzDMA/8wzAAD/ + MwAz/zMAZv8zAJn/MwDM/zMA//8zAAAAZgAzAGYAZgBmAJkAZgDMAGYA/wBmAAAzZgAzM2YAZjNmAJkz + ZgDMM2YA/zNmAABmZgAzZmYAmWZmAMxmZgD/ZmYAAJlmADOZZgBmmWYAmZlmAMyZZgD/mWYAAMxmADPM + ZgBmzGYAmcxmAMzMZgD/zGYAAP9mADP/ZgBm/2YAmf9mAMz/ZgD//2YAAACZADMAmQBmAJkAmQCZAMwA + mQD/AJkAADOZADMzmQBmM5kAmTOZAMwzmQD/M5kAAGaZADNmmQBmZpkAmWaZAMxmmQD/ZpkAAJmZADOZ + mQBmmZkAzJmZAP+ZmQABzJkAM8yZAGbMmQCZzJkAzMyZAP/MmQAA/5kAM/+ZAGb/mQCZ/5kAzP+ZAP// + mQAAAMwAMwDMAGYAzACZAMwAzADMAP8AzAAAM8wAMzPMAGYzzACZM8wAzDPMAP8zzAAAZswAM2bMAGZm + zACZZswAzGbMAP9mzAAAmcwAM5nMAGaZzACZmcwAzJnMAP+ZzAAAzMwAM8zMAGbMzACZzMwA/8zMAAD/ + zAAz/8wAZv/MAJn/zADM/8wA///MAAAA/wAzAP8AZgD/AJkA/wDMAP8A/wD/AAAz/wAzM/8AZjP/AJkz + /wDMM/8A/zP/AABm/wAzZv8AZmb/AJlm/wDMZv8A/2b/AACZ/wAzmf8AZpn/AJmZ/wDMmf8A/5n/AADM + /wAzzP8AZsz/AJnM/wDMzP8A/8z/AAD//wAz//8AZv//AJn//wDM//8An5+fn5+fn5+fn5+fn58dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+f + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+f + n5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+f + n5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+f + n5+fn5+fn5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fn5+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn5+fn5+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHZ+fHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fHR0dHR0dHR2fnx0dHR0dHR0dHR0dHR0dn58dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fnx0dHR0dHR0dn58dHR0dHR0dHR0dHR0dHZ+fHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR2fnx0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0d + n58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0d + HR0dHR0dn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0d + HR0dHR0dHR0dHZ+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fn5+fn5+fnx0d + HR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dHR2fnx0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn5+fn5+f + n58dHR0dHR0dHR0dHR0dHR0dn58dHR0dHR0dHR0dn58dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+f + n5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+f + n5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fnx0dHR0dHR0dHR0dHR0dHR2fn5+f + n5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHa2tn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0d + n5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR2trZ+fn5+fn5+fHR0dHR0dHR0dHR0d + HR2fnx0dn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHZ+fn5+fnx0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHZ+fn5+fn5+fn5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR2fn5+fn58dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dn58dHR0dn5+fn5+f + n5+fnx0dn5+fnx0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHZ+fHR0dHZ+f + n5+fn5+fn58dHZ+fn58dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR2fnx0d + n5+fnx0dHR2fn5+fn5+fn5+fn58dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0d + n58dHZ+fn58dHR0dn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fnx0dn5+fnx0dHR2fn5+fra2tra2tn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHZ+fn58dHR0dn5+fn62tra2trZ+fn5+fnx0dHR0dHR0dHR0dHZ+fn5+fn5+fHR0dHR0d + HR0dHR0dHR2fn5+fHR2fnx0dHR2tra2tra2tra2tra2trZ+fn58dHR0dHR0dHR0dHR2fn5+fn5+fnx0d + HR0dHR0dHR0dHR0dn5+fnx0dn58dHR0dra2tra2tra2tra2tra2fn5+fHR0dHR0dHR0dHR0dHR2fn5+f + HR0dHR0dHR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dra2tra2tn5+tra2tn5+fnx0dHR0dHR0dHR0dHR0d + n5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dn58dHR0dHR0dHa2tra2trZ+fra2trZ+fn58dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fnx0dn5+fnx0dHR2tra2tra2trZ+fn5+fnx0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn58dHZ+fn58dHR0dra2tra2tra2fn5+fn58dHR0d + HR0dHR0dHR2fnx0dHR0dHZ+fHR0dHR0dHR0dHZ+fn5+fn5+fHR0dHR0dHR0dHa2tHR2fn62tn58dHZ+f + HR0dHR0dHR0dHR0dn58dHR0dHR2fnx0dHR0dHR0dHR2fn5+fn5+fnx0dHR0dHR0dHR2trR0dn5+trZ+f + HR2fnx0dHR0dHR0dHR0dHR0dHR0dHZ+fn58dHR0dHR0dHR0dn5+fn5+fn5+fn5+fHR0dHR0dra2fn5+f + HR2fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR0dHR0dHR0dHZ+fn5+fn5+fn5+fnx0dHR0dHa2t + n5+fnx0dn5+fnx0dHR0dHR0dHR0dHR0dHR0dHZ+fn58dHZ+fn58dHZ+fn5+fn5+fn5+fnx0dHR2fn62t + HR2fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR2fn5+fHR2fn5+fn5+fn5+fn58dHR0d + n5+trR0dn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dn58dHR0dn58dHR0dn58dHR0dn5+fn5+fn5+fnx0d + n58dHR0dHR2fn5+fn58dHZ+fn5+fnx0dHR0dHR0dHR0dHZ+fHR0dHZ+fHR0dHZ+fHR0dHZ+fn5+fn5+f + n58dHZ+fHR0dHR0dn5+fn5+fHR2fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fnx0dn5+fn5+f + ra2fn5+fHR2trZ+fn5+fn5+fn58dHZ+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn58dHZ+f + n5+fn62tn5+fnx0dra2fn5+fn5+fn5+fHR2fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+f + HR2fn5+fn5+trZ+fn5+fnx0dHR2fn5+fn58dHR0dHR2fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0d + n5+fnx0dn5+fn5+fra2fn5+fn58dHR0dn5+fn5+fHR0dHR0dn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0d + HR0dHZ+fHR2fn5+fn5+fn62tra2fn62tn58dHZ+fHR2fnx0dHR0dHR0dHR2fn5+fn58dHR0dHR0dHR0d + HR0dHR0dHR2fnx0dn5+fn5+fn5+tra2tn5+trZ+fHR2fnx0dn58dHR0dHR0dHR0dn5+fn5+fHR0dHR0d + n58dHR0dHR0dHR0dHR0dHZ+fHR2fn5+fn5+fn5+fn5+trZ+fn5+fn5+fHR0dHR0dHR0dHR0dHR2fnx0d + HR0dHZ+fHR0dHR0dHR0dHR0dHR2fnx0dn5+fn5+fn5+fn5+fra2fn5+fn5+fnx0dHR0dHR0dHR0dHR0d + n58dHR0dHR0dHZ+fHR0dHR0dHR0dHZ+fHR0dHZ+fn5+fn5+fn5+trZ+fn5+fn5+fHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dHR2fnx0dHR2fn5+fn5+fn5+fra2fn5+fn5+fnx0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fn5+fn5+fnx0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn58dHZ+fHR2fn5+fHR0dHR0dHR0dHZ+fn5+fnx0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fHR2fnx0dn5+fnx0dHR0dHR0dHR2fn5+f + n58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fnx0dHR2fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHR0dn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fnx0dHR0dHZ+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHR0dHR2fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHZ+fn58dHZ+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR2fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAIAAAAAAAQAAAQAYAAAAAAAAwAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAIAAAAAAAQAAAQAIAAAAAAAAQAAAAAAAAAAA + AAAAAQAAAAEAAAAA/wAA/wAA/wAAAAD//wD//wAA/wD/AMDAwAD/+PAA1+v6ANT/fwD/AAAA4iuKACoq + pQAAAAAABAQEAAgICAAMDAwAERERABYWFgAcHBwAIiIiACkpKQAzMzMAOTk5AEJCQgBNTU0AVVVVAGBg + YABmZmYAcHBwAICAgACMjIwAlJSUAJmZmQCkpKQArKysALa2tgDAwMAAzMzMANTU1ADa2toA4ODgAOzs + 7AD4+PgA+/v7AP///wAzAAAAZgAAAJkAAADMAAAA/wAAAAAzAAAzMwAAZjMAAJkzAADMMwAA/zMAAABm + AAAzZgAAZmYAAJlmAADMZgAA/2YAAACZAAAzmQAAZpkAAJmZAADMmQAA/5kAAADMAAAzzAAAZswAAJnM + AADMzAAA/8wAAAD/AAAz/wAAZv8AAJn/AADM/wAA//8AAAAAMwAzADMAZgAzAJkAMwDMADMA/wAzAAAz + MwBmMzMAmTMzAMwzMwD/MzMAAGYzADNmMwBmZjMAmWYzAMxmMwD/ZjMAAJkzADOZMwBmmTMAmZkzAMyZ + MwD/mTMAAMwzADPMMwBmzDMAmcwzAMzMMwD/zDMAAP8zADP/MwBm/zMAmf8zAMz/MwD//zMAAABmADMA + ZgBmAGYAmQBmAMwAZgD/AGYAADNmADMzZgBmM2YAmTNmAMwzZgD/M2YAAGZmADNmZgCZZmYAzGZmAP9m + ZgAAmWYAM5lmAGaZZgCZmWYAzJlmAP+ZZgAAzGYAM8xmAGbMZgCZzGYAzMxmAP/MZgAA/2YAM/9mAGb/ + ZgCZ/2YAzP9mAP//ZgAAAJkAMwCZAGYAmQCZAJkAzACZAP8AmQAAM5kAMzOZAGYzmQCZM5kAzDOZAP8z + mQAAZpkAM2aZAGZmmQCZZpkAzGaZAP9mmQAAmZkAM5mZAGaZmQDMmZkA/5mZAAHMmQAzzJkAZsyZAJnM + mQDMzJkA/8yZAAD/mQAz/5kAZv+ZAJn/mQDM/5kA//+ZAAAAzAAzAMwAZgDMAJkAzADMAMwA/wDMAAAz + zAAzM8wAZjPMAJkzzADMM8wA/zPMAABmzAAzZswAZmbMAJlmzADMZswA/2bMAACZzAAzmcwAZpnMAJmZ + zADMmcwA/5nMAADMzAAzzMwAZszMAJnMzAD/zMwAAP/MADP/zABm/8wAmf/MAMz/zAD//8wAAAD/ADMA + /wBmAP8AmQD/AMwA/wD/AP8AADP/ADMz/wBmM/8AmTP/AMwz/wD/M/8AAGb/ADNm/wBmZv8AmWb/AMxm + /wD/Zv8AAJn/ADOZ/wBmmf8AmZn/AMyZ/wD/mf8AAMz/ADPM/wBmzP8Amcz/AMzM/wD/zP8AAP//ADP/ + /wBm//8Amf//AMz//wCfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pra2trZ+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+tra2tn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD62tra2fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+f + n5+tra2tra2tra2tra2fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8P + Dw+fn5+fn5+fn62tra2tra2tra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+f + n58PDw8PDw8PD5+fn5+fn5+fra2tra2tra2tra2tn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8P + Dw+fn5+fDw8PDw8PDw+tra2tra2tra2tra2tra2tra2tra2tra2tra2tn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PD5+fn58PDw8PDw8PD62tra2tra2tra2tra2tra2tra2tra2tra2tra2fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8Pn5+fnw8PDw8PDw8Pra2tra2tra2tra2tra2tra2tra2tra2tra2trZ+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw+fn5+fDw8PDw8PDw+tra2tra2tra2tra2tra2tra2tra2t + ra2tra2tn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+fn58PDw8PDw8PD62tra2tra2tra2tra2t + ra2tra2tra2tra2tra2fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PD62t + ra2tra2tra2trZ+fn5+tra2tra2trZ+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8Pra2tra2tra2tra2tn5+fn62tra2tra2tn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PDw8PDw+tra2tra2tra2tra2fn5+fra2tra2tra2fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n58PDw8Pn5+fn5+fn58PDw8PDw8PD62tra2tra2tra2tra2tra2fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pra2tra2tra2tra2tra2trZ+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw+tra2tra2tra2tra2tra2tn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PD62tra2tra2tra2tra2t + ra2fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pra2tra2t + ra2tra2tra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw+tra2tDw8PD5+fn5+tra2tn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PD62tra0PDw8Pn5+fn62tra2fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pra2trQ8PDw+fn5+fra2trZ+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw+tra2tn5+fn5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PD62tra2fn5+fn5+fnw8PDw+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8Pra2trZ+fn5+fn5+fDw8PD5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw+tra2tn5+fn5+f + n58PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PD62t + ra2fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PD5+fn5+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8Pn5+fn62t + ra0PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw+fn5+fra2trQ8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PD5+fn5+tra2tDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PD5+fn58PDw8PDw8PD5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fDw8PD5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+fn58PDw8PDw8PD5+f + n58PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n58PDw8Pn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fnw8P + Dw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fnw8PDw+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fn5+fn62tra2fn5+fn5+fnw8PDw+tra2tn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fDw8PD62t + ra2fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+tra2tn5+fn5+f + n58PDw8Pra2trZ+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+fn5+fn5+fn5+fn62t + ra2fn5+fn5+fn5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+f + n5+fn5+fra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8P + Dw+fn5+fn5+fn5+fn5+tra2tn5+fn5+fn5+fn5+fDw8PDw8PDw+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PD5+fn5+fn5+fn5+fn62tra2fn5+fn5+fn5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn5+tra2tra2trZ+fn5+tra2tn5+fnw8P + Dw+fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn62tra2tra2tn5+fn62t + ra2fn5+fDw8PD5+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fra2tra2t + ra2fn5+fra2trZ+fn58PDw8Pn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+tra2tn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn62tra2fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+tra2tn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fra2trZ+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+tra2tn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn62tra2fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8Pn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n58PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + + + \ No newline at end of file diff --git a/Server.MirForms/ConfigForm.Designer.cs b/Server.MirForms/ConfigForm.Designer.cs new file mode 100644 index 0000000..30fefc1 --- /dev/null +++ b/Server.MirForms/ConfigForm.Designer.cs @@ -0,0 +1,758 @@ +namespace Server +{ + partial class ConfigForm + { + /// + /// 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(ConfigForm)); + SaveButton = new Button(); + configTabs = new TabControl(); + tabPage1 = new TabPage(); + groupBox1 = new GroupBox(); + label11 = new Label(); + DBVersionLabel = new Label(); + ServerVersionLabel = new Label(); + label10 = new Label(); + RelogDelayTextBox = new TextBox(); + label7 = new Label(); + VersionCheckBox = new CheckBox(); + VPathBrowseButton = new Button(); + VPathTextBox = new TextBox(); + label1 = new Label(); + tabPage2 = new TabPage(); + StartHTTPCheckBox = new CheckBox(); + label15 = new Label(); + HTTPTrustedIPAddressTextBox = new TextBox(); + label14 = new Label(); + HTTPIPAddressTextBox = new TextBox(); + label13 = new Label(); + MaxUserTextBox = new TextBox(); + label5 = new Label(); + TimeOutTextBox = new TextBox(); + label4 = new Label(); + PortTextBox = new TextBox(); + label3 = new Label(); + IPAddressTextBox = new TextBox(); + label2 = new Label(); + tabPage3 = new TabPage(); + label9 = new Label(); + label8 = new Label(); + Resolution_textbox = new TextBox(); + AllowArcherCheckBox = new CheckBox(); + AllowAssassinCheckBox = new CheckBox(); + StartGameCheckBox = new CheckBox(); + DCharacterCheckBox = new CheckBox(); + NCharacterCheckBox = new CheckBox(); + LoginCheckBox = new CheckBox(); + PasswordCheckBox = new CheckBox(); + AccountCheckBox = new CheckBox(); + tabPage4 = new TabPage(); + label12 = new Label(); + SaveDelayTextBox = new TextBox(); + label6 = new Label(); + tabPage5 = new TabPage(); + label16 = new Label(); + lineMessageTimeTextBox = new TextBox(); + label17 = new Label(); + gameMasterEffect_CheckBox = new CheckBox(); + SafeZoneHealingCheckBox = new CheckBox(); + SafeZoneBorderCheckBox = new CheckBox(); + VPathDialog = new OpenFileDialog(); + configTabs.SuspendLayout(); + tabPage1.SuspendLayout(); + groupBox1.SuspendLayout(); + tabPage2.SuspendLayout(); + tabPage3.SuspendLayout(); + tabPage4.SuspendLayout(); + tabPage5.SuspendLayout(); + SuspendLayout(); + // + // SaveButton + // + SaveButton.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + SaveButton.Location = new Point(411, 398); + SaveButton.Margin = new Padding(3, 4, 3, 4); + SaveButton.Name = "SaveButton"; + SaveButton.Size = new Size(87, 26); + SaveButton.TabIndex = 6; + SaveButton.Text = "Close"; + SaveButton.UseVisualStyleBackColor = true; + SaveButton.Click += SaveButton_Click; + // + // configTabs + // + configTabs.Controls.Add(tabPage1); + configTabs.Controls.Add(tabPage2); + configTabs.Controls.Add(tabPage3); + configTabs.Controls.Add(tabPage4); + configTabs.Controls.Add(tabPage5); + configTabs.Location = new Point(14, 14); + configTabs.Margin = new Padding(3, 4, 3, 4); + configTabs.Name = "configTabs"; + configTabs.SelectedIndex = 0; + configTabs.Size = new Size(484, 376); + configTabs.TabIndex = 5; + // + // tabPage1 + // + tabPage1.Controls.Add(groupBox1); + tabPage1.Controls.Add(RelogDelayTextBox); + tabPage1.Controls.Add(label7); + tabPage1.Controls.Add(VersionCheckBox); + tabPage1.Controls.Add(VPathBrowseButton); + tabPage1.Controls.Add(VPathTextBox); + tabPage1.Controls.Add(label1); + tabPage1.Location = new Point(4, 24); + tabPage1.Margin = new Padding(3, 4, 3, 4); + tabPage1.Name = "tabPage1"; + tabPage1.Padding = new Padding(3, 4, 3, 4); + tabPage1.Size = new Size(476, 348); + tabPage1.TabIndex = 0; + tabPage1.Text = "Version"; + tabPage1.UseVisualStyleBackColor = true; + // + // groupBox1 + // + groupBox1.Controls.Add(label11); + groupBox1.Controls.Add(DBVersionLabel); + groupBox1.Controls.Add(ServerVersionLabel); + groupBox1.Controls.Add(label10); + groupBox1.Location = new Point(7, 266); + groupBox1.Margin = new Padding(3, 4, 3, 4); + groupBox1.Name = "groupBox1"; + groupBox1.Padding = new Padding(3, 4, 3, 4); + groupBox1.Size = new Size(460, 74); + groupBox1.TabIndex = 25; + groupBox1.TabStop = false; + groupBox1.Text = "Version Info"; + // + // label11 + // + label11.AutoSize = true; + label11.Location = new Point(7, 49); + label11.Name = "label11"; + label11.Size = new Size(55, 15); + label11.TabIndex = 23; + label11.Text = "Database"; + // + // DBVersionLabel + // + DBVersionLabel.AutoSize = true; + DBVersionLabel.Location = new Point(89, 49); + DBVersionLabel.Name = "DBVersionLabel"; + DBVersionLabel.Size = new Size(45, 15); + DBVersionLabel.TabIndex = 24; + DBVersionLabel.Text = "Version"; + // + // ServerVersionLabel + // + ServerVersionLabel.AutoSize = true; + ServerVersionLabel.Location = new Point(89, 23); + ServerVersionLabel.Name = "ServerVersionLabel"; + ServerVersionLabel.Size = new Size(45, 15); + ServerVersionLabel.TabIndex = 7; + ServerVersionLabel.Text = "Version"; + // + // label10 + // + label10.AutoSize = true; + label10.Location = new Point(7, 23); + label10.Name = "label10"; + label10.Size = new Size(39, 15); + label10.TabIndex = 22; + label10.Text = "Server"; + // + // RelogDelayTextBox + // + RelogDelayTextBox.Location = new Point(104, 75); + RelogDelayTextBox.Margin = new Padding(3, 4, 3, 4); + RelogDelayTextBox.MaxLength = 5; + RelogDelayTextBox.Name = "RelogDelayTextBox"; + RelogDelayTextBox.Size = new Size(108, 23); + RelogDelayTextBox.TabIndex = 21; + RelogDelayTextBox.TextChanged += CheckUShort; + // + // label7 + // + label7.AutoSize = true; + label7.Location = new Point(17, 79); + label7.Name = "label7"; + label7.Size = new Size(72, 15); + label7.TabIndex = 20; + label7.Text = "Relog Delay:"; + // + // VersionCheckBox + // + VersionCheckBox.AutoSize = true; + VersionCheckBox.Location = new Point(104, 49); + VersionCheckBox.Margin = new Padding(3, 4, 3, 4); + VersionCheckBox.Name = "VersionCheckBox"; + VersionCheckBox.Size = new Size(150, 19); + VersionCheckBox.TabIndex = 3; + VersionCheckBox.Text = "Check for client version"; + VersionCheckBox.UseVisualStyleBackColor = true; + // + // VPathBrowseButton + // + VPathBrowseButton.Location = new Point(436, 16); + VPathBrowseButton.Margin = new Padding(3, 4, 3, 4); + VPathBrowseButton.Name = "VPathBrowseButton"; + VPathBrowseButton.Size = new Size(33, 26); + VPathBrowseButton.TabIndex = 2; + VPathBrowseButton.Text = "..."; + VPathBrowseButton.UseVisualStyleBackColor = true; + VPathBrowseButton.Click += VPathBrowseButton_Click; + // + // VPathTextBox + // + VPathTextBox.Location = new Point(104, 19); + VPathTextBox.Margin = new Padding(3, 4, 3, 4); + VPathTextBox.Name = "VPathTextBox"; + VPathTextBox.ReadOnly = true; + VPathTextBox.Size = new Size(324, 23); + VPathTextBox.TabIndex = 1; + // + // label1 + // + label1.AutoSize = true; + label1.Location = new Point(16, 23); + label1.Name = "label1"; + label1.Size = new Size(75, 15); + label1.TabIndex = 0; + label1.Text = "Version Path:"; + // + // tabPage2 + // + tabPage2.Controls.Add(StartHTTPCheckBox); + tabPage2.Controls.Add(label15); + tabPage2.Controls.Add(HTTPTrustedIPAddressTextBox); + tabPage2.Controls.Add(label14); + tabPage2.Controls.Add(HTTPIPAddressTextBox); + tabPage2.Controls.Add(label13); + tabPage2.Controls.Add(MaxUserTextBox); + tabPage2.Controls.Add(label5); + tabPage2.Controls.Add(TimeOutTextBox); + tabPage2.Controls.Add(label4); + tabPage2.Controls.Add(PortTextBox); + tabPage2.Controls.Add(label3); + tabPage2.Controls.Add(IPAddressTextBox); + tabPage2.Controls.Add(label2); + tabPage2.Location = new Point(4, 24); + tabPage2.Margin = new Padding(3, 4, 3, 4); + tabPage2.Name = "tabPage2"; + tabPage2.Padding = new Padding(3, 4, 3, 4); + tabPage2.Size = new Size(476, 348); + tabPage2.TabIndex = 1; + tabPage2.Text = "Network"; + tabPage2.UseVisualStyleBackColor = true; + // + // StartHTTPCheckBox + // + StartHTTPCheckBox.AutoSize = true; + StartHTTPCheckBox.Location = new Point(28, 180); + StartHTTPCheckBox.Margin = new Padding(3, 4, 3, 4); + StartHTTPCheckBox.Name = "StartHTTPCheckBox"; + StartHTTPCheckBox.Size = new Size(121, 19); + StartHTTPCheckBox.TabIndex = 23; + StartHTTPCheckBox.Text = "Start HTTP Service"; + StartHTTPCheckBox.UseVisualStyleBackColor = true; + StartHTTPCheckBox.CheckedChanged += StartHTTPCheckBox_CheckedChanged; + // + // label15 + // + label15.AutoSize = true; + label15.Location = new Point(26, 285); + label15.Name = "label15"; + label15.Size = new Size(224, 15); + label15.TabIndex = 22; + label15.Text = "(http service only allow trusted IP to visit)"; + // + // HTTPTrustedIPAddressTextBox + // + HTTPTrustedIPAddressTextBox.Location = new Point(207, 248); + HTTPTrustedIPAddressTextBox.Margin = new Padding(3, 4, 3, 4); + HTTPTrustedIPAddressTextBox.MaxLength = 30; + HTTPTrustedIPAddressTextBox.Name = "HTTPTrustedIPAddressTextBox"; + HTTPTrustedIPAddressTextBox.Size = new Size(198, 23); + HTTPTrustedIPAddressTextBox.TabIndex = 21; + HTTPTrustedIPAddressTextBox.TextChanged += HTTPTrustedIPAddressTextBox_TextChanged; + // + // label14 + // + label14.AutoSize = true; + label14.Location = new Point(26, 251); + label14.Name = "label14"; + label14.Size = new Size(137, 15); + label14.TabIndex = 20; + label14.Text = "HTTP Trusted IP Address:"; + // + // HTTPIPAddressTextBox + // + HTTPIPAddressTextBox.Location = new Point(151, 212); + HTTPIPAddressTextBox.Margin = new Padding(3, 4, 3, 4); + HTTPIPAddressTextBox.MaxLength = 30; + HTTPIPAddressTextBox.Name = "HTTPIPAddressTextBox"; + HTTPIPAddressTextBox.Size = new Size(198, 23); + HTTPIPAddressTextBox.TabIndex = 19; + HTTPIPAddressTextBox.TextChanged += HTTPIPAddressTextBox_TextChanged; + // + // label13 + // + label13.AutoSize = true; + label13.Location = new Point(26, 214); + label13.Name = "label13"; + label13.Size = new Size(96, 15); + label13.TabIndex = 18; + label13.Text = "HTTP IP Address:"; + // + // MaxUserTextBox + // + MaxUserTextBox.Location = new Point(104, 109); + MaxUserTextBox.Margin = new Padding(3, 4, 3, 4); + MaxUserTextBox.MaxLength = 5; + MaxUserTextBox.Name = "MaxUserTextBox"; + MaxUserTextBox.Size = new Size(48, 23); + MaxUserTextBox.TabIndex = 17; + MaxUserTextBox.TextChanged += CheckUShort; + // + // label5 + // + label5.AutoSize = true; + label5.Location = new Point(33, 113); + label5.Name = "label5"; + label5.Size = new Size(59, 15); + label5.TabIndex = 16; + label5.Text = "Max User:"; + // + // TimeOutTextBox + // + TimeOutTextBox.Location = new Point(104, 79); + TimeOutTextBox.Margin = new Padding(3, 4, 3, 4); + TimeOutTextBox.MaxLength = 5; + TimeOutTextBox.Name = "TimeOutTextBox"; + TimeOutTextBox.Size = new Size(108, 23); + TimeOutTextBox.TabIndex = 15; + TimeOutTextBox.TextChanged += CheckUShort; + // + // label4 + // + label4.AutoSize = true; + label4.Location = new Point(39, 83); + label4.Name = "label4"; + label4.Size = new Size(56, 15); + label4.TabIndex = 14; + label4.Text = "TimeOut:"; + // + // PortTextBox + // + PortTextBox.Location = new Point(104, 49); + PortTextBox.Margin = new Padding(3, 4, 3, 4); + PortTextBox.MaxLength = 5; + PortTextBox.Name = "PortTextBox"; + PortTextBox.Size = new Size(48, 23); + PortTextBox.TabIndex = 13; + PortTextBox.TextChanged += CheckUShort; + // + // label3 + // + label3.AutoSize = true; + label3.Location = new Point(63, 53); + label3.Name = "label3"; + label3.Size = new Size(32, 15); + label3.TabIndex = 12; + label3.Text = "Port:"; + // + // IPAddressTextBox + // + IPAddressTextBox.Location = new Point(104, 19); + IPAddressTextBox.Margin = new Padding(3, 4, 3, 4); + IPAddressTextBox.MaxLength = 15; + IPAddressTextBox.Name = "IPAddressTextBox"; + IPAddressTextBox.Size = new Size(108, 23); + IPAddressTextBox.TabIndex = 11; + IPAddressTextBox.TextChanged += IPAddressCheck; + // + // label2 + // + label2.AutoSize = true; + label2.Location = new Point(26, 23); + label2.Name = "label2"; + label2.Size = new Size(65, 15); + label2.TabIndex = 10; + label2.Text = "IP Address:"; + // + // tabPage3 + // + tabPage3.Controls.Add(label9); + tabPage3.Controls.Add(label8); + tabPage3.Controls.Add(Resolution_textbox); + tabPage3.Controls.Add(AllowArcherCheckBox); + tabPage3.Controls.Add(AllowAssassinCheckBox); + tabPage3.Controls.Add(StartGameCheckBox); + tabPage3.Controls.Add(DCharacterCheckBox); + tabPage3.Controls.Add(NCharacterCheckBox); + tabPage3.Controls.Add(LoginCheckBox); + tabPage3.Controls.Add(PasswordCheckBox); + tabPage3.Controls.Add(AccountCheckBox); + tabPage3.Location = new Point(4, 24); + tabPage3.Margin = new Padding(3, 4, 3, 4); + tabPage3.Name = "tabPage3"; + tabPage3.Padding = new Padding(3, 4, 3, 4); + tabPage3.Size = new Size(476, 348); + tabPage3.TabIndex = 2; + tabPage3.Text = "Permissions"; + tabPage3.UseVisualStyleBackColor = true; + tabPage3.Click += tabPage3_Click; + // + // label9 + // + label9.AutoSize = true; + label9.Location = new Point(25, 268); + label9.Name = "label9"; + label9.Size = new Size(135, 15); + label9.TabIndex = 16; + label9.Text = "Max Resolution Allowed"; + // + // label8 + // + label8.AutoSize = true; + label8.Location = new Point(0, 0); + label8.Name = "label8"; + label8.Size = new Size(38, 15); + label8.TabIndex = 15; + label8.Text = "label8"; + // + // Resolution_textbox + // + Resolution_textbox.Location = new Point(171, 266); + Resolution_textbox.Margin = new Padding(3, 4, 3, 4); + Resolution_textbox.Name = "Resolution_textbox"; + Resolution_textbox.Size = new Size(93, 23); + Resolution_textbox.TabIndex = 14; + Resolution_textbox.TextChanged += Resolution_textbox_TextChanged; + // + // AllowArcherCheckBox + // + AllowArcherCheckBox.AutoSize = true; + AllowArcherCheckBox.Location = new Point(28, 227); + AllowArcherCheckBox.Margin = new Padding(3, 4, 3, 4); + AllowArcherCheckBox.Name = "AllowArcherCheckBox"; + AllowArcherCheckBox.Size = new Size(206, 19); + AllowArcherCheckBox.TabIndex = 13; + AllowArcherCheckBox.Text = "Allow Creation of the Archer Class"; + AllowArcherCheckBox.UseVisualStyleBackColor = true; + // + // AllowAssassinCheckBox + // + AllowAssassinCheckBox.AutoSize = true; + AllowAssassinCheckBox.Location = new Point(28, 200); + AllowAssassinCheckBox.Margin = new Padding(3, 4, 3, 4); + AllowAssassinCheckBox.Name = "AllowAssassinCheckBox"; + AllowAssassinCheckBox.Size = new Size(215, 19); + AllowAssassinCheckBox.TabIndex = 12; + AllowAssassinCheckBox.Text = "Allow Creation of the Assassin Class"; + AllowAssassinCheckBox.UseVisualStyleBackColor = true; + // + // StartGameCheckBox + // + StartGameCheckBox.AutoSize = true; + StartGameCheckBox.Location = new Point(28, 156); + StartGameCheckBox.Margin = new Padding(3, 4, 3, 4); + StartGameCheckBox.Name = "StartGameCheckBox"; + StartGameCheckBox.Size = new Size(245, 19); + StartGameCheckBox.TabIndex = 11; + StartGameCheckBox.Text = "Allow Characters to Login to Game World"; + StartGameCheckBox.UseVisualStyleBackColor = true; + // + // DCharacterCheckBox + // + DCharacterCheckBox.AutoSize = true; + DCharacterCheckBox.Location = new Point(28, 129); + DCharacterCheckBox.Margin = new Padding(3, 4, 3, 4); + DCharacterCheckBox.Name = "DCharacterCheckBox"; + DCharacterCheckBox.Size = new Size(157, 19); + DCharacterCheckBox.TabIndex = 10; + DCharacterCheckBox.Text = "Allow Character Deletion"; + DCharacterCheckBox.UseVisualStyleBackColor = true; + // + // NCharacterCheckBox + // + NCharacterCheckBox.AutoSize = true; + NCharacterCheckBox.Location = new Point(28, 103); + NCharacterCheckBox.Margin = new Padding(3, 4, 3, 4); + NCharacterCheckBox.Name = "NCharacterCheckBox"; + NCharacterCheckBox.Size = new Size(185, 19); + NCharacterCheckBox.TabIndex = 9; + NCharacterCheckBox.Text = "Allow New Character Creation"; + NCharacterCheckBox.UseVisualStyleBackColor = true; + // + // LoginCheckBox + // + LoginCheckBox.AutoSize = true; + LoginCheckBox.Location = new Point(28, 76); + LoginCheckBox.Margin = new Padding(3, 4, 3, 4); + LoginCheckBox.Name = "LoginCheckBox"; + LoginCheckBox.Size = new Size(157, 19); + LoginCheckBox.TabIndex = 8; + LoginCheckBox.Text = "Allow Accounts To Login"; + LoginCheckBox.UseVisualStyleBackColor = true; + // + // PasswordCheckBox + // + PasswordCheckBox.AutoSize = true; + PasswordCheckBox.Location = new Point(28, 50); + PasswordCheckBox.Margin = new Padding(3, 4, 3, 4); + PasswordCheckBox.Name = "PasswordCheckBox"; + PasswordCheckBox.Size = new Size(228, 19); + PasswordCheckBox.TabIndex = 7; + PasswordCheckBox.Text = "Allow Users To Change Their Password"; + PasswordCheckBox.UseVisualStyleBackColor = true; + // + // AccountCheckBox + // + AccountCheckBox.AutoSize = true; + AccountCheckBox.Location = new Point(28, 23); + AccountCheckBox.Margin = new Padding(3, 4, 3, 4); + AccountCheckBox.Name = "AccountCheckBox"; + AccountCheckBox.Size = new Size(179, 19); + AccountCheckBox.TabIndex = 6; + AccountCheckBox.Text = "Allow New Account Creation"; + AccountCheckBox.UseVisualStyleBackColor = true; + // + // tabPage4 + // + tabPage4.Controls.Add(label12); + tabPage4.Controls.Add(SaveDelayTextBox); + tabPage4.Controls.Add(label6); + tabPage4.Location = new Point(4, 24); + tabPage4.Margin = new Padding(3, 4, 3, 4); + tabPage4.Name = "tabPage4"; + tabPage4.Padding = new Padding(3, 4, 3, 4); + tabPage4.Size = new Size(476, 348); + tabPage4.TabIndex = 3; + tabPage4.Text = "Database"; + tabPage4.UseVisualStyleBackColor = true; + // + // label12 + // + label12.AutoSize = true; + label12.Location = new Point(219, 23); + label12.Name = "label12"; + label12.Size = new Size(50, 15); + label12.TabIndex = 26; + label12.Text = "minutes"; + // + // SaveDelayTextBox + // + SaveDelayTextBox.Location = new Point(104, 19); + SaveDelayTextBox.Margin = new Padding(3, 4, 3, 4); + SaveDelayTextBox.MaxLength = 5; + SaveDelayTextBox.Name = "SaveDelayTextBox"; + SaveDelayTextBox.Size = new Size(108, 23); + SaveDelayTextBox.TabIndex = 25; + SaveDelayTextBox.TextChanged += CheckUShort; + // + // label6 + // + label6.AutoSize = true; + label6.Location = new Point(21, 23); + label6.Name = "label6"; + label6.Size = new Size(66, 15); + label6.TabIndex = 24; + label6.Text = "Save Delay:"; + // + // tabPage5 + // + tabPage5.Controls.Add(label16); + tabPage5.Controls.Add(lineMessageTimeTextBox); + tabPage5.Controls.Add(label17); + tabPage5.Controls.Add(gameMasterEffect_CheckBox); + tabPage5.Controls.Add(SafeZoneHealingCheckBox); + tabPage5.Controls.Add(SafeZoneBorderCheckBox); + tabPage5.Location = new Point(4, 24); + tabPage5.Margin = new Padding(3, 4, 3, 4); + tabPage5.Name = "tabPage5"; + tabPage5.Padding = new Padding(3, 4, 3, 4); + tabPage5.Size = new Size(476, 348); + tabPage5.TabIndex = 4; + tabPage5.Text = "Optional"; + tabPage5.UseVisualStyleBackColor = true; + // + // label16 + // + label16.AutoSize = true; + label16.Location = new Point(229, 105); + label16.Name = "label16"; + label16.Size = new Size(50, 15); + label16.TabIndex = 29; + label16.Text = "minutes"; + // + // lineMessageTimeTextBox + // + lineMessageTimeTextBox.Location = new Point(183, 103); + lineMessageTimeTextBox.Margin = new Padding(3, 4, 3, 4); + lineMessageTimeTextBox.MaxLength = 5; + lineMessageTimeTextBox.Name = "lineMessageTimeTextBox"; + lineMessageTimeTextBox.Size = new Size(41, 23); + lineMessageTimeTextBox.TabIndex = 28; + lineMessageTimeTextBox.Text = "10"; + // + // label17 + // + label17.AutoSize = true; + label17.Location = new Point(25, 105); + label17.Name = "label17"; + label17.Size = new Size(142, 15); + label17.TabIndex = 27; + label17.Text = "Line Message Frequency :"; + // + // gameMasterEffect_CheckBox + // + gameMasterEffect_CheckBox.AutoSize = true; + gameMasterEffect_CheckBox.Location = new Point(28, 76); + gameMasterEffect_CheckBox.Margin = new Padding(3, 4, 3, 4); + gameMasterEffect_CheckBox.Name = "gameMasterEffect_CheckBox"; + gameMasterEffect_CheckBox.Size = new Size(129, 19); + gameMasterEffect_CheckBox.TabIndex = 2; + gameMasterEffect_CheckBox.Text = "Game Master Effect"; + gameMasterEffect_CheckBox.UseVisualStyleBackColor = true; + // + // SafeZoneHealingCheckBox + // + SafeZoneHealingCheckBox.AutoSize = true; + SafeZoneHealingCheckBox.Location = new Point(28, 50); + SafeZoneHealingCheckBox.Margin = new Padding(3, 4, 3, 4); + SafeZoneHealingCheckBox.Name = "SafeZoneHealingCheckBox"; + SafeZoneHealingCheckBox.Size = new Size(197, 19); + SafeZoneHealingCheckBox.TabIndex = 1; + SafeZoneHealingCheckBox.Text = "Enable auto-healing in SafeZone"; + SafeZoneHealingCheckBox.UseVisualStyleBackColor = true; + SafeZoneHealingCheckBox.CheckedChanged += SafeZoneHealingCheckBox_CheckedChanged; + // + // SafeZoneBorderCheckBox + // + SafeZoneBorderCheckBox.AutoSize = true; + SafeZoneBorderCheckBox.Location = new Point(28, 23); + SafeZoneBorderCheckBox.Margin = new Padding(3, 4, 3, 4); + SafeZoneBorderCheckBox.Name = "SafeZoneBorderCheckBox"; + SafeZoneBorderCheckBox.Size = new Size(150, 19); + SafeZoneBorderCheckBox.TabIndex = 0; + SafeZoneBorderCheckBox.Text = "Show SafeZone Borders"; + SafeZoneBorderCheckBox.UseVisualStyleBackColor = true; + SafeZoneBorderCheckBox.CheckedChanged += SafeZoneBorderCheckBox_CheckedChanged; + // + // VPathDialog + // + VPathDialog.FileName = "Mir1.Exe"; + VPathDialog.Filter = "Executable Files (*.exe)|*.exe"; + VPathDialog.Multiselect = true; + // + // ConfigForm + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(512, 430); + Controls.Add(SaveButton); + Controls.Add(configTabs); + Icon = (Icon)resources.GetObject("$this.Icon"); + Margin = new Padding(3, 4, 3, 4); + Name = "ConfigForm"; + Text = "Server Config Form"; + FormClosed += ConfigForm_FormClosed; + configTabs.ResumeLayout(false); + tabPage1.ResumeLayout(false); + tabPage1.PerformLayout(); + groupBox1.ResumeLayout(false); + groupBox1.PerformLayout(); + tabPage2.ResumeLayout(false); + tabPage2.PerformLayout(); + tabPage3.ResumeLayout(false); + tabPage3.PerformLayout(); + tabPage4.ResumeLayout(false); + tabPage4.PerformLayout(); + tabPage5.ResumeLayout(false); + tabPage5.PerformLayout(); + ResumeLayout(false); + } + + #endregion + + private System.Windows.Forms.Button SaveButton; + private System.Windows.Forms.TabControl configTabs; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.TextBox RelogDelayTextBox; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.CheckBox VersionCheckBox; + private System.Windows.Forms.Button VPathBrowseButton; + private System.Windows.Forms.TextBox VPathTextBox; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TabPage tabPage2; + private System.Windows.Forms.TextBox MaxUserTextBox; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.TextBox TimeOutTextBox; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.TextBox PortTextBox; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TextBox IPAddressTextBox; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.OpenFileDialog VPathDialog; + private System.Windows.Forms.TabPage tabPage3; + private System.Windows.Forms.CheckBox StartGameCheckBox; + private System.Windows.Forms.CheckBox DCharacterCheckBox; + private System.Windows.Forms.CheckBox NCharacterCheckBox; + private System.Windows.Forms.CheckBox LoginCheckBox; + private System.Windows.Forms.CheckBox PasswordCheckBox; + private System.Windows.Forms.CheckBox AccountCheckBox; + private System.Windows.Forms.TabPage tabPage4; + private System.Windows.Forms.TextBox SaveDelayTextBox; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.TabPage tabPage5; + private System.Windows.Forms.CheckBox SafeZoneBorderCheckBox; + private System.Windows.Forms.CheckBox SafeZoneHealingCheckBox; + private System.Windows.Forms.CheckBox AllowArcherCheckBox; + private System.Windows.Forms.CheckBox AllowAssassinCheckBox; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.TextBox Resolution_textbox; + private System.Windows.Forms.Label ServerVersionLabel; + private System.Windows.Forms.Label DBVersionLabel; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.CheckBox gameMasterEffect_CheckBox; + private System.Windows.Forms.TextBox HTTPIPAddressTextBox; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.TextBox HTTPTrustedIPAddressTextBox; + private System.Windows.Forms.Label label14; + private System.Windows.Forms.Label label15; + private System.Windows.Forms.CheckBox StartHTTPCheckBox; + private System.Windows.Forms.Label label16; + private System.Windows.Forms.TextBox lineMessageTimeTextBox; + private System.Windows.Forms.Label label17; + } +} \ No newline at end of file diff --git a/Server.MirForms/ConfigForm.cs b/Server.MirForms/ConfigForm.cs new file mode 100644 index 0000000..152d7c6 --- /dev/null +++ b/Server.MirForms/ConfigForm.cs @@ -0,0 +1,195 @@ +using System.Net; +using System.Text.RegularExpressions; + +namespace Server +{ + public partial class ConfigForm : Form + { + public ConfigForm() + { + InitializeComponent(); + + VPathTextBox.Text = Settings.VersionPath; + VersionCheckBox.Checked = Settings.CheckVersion; + RelogDelayTextBox.Text = Settings.RelogDelay.ToString(); + + IPAddressTextBox.Text = Settings.IPAddress; + PortTextBox.Text = Settings.Port.ToString(); + TimeOutTextBox.Text = Settings.TimeOut.ToString(); + MaxUserTextBox.Text = Settings.MaxUser.ToString(); + + StartHTTPCheckBox.Checked = Settings.StartHTTPService; + HTTPIPAddressTextBox.Text = Settings.HTTPIPAddress; + HTTPTrustedIPAddressTextBox.Text = Settings.HTTPTrustedIPAddress; + + AccountCheckBox.Checked = Settings.AllowNewAccount; + PasswordCheckBox.Checked = Settings.AllowChangePassword; + LoginCheckBox.Checked = Settings.AllowLogin; + NCharacterCheckBox.Checked = Settings.AllowNewCharacter; + DCharacterCheckBox.Checked = Settings.AllowDeleteCharacter; + StartGameCheckBox.Checked = Settings.AllowStartGame; + AllowAssassinCheckBox.Checked = Settings.AllowCreateAssassin; + AllowArcherCheckBox.Checked = Settings.AllowCreateArcher; + Resolution_textbox.Text = Settings.AllowedResolution.ToString(); + + SafeZoneBorderCheckBox.Checked = Settings.SafeZoneBorder; + SafeZoneHealingCheckBox.Checked = Settings.SafeZoneHealing; + gameMasterEffect_CheckBox.Checked = Settings.GameMasterEffect; + lineMessageTimeTextBox.Text = Settings.LineMessageTimer.ToString(); + + SaveDelayTextBox.Text = Settings.SaveDelay.ToString(); + + ServerVersionLabel.Text = Application.ProductVersion; + DBVersionLabel.Text = MirEnvir.Envir.LoadVersion.ToString() + ((MirEnvir.Envir.LoadVersion < MirEnvir.Envir.Version) ? " (Update needed)" : ""); + } + + private void ConfigForm_FormClosed(object sender, FormClosedEventArgs e) + { + Settings.Save(); + Settings.LoadVersion(); + } + + private void SaveButton_Click(object sender, EventArgs e) + { + Save(); + Close(); + } + + public void Save() + { + Settings.VersionPath = VPathTextBox.Text; + Settings.CheckVersion = VersionCheckBox.Checked; + + IPAddress tempIP; + if (IPAddress.TryParse(IPAddressTextBox.Text, out tempIP)) + Settings.IPAddress = tempIP.ToString(); + + Settings.StartHTTPService = StartHTTPCheckBox.Checked; + if (tryParseHttp()) + Settings.HTTPIPAddress = HTTPIPAddressTextBox.Text.ToString(); + + if (tryParseTrustedHttp()) + Settings.HTTPTrustedIPAddress = HTTPTrustedIPAddressTextBox.Text.ToString(); + + ushort tempshort; + int tempint; + + if (ushort.TryParse(PortTextBox.Text, out tempshort)) + Settings.Port = tempshort; + + if (ushort.TryParse(TimeOutTextBox.Text, out tempshort)) + Settings.TimeOut = tempshort; + + if (ushort.TryParse(MaxUserTextBox.Text, out tempshort)) + Settings.MaxUser = tempshort; + + if (ushort.TryParse(RelogDelayTextBox.Text, out tempshort)) + Settings.RelogDelay = tempshort; + + if (ushort.TryParse(SaveDelayTextBox.Text, out tempshort)) + Settings.SaveDelay = tempshort; + + Settings.AllowNewAccount = AccountCheckBox.Checked; + Settings.AllowChangePassword = PasswordCheckBox.Checked; + Settings.AllowLogin = LoginCheckBox.Checked; + Settings.AllowNewCharacter = NCharacterCheckBox.Checked; + Settings.AllowDeleteCharacter = DCharacterCheckBox.Checked; + Settings.AllowStartGame = StartGameCheckBox.Checked; + Settings.AllowCreateAssassin = AllowAssassinCheckBox.Checked; + Settings.AllowCreateArcher = AllowArcherCheckBox.Checked; + + if (int.TryParse(Resolution_textbox.Text, out tempint)) + Settings.AllowedResolution = tempint; + + Settings.SafeZoneBorder = SafeZoneBorderCheckBox.Checked; + Settings.SafeZoneHealing = SafeZoneHealingCheckBox.Checked; + Settings.GameMasterEffect = gameMasterEffect_CheckBox.Checked; + if (int.TryParse(lineMessageTimeTextBox.Text, out tempint)) + Settings.LineMessageTimer = tempint; + } + + private void IPAddressCheck(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + IPAddress temp; + + ActiveControl.BackColor = !IPAddress.TryParse(ActiveControl.Text, out temp) ? Color.Red : SystemColors.Window; + } + + private void CheckUShort(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + ushort temp; + + ActiveControl.BackColor = !ushort.TryParse(ActiveControl.Text, out temp) ? Color.Red : SystemColors.Window; + } + + private void VPathBrowseButton_Click(object sender, EventArgs e) + { + if (VPathDialog.ShowDialog() == DialogResult.OK) + { + VPathTextBox.Text = string.Join(",", VPathDialog.FileNames); + } + } + + private void Resolution_textbox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + int temp; + + ActiveControl.BackColor = !int.TryParse(ActiveControl.Text, out temp) ? Color.Red : SystemColors.Window; + + } + + private void tabPage3_Click(object sender, EventArgs e) + { + + } + + private void SafeZoneBorderCheckBox_CheckedChanged(object sender, EventArgs e) + { + + } + + private void SafeZoneHealingCheckBox_CheckedChanged(object sender, EventArgs e) + { + + } + + private void HTTPIPAddressTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + ActiveControl.BackColor = !tryParseHttp() ? Color.Red : SystemColors.Window; + } + + + private void HTTPTrustedIPAddressTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + ActiveControl.BackColor = !tryParseTrustedHttp() ? Color.Red : SystemColors.Window; + } + + bool tryParseHttp() + { + if ((HTTPIPAddressTextBox.Text.StartsWith("http://") || HTTPIPAddressTextBox.Text.StartsWith("https://")) && HTTPIPAddressTextBox.Text.EndsWith("/")) + { + return true; + } + return false; + } + + bool tryParseTrustedHttp() + { + string pattern = @"[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"; + return Regex.IsMatch(HTTPTrustedIPAddressTextBox.Text, pattern); + } + + private void StartHTTPCheckBox_CheckedChanged(object sender, EventArgs e) + { + Settings.StartHTTPService = StartHTTPCheckBox.Checked; + } + } +} diff --git a/Server.MirForms/ConfigForm.resx b/Server.MirForms/ConfigForm.resx new file mode 100644 index 0000000..9979152 --- /dev/null +++ b/Server.MirForms/ConfigForm.resx @@ -0,0 +1,1766 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + AAABAAgAICAQAAAABADoAgAAhgAAACAgAAAAABgAqAwAAG4DAAAgIAAAAAAIAKgIAAAWEAAAQEAAAAAA + GAAoMgAAvhgAAEBAEAAAAAQAaAoAAOZKAABAQAAAAAAIACgWAABOVQAAgIAAAAAAGAAoyAAAdmsAAICA + AAAAAAgAKEwAAJ4zAQAoAAAAIAAAAEAAAAABAAQAAAAAAAACAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAA + gAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////ABER + ERAAAAAAAAAAAAAAAAARERERAAAAAAAAAAAAAAAAERERERAAAAAAAAAAAAAAABERERERAAAAAQAAAAAA + AAARERAAAQAAAAEAAAAAAAAAEREREQAAAAABAAAAAAAAABERERERAAAAABAAAAAAAAAREREREQAAAAAQ + AAAQAAAAEREREREAAAAAAAABEAAAAAERERERAAAAAAAxERAAAAAQERERERAAAAABEQAAAAAAAAAREREQ + AAAAAQARERARAAAAEREREAAAAAEBEAERERAAAAAAAAAAAAAQEQARMzERAAAAEREAAAABEBADMzMzEQAA + AAEQAAAAAAEAADMxMxEAAAAAAAAAAAEQEQAzMxEQAAABAAEAAAEREAAAMBMQEAAAAAARAAABEREQADEQ + EQAAAAABEBEBEREQATAREREAAAAQAQAQARERAQABEQERAAAAAAAAEBETEQMRERAREQAAAAAAARARExEQ + AREAAREQAAAAAAEBERMxMQEBAAABEQABAAAAAQERERMREQAAAAEAABAAABABERExERAAAAAAAAAAAAAA + EREREREAAAAAAAAAABAQEQAAAREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABAAAAAAAAAAAA + AAAAEAARAAAAAAAAAAAAAAAAAAABEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABABgAAAAAAAAM + AAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA + AACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAAAA + AAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA + AACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACA + AACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAACAAACAAACAAACAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAA + AACAAACAAACAAACAAACAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAAAAAAAAAACAAACAAACAAACAAACA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACAAAAAAACAAACAAAAAAAAAAACAAACAAICAAICAAICAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAA + AACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAACAAAAAAAAAAICAAICAAICA + AICAAICAAICAAICAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAICAAICAAICAAACAAICAAICAAACAAACAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAACAAACA + AAAAAAAAAICAAICAAICAAICAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAACA + AAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAICAAAAAAACAAICAAACAAAAA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAACAAACAAACA + AACAAACAAACAAAAAAAAAAAAAAICAAACAAACAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAACAAACAAAAAAACAAACAAAAAAACAAACAAACAAACAAACAAACAAAAAAAAAAACAAICAAAAAAACAAACA + AACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAACA + AACAAACAAACAAACAAAAAAACAAAAAAAAAAAAAAACAAACAAACAAAAAAACAAACAAACAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAICAAACAAACAAAAAAICAAACAAACA + AACAAACAAACAAAAAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + AACAAAAAAACAAACAAACAAICAAACAAACAAACAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAACAAACAAACA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAACAAICAAICAAACA + AICAAACAAAAAAACAAAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAACAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAACAAACAAACAAICAAACAAACAAACAAACAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACA + AACAAACAAACAAACAAICAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAAAA + AACAAACAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAA + AACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAACAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE + AAAAAAAAAAAAAAABAAAAAQAAAAD/AAD/AAD/AAAAAP//AP//AAD/AP8AwMDAAP/48ADX6/oA1P9/AP8A + AADiK4oAKiqlAAAAAAAEBAQACAgIAAwMDAAREREAFhYWABwcHAAiIiIAKSkpADMzMwA5OTkAQkJCAE1N + TQBVVVUAYGBgAGZmZgBwcHAAgICAAIyMjACUlJQAmZmZAKSkpACsrKwAtra2AMDAwADMzMwA1NTUANra + 2gDg4OAA7OzsAPj4+AD7+/sA////ADMAAABmAAAAmQAAAMwAAAD/AAAAADMAADMzAABmMwAAmTMAAMwz + AAD/MwAAAGYAADNmAABmZgAAmWYAAMxmAAD/ZgAAAJkAADOZAABmmQAAmZkAAMyZAAD/mQAAAMwAADPM + AABmzAAAmcwAAMzMAAD/zAAAAP8AADP/AABm/wAAmf8AAMz/AAD//wAAAAAzADMAMwBmADMAmQAzAMwA + MwD/ADMAADMzAGYzMwCZMzMAzDMzAP8zMwAAZjMAM2YzAGZmMwCZZjMAzGYzAP9mMwAAmTMAM5kzAGaZ + MwCZmTMAzJkzAP+ZMwAAzDMAM8wzAGbMMwCZzDMAzMwzAP/MMwAA/zMAM/8zAGb/MwCZ/zMAzP8zAP// + MwAAAGYAMwBmAGYAZgCZAGYAzABmAP8AZgAAM2YAMzNmAGYzZgCZM2YAzDNmAP8zZgAAZmYAM2ZmAJlm + ZgDMZmYA/2ZmAACZZgAzmWYAZplmAJmZZgDMmWYA/5lmAADMZgAzzGYAZsxmAJnMZgDMzGYA/8xmAAD/ + ZgAz/2YAZv9mAJn/ZgDM/2YA//9mAAAAmQAzAJkAZgCZAJkAmQDMAJkA/wCZAAAzmQAzM5kAZjOZAJkz + mQDMM5kA/zOZAABmmQAzZpkAZmaZAJlmmQDMZpkA/2aZAACZmQAzmZkAZpmZAMyZmQD/mZkAAcyZADPM + mQBmzJkAmcyZAMzMmQD/zJkAAP+ZADP/mQBm/5kAmf+ZAMz/mQD//5kAAADMADMAzABmAMwAmQDMAMwA + zAD/AMwAADPMADMzzABmM8wAmTPMAMwzzAD/M8wAAGbMADNmzABmZswAmWbMAMxmzAD/ZswAAJnMADOZ + zABmmcwAmZnMAMyZzAD/mcwAAMzMADPMzABmzMwAmczMAP/MzAAA/8wAM//MAGb/zACZ/8wAzP/MAP// + zAAAAP8AMwD/AGYA/wCZAP8AzAD/AP8A/wAAM/8AMzP/AGYz/wCZM/8AzDP/AP8z/wAAZv8AM2b/AGZm + /wCZZv8AzGb/AP9m/wAAmf8AM5n/AGaZ/wCZmf8AzJn/AP+Z/wAAzP8AM8z/AGbM/wCZzP8AzMz/AP/M + /wAA//8AM///AGb//wCZ//8AzP//AJ+fn5+fn58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQn5+fn5+f + n58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBCfn5+fn5+fn58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEJ+f + n5+fn5+fn58QEBAQEBAQnxAQEBAQEBAQEBAQEBAQn5+fn58QEBAQnxAQEBAQEBCfEBAQEBAQEBAQEBAQ + EBCfn5+fn5+fnxAQEBAQEBAQEJ8QEBAQEBAQEBAQEBAQEJ+fn5+fn5+fn58QEBAQEBAQEJ8QEBAQEBAQ + EBAQEBAQn5+fn5+fn5+fnxAQEBAQEBAQnxAQEBAQnxAQEBAQEBCfn5+fn5+fn5+fEBAQEBAQEBAQEBAQ + EJ+fEBAQEBAQEBCfn5+fn5+fn58QEBAQEBAQEBAQrZ+fn58QEBAQEBAQnxCfn5+fn5+fn58QEBAQEBAQ + EJ+fnxAQEBAQEBAQEBAQEBAQn5+fn5+fnxAQEBAQEBAQnxAQn5+fn58Qn58QEBAQEBCfn5+fn5+fEBAQ + EBAQEBCfEJ+fEBCfn5+fn58QEBAQEBAQEBAQEBAQEBAQEBAQnxCfnxAQn5+tra2fn58QEBAQEBCfn5+f + EBAQEBAQEJ+fEJ8QEK2tra2tra2fnxAQEBAQEBCfnxAQEBAQEBAQEBCfEBAQEK2trZ+trZ+fEBAQEBAQ + EBAQEBAQEBAQEBCfnxCfnxAQra2trZ+fnxAQEBAQEJ8QEBCfEBAQEBCfn5+fEBAQEBCtEJ+tnxCfEBAQ + EBAQEBAQn58QEBAQEJ+fn5+fnxAQEK2fnxCfnxAQEBAQEBAQEJ+fEJ+fEJ+fn5+fnxAQn60Qn5+fn5+f + EBAQEBAQnxAQnxAQnxAQn5+fn58QnxAQEJ+fnxCfn58QEBAQEBAQEBAQEBCfEJ+fn62fnxCtn5+fn58Q + n5+fnxAQEBAQEBAQEBAQn58Qn5+frZ+fnxAQn5+fEBAQn5+fnxAQEBAQEBAQEBCfEJ+fn5+trZ+tnxCf + EJ8QEBAQEJ+fnxAQEJ8QEBAQEBAQnxCfn5+fn5+tn5+fnxAQEBAQEBCfEBAQEJ8QEBAQEJ8QEJ+fn5+f + rZ+fn58QEBAQEBAQEBAQEBAQEBAQEBAQEBCfn5+fn5+fn5+fEBAQEBAQEBAQEBAQEBAQEJ8QnxCfnxAQ + EBAQn5+fEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEJ8QEJ8QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBCfEBAQn58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEJ+fEJ8QEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAABAAAAAgAAAAAEAGAAAAAAAADAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAA + AAAAAIAAAIAAAAAAAAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAA + gIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAAIAA + AIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAgIAA + gIAAgIAAgIAAAIAAAIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAAAAAAAAAIAAAIAAgIAAgIAAAIAAAIAAAAAA + AAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAAAAAAAAAIAAAIAAgIAA + gIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAA + AIAAgIAAgIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAA + AAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAIAAAIAAgIAAgIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAgIAAgIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAgIAA + gIAAgIAAgIAAAIAAAIAAgIAAgIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAgIAAgIAAgIAAgIAAAIAAAIAAgIAAgIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAgIAA + gIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAAAA + AAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAABAAAAAgAAAAAEABAAAAAAAAAgAAAAA + AAAAAAAAEAAAABAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAwMDAAICAgAAAAP8AAP8AAAD/ + /wD/AAAA/wD/AP//AAD///8AEREREREREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARERERERERAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAABERERERERERAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAERERERER + EREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAREREREREREREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABER + EREREREREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEREREREREREREQAAAAAAAAARAAAAAAAAAAAAAAAA + AAARERERERERERERAAAAAAAAABEAAAAAAAAAAAAAAAAAABERERERAAAAABEAAAAAAAAAEQAAAAAAAAAA + AAAAAAAAEREREREAAAAAEQAAAAAAAAARAAAAAAAAAAAAAAAAAAAREREREREREQAAAAAAAAAAABEAAAAA + AAAAAAAAAAAAABERERERERERAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAEREREREREREREQAAAAAAAAAA + EQAAAAAAAAAAAAAAAAARERERERERERERAAAAAAAAAAARAAAAAAAAAAAAAAAAABEREREREREREREAAAAA + AAAAABEAAAAAABEAAAAAAAAAEREREREREREREQAAAAAAAAAAEQAAAAAAEQAAAAAAAAARERERERERERER + AAAAAAAAAAAAAAAAABERAAAAAAAAABEREREREREREREAAAAAAAAAAAAAAAAAEREAAAAAAAAAABERERER + EREREQAAAAAAAAAAAAAzEREREQAAAAAAAAAAERERERERERERAAAAAAAAAAAAADMRERERAAAAAAAAABEA + ERERERERERERAAAAAAAAAAAREREAAAAAAAAAAAAAEQAREREREREREREAAAAAAAAAABEREQAAAAAAAAAA + AAAAAAAAEREREREREQAAAAAAAAAAEQAAEREREREAEREAAAAAAAARERERERERAAAAAAAAAAARAAARERER + EQAREQAAAAAAABEREREREREAAAAAAAAAABEAEREAABEREREREQAAAAAAEREREREREQAAAAAAAAAAEQAR + EQAAERERERERAAAAAAAAAAAAAAAAAAAAAAAAABEAEREAABERMzMzERERAAAAAAAAAAAAAAAAAAAAAAAA + EQAREQAAEREzMzMREREAAAAAAAARERERAAAAAAAAABERABEAADMzMzMzMzMREQAAAAAAABEREREAAAAA + AAAAEREAEQAAMzMzMzMzMxERAAAAAAAAABERAAAAAAAAAAAAABEAAAAAMzMzETMzEREAAAAAAAAAEREA + AAAAAAAAAAAAEQAAAAAzMzMRMzMREQAAAAAAAAAAAAAAAAAAAAAAEREAEREAADMzMzMREREAAAAAAAAA + AAAAAAAAAAAAAAAREQAREQAAMzMzMxEREQAAAAAAABEAAAARAAAAAAARERERAAAAAAAzABEzEQARAAAA + AAAAEQAAABEAAAAAABEREREAAAAAADMAETMRABEAAAAAAAAAAAAREQAAAAAAERERERERAAAAMxERABER + AAAAAAAAAAAAABERAAAAAAAREREREREAAAAzEREAEREAAAAAAAAAAAAREQAREQAREREREREAABEzABER + EREREQAAAAAAAAAAABERABERABEREREREQAAETMAERERERERAAAAAAAAEQAAEQAAEQAAEREREREAEQAA + ABEREQAREREAAAAAAAARAAARAAARAAAREREREQARAAAAERERABEREQAAAAAAAAAAAAAAABEAERERMxER + ADMREREREQARERERAAAAAAAAAAAAAAAAEQAREREzEREAMxERERERABEREREAAAAAAAAAAAAAABERABER + ETMREREAABEREQAAABEREREAAAAAAAAAAAAAEREAERERMxEREQAAERERAAAAEREREQAAAAAAAAAAAAAR + ABEREREzMxEzEQARABEAAAAAABEREQAAAAAAAAAAABEAERERETMzETMRABEAEQAAAAAAERERAAAAEQAA + AAAAAAARABERERERETMRERERAAAAAAAAABEAAAARAAAAAAAAABEAERERERERMxEREREAAAAAAAAAEQAA + AAARAAAAAAARAAARERERETMRERERAAAAAAAAAAAAAAAAABEAAAAAABEAABERERERMxEREREAAAAAAAAA + AAAAAAAAAAAAAAAAAAARERERERERERERAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEREREREREREREAAAAA + AAAAAAAAAAAAAAAAEQARABERAAAAAAAREREAAAAAAAAAAAAAAAAAAAAAAAARABEAEREAAAAAABEREQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + EQAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAAAREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + EQAAABERAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAREQARAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAABERABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgA + AABAAAAAgAAAAAEACAAAAAAAABAAAAAAAAAAAAAAAAEAAAABAAAAAP8AAP8AAP8AAAAA//8A//8AAP8A + /wDAwMAA//jwANfr+gDU/38A/wAAAOIrigAqKqUAAAAAAAQEBAAICAgADAwMABEREQAWFhYAHBwcACIi + IgApKSkAMzMzADk5OQBCQkIATU1NAFVVVQBgYGAAZmZmAHBwcACAgIAAjIyMAJSUlACZmZkApKSkAKys + rAC2trYAwMDAAMzMzADU1NQA2traAODg4ADs7OwA+Pj4APv7+wD///8AMwAAAGYAAACZAAAAzAAAAP8A + AAAAMwAAMzMAAGYzAACZMwAAzDMAAP8zAAAAZgAAM2YAAGZmAACZZgAAzGYAAP9mAAAAmQAAM5kAAGaZ + AACZmQAAzJkAAP+ZAAAAzAAAM8wAAGbMAACZzAAAzMwAAP/MAAAA/wAAM/8AAGb/AACZ/wAAzP8AAP// + AAAAADMAMwAzAGYAMwCZADMAzAAzAP8AMwAAMzMAZjMzAJkzMwDMMzMA/zMzAABmMwAzZjMAZmYzAJlm + MwDMZjMA/2YzAACZMwAzmTMAZpkzAJmZMwDMmTMA/5kzAADMMwAzzDMAZswzAJnMMwDMzDMA/8wzAAD/ + MwAz/zMAZv8zAJn/MwDM/zMA//8zAAAAZgAzAGYAZgBmAJkAZgDMAGYA/wBmAAAzZgAzM2YAZjNmAJkz + ZgDMM2YA/zNmAABmZgAzZmYAmWZmAMxmZgD/ZmYAAJlmADOZZgBmmWYAmZlmAMyZZgD/mWYAAMxmADPM + ZgBmzGYAmcxmAMzMZgD/zGYAAP9mADP/ZgBm/2YAmf9mAMz/ZgD//2YAAACZADMAmQBmAJkAmQCZAMwA + mQD/AJkAADOZADMzmQBmM5kAmTOZAMwzmQD/M5kAAGaZADNmmQBmZpkAmWaZAMxmmQD/ZpkAAJmZADOZ + mQBmmZkAzJmZAP+ZmQABzJkAM8yZAGbMmQCZzJkAzMyZAP/MmQAA/5kAM/+ZAGb/mQCZ/5kAzP+ZAP// + mQAAAMwAMwDMAGYAzACZAMwAzADMAP8AzAAAM8wAMzPMAGYzzACZM8wAzDPMAP8zzAAAZswAM2bMAGZm + zACZZswAzGbMAP9mzAAAmcwAM5nMAGaZzACZmcwAzJnMAP+ZzAAAzMwAM8zMAGbMzACZzMwA/8zMAAD/ + zAAz/8wAZv/MAJn/zADM/8wA///MAAAA/wAzAP8AZgD/AJkA/wDMAP8A/wD/AAAz/wAzM/8AZjP/AJkz + /wDMM/8A/zP/AABm/wAzZv8AZmb/AJlm/wDMZv8A/2b/AACZ/wAzmf8AZpn/AJmZ/wDMmf8A/5n/AADM + /wAzzP8AZsz/AJnM/wDMzP8A/8z/AAD//wAz//8AZv//AJn//wDM//8An5+fn5+fn5+fn5+fn58dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+f + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+f + n5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+f + n5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+f + n5+fn5+fn5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fn5+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn5+fn5+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHZ+fHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fHR0dHR0dHR2fnx0dHR0dHR0dHR0dHR0dn58dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fnx0dHR0dHR0dn58dHR0dHR0dHR0dHR0dHZ+fHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR2fnx0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0d + n58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0d + HR0dHR0dn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0d + HR0dHR0dHR0dHZ+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fn5+fn5+fnx0d + HR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dHR2fnx0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn5+fn5+f + n58dHR0dHR0dHR0dHR0dHR0dn58dHR0dHR0dHR0dn58dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+f + n5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+f + n5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fnx0dHR0dHR0dHR0dHR0dHR2fn5+f + n5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHa2tn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0d + n5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR2trZ+fn5+fn5+fHR0dHR0dHR0dHR0d + HR2fnx0dn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHZ+fn5+fnx0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHZ+fn5+fn5+fn5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR2fn5+fn58dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dn58dHR0dn5+fn5+f + n5+fnx0dn5+fnx0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHZ+fHR0dHZ+f + n5+fn5+fn58dHZ+fn58dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR2fnx0d + n5+fnx0dHR2fn5+fn5+fn5+fn58dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0d + n58dHZ+fn58dHR0dn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fnx0dn5+fnx0dHR2fn5+fra2tra2tn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHZ+fn58dHR0dn5+fn62tra2trZ+fn5+fnx0dHR0dHR0dHR0dHZ+fn5+fn5+fHR0dHR0d + HR0dHR0dHR2fn5+fHR2fnx0dHR2tra2tra2tra2tra2trZ+fn58dHR0dHR0dHR0dHR2fn5+fn5+fnx0d + HR0dHR0dHR0dHR0dn5+fnx0dn58dHR0dra2tra2tra2tra2tra2fn5+fHR0dHR0dHR0dHR0dHR2fn5+f + HR0dHR0dHR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dra2tra2tn5+tra2tn5+fnx0dHR0dHR0dHR0dHR0d + n5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dn58dHR0dHR0dHa2tra2trZ+fra2trZ+fn58dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fnx0dn5+fnx0dHR2tra2tra2trZ+fn5+fnx0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn58dHZ+fn58dHR0dra2tra2tra2fn5+fn58dHR0d + HR0dHR0dHR2fnx0dHR0dHZ+fHR0dHR0dHR0dHZ+fn5+fn5+fHR0dHR0dHR0dHa2tHR2fn62tn58dHZ+f + HR0dHR0dHR0dHR0dn58dHR0dHR2fnx0dHR0dHR0dHR2fn5+fn5+fnx0dHR0dHR0dHR2trR0dn5+trZ+f + HR2fnx0dHR0dHR0dHR0dHR0dHR0dHZ+fn58dHR0dHR0dHR0dn5+fn5+fn5+fn5+fHR0dHR0dra2fn5+f + HR2fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR0dHR0dHR0dHZ+fn5+fn5+fn5+fnx0dHR0dHa2t + n5+fnx0dn5+fnx0dHR0dHR0dHR0dHR0dHR0dHZ+fn58dHZ+fn58dHZ+fn5+fn5+fn5+fnx0dHR2fn62t + HR2fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR2fn5+fHR2fn5+fn5+fn5+fn58dHR0d + n5+trR0dn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dn58dHR0dn58dHR0dn58dHR0dn5+fn5+fn5+fnx0d + n58dHR0dHR2fn5+fn58dHZ+fn5+fnx0dHR0dHR0dHR0dHZ+fHR0dHZ+fHR0dHZ+fHR0dHZ+fn5+fn5+f + n58dHZ+fHR0dHR0dn5+fn5+fHR2fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fnx0dn5+fn5+f + ra2fn5+fHR2trZ+fn5+fn5+fn58dHZ+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn58dHZ+f + n5+fn62tn5+fnx0dra2fn5+fn5+fn5+fHR2fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+f + HR2fn5+fn5+trZ+fn5+fnx0dHR2fn5+fn58dHR0dHR2fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0d + n5+fnx0dn5+fn5+fra2fn5+fn58dHR0dn5+fn5+fHR0dHR0dn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0d + HR0dHZ+fHR2fn5+fn5+fn62tra2fn62tn58dHZ+fHR2fnx0dHR0dHR0dHR2fn5+fn58dHR0dHR0dHR0d + HR0dHR0dHR2fnx0dn5+fn5+fn5+tra2tn5+trZ+fHR2fnx0dn58dHR0dHR0dHR0dn5+fn5+fHR0dHR0d + n58dHR0dHR0dHR0dHR0dHZ+fHR2fn5+fn5+fn5+fn5+trZ+fn5+fn5+fHR0dHR0dHR0dHR0dHR2fnx0d + HR0dHZ+fHR0dHR0dHR0dHR0dHR2fnx0dn5+fn5+fn5+fn5+fra2fn5+fn5+fnx0dHR0dHR0dHR0dHR0d + n58dHR0dHR0dHZ+fHR0dHR0dHR0dHZ+fHR0dHZ+fn5+fn5+fn5+trZ+fn5+fn5+fHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dHR2fnx0dHR2fn5+fn5+fn5+fra2fn5+fn5+fnx0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fn5+fn5+fnx0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn58dHZ+fHR2fn5+fHR0dHR0dHR0dHZ+fn5+fnx0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fHR2fnx0dn5+fnx0dHR0dHR0dHR2fn5+f + n58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fnx0dHR2fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHR0dn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fnx0dHR0dHZ+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHR0dHR2fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHZ+fn58dHZ+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR2fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAIAAAAAAAQAAAQAYAAAAAAAAwAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAIAAAAAAAQAAAQAIAAAAAAAAQAAAAAAAAAAA + AAAAAQAAAAEAAAAA/wAA/wAA/wAAAAD//wD//wAA/wD/AMDAwAD/+PAA1+v6ANT/fwD/AAAA4iuKACoq + pQAAAAAABAQEAAgICAAMDAwAERERABYWFgAcHBwAIiIiACkpKQAzMzMAOTk5AEJCQgBNTU0AVVVVAGBg + YABmZmYAcHBwAICAgACMjIwAlJSUAJmZmQCkpKQArKysALa2tgDAwMAAzMzMANTU1ADa2toA4ODgAOzs + 7AD4+PgA+/v7AP///wAzAAAAZgAAAJkAAADMAAAA/wAAAAAzAAAzMwAAZjMAAJkzAADMMwAA/zMAAABm + AAAzZgAAZmYAAJlmAADMZgAA/2YAAACZAAAzmQAAZpkAAJmZAADMmQAA/5kAAADMAAAzzAAAZswAAJnM + AADMzAAA/8wAAAD/AAAz/wAAZv8AAJn/AADM/wAA//8AAAAAMwAzADMAZgAzAJkAMwDMADMA/wAzAAAz + MwBmMzMAmTMzAMwzMwD/MzMAAGYzADNmMwBmZjMAmWYzAMxmMwD/ZjMAAJkzADOZMwBmmTMAmZkzAMyZ + MwD/mTMAAMwzADPMMwBmzDMAmcwzAMzMMwD/zDMAAP8zADP/MwBm/zMAmf8zAMz/MwD//zMAAABmADMA + ZgBmAGYAmQBmAMwAZgD/AGYAADNmADMzZgBmM2YAmTNmAMwzZgD/M2YAAGZmADNmZgCZZmYAzGZmAP9m + ZgAAmWYAM5lmAGaZZgCZmWYAzJlmAP+ZZgAAzGYAM8xmAGbMZgCZzGYAzMxmAP/MZgAA/2YAM/9mAGb/ + ZgCZ/2YAzP9mAP//ZgAAAJkAMwCZAGYAmQCZAJkAzACZAP8AmQAAM5kAMzOZAGYzmQCZM5kAzDOZAP8z + mQAAZpkAM2aZAGZmmQCZZpkAzGaZAP9mmQAAmZkAM5mZAGaZmQDMmZkA/5mZAAHMmQAzzJkAZsyZAJnM + mQDMzJkA/8yZAAD/mQAz/5kAZv+ZAJn/mQDM/5kA//+ZAAAAzAAzAMwAZgDMAJkAzADMAMwA/wDMAAAz + zAAzM8wAZjPMAJkzzADMM8wA/zPMAABmzAAzZswAZmbMAJlmzADMZswA/2bMAACZzAAzmcwAZpnMAJmZ + zADMmcwA/5nMAADMzAAzzMwAZszMAJnMzAD/zMwAAP/MADP/zABm/8wAmf/MAMz/zAD//8wAAAD/ADMA + /wBmAP8AmQD/AMwA/wD/AP8AADP/ADMz/wBmM/8AmTP/AMwz/wD/M/8AAGb/ADNm/wBmZv8AmWb/AMxm + /wD/Zv8AAJn/ADOZ/wBmmf8AmZn/AMyZ/wD/mf8AAMz/ADPM/wBmzP8Amcz/AMzM/wD/zP8AAP//ADP/ + /wBm//8Amf//AMz//wCfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pra2trZ+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+tra2tn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD62tra2fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+f + n5+tra2tra2tra2tra2fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8P + Dw+fn5+fn5+fn62tra2tra2tra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+f + n58PDw8PDw8PD5+fn5+fn5+fra2tra2tra2tra2tn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8P + Dw+fn5+fDw8PDw8PDw+tra2tra2tra2tra2tra2tra2tra2tra2tra2tn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PD5+fn58PDw8PDw8PD62tra2tra2tra2tra2tra2tra2tra2tra2tra2fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8Pn5+fnw8PDw8PDw8Pra2tra2tra2tra2tra2tra2tra2tra2tra2trZ+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw+fn5+fDw8PDw8PDw+tra2tra2tra2tra2tra2tra2tra2t + ra2tra2tn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+fn58PDw8PDw8PD62tra2tra2tra2tra2t + ra2tra2tra2tra2tra2fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PD62t + ra2tra2tra2trZ+fn5+tra2tra2trZ+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8Pra2tra2tra2tra2tn5+fn62tra2tra2tn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PDw8PDw+tra2tra2tra2tra2fn5+fra2tra2tra2fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n58PDw8Pn5+fn5+fn58PDw8PDw8PD62tra2tra2tra2tra2tra2fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pra2tra2tra2tra2tra2trZ+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw+tra2tra2tra2tra2tra2tn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PD62tra2tra2tra2tra2t + ra2fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pra2tra2t + ra2tra2tra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw+tra2tDw8PD5+fn5+tra2tn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PD62tra0PDw8Pn5+fn62tra2fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pra2trQ8PDw+fn5+fra2trZ+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw+tra2tn5+fn5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PD62tra2fn5+fn5+fnw8PDw+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8Pra2trZ+fn5+fn5+fDw8PD5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw+tra2tn5+fn5+f + n58PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PD62t + ra2fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PD5+fn5+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8Pn5+fn62t + ra0PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw+fn5+fra2trQ8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PD5+fn5+tra2tDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PD5+fn58PDw8PDw8PD5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fDw8PD5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+fn58PDw8PDw8PD5+f + n58PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n58PDw8Pn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fnw8P + Dw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fnw8PDw+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fn5+fn62tra2fn5+fn5+fnw8PDw+tra2tn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fDw8PD62t + ra2fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+tra2tn5+fn5+f + n58PDw8Pra2trZ+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+fn5+fn5+fn5+fn62t + ra2fn5+fn5+fn5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+f + n5+fn5+fra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8P + Dw+fn5+fn5+fn5+fn5+tra2tn5+fn5+fn5+fn5+fDw8PDw8PDw+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PD5+fn5+fn5+fn5+fn62tra2fn5+fn5+fn5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn5+tra2tra2trZ+fn5+tra2tn5+fnw8P + Dw+fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn62tra2tra2tn5+fn62t + ra2fn5+fDw8PD5+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fra2tra2t + ra2fn5+fra2trZ+fn58PDw8Pn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+tra2tn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn62tra2fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+tra2tn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fra2trZ+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+tra2tn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn62tra2fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8Pn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n58PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + + + \ No newline at end of file diff --git a/Server.MirForms/Database/GameShop.cs b/Server.MirForms/Database/GameShop.cs new file mode 100644 index 0000000..d703fd9 --- /dev/null +++ b/Server.MirForms/Database/GameShop.cs @@ -0,0 +1,361 @@ +using Server.MirEnvir; + +namespace Server +{ + public partial class GameShop : Form + { + + private List SelectedItems; + + public Envir Envir => SMain.EditEnvir; + + public GameShop() + { + InitializeComponent(); + + LoadGameShopItems(); + } + + private void GameShop_Load(object sender, EventArgs e) + { + UpdateInterface(); + } + + private void GameShop_FormClosed(object sender, FormClosedEventArgs e) + { + Envir.SaveDB(); + } + + public class ListBoxItem + { + public string DisplayMember { get; set; } + public object ValueMember { get; set; } + + public override string ToString() + { + return DisplayMember; + } + } + + private void LoadGameShopItems() + { + + + ClassFilter_lb.Items.Clear(); + CategoryFilter_lb.Items.Clear(); + GameShopListBox.Items.Clear(); + + ClassFilter_lb.Items.Add("All Classes"); + CategoryFilter_lb.Items.Add("All Categories"); + + + for (int i = 0; i < SMain.EditEnvir.GameShopList.Count; i++) + { + if (!ClassFilter_lb.Items.Contains(SMain.EditEnvir.GameShopList[i].Class)) ClassFilter_lb.Items.Add(SMain.EditEnvir.GameShopList[i].Class); + if (!CategoryFilter_lb.Items.Contains(SMain.EditEnvir.GameShopList[i].Category)) CategoryFilter_lb.Items.Add(SMain.EditEnvir.GameShopList[i].Category); + + GameShopListBox.Items.Add(SMain.EditEnvir.GameShopList[i]); + } + + ClassFilter_lb.Text = "All Classes"; + CategoryFilter_lb.Text = "All Categories"; + SectionFilter_lb.Text = "All Items"; + } + + private void UpdateGameShopList() + { + + GameShopListBox.Items.Clear(); + for (int i = 0; i < SMain.EditEnvir.GameShopList.Count; i++) + { + if (ClassFilter_lb.Text == "All Classes" || SMain.EditEnvir.GameShopList[i].Class == ClassFilter_lb.Text) + if (SectionFilter_lb.Text == "All Items" || SMain.EditEnvir.GameShopList[i].TopItem && SectionFilter_lb.Text == "Top Items" || SMain.EditEnvir.GameShopList[i].Deal && SectionFilter_lb.Text == "Sale Items" || SMain.EditEnvir.GameShopList[i].Date > Envir.Now.AddDays(-7) && SectionFilter_lb.Text == "New Items") + if (CategoryFilter_lb.Text == "All Categories" || SMain.EditEnvir.GameShopList[i].Category == CategoryFilter_lb.Text) + GameShopListBox.Items.Add(SMain.EditEnvir.GameShopList[i]); + } + } + + private void GameShopListBox_SelectedIndexChanged(object sender, EventArgs e) + { + UpdateInterface(); + } + + public void UpdateInterface(bool refreshList = false) + { + SelectedItems = GameShopListBox.SelectedItems.Cast().ToList(); + + + if (SelectedItems.Count == 0) + { + GoldPrice_textbox.Text = String.Empty; + GPPrice_textbox.Text = String.Empty; + Stock_textbox.Text = String.Empty; + Individual_checkbox.Checked = false; + Class_combo.Text = "All"; + Category_textbox.Text = ""; + TopItem_checkbox.Checked = false; + DealofDay_checkbox.Checked = false; + CredxGold_textbox.Text = Settings.CredxGold.ToString(); + ItemDetails_gb.Visible = false; + TotalSold_label.Text = "0"; + LeftinStock_label.Text = ""; + Count_textbox.Text = String.Empty; + CreditOnlyBox.Checked = false; + GoldOnlyBox.Checked = false; + return; + } + + ItemDetails_gb.Visible = true; + + GoldPrice_textbox.Text = SelectedItems[0].GoldPrice.ToString(); + GPPrice_textbox.Text = SelectedItems[0].CreditPrice.ToString(); + Stock_textbox.Text = SelectedItems[0].Stock.ToString(); + Individual_checkbox.Checked = SelectedItems[0].iStock; + Class_combo.Text = SelectedItems[0].Class; + Category_textbox.Text = SelectedItems[0].Category; + TopItem_checkbox.Checked = SelectedItems[0].TopItem; + DealofDay_checkbox.Checked = SelectedItems[0].Deal; + Count_textbox.Text = SelectedItems[0].Count.ToString(); + CreditOnlyBox.Checked = SelectedItems[0].CanBuyCredit; + GoldOnlyBox.Checked = SelectedItems[0].CanBuyGold; + GetStats(); + + } + + private void GetStats() + { + int purchased; + + SMain.Envir.GameshopLog.TryGetValue(SelectedItems[0].GIndex, out purchased); + TotalSold_label.Text = purchased.ToString(); + + if (!Individual_checkbox.Checked && SelectedItems[0].Stock != 0) + { + if (SelectedItems[0].Stock - purchased >= 0) + LeftinStock_label.Text = (SelectedItems[0].Stock - purchased).ToString(); + else + LeftinStock_label.Text = ""; + } + else if (SelectedItems[0].Stock == 0) + { + LeftinStock_label.Text = "Infinite"; + } + else if (Individual_checkbox.Checked) + { + LeftinStock_label.Text = "Can't calc individual levels"; + } + } + + private void GoldPrice_textbox_TextChanged(object sender, EventArgs e) + { + + uint temp; + + if (!uint.TryParse(GoldPrice_textbox.Text, out temp)) + { + GoldPrice_textbox.BackColor = Color.Red; + return; + } + + GoldPrice_textbox.BackColor = SystemColors.Window; + + for (int i = 0; i < SelectedItems.Count; i++) + SelectedItems[i].GoldPrice = temp; + } + + private void GPPrice_textbox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + uint temp; + + if (!uint.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + + ActiveControl.BackColor = SystemColors.Window; + + for (int i = 0; i < SelectedItems.Count; i++) + SelectedItems[i].CreditPrice = temp; + + if (ActiveControl.Text != "") GoldPrice_textbox.Text = (temp * Settings.CredxGold).ToString(); + } + + private void Class_combo_SelectedIndexChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + string temp = ActiveControl.Text; + + for (int i = 0; i < SelectedItems.Count; i++) + SelectedItems[i].Class = temp; + } + + private void TopItem_checkbox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < SelectedItems.Count; i++) + SelectedItems[i].TopItem = TopItem_checkbox.Checked; + } + + private void Remove_button_Click(object sender, EventArgs e) + { + if (SelectedItems.Count == 0) return; + + if (MessageBox.Show("Are you sure you want to remove the selected Items?", "Remove Items?", MessageBoxButtons.YesNo) != DialogResult.Yes) return; + + for (int i = 0; i < SelectedItems.Count; i++) Envir.Remove(SelectedItems[i]); + + LoadGameShopItems(); + UpdateInterface(); + } + + private void DealofDay_checkbox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < SelectedItems.Count; i++) + SelectedItems[i].Deal = DealofDay_checkbox.Checked; + } + + private void Category_textbox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + string temp = ActiveControl.Text; + + for (int i = 0; i < SelectedItems.Count; i++) + SelectedItems[i].Category = temp; + } + + private void Stock_textbox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + int temp; + + if (!int.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + + ActiveControl.BackColor = SystemColors.Window; + + for (int i = 0; i < SelectedItems.Count; i++) + SelectedItems[i].Stock = temp; + + GetStats(); + } + + private void Individual_checkbox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < SelectedItems.Count; i++) + SelectedItems[i].iStock = Individual_checkbox.Checked; + + } + + private void CredxGold_textbox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + short temp; + + if (!short.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + + ActiveControl.BackColor = SystemColors.Window; + Settings.CredxGold = temp; + } + + private void Count_textbox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + ushort temp; + + if (!ushort.TryParse(ActiveControl.Text, out temp) || temp > 999) + { + ActiveControl.BackColor = Color.Red; + return; + } + + if (temp < 1) + { + temp = 1; + ActiveControl.Text = "1"; + } + else if (temp > SelectedItems[0].Info.StackSize) + { + temp = SelectedItems[0].Info.StackSize; + ActiveControl.Text = SelectedItems[0].Info.StackSize.ToString(); + } + + ActiveControl.BackColor = SystemColors.Window; + SelectedItems[0].Count = temp; + } + + private void ClassFilter_lb_SelectedIndexChanged(object sender, EventArgs e) + { + UpdateGameShopList(); + } + + private void SectionFilter_lb_SelectedIndexChanged(object sender, EventArgs e) + { + UpdateGameShopList(); + } + + private void CategoryFilter_lb_SelectedIndexChanged(object sender, EventArgs e) + { + UpdateGameShopList(); + } + + private void ResetFilter_button_Click(object sender, EventArgs e) + { + ClassFilter_lb.Text = "All Classes"; + CategoryFilter_lb.Text = "All Categories"; + SectionFilter_lb.Text = "All Items"; + UpdateGameShopList(); + + } + + private void ServerLog_button_Click(object sender, EventArgs e) + { + if (SMain.Envir.Running) + { + if (MessageBox.Show("Reseting purchase logs cannot be reverted and will set stock levels back to defaults, This will take effect instantly.", "Remove Logs?", MessageBoxButtons.YesNo) != DialogResult.Yes) return; + SMain.Envir.ClearGameshopLog(); + } + else + { + if (MessageBox.Show("Reseting purchase logs cannot be reverted and will set stock levels back to defaults, This will take effect when you start the server", "Remove Logs?", MessageBoxButtons.YesNo) != DialogResult.Yes) return; + SMain.Envir.ResetGS = true; + } + } + private void GoldOnlyBox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) + return; + + for (int i = 0; i < SelectedItems.Count; i++) + SelectedItems[i].CanBuyGold = GoldOnlyBox.Checked; + } + + private void CreditOnly_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) + return; + + for (int i = 0; i < SelectedItems.Count; i++) + SelectedItems[i].CanBuyCredit = CreditOnlyBox.Checked; + } + + + } +} diff --git a/Server.MirForms/Database/GameShop.designer.cs b/Server.MirForms/Database/GameShop.designer.cs new file mode 100644 index 0000000..fed0d75 --- /dev/null +++ b/Server.MirForms/Database/GameShop.designer.cs @@ -0,0 +1,503 @@ +namespace Server +{ + partial class GameShop + { + /// + /// 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(GameShop)); + GameShopListBox = new ListBox(); + label14 = new Label(); + GoldPrice_textbox = new TextBox(); + label21 = new Label(); + GPPrice_textbox = new TextBox(); + label29 = new Label(); + ItemDetails_gb = new GroupBox(); + GoldOnlyBox = new CheckBox(); + CreditOnlyBox = new CheckBox(); + label6 = new Label(); + Count_textbox = new TextBox(); + LeftinStock_label = new Label(); + label3 = new Label(); + label5 = new Label(); + TotalSold_label = new Label(); + TopItem_checkbox = new CheckBox(); + DealofDay_checkbox = new CheckBox(); + Individual_checkbox = new CheckBox(); + label1 = new Label(); + Stock_textbox = new TextBox(); + Category_textbox = new TextBox(); + label4 = new Label(); + Class_combo = new ComboBox(); + groupBox3 = new GroupBox(); + label2 = new Label(); + CredxGold_textbox = new TextBox(); + ServerLog_button = new Button(); + Remove_button = new Button(); + ClassFilter_lb = new ComboBox(); + SectionFilter_lb = new ComboBox(); + CategoryFilter_lb = new ComboBox(); + ResetFilter_button = new Button(); + ItemDetails_gb.SuspendLayout(); + groupBox3.SuspendLayout(); + SuspendLayout(); + // + // GameShopListBox + // + GameShopListBox.FormattingEnabled = true; + GameShopListBox.ItemHeight = 15; + GameShopListBox.Location = new Point(14, 89); + GameShopListBox.Margin = new Padding(4, 3, 4, 3); + GameShopListBox.Name = "GameShopListBox"; + GameShopListBox.ScrollAlwaysVisible = true; + GameShopListBox.SelectionMode = SelectionMode.MultiExtended; + GameShopListBox.Size = new Size(234, 379); + GameShopListBox.TabIndex = 11; + GameShopListBox.SelectedIndexChanged += GameShopListBox_SelectedIndexChanged; + // + // label14 + // + label14.AutoSize = true; + label14.Location = new Point(27, 121); + label14.Margin = new Padding(4, 0, 4, 0); + label14.Name = "label14"; + label14.Size = new Size(64, 15); + label14.TabIndex = 90; + label14.Text = "Gold Price:"; + // + // GoldPrice_textbox + // + GoldPrice_textbox.Location = new Point(100, 118); + GoldPrice_textbox.Margin = new Padding(4, 3, 4, 3); + GoldPrice_textbox.MaxLength = 0; + GoldPrice_textbox.Name = "GoldPrice_textbox"; + GoldPrice_textbox.Size = new Size(131, 23); + GoldPrice_textbox.TabIndex = 86; + GoldPrice_textbox.TextChanged += GoldPrice_textbox_TextChanged; + // + // label21 + // + label21.AutoSize = true; + label21.Location = new Point(21, 89); + label21.Margin = new Padding(4, 0, 4, 0); + label21.Name = "label21"; + label21.Size = new Size(71, 15); + label21.TabIndex = 91; + label21.Text = "Credit Price:"; + // + // GPPrice_textbox + // + GPPrice_textbox.Location = new Point(100, 85); + GPPrice_textbox.Margin = new Padding(4, 3, 4, 3); + GPPrice_textbox.MaxLength = 0; + GPPrice_textbox.Name = "GPPrice_textbox"; + GPPrice_textbox.Size = new Size(131, 23); + GPPrice_textbox.TabIndex = 87; + GPPrice_textbox.TextChanged += GPPrice_textbox_TextChanged; + // + // label29 + // + label29.AutoSize = true; + label29.Location = new Point(9, 183); + label29.Margin = new Padding(4, 0, 4, 0); + label29.Name = "label29"; + label29.Size = new Size(79, 15); + label29.TabIndex = 93; + label29.Text = "Class Section:"; + // + // ItemDetails_gb + // + ItemDetails_gb.BackColor = Color.White; + ItemDetails_gb.Controls.Add(GoldOnlyBox); + ItemDetails_gb.Controls.Add(CreditOnlyBox); + ItemDetails_gb.Controls.Add(label6); + ItemDetails_gb.Controls.Add(Count_textbox); + ItemDetails_gb.Controls.Add(LeftinStock_label); + ItemDetails_gb.Controls.Add(label3); + ItemDetails_gb.Controls.Add(label5); + ItemDetails_gb.Controls.Add(TotalSold_label); + ItemDetails_gb.Controls.Add(TopItem_checkbox); + ItemDetails_gb.Controls.Add(DealofDay_checkbox); + ItemDetails_gb.Controls.Add(Individual_checkbox); + ItemDetails_gb.Controls.Add(label1); + ItemDetails_gb.Controls.Add(Stock_textbox); + ItemDetails_gb.Controls.Add(GoldPrice_textbox); + ItemDetails_gb.Controls.Add(label14); + ItemDetails_gb.Controls.Add(label21); + ItemDetails_gb.Controls.Add(Category_textbox); + ItemDetails_gb.Controls.Add(GPPrice_textbox); + ItemDetails_gb.Controls.Add(label4); + ItemDetails_gb.Controls.Add(label29); + ItemDetails_gb.Controls.Add(Class_combo); + ItemDetails_gb.Location = new Point(255, 91); + ItemDetails_gb.Margin = new Padding(4, 3, 4, 3); + ItemDetails_gb.Name = "ItemDetails_gb"; + ItemDetails_gb.Padding = new Padding(4, 3, 4, 3); + ItemDetails_gb.Size = new Size(312, 377); + ItemDetails_gb.TabIndex = 98; + ItemDetails_gb.TabStop = false; + ItemDetails_gb.Text = "Item Details"; + // + // GoldOnlyBox + // + GoldOnlyBox.AutoSize = true; + GoldOnlyBox.Location = new Point(239, 120); + GoldOnlyBox.Margin = new Padding(4, 3, 4, 3); + GoldOnlyBox.Name = "GoldOnlyBox"; + GoldOnlyBox.Size = new Size(51, 19); + GoldOnlyBox.TabIndex = 119; + GoldOnlyBox.Text = "Gold"; + GoldOnlyBox.UseVisualStyleBackColor = true; + GoldOnlyBox.CheckedChanged += GoldOnlyBox_CheckedChanged; + // + // CreditOnlyBox + // + CreditOnlyBox.AutoSize = true; + CreditOnlyBox.Location = new Point(239, 88); + CreditOnlyBox.Margin = new Padding(4, 3, 4, 3); + CreditOnlyBox.Name = "CreditOnlyBox"; + CreditOnlyBox.Size = new Size(63, 19); + CreditOnlyBox.TabIndex = 118; + CreditOnlyBox.Text = "Credits"; + CreditOnlyBox.UseVisualStyleBackColor = true; + CreditOnlyBox.CheckedChanged += CreditOnly_CheckedChanged; + // + // label6 + // + label6.AutoSize = true; + label6.Location = new Point(51, 151); + label6.Margin = new Padding(4, 0, 4, 0); + label6.Name = "label6"; + label6.Size = new Size(43, 15); + label6.TabIndex = 117; + label6.Text = "Count:"; + // + // Count_textbox + // + Count_textbox.Location = new Point(100, 148); + Count_textbox.Margin = new Padding(4, 3, 4, 3); + Count_textbox.MaxLength = 0; + Count_textbox.Name = "Count_textbox"; + Count_textbox.Size = new Size(131, 23); + Count_textbox.TabIndex = 116; + Count_textbox.TextChanged += Count_textbox_TextChanged; + // + // LeftinStock_label + // + LeftinStock_label.AutoSize = true; + LeftinStock_label.Location = new Point(97, 54); + LeftinStock_label.Margin = new Padding(4, 0, 4, 0); + LeftinStock_label.Name = "LeftinStock_label"; + LeftinStock_label.RightToLeft = RightToLeft.No; + LeftinStock_label.Size = new Size(25, 15); + LeftinStock_label.TabIndex = 115; + LeftinStock_label.Text = "100"; + // + // label3 + // + label3.AutoSize = true; + label3.Location = new Point(14, 54); + label3.Margin = new Padding(4, 0, 4, 0); + label3.Name = "label3"; + label3.Size = new Size(75, 15); + label3.TabIndex = 114; + label3.Text = "Left in Stock:"; + // + // label5 + // + label5.AutoSize = true; + label5.Location = new Point(28, 24); + label5.Margin = new Padding(4, 0, 4, 0); + label5.Name = "label5"; + label5.Size = new Size(61, 15); + label5.TabIndex = 113; + label5.Text = "Total Sold:"; + // + // TotalSold_label + // + TotalSold_label.AutoSize = true; + TotalSold_label.Location = new Point(96, 24); + TotalSold_label.Margin = new Padding(4, 0, 4, 0); + TotalSold_label.Name = "TotalSold_label"; + TotalSold_label.RightToLeft = RightToLeft.No; + TotalSold_label.Size = new Size(25, 15); + TotalSold_label.TabIndex = 112; + TotalSold_label.Text = "100"; + // + // TopItem_checkbox + // + TopItem_checkbox.AutoSize = true; + TopItem_checkbox.Location = new Point(34, 295); + TopItem_checkbox.Margin = new Padding(4, 3, 4, 3); + TopItem_checkbox.Name = "TopItem_checkbox"; + TopItem_checkbox.RightToLeft = RightToLeft.Yes; + TopItem_checkbox.Size = new Size(75, 19); + TopItem_checkbox.TabIndex = 106; + TopItem_checkbox.Text = ":Top Item"; + TopItem_checkbox.UseVisualStyleBackColor = true; + TopItem_checkbox.CheckedChanged += TopItem_checkbox_CheckedChanged; + // + // DealofDay_checkbox + // + DealofDay_checkbox.AutoSize = true; + DealofDay_checkbox.Location = new Point(31, 272); + DealofDay_checkbox.Margin = new Padding(4, 3, 4, 3); + DealofDay_checkbox.Name = "DealofDay_checkbox"; + DealofDay_checkbox.RightToLeft = RightToLeft.Yes; + DealofDay_checkbox.Size = new Size(77, 19); + DealofDay_checkbox.TabIndex = 105; + DealofDay_checkbox.Text = ":Sale Item"; + DealofDay_checkbox.UseVisualStyleBackColor = true; + DealofDay_checkbox.CheckedChanged += DealofDay_checkbox_CheckedChanged; + // + // Individual_checkbox + // + Individual_checkbox.AutoSize = true; + Individual_checkbox.Location = new Point(190, 245); + Individual_checkbox.Margin = new Padding(4, 3, 4, 3); + Individual_checkbox.Name = "Individual_checkbox"; + Individual_checkbox.Size = new Size(88, 19); + Individual_checkbox.TabIndex = 110; + Individual_checkbox.Text = "Player Limit"; + Individual_checkbox.UseVisualStyleBackColor = true; + Individual_checkbox.CheckedChanged += Individual_checkbox_CheckedChanged; + // + // label1 + // + label1.AutoSize = true; + label1.Location = new Point(51, 246); + label1.Margin = new Padding(4, 0, 4, 0); + label1.Name = "label1"; + label1.Size = new Size(39, 15); + label1.TabIndex = 111; + label1.Text = "Stock:"; + // + // Stock_textbox + // + Stock_textbox.Location = new Point(100, 242); + Stock_textbox.Margin = new Padding(4, 3, 4, 3); + Stock_textbox.MaxLength = 0; + Stock_textbox.Name = "Stock_textbox"; + Stock_textbox.Size = new Size(83, 23); + Stock_textbox.TabIndex = 109; + Stock_textbox.TextChanged += Stock_textbox_TextChanged; + // + // Category_textbox + // + Category_textbox.Location = new Point(100, 211); + Category_textbox.Margin = new Padding(4, 3, 4, 3); + Category_textbox.MaxLength = 0; + Category_textbox.Name = "Category_textbox"; + Category_textbox.Size = new Size(201, 23); + Category_textbox.TabIndex = 108; + Category_textbox.TextChanged += Category_textbox_TextChanged; + // + // label4 + // + label4.AutoSize = true; + label4.Location = new Point(35, 215); + label4.Margin = new Padding(4, 0, 4, 0); + label4.Name = "label4"; + label4.Size = new Size(58, 15); + label4.TabIndex = 106; + label4.Text = "Category:"; + // + // Class_combo + // + Class_combo.DropDownStyle = ComboBoxStyle.DropDownList; + Class_combo.FormattingEnabled = true; + Class_combo.Items.AddRange(new object[] { "All", "Warrior", "Assassin", "Taoist", "Wizard", "Archer" }); + Class_combo.Location = new Point(100, 180); + Class_combo.Margin = new Padding(4, 3, 4, 3); + Class_combo.Name = "Class_combo"; + Class_combo.Size = new Size(201, 23); + Class_combo.TabIndex = 105; + Class_combo.SelectedIndexChanged += Class_combo_SelectedIndexChanged; + // + // groupBox3 + // + groupBox3.BackColor = Color.White; + groupBox3.Controls.Add(label2); + groupBox3.Controls.Add(CredxGold_textbox); + groupBox3.Location = new Point(255, 6); + groupBox3.Margin = new Padding(4, 3, 4, 3); + groupBox3.Name = "groupBox3"; + groupBox3.Padding = new Padding(4, 3, 4, 3); + groupBox3.Size = new Size(312, 78); + groupBox3.TabIndex = 105; + groupBox3.TabStop = false; + groupBox3.Text = "Gameshop Settings"; + // + // label2 + // + label2.AutoSize = true; + label2.Location = new Point(14, 30); + label2.Margin = new Padding(4, 0, 4, 0); + label2.Name = "label2"; + label2.Size = new Size(79, 15); + label2.TabIndex = 92; + label2.Text = "Credit x Gold:"; + // + // CredxGold_textbox + // + CredxGold_textbox.Location = new Point(100, 25); + CredxGold_textbox.Margin = new Padding(4, 3, 4, 3); + CredxGold_textbox.MaxLength = 0; + CredxGold_textbox.Name = "CredxGold_textbox"; + CredxGold_textbox.Size = new Size(75, 23); + CredxGold_textbox.TabIndex = 88; + CredxGold_textbox.TextChanged += CredxGold_textbox_TextChanged; + // + // ServerLog_button + // + ServerLog_button.Location = new Point(257, 470); + ServerLog_button.Margin = new Padding(4, 3, 4, 3); + ServerLog_button.Name = "ServerLog_button"; + ServerLog_button.Size = new Size(310, 27); + ServerLog_button.TabIndex = 112; + ServerLog_button.Text = "Reset Purchase Logs (Stock Levels will reset)"; + ServerLog_button.UseVisualStyleBackColor = true; + ServerLog_button.Click += ServerLog_button_Click; + // + // Remove_button + // + Remove_button.Location = new Point(131, 470); + Remove_button.Margin = new Padding(4, 3, 4, 3); + Remove_button.Name = "Remove_button"; + Remove_button.Size = new Size(119, 27); + Remove_button.TabIndex = 106; + Remove_button.Text = "Remove Selected"; + Remove_button.UseVisualStyleBackColor = true; + Remove_button.Click += Remove_button_Click; + // + // ClassFilter_lb + // + ClassFilter_lb.DropDownStyle = ComboBoxStyle.DropDownList; + ClassFilter_lb.FormattingEnabled = true; + ClassFilter_lb.Location = new Point(14, 6); + ClassFilter_lb.Margin = new Padding(4, 3, 4, 3); + ClassFilter_lb.Name = "ClassFilter_lb"; + ClassFilter_lb.Size = new Size(170, 23); + ClassFilter_lb.TabIndex = 107; + ClassFilter_lb.SelectedIndexChanged += ClassFilter_lb_SelectedIndexChanged; + // + // SectionFilter_lb + // + SectionFilter_lb.DropDownStyle = ComboBoxStyle.DropDownList; + SectionFilter_lb.FormattingEnabled = true; + SectionFilter_lb.Items.AddRange(new object[] { "All Items", "Top Items", "Sale Items", "New Items" }); + SectionFilter_lb.Location = new Point(14, 32); + SectionFilter_lb.Margin = new Padding(4, 3, 4, 3); + SectionFilter_lb.Name = "SectionFilter_lb"; + SectionFilter_lb.Size = new Size(170, 23); + SectionFilter_lb.TabIndex = 108; + SectionFilter_lb.SelectedIndexChanged += SectionFilter_lb_SelectedIndexChanged; + // + // CategoryFilter_lb + // + CategoryFilter_lb.DropDownStyle = ComboBoxStyle.DropDownList; + CategoryFilter_lb.FormattingEnabled = true; + CategoryFilter_lb.Location = new Point(14, 59); + CategoryFilter_lb.Margin = new Padding(4, 3, 4, 3); + CategoryFilter_lb.Name = "CategoryFilter_lb"; + CategoryFilter_lb.Size = new Size(170, 23); + CategoryFilter_lb.TabIndex = 109; + CategoryFilter_lb.SelectedIndexChanged += CategoryFilter_lb_SelectedIndexChanged; + // + // ResetFilter_button + // + ResetFilter_button.Location = new Point(191, 5); + ResetFilter_button.Margin = new Padding(4, 3, 4, 3); + ResetFilter_button.Name = "ResetFilter_button"; + ResetFilter_button.Size = new Size(57, 80); + ResetFilter_button.TabIndex = 110; + ResetFilter_button.Text = "Reset Filter"; + ResetFilter_button.UseVisualStyleBackColor = true; + ResetFilter_button.Click += ResetFilter_button_Click; + // + // GameShop + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(581, 503); + Controls.Add(ServerLog_button); + Controls.Add(ResetFilter_button); + Controls.Add(CategoryFilter_lb); + Controls.Add(SectionFilter_lb); + Controls.Add(ClassFilter_lb); + Controls.Add(Remove_button); + Controls.Add(groupBox3); + Controls.Add(ItemDetails_gb); + Controls.Add(GameShopListBox); + Icon = (Icon)resources.GetObject("$this.Icon"); + Margin = new Padding(4, 3, 4, 3); + Name = "GameShop"; + Text = "GameShop"; + FormClosed += GameShop_FormClosed; + Load += GameShop_Load; + ItemDetails_gb.ResumeLayout(false); + ItemDetails_gb.PerformLayout(); + groupBox3.ResumeLayout(false); + groupBox3.PerformLayout(); + ResumeLayout(false); + } + + #endregion + + private System.Windows.Forms.ListBox GameShopListBox; + private System.Windows.Forms.Label label14; + private System.Windows.Forms.TextBox GoldPrice_textbox; + private System.Windows.Forms.Label label21; + private System.Windows.Forms.TextBox GPPrice_textbox; + private System.Windows.Forms.Label label29; + private System.Windows.Forms.GroupBox ItemDetails_gb; + private System.Windows.Forms.ComboBox Class_combo; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.GroupBox groupBox3; + private System.Windows.Forms.CheckBox DealofDay_checkbox; + private System.Windows.Forms.CheckBox TopItem_checkbox; + private System.Windows.Forms.Button Remove_button; + private System.Windows.Forms.TextBox Category_textbox; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.CheckBox Individual_checkbox; + private System.Windows.Forms.TextBox Stock_textbox; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox CredxGold_textbox; + private System.Windows.Forms.Label TotalSold_label; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label LeftinStock_label; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.TextBox Count_textbox; + private System.Windows.Forms.ComboBox ClassFilter_lb; + private System.Windows.Forms.ComboBox SectionFilter_lb; + private System.Windows.Forms.ComboBox CategoryFilter_lb; + private System.Windows.Forms.Button ResetFilter_button; + private System.Windows.Forms.Button ServerLog_button; + private System.Windows.Forms.CheckBox GoldOnlyBox; + private System.Windows.Forms.CheckBox CreditOnlyBox; + } +} \ No newline at end of file diff --git a/Server.MirForms/Database/GameShop.resx b/Server.MirForms/Database/GameShop.resx new file mode 100644 index 0000000..1b01221 --- /dev/null +++ b/Server.MirForms/Database/GameShop.resx @@ -0,0 +1,1763 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAgAICAQAAAABADoAgAAhgAAACAgAAAAABgAqAwAAG4DAAAgIAAAAAAIAKgIAAAWEAAAQEAAAAAA + GAAoMgAAvhgAAEBAEAAAAAQAaAoAAOZKAABAQAAAAAAIACgWAABOVQAAgIAAAAAAGAAoyAAAdmsAAICA + AAAAAAgAKEwAAJ4zAQAoAAAAIAAAAEAAAAABAAQAAAAAAAACAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAA + gAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////ABER + ERAAAAAAAAAAAAAAAAARERERAAAAAAAAAAAAAAAAERERERAAAAAAAAAAAAAAABERERERAAAAAQAAAAAA + AAARERAAAQAAAAEAAAAAAAAAEREREQAAAAABAAAAAAAAABERERERAAAAABAAAAAAAAAREREREQAAAAAQ + AAAQAAAAEREREREAAAAAAAABEAAAAAERERERAAAAAAAxERAAAAAQERERERAAAAABEQAAAAAAAAAREREQ + AAAAAQARERARAAAAEREREAAAAAEBEAERERAAAAAAAAAAAAAQEQARMzERAAAAEREAAAABEBADMzMzEQAA + AAEQAAAAAAEAADMxMxEAAAAAAAAAAAEQEQAzMxEQAAABAAEAAAEREAAAMBMQEAAAAAARAAABEREQADEQ + EQAAAAABEBEBEREQATAREREAAAAQAQAQARERAQABEQERAAAAAAAAEBETEQMRERAREQAAAAAAARARExEQ + AREAAREQAAAAAAEBERMxMQEBAAABEQABAAAAAQERERMREQAAAAEAABAAABABERExERAAAAAAAAAAAAAA + EREREREAAAAAAAAAABAQEQAAAREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABAAAAAAAAAAAA + AAAAEAARAAAAAAAAAAAAAAAAAAABEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABABgAAAAAAAAM + AAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA + AACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAAAA + AAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA + AACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACA + AACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAACAAACAAACAAACAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAA + AACAAACAAACAAACAAACAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAAAAAAAAAACAAACAAACAAACAAACA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACAAAAAAACAAACAAAAAAAAAAACAAACAAICAAICAAICAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAA + AACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAACAAAAAAAAAAICAAICAAICA + AICAAICAAICAAICAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAICAAICAAICAAACAAICAAICAAACAAACAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAACAAACA + AAAAAAAAAICAAICAAICAAICAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAACA + AAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAICAAAAAAACAAICAAACAAAAA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAACAAACAAACA + AACAAACAAACAAAAAAAAAAAAAAICAAACAAACAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAACAAACAAAAAAACAAACAAAAAAACAAACAAACAAACAAACAAACAAAAAAAAAAACAAICAAAAAAACAAACA + AACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAACA + AACAAACAAACAAACAAAAAAACAAAAAAAAAAAAAAACAAACAAACAAAAAAACAAACAAACAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAICAAACAAACAAAAAAICAAACAAACA + AACAAACAAACAAAAAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + AACAAAAAAACAAACAAACAAICAAACAAACAAACAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAACAAACAAACA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAACAAICAAICAAACA + AICAAACAAAAAAACAAAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAACAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAACAAACAAACAAICAAACAAACAAACAAACAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACA + AACAAACAAACAAACAAICAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAAAA + AACAAACAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAA + AACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAACAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE + AAAAAAAAAAAAAAABAAAAAQAAAAD/AAD/AAD/AAAAAP//AP//AAD/AP8AwMDAAP/48ADX6/oA1P9/AP8A + AADiK4oAKiqlAAAAAAAEBAQACAgIAAwMDAAREREAFhYWABwcHAAiIiIAKSkpADMzMwA5OTkAQkJCAE1N + TQBVVVUAYGBgAGZmZgBwcHAAgICAAIyMjACUlJQAmZmZAKSkpACsrKwAtra2AMDAwADMzMwA1NTUANra + 2gDg4OAA7OzsAPj4+AD7+/sA////ADMAAABmAAAAmQAAAMwAAAD/AAAAADMAADMzAABmMwAAmTMAAMwz + AAD/MwAAAGYAADNmAABmZgAAmWYAAMxmAAD/ZgAAAJkAADOZAABmmQAAmZkAAMyZAAD/mQAAAMwAADPM + AABmzAAAmcwAAMzMAAD/zAAAAP8AADP/AABm/wAAmf8AAMz/AAD//wAAAAAzADMAMwBmADMAmQAzAMwA + MwD/ADMAADMzAGYzMwCZMzMAzDMzAP8zMwAAZjMAM2YzAGZmMwCZZjMAzGYzAP9mMwAAmTMAM5kzAGaZ + MwCZmTMAzJkzAP+ZMwAAzDMAM8wzAGbMMwCZzDMAzMwzAP/MMwAA/zMAM/8zAGb/MwCZ/zMAzP8zAP// + MwAAAGYAMwBmAGYAZgCZAGYAzABmAP8AZgAAM2YAMzNmAGYzZgCZM2YAzDNmAP8zZgAAZmYAM2ZmAJlm + ZgDMZmYA/2ZmAACZZgAzmWYAZplmAJmZZgDMmWYA/5lmAADMZgAzzGYAZsxmAJnMZgDMzGYA/8xmAAD/ + ZgAz/2YAZv9mAJn/ZgDM/2YA//9mAAAAmQAzAJkAZgCZAJkAmQDMAJkA/wCZAAAzmQAzM5kAZjOZAJkz + mQDMM5kA/zOZAABmmQAzZpkAZmaZAJlmmQDMZpkA/2aZAACZmQAzmZkAZpmZAMyZmQD/mZkAAcyZADPM + mQBmzJkAmcyZAMzMmQD/zJkAAP+ZADP/mQBm/5kAmf+ZAMz/mQD//5kAAADMADMAzABmAMwAmQDMAMwA + zAD/AMwAADPMADMzzABmM8wAmTPMAMwzzAD/M8wAAGbMADNmzABmZswAmWbMAMxmzAD/ZswAAJnMADOZ + zABmmcwAmZnMAMyZzAD/mcwAAMzMADPMzABmzMwAmczMAP/MzAAA/8wAM//MAGb/zACZ/8wAzP/MAP// + zAAAAP8AMwD/AGYA/wCZAP8AzAD/AP8A/wAAM/8AMzP/AGYz/wCZM/8AzDP/AP8z/wAAZv8AM2b/AGZm + /wCZZv8AzGb/AP9m/wAAmf8AM5n/AGaZ/wCZmf8AzJn/AP+Z/wAAzP8AM8z/AGbM/wCZzP8AzMz/AP/M + /wAA//8AM///AGb//wCZ//8AzP//AJ+fn5+fn58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQn5+fn5+f + n58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBCfn5+fn5+fn58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEJ+f + n5+fn5+fn58QEBAQEBAQnxAQEBAQEBAQEBAQEBAQn5+fn58QEBAQnxAQEBAQEBCfEBAQEBAQEBAQEBAQ + EBCfn5+fn5+fnxAQEBAQEBAQEJ8QEBAQEBAQEBAQEBAQEJ+fn5+fn5+fn58QEBAQEBAQEJ8QEBAQEBAQ + EBAQEBAQn5+fn5+fn5+fnxAQEBAQEBAQnxAQEBAQnxAQEBAQEBCfn5+fn5+fn5+fEBAQEBAQEBAQEBAQ + EJ+fEBAQEBAQEBCfn5+fn5+fn58QEBAQEBAQEBAQrZ+fn58QEBAQEBAQnxCfn5+fn5+fn58QEBAQEBAQ + EJ+fnxAQEBAQEBAQEBAQEBAQn5+fn5+fnxAQEBAQEBAQnxAQn5+fn58Qn58QEBAQEBCfn5+fn5+fEBAQ + EBAQEBCfEJ+fEBCfn5+fn58QEBAQEBAQEBAQEBAQEBAQEBAQnxCfnxAQn5+tra2fn58QEBAQEBCfn5+f + EBAQEBAQEJ+fEJ8QEK2tra2tra2fnxAQEBAQEBCfnxAQEBAQEBAQEBCfEBAQEK2trZ+trZ+fEBAQEBAQ + EBAQEBAQEBAQEBCfnxCfnxAQra2trZ+fnxAQEBAQEJ8QEBCfEBAQEBCfn5+fEBAQEBCtEJ+tnxCfEBAQ + EBAQEBAQn58QEBAQEJ+fn5+fnxAQEK2fnxCfnxAQEBAQEBAQEJ+fEJ+fEJ+fn5+fnxAQn60Qn5+fn5+f + EBAQEBAQnxAQnxAQnxAQn5+fn58QnxAQEJ+fnxCfn58QEBAQEBAQEBAQEBCfEJ+fn62fnxCtn5+fn58Q + n5+fnxAQEBAQEBAQEBAQn58Qn5+frZ+fnxAQn5+fEBAQn5+fnxAQEBAQEBAQEBCfEJ+fn5+trZ+tnxCf + EJ8QEBAQEJ+fnxAQEJ8QEBAQEBAQnxCfn5+fn5+tn5+fnxAQEBAQEBCfEBAQEJ8QEBAQEJ8QEJ+fn5+f + rZ+fn58QEBAQEBAQEBAQEBAQEBAQEBAQEBCfn5+fn5+fn5+fEBAQEBAQEBAQEBAQEBAQEJ8QnxCfnxAQ + EBAQn5+fEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEJ8QEJ8QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBCfEBAQn58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEJ+fEJ8QEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAABAAAAAgAAAAAEAGAAAAAAAADAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAA + AAAAAIAAAIAAAAAAAAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAA + gIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAAIAA + AIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAgIAA + gIAAgIAAgIAAAIAAAIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAAAAAAAAAIAAAIAAgIAAgIAAAIAAAIAAAAAA + AAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAAAAAAAAAIAAAIAAgIAA + gIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAA + AIAAgIAAgIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAA + AAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAIAAAIAAgIAAgIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAgIAAgIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAgIAA + gIAAgIAAgIAAAIAAAIAAgIAAgIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAgIAAgIAAgIAAgIAAAIAAAIAAgIAAgIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAgIAA + gIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAAAA + AAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAABAAAAAgAAAAAEABAAAAAAAAAgAAAAA + AAAAAAAAEAAAABAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAwMDAAICAgAAAAP8AAP8AAAD/ + /wD/AAAA/wD/AP//AAD///8AEREREREREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARERERERERAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAABERERERERERAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAERERERER + EREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAREREREREREREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABER + EREREREREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEREREREREREREQAAAAAAAAARAAAAAAAAAAAAAAAA + AAARERERERERERERAAAAAAAAABEAAAAAAAAAAAAAAAAAABERERERAAAAABEAAAAAAAAAEQAAAAAAAAAA + AAAAAAAAEREREREAAAAAEQAAAAAAAAARAAAAAAAAAAAAAAAAAAAREREREREREQAAAAAAAAAAABEAAAAA + AAAAAAAAAAAAABERERERERERAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAEREREREREREREQAAAAAAAAAA + EQAAAAAAAAAAAAAAAAARERERERERERERAAAAAAAAAAARAAAAAAAAAAAAAAAAABEREREREREREREAAAAA + AAAAABEAAAAAABEAAAAAAAAAEREREREREREREQAAAAAAAAAAEQAAAAAAEQAAAAAAAAARERERERERERER + AAAAAAAAAAAAAAAAABERAAAAAAAAABEREREREREREREAAAAAAAAAAAAAAAAAEREAAAAAAAAAABERERER + EREREQAAAAAAAAAAAAAzEREREQAAAAAAAAAAERERERERERERAAAAAAAAAAAAADMRERERAAAAAAAAABEA + ERERERERERERAAAAAAAAAAAREREAAAAAAAAAAAAAEQAREREREREREREAAAAAAAAAABEREQAAAAAAAAAA + AAAAAAAAEREREREREQAAAAAAAAAAEQAAEREREREAEREAAAAAAAARERERERERAAAAAAAAAAARAAARERER + EQAREQAAAAAAABEREREREREAAAAAAAAAABEAEREAABEREREREQAAAAAAEREREREREQAAAAAAAAAAEQAR + EQAAERERERERAAAAAAAAAAAAAAAAAAAAAAAAABEAEREAABERMzMzERERAAAAAAAAAAAAAAAAAAAAAAAA + EQAREQAAEREzMzMREREAAAAAAAARERERAAAAAAAAABERABEAADMzMzMzMzMREQAAAAAAABEREREAAAAA + AAAAEREAEQAAMzMzMzMzMxERAAAAAAAAABERAAAAAAAAAAAAABEAAAAAMzMzETMzEREAAAAAAAAAEREA + AAAAAAAAAAAAEQAAAAAzMzMRMzMREQAAAAAAAAAAAAAAAAAAAAAAEREAEREAADMzMzMREREAAAAAAAAA + AAAAAAAAAAAAAAAREQAREQAAMzMzMxEREQAAAAAAABEAAAARAAAAAAARERERAAAAAAAzABEzEQARAAAA + AAAAEQAAABEAAAAAABEREREAAAAAADMAETMRABEAAAAAAAAAAAAREQAAAAAAERERERERAAAAMxERABER + AAAAAAAAAAAAABERAAAAAAAREREREREAAAAzEREAEREAAAAAAAAAAAAREQAREQAREREREREAABEzABER + EREREQAAAAAAAAAAABERABERABEREREREQAAETMAERERERERAAAAAAAAEQAAEQAAEQAAEREREREAEQAA + ABEREQAREREAAAAAAAARAAARAAARAAAREREREQARAAAAERERABEREQAAAAAAAAAAAAAAABEAERERMxER + ADMREREREQARERERAAAAAAAAAAAAAAAAEQAREREzEREAMxERERERABEREREAAAAAAAAAAAAAABERABER + ETMREREAABEREQAAABEREREAAAAAAAAAAAAAEREAERERMxEREQAAERERAAAAEREREQAAAAAAAAAAAAAR + ABEREREzMxEzEQARABEAAAAAABEREQAAAAAAAAAAABEAERERETMzETMRABEAEQAAAAAAERERAAAAEQAA + AAAAAAARABERERERETMRERERAAAAAAAAABEAAAARAAAAAAAAABEAERERERERMxEREREAAAAAAAAAEQAA + AAARAAAAAAARAAARERERETMRERERAAAAAAAAAAAAAAAAABEAAAAAABEAABERERERMxEREREAAAAAAAAA + AAAAAAAAAAAAAAAAAAARERERERERERERAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEREREREREREREAAAAA + AAAAAAAAAAAAAAAAEQARABERAAAAAAAREREAAAAAAAAAAAAAAAAAAAAAAAARABEAEREAAAAAABEREQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + EQAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAAAREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + EQAAABERAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAREQARAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAABERABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgA + AABAAAAAgAAAAAEACAAAAAAAABAAAAAAAAAAAAAAAAEAAAABAAAAAP8AAP8AAP8AAAAA//8A//8AAP8A + /wDAwMAA//jwANfr+gDU/38A/wAAAOIrigAqKqUAAAAAAAQEBAAICAgADAwMABEREQAWFhYAHBwcACIi + IgApKSkAMzMzADk5OQBCQkIATU1NAFVVVQBgYGAAZmZmAHBwcACAgIAAjIyMAJSUlACZmZkApKSkAKys + rAC2trYAwMDAAMzMzADU1NQA2traAODg4ADs7OwA+Pj4APv7+wD///8AMwAAAGYAAACZAAAAzAAAAP8A + AAAAMwAAMzMAAGYzAACZMwAAzDMAAP8zAAAAZgAAM2YAAGZmAACZZgAAzGYAAP9mAAAAmQAAM5kAAGaZ + AACZmQAAzJkAAP+ZAAAAzAAAM8wAAGbMAACZzAAAzMwAAP/MAAAA/wAAM/8AAGb/AACZ/wAAzP8AAP// + AAAAADMAMwAzAGYAMwCZADMAzAAzAP8AMwAAMzMAZjMzAJkzMwDMMzMA/zMzAABmMwAzZjMAZmYzAJlm + MwDMZjMA/2YzAACZMwAzmTMAZpkzAJmZMwDMmTMA/5kzAADMMwAzzDMAZswzAJnMMwDMzDMA/8wzAAD/ + MwAz/zMAZv8zAJn/MwDM/zMA//8zAAAAZgAzAGYAZgBmAJkAZgDMAGYA/wBmAAAzZgAzM2YAZjNmAJkz + ZgDMM2YA/zNmAABmZgAzZmYAmWZmAMxmZgD/ZmYAAJlmADOZZgBmmWYAmZlmAMyZZgD/mWYAAMxmADPM + ZgBmzGYAmcxmAMzMZgD/zGYAAP9mADP/ZgBm/2YAmf9mAMz/ZgD//2YAAACZADMAmQBmAJkAmQCZAMwA + mQD/AJkAADOZADMzmQBmM5kAmTOZAMwzmQD/M5kAAGaZADNmmQBmZpkAmWaZAMxmmQD/ZpkAAJmZADOZ + mQBmmZkAzJmZAP+ZmQABzJkAM8yZAGbMmQCZzJkAzMyZAP/MmQAA/5kAM/+ZAGb/mQCZ/5kAzP+ZAP// + mQAAAMwAMwDMAGYAzACZAMwAzADMAP8AzAAAM8wAMzPMAGYzzACZM8wAzDPMAP8zzAAAZswAM2bMAGZm + zACZZswAzGbMAP9mzAAAmcwAM5nMAGaZzACZmcwAzJnMAP+ZzAAAzMwAM8zMAGbMzACZzMwA/8zMAAD/ + zAAz/8wAZv/MAJn/zADM/8wA///MAAAA/wAzAP8AZgD/AJkA/wDMAP8A/wD/AAAz/wAzM/8AZjP/AJkz + /wDMM/8A/zP/AABm/wAzZv8AZmb/AJlm/wDMZv8A/2b/AACZ/wAzmf8AZpn/AJmZ/wDMmf8A/5n/AADM + /wAzzP8AZsz/AJnM/wDMzP8A/8z/AAD//wAz//8AZv//AJn//wDM//8An5+fn5+fn5+fn5+fn58dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+f + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+f + n5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+f + n5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+f + n5+fn5+fn5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fn5+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn5+fn5+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHZ+fHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fHR0dHR0dHR2fnx0dHR0dHR0dHR0dHR0dn58dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fnx0dHR0dHR0dn58dHR0dHR0dHR0dHR0dHZ+fHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR2fnx0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0d + n58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0d + HR0dHR0dn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0d + HR0dHR0dHR0dHZ+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fn5+fn5+fnx0d + HR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dHR2fnx0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn5+fn5+f + n58dHR0dHR0dHR0dHR0dHR0dn58dHR0dHR0dHR0dn58dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+f + n5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+f + n5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fnx0dHR0dHR0dHR0dHR0dHR2fn5+f + n5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHa2tn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0d + n5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR2trZ+fn5+fn5+fHR0dHR0dHR0dHR0d + HR2fnx0dn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHZ+fn5+fnx0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHZ+fn5+fn5+fn5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR2fn5+fn58dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dn58dHR0dn5+fn5+f + n5+fnx0dn5+fnx0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHZ+fHR0dHZ+f + n5+fn5+fn58dHZ+fn58dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR2fnx0d + n5+fnx0dHR2fn5+fn5+fn5+fn58dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0d + n58dHZ+fn58dHR0dn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fnx0dn5+fnx0dHR2fn5+fra2tra2tn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHZ+fn58dHR0dn5+fn62tra2trZ+fn5+fnx0dHR0dHR0dHR0dHZ+fn5+fn5+fHR0dHR0d + HR0dHR0dHR2fn5+fHR2fnx0dHR2tra2tra2tra2tra2trZ+fn58dHR0dHR0dHR0dHR2fn5+fn5+fnx0d + HR0dHR0dHR0dHR0dn5+fnx0dn58dHR0dra2tra2tra2tra2tra2fn5+fHR0dHR0dHR0dHR0dHR2fn5+f + HR0dHR0dHR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dra2tra2tn5+tra2tn5+fnx0dHR0dHR0dHR0dHR0d + n5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dn58dHR0dHR0dHa2tra2trZ+fra2trZ+fn58dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fnx0dn5+fnx0dHR2tra2tra2trZ+fn5+fnx0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn58dHZ+fn58dHR0dra2tra2tra2fn5+fn58dHR0d + HR0dHR0dHR2fnx0dHR0dHZ+fHR0dHR0dHR0dHZ+fn5+fn5+fHR0dHR0dHR0dHa2tHR2fn62tn58dHZ+f + HR0dHR0dHR0dHR0dn58dHR0dHR2fnx0dHR0dHR0dHR2fn5+fn5+fnx0dHR0dHR0dHR2trR0dn5+trZ+f + HR2fnx0dHR0dHR0dHR0dHR0dHR0dHZ+fn58dHR0dHR0dHR0dn5+fn5+fn5+fn5+fHR0dHR0dra2fn5+f + HR2fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR0dHR0dHR0dHZ+fn5+fn5+fn5+fnx0dHR0dHa2t + n5+fnx0dn5+fnx0dHR0dHR0dHR0dHR0dHR0dHZ+fn58dHZ+fn58dHZ+fn5+fn5+fn5+fnx0dHR2fn62t + HR2fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR2fn5+fHR2fn5+fn5+fn5+fn58dHR0d + n5+trR0dn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dn58dHR0dn58dHR0dn58dHR0dn5+fn5+fn5+fnx0d + n58dHR0dHR2fn5+fn58dHZ+fn5+fnx0dHR0dHR0dHR0dHZ+fHR0dHZ+fHR0dHZ+fHR0dHZ+fn5+fn5+f + n58dHZ+fHR0dHR0dn5+fn5+fHR2fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fnx0dn5+fn5+f + ra2fn5+fHR2trZ+fn5+fn5+fn58dHZ+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn58dHZ+f + n5+fn62tn5+fnx0dra2fn5+fn5+fn5+fHR2fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+f + HR2fn5+fn5+trZ+fn5+fnx0dHR2fn5+fn58dHR0dHR2fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0d + n5+fnx0dn5+fn5+fra2fn5+fn58dHR0dn5+fn5+fHR0dHR0dn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0d + HR0dHZ+fHR2fn5+fn5+fn62tra2fn62tn58dHZ+fHR2fnx0dHR0dHR0dHR2fn5+fn58dHR0dHR0dHR0d + HR0dHR0dHR2fnx0dn5+fn5+fn5+tra2tn5+trZ+fHR2fnx0dn58dHR0dHR0dHR0dn5+fn5+fHR0dHR0d + n58dHR0dHR0dHR0dHR0dHZ+fHR2fn5+fn5+fn5+fn5+trZ+fn5+fn5+fHR0dHR0dHR0dHR0dHR2fnx0d + HR0dHZ+fHR0dHR0dHR0dHR0dHR2fnx0dn5+fn5+fn5+fn5+fra2fn5+fn5+fnx0dHR0dHR0dHR0dHR0d + n58dHR0dHR0dHZ+fHR0dHR0dHR0dHZ+fHR0dHZ+fn5+fn5+fn5+trZ+fn5+fn5+fHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dHR2fnx0dHR2fn5+fn5+fn5+fra2fn5+fn5+fnx0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fn5+fn5+fnx0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn58dHZ+fHR2fn5+fHR0dHR0dHR0dHZ+fn5+fnx0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fHR2fnx0dn5+fnx0dHR0dHR0dHR2fn5+f + n58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fnx0dHR2fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHR0dn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fnx0dHR0dHZ+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHR0dHR2fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHZ+fn58dHZ+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR2fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAIAAAAAAAQAAAQAYAAAAAAAAwAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAIAAAAAAAQAAAQAIAAAAAAAAQAAAAAAAAAAA + AAAAAQAAAAEAAAAA/wAA/wAA/wAAAAD//wD//wAA/wD/AMDAwAD/+PAA1+v6ANT/fwD/AAAA4iuKACoq + pQAAAAAABAQEAAgICAAMDAwAERERABYWFgAcHBwAIiIiACkpKQAzMzMAOTk5AEJCQgBNTU0AVVVVAGBg + YABmZmYAcHBwAICAgACMjIwAlJSUAJmZmQCkpKQArKysALa2tgDAwMAAzMzMANTU1ADa2toA4ODgAOzs + 7AD4+PgA+/v7AP///wAzAAAAZgAAAJkAAADMAAAA/wAAAAAzAAAzMwAAZjMAAJkzAADMMwAA/zMAAABm + AAAzZgAAZmYAAJlmAADMZgAA/2YAAACZAAAzmQAAZpkAAJmZAADMmQAA/5kAAADMAAAzzAAAZswAAJnM + AADMzAAA/8wAAAD/AAAz/wAAZv8AAJn/AADM/wAA//8AAAAAMwAzADMAZgAzAJkAMwDMADMA/wAzAAAz + MwBmMzMAmTMzAMwzMwD/MzMAAGYzADNmMwBmZjMAmWYzAMxmMwD/ZjMAAJkzADOZMwBmmTMAmZkzAMyZ + MwD/mTMAAMwzADPMMwBmzDMAmcwzAMzMMwD/zDMAAP8zADP/MwBm/zMAmf8zAMz/MwD//zMAAABmADMA + ZgBmAGYAmQBmAMwAZgD/AGYAADNmADMzZgBmM2YAmTNmAMwzZgD/M2YAAGZmADNmZgCZZmYAzGZmAP9m + ZgAAmWYAM5lmAGaZZgCZmWYAzJlmAP+ZZgAAzGYAM8xmAGbMZgCZzGYAzMxmAP/MZgAA/2YAM/9mAGb/ + ZgCZ/2YAzP9mAP//ZgAAAJkAMwCZAGYAmQCZAJkAzACZAP8AmQAAM5kAMzOZAGYzmQCZM5kAzDOZAP8z + mQAAZpkAM2aZAGZmmQCZZpkAzGaZAP9mmQAAmZkAM5mZAGaZmQDMmZkA/5mZAAHMmQAzzJkAZsyZAJnM + mQDMzJkA/8yZAAD/mQAz/5kAZv+ZAJn/mQDM/5kA//+ZAAAAzAAzAMwAZgDMAJkAzADMAMwA/wDMAAAz + zAAzM8wAZjPMAJkzzADMM8wA/zPMAABmzAAzZswAZmbMAJlmzADMZswA/2bMAACZzAAzmcwAZpnMAJmZ + zADMmcwA/5nMAADMzAAzzMwAZszMAJnMzAD/zMwAAP/MADP/zABm/8wAmf/MAMz/zAD//8wAAAD/ADMA + /wBmAP8AmQD/AMwA/wD/AP8AADP/ADMz/wBmM/8AmTP/AMwz/wD/M/8AAGb/ADNm/wBmZv8AmWb/AMxm + /wD/Zv8AAJn/ADOZ/wBmmf8AmZn/AMyZ/wD/mf8AAMz/ADPM/wBmzP8Amcz/AMzM/wD/zP8AAP//ADP/ + /wBm//8Amf//AMz//wCfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pra2trZ+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+tra2tn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD62tra2fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+f + n5+tra2tra2tra2tra2fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8P + Dw+fn5+fn5+fn62tra2tra2tra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+f + n58PDw8PDw8PD5+fn5+fn5+fra2tra2tra2tra2tn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8P + Dw+fn5+fDw8PDw8PDw+tra2tra2tra2tra2tra2tra2tra2tra2tra2tn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PD5+fn58PDw8PDw8PD62tra2tra2tra2tra2tra2tra2tra2tra2tra2fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8Pn5+fnw8PDw8PDw8Pra2tra2tra2tra2tra2tra2tra2tra2tra2trZ+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw+fn5+fDw8PDw8PDw+tra2tra2tra2tra2tra2tra2tra2t + ra2tra2tn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+fn58PDw8PDw8PD62tra2tra2tra2tra2t + ra2tra2tra2tra2tra2fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PD62t + ra2tra2tra2trZ+fn5+tra2tra2trZ+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8Pra2tra2tra2tra2tn5+fn62tra2tra2tn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PDw8PDw+tra2tra2tra2tra2fn5+fra2tra2tra2fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n58PDw8Pn5+fn5+fn58PDw8PDw8PD62tra2tra2tra2tra2tra2fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pra2tra2tra2tra2tra2trZ+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw+tra2tra2tra2tra2tra2tn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PD62tra2tra2tra2tra2t + ra2fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pra2tra2t + ra2tra2tra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw+tra2tDw8PD5+fn5+tra2tn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PD62tra0PDw8Pn5+fn62tra2fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pra2trQ8PDw+fn5+fra2trZ+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw+tra2tn5+fn5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PD62tra2fn5+fn5+fnw8PDw+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8Pra2trZ+fn5+fn5+fDw8PD5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw+tra2tn5+fn5+f + n58PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PD62t + ra2fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PD5+fn5+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8Pn5+fn62t + ra0PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw+fn5+fra2trQ8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PD5+fn5+tra2tDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PD5+fn58PDw8PDw8PD5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fDw8PD5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+fn58PDw8PDw8PD5+f + n58PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n58PDw8Pn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fnw8P + Dw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fnw8PDw+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fn5+fn62tra2fn5+fn5+fnw8PDw+tra2tn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fDw8PD62t + ra2fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+tra2tn5+fn5+f + n58PDw8Pra2trZ+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+fn5+fn5+fn5+fn62t + ra2fn5+fn5+fn5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+f + n5+fn5+fra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8P + Dw+fn5+fn5+fn5+fn5+tra2tn5+fn5+fn5+fn5+fDw8PDw8PDw+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PD5+fn5+fn5+fn5+fn62tra2fn5+fn5+fn5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn5+tra2tra2trZ+fn5+tra2tn5+fnw8P + Dw+fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn62tra2tra2tn5+fn62t + ra2fn5+fDw8PD5+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fra2tra2t + ra2fn5+fra2trZ+fn58PDw8Pn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+tra2tn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn62tra2fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+tra2tn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fra2trZ+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+tra2tn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn62tra2fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8Pn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n58PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + + + \ No newline at end of file diff --git a/Server.MirForms/Database/ItemInfoForm.Designer.cs b/Server.MirForms/Database/ItemInfoForm.Designer.cs new file mode 100644 index 0000000..88d9777 --- /dev/null +++ b/Server.MirForms/Database/ItemInfoForm.Designer.cs @@ -0,0 +1,2472 @@ +namespace Server +{ + partial class ItemInfoForm + { + /// + /// 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(ItemInfoForm)); + DamageReductiontextBox = new TextBox(); + label64 = new Label(); + GoldRatetextBox = new TextBox(); + label63 = new Label(); + DropRatetextBox = new TextBox(); + label62 = new Label(); + ExpRatetextBox = new TextBox(); + label61 = new Label(); + MaxSCRatetextBox = new TextBox(); + label60 = new Label(); + MaxMCRatetextBox = new TextBox(); + label59 = new Label(); + MaxDCRatetextBox = new TextBox(); + label58 = new Label(); + ItemInfoPanel = new Panel(); + tabControl1 = new TabControl(); + tabPage1 = new TabPage(); + label57 = new Label(); + SlotsTextBox = new TextBox(); + globalDropNotify_CheckBox = new CheckBox(); + CanAwaken = new CheckBox(); + label56 = new Label(); + TooltipTextBox = new TextBox(); + FastRunCheckBox = new CheckBox(); + label55 = new Label(); + IGradeComboBox = new ComboBox(); + RandomStatstextBox = new TextBox(); + label54 = new Label(); + LightIntensitytextBox = new TextBox(); + label53 = new Label(); + NeedIdentifycheckbox = new CheckBox(); + label1 = new Label(); + ItemIndexTextBox = new TextBox(); + StartItemCheckBox = new CheckBox(); + ClassBasedcheckbox = new CheckBox(); + LevelBasedcheckbox = new CheckBox(); + ShowGroupPickupcheckbox = new CheckBox(); + label3 = new Label(); + ItemNameTextBox = new TextBox(); + label2 = new Label(); + EffectTextBox = new TextBox(); + ITypeComboBox = new ComboBox(); + label34 = new Label(); + label4 = new Label(); + PriceTextBox = new TextBox(); + RTypeComboBox = new ComboBox(); + label12 = new Label(); + DuraTextBox = new TextBox(); + label5 = new Label(); + label11 = new Label(); + RClassComboBox = new ComboBox(); + LightTextBox = new TextBox(); + label6 = new Label(); + label9 = new Label(); + RAmountTextBox = new TextBox(); + WeightTextBox = new TextBox(); + label10 = new Label(); + label8 = new Label(); + ImageTextBox = new TextBox(); + ShapeTextBox = new TextBox(); + SSizeTextBox = new TextBox(); + label7 = new Label(); + label13 = new Label(); + label33 = new Label(); + RGenderComboBox = new ComboBox(); + ISetComboBox = new ComboBox(); + label35 = new Label(); + tabPage2 = new TabPage(); + groupBox1 = new GroupBox(); + label50 = new Label(); + label52 = new Label(); + label49 = new Label(); + ReflecttextBox = new TextBox(); + HpDrainRatetextBox = new TextBox(); + CriticalDamagetextBox = new TextBox(); + CriticalRatetextBox = new TextBox(); + label51 = new Label(); + label37 = new Label(); + label14 = new Label(); + MinACTextBox = new TextBox(); + MPratetextbox = new TextBox(); + label15 = new Label(); + label48 = new Label(); + MaxACTextBox = new TextBox(); + label17 = new Label(); + MinMACTextBox = new TextBox(); + label16 = new Label(); + MaxMACTextBox = new TextBox(); + label21 = new Label(); + MinDCTextBox = new TextBox(); + label20 = new Label(); + MaxDCTextBox = new TextBox(); + label19 = new Label(); + PoisonAttacktextbox = new TextBox(); + MinMCTextBox = new TextBox(); + label47 = new Label(); + label18 = new Label(); + Freezingtextbox = new TextBox(); + MaxMCTextBox = new TextBox(); + label46 = new Label(); + label23 = new Label(); + Holytextbox = new TextBox(); + MinSCTextBox = new TextBox(); + label45 = new Label(); + label22 = new Label(); + HPratetextbox = new TextBox(); + MaxSCTextBox = new TextBox(); + label44 = new Label(); + label25 = new Label(); + PoisonRecoverytextBox = new TextBox(); + HPTextBox = new TextBox(); + label43 = new Label(); + label24 = new Label(); + SpellRecoverytextBox = new TextBox(); + MPTextBox = new TextBox(); + label42 = new Label(); + label27 = new Label(); + PoisonResisttextBox = new TextBox(); + AccuracyTextBox = new TextBox(); + label41 = new Label(); + label26 = new Label(); + MagicResisttextBox = new TextBox(); + AgilityTextBox = new TextBox(); + label40 = new Label(); + label29 = new Label(); + HealthRecoveryTextbox = new TextBox(); + ASpeedTextBox = new TextBox(); + label39 = new Label(); + label28 = new Label(); + StrongTextbox = new TextBox(); + LuckTextBox = new TextBox(); + label38 = new Label(); + label31 = new Label(); + MacRateTextbox = new TextBox(); + BWeightText = new TextBox(); + label30 = new Label(); + ACRateTextbox = new TextBox(); + HWeightTextBox = new TextBox(); + label36 = new Label(); + label32 = new Label(); + WWeightTextBox = new TextBox(); + tabPage3 = new TabPage(); + noMailBox = new CheckBox(); + unableToDisassemble_CheckBox = new CheckBox(); + unableToRent_CheckBox = new CheckBox(); + NoWeddingRingcheckbox = new CheckBox(); + BreakOnDeathcheckbox = new CheckBox(); + Bind_DontSpecialRepaircheckBox = new CheckBox(); + Bind_dontdropcheckbox = new CheckBox(); + BindOnEquipcheckbox = new CheckBox(); + Bind_dontdeathdropcheckbox = new CheckBox(); + Bind_dontstorecheckbox = new CheckBox(); + Bind_destroyondropcheckbox = new CheckBox(); + Bind_dontupgradecheckbox = new CheckBox(); + Bind_dontsellcheckbox = new CheckBox(); + Bind_dontrepaircheckbox = new CheckBox(); + Bind_donttradecheckbox = new CheckBox(); + tabPage4 = new TabPage(); + PickaxecheckBox = new CheckBox(); + NoDuraLosscheckBox = new CheckBox(); + SkillcheckBox = new CheckBox(); + ProbecheckBox = new CheckBox(); + HealingcheckBox = new CheckBox(); + FlamecheckBox = new CheckBox(); + MusclecheckBox = new CheckBox(); + RevivalcheckBox = new CheckBox(); + ProtectioncheckBox = new CheckBox(); + ClearcheckBox = new CheckBox(); + TeleportcheckBox = new CheckBox(); + ParalysischeckBox = new CheckBox(); + BlinkcheckBox = new CheckBox(); + RemoveButton = new Button(); + AddButton = new Button(); + ItemInfoListBox = new ListBox(); + PasteButton = new Button(); + CopyMButton = new Button(); + ITypeFilterComboBox = new ComboBox(); + Gameshop_button = new Button(); + ItemInfoPanel.SuspendLayout(); + tabControl1.SuspendLayout(); + tabPage1.SuspendLayout(); + tabPage2.SuspendLayout(); + groupBox1.SuspendLayout(); + tabPage3.SuspendLayout(); + tabPage4.SuspendLayout(); + SuspendLayout(); + // + // DamageReductiontextBox + // + DamageReductiontextBox.Location = new Point(622, 298); + DamageReductiontextBox.Margin = new Padding(4, 3, 4, 3); + DamageReductiontextBox.MaxLength = 3; + DamageReductiontextBox.Name = "DamageReductiontextBox"; + DamageReductiontextBox.Size = new Size(34, 23); + DamageReductiontextBox.TabIndex = 139; + DamageReductiontextBox.TextChanged += DamageReductiontextBox_TextChanged; + // + // label64 + // + label64.AutoSize = true; + label64.Location = new Point(451, 301); + label64.Margin = new Padding(4, 0, 4, 0); + label64.Name = "label64"; + label64.Size = new Size(138, 15); + label64.TabIndex = 137; + label64.Text = "All Damage Reduction %"; + // + // GoldRatetextBox + // + GoldRatetextBox.Location = new Point(603, 82); + GoldRatetextBox.Margin = new Padding(4, 3, 4, 3); + GoldRatetextBox.MaxLength = 3; + GoldRatetextBox.Name = "GoldRatetextBox"; + GoldRatetextBox.Size = new Size(34, 23); + GoldRatetextBox.TabIndex = 136; + GoldRatetextBox.TextChanged += GoldRatetextBox_TextChanged; + // + // label63 + // + label63.AutoSize = true; + label63.Location = new Point(502, 85); + label63.Margin = new Padding(4, 0, 4, 0); + label63.Name = "label63"; + label63.Size = new Size(74, 15); + label63.TabIndex = 135; + label63.Text = "Gold Rate %:"; + // + // DropRatetextBox + // + DropRatetextBox.Location = new Point(603, 46); + DropRatetextBox.Margin = new Padding(4, 3, 4, 3); + DropRatetextBox.MaxLength = 3; + DropRatetextBox.Name = "DropRatetextBox"; + DropRatetextBox.Size = new Size(34, 23); + DropRatetextBox.TabIndex = 134; + DropRatetextBox.TextChanged += DropRatetextBox_TextChanged; + // + // label62 + // + label62.AutoSize = true; + label62.Location = new Point(500, 50); + label62.Margin = new Padding(4, 0, 4, 0); + label62.Name = "label62"; + label62.Size = new Size(75, 15); + label62.TabIndex = 133; + label62.Text = "Drop Rate %:"; + // + // ExpRatetextBox + // + ExpRatetextBox.Location = new Point(603, 12); + ExpRatetextBox.Margin = new Padding(4, 3, 4, 3); + ExpRatetextBox.MaxLength = 3; + ExpRatetextBox.Name = "ExpRatetextBox"; + ExpRatetextBox.Size = new Size(34, 23); + ExpRatetextBox.TabIndex = 132; + ExpRatetextBox.TextChanged += ExpRatetextBox_TextChanged; + // + // label61 + // + label61.AutoSize = true; + label61.Location = new Point(505, 15); + label61.Margin = new Padding(4, 0, 4, 0); + label61.Name = "label61"; + label61.Size = new Size(68, 15); + label61.TabIndex = 130; + label61.Text = "Exp Rate %:"; + // + // MaxSCRatetextBox + // + MaxSCRatetextBox.Location = new Point(446, 78); + MaxSCRatetextBox.Margin = new Padding(4, 3, 4, 3); + MaxSCRatetextBox.MaxLength = 3; + MaxSCRatetextBox.Name = "MaxSCRatetextBox"; + MaxSCRatetextBox.Size = new Size(34, 23); + MaxSCRatetextBox.TabIndex = 131; + MaxSCRatetextBox.TextChanged += MaxSCRatetextBox_TextChanged; + // + // label60 + // + label60.AutoSize = true; + label60.Location = new Point(365, 85); + label60.Margin = new Padding(4, 0, 4, 0); + label60.Name = "label60"; + label60.Size = new Size(63, 15); + label60.TabIndex = 130; + label60.Text = "Max SC %:"; + // + // MaxMCRatetextBox + // + MaxMCRatetextBox.Location = new Point(446, 45); + MaxMCRatetextBox.Margin = new Padding(4, 3, 4, 3); + MaxMCRatetextBox.MaxLength = 3; + MaxMCRatetextBox.Name = "MaxMCRatetextBox"; + MaxMCRatetextBox.Size = new Size(34, 23); + MaxMCRatetextBox.TabIndex = 127; + MaxMCRatetextBox.TextChanged += MaxMCRatetextBox_TextChanged; + // + // label59 + // + label59.AutoSize = true; + label59.Location = new Point(363, 50); + label59.Margin = new Padding(4, 0, 4, 0); + label59.Name = "label59"; + label59.Size = new Size(68, 15); + label59.TabIndex = 129; + label59.Text = "Max MC %:"; + // + // MaxDCRatetextBox + // + MaxDCRatetextBox.Location = new Point(446, 12); + MaxDCRatetextBox.Margin = new Padding(4, 3, 4, 3); + MaxDCRatetextBox.MaxLength = 3; + MaxDCRatetextBox.Name = "MaxDCRatetextBox"; + MaxDCRatetextBox.Size = new Size(34, 23); + MaxDCRatetextBox.TabIndex = 127; + MaxDCRatetextBox.TextChanged += MaxDCRatetextBox_TextChanged; + // + // label58 + // + label58.AutoSize = true; + label58.Location = new Point(364, 15); + label58.Margin = new Padding(4, 0, 4, 0); + label58.Name = "label58"; + label58.Size = new Size(65, 15); + label58.TabIndex = 128; + label58.Text = "Max DC %:"; + // + // ItemInfoPanel + // + ItemInfoPanel.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; + ItemInfoPanel.Controls.Add(tabControl1); + ItemInfoPanel.Enabled = false; + ItemInfoPanel.Location = new Point(203, 47); + ItemInfoPanel.Margin = new Padding(4, 3, 4, 3); + ItemInfoPanel.Name = "ItemInfoPanel"; + ItemInfoPanel.Size = new Size(730, 488); + ItemInfoPanel.TabIndex = 11; + // + // tabControl1 + // + tabControl1.Controls.Add(tabPage1); + tabControl1.Controls.Add(tabPage2); + tabControl1.Controls.Add(tabPage3); + tabControl1.Controls.Add(tabPage4); + tabControl1.Location = new Point(4, 3); + tabControl1.Margin = new Padding(4, 3, 4, 3); + tabControl1.Name = "tabControl1"; + tabControl1.SelectedIndex = 0; + tabControl1.Size = new Size(710, 480); + tabControl1.TabIndex = 117; + // + // tabPage1 + // + tabPage1.Controls.Add(label57); + tabPage1.Controls.Add(SlotsTextBox); + tabPage1.Controls.Add(globalDropNotify_CheckBox); + tabPage1.Controls.Add(CanAwaken); + tabPage1.Controls.Add(label56); + tabPage1.Controls.Add(TooltipTextBox); + tabPage1.Controls.Add(FastRunCheckBox); + tabPage1.Controls.Add(label55); + tabPage1.Controls.Add(IGradeComboBox); + tabPage1.Controls.Add(RandomStatstextBox); + tabPage1.Controls.Add(label54); + tabPage1.Controls.Add(LightIntensitytextBox); + tabPage1.Controls.Add(label53); + tabPage1.Controls.Add(NeedIdentifycheckbox); + tabPage1.Controls.Add(label1); + tabPage1.Controls.Add(ItemIndexTextBox); + tabPage1.Controls.Add(StartItemCheckBox); + tabPage1.Controls.Add(ClassBasedcheckbox); + tabPage1.Controls.Add(LevelBasedcheckbox); + tabPage1.Controls.Add(ShowGroupPickupcheckbox); + tabPage1.Controls.Add(label3); + tabPage1.Controls.Add(ItemNameTextBox); + tabPage1.Controls.Add(label2); + tabPage1.Controls.Add(EffectTextBox); + tabPage1.Controls.Add(ITypeComboBox); + tabPage1.Controls.Add(label34); + tabPage1.Controls.Add(label4); + tabPage1.Controls.Add(PriceTextBox); + tabPage1.Controls.Add(RTypeComboBox); + tabPage1.Controls.Add(label12); + tabPage1.Controls.Add(DuraTextBox); + tabPage1.Controls.Add(label5); + tabPage1.Controls.Add(label11); + tabPage1.Controls.Add(RClassComboBox); + tabPage1.Controls.Add(LightTextBox); + tabPage1.Controls.Add(label6); + tabPage1.Controls.Add(label9); + tabPage1.Controls.Add(RAmountTextBox); + tabPage1.Controls.Add(WeightTextBox); + tabPage1.Controls.Add(label10); + tabPage1.Controls.Add(label8); + tabPage1.Controls.Add(ImageTextBox); + tabPage1.Controls.Add(ShapeTextBox); + tabPage1.Controls.Add(SSizeTextBox); + tabPage1.Controls.Add(label7); + tabPage1.Controls.Add(label13); + tabPage1.Controls.Add(label33); + tabPage1.Controls.Add(RGenderComboBox); + tabPage1.Controls.Add(ISetComboBox); + tabPage1.Controls.Add(label35); + tabPage1.Location = new Point(4, 24); + tabPage1.Margin = new Padding(4, 3, 4, 3); + tabPage1.Name = "tabPage1"; + tabPage1.Padding = new Padding(4, 3, 4, 3); + tabPage1.Size = new Size(702, 452); + tabPage1.TabIndex = 0; + tabPage1.Text = "General"; + tabPage1.UseVisualStyleBackColor = true; + // + // label57 + // + label57.AutoSize = true; + label57.Location = new Point(609, 118); + label57.Margin = new Padding(4, 0, 4, 0); + label57.Name = "label57"; + label57.Size = new Size(35, 15); + label57.TabIndex = 126; + label57.Text = "Slots:"; + // + // SlotsTextBox + // + SlotsTextBox.Location = new Point(654, 114); + SlotsTextBox.Margin = new Padding(4, 3, 4, 3); + SlotsTextBox.Name = "SlotsTextBox"; + SlotsTextBox.Size = new Size(34, 23); + SlotsTextBox.TabIndex = 125; + // + // globalDropNotify_CheckBox + // + globalDropNotify_CheckBox.AutoSize = true; + globalDropNotify_CheckBox.Location = new Point(546, 392); + globalDropNotify_CheckBox.Margin = new Padding(4, 3, 4, 3); + globalDropNotify_CheckBox.Name = "globalDropNotify_CheckBox"; + globalDropNotify_CheckBox.Size = new Size(140, 19); + globalDropNotify_CheckBox.TabIndex = 124; + globalDropNotify_CheckBox.Text = "Notify Server on Drop"; + globalDropNotify_CheckBox.UseVisualStyleBackColor = true; + globalDropNotify_CheckBox.CheckedChanged += globalDropNotify_CheckBox_CheckedChanged; + // + // CanAwaken + // + CanAwaken.AutoSize = true; + CanAwaken.Location = new Point(546, 366); + CanAwaken.Margin = new Padding(4, 3, 4, 3); + CanAwaken.Name = "CanAwaken"; + CanAwaken.Size = new Size(92, 19); + CanAwaken.TabIndex = 114; + CanAwaken.Text = "Can Awaken"; + CanAwaken.UseVisualStyleBackColor = true; + CanAwaken.CheckedChanged += CanAwakening_CheckedChanged; + // + // label56 + // + label56.AutoSize = true; + label56.Location = new Point(52, 269); + label56.Margin = new Padding(4, 0, 4, 0); + label56.Name = "label56"; + label56.Size = new Size(48, 15); + label56.TabIndex = 123; + label56.Text = "ToolTip:"; + // + // TooltipTextBox + // + TooltipTextBox.Location = new Point(114, 265); + TooltipTextBox.Margin = new Padding(4, 3, 4, 3); + TooltipTextBox.Multiline = true; + TooltipTextBox.Name = "TooltipTextBox"; + TooltipTextBox.Size = new Size(263, 174); + TooltipTextBox.TabIndex = 122; + TooltipTextBox.TextChanged += TooltipTextBox_TextChanged; + // + // FastRunCheckBox + // + FastRunCheckBox.AutoSize = true; + FastRunCheckBox.Location = new Point(546, 339); + FastRunCheckBox.Margin = new Padding(4, 3, 4, 3); + FastRunCheckBox.Name = "FastRunCheckBox"; + FastRunCheckBox.Size = new Size(71, 19); + FastRunCheckBox.TabIndex = 121; + FastRunCheckBox.Text = "Fast Run"; + FastRunCheckBox.UseVisualStyleBackColor = true; + FastRunCheckBox.CheckedChanged += FastRunCheckBox_CheckedChanged; + // + // label55 + // + label55.AutoSize = true; + label55.Location = new Point(33, 113); + label55.Margin = new Padding(4, 0, 4, 0); + label55.Name = "label55"; + label55.Size = new Size(68, 15); + label55.TabIndex = 120; + label55.Text = "Item Grade:"; + // + // IGradeComboBox + // + IGradeComboBox.DropDownStyle = ComboBoxStyle.DropDownList; + IGradeComboBox.FormattingEnabled = true; + IGradeComboBox.Location = new Point(114, 108); + IGradeComboBox.Margin = new Padding(4, 3, 4, 3); + IGradeComboBox.Name = "IGradeComboBox"; + IGradeComboBox.Size = new Size(107, 23); + IGradeComboBox.TabIndex = 119; + IGradeComboBox.SelectedIndexChanged += IGradeComboBox_SelectedIndexChanged; + // + // RandomStatstextBox + // + RandomStatstextBox.Location = new Point(426, 18); + RandomStatstextBox.Margin = new Padding(4, 3, 4, 3); + RandomStatstextBox.MaxLength = 3; + RandomStatstextBox.Name = "RandomStatstextBox"; + RandomStatstextBox.Size = new Size(34, 23); + RandomStatstextBox.TabIndex = 115; + RandomStatstextBox.TextChanged += RandomStatstextBox_TextChanged; + // + // label54 + // + label54.AutoSize = true; + label54.Location = new Point(329, 23); + label54.Margin = new Padding(4, 0, 4, 0); + label54.Name = "label54"; + label54.Size = new Size(83, 15); + label54.TabIndex = 114; + label54.Text = "Random Stats:"; + // + // LightIntensitytextBox + // + LightIntensitytextBox.Location = new Point(546, 174); + LightIntensitytextBox.Margin = new Padding(4, 3, 4, 3); + LightIntensitytextBox.MaxLength = 3; + LightIntensitytextBox.Name = "LightIntensitytextBox"; + LightIntensitytextBox.Size = new Size(34, 23); + LightIntensitytextBox.TabIndex = 112; + LightIntensitytextBox.TextChanged += LightIntensitytextBox_TextChanged; + // + // label53 + // + label53.AutoSize = true; + label53.Location = new Point(491, 177); + label53.Margin = new Padding(4, 0, 4, 0); + label53.Name = "label53"; + label53.Size = new Size(55, 15); + label53.TabIndex = 113; + label53.Text = "Intensity:"; + // + // NeedIdentifycheckbox + // + NeedIdentifycheckbox.AutoSize = true; + NeedIdentifycheckbox.Location = new Point(546, 284); + NeedIdentifycheckbox.Margin = new Padding(4, 3, 4, 3); + NeedIdentifycheckbox.Name = "NeedIdentifycheckbox"; + NeedIdentifycheckbox.Size = new Size(96, 19); + NeedIdentifycheckbox.TabIndex = 110; + NeedIdentifycheckbox.Text = "Mystery Stats"; + NeedIdentifycheckbox.UseVisualStyleBackColor = true; + NeedIdentifycheckbox.CheckedChanged += NeedIdentifycheckbox_CheckedChanged; + // + // label1 + // + label1.AutoSize = true; + label1.Location = new Point(36, 15); + label1.Margin = new Padding(4, 0, 4, 0); + label1.Name = "label1"; + label1.Size = new Size(66, 15); + label1.TabIndex = 4; + label1.Text = "Item Index:"; + // + // ItemIndexTextBox + // + ItemIndexTextBox.Location = new Point(114, 12); + ItemIndexTextBox.Margin = new Padding(4, 3, 4, 3); + ItemIndexTextBox.Name = "ItemIndexTextBox"; + ItemIndexTextBox.ReadOnly = true; + ItemIndexTextBox.Size = new Size(54, 23); + ItemIndexTextBox.TabIndex = 0; + // + // StartItemCheckBox + // + StartItemCheckBox.AutoSize = true; + StartItemCheckBox.Location = new Point(426, 284); + StartItemCheckBox.Margin = new Padding(4, 3, 4, 3); + StartItemCheckBox.Name = "StartItemCheckBox"; + StartItemCheckBox.Size = new Size(94, 19); + StartItemCheckBox.TabIndex = 63; + StartItemCheckBox.Text = "Starting Item"; + StartItemCheckBox.UseVisualStyleBackColor = true; + StartItemCheckBox.CheckedChanged += StartItemCheckBox_CheckedChanged; + // + // ClassBasedcheckbox + // + ClassBasedcheckbox.AutoSize = true; + ClassBasedcheckbox.Location = new Point(426, 312); + ClassBasedcheckbox.Margin = new Padding(4, 3, 4, 3); + ClassBasedcheckbox.Name = "ClassBasedcheckbox"; + ClassBasedcheckbox.Size = new Size(84, 19); + ClassBasedcheckbox.TabIndex = 100; + ClassBasedcheckbox.Text = "ClassBased"; + ClassBasedcheckbox.UseVisualStyleBackColor = true; + ClassBasedcheckbox.CheckedChanged += ClassBasedcheckbox_CheckedChanged; + // + // LevelBasedcheckbox + // + LevelBasedcheckbox.AutoSize = true; + LevelBasedcheckbox.Location = new Point(426, 339); + LevelBasedcheckbox.Margin = new Padding(4, 3, 4, 3); + LevelBasedcheckbox.Name = "LevelBasedcheckbox"; + LevelBasedcheckbox.Size = new Size(84, 19); + LevelBasedcheckbox.TabIndex = 101; + LevelBasedcheckbox.Text = "LevelBased"; + LevelBasedcheckbox.UseVisualStyleBackColor = true; + LevelBasedcheckbox.CheckedChanged += LevelBasedcheckbox_CheckedChanged; + // + // ShowGroupPickupcheckbox + // + ShowGroupPickupcheckbox.AutoSize = true; + ShowGroupPickupcheckbox.Location = new Point(546, 312); + ShowGroupPickupcheckbox.Margin = new Padding(4, 3, 4, 3); + ShowGroupPickupcheckbox.Name = "ShowGroupPickupcheckbox"; + ShowGroupPickupcheckbox.Size = new Size(130, 19); + ShowGroupPickupcheckbox.TabIndex = 111; + ShowGroupPickupcheckbox.Text = "Show Group Pickup"; + ShowGroupPickupcheckbox.UseVisualStyleBackColor = true; + ShowGroupPickupcheckbox.CheckedChanged += ShowGroupPickupcheckbox_CheckedChanged; + // + // label3 + // + label3.AutoSize = true; + label3.Location = new Point(33, 47); + label3.Margin = new Padding(4, 0, 4, 0); + label3.Name = "label3"; + label3.Size = new Size(69, 15); + label3.TabIndex = 8; + label3.Text = "Item Name:"; + // + // ItemNameTextBox + // + ItemNameTextBox.Location = new Point(114, 44); + ItemNameTextBox.Margin = new Padding(4, 3, 4, 3); + ItemNameTextBox.Name = "ItemNameTextBox"; + ItemNameTextBox.Size = new Size(134, 23); + ItemNameTextBox.TabIndex = 1; + ItemNameTextBox.TextChanged += ItemNameTextBox_TextChanged; + // + // label2 + // + label2.AutoSize = true; + label2.Location = new Point(38, 81); + label2.Margin = new Padding(4, 0, 4, 0); + label2.Name = "label2"; + label2.Size = new Size(61, 15); + label2.TabIndex = 10; + label2.Text = "Item Type:"; + // + // EffectTextBox + // + EffectTextBox.Location = new Point(654, 81); + EffectTextBox.Margin = new Padding(4, 3, 4, 3); + EffectTextBox.Name = "EffectTextBox"; + EffectTextBox.Size = new Size(34, 23); + EffectTextBox.TabIndex = 73; + EffectTextBox.TextChanged += EffectTextBox_TextChanged; + // + // ITypeComboBox + // + ITypeComboBox.DropDownStyle = ComboBoxStyle.DropDownList; + ITypeComboBox.FormattingEnabled = true; + ITypeComboBox.Location = new Point(114, 77); + ITypeComboBox.Margin = new Padding(4, 3, 4, 3); + ITypeComboBox.Name = "ITypeComboBox"; + ITypeComboBox.Size = new Size(107, 23); + ITypeComboBox.TabIndex = 5; + ITypeComboBox.SelectedIndexChanged += ITypeComboBox_SelectedIndexChanged; + // + // label34 + // + label34.AutoSize = true; + label34.Location = new Point(603, 84); + label34.Margin = new Padding(4, 0, 4, 0); + label34.Name = "label34"; + label34.Size = new Size(40, 15); + label34.TabIndex = 72; + label34.Text = "Effect:"; + // + // label4 + // + label4.AutoSize = true; + label4.Location = new Point(12, 143); + label4.Margin = new Padding(4, 0, 4, 0); + label4.Name = "label4"; + label4.Size = new Size(84, 15); + label4.TabIndex = 12; + label4.Text = "Required Type:"; + // + // PriceTextBox + // + PriceTextBox.Location = new Point(426, 230); + PriceTextBox.Margin = new Padding(4, 3, 4, 3); + PriceTextBox.MaxLength = 10; + PriceTextBox.Name = "PriceTextBox"; + PriceTextBox.Size = new Size(80, 23); + PriceTextBox.TabIndex = 8; + PriceTextBox.TextChanged += PriceTextBox_TextChanged; + // + // RTypeComboBox + // + RTypeComboBox.DropDownStyle = ComboBoxStyle.DropDownList; + RTypeComboBox.FormattingEnabled = true; + RTypeComboBox.Location = new Point(114, 138); + RTypeComboBox.Margin = new Padding(4, 3, 4, 3); + RTypeComboBox.Name = "RTypeComboBox"; + RTypeComboBox.Size = new Size(107, 23); + RTypeComboBox.TabIndex = 9; + RTypeComboBox.SelectedIndexChanged += RTypeComboBox_SelectedIndexChanged; + // + // label12 + // + label12.AutoSize = true; + label12.Location = new Point(379, 234); + label12.Margin = new Padding(4, 0, 4, 0); + label12.Name = "label12"; + label12.Size = new Size(36, 15); + label12.TabIndex = 28; + label12.Text = "Price:"; + // + // DuraTextBox + // + DuraTextBox.Location = new Point(426, 200); + DuraTextBox.Margin = new Padding(4, 3, 4, 3); + DuraTextBox.MaxLength = 5; + DuraTextBox.Name = "DuraTextBox"; + DuraTextBox.Size = new Size(46, 23); + DuraTextBox.TabIndex = 4; + DuraTextBox.TextChanged += DuraTextBox_TextChanged; + // + // label5 + // + label5.AutoSize = true; + label5.Location = new Point(8, 204); + label5.Margin = new Padding(4, 0, 4, 0); + label5.Name = "label5"; + label5.Size = new Size(87, 15); + label5.TabIndex = 14; + label5.Text = "Required Class:"; + // + // label11 + // + label11.AutoSize = true; + label11.Location = new Point(356, 204); + label11.Margin = new Padding(4, 0, 4, 0); + label11.Name = "label11"; + label11.Size = new Size(61, 15); + label11.TabIndex = 24; + label11.Text = "Durability:"; + // + // RClassComboBox + // + RClassComboBox.DropDownStyle = ComboBoxStyle.DropDownList; + RClassComboBox.FormattingEnabled = true; + RClassComboBox.Location = new Point(114, 201); + RClassComboBox.Margin = new Padding(4, 3, 4, 3); + RClassComboBox.Name = "RClassComboBox"; + RClassComboBox.Size = new Size(107, 23); + RClassComboBox.TabIndex = 11; + RClassComboBox.SelectedIndexChanged += RClassComboBox_SelectedIndexChanged; + // + // LightTextBox + // + LightTextBox.Location = new Point(426, 170); + LightTextBox.Margin = new Padding(4, 3, 4, 3); + LightTextBox.MaxLength = 3; + LightTextBox.Name = "LightTextBox"; + LightTextBox.Size = new Size(34, 23); + LightTextBox.TabIndex = 12; + LightTextBox.TextChanged += LightTextBox_TextChanged; + // + // label6 + // + label6.AutoSize = true; + label6.Location = new Point(312, 54); + label6.Margin = new Padding(4, 0, 4, 0); + label6.Name = "label6"; + label6.Size = new Size(104, 15); + label6.TabIndex = 16; + label6.Text = "Required Amount:"; + // + // label9 + // + label9.AutoSize = true; + label9.Location = new Point(341, 174); + label9.Margin = new Padding(4, 0, 4, 0); + label9.Name = "label9"; + label9.Size = new Size(73, 15); + label9.TabIndex = 22; + label9.Text = "Light Range:"; + // + // RAmountTextBox + // + RAmountTextBox.Location = new Point(426, 50); + RAmountTextBox.Margin = new Padding(4, 3, 4, 3); + RAmountTextBox.MaxLength = 3; + RAmountTextBox.Name = "RAmountTextBox"; + RAmountTextBox.Size = new Size(34, 23); + RAmountTextBox.TabIndex = 10; + RAmountTextBox.TextChanged += RAmountTextBox_TextChanged; + // + // WeightTextBox + // + WeightTextBox.Location = new Point(426, 140); + WeightTextBox.Margin = new Padding(4, 3, 4, 3); + WeightTextBox.MaxLength = 3; + WeightTextBox.Name = "WeightTextBox"; + WeightTextBox.Size = new Size(34, 23); + WeightTextBox.TabIndex = 2; + WeightTextBox.TextChanged += WeightTextBox_TextChanged; + // + // label10 + // + label10.AutoSize = true; + label10.Location = new Point(373, 81); + label10.Margin = new Padding(4, 0, 4, 0); + label10.Name = "label10"; + label10.Size = new Size(43, 15); + label10.TabIndex = 26; + label10.Text = "Image:"; + // + // label8 + // + label8.AutoSize = true; + label8.Location = new Point(371, 144); + label8.Margin = new Padding(4, 0, 4, 0); + label8.Name = "label8"; + label8.Size = new Size(48, 15); + label8.TabIndex = 20; + label8.Text = "Weight:"; + // + // ImageTextBox + // + ImageTextBox.Location = new Point(426, 80); + ImageTextBox.Margin = new Padding(4, 3, 4, 3); + ImageTextBox.MaxLength = 5; + ImageTextBox.Name = "ImageTextBox"; + ImageTextBox.Size = new Size(46, 23); + ImageTextBox.TabIndex = 3; + ImageTextBox.TextChanged += ImageTextBox_TextChanged; + // + // ShapeTextBox + // + ShapeTextBox.Location = new Point(546, 81); + ShapeTextBox.Margin = new Padding(4, 3, 4, 3); + ShapeTextBox.MaxLength = 3; + ShapeTextBox.Name = "ShapeTextBox"; + ShapeTextBox.Size = new Size(34, 23); + ShapeTextBox.TabIndex = 6; + ShapeTextBox.TextChanged += ShapeTextBox_TextChanged; + // + // SSizeTextBox + // + SSizeTextBox.Location = new Point(426, 110); + SSizeTextBox.Margin = new Padding(4, 3, 4, 3); + SSizeTextBox.MaxLength = 10; + SSizeTextBox.Name = "SSizeTextBox"; + SSizeTextBox.Size = new Size(80, 23); + SSizeTextBox.TabIndex = 7; + SSizeTextBox.TextChanged += SSizeTextBox_TextChanged; + // + // label7 + // + label7.AutoSize = true; + label7.Location = new Point(491, 84); + label7.Margin = new Padding(4, 0, 4, 0); + label7.Name = "label7"; + label7.Size = new Size(42, 15); + label7.TabIndex = 18; + label7.Text = "Shape:"; + // + // label13 + // + label13.AutoSize = true; + label13.Location = new Point(348, 114); + label13.Margin = new Padding(4, 0, 4, 0); + label13.Name = "label13"; + label13.Size = new Size(61, 15); + label13.TabIndex = 30; + label13.Text = "Stack Size:"; + // + // label33 + // + label33.AutoSize = true; + label33.Location = new Point(0, 173); + label33.Margin = new Padding(4, 0, 4, 0); + label33.Name = "label33"; + label33.Size = new Size(98, 15); + label33.TabIndex = 71; + label33.Text = "Required Gender:"; + // + // RGenderComboBox + // + RGenderComboBox.DropDownStyle = ComboBoxStyle.DropDownList; + RGenderComboBox.FormattingEnabled = true; + RGenderComboBox.Location = new Point(114, 170); + RGenderComboBox.Margin = new Padding(4, 3, 4, 3); + RGenderComboBox.Name = "RGenderComboBox"; + RGenderComboBox.Size = new Size(107, 23); + RGenderComboBox.TabIndex = 70; + RGenderComboBox.SelectedIndexChanged += RGenderComboBox_SelectedIndexChanged; + // + // ISetComboBox + // + ISetComboBox.DropDownStyle = ComboBoxStyle.DropDownList; + ISetComboBox.FormattingEnabled = true; + ISetComboBox.Location = new Point(114, 233); + ISetComboBox.Margin = new Padding(4, 3, 4, 3); + ISetComboBox.Name = "ISetComboBox"; + ISetComboBox.Size = new Size(107, 23); + ISetComboBox.TabIndex = 74; + ISetComboBox.SelectedIndexChanged += ISetComboBox_SelectedIndexChanged; + // + // label35 + // + label35.AutoSize = true; + label35.Location = new Point(49, 237); + label35.Margin = new Padding(4, 0, 4, 0); + label35.Name = "label35"; + label35.Size = new Size(53, 15); + label35.TabIndex = 75; + label35.Text = "Item Set:"; + // + // tabPage2 + // + tabPage2.Controls.Add(label64); + tabPage2.Controls.Add(DamageReductiontextBox); + tabPage2.Controls.Add(groupBox1); + tabPage2.Controls.Add(label37); + tabPage2.Controls.Add(label14); + tabPage2.Controls.Add(MinACTextBox); + tabPage2.Controls.Add(MPratetextbox); + tabPage2.Controls.Add(label15); + tabPage2.Controls.Add(label48); + tabPage2.Controls.Add(MaxACTextBox); + tabPage2.Controls.Add(label17); + tabPage2.Controls.Add(MinMACTextBox); + tabPage2.Controls.Add(label16); + tabPage2.Controls.Add(MaxMACTextBox); + tabPage2.Controls.Add(label21); + tabPage2.Controls.Add(MinDCTextBox); + tabPage2.Controls.Add(label20); + tabPage2.Controls.Add(MaxDCTextBox); + tabPage2.Controls.Add(label19); + tabPage2.Controls.Add(PoisonAttacktextbox); + tabPage2.Controls.Add(MinMCTextBox); + tabPage2.Controls.Add(label47); + tabPage2.Controls.Add(label18); + tabPage2.Controls.Add(Freezingtextbox); + tabPage2.Controls.Add(MaxMCTextBox); + tabPage2.Controls.Add(label46); + tabPage2.Controls.Add(label23); + tabPage2.Controls.Add(Holytextbox); + tabPage2.Controls.Add(MinSCTextBox); + tabPage2.Controls.Add(label45); + tabPage2.Controls.Add(label22); + tabPage2.Controls.Add(HPratetextbox); + tabPage2.Controls.Add(MaxSCTextBox); + tabPage2.Controls.Add(label44); + tabPage2.Controls.Add(label25); + tabPage2.Controls.Add(PoisonRecoverytextBox); + tabPage2.Controls.Add(HPTextBox); + tabPage2.Controls.Add(label43); + tabPage2.Controls.Add(label24); + tabPage2.Controls.Add(SpellRecoverytextBox); + tabPage2.Controls.Add(MPTextBox); + tabPage2.Controls.Add(label42); + tabPage2.Controls.Add(label27); + tabPage2.Controls.Add(PoisonResisttextBox); + tabPage2.Controls.Add(AccuracyTextBox); + tabPage2.Controls.Add(label41); + tabPage2.Controls.Add(label26); + tabPage2.Controls.Add(MagicResisttextBox); + tabPage2.Controls.Add(AgilityTextBox); + tabPage2.Controls.Add(label40); + tabPage2.Controls.Add(label29); + tabPage2.Controls.Add(HealthRecoveryTextbox); + tabPage2.Controls.Add(ASpeedTextBox); + tabPage2.Controls.Add(label39); + tabPage2.Controls.Add(label28); + tabPage2.Controls.Add(StrongTextbox); + tabPage2.Controls.Add(LuckTextBox); + tabPage2.Controls.Add(label38); + tabPage2.Controls.Add(label31); + tabPage2.Controls.Add(MacRateTextbox); + tabPage2.Controls.Add(BWeightText); + tabPage2.Controls.Add(label30); + tabPage2.Controls.Add(ACRateTextbox); + tabPage2.Controls.Add(HWeightTextBox); + tabPage2.Controls.Add(label36); + tabPage2.Controls.Add(label32); + tabPage2.Controls.Add(WWeightTextBox); + tabPage2.Location = new Point(4, 24); + tabPage2.Margin = new Padding(4, 3, 4, 3); + tabPage2.Name = "tabPage2"; + tabPage2.Padding = new Padding(4, 3, 4, 3); + tabPage2.Size = new Size(702, 452); + tabPage2.TabIndex = 1; + tabPage2.Text = "Basic Stats"; + tabPage2.UseVisualStyleBackColor = true; + // + // groupBox1 + // + groupBox1.Controls.Add(DropRatetextBox); + groupBox1.Controls.Add(label63); + groupBox1.Controls.Add(GoldRatetextBox); + groupBox1.Controls.Add(label62); + groupBox1.Controls.Add(ExpRatetextBox); + groupBox1.Controls.Add(label61); + groupBox1.Controls.Add(MaxSCRatetextBox); + groupBox1.Controls.Add(label60); + groupBox1.Controls.Add(MaxMCRatetextBox); + groupBox1.Controls.Add(label59); + groupBox1.Controls.Add(MaxDCRatetextBox); + groupBox1.Controls.Add(label58); + groupBox1.Controls.Add(label50); + groupBox1.Controls.Add(label52); + groupBox1.Controls.Add(label49); + groupBox1.Controls.Add(ReflecttextBox); + groupBox1.Controls.Add(HpDrainRatetextBox); + groupBox1.Controls.Add(CriticalDamagetextBox); + groupBox1.Controls.Add(CriticalRatetextBox); + groupBox1.Controls.Add(label51); + groupBox1.Location = new Point(19, 330); + groupBox1.Margin = new Padding(4, 3, 4, 3); + groupBox1.Name = "groupBox1"; + groupBox1.Padding = new Padding(4, 3, 4, 3); + groupBox1.Size = new Size(676, 113); + groupBox1.TabIndex = 123; + groupBox1.TabStop = false; + groupBox1.Text = "New Stats"; + // + // label50 + // + label50.AutoSize = true; + label50.Location = new Point(7, 27); + label50.Margin = new Padding(4, 0, 4, 0); + label50.Name = "label50"; + label50.Size = new Size(70, 15); + label50.TabIndex = 119; + label50.Text = "Critical rate:"; + // + // label52 + // + label52.AutoSize = true; + label52.Location = new Point(7, 72); + label52.Margin = new Padding(4, 0, 4, 0); + label52.Name = "label52"; + label52.Size = new Size(46, 15); + label52.TabIndex = 122; + label52.Text = "Reflect:"; + // + // label49 + // + label49.AutoSize = true; + label49.Location = new Point(202, 70); + label49.Margin = new Padding(4, 0, 4, 0); + label49.Name = "label49"; + label49.Size = new Size(57, 15); + label49.TabIndex = 115; + label49.Text = "HP Drain:"; + // + // ReflecttextBox + // + ReflecttextBox.Location = new Point(89, 67); + ReflecttextBox.Margin = new Padding(4, 3, 4, 3); + ReflecttextBox.MaxLength = 3; + ReflecttextBox.Name = "ReflecttextBox"; + ReflecttextBox.Size = new Size(34, 23); + ReflecttextBox.TabIndex = 121; + ReflecttextBox.TextChanged += ReflecttextBox_TextChanged; + // + // HpDrainRatetextBox + // + HpDrainRatetextBox.Location = new Point(303, 63); + HpDrainRatetextBox.Margin = new Padding(4, 3, 4, 3); + HpDrainRatetextBox.MaxLength = 3; + HpDrainRatetextBox.Name = "HpDrainRatetextBox"; + HpDrainRatetextBox.Size = new Size(34, 23); + HpDrainRatetextBox.TabIndex = 116; + HpDrainRatetextBox.TextChanged += HpDrainRatetextBox_TextChanged; + // + // CriticalDamagetextBox + // + CriticalDamagetextBox.Location = new Point(303, 27); + CriticalDamagetextBox.Margin = new Padding(4, 3, 4, 3); + CriticalDamagetextBox.MaxLength = 3; + CriticalDamagetextBox.Name = "CriticalDamagetextBox"; + CriticalDamagetextBox.Size = new Size(34, 23); + CriticalDamagetextBox.TabIndex = 118; + CriticalDamagetextBox.TextChanged += CriticalDamagetextBox_TextChanged; + // + // CriticalRatetextBox + // + CriticalRatetextBox.Location = new Point(89, 23); + CriticalRatetextBox.Margin = new Padding(4, 3, 4, 3); + CriticalRatetextBox.MaxLength = 3; + CriticalRatetextBox.Name = "CriticalRatetextBox"; + CriticalRatetextBox.Size = new Size(34, 23); + CriticalRatetextBox.TabIndex = 117; + CriticalRatetextBox.TextChanged += CriticalRatetextBox_TextChanged; + // + // label51 + // + label51.AutoSize = true; + label51.Location = new Point(202, 27); + label51.Margin = new Padding(4, 0, 4, 0); + label51.Name = "label51"; + label51.Size = new Size(76, 15); + label51.TabIndex = 120; + label51.Text = "Critical Dmg:"; + // + // label37 + // + label37.AutoSize = true; + label37.Location = new Point(569, 16); + label37.Margin = new Padding(4, 0, 4, 0); + label37.Name = "label37"; + label37.Size = new Size(59, 15); + label37.TabIndex = 78; + label37.Text = "Mac Rate:"; + // + // label14 + // + label14.AutoSize = true; + label14.Location = new Point(31, 21); + label14.Margin = new Padding(4, 0, 4, 0); + label14.Name = "label14"; + label14.Size = new Size(50, 15); + label14.TabIndex = 32; + label14.Text = "Min AC:"; + // + // MinACTextBox + // + MinACTextBox.Location = new Point(90, 17); + MinACTextBox.Margin = new Padding(4, 3, 4, 3); + MinACTextBox.MaxLength = 3; + MinACTextBox.Name = "MinACTextBox"; + MinACTextBox.Size = new Size(34, 23); + MinACTextBox.TabIndex = 13; + MinACTextBox.TextChanged += MinACTextBox_TextChanged; + // + // MPratetextbox + // + MPratetextbox.Location = new Point(419, 77); + MPratetextbox.Margin = new Padding(4, 3, 4, 3); + MPratetextbox.MaxLength = 3; + MPratetextbox.Name = "MPratetextbox"; + MPratetextbox.Size = new Size(34, 23); + MPratetextbox.TabIndex = 114; + MPratetextbox.TextChanged += MPratetextBox_TextChanged; + // + // label15 + // + label15.AutoSize = true; + label15.Location = new Point(132, 21); + label15.Margin = new Padding(4, 0, 4, 0); + label15.Name = "label15"; + label15.Size = new Size(52, 15); + label15.TabIndex = 34; + label15.Text = "Max AC:"; + // + // label48 + // + label48.AutoSize = true; + label48.Location = new Point(366, 81); + label48.Margin = new Padding(4, 0, 4, 0); + label48.Name = "label48"; + label48.Size = new Size(46, 15); + label48.TabIndex = 113; + label48.Text = "Mp +%"; + // + // MaxACTextBox + // + MaxACTextBox.Location = new Point(194, 17); + MaxACTextBox.Margin = new Padding(4, 3, 4, 3); + MaxACTextBox.MaxLength = 3; + MaxACTextBox.Name = "MaxACTextBox"; + MaxACTextBox.Size = new Size(34, 23); + MaxACTextBox.TabIndex = 14; + MaxACTextBox.TextChanged += MaxACTextBox_TextChanged; + // + // label17 + // + label17.AutoSize = true; + label17.Location = new Point(236, 21); + label17.Margin = new Padding(4, 0, 4, 0); + label17.Name = "label17"; + label17.Size = new Size(61, 15); + label17.TabIndex = 14; + label17.Text = "Min MAC:"; + // + // MinMACTextBox + // + MinMACTextBox.Location = new Point(304, 17); + MinMACTextBox.Margin = new Padding(4, 3, 4, 3); + MinMACTextBox.MaxLength = 3; + MinMACTextBox.Name = "MinMACTextBox"; + MinMACTextBox.Size = new Size(34, 23); + MinMACTextBox.TabIndex = 15; + MinMACTextBox.TextChanged += MinMACTextBox_TextChanged; + // + // label16 + // + label16.AutoSize = true; + label16.Location = new Point(346, 21); + label16.Margin = new Padding(4, 0, 4, 0); + label16.Name = "label16"; + label16.Size = new Size(63, 15); + label16.TabIndex = 38; + label16.Text = "Max MAC:"; + // + // MaxMACTextBox + // + MaxMACTextBox.Location = new Point(419, 17); + MaxMACTextBox.Margin = new Padding(4, 3, 4, 3); + MaxMACTextBox.MaxLength = 3; + MaxMACTextBox.Name = "MaxMACTextBox"; + MaxMACTextBox.Size = new Size(34, 23); + MaxMACTextBox.TabIndex = 16; + MaxMACTextBox.TextChanged += MaxMACTextBox_TextChanged; + // + // label21 + // + label21.AutoSize = true; + label21.Location = new Point(30, 55); + label21.Margin = new Padding(4, 0, 4, 0); + label21.Name = "label21"; + label21.Size = new Size(50, 15); + label21.TabIndex = 40; + label21.Text = "Min DC:"; + // + // MinDCTextBox + // + MinDCTextBox.Location = new Point(90, 47); + MinDCTextBox.Margin = new Padding(4, 3, 4, 3); + MinDCTextBox.MaxLength = 3; + MinDCTextBox.Name = "MinDCTextBox"; + MinDCTextBox.Size = new Size(34, 23); + MinDCTextBox.TabIndex = 17; + MinDCTextBox.TextChanged += MinDCTextBox_TextChanged; + // + // label20 + // + label20.AutoSize = true; + label20.Location = new Point(132, 51); + label20.Margin = new Padding(4, 0, 4, 0); + label20.Name = "label20"; + label20.Size = new Size(52, 15); + label20.TabIndex = 42; + label20.Text = "Max DC:"; + // + // MaxDCTextBox + // + MaxDCTextBox.Location = new Point(194, 47); + MaxDCTextBox.Margin = new Padding(4, 3, 4, 3); + MaxDCTextBox.MaxLength = 3; + MaxDCTextBox.Name = "MaxDCTextBox"; + MaxDCTextBox.Size = new Size(34, 23); + MaxDCTextBox.TabIndex = 18; + MaxDCTextBox.TextChanged += MaxDCTextBox_TextChanged; + // + // label19 + // + label19.AutoSize = true; + label19.Location = new Point(244, 51); + label19.Margin = new Padding(4, 0, 4, 0); + label19.Name = "label19"; + label19.Size = new Size(53, 15); + label19.TabIndex = 44; + label19.Text = "Min MC:"; + // + // PoisonAttacktextbox + // + PoisonAttacktextbox.Location = new Point(194, 200); + PoisonAttacktextbox.Margin = new Padding(4, 3, 4, 3); + PoisonAttacktextbox.MaxLength = 3; + PoisonAttacktextbox.Name = "PoisonAttacktextbox"; + PoisonAttacktextbox.Size = new Size(34, 23); + PoisonAttacktextbox.TabIndex = 99; + PoisonAttacktextbox.TextChanged += PoisonAttacktextbox_TextChanged; + // + // MinMCTextBox + // + MinMCTextBox.Location = new Point(304, 47); + MinMCTextBox.Margin = new Padding(4, 3, 4, 3); + MinMCTextBox.MaxLength = 3; + MinMCTextBox.Name = "MinMCTextBox"; + MinMCTextBox.Size = new Size(34, 23); + MinMCTextBox.TabIndex = 19; + MinMCTextBox.TextChanged += MinMCTextBox_TextChanged; + // + // label47 + // + label47.AutoSize = true; + label47.Location = new Point(98, 203); + label47.Margin = new Padding(4, 0, 4, 0); + label47.Name = "label47"; + label47.Size = new Size(83, 15); + label47.TabIndex = 98; + label47.Text = "Poison Attack:"; + // + // label18 + // + label18.AutoSize = true; + label18.Location = new Point(355, 51); + label18.Margin = new Padding(4, 0, 4, 0); + label18.Name = "label18"; + label18.Size = new Size(55, 15); + label18.TabIndex = 46; + label18.Text = "Max MC:"; + // + // Freezingtextbox + // + Freezingtextbox.Location = new Point(194, 243); + Freezingtextbox.Margin = new Padding(4, 3, 4, 3); + Freezingtextbox.MaxLength = 3; + Freezingtextbox.Name = "Freezingtextbox"; + Freezingtextbox.Size = new Size(34, 23); + Freezingtextbox.TabIndex = 97; + Freezingtextbox.TextChanged += Freezingtextbox_TextChanged; + // + // MaxMCTextBox + // + MaxMCTextBox.Location = new Point(419, 47); + MaxMCTextBox.Margin = new Padding(4, 3, 4, 3); + MaxMCTextBox.MaxLength = 3; + MaxMCTextBox.Name = "MaxMCTextBox"; + MaxMCTextBox.Size = new Size(34, 23); + MaxMCTextBox.TabIndex = 20; + MaxMCTextBox.TextChanged += MaxMCTextBox_TextChanged; + // + // label46 + // + label46.AutoSize = true; + label46.Location = new Point(128, 248); + label46.Margin = new Padding(4, 0, 4, 0); + label46.Name = "label46"; + label46.Size = new Size(54, 15); + label46.TabIndex = 96; + label46.Text = "Freezing:"; + // + // label23 + // + label23.AutoSize = true; + label23.Location = new Point(468, 53); + label23.Margin = new Padding(4, 0, 4, 0); + label23.Name = "label23"; + label23.Size = new Size(48, 15); + label23.TabIndex = 48; + label23.Text = "Min SC:"; + // + // Holytextbox + // + Holytextbox.Location = new Point(194, 270); + Holytextbox.Margin = new Padding(4, 3, 4, 3); + Holytextbox.MaxLength = 3; + Holytextbox.Name = "Holytextbox"; + Holytextbox.Size = new Size(34, 23); + Holytextbox.TabIndex = 95; + Holytextbox.TextChanged += Holytextbox_TextChanged; + // + // MinSCTextBox + // + MinSCTextBox.Location = new Point(528, 50); + MinSCTextBox.Margin = new Padding(4, 3, 4, 3); + MinSCTextBox.MaxLength = 3; + MinSCTextBox.Name = "MinSCTextBox"; + MinSCTextBox.Size = new Size(34, 23); + MinSCTextBox.TabIndex = 21; + MinSCTextBox.TextChanged += MinSCTextBox_TextChanged; + // + // label45 + // + label45.AutoSize = true; + label45.Location = new Point(150, 273); + label45.Margin = new Padding(4, 0, 4, 0); + label45.Name = "label45"; + label45.Size = new Size(35, 15); + label45.TabIndex = 94; + label45.Text = "Holy:"; + // + // label22 + // + label22.AutoSize = true; + label22.Location = new Point(576, 53); + label22.Margin = new Padding(4, 0, 4, 0); + label22.Name = "label22"; + label22.Size = new Size(50, 15); + label22.TabIndex = 50; + label22.Text = "Max SC:"; + // + // HPratetextbox + // + HPratetextbox.Location = new Point(304, 77); + HPratetextbox.Margin = new Padding(4, 3, 4, 3); + HPratetextbox.MaxLength = 3; + HPratetextbox.Name = "HPratetextbox"; + HPratetextbox.Size = new Size(34, 23); + HPratetextbox.TabIndex = 93; + HPratetextbox.TextChanged += HporMpRatetextbox_TextChanged; + // + // MaxSCTextBox + // + MaxSCTextBox.Location = new Point(638, 50); + MaxSCTextBox.Margin = new Padding(4, 3, 4, 3); + MaxSCTextBox.MaxLength = 3; + MaxSCTextBox.Name = "MaxSCTextBox"; + MaxSCTextBox.Size = new Size(34, 23); + MaxSCTextBox.TabIndex = 22; + MaxSCTextBox.TextChanged += MaxSCTextBox_TextChanged; + // + // label44 + // + label44.AutoSize = true; + label44.Location = new Point(257, 81); + label44.Margin = new Padding(4, 0, 4, 0); + label44.Name = "label44"; + label44.Size = new Size(41, 15); + label44.TabIndex = 92; + label44.Text = "Hp+%"; + // + // label25 + // + label25.AutoSize = true; + label25.Location = new Point(54, 81); + label25.Margin = new Padding(4, 0, 4, 0); + label25.Name = "label25"; + label25.Size = new Size(26, 15); + label25.TabIndex = 52; + label25.Text = "HP:"; + // + // PoisonRecoverytextBox + // + PoisonRecoverytextBox.Location = new Point(419, 167); + PoisonRecoverytextBox.Margin = new Padding(4, 3, 4, 3); + PoisonRecoverytextBox.MaxLength = 3; + PoisonRecoverytextBox.Name = "PoisonRecoverytextBox"; + PoisonRecoverytextBox.Size = new Size(34, 23); + PoisonRecoverytextBox.TabIndex = 91; + PoisonRecoverytextBox.TextChanged += PoisonRecoverytextBox_TextChanged; + // + // HPTextBox + // + HPTextBox.Location = new Point(90, 77); + HPTextBox.Margin = new Padding(4, 3, 4, 3); + HPTextBox.MaxLength = 3; + HPTextBox.Name = "HPTextBox"; + HPTextBox.Size = new Size(34, 23); + HPTextBox.TabIndex = 23; + HPTextBox.TextChanged += HPTextBox_TextChanged; + // + // label43 + // + label43.AutoSize = true; + label43.Location = new Point(336, 171); + label43.Margin = new Padding(4, 0, 4, 0); + label43.Name = "label43"; + label43.Size = new Size(67, 15); + label43.TabIndex = 90; + label43.Text = "Pois Recov:"; + // + // label24 + // + label24.AutoSize = true; + label24.Location = new Point(156, 81); + label24.Margin = new Padding(4, 0, 4, 0); + label24.Name = "label24"; + label24.Size = new Size(28, 15); + label24.TabIndex = 54; + label24.Text = "MP:"; + // + // SpellRecoverytextBox + // + SpellRecoverytextBox.Location = new Point(638, 80); + SpellRecoverytextBox.Margin = new Padding(4, 3, 4, 3); + SpellRecoverytextBox.MaxLength = 3; + SpellRecoverytextBox.Name = "SpellRecoverytextBox"; + SpellRecoverytextBox.Size = new Size(34, 23); + SpellRecoverytextBox.TabIndex = 89; + SpellRecoverytextBox.TextChanged += SpellRecoverytextBox_TextChanged; + // + // MPTextBox + // + MPTextBox.Location = new Point(194, 77); + MPTextBox.Margin = new Padding(4, 3, 4, 3); + MPTextBox.MaxLength = 3; + MPTextBox.Name = "MPTextBox"; + MPTextBox.Size = new Size(34, 23); + MPTextBox.TabIndex = 24; + MPTextBox.TextChanged += MPTextBox_TextChanged; + // + // label42 + // + label42.AutoSize = true; + label42.Location = new Point(569, 83); + label42.Margin = new Padding(4, 0, 4, 0); + label42.Name = "label42"; + label42.Size = new Size(64, 15); + label42.TabIndex = 88; + label42.Text = "MP Regen:"; + // + // label27 + // + label27.AutoSize = true; + label27.Location = new Point(344, 107); + label27.Margin = new Padding(4, 0, 4, 0); + label27.Name = "label27"; + label27.Size = new Size(59, 15); + label27.TabIndex = 56; + label27.Text = "Accuracy:"; + // + // PoisonResisttextBox + // + PoisonResisttextBox.Location = new Point(194, 167); + PoisonResisttextBox.Margin = new Padding(4, 3, 4, 3); + PoisonResisttextBox.MaxLength = 3; + PoisonResisttextBox.Name = "PoisonResisttextBox"; + PoisonResisttextBox.Size = new Size(34, 23); + PoisonResisttextBox.TabIndex = 87; + PoisonResisttextBox.TextChanged += PoisonResisttextBox_TextChanged; + // + // AccuracyTextBox + // + AccuracyTextBox.Location = new Point(419, 104); + AccuracyTextBox.Margin = new Padding(4, 3, 4, 3); + AccuracyTextBox.MaxLength = 3; + AccuracyTextBox.Name = "AccuracyTextBox"; + AccuracyTextBox.Size = new Size(34, 23); + AccuracyTextBox.TabIndex = 25; + AccuracyTextBox.TextChanged += AccuracyTextBox_TextChanged; + // + // label41 + // + label41.AutoSize = true; + label41.Location = new Point(126, 171); + label41.Margin = new Padding(4, 0, 4, 0); + label41.Name = "label41"; + label41.Size = new Size(53, 15); + label41.TabIndex = 86; + label41.Text = "Pois Res:"; + // + // label26 + // + label26.AutoSize = true; + label26.Location = new Point(479, 107); + label26.Margin = new Padding(4, 0, 4, 0); + label26.Name = "label26"; + label26.Size = new Size(44, 15); + label26.TabIndex = 58; + label26.Text = "Agility:"; + // + // MagicResisttextBox + // + MagicResisttextBox.Location = new Point(90, 165); + MagicResisttextBox.Margin = new Padding(4, 3, 4, 3); + MagicResisttextBox.MaxLength = 3; + MagicResisttextBox.Name = "MagicResisttextBox"; + MagicResisttextBox.Size = new Size(34, 23); + MagicResisttextBox.TabIndex = 85; + MagicResisttextBox.TextChanged += MagicResisttextBox_TextChanged; + // + // AgilityTextBox + // + AgilityTextBox.Location = new Point(528, 104); + AgilityTextBox.Margin = new Padding(4, 3, 4, 3); + AgilityTextBox.MaxLength = 3; + AgilityTextBox.Name = "AgilityTextBox"; + AgilityTextBox.Size = new Size(34, 23); + AgilityTextBox.TabIndex = 26; + AgilityTextBox.TextChanged += AgilityTextBox_TextChanged; + // + // label40 + // + label40.AutoSize = true; + label40.Location = new Point(15, 171); + label40.Margin = new Padding(4, 0, 4, 0); + label40.Name = "label40"; + label40.Size = new Size(67, 15); + label40.TabIndex = 84; + label40.Text = "Mag Resist:"; + // + // label29 + // + label29.AutoSize = true; + label29.Location = new Point(20, 111); + label29.Margin = new Padding(4, 0, 4, 0); + label29.Name = "label29"; + label29.Size = new Size(56, 15); + label29.TabIndex = 60; + label29.Text = "A. Speed:"; + // + // HealthRecoveryTextbox + // + HealthRecoveryTextbox.Location = new Point(528, 77); + HealthRecoveryTextbox.Margin = new Padding(4, 3, 4, 3); + HealthRecoveryTextbox.MaxLength = 3; + HealthRecoveryTextbox.Name = "HealthRecoveryTextbox"; + HealthRecoveryTextbox.Size = new Size(34, 23); + HealthRecoveryTextbox.TabIndex = 83; + HealthRecoveryTextbox.TextChanged += HealthRecoveryTextbox_TextChanged; + // + // ASpeedTextBox + // + ASpeedTextBox.Location = new Point(90, 107); + ASpeedTextBox.Margin = new Padding(4, 3, 4, 3); + ASpeedTextBox.MaxLength = 4; + ASpeedTextBox.Name = "ASpeedTextBox"; + ASpeedTextBox.Size = new Size(34, 23); + ASpeedTextBox.TabIndex = 27; + ASpeedTextBox.TextChanged += ASpeedTextBox_TextChanged; + // + // label39 + // + label39.AutoSize = true; + label39.Location = new Point(461, 83); + label39.Margin = new Padding(4, 0, 4, 0); + label39.Name = "label39"; + label39.Size = new Size(62, 15); + label39.TabIndex = 82; + label39.Text = "HP Regen:"; + // + // label28 + // + label28.AutoSize = true; + label28.Location = new Point(147, 111); + label28.Margin = new Padding(4, 0, 4, 0); + label28.Name = "label28"; + label28.Size = new Size(35, 15); + label28.TabIndex = 62; + label28.Text = "Luck:"; + // + // StrongTextbox + // + StrongTextbox.Location = new Point(304, 107); + StrongTextbox.Margin = new Padding(4, 3, 4, 3); + StrongTextbox.MaxLength = 3; + StrongTextbox.Name = "StrongTextbox"; + StrongTextbox.Size = new Size(34, 23); + StrongTextbox.TabIndex = 81; + StrongTextbox.TextChanged += StrongTextbox_TextChanged; + // + // LuckTextBox + // + LuckTextBox.Location = new Point(194, 107); + LuckTextBox.Margin = new Padding(4, 3, 4, 3); + LuckTextBox.MaxLength = 4; + LuckTextBox.Name = "LuckTextBox"; + LuckTextBox.Size = new Size(34, 23); + LuckTextBox.TabIndex = 28; + LuckTextBox.TextChanged += LuckTextBox_TextChanged; + // + // label38 + // + label38.AutoSize = true; + label38.Location = new Point(250, 107); + label38.Margin = new Padding(4, 0, 4, 0); + label38.Name = "label38"; + label38.Size = new Size(45, 15); + label38.TabIndex = 80; + label38.Text = "Strong:"; + // + // label31 + // + label31.AutoSize = true; + label31.Location = new Point(6, 141); + label31.Margin = new Padding(4, 0, 4, 0); + label31.Name = "label31"; + label31.Size = new Size(71, 15); + label31.TabIndex = 66; + label31.Text = "Bag Weight:"; + // + // MacRateTextbox + // + MacRateTextbox.Location = new Point(638, 13); + MacRateTextbox.Margin = new Padding(4, 3, 4, 3); + MacRateTextbox.MaxLength = 3; + MacRateTextbox.Name = "MacRateTextbox"; + MacRateTextbox.Size = new Size(34, 23); + MacRateTextbox.TabIndex = 79; + MacRateTextbox.TextChanged += MacRateTextbox_TextChanged; + // + // BWeightText + // + BWeightText.Location = new Point(90, 137); + BWeightText.Margin = new Padding(4, 3, 4, 3); + BWeightText.MaxLength = 4; + BWeightText.Name = "BWeightText"; + BWeightText.Size = new Size(34, 23); + BWeightText.TabIndex = 64; + BWeightText.TextChanged += BWeightText_TextChanged; + // + // label30 + // + label30.AutoSize = true; + label30.Location = new Point(212, 141); + label30.Margin = new Padding(4, 0, 4, 0); + label30.Name = "label30"; + label30.Size = new Size(80, 15); + label30.TabIndex = 67; + label30.Text = "Hand Weight."; + // + // ACRateTextbox + // + ACRateTextbox.Location = new Point(527, 15); + ACRateTextbox.Margin = new Padding(4, 3, 4, 3); + ACRateTextbox.MaxLength = 3; + ACRateTextbox.Name = "ACRateTextbox"; + ACRateTextbox.Size = new Size(34, 23); + ACRateTextbox.TabIndex = 77; + ACRateTextbox.TextChanged += ACRateTextbox_TextChanged; + // + // HWeightTextBox + // + HWeightTextBox.Location = new Point(304, 137); + HWeightTextBox.Margin = new Padding(4, 3, 4, 3); + HWeightTextBox.MaxLength = 4; + HWeightTextBox.Name = "HWeightTextBox"; + HWeightTextBox.Size = new Size(34, 23); + HWeightTextBox.TabIndex = 65; + HWeightTextBox.TextChanged += HWeightTextBox_TextChanged; + // + // label36 + // + label36.AutoSize = true; + label36.Location = new Point(464, 20); + label36.Margin = new Padding(4, 0, 4, 0); + label36.Name = "label36"; + label36.Size = new Size(50, 15); + label36.TabIndex = 76; + label36.Text = "Ac Rate:"; + // + // label32 + // + label32.AutoSize = true; + label32.Location = new Point(441, 143); + label32.Margin = new Padding(4, 0, 4, 0); + label32.Name = "label32"; + label32.Size = new Size(78, 15); + label32.TabIndex = 69; + label32.Text = "Wear Weight."; + // + // WWeightTextBox + // + WWeightTextBox.Location = new Point(528, 140); + WWeightTextBox.Margin = new Padding(4, 3, 4, 3); + WWeightTextBox.MaxLength = 4; + WWeightTextBox.Name = "WWeightTextBox"; + WWeightTextBox.Size = new Size(37, 23); + WWeightTextBox.TabIndex = 68; + WWeightTextBox.TextChanged += WWeightTextBox_TextChanged; + // + // tabPage3 + // + tabPage3.Controls.Add(noMailBox); + tabPage3.Controls.Add(unableToDisassemble_CheckBox); + tabPage3.Controls.Add(unableToRent_CheckBox); + tabPage3.Controls.Add(NoWeddingRingcheckbox); + tabPage3.Controls.Add(BreakOnDeathcheckbox); + tabPage3.Controls.Add(Bind_DontSpecialRepaircheckBox); + tabPage3.Controls.Add(Bind_dontdropcheckbox); + tabPage3.Controls.Add(BindOnEquipcheckbox); + tabPage3.Controls.Add(Bind_dontdeathdropcheckbox); + tabPage3.Controls.Add(Bind_dontstorecheckbox); + tabPage3.Controls.Add(Bind_destroyondropcheckbox); + tabPage3.Controls.Add(Bind_dontupgradecheckbox); + tabPage3.Controls.Add(Bind_dontsellcheckbox); + tabPage3.Controls.Add(Bind_dontrepaircheckbox); + tabPage3.Controls.Add(Bind_donttradecheckbox); + tabPage3.Location = new Point(4, 24); + tabPage3.Margin = new Padding(4, 3, 4, 3); + tabPage3.Name = "tabPage3"; + tabPage3.Size = new Size(702, 452); + tabPage3.TabIndex = 2; + tabPage3.Text = "Binding"; + tabPage3.UseVisualStyleBackColor = true; + // + // noMailBox + // + noMailBox.AutoSize = true; + noMailBox.Location = new Point(24, 396); + noMailBox.Margin = new Padding(4, 3, 4, 3); + noMailBox.Name = "noMailBox"; + noMailBox.Size = new Size(104, 19); + noMailBox.TabIndex = 119; + noMailBox.Text = "Unable To Mail"; + noMailBox.UseVisualStyleBackColor = true; + noMailBox.CheckedChanged += noMailBox_CheckedChanged; + // + // unableToDisassemble_CheckBox + // + unableToDisassemble_CheckBox.AutoSize = true; + unableToDisassemble_CheckBox.Location = new Point(24, 369); + unableToDisassemble_CheckBox.Margin = new Padding(4, 3, 4, 3); + unableToDisassemble_CheckBox.Name = "unableToDisassemble_CheckBox"; + unableToDisassemble_CheckBox.Size = new Size(146, 19); + unableToDisassemble_CheckBox.TabIndex = 117; + unableToDisassemble_CheckBox.Text = "Unable To Disassemble"; + unableToDisassemble_CheckBox.UseVisualStyleBackColor = true; + unableToDisassemble_CheckBox.CheckedChanged += unableToDisassemble_CheckBox_CheckedChanged; + // + // unableToRent_CheckBox + // + unableToRent_CheckBox.AutoSize = true; + unableToRent_CheckBox.Location = new Point(24, 343); + unableToRent_CheckBox.Margin = new Padding(4, 3, 4, 3); + unableToRent_CheckBox.Name = "unableToRent_CheckBox"; + unableToRent_CheckBox.Size = new Size(105, 19); + unableToRent_CheckBox.TabIndex = 116; + unableToRent_CheckBox.Text = "Unable To Rent"; + unableToRent_CheckBox.UseVisualStyleBackColor = true; + unableToRent_CheckBox.CheckedChanged += unableToRent_CheckBox_CheckedChanged; + // + // NoWeddingRingcheckbox + // + NoWeddingRingcheckbox.AutoSize = true; + NoWeddingRingcheckbox.Location = new Point(24, 316); + NoWeddingRingcheckbox.Margin = new Padding(4, 3, 4, 3); + NoWeddingRingcheckbox.Name = "NoWeddingRingcheckbox"; + NoWeddingRingcheckbox.Size = new Size(143, 19); + NoWeddingRingcheckbox.TabIndex = 115; + NoWeddingRingcheckbox.Text = "Disabled Weddingring"; + NoWeddingRingcheckbox.UseVisualStyleBackColor = true; + NoWeddingRingcheckbox.CheckedChanged += NoWeddingRingcheckbox_CheckedChanged; + // + // BreakOnDeathcheckbox + // + BreakOnDeathcheckbox.AutoSize = true; + BreakOnDeathcheckbox.Location = new Point(24, 290); + BreakOnDeathcheckbox.Margin = new Padding(4, 3, 4, 3); + BreakOnDeathcheckbox.Name = "BreakOnDeathcheckbox"; + BreakOnDeathcheckbox.Size = new Size(106, 19); + BreakOnDeathcheckbox.TabIndex = 114; + BreakOnDeathcheckbox.Text = "Break on Death"; + BreakOnDeathcheckbox.UseVisualStyleBackColor = true; + BreakOnDeathcheckbox.CheckedChanged += BreakOnDeathcheckbox_CheckedChanged; + // + // Bind_DontSpecialRepaircheckBox + // + Bind_DontSpecialRepaircheckBox.AutoSize = true; + Bind_DontSpecialRepaircheckBox.Location = new Point(24, 185); + Bind_DontSpecialRepaircheckBox.Margin = new Padding(4, 3, 4, 3); + Bind_DontSpecialRepaircheckBox.Name = "Bind_DontSpecialRepaircheckBox"; + Bind_DontSpecialRepaircheckBox.Size = new Size(128, 19); + Bind_DontSpecialRepaircheckBox.TabIndex = 113; + Bind_DontSpecialRepaircheckBox.Text = "Dont Special Repair"; + Bind_DontSpecialRepaircheckBox.UseVisualStyleBackColor = true; + Bind_DontSpecialRepaircheckBox.CheckedChanged += Bind_DontSpecialRepaircheckBox_CheckedChanged; + // + // Bind_dontdropcheckbox + // + Bind_dontdropcheckbox.AutoSize = true; + Bind_dontdropcheckbox.Location = new Point(24, 14); + Bind_dontdropcheckbox.Margin = new Padding(4, 3, 4, 3); + Bind_dontdropcheckbox.Name = "Bind_dontdropcheckbox"; + Bind_dontdropcheckbox.Size = new Size(80, 19); + Bind_dontdropcheckbox.TabIndex = 102; + Bind_dontdropcheckbox.Text = "Dont drop"; + Bind_dontdropcheckbox.UseVisualStyleBackColor = true; + Bind_dontdropcheckbox.CheckedChanged += Bind_dontdropcheckbox_CheckedChanged; + // + // BindOnEquipcheckbox + // + BindOnEquipcheckbox.AutoSize = true; + BindOnEquipcheckbox.Location = new Point(24, 263); + BindOnEquipcheckbox.Margin = new Padding(4, 3, 4, 3); + BindOnEquipcheckbox.Name = "BindOnEquipcheckbox"; + BindOnEquipcheckbox.Size = new Size(100, 19); + BindOnEquipcheckbox.TabIndex = 112; + BindOnEquipcheckbox.Text = "Bind on Equip"; + BindOnEquipcheckbox.UseVisualStyleBackColor = true; + BindOnEquipcheckbox.CheckedChanged += BindOnEquipcheckbox_CheckedChanged; + // + // Bind_dontdeathdropcheckbox + // + Bind_dontdeathdropcheckbox.AutoSize = true; + Bind_dontdeathdropcheckbox.Location = new Point(24, 44); + Bind_dontdeathdropcheckbox.Margin = new Padding(4, 3, 4, 3); + Bind_dontdeathdropcheckbox.Name = "Bind_dontdeathdropcheckbox"; + Bind_dontdeathdropcheckbox.Size = new Size(114, 19); + Bind_dontdeathdropcheckbox.TabIndex = 103; + Bind_dontdeathdropcheckbox.Text = "Dont Death drop"; + Bind_dontdeathdropcheckbox.UseVisualStyleBackColor = true; + Bind_dontdeathdropcheckbox.CheckedChanged += Bind_dontdeathdropcheckbox_CheckedChanged; + // + // Bind_dontstorecheckbox + // + Bind_dontstorecheckbox.AutoSize = true; + Bind_dontstorecheckbox.Location = new Point(24, 210); + Bind_dontstorecheckbox.Margin = new Padding(4, 3, 4, 3); + Bind_dontstorecheckbox.Name = "Bind_dontstorecheckbox"; + Bind_dontstorecheckbox.Size = new Size(82, 19); + Bind_dontstorecheckbox.TabIndex = 109; + Bind_dontstorecheckbox.Text = "Dont Store"; + Bind_dontstorecheckbox.UseVisualStyleBackColor = true; + Bind_dontstorecheckbox.CheckedChanged += Bind_dontstorecheckbox_CheckedChanged; + // + // Bind_destroyondropcheckbox + // + Bind_destroyondropcheckbox.AutoSize = true; + Bind_destroyondropcheckbox.Location = new Point(24, 75); + Bind_destroyondropcheckbox.Margin = new Padding(4, 3, 4, 3); + Bind_destroyondropcheckbox.Name = "Bind_destroyondropcheckbox"; + Bind_destroyondropcheckbox.Size = new Size(111, 19); + Bind_destroyondropcheckbox.TabIndex = 104; + Bind_destroyondropcheckbox.Text = "Destroy on drop"; + Bind_destroyondropcheckbox.UseVisualStyleBackColor = true; + Bind_destroyondropcheckbox.CheckedChanged += Bind_destroyondropcheckbox_CheckedChanged; + // + // Bind_dontupgradecheckbox + // + Bind_dontupgradecheckbox.AutoSize = true; + Bind_dontupgradecheckbox.Location = new Point(24, 237); + Bind_dontupgradecheckbox.Margin = new Padding(4, 3, 4, 3); + Bind_dontupgradecheckbox.Name = "Bind_dontupgradecheckbox"; + Bind_dontupgradecheckbox.Size = new Size(100, 19); + Bind_dontupgradecheckbox.TabIndex = 108; + Bind_dontupgradecheckbox.Text = "Dont Upgrade"; + Bind_dontupgradecheckbox.UseVisualStyleBackColor = true; + Bind_dontupgradecheckbox.CheckedChanged += Bind_dontupgradecheckbox_CheckedChanged; + // + // Bind_dontsellcheckbox + // + Bind_dontsellcheckbox.AutoSize = true; + Bind_dontsellcheckbox.Location = new Point(24, 105); + Bind_dontsellcheckbox.Margin = new Padding(4, 3, 4, 3); + Bind_dontsellcheckbox.Name = "Bind_dontsellcheckbox"; + Bind_dontsellcheckbox.Size = new Size(72, 19); + Bind_dontsellcheckbox.TabIndex = 105; + Bind_dontsellcheckbox.Text = "Dont sell"; + Bind_dontsellcheckbox.UseVisualStyleBackColor = true; + Bind_dontsellcheckbox.CheckedChanged += Bind_dontsellcheckbox_CheckedChanged; + // + // Bind_dontrepaircheckbox + // + Bind_dontrepaircheckbox.AutoSize = true; + Bind_dontrepaircheckbox.Location = new Point(24, 158); + Bind_dontrepaircheckbox.Margin = new Padding(4, 3, 4, 3); + Bind_dontrepaircheckbox.Name = "Bind_dontrepaircheckbox"; + Bind_dontrepaircheckbox.Size = new Size(88, 19); + Bind_dontrepaircheckbox.TabIndex = 107; + Bind_dontrepaircheckbox.Text = "Dont Repair"; + Bind_dontrepaircheckbox.UseVisualStyleBackColor = true; + Bind_dontrepaircheckbox.CheckedChanged += Bind_dontrepaircheckbox_CheckedChanged; + // + // Bind_donttradecheckbox + // + Bind_donttradecheckbox.AutoSize = true; + Bind_donttradecheckbox.Location = new Point(24, 132); + Bind_donttradecheckbox.Margin = new Padding(4, 3, 4, 3); + Bind_donttradecheckbox.Name = "Bind_donttradecheckbox"; + Bind_donttradecheckbox.Size = new Size(83, 19); + Bind_donttradecheckbox.TabIndex = 106; + Bind_donttradecheckbox.Text = "Dont Trade"; + Bind_donttradecheckbox.UseVisualStyleBackColor = true; + Bind_donttradecheckbox.CheckedChanged += Bind_donttradecheckbox_CheckedChanged; + // + // tabPage4 + // + tabPage4.Controls.Add(PickaxecheckBox); + tabPage4.Controls.Add(NoDuraLosscheckBox); + tabPage4.Controls.Add(SkillcheckBox); + tabPage4.Controls.Add(ProbecheckBox); + tabPage4.Controls.Add(HealingcheckBox); + tabPage4.Controls.Add(FlamecheckBox); + tabPage4.Controls.Add(MusclecheckBox); + tabPage4.Controls.Add(RevivalcheckBox); + tabPage4.Controls.Add(ProtectioncheckBox); + tabPage4.Controls.Add(ClearcheckBox); + tabPage4.Controls.Add(TeleportcheckBox); + tabPage4.Controls.Add(ParalysischeckBox); + tabPage4.Controls.Add(BlinkcheckBox); + tabPage4.Location = new Point(4, 24); + tabPage4.Margin = new Padding(4, 3, 4, 3); + tabPage4.Name = "tabPage4"; + tabPage4.Size = new Size(702, 452); + tabPage4.TabIndex = 3; + tabPage4.Text = "Special Stats"; + tabPage4.UseVisualStyleBackColor = true; + // + // PickaxecheckBox + // + PickaxecheckBox.AutoSize = true; + PickaxecheckBox.Location = new Point(26, 308); + PickaxecheckBox.Margin = new Padding(4, 3, 4, 3); + PickaxecheckBox.Name = "PickaxecheckBox"; + PickaxecheckBox.Size = new Size(66, 19); + PickaxecheckBox.TabIndex = 11; + PickaxecheckBox.Text = "Pickaxe"; + PickaxecheckBox.UseVisualStyleBackColor = true; + PickaxecheckBox.CheckedChanged += PickaxecheckBox_CheckedChanged; + // + // NoDuraLosscheckBox + // + NoDuraLosscheckBox.AutoSize = true; + NoDuraLosscheckBox.Location = new Point(26, 282); + NoDuraLosscheckBox.Margin = new Padding(4, 3, 4, 3); + NoDuraLosscheckBox.Name = "NoDuraLosscheckBox"; + NoDuraLosscheckBox.Size = new Size(92, 19); + NoDuraLosscheckBox.TabIndex = 10; + NoDuraLosscheckBox.Text = "No dura loss"; + NoDuraLosscheckBox.UseVisualStyleBackColor = true; + NoDuraLosscheckBox.CheckedChanged += NoDuraLosscheckBox_CheckedChanged; + // + // SkillcheckBox + // + SkillcheckBox.AutoSize = true; + SkillcheckBox.Location = new Point(26, 255); + SkillcheckBox.Margin = new Padding(4, 3, 4, 3); + SkillcheckBox.Name = "SkillcheckBox"; + SkillcheckBox.Size = new Size(96, 19); + SkillcheckBox.TabIndex = 9; + SkillcheckBox.Text = "Skill necklace"; + SkillcheckBox.UseVisualStyleBackColor = true; + SkillcheckBox.CheckedChanged += SkillcheckBox_CheckedChanged; + // + // ProbecheckBox + // + ProbecheckBox.AutoSize = true; + ProbecheckBox.Location = new Point(26, 228); + ProbecheckBox.Margin = new Padding(4, 3, 4, 3); + ProbecheckBox.Name = "ProbecheckBox"; + ProbecheckBox.Size = new Size(106, 19); + ProbecheckBox.TabIndex = 8; + ProbecheckBox.Text = "Probe necklace"; + ProbecheckBox.UseVisualStyleBackColor = true; + ProbecheckBox.CheckedChanged += ProbecheckBox_CheckedChanged; + // + // HealingcheckBox + // + HealingcheckBox.AutoSize = true; + HealingcheckBox.Location = new Point(26, 203); + HealingcheckBox.Margin = new Padding(4, 3, 4, 3); + HealingcheckBox.Name = "HealingcheckBox"; + HealingcheckBox.Size = new Size(91, 19); + HealingcheckBox.TabIndex = 7; + HealingcheckBox.Text = "Healing ring"; + HealingcheckBox.UseVisualStyleBackColor = true; + HealingcheckBox.CheckedChanged += HealingcheckBox_CheckedChanged; + // + // FlamecheckBox + // + FlamecheckBox.AutoSize = true; + FlamecheckBox.Location = new Point(26, 175); + FlamecheckBox.Margin = new Padding(4, 3, 4, 3); + FlamecheckBox.Name = "FlamecheckBox"; + FlamecheckBox.Size = new Size(82, 19); + FlamecheckBox.TabIndex = 6; + FlamecheckBox.Text = "Flame ring"; + FlamecheckBox.UseVisualStyleBackColor = true; + FlamecheckBox.CheckedChanged += FlamecheckBox_CheckedChanged; + // + // MusclecheckBox + // + MusclecheckBox.AutoSize = true; + MusclecheckBox.Location = new Point(26, 149); + MusclecheckBox.Margin = new Padding(4, 3, 4, 3); + MusclecheckBox.Name = "MusclecheckBox"; + MusclecheckBox.Size = new Size(88, 19); + MusclecheckBox.TabIndex = 5; + MusclecheckBox.Text = "Muscle ring"; + MusclecheckBox.UseVisualStyleBackColor = true; + MusclecheckBox.CheckedChanged += MusclecheckBox_CheckedChanged; + // + // RevivalcheckBox + // + RevivalcheckBox.AutoSize = true; + RevivalcheckBox.Location = new Point(26, 122); + RevivalcheckBox.Margin = new Padding(4, 3, 4, 3); + RevivalcheckBox.Name = "RevivalcheckBox"; + RevivalcheckBox.Size = new Size(87, 19); + RevivalcheckBox.TabIndex = 4; + RevivalcheckBox.Text = "Revival ring"; + RevivalcheckBox.UseVisualStyleBackColor = true; + RevivalcheckBox.CheckedChanged += RevivalcheckBox_CheckedChanged; + // + // ProtectioncheckBox + // + ProtectioncheckBox.AutoSize = true; + ProtectioncheckBox.Location = new Point(26, 96); + ProtectioncheckBox.Margin = new Padding(4, 3, 4, 3); + ProtectioncheckBox.Name = "ProtectioncheckBox"; + ProtectioncheckBox.Size = new Size(105, 19); + ProtectioncheckBox.TabIndex = 3; + ProtectioncheckBox.Text = "Protection ring"; + ProtectioncheckBox.UseVisualStyleBackColor = true; + ProtectioncheckBox.CheckedChanged += ProtectioncheckBox_CheckedChanged; + // + // ClearcheckBox + // + ClearcheckBox.AutoSize = true; + ClearcheckBox.Location = new Point(26, 69); + ClearcheckBox.Margin = new Padding(4, 3, 4, 3); + ClearcheckBox.Name = "ClearcheckBox"; + ClearcheckBox.Size = new Size(77, 19); + ClearcheckBox.TabIndex = 2; + ClearcheckBox.Text = "Clear ring"; + ClearcheckBox.UseVisualStyleBackColor = true; + ClearcheckBox.CheckedChanged += ClearcheckBox_CheckedChanged; + // + // TeleportcheckBox + // + TeleportcheckBox.AutoSize = true; + TeleportcheckBox.Location = new Point(26, 43); + TeleportcheckBox.Margin = new Padding(4, 3, 4, 3); + TeleportcheckBox.Name = "TeleportcheckBox"; + TeleportcheckBox.Size = new Size(92, 19); + TeleportcheckBox.TabIndex = 1; + TeleportcheckBox.Text = "Teleport ring"; + TeleportcheckBox.UseVisualStyleBackColor = true; + TeleportcheckBox.CheckedChanged += TeleportcheckBox_CheckedChanged; + // + // ParalysischeckBox + // + ParalysischeckBox.AutoSize = true; + ParalysischeckBox.Location = new Point(26, 16); + ParalysischeckBox.Margin = new Padding(4, 3, 4, 3); + ParalysischeckBox.Name = "ParalysischeckBox"; + ParalysischeckBox.Size = new Size(95, 19); + ParalysischeckBox.TabIndex = 0; + ParalysischeckBox.Text = "Paralysis ring"; + ParalysischeckBox.UseVisualStyleBackColor = true; + ParalysischeckBox.CheckedChanged += ParalysischeckBox_CheckedChanged; + // + // BlinkcheckBox + // + BlinkcheckBox.AutoSize = true; + BlinkcheckBox.Location = new Point(26, 335); + BlinkcheckBox.Margin = new Padding(4, 3, 4, 3); + BlinkcheckBox.Name = "BlinkcheckBox"; + BlinkcheckBox.Size = new Size(52, 19); + BlinkcheckBox.TabIndex = 6; + BlinkcheckBox.Text = "Blink"; + BlinkcheckBox.UseVisualStyleBackColor = true; + BlinkcheckBox.CheckedChanged += BlinkcheckBox_CheckedChanged; + // + // RemoveButton + // + RemoveButton.Location = new Point(274, 14); + RemoveButton.Margin = new Padding(4, 3, 4, 3); + RemoveButton.Name = "RemoveButton"; + RemoveButton.Size = new Size(76, 27); + RemoveButton.TabIndex = 9; + RemoveButton.Text = "Remove"; + RemoveButton.UseVisualStyleBackColor = true; + RemoveButton.Click += RemoveButton_Click; + // + // AddButton + // + AddButton.Location = new Point(203, 14); + AddButton.Margin = new Padding(4, 3, 4, 3); + AddButton.Name = "AddButton"; + AddButton.Size = new Size(64, 27); + AddButton.TabIndex = 8; + AddButton.Text = "Add"; + AddButton.UseVisualStyleBackColor = true; + AddButton.Click += AddButton_Click; + // + // ItemInfoListBox + // + ItemInfoListBox.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left; + ItemInfoListBox.FormattingEnabled = true; + ItemInfoListBox.ItemHeight = 15; + ItemInfoListBox.Location = new Point(14, 46); + ItemInfoListBox.Margin = new Padding(4, 3, 4, 3); + ItemInfoListBox.Name = "ItemInfoListBox"; + ItemInfoListBox.SelectionMode = SelectionMode.MultiExtended; + ItemInfoListBox.Size = new Size(181, 484); + ItemInfoListBox.TabIndex = 10; + ItemInfoListBox.SelectedIndexChanged += ItemInfoListBox_SelectedIndexChanged; + // + // PasteButton + // + PasteButton.Enabled = false; + PasteButton.Location = new Point(424, 14); + PasteButton.Margin = new Padding(4, 3, 4, 3); + PasteButton.Name = "PasteButton"; + PasteButton.Size = new Size(62, 27); + PasteButton.TabIndex = 24; + PasteButton.Text = "Paste"; + PasteButton.UseVisualStyleBackColor = true; + PasteButton.Visible = false; + PasteButton.Click += PasteButton_Click; + // + // CopyMButton + // + CopyMButton.Enabled = false; + CopyMButton.Location = new Point(357, 14); + CopyMButton.Margin = new Padding(4, 3, 4, 3); + CopyMButton.Name = "CopyMButton"; + CopyMButton.Size = new Size(59, 27); + CopyMButton.TabIndex = 23; + CopyMButton.Text = "Copy"; + CopyMButton.UseVisualStyleBackColor = true; + CopyMButton.Visible = false; + CopyMButton.Click += CopyMButton_Click; + // + // ITypeFilterComboBox + // + ITypeFilterComboBox.DropDownStyle = ComboBoxStyle.DropDownList; + ITypeFilterComboBox.FormattingEnabled = true; + ITypeFilterComboBox.Location = new Point(16, 16); + ITypeFilterComboBox.Margin = new Padding(4, 3, 4, 3); + ITypeFilterComboBox.Name = "ITypeFilterComboBox"; + ITypeFilterComboBox.Size = new Size(140, 23); + ITypeFilterComboBox.TabIndex = 25; + ITypeFilterComboBox.SelectedIndexChanged += ITypeFilterComboBox_SelectedIndexChanged; + // + // Gameshop_button + // + Gameshop_button.Location = new Point(492, 14); + Gameshop_button.Margin = new Padding(4, 3, 4, 3); + Gameshop_button.Name = "Gameshop_button"; + Gameshop_button.Size = new Size(97, 27); + Gameshop_button.TabIndex = 29; + Gameshop_button.Text = "+ Gameshop"; + Gameshop_button.UseVisualStyleBackColor = true; + Gameshop_button.Click += Gameshop_button_Click; + // + // ItemInfoForm + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(947, 553); + Controls.Add(Gameshop_button); + Controls.Add(ITypeFilterComboBox); + Controls.Add(PasteButton); + Controls.Add(CopyMButton); + Controls.Add(ItemInfoPanel); + Controls.Add(RemoveButton); + Controls.Add(AddButton); + Controls.Add(ItemInfoListBox); + Icon = (Icon)resources.GetObject("$this.Icon"); + Margin = new Padding(4, 3, 4, 3); + Name = "ItemInfoForm"; + Text = "ItemInfoForm"; + FormClosed += ItemInfoForm_FormClosed; + Load += ItemInfoForm_Load; + ItemInfoPanel.ResumeLayout(false); + tabControl1.ResumeLayout(false); + tabPage1.ResumeLayout(false); + tabPage1.PerformLayout(); + tabPage2.ResumeLayout(false); + tabPage2.PerformLayout(); + groupBox1.ResumeLayout(false); + groupBox1.PerformLayout(); + tabPage3.ResumeLayout(false); + tabPage3.PerformLayout(); + tabPage4.ResumeLayout(false); + tabPage4.PerformLayout(); + ResumeLayout(false); + } + + #endregion + + private System.Windows.Forms.Panel ItemInfoPanel; + private System.Windows.Forms.TextBox WWeightTextBox; + private System.Windows.Forms.Label label32; + private System.Windows.Forms.TextBox HWeightTextBox; + private System.Windows.Forms.Label label30; + private System.Windows.Forms.TextBox BWeightText; + private System.Windows.Forms.Label label31; + private System.Windows.Forms.CheckBox StartItemCheckBox; + private System.Windows.Forms.TextBox LuckTextBox; + private System.Windows.Forms.Label label28; + private System.Windows.Forms.TextBox ASpeedTextBox; + private System.Windows.Forms.Label label29; + private System.Windows.Forms.TextBox AgilityTextBox; + private System.Windows.Forms.Label label26; + private System.Windows.Forms.TextBox AccuracyTextBox; + private System.Windows.Forms.Label label27; + private System.Windows.Forms.TextBox MPTextBox; + private System.Windows.Forms.Label label24; + private System.Windows.Forms.TextBox HPTextBox; + private System.Windows.Forms.Label label25; + private System.Windows.Forms.TextBox MaxSCTextBox; + private System.Windows.Forms.Label label22; + private System.Windows.Forms.TextBox MinSCTextBox; + private System.Windows.Forms.Label label23; + private System.Windows.Forms.TextBox MaxMCTextBox; + private System.Windows.Forms.Label label18; + private System.Windows.Forms.TextBox MinMCTextBox; + private System.Windows.Forms.Label label19; + private System.Windows.Forms.TextBox MaxDCTextBox; + private System.Windows.Forms.Label label20; + private System.Windows.Forms.TextBox MinDCTextBox; + private System.Windows.Forms.Label label21; + private System.Windows.Forms.TextBox MaxMACTextBox; + private System.Windows.Forms.Label label16; + private System.Windows.Forms.TextBox MinMACTextBox; + private System.Windows.Forms.Label label17; + private System.Windows.Forms.TextBox MaxACTextBox; + private System.Windows.Forms.Label label15; + private System.Windows.Forms.TextBox MinACTextBox; + private System.Windows.Forms.Label label14; + private System.Windows.Forms.TextBox PriceTextBox; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.TextBox SSizeTextBox; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.TextBox ImageTextBox; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.TextBox DuraTextBox; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.TextBox LightTextBox; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.TextBox WeightTextBox; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.TextBox ShapeTextBox; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.TextBox RAmountTextBox; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.ComboBox RClassComboBox; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.ComboBox RTypeComboBox; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.ComboBox ITypeComboBox; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox ItemNameTextBox; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TextBox ItemIndexTextBox; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button RemoveButton; + private System.Windows.Forms.Button AddButton; + private System.Windows.Forms.ListBox ItemInfoListBox; + private System.Windows.Forms.ComboBox RGenderComboBox; + private System.Windows.Forms.Label label33; + private System.Windows.Forms.Button PasteButton; + private System.Windows.Forms.Button CopyMButton; + private System.Windows.Forms.TextBox EffectTextBox; + private System.Windows.Forms.Label label34; + private System.Windows.Forms.ComboBox ITypeFilterComboBox; + private System.Windows.Forms.Label label35; + private System.Windows.Forms.ComboBox ISetComboBox; + private System.Windows.Forms.TextBox PoisonRecoverytextBox; + private System.Windows.Forms.Label label43; + private System.Windows.Forms.TextBox SpellRecoverytextBox; + private System.Windows.Forms.Label label42; + private System.Windows.Forms.TextBox PoisonResisttextBox; + private System.Windows.Forms.Label label41; + private System.Windows.Forms.TextBox MagicResisttextBox; + private System.Windows.Forms.Label label40; + private System.Windows.Forms.TextBox HealthRecoveryTextbox; + private System.Windows.Forms.Label label39; + private System.Windows.Forms.TextBox StrongTextbox; + private System.Windows.Forms.Label label38; + private System.Windows.Forms.TextBox MacRateTextbox; + private System.Windows.Forms.Label label37; + private System.Windows.Forms.TextBox ACRateTextbox; + private System.Windows.Forms.Label label36; + private System.Windows.Forms.CheckBox Bind_dontstorecheckbox; + private System.Windows.Forms.CheckBox Bind_dontupgradecheckbox; + private System.Windows.Forms.CheckBox Bind_dontrepaircheckbox; + private System.Windows.Forms.CheckBox Bind_donttradecheckbox; + private System.Windows.Forms.CheckBox Bind_dontsellcheckbox; + private System.Windows.Forms.CheckBox Bind_destroyondropcheckbox; + private System.Windows.Forms.CheckBox Bind_dontdeathdropcheckbox; + private System.Windows.Forms.CheckBox Bind_dontdropcheckbox; + private System.Windows.Forms.CheckBox LevelBasedcheckbox; + private System.Windows.Forms.CheckBox ClassBasedcheckbox; + private System.Windows.Forms.TextBox PoisonAttacktextbox; + private System.Windows.Forms.Label label47; + private System.Windows.Forms.TextBox Freezingtextbox; + private System.Windows.Forms.Label label46; + private System.Windows.Forms.TextBox Holytextbox; + private System.Windows.Forms.Label label45; + private System.Windows.Forms.TextBox HPratetextbox; + private System.Windows.Forms.Label label44; + private System.Windows.Forms.CheckBox BindOnEquipcheckbox; + private System.Windows.Forms.CheckBox ShowGroupPickupcheckbox; + private System.Windows.Forms.CheckBox NeedIdentifycheckbox; + private System.Windows.Forms.TextBox MPratetextbox; + private System.Windows.Forms.Label label48; + private System.Windows.Forms.TextBox HpDrainRatetextBox; + private System.Windows.Forms.Label label49; + private System.Windows.Forms.TabControl tabControl1; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.TabPage tabPage2; + private System.Windows.Forms.TabPage tabPage3; + private System.Windows.Forms.TabPage tabPage4; + private System.Windows.Forms.CheckBox NoDuraLosscheckBox; + private System.Windows.Forms.CheckBox SkillcheckBox; + private System.Windows.Forms.CheckBox ProbecheckBox; + private System.Windows.Forms.CheckBox HealingcheckBox; + private System.Windows.Forms.CheckBox FlamecheckBox; + private System.Windows.Forms.CheckBox MusclecheckBox; + private System.Windows.Forms.CheckBox RevivalcheckBox; + private System.Windows.Forms.CheckBox ProtectioncheckBox; + private System.Windows.Forms.CheckBox ClearcheckBox; + private System.Windows.Forms.CheckBox TeleportcheckBox; + private System.Windows.Forms.CheckBox ParalysischeckBox; + private System.Windows.Forms.Label label50; + private System.Windows.Forms.TextBox CriticalRatetextBox; + private System.Windows.Forms.Label label51; + private System.Windows.Forms.TextBox CriticalDamagetextBox; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.Label label52; + private System.Windows.Forms.TextBox ReflecttextBox; + private System.Windows.Forms.CheckBox Bind_DontSpecialRepaircheckBox; + private System.Windows.Forms.TextBox LightIntensitytextBox; + private System.Windows.Forms.Label label53; + private System.Windows.Forms.TextBox RandomStatstextBox; + private System.Windows.Forms.Label label54; + private System.Windows.Forms.CheckBox PickaxecheckBox; + private System.Windows.Forms.Label label55; + private System.Windows.Forms.ComboBox IGradeComboBox; + private System.Windows.Forms.CheckBox FastRunCheckBox; + private System.Windows.Forms.Label label56; + private System.Windows.Forms.TextBox TooltipTextBox; + private System.Windows.Forms.CheckBox CanAwaken; + private System.Windows.Forms.CheckBox BreakOnDeathcheckbox; + private System.Windows.Forms.Button Gameshop_button; + private System.Windows.Forms.CheckBox NoWeddingRingcheckbox; + private System.Windows.Forms.CheckBox unableToRent_CheckBox; + private System.Windows.Forms.CheckBox unableToDisassemble_CheckBox; + private System.Windows.Forms.CheckBox globalDropNotify_CheckBox; + private System.Windows.Forms.CheckBox BlinkcheckBox; + private System.Windows.Forms.CheckBox noMailBox; + private System.Windows.Forms.TextBox SlotsTextBox; + private System.Windows.Forms.Label label57; + private System.Windows.Forms.Label label58; + private System.Windows.Forms.Label label59; + private System.Windows.Forms.Label label60; + private System.Windows.Forms.Label label61; + private System.Windows.Forms.Label label62; + private System.Windows.Forms.Label label63; + private System.Windows.Forms.Label label64; + private System.Windows.Forms.TextBox MaxDCRatetextBox; + private System.Windows.Forms.TextBox MaxMCRatetextBox; + private System.Windows.Forms.TextBox MaxSCRatetextBox; + private System.Windows.Forms.TextBox ExpRatetextBox; + private System.Windows.Forms.TextBox GoldRatetextBox; + private System.Windows.Forms.TextBox DropRatetextBox; + private System.Windows.Forms.TextBox DamageReductiontextBox; + } +} \ No newline at end of file diff --git a/Server.MirForms/Database/ItemInfoForm.cs b/Server.MirForms/Database/ItemInfoForm.cs new file mode 100644 index 0000000..063ff20 --- /dev/null +++ b/Server.MirForms/Database/ItemInfoForm.cs @@ -0,0 +1,1924 @@ +using Server.MirEnvir; + +namespace Server +{ + public partial class ItemInfoForm : Form + { + public string ItemListPath = Path.Combine(Settings.ExportPath, "ItemList.txt"); + + public Envir Envir => SMain.EditEnvir; + private List _selectedItemInfos; + + public class ComboBoxItem + { + public string Text { get; set; } + public object Value { get; set; } + + public override string ToString() + { + return Text; + } + } + + public ItemInfoForm() + { + InitializeComponent(); + + ITypeComboBox.Items.AddRange(Enum.GetValues(typeof (ItemType)).Cast().ToArray()); + IGradeComboBox.Items.AddRange(Enum.GetValues(typeof(ItemGrade)).Cast().ToArray()); + RTypeComboBox.Items.AddRange(Enum.GetValues(typeof (RequiredType)).Cast().ToArray()); + RClassComboBox.Items.AddRange(Enum.GetValues(typeof (RequiredClass)).Cast().ToArray()); + RGenderComboBox.Items.AddRange(Enum.GetValues(typeof (RequiredGender)).Cast().ToArray()); + ISetComboBox.Items.AddRange(Enum.GetValues(typeof(ItemSet)).Cast().ToArray()); + + ITypeFilterComboBox.Items.AddRange(Enum.GetValues(typeof(ItemType)).Cast().ToArray()); + ITypeFilterComboBox.Items.Add(new ComboBoxItem { Text = "All" }); + ITypeFilterComboBox.SelectedIndex = ITypeFilterComboBox.Items.Count - 1; + + UpdateInterface(); + } + + public void RefreshUniqueTab() + { + if ((ITypeComboBox.SelectedItem != null) && ((ItemType)ITypeComboBox.SelectedItem == ItemType.Gem)) + { + tabControl1.TabPages[3].Text = "Usable on"; + ParalysischeckBox.Text = "Weapon"; + TeleportcheckBox.Text = "Armour"; + ClearcheckBox.Text = "Helmet"; + ProtectioncheckBox.Text = "Necklace"; + RevivalcheckBox.Text = "Bracelet"; + MusclecheckBox.Text = "Ring"; + FlamecheckBox.Text = "Amulet"; + HealingcheckBox.Text = "Belt"; + ProbecheckBox.Text = "Boots"; + SkillcheckBox.Text = "Stone"; + NoDuraLosscheckBox.Text = "Torch"; + PickaxecheckBox.Text = "Unused"; + label50.Text = "Base rate%"; + label52.Text = "Success drop"; + label51.Text = "Max stats (all)"; + label49.Text = "Max gem stat"; + BlinkcheckBox.Text = "Unsure?"; + } + else + { + tabControl1.TabPages[3].Text = "Special Stats"; + ParalysischeckBox.Text = "Paralysis ring"; + TeleportcheckBox.Text = "Teleport ring"; + ClearcheckBox.Text = "Clear ring"; + ProtectioncheckBox.Text = "Protection ring"; + RevivalcheckBox.Text = "Revival ring"; + MusclecheckBox.Text = "Muscle ring"; + FlamecheckBox.Text = "Flame ring"; + HealingcheckBox.Text = "Healing ring"; + ProbecheckBox.Text = "Probe necklace"; + SkillcheckBox.Text = "Skill necklace"; + NoDuraLosscheckBox.Text = "No dura loss"; + PickaxecheckBox.Text = "Pickaxe"; + label50.Text = "Critical rate:"; + label52.Text = "Reflect:"; + label51.Text = "Critical Dmg:"; + label49.Text = "HP Drain:"; + BlinkcheckBox.Text = "Blink"; + } + } + + public void UpdateInterface(bool refreshList = false) + { + if (refreshList) + { + ItemInfoListBox.Items.Clear(); + + for (int i = 0; i < Envir.ItemInfoList.Count; i++) + { + if (ITypeFilterComboBox.SelectedItem == null || + ITypeFilterComboBox.SelectedIndex == ITypeFilterComboBox.Items.Count - 1 || + Envir.ItemInfoList[i].Type == (ItemType)ITypeFilterComboBox.SelectedItem) + ItemInfoListBox.Items.Add(Envir.ItemInfoList[i]); + } + } + + _selectedItemInfos = ItemInfoListBox.SelectedItems.Cast().ToList(); + + + if (_selectedItemInfos.Count == 0) + { + ItemInfoPanel.Enabled = false; + + ItemIndexTextBox.Text = string.Empty; + ItemNameTextBox.Text = string.Empty; + WeightTextBox.Text = string.Empty; + ImageTextBox.Text = string.Empty; + DuraTextBox.Text = string.Empty; + ITypeComboBox.SelectedItem = null; + IGradeComboBox.SelectedItem = null; + ISetComboBox.SelectedItem = null; + ShapeTextBox.Text = string.Empty; + SSizeTextBox.Text = string.Empty; + PriceTextBox.Text = string.Empty; + RTypeComboBox.SelectedItem = null; + RAmountTextBox.Text = string.Empty; + RClassComboBox.SelectedItem = null; + RGenderComboBox.SelectedItem = null; + LightTextBox.Text = string.Empty; + LightIntensitytextBox.Text = string.Empty; + + MinACTextBox.Text = string.Empty; + MaxACTextBox.Text = string.Empty; + MinMACTextBox.Text = string.Empty; + MaxMACTextBox.Text = string.Empty; + MinDCTextBox.Text = string.Empty; + MaxDCTextBox.Text = string.Empty; + MinMCTextBox.Text = string.Empty; + MaxMCTextBox.Text = string.Empty; + MinSCTextBox.Text = string.Empty; + MaxSCTextBox.Text = string.Empty; + HPTextBox.Text = string.Empty; + MPTextBox.Text = string.Empty; + AccuracyTextBox.Text = string.Empty; + AgilityTextBox.Text = string.Empty; + ASpeedTextBox.Text = string.Empty; + LuckTextBox.Text = string.Empty; + StartItemCheckBox.Checked = false; + + WWeightTextBox.Text = string.Empty; + HWeightTextBox.Text = string.Empty; + BWeightText.Text = string.Empty; + EffectTextBox.Text = string.Empty; + + PoisonRecoverytextBox.Text = string.Empty; + SpellRecoverytextBox.Text = string.Empty; + MagicResisttextBox.Text = string.Empty; + HealthRecoveryTextbox.Text = string.Empty; + StrongTextbox.Text = string.Empty; + MacRateTextbox.Text = string.Empty; + ACRateTextbox.Text = string.Empty; + PoisonResisttextBox.Text = string.Empty; + PoisonAttacktextbox.Text = string.Empty; + Freezingtextbox.Text = string.Empty; + Holytextbox.Text = string.Empty; + HPratetextbox.Text = string.Empty; + MPratetextbox.Text = string.Empty; + HpDrainRatetextBox.Text = string.Empty; + CriticalDamagetextBox.Text = string.Empty; + CriticalRatetextBox.Text = string.Empty; + ReflecttextBox.Text = string.Empty; + MaxDCRatetextBox.Text = string.Empty; + MaxSCRatetextBox.Text = string.Empty; + MaxMCRatetextBox.Text = string.Empty; + DamageReductiontextBox.Text = string.Empty; + ExpRatetextBox.Text = string.Empty; + DropRatetextBox.Text = string.Empty; + GoldRatetextBox.Text = string.Empty; + + LevelBasedcheckbox.Checked = false; + ClassBasedcheckbox.Checked = false; + + Bind_dontstorecheckbox.Checked = false; + Bind_dontupgradecheckbox.Checked = false; + Bind_dontrepaircheckbox.Checked = false; + Bind_donttradecheckbox.Checked = false; + Bind_dontsellcheckbox.Checked = false; + Bind_destroyondropcheckbox.Checked = false; + Bind_dontdeathdropcheckbox.Checked = false; + Bind_dontdropcheckbox.Checked = false; + Bind_DontSpecialRepaircheckBox.Checked = false; + + NeedIdentifycheckbox.Checked = false; + ShowGroupPickupcheckbox.Checked = false; + globalDropNotify_CheckBox.Checked = false; + BindOnEquipcheckbox.Checked = false; + ParalysischeckBox.Checked = false; + TeleportcheckBox.Checked = false; + ClearcheckBox.Checked = false; + ProtectioncheckBox.Checked = false; + RevivalcheckBox.Checked = false; + MusclecheckBox.Checked = false; + FlamecheckBox.Checked = false; + HealingcheckBox.Checked = false; + ProbecheckBox.Checked = false; + SkillcheckBox.Checked = false; + NoDuraLosscheckBox.Checked = false; + RandomStatstextBox.Text = string.Empty; + PickaxecheckBox.Checked = false; + FastRunCheckBox.Checked = false; + CanAwaken.Checked = false; + TooltipTextBox.Text = string.Empty; + BlinkcheckBox.Checked = false; + return; + } + + ItemInfo info = _selectedItemInfos[0]; + + ItemInfoPanel.Enabled = true; + + ItemIndexTextBox.Text = info.Index.ToString(); + ItemNameTextBox.Text = info.Name; + WeightTextBox.Text = info.Weight.ToString(); + ImageTextBox.Text = info.Image.ToString(); + DuraTextBox.Text = info.Durability.ToString(); + ITypeComboBox.SelectedItem = info.Type; + IGradeComboBox.SelectedItem = info.Grade; + ISetComboBox.SelectedItem = info.Set; + ShapeTextBox.Text = info.Shape.ToString(); + SSizeTextBox.Text = info.StackSize.ToString(); + PriceTextBox.Text = info.Price.ToString(); + RTypeComboBox.SelectedItem = info.RequiredType; + RAmountTextBox.Text = info.RequiredAmount.ToString(); + RClassComboBox.SelectedItem = info.RequiredClass; + RGenderComboBox.SelectedItem = info.RequiredGender; + LightTextBox.Text = (info.Light % 15).ToString(); + LightIntensitytextBox.Text = (info.Light / 15).ToString(); + + MinACTextBox.Text = info.Stats[Stat.MinAC].ToString(); + MaxACTextBox.Text = info.Stats[Stat.MaxAC].ToString(); + MinMACTextBox.Text = info.Stats[Stat.MinMAC].ToString(); + MaxMACTextBox.Text = info.Stats[Stat.MaxMAC].ToString(); + MinDCTextBox.Text = info.Stats[Stat.MinDC].ToString(); + MaxDCTextBox.Text = info.Stats[Stat.MaxDC].ToString(); + MinMCTextBox.Text = info.Stats[Stat.MinMC].ToString(); + MaxMCTextBox.Text = info.Stats[Stat.MaxMC].ToString(); + MinSCTextBox.Text = info.Stats[Stat.MinSC].ToString(); + MaxSCTextBox.Text = info.Stats[Stat.MaxSC].ToString(); + HPTextBox.Text = info.Stats[Stat.HP].ToString(); + MPTextBox.Text = info.Stats[Stat.MP].ToString(); + AccuracyTextBox.Text = info.Stats[Stat.Accuracy].ToString(); + AgilityTextBox.Text = info.Stats[Stat.Agility].ToString(); + ASpeedTextBox.Text = info.Stats[Stat.AttackSpeed].ToString(); + LuckTextBox.Text = info.Stats[Stat.Luck].ToString(); + + WWeightTextBox.Text = info.Stats[Stat.WearWeight].ToString(); + HWeightTextBox.Text = info.Stats[Stat.HandWeight].ToString(); + BWeightText.Text = info.Stats[Stat.BagWeight].ToString(); + + StartItemCheckBox.Checked = info.StartItem; + EffectTextBox.Text = info.Effect.ToString(); + + PoisonRecoverytextBox.Text = info.Stats[Stat.PoisonRecovery].ToString(); + SpellRecoverytextBox.Text = info.Stats[Stat.SpellRecovery].ToString(); + MagicResisttextBox.Text = info.Stats[Stat.MagicResist].ToString(); + HealthRecoveryTextbox.Text = info.Stats[Stat.HealthRecovery].ToString(); + StrongTextbox.Text = info.Stats[Stat.Strong].ToString(); + MacRateTextbox.Text = info.Stats[Stat.MaxMACRatePercent].ToString(); + ACRateTextbox.Text = info.Stats[Stat.MaxACRatePercent].ToString(); + PoisonResisttextBox.Text = info.Stats[Stat.PoisonResist].ToString(); + PoisonAttacktextbox.Text = info.Stats[Stat.PoisonAttack].ToString(); + Freezingtextbox.Text = info.Stats[Stat.Freezing].ToString(); + Holytextbox.Text = info.Stats[Stat.Holy].ToString(); + HPratetextbox.Text = info.Stats[Stat.HPRatePercent].ToString(); + MPratetextbox.Text = info.Stats[Stat.MPRatePercent].ToString(); + HpDrainRatetextBox.Text = info.Stats[Stat.HPDrainRatePercent].ToString(); + CriticalRatetextBox.Text = info.Stats[Stat.CriticalRate].ToString(); + CriticalDamagetextBox.Text = info.Stats[Stat.CriticalDamage].ToString(); + ReflecttextBox.Text = info.Stats[Stat.Reflect].ToString(); + MaxDCRatetextBox.Text = info.Stats[Stat.MaxDCRatePercent].ToString(); + MaxSCRatetextBox.Text = info.Stats[Stat.MaxSCRatePercent].ToString(); + MaxMCRatetextBox.Text = info.Stats[Stat.MaxMCRatePercent].ToString(); + DamageReductiontextBox.Text = info.Stats[Stat.DamageReductionPercent].ToString(); + ExpRatetextBox.Text = info.Stats[Stat.ExpRatePercent].ToString(); + DropRatetextBox.Text = info.Stats[Stat.ItemDropRatePercent].ToString(); + GoldRatetextBox.Text = info.Stats[Stat.GoldDropRatePercent].ToString(); + + + + LevelBasedcheckbox.Checked = info.LevelBased; + ClassBasedcheckbox.Checked = info.ClassBased; + + + Bind_dontstorecheckbox.Checked = info.Bind.HasFlag(BindMode.DontStore); + Bind_dontupgradecheckbox.Checked = info.Bind.HasFlag(BindMode.DontUpgrade); + Bind_dontrepaircheckbox.Checked = info.Bind.HasFlag(BindMode.DontRepair); + Bind_donttradecheckbox.Checked = info.Bind.HasFlag(BindMode.DontTrade); + Bind_dontsellcheckbox.Checked = info.Bind.HasFlag(BindMode.DontSell); + Bind_destroyondropcheckbox.Checked = info.Bind.HasFlag(BindMode.DestroyOnDrop); + Bind_dontdeathdropcheckbox.Checked = info.Bind.HasFlag(BindMode.DontDeathdrop); + Bind_dontdropcheckbox.Checked = info.Bind.HasFlag(BindMode.DontDrop); + Bind_DontSpecialRepaircheckBox.Checked = info.Bind.HasFlag(BindMode.NoSRepair); + BindOnEquipcheckbox.Checked = info.Bind.HasFlag(BindMode.BindOnEquip); + BreakOnDeathcheckbox.Checked = info.Bind.HasFlag(BindMode.BreakOnDeath); + NoWeddingRingcheckbox.Checked = info.Bind.HasFlag(BindMode.NoWeddingRing); + unableToRent_CheckBox.Checked = info.Bind.HasFlag(BindMode.UnableToRent); + unableToDisassemble_CheckBox.Checked = info.Bind.HasFlag(BindMode.UnableToDisassemble); + noMailBox.Checked = info.Bind.HasFlag(BindMode.NoMail); + + NeedIdentifycheckbox.Checked = info.NeedIdentify; + ShowGroupPickupcheckbox.Checked = info.ShowGroupPickup; + globalDropNotify_CheckBox.Checked = info.GlobalDropNotify; + + + ParalysischeckBox.Checked = info.Unique.HasFlag(SpecialItemMode.Paralize); + TeleportcheckBox.Checked = info.Unique.HasFlag(SpecialItemMode.Teleport); + ClearcheckBox.Checked = info.Unique.HasFlag(SpecialItemMode.ClearRing); + ProtectioncheckBox.Checked = info.Unique.HasFlag(SpecialItemMode.Protection); + RevivalcheckBox.Checked = info.Unique.HasFlag(SpecialItemMode.Revival); + MusclecheckBox.Checked = info.Unique.HasFlag(SpecialItemMode.Muscle); + FlamecheckBox.Checked = info.Unique.HasFlag(SpecialItemMode.Flame); + HealingcheckBox.Checked = info.Unique.HasFlag(SpecialItemMode.Healing); + ProbecheckBox.Checked = info.Unique.HasFlag(SpecialItemMode.Probe); + SkillcheckBox.Checked = info.Unique.HasFlag(SpecialItemMode.Skill); + NoDuraLosscheckBox.Checked = info.Unique.HasFlag(SpecialItemMode.NoDuraLoss); + RandomStatstextBox.Text = info.RandomStatsId.ToString(); + TooltipTextBox.Text = info.ToolTip; + BlinkcheckBox.Checked = info.Unique.HasFlag(SpecialItemMode.Blink); + + for (int i = 1; i < _selectedItemInfos.Count; i++) + { + info = _selectedItemInfos[i]; + + if (ItemIndexTextBox.Text != info.Index.ToString()) ItemIndexTextBox.Text = string.Empty; + if (ItemNameTextBox.Text != info.Name) ItemNameTextBox.Text = string.Empty; + + if (WeightTextBox.Text != info.Weight.ToString()) WeightTextBox.Text = string.Empty; + if (ImageTextBox.Text != info.Image.ToString()) ImageTextBox.Text = string.Empty; + if (DuraTextBox.Text != info.Durability.ToString()) DuraTextBox.Text = string.Empty; + if (ITypeComboBox.SelectedItem == null || (ItemType)ITypeComboBox.SelectedItem != info.Type) ITypeComboBox.SelectedItem = null; + if (IGradeComboBox.SelectedItem == null || (ItemGrade)IGradeComboBox.SelectedItem != info.Grade) IGradeComboBox.SelectedItem = null; + if (ISetComboBox.SelectedItem == null || (ItemSet)ISetComboBox.SelectedItem != info.Set) ISetComboBox.SelectedItem = null; + if (ShapeTextBox.Text != info.Shape.ToString()) ShapeTextBox.Text = string.Empty; + if (SSizeTextBox.Text != info.StackSize.ToString()) SSizeTextBox.Text = string.Empty; + if (PriceTextBox.Text != info.Price.ToString()) PriceTextBox.Text = string.Empty; + if (RTypeComboBox.SelectedItem == null || (RequiredType)RTypeComboBox.SelectedItem != info.RequiredType) RTypeComboBox.SelectedItem = null; + if (RAmountTextBox.Text != info.RequiredAmount.ToString()) RAmountTextBox.Text = string.Empty; + if (RClassComboBox.SelectedItem == null || (RequiredClass)RClassComboBox.SelectedItem != info.RequiredClass) RClassComboBox.SelectedItem = null; + if (RGenderComboBox.SelectedItem == null || (RequiredGender)RGenderComboBox.SelectedItem != info.RequiredGender) RGenderComboBox.SelectedItem = null; + if (LightTextBox.Text != (info.Light % 15).ToString()) LightTextBox.Text = string.Empty; + if (LightIntensitytextBox.Text != (info.Light / 15).ToString()) LightIntensitytextBox.Text = string.Empty; + + if (MinACTextBox.Text != info.Stats[Stat.MinAC].ToString()) MinACTextBox.Text = string.Empty; + if (MaxACTextBox.Text != info.Stats[Stat.MaxAC].ToString()) MaxACTextBox.Text = string.Empty; + if (MinMACTextBox.Text != info.Stats[Stat.MinMAC].ToString()) MinMACTextBox.Text = string.Empty; + if (MaxMACTextBox.Text != info.Stats[Stat.MaxMAC].ToString()) MaxMACTextBox.Text = string.Empty; + if (MinDCTextBox.Text != info.Stats[Stat.MinDC].ToString()) MinDCTextBox.Text = string.Empty; + if (MaxDCTextBox.Text != info.Stats[Stat.MaxDC].ToString()) MaxDCTextBox.Text = string.Empty; + if (MinMCTextBox.Text != info.Stats[Stat.MinMC].ToString()) MinMCTextBox.Text = string.Empty; + if (MaxMCTextBox.Text != info.Stats[Stat.MaxMC].ToString()) MaxMCTextBox.Text = string.Empty; + if (MinSCTextBox.Text != info.Stats[Stat.MinSC].ToString()) MinSCTextBox.Text = string.Empty; + if (MaxSCTextBox.Text != info.Stats[Stat.MaxSC].ToString()) MaxSCTextBox.Text = string.Empty; + if (HPTextBox.Text != info.Stats[Stat.HP].ToString()) HPTextBox.Text = string.Empty; + if (MPTextBox.Text != info.Stats[Stat.MP].ToString()) MPTextBox.Text = string.Empty; + if (AccuracyTextBox.Text != info.Stats[Stat.Accuracy].ToString()) AccuracyTextBox.Text = string.Empty; + if (AgilityTextBox.Text != info.Stats[Stat.Agility].ToString()) AgilityTextBox.Text = string.Empty; + if (ASpeedTextBox.Text != info.Stats[Stat.AttackSpeed].ToString()) ASpeedTextBox.Text = string.Empty; + if (LuckTextBox.Text != info.Stats[Stat.Luck].ToString()) LuckTextBox.Text = string.Empty; + + if (WWeightTextBox.Text != info.Stats[Stat.WearWeight].ToString()) WWeightTextBox.Text = string.Empty; + if (HWeightTextBox.Text != info.Stats[Stat.HandWeight].ToString()) HWeightTextBox.Text = string.Empty; + if (BWeightText.Text != info.Stats[Stat.BagWeight].ToString()) BWeightText.Text = string.Empty; + + if (StartItemCheckBox.Checked != info.StartItem) StartItemCheckBox.CheckState = CheckState.Indeterminate; + if (EffectTextBox.Text != info.Effect.ToString()) EffectTextBox.Text = string.Empty; + + if (PoisonRecoverytextBox.Text != info.Stats[Stat.PoisonRecovery].ToString()) PoisonRecoverytextBox.Text = string.Empty; + if (SpellRecoverytextBox.Text != info.Stats[Stat.SpellRecovery].ToString()) SpellRecoverytextBox.Text = string.Empty; + if (MagicResisttextBox.Text != info.Stats[Stat.MagicResist].ToString()) MagicResisttextBox.Text = string.Empty; + if (HealthRecoveryTextbox.Text != info.Stats[Stat.HealthRecovery].ToString()) HealthRecoveryTextbox.Text = string.Empty; + if (StrongTextbox.Text != info.Stats[Stat.Strong].ToString()) StrongTextbox.Text = string.Empty; + if (MacRateTextbox.Text != info.Stats[Stat.MaxMACRatePercent].ToString()) MacRateTextbox.Text = string.Empty; + if (ACRateTextbox.Text != info.Stats[Stat.MaxACRatePercent].ToString()) ACRateTextbox.Text = string.Empty; + if (PoisonResisttextBox.Text != info.Stats[Stat.PoisonResist].ToString()) PoisonResisttextBox.Text = string.Empty; + if (PoisonAttacktextbox.Text != info.Stats[Stat.PoisonAttack].ToString()) PoisonAttacktextbox.Text = string.Empty; + if (Freezingtextbox.Text != info.Stats[Stat.Freezing].ToString()) Freezingtextbox.Text = string.Empty; + if (Holytextbox.Text != info.Stats[Stat.Holy].ToString()) Holytextbox.Text = string.Empty; + if (HPratetextbox.Text != info.Stats[Stat.HPRatePercent].ToString()) HPratetextbox.Text = string.Empty; + if (MPratetextbox.Text != info.Stats[Stat.MPRatePercent].ToString()) MPratetextbox.Text = string.Empty; + if (HpDrainRatetextBox.Text != info.Stats[Stat.HPDrainRatePercent].ToString()) HpDrainRatetextBox.Text = string.Empty; + if (CriticalRatetextBox.Text != info.Stats[Stat.CriticalRate].ToString()) CriticalRatetextBox.Text = string.Empty; + if (CriticalDamagetextBox.Text != info.Stats[Stat.CriticalDamage].ToString()) CriticalDamagetextBox.Text = string.Empty; + if (ReflecttextBox.Text != info.Stats[Stat.Reflect].ToString()) ReflecttextBox.Text = string.Empty; + if (MaxDCRatetextBox.Text != info.Stats[Stat.MaxDCRatePercent].ToString()) MaxDCRatetextBox.Text = string.Empty; + if (MaxSCRatetextBox.Text != info.Stats[Stat.MaxSCRatePercent].ToString()) MaxSCRatetextBox.Text = string.Empty; + if (MaxMCRatetextBox.Text != info.Stats[Stat.MaxMCRatePercent].ToString()) MaxMCRatetextBox.Text = string.Empty; + if (DamageReductiontextBox.Text != info.Stats[Stat.DamageReductionPercent].ToString()) DamageReductiontextBox.Text = string.Empty; + if (ExpRatetextBox.Text != info.Stats[Stat.ExpRatePercent].ToString()) ExpRatetextBox.Text = string.Empty; + if (DropRatetextBox.Text != info.Stats[Stat.ItemDropRatePercent].ToString()) DropRatetextBox.Text = string.Empty; + if (GoldRatetextBox.Text != info.Stats[Stat.GoldDropRatePercent].ToString()) GoldRatetextBox.Text = string.Empty; + if (LevelBasedcheckbox.Checked != info.LevelBased) LevelBasedcheckbox.CheckState = CheckState.Indeterminate; + if (ClassBasedcheckbox.Checked != info.ClassBased) ClassBasedcheckbox.CheckState = CheckState.Indeterminate; + if (Bind_dontstorecheckbox.Checked != info.Bind.HasFlag(BindMode.DontStore)) Bind_dontstorecheckbox.CheckState = CheckState.Indeterminate; + if (Bind_dontupgradecheckbox.Checked != info.Bind.HasFlag(BindMode.DontUpgrade)) Bind_dontupgradecheckbox.CheckState = CheckState.Indeterminate; + if (Bind_dontrepaircheckbox.Checked != info.Bind.HasFlag(BindMode.DontRepair)) Bind_dontrepaircheckbox.CheckState = CheckState.Indeterminate; + if (Bind_donttradecheckbox.Checked != info.Bind.HasFlag(BindMode.DontTrade)) Bind_donttradecheckbox.CheckState = CheckState.Indeterminate; + if (Bind_dontsellcheckbox.Checked != info.Bind.HasFlag(BindMode.DontSell)) Bind_dontsellcheckbox.CheckState = CheckState.Indeterminate; + if (Bind_destroyondropcheckbox.Checked != info.Bind.HasFlag(BindMode.DestroyOnDrop)) Bind_destroyondropcheckbox.CheckState = CheckState.Indeterminate; + if (Bind_dontdeathdropcheckbox.Checked != info.Bind.HasFlag(BindMode.DontDeathdrop)) Bind_dontdeathdropcheckbox.CheckState = CheckState.Indeterminate; + if (Bind_dontdropcheckbox.Checked != info.Bind.HasFlag(BindMode.DontDrop)) Bind_dontdropcheckbox.CheckState = CheckState.Indeterminate; + if (Bind_DontSpecialRepaircheckBox.Checked != info.Bind.HasFlag(BindMode.NoSRepair)) Bind_DontSpecialRepaircheckBox.CheckState = CheckState.Indeterminate; + if (BindOnEquipcheckbox.Checked != info.Bind.HasFlag(BindMode.BindOnEquip)) BindOnEquipcheckbox.CheckState = CheckState.Indeterminate; + if (BreakOnDeathcheckbox.Checked != info.Bind.HasFlag(BindMode.BreakOnDeath)) BreakOnDeathcheckbox.CheckState = CheckState.Indeterminate; + if (NoWeddingRingcheckbox.Checked != info.Bind.HasFlag(BindMode.NoWeddingRing)) NoWeddingRingcheckbox.CheckState = CheckState.Indeterminate; + + if (unableToRent_CheckBox.Checked != info.Bind.HasFlag(BindMode.UnableToRent)) + unableToRent_CheckBox.CheckState = CheckState.Indeterminate; + + if (unableToDisassemble_CheckBox.Checked != info.Bind.HasFlag(BindMode.UnableToDisassemble)) + unableToDisassemble_CheckBox.CheckState = CheckState.Indeterminate; + if (noMailBox.Checked != info.Bind.HasFlag(BindMode.NoMail)) noMailBox.CheckState = CheckState.Indeterminate; + + if (NeedIdentifycheckbox.Checked != info.NeedIdentify) NeedIdentifycheckbox.CheckState = CheckState.Indeterminate; + if (ShowGroupPickupcheckbox.Checked != info.ShowGroupPickup) ShowGroupPickupcheckbox.CheckState = CheckState.Indeterminate; + if (globalDropNotify_CheckBox.Checked != info.GlobalDropNotify) + globalDropNotify_CheckBox.CheckState = CheckState.Indeterminate; + + if (ParalysischeckBox.Checked != info.Unique.HasFlag(SpecialItemMode.Paralize)) ParalysischeckBox.CheckState = CheckState.Indeterminate; + if (TeleportcheckBox.Checked != info.Unique.HasFlag(SpecialItemMode.Teleport)) TeleportcheckBox.CheckState = CheckState.Indeterminate; + if (ClearcheckBox.Checked != info.Unique.HasFlag(SpecialItemMode.ClearRing)) ClearcheckBox.CheckState = CheckState.Indeterminate; + if (ProtectioncheckBox.Checked != info.Unique.HasFlag(SpecialItemMode.Protection)) ProtectioncheckBox.CheckState = CheckState.Indeterminate; + if (RevivalcheckBox.Checked != info.Unique.HasFlag(SpecialItemMode.Revival)) RevivalcheckBox.CheckState = CheckState.Indeterminate; + if (MusclecheckBox.Checked != info.Unique.HasFlag(SpecialItemMode.Muscle)) MusclecheckBox.CheckState = CheckState.Indeterminate; + if (FlamecheckBox.Checked != info.Unique.HasFlag(SpecialItemMode.Flame)) FlamecheckBox.CheckState = CheckState.Indeterminate; + if (HealingcheckBox.Checked != info.Unique.HasFlag(SpecialItemMode.Healing)) HealingcheckBox.CheckState = CheckState.Indeterminate; + if (ProbecheckBox.Checked != info.Unique.HasFlag(SpecialItemMode.Probe)) ProbecheckBox.CheckState = CheckState.Indeterminate; + if (SkillcheckBox.Checked != info.Unique.HasFlag(SpecialItemMode.Skill)) SkillcheckBox.CheckState = CheckState.Indeterminate; + if (NoDuraLosscheckBox.Checked != info.Unique.HasFlag(SpecialItemMode.NoDuraLoss)) NoDuraLosscheckBox.CheckState = CheckState.Indeterminate; + if (RandomStatstextBox.Text != info.RandomStatsId.ToString()) RandomStatstextBox.Text = string.Empty; + if (TooltipTextBox.Text != info.ToolTip) TooltipTextBox.Text = string.Empty; + if (BlinkcheckBox.Checked != info.Unique.HasFlag(SpecialItemMode.Blink)) BlinkcheckBox.CheckState = CheckState.Indeterminate; + } + RefreshUniqueTab(); + } + + private void RefreshItemList() + { + ItemInfoListBox.SelectedIndexChanged -= ItemInfoListBox_SelectedIndexChanged; + + List selected = new List(); + + for (int i = 0; i < ItemInfoListBox.Items.Count; i++) selected.Add(ItemInfoListBox.GetSelected(i)); + ItemInfoListBox.Items.Clear(); + for (int i = 0; i < Envir.ItemInfoList.Count; i++) + { + if (ITypeFilterComboBox.SelectedItem == null || + ITypeFilterComboBox.SelectedIndex == ITypeFilterComboBox.Items.Count - 1 || + Envir.ItemInfoList[i].Type == (ItemType)ITypeFilterComboBox.SelectedItem) + ItemInfoListBox.Items.Add(Envir.ItemInfoList[i]); + }; + for (int i = 0; i < selected.Count; i++) ItemInfoListBox.SetSelected(i, selected[i]); + + ItemInfoListBox.SelectedIndexChanged += ItemInfoListBox_SelectedIndexChanged; + } + + private void AddButton_Click(object sender, EventArgs e) + { + if (ITypeFilterComboBox.SelectedIndex == ITypeFilterComboBox.Items.Count - 1) + { + Envir.CreateItemInfo(); + ITypeFilterComboBox.SelectedIndex = ITypeFilterComboBox.Items.Count - 1; + } + else + { + Envir.CreateItemInfo((ItemType)ITypeFilterComboBox.SelectedItem); + } + + UpdateInterface(true); + } + + private void ItemInfoListBox_SelectedIndexChanged(object sender, EventArgs e) + { + UpdateInterface(); + } + + private void ITypeFilterComboBox_SelectedIndexChanged(object sender, EventArgs e) + { + UpdateInterface(true); + } + + private void RemoveButton_Click(object sender, EventArgs e) + { + if (_selectedItemInfos.Count == 0) return; + + if (MessageBox.Show("Are you sure you want to remove the selected Items?", "Remove Items?", MessageBoxButtons.YesNo) != DialogResult.Yes) return; + + for (int i = 0; i < _selectedItemInfos.Count; i++) Envir.Remove(_selectedItemInfos[i]); + + if (Envir.ItemInfoList.Count == 0) Envir.ItemIndex = 0; + + UpdateInterface(true); + } + private void ItemNameTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Name = ActiveControl.Text; + + RefreshItemList(); + } + private void ITypeComboBox_SelectedIndexChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Type = (ItemType)ITypeComboBox.SelectedItem; + } + private void RTypeComboBox_SelectedIndexChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].RequiredType = (RequiredType) RTypeComboBox.SelectedItem; + } + private void RGenderComboBox_SelectedIndexChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].RequiredGender = (RequiredGender)RGenderComboBox.SelectedItem; + } + private void RClassComboBox_SelectedIndexChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].RequiredClass = (RequiredClass)RClassComboBox.SelectedItem; + } + private void StartItemCheckBox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].StartItem = StartItemCheckBox.Checked; + } + private void WeightTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Weight = temp; + } + private void ImageTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + ushort temp; + + if (!ushort.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Image = temp; + } + private void DuraTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + ushort temp; + + if (!ushort.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Durability = temp; + } + private void ShapeTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + short temp; + + if (!short.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Shape = temp; + } + private void SSizeTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + ushort temp; + + if (!ushort.TryParse(ActiveControl.Text, out temp) || temp > 999) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].StackSize = temp; + } + private void PriceTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + uint temp; + + if (!uint.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Price = temp; + } + private void RAmountTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].RequiredAmount = temp; + } + private void LightTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + if (temp > 14) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Light = (byte)(temp + (_selectedItemInfos[i].Light / 15)*15); + } + private void MinACTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Stats[Stat.MinAC] = temp; + } + private void MaxACTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Stats[Stat.MaxAC] = temp; + } + private void MinMACTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Stats[Stat.MinMAC] = temp; + } + private void MaxMACTextBox_TextChanged(object sender, EventArgs e) + { + + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Stats[Stat.MaxMAC] = temp; + } + private void MinDCTextBox_TextChanged(object sender, EventArgs e) + { + + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Stats[Stat.MinDC] = temp; + } + private void MaxDCTextBox_TextChanged(object sender, EventArgs e) + { + + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Stats[Stat.MaxDC] = temp; + } + private void MinMCTextBox_TextChanged(object sender, EventArgs e) + { + + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Stats[Stat.MinMC] = temp; + } + private void MaxMCTextBox_TextChanged(object sender, EventArgs e) + { + + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Stats[Stat.MaxMC] = temp; + } + private void MinSCTextBox_TextChanged(object sender, EventArgs e) + { + + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Stats[Stat.MinSC] = temp; + } + private void MaxSCTextBox_TextChanged(object sender, EventArgs e) + { + + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Stats[Stat.MaxSC] = temp; + } + private void HPTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + ushort temp; + + if (!ushort.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Stats[Stat.HP] = temp; + } + private void MPTextBox_TextChanged(object sender, EventArgs e) + { + + if (ActiveControl != sender) return; + + ushort temp; + + if (!ushort.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Stats[Stat.MP] = temp; + } + private void AccuracyTextBox_TextChanged(object sender, EventArgs e) + { + + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Stats[Stat.Accuracy] = temp; + } + private void AgilityTextBox_TextChanged(object sender, EventArgs e) + { + + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Stats[Stat.Agility] = temp; + } + private void ASpeedTextBox_TextChanged(object sender, EventArgs e) + { + + if (ActiveControl != sender) return; + + sbyte temp; + + if (!sbyte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Stats[Stat.AttackSpeed] = temp; + } + private void LuckTextBox_TextChanged(object sender, EventArgs e) + { + + if (ActiveControl != sender) return; + + sbyte temp; + + if (!sbyte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Stats[Stat.Luck] = temp; + } + private void BWeightText_TextChanged(object sender, EventArgs e) + { + + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Stats[Stat.BagWeight] = temp; + } + private void HWeightTextBox_TextChanged(object sender, EventArgs e) + { + + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Stats[Stat.HandWeight] = temp; + } + private void WWeightTextBox_TextChanged(object sender, EventArgs e) + { + + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Stats[Stat.WearWeight] = temp; + } + private void EffectTextBox_TextChanged(object sender, EventArgs e) + { + + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Effect = temp; + } + + private void ItemInfoForm_FormClosed(object sender, FormClosedEventArgs e) + { + Envir.SaveDB(); + } + + private void PasteButton_Click(object sender, EventArgs e) + { + //string data = Clipboard.GetText(); + + //if (!data.StartsWith("Item", StringComparison.OrdinalIgnoreCase)) + //{ + // MessageBox.Show("Cannot Paste, Copied data is not Item Information."); + // return; + //} + + + //string[] items = data.Split(new[] { '\t' }, StringSplitOptions.RemoveEmptyEntries); + + + //for (int i = 1; i < items.Length; i++) + //{ + // ItemInfo info = ItemInfo.FromText(items[i]); + + // if (info == null) continue; + // info.Index = ++Envir.ItemIndex; + // Envir.ItemInfoList.Add(info); + //} + + //UpdateInterface(); + } + + private void CopyMButton_Click(object sender, EventArgs e) + { + + } + + private void ExportAllButton_Click(object sender, EventArgs e) + { + //ExportItems(Envir.ItemInfoList); + } + + private void ExportSelectedButton_Click(object sender, EventArgs e) + { + //var list = ItemInfoListBox.SelectedItems.Cast().ToList(); + + //ExportItems(list); + } + + private void ExportItems(IEnumerable items) + { + //var itemInfos = items as ItemInfo[] ?? items.ToArray(); + //var list = itemInfos.Select(item => item.ToText()).ToList(); + + //File.WriteAllLines(ItemListPath, list); + + //MessageBox.Show(itemInfos.Count() + " Items have been exported"); + } + + private void ImportButton_Click(object sender, EventArgs e) + { + //string Path = string.Empty; + + //OpenFileDialog ofd = new OpenFileDialog(); + //ofd.Filter = "Text File|*.txt"; + //ofd.ShowDialog(); + + //if (ofd.FileName == string.Empty) return; + + //Path = ofd.FileName; + + //string data; + //using (var sr = new StreamReader(Path)) + //{ + // data = sr.ReadToEnd(); + //} + + //var items = data.Split(new[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); + + //var count = 0; + //foreach (var info in items.Select(ItemInfo.FromText).Where(info => info != null)) + //{ + // count++; + // info.Index = ++Envir.ItemIndex; + // Envir.ItemInfoList.Add(info); + //} + + //MessageBox.Show(count + " Items have been imported"); + //UpdateInterface(true); + } + + private void ISetComboBox_SelectedIndexChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Set = (ItemSet)ISetComboBox.SelectedItem; + } + + private void ACRateTextbox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Stats[Stat.MaxACRatePercent] = temp; + } + + private void MacRateTextbox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Stats[Stat.MaxMACRatePercent] = temp; + } + + private void MagicResisttextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Stats[Stat.MagicResist] = temp; + } + + private void PoisonResisttextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Stats[Stat.PoisonResist] = temp; + } + + private void HealthRecoveryTextbox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Stats[Stat.HealthRecovery] = temp; + } + + private void SpellRecoverytextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Stats[Stat.SpellRecovery] = temp; + } + + private void PoisonRecoverytextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Stats[Stat.PoisonRecovery] = temp; + } + + private void HporMpRatetextbox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Stats[Stat.HPRatePercent] = temp; + } + + private void Holytextbox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Stats[Stat.Holy] = temp; + } + + private void Freezingtextbox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Stats[Stat.Freezing] = temp; + } + + private void PoisonAttacktextbox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Stats[Stat.PoisonAttack] = temp; + } + + private void ClassBasedcheckbox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].ClassBased = ClassBasedcheckbox.Checked; + } + + private void LevelBasedcheckbox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].LevelBased = LevelBasedcheckbox.Checked; + } + + private void Bind_dontdropcheckbox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Bind = (Bind_dontdropcheckbox.Checked ? _selectedItemInfos[i].Bind |= BindMode.DontDrop : _selectedItemInfos[i].Bind ^= BindMode.DontDrop); + } + + private void Bind_dontdeathdropcheckbox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Bind = (Bind_dontdeathdropcheckbox.Checked ? _selectedItemInfos[i].Bind |= BindMode.DontDeathdrop : _selectedItemInfos[i].Bind ^= BindMode.DontDeathdrop); + } + + private void Bind_destroyondropcheckbox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Bind = (Bind_destroyondropcheckbox.Checked ? _selectedItemInfos[i].Bind |= BindMode.DestroyOnDrop : _selectedItemInfos[i].Bind ^= BindMode.DestroyOnDrop); + } + + private void Bind_dontsellcheckbox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Bind = (Bind_dontsellcheckbox.Checked ? _selectedItemInfos[i].Bind |= BindMode.DontSell : _selectedItemInfos[i].Bind ^= BindMode.DontSell); + } + + private void Bind_donttradecheckbox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Bind = (Bind_donttradecheckbox.Checked ? _selectedItemInfos[i].Bind |= BindMode.DontTrade : _selectedItemInfos[i].Bind ^= BindMode.DontTrade); + } + + private void Bind_dontrepaircheckbox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Bind = (Bind_dontrepaircheckbox.Checked ? _selectedItemInfos[i].Bind |= BindMode.DontRepair : _selectedItemInfos[i].Bind ^= BindMode.DontRepair); + } + + private void Bind_dontstorecheckbox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Bind = (Bind_dontstorecheckbox.Checked ? _selectedItemInfos[i].Bind |= BindMode.DontStore : _selectedItemInfos[i].Bind ^= BindMode.DontStore); + } + + private void Bind_dontupgradecheckbox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Bind = (Bind_dontupgradecheckbox.Checked ? _selectedItemInfos[i].Bind |= BindMode.DontUpgrade : _selectedItemInfos[i].Bind ^= BindMode.DontUpgrade); + } + + private void NeedIdentifycheckbox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].NeedIdentify = NeedIdentifycheckbox.Checked; + } + + private void ShowGroupPickupcheckbox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].ShowGroupPickup = ShowGroupPickupcheckbox.Checked; + } + + private void BindOnEquipcheckbox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Bind = (BindOnEquipcheckbox.Checked ? _selectedItemInfos[i].Bind |= BindMode.BindOnEquip : _selectedItemInfos[i].Bind ^= BindMode.BindOnEquip); + } + + private void MPratetextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Stats[Stat.MPRatePercent] = temp; + } + + private void HpDrainRatetextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Stats[Stat.HPDrainRatePercent] = temp; + } + + + private void ParalysischeckBox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Unique = (ParalysischeckBox.Checked ? _selectedItemInfos[i].Unique |= SpecialItemMode.Paralize : _selectedItemInfos[i].Unique ^= SpecialItemMode.Paralize); + } + + private void TeleportcheckBox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Unique = (TeleportcheckBox.Checked ? _selectedItemInfos[i].Unique |= SpecialItemMode.Teleport : _selectedItemInfos[i].Unique ^= SpecialItemMode.Teleport); + } + + private void ClearcheckBox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Unique = (ClearcheckBox.Checked ? _selectedItemInfos[i].Unique |= SpecialItemMode.ClearRing : _selectedItemInfos[i].Unique ^= SpecialItemMode.ClearRing); + } + + private void ProtectioncheckBox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Unique = (ProtectioncheckBox.Checked ? _selectedItemInfos[i].Unique |= SpecialItemMode.Protection : _selectedItemInfos[i].Unique ^= SpecialItemMode.Protection); + } + + private void RevivalcheckBox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Unique = (RevivalcheckBox.Checked ? _selectedItemInfos[i].Unique |= SpecialItemMode.Revival : _selectedItemInfos[i].Unique ^= SpecialItemMode.Revival); + } + + private void MusclecheckBox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Unique = (MusclecheckBox.Checked ? _selectedItemInfos[i].Unique |= SpecialItemMode.Muscle : _selectedItemInfos[i].Unique ^= SpecialItemMode.Muscle); + } + + private void FlamecheckBox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Unique = (FlamecheckBox.Checked ? _selectedItemInfos[i].Unique |= SpecialItemMode.Flame : _selectedItemInfos[i].Unique ^= SpecialItemMode.Flame); + } + + private void HealingcheckBox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Unique = (HealingcheckBox.Checked ? _selectedItemInfos[i].Unique |= SpecialItemMode.Healing : _selectedItemInfos[i].Unique ^= SpecialItemMode.Healing); + } + + private void ProbecheckBox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Unique = (ProbecheckBox.Checked ? _selectedItemInfos[i].Unique |= SpecialItemMode.Probe : _selectedItemInfos[i].Unique ^= SpecialItemMode.Probe); + } + + private void SkillcheckBox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Unique = (SkillcheckBox.Checked ? _selectedItemInfos[i].Unique |= SpecialItemMode.Skill : _selectedItemInfos[i].Unique ^= SpecialItemMode.Skill); + } + + private void NoDuraLosscheckBox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Unique = (NoDuraLosscheckBox.Checked ? _selectedItemInfos[i].Unique |= SpecialItemMode.NoDuraLoss : _selectedItemInfos[i].Unique ^= SpecialItemMode.NoDuraLoss); + } + + private void StrongTextbox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Stats[Stat.Strong] = temp; + } + + private void CriticalRatetextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Stats[Stat.CriticalRate] = temp; + } + + private void CriticalDamagetextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Stats[Stat.CriticalDamage] = temp; + } + + private void ReflecttextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Stats[Stat.Reflect] = temp; + } + + private void MaxDCRatetextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Stats[Stat.MaxDCRatePercent] = temp; + } + + private void MaxSCRatetextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Stats[Stat.MaxSCRatePercent] = temp; + } + + private void MaxMCRatetextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Stats[Stat.MaxMCRatePercent] = temp; + } + + private void DamageReductiontextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Stats[Stat.DamageReductionPercent] = temp; + } + + private void ExpRatetextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Stats[Stat.ExpRatePercent] = temp; + } + + private void GoldRatetextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Stats[Stat.GoldDropRatePercent] = temp; + } + + private void DropRatetextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Stats[Stat.ItemDropRatePercent] = temp; + } + + private void Bind_DontSpecialRepaircheckBox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Bind = (Bind_DontSpecialRepaircheckBox.Checked ? _selectedItemInfos[i].Bind |= BindMode.NoSRepair : _selectedItemInfos[i].Bind ^= BindMode.NoSRepair); + } + + private void BlinkcheckBox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Unique = (BlinkcheckBox.Checked ? _selectedItemInfos[i].Unique |= SpecialItemMode.Blink : _selectedItemInfos[i].Unique ^= SpecialItemMode.Blink); + } + + private void LightIntensitytextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + if (temp > 4) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Light = (byte)((_selectedItemInfos[i].Light % 15) + (15 * temp)); + } + + private void RandomStatstextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + if ((temp >= Settings.RandomItemStatsList.Count) && (temp != 255)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedItemInfos.Count; i++) + { + _selectedItemInfos[i].RandomStatsId = temp; + if (temp != 255) + _selectedItemInfos[i].RandomStats = Settings.RandomItemStatsList[temp]; + else + _selectedItemInfos[i].RandomStats = null; + } + } + + private void PickaxecheckBox_CheckedChanged(object sender, EventArgs e) + { + } + + private void IGradeComboBox_SelectedIndexChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Grade = (ItemGrade)IGradeComboBox.SelectedItem; + } + + private void FastRunCheckBox_CheckedChanged(object sender, EventArgs e) + { + } + + private void TooltipTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].ToolTip = TooltipTextBox.Text; + } + + private void CanAwakening_CheckedChanged(object sender, EventArgs e) + { + } + + private void BreakOnDeathcheckbox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Bind = (BreakOnDeathcheckbox.Checked ? _selectedItemInfos[i].Bind |= BindMode.BreakOnDeath : _selectedItemInfos[i].Bind ^= BindMode.BreakOnDeath); + } + + private void ItemInfoForm_Load(object sender, EventArgs e) + { + + } + + private void Gameshop_button_Click(object sender, EventArgs e) + { + for (int i = 0; i < _selectedItemInfos.Count; i++) + Envir.AddToGameShop(_selectedItemInfos[i]); + Envir.SaveDB(); + } + + private void NoWeddingRingcheckbox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Bind = (NoWeddingRingcheckbox.Checked ? _selectedItemInfos[i].Bind |= BindMode.NoWeddingRing : _selectedItemInfos[i].Bind ^= BindMode.NoWeddingRing); + } + + private void unableToRent_CheckBox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) + return; + + foreach (var selectedItem in _selectedItemInfos) + selectedItem.Bind = unableToRent_CheckBox.Checked + ? selectedItem.Bind |= BindMode.UnableToRent + : selectedItem.Bind ^= BindMode.UnableToRent; + } + + private void unableToDisassemble_CheckBox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) + return; + + foreach (var selectedItem in _selectedItemInfos) + selectedItem.Bind = unableToDisassemble_CheckBox.Checked + ? selectedItem.Bind |= BindMode.UnableToDisassemble + : selectedItem.Bind ^= BindMode.UnableToDisassemble; + } + + private void globalDropNotify_CheckBox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) + return; + + foreach (var itemInfo in _selectedItemInfos) + itemInfo.GlobalDropNotify = globalDropNotify_CheckBox.Checked; + } + + private void noMailBox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + for (int i = 0; i < _selectedItemInfos.Count; i++) + _selectedItemInfos[i].Bind = + (noMailBox.Checked ? _selectedItemInfos[i].Bind |= BindMode.NoMail : _selectedItemInfos[i].Bind ^= BindMode.NoMail); + } + } +} diff --git a/Server.MirForms/Database/ItemInfoForm.resx b/Server.MirForms/Database/ItemInfoForm.resx new file mode 100644 index 0000000..1b01221 --- /dev/null +++ b/Server.MirForms/Database/ItemInfoForm.resx @@ -0,0 +1,1763 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAgAICAQAAAABADoAgAAhgAAACAgAAAAABgAqAwAAG4DAAAgIAAAAAAIAKgIAAAWEAAAQEAAAAAA + GAAoMgAAvhgAAEBAEAAAAAQAaAoAAOZKAABAQAAAAAAIACgWAABOVQAAgIAAAAAAGAAoyAAAdmsAAICA + AAAAAAgAKEwAAJ4zAQAoAAAAIAAAAEAAAAABAAQAAAAAAAACAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAA + gAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////ABER + ERAAAAAAAAAAAAAAAAARERERAAAAAAAAAAAAAAAAERERERAAAAAAAAAAAAAAABERERERAAAAAQAAAAAA + AAARERAAAQAAAAEAAAAAAAAAEREREQAAAAABAAAAAAAAABERERERAAAAABAAAAAAAAAREREREQAAAAAQ + AAAQAAAAEREREREAAAAAAAABEAAAAAERERERAAAAAAAxERAAAAAQERERERAAAAABEQAAAAAAAAAREREQ + AAAAAQARERARAAAAEREREAAAAAEBEAERERAAAAAAAAAAAAAQEQARMzERAAAAEREAAAABEBADMzMzEQAA + AAEQAAAAAAEAADMxMxEAAAAAAAAAAAEQEQAzMxEQAAABAAEAAAEREAAAMBMQEAAAAAARAAABEREQADEQ + EQAAAAABEBEBEREQATAREREAAAAQAQAQARERAQABEQERAAAAAAAAEBETEQMRERAREQAAAAAAARARExEQ + AREAAREQAAAAAAEBERMxMQEBAAABEQABAAAAAQERERMREQAAAAEAABAAABABERExERAAAAAAAAAAAAAA + EREREREAAAAAAAAAABAQEQAAAREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABAAAAAAAAAAAA + AAAAEAARAAAAAAAAAAAAAAAAAAABEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABABgAAAAAAAAM + AAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA + AACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAAAA + AAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA + AACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACA + AACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAACAAACAAACAAACAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAA + AACAAACAAACAAACAAACAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAAAAAAAAAACAAACAAACAAACAAACA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACAAAAAAACAAACAAAAAAAAAAACAAACAAICAAICAAICAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAA + AACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAACAAAAAAAAAAICAAICAAICA + AICAAICAAICAAICAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAICAAICAAICAAACAAICAAICAAACAAACAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAACAAACA + AAAAAAAAAICAAICAAICAAICAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAACA + AAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAICAAAAAAACAAICAAACAAAAA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAACAAACAAACA + AACAAACAAACAAAAAAAAAAAAAAICAAACAAACAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAACAAACAAAAAAACAAACAAAAAAACAAACAAACAAACAAACAAACAAAAAAAAAAACAAICAAAAAAACAAACA + AACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAACA + AACAAACAAACAAACAAAAAAACAAAAAAAAAAAAAAACAAACAAACAAAAAAACAAACAAACAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAICAAACAAACAAAAAAICAAACAAACA + AACAAACAAACAAAAAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + AACAAAAAAACAAACAAACAAICAAACAAACAAACAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAACAAACAAACA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAACAAICAAICAAACA + AICAAACAAAAAAACAAAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAACAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAACAAACAAACAAICAAACAAACAAACAAACAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACA + AACAAACAAACAAACAAICAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAAAA + AACAAACAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAA + AACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAACAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE + AAAAAAAAAAAAAAABAAAAAQAAAAD/AAD/AAD/AAAAAP//AP//AAD/AP8AwMDAAP/48ADX6/oA1P9/AP8A + AADiK4oAKiqlAAAAAAAEBAQACAgIAAwMDAAREREAFhYWABwcHAAiIiIAKSkpADMzMwA5OTkAQkJCAE1N + TQBVVVUAYGBgAGZmZgBwcHAAgICAAIyMjACUlJQAmZmZAKSkpACsrKwAtra2AMDAwADMzMwA1NTUANra + 2gDg4OAA7OzsAPj4+AD7+/sA////ADMAAABmAAAAmQAAAMwAAAD/AAAAADMAADMzAABmMwAAmTMAAMwz + AAD/MwAAAGYAADNmAABmZgAAmWYAAMxmAAD/ZgAAAJkAADOZAABmmQAAmZkAAMyZAAD/mQAAAMwAADPM + AABmzAAAmcwAAMzMAAD/zAAAAP8AADP/AABm/wAAmf8AAMz/AAD//wAAAAAzADMAMwBmADMAmQAzAMwA + MwD/ADMAADMzAGYzMwCZMzMAzDMzAP8zMwAAZjMAM2YzAGZmMwCZZjMAzGYzAP9mMwAAmTMAM5kzAGaZ + MwCZmTMAzJkzAP+ZMwAAzDMAM8wzAGbMMwCZzDMAzMwzAP/MMwAA/zMAM/8zAGb/MwCZ/zMAzP8zAP// + MwAAAGYAMwBmAGYAZgCZAGYAzABmAP8AZgAAM2YAMzNmAGYzZgCZM2YAzDNmAP8zZgAAZmYAM2ZmAJlm + ZgDMZmYA/2ZmAACZZgAzmWYAZplmAJmZZgDMmWYA/5lmAADMZgAzzGYAZsxmAJnMZgDMzGYA/8xmAAD/ + ZgAz/2YAZv9mAJn/ZgDM/2YA//9mAAAAmQAzAJkAZgCZAJkAmQDMAJkA/wCZAAAzmQAzM5kAZjOZAJkz + mQDMM5kA/zOZAABmmQAzZpkAZmaZAJlmmQDMZpkA/2aZAACZmQAzmZkAZpmZAMyZmQD/mZkAAcyZADPM + mQBmzJkAmcyZAMzMmQD/zJkAAP+ZADP/mQBm/5kAmf+ZAMz/mQD//5kAAADMADMAzABmAMwAmQDMAMwA + zAD/AMwAADPMADMzzABmM8wAmTPMAMwzzAD/M8wAAGbMADNmzABmZswAmWbMAMxmzAD/ZswAAJnMADOZ + zABmmcwAmZnMAMyZzAD/mcwAAMzMADPMzABmzMwAmczMAP/MzAAA/8wAM//MAGb/zACZ/8wAzP/MAP// + zAAAAP8AMwD/AGYA/wCZAP8AzAD/AP8A/wAAM/8AMzP/AGYz/wCZM/8AzDP/AP8z/wAAZv8AM2b/AGZm + /wCZZv8AzGb/AP9m/wAAmf8AM5n/AGaZ/wCZmf8AzJn/AP+Z/wAAzP8AM8z/AGbM/wCZzP8AzMz/AP/M + /wAA//8AM///AGb//wCZ//8AzP//AJ+fn5+fn58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQn5+fn5+f + n58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBCfn5+fn5+fn58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEJ+f + n5+fn5+fn58QEBAQEBAQnxAQEBAQEBAQEBAQEBAQn5+fn58QEBAQnxAQEBAQEBCfEBAQEBAQEBAQEBAQ + EBCfn5+fn5+fnxAQEBAQEBAQEJ8QEBAQEBAQEBAQEBAQEJ+fn5+fn5+fn58QEBAQEBAQEJ8QEBAQEBAQ + EBAQEBAQn5+fn5+fn5+fnxAQEBAQEBAQnxAQEBAQnxAQEBAQEBCfn5+fn5+fn5+fEBAQEBAQEBAQEBAQ + EJ+fEBAQEBAQEBCfn5+fn5+fn58QEBAQEBAQEBAQrZ+fn58QEBAQEBAQnxCfn5+fn5+fn58QEBAQEBAQ + EJ+fnxAQEBAQEBAQEBAQEBAQn5+fn5+fnxAQEBAQEBAQnxAQn5+fn58Qn58QEBAQEBCfn5+fn5+fEBAQ + EBAQEBCfEJ+fEBCfn5+fn58QEBAQEBAQEBAQEBAQEBAQEBAQnxCfnxAQn5+tra2fn58QEBAQEBCfn5+f + EBAQEBAQEJ+fEJ8QEK2tra2tra2fnxAQEBAQEBCfnxAQEBAQEBAQEBCfEBAQEK2trZ+trZ+fEBAQEBAQ + EBAQEBAQEBAQEBCfnxCfnxAQra2trZ+fnxAQEBAQEJ8QEBCfEBAQEBCfn5+fEBAQEBCtEJ+tnxCfEBAQ + EBAQEBAQn58QEBAQEJ+fn5+fnxAQEK2fnxCfnxAQEBAQEBAQEJ+fEJ+fEJ+fn5+fnxAQn60Qn5+fn5+f + EBAQEBAQnxAQnxAQnxAQn5+fn58QnxAQEJ+fnxCfn58QEBAQEBAQEBAQEBCfEJ+fn62fnxCtn5+fn58Q + n5+fnxAQEBAQEBAQEBAQn58Qn5+frZ+fnxAQn5+fEBAQn5+fnxAQEBAQEBAQEBCfEJ+fn5+trZ+tnxCf + EJ8QEBAQEJ+fnxAQEJ8QEBAQEBAQnxCfn5+fn5+tn5+fnxAQEBAQEBCfEBAQEJ8QEBAQEJ8QEJ+fn5+f + rZ+fn58QEBAQEBAQEBAQEBAQEBAQEBAQEBCfn5+fn5+fn5+fEBAQEBAQEBAQEBAQEBAQEJ8QnxCfnxAQ + EBAQn5+fEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEJ8QEJ8QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBCfEBAQn58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEJ+fEJ8QEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAABAAAAAgAAAAAEAGAAAAAAAADAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAA + AAAAAIAAAIAAAAAAAAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAA + gIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAAIAA + AIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAgIAA + gIAAgIAAgIAAAIAAAIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAAAAAAAAAIAAAIAAgIAAgIAAAIAAAIAAAAAA + AAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAAAAAAAAAIAAAIAAgIAA + gIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAA + AIAAgIAAgIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAA + AAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAIAAAIAAgIAAgIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAgIAAgIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAgIAA + gIAAgIAAgIAAAIAAAIAAgIAAgIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAgIAAgIAAgIAAgIAAAIAAAIAAgIAAgIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAgIAA + gIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAAAA + AAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAABAAAAAgAAAAAEABAAAAAAAAAgAAAAA + AAAAAAAAEAAAABAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAwMDAAICAgAAAAP8AAP8AAAD/ + /wD/AAAA/wD/AP//AAD///8AEREREREREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARERERERERAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAABERERERERERAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAERERERER + EREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAREREREREREREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABER + EREREREREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEREREREREREREQAAAAAAAAARAAAAAAAAAAAAAAAA + AAARERERERERERERAAAAAAAAABEAAAAAAAAAAAAAAAAAABERERERAAAAABEAAAAAAAAAEQAAAAAAAAAA + AAAAAAAAEREREREAAAAAEQAAAAAAAAARAAAAAAAAAAAAAAAAAAAREREREREREQAAAAAAAAAAABEAAAAA + AAAAAAAAAAAAABERERERERERAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAEREREREREREREQAAAAAAAAAA + EQAAAAAAAAAAAAAAAAARERERERERERERAAAAAAAAAAARAAAAAAAAAAAAAAAAABEREREREREREREAAAAA + AAAAABEAAAAAABEAAAAAAAAAEREREREREREREQAAAAAAAAAAEQAAAAAAEQAAAAAAAAARERERERERERER + AAAAAAAAAAAAAAAAABERAAAAAAAAABEREREREREREREAAAAAAAAAAAAAAAAAEREAAAAAAAAAABERERER + EREREQAAAAAAAAAAAAAzEREREQAAAAAAAAAAERERERERERERAAAAAAAAAAAAADMRERERAAAAAAAAABEA + ERERERERERERAAAAAAAAAAAREREAAAAAAAAAAAAAEQAREREREREREREAAAAAAAAAABEREQAAAAAAAAAA + AAAAAAAAEREREREREQAAAAAAAAAAEQAAEREREREAEREAAAAAAAARERERERERAAAAAAAAAAARAAARERER + EQAREQAAAAAAABEREREREREAAAAAAAAAABEAEREAABEREREREQAAAAAAEREREREREQAAAAAAAAAAEQAR + EQAAERERERERAAAAAAAAAAAAAAAAAAAAAAAAABEAEREAABERMzMzERERAAAAAAAAAAAAAAAAAAAAAAAA + EQAREQAAEREzMzMREREAAAAAAAARERERAAAAAAAAABERABEAADMzMzMzMzMREQAAAAAAABEREREAAAAA + AAAAEREAEQAAMzMzMzMzMxERAAAAAAAAABERAAAAAAAAAAAAABEAAAAAMzMzETMzEREAAAAAAAAAEREA + AAAAAAAAAAAAEQAAAAAzMzMRMzMREQAAAAAAAAAAAAAAAAAAAAAAEREAEREAADMzMzMREREAAAAAAAAA + AAAAAAAAAAAAAAAREQAREQAAMzMzMxEREQAAAAAAABEAAAARAAAAAAARERERAAAAAAAzABEzEQARAAAA + AAAAEQAAABEAAAAAABEREREAAAAAADMAETMRABEAAAAAAAAAAAAREQAAAAAAERERERERAAAAMxERABER + AAAAAAAAAAAAABERAAAAAAAREREREREAAAAzEREAEREAAAAAAAAAAAAREQAREQAREREREREAABEzABER + EREREQAAAAAAAAAAABERABERABEREREREQAAETMAERERERERAAAAAAAAEQAAEQAAEQAAEREREREAEQAA + ABEREQAREREAAAAAAAARAAARAAARAAAREREREQARAAAAERERABEREQAAAAAAAAAAAAAAABEAERERMxER + ADMREREREQARERERAAAAAAAAAAAAAAAAEQAREREzEREAMxERERERABEREREAAAAAAAAAAAAAABERABER + ETMREREAABEREQAAABEREREAAAAAAAAAAAAAEREAERERMxEREQAAERERAAAAEREREQAAAAAAAAAAAAAR + ABEREREzMxEzEQARABEAAAAAABEREQAAAAAAAAAAABEAERERETMzETMRABEAEQAAAAAAERERAAAAEQAA + AAAAAAARABERERERETMRERERAAAAAAAAABEAAAARAAAAAAAAABEAERERERERMxEREREAAAAAAAAAEQAA + AAARAAAAAAARAAARERERETMRERERAAAAAAAAAAAAAAAAABEAAAAAABEAABERERERMxEREREAAAAAAAAA + AAAAAAAAAAAAAAAAAAARERERERERERERAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEREREREREREREAAAAA + AAAAAAAAAAAAAAAAEQARABERAAAAAAAREREAAAAAAAAAAAAAAAAAAAAAAAARABEAEREAAAAAABEREQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + EQAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAAAREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + EQAAABERAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAREQARAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAABERABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgA + AABAAAAAgAAAAAEACAAAAAAAABAAAAAAAAAAAAAAAAEAAAABAAAAAP8AAP8AAP8AAAAA//8A//8AAP8A + /wDAwMAA//jwANfr+gDU/38A/wAAAOIrigAqKqUAAAAAAAQEBAAICAgADAwMABEREQAWFhYAHBwcACIi + IgApKSkAMzMzADk5OQBCQkIATU1NAFVVVQBgYGAAZmZmAHBwcACAgIAAjIyMAJSUlACZmZkApKSkAKys + rAC2trYAwMDAAMzMzADU1NQA2traAODg4ADs7OwA+Pj4APv7+wD///8AMwAAAGYAAACZAAAAzAAAAP8A + AAAAMwAAMzMAAGYzAACZMwAAzDMAAP8zAAAAZgAAM2YAAGZmAACZZgAAzGYAAP9mAAAAmQAAM5kAAGaZ + AACZmQAAzJkAAP+ZAAAAzAAAM8wAAGbMAACZzAAAzMwAAP/MAAAA/wAAM/8AAGb/AACZ/wAAzP8AAP// + AAAAADMAMwAzAGYAMwCZADMAzAAzAP8AMwAAMzMAZjMzAJkzMwDMMzMA/zMzAABmMwAzZjMAZmYzAJlm + MwDMZjMA/2YzAACZMwAzmTMAZpkzAJmZMwDMmTMA/5kzAADMMwAzzDMAZswzAJnMMwDMzDMA/8wzAAD/ + MwAz/zMAZv8zAJn/MwDM/zMA//8zAAAAZgAzAGYAZgBmAJkAZgDMAGYA/wBmAAAzZgAzM2YAZjNmAJkz + ZgDMM2YA/zNmAABmZgAzZmYAmWZmAMxmZgD/ZmYAAJlmADOZZgBmmWYAmZlmAMyZZgD/mWYAAMxmADPM + ZgBmzGYAmcxmAMzMZgD/zGYAAP9mADP/ZgBm/2YAmf9mAMz/ZgD//2YAAACZADMAmQBmAJkAmQCZAMwA + mQD/AJkAADOZADMzmQBmM5kAmTOZAMwzmQD/M5kAAGaZADNmmQBmZpkAmWaZAMxmmQD/ZpkAAJmZADOZ + mQBmmZkAzJmZAP+ZmQABzJkAM8yZAGbMmQCZzJkAzMyZAP/MmQAA/5kAM/+ZAGb/mQCZ/5kAzP+ZAP// + mQAAAMwAMwDMAGYAzACZAMwAzADMAP8AzAAAM8wAMzPMAGYzzACZM8wAzDPMAP8zzAAAZswAM2bMAGZm + zACZZswAzGbMAP9mzAAAmcwAM5nMAGaZzACZmcwAzJnMAP+ZzAAAzMwAM8zMAGbMzACZzMwA/8zMAAD/ + zAAz/8wAZv/MAJn/zADM/8wA///MAAAA/wAzAP8AZgD/AJkA/wDMAP8A/wD/AAAz/wAzM/8AZjP/AJkz + /wDMM/8A/zP/AABm/wAzZv8AZmb/AJlm/wDMZv8A/2b/AACZ/wAzmf8AZpn/AJmZ/wDMmf8A/5n/AADM + /wAzzP8AZsz/AJnM/wDMzP8A/8z/AAD//wAz//8AZv//AJn//wDM//8An5+fn5+fn5+fn5+fn58dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+f + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+f + n5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+f + n5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+f + n5+fn5+fn5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fn5+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn5+fn5+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHZ+fHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fHR0dHR0dHR2fnx0dHR0dHR0dHR0dHR0dn58dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fnx0dHR0dHR0dn58dHR0dHR0dHR0dHR0dHZ+fHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR2fnx0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0d + n58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0d + HR0dHR0dn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0d + HR0dHR0dHR0dHZ+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fn5+fn5+fnx0d + HR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dHR2fnx0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn5+fn5+f + n58dHR0dHR0dHR0dHR0dHR0dn58dHR0dHR0dHR0dn58dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+f + n5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+f + n5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fnx0dHR0dHR0dHR0dHR0dHR2fn5+f + n5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHa2tn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0d + n5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR2trZ+fn5+fn5+fHR0dHR0dHR0dHR0d + HR2fnx0dn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHZ+fn5+fnx0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHZ+fn5+fn5+fn5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR2fn5+fn58dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dn58dHR0dn5+fn5+f + n5+fnx0dn5+fnx0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHZ+fHR0dHZ+f + n5+fn5+fn58dHZ+fn58dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR2fnx0d + n5+fnx0dHR2fn5+fn5+fn5+fn58dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0d + n58dHZ+fn58dHR0dn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fnx0dn5+fnx0dHR2fn5+fra2tra2tn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHZ+fn58dHR0dn5+fn62tra2trZ+fn5+fnx0dHR0dHR0dHR0dHZ+fn5+fn5+fHR0dHR0d + HR0dHR0dHR2fn5+fHR2fnx0dHR2tra2tra2tra2tra2trZ+fn58dHR0dHR0dHR0dHR2fn5+fn5+fnx0d + HR0dHR0dHR0dHR0dn5+fnx0dn58dHR0dra2tra2tra2tra2tra2fn5+fHR0dHR0dHR0dHR0dHR2fn5+f + HR0dHR0dHR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dra2tra2tn5+tra2tn5+fnx0dHR0dHR0dHR0dHR0d + n5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dn58dHR0dHR0dHa2tra2trZ+fra2trZ+fn58dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fnx0dn5+fnx0dHR2tra2tra2trZ+fn5+fnx0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn58dHZ+fn58dHR0dra2tra2tra2fn5+fn58dHR0d + HR0dHR0dHR2fnx0dHR0dHZ+fHR0dHR0dHR0dHZ+fn5+fn5+fHR0dHR0dHR0dHa2tHR2fn62tn58dHZ+f + HR0dHR0dHR0dHR0dn58dHR0dHR2fnx0dHR0dHR0dHR2fn5+fn5+fnx0dHR0dHR0dHR2trR0dn5+trZ+f + HR2fnx0dHR0dHR0dHR0dHR0dHR0dHZ+fn58dHR0dHR0dHR0dn5+fn5+fn5+fn5+fHR0dHR0dra2fn5+f + HR2fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR0dHR0dHR0dHZ+fn5+fn5+fn5+fnx0dHR0dHa2t + n5+fnx0dn5+fnx0dHR0dHR0dHR0dHR0dHR0dHZ+fn58dHZ+fn58dHZ+fn5+fn5+fn5+fnx0dHR2fn62t + HR2fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR2fn5+fHR2fn5+fn5+fn5+fn58dHR0d + n5+trR0dn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dn58dHR0dn58dHR0dn58dHR0dn5+fn5+fn5+fnx0d + n58dHR0dHR2fn5+fn58dHZ+fn5+fnx0dHR0dHR0dHR0dHZ+fHR0dHZ+fHR0dHZ+fHR0dHZ+fn5+fn5+f + n58dHZ+fHR0dHR0dn5+fn5+fHR2fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fnx0dn5+fn5+f + ra2fn5+fHR2trZ+fn5+fn5+fn58dHZ+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn58dHZ+f + n5+fn62tn5+fnx0dra2fn5+fn5+fn5+fHR2fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+f + HR2fn5+fn5+trZ+fn5+fnx0dHR2fn5+fn58dHR0dHR2fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0d + n5+fnx0dn5+fn5+fra2fn5+fn58dHR0dn5+fn5+fHR0dHR0dn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0d + HR0dHZ+fHR2fn5+fn5+fn62tra2fn62tn58dHZ+fHR2fnx0dHR0dHR0dHR2fn5+fn58dHR0dHR0dHR0d + HR0dHR0dHR2fnx0dn5+fn5+fn5+tra2tn5+trZ+fHR2fnx0dn58dHR0dHR0dHR0dn5+fn5+fHR0dHR0d + n58dHR0dHR0dHR0dHR0dHZ+fHR2fn5+fn5+fn5+fn5+trZ+fn5+fn5+fHR0dHR0dHR0dHR0dHR2fnx0d + HR0dHZ+fHR0dHR0dHR0dHR0dHR2fnx0dn5+fn5+fn5+fn5+fra2fn5+fn5+fnx0dHR0dHR0dHR0dHR0d + n58dHR0dHR0dHZ+fHR0dHR0dHR0dHZ+fHR0dHZ+fn5+fn5+fn5+trZ+fn5+fn5+fHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dHR2fnx0dHR2fn5+fn5+fn5+fra2fn5+fn5+fnx0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fn5+fn5+fnx0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn58dHZ+fHR2fn5+fHR0dHR0dHR0dHZ+fn5+fnx0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fHR2fnx0dn5+fnx0dHR0dHR0dHR2fn5+f + n58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fnx0dHR2fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHR0dn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fnx0dHR0dHZ+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHR0dHR2fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHZ+fn58dHZ+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR2fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAIAAAAAAAQAAAQAYAAAAAAAAwAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAIAAAAAAAQAAAQAIAAAAAAAAQAAAAAAAAAAA + AAAAAQAAAAEAAAAA/wAA/wAA/wAAAAD//wD//wAA/wD/AMDAwAD/+PAA1+v6ANT/fwD/AAAA4iuKACoq + pQAAAAAABAQEAAgICAAMDAwAERERABYWFgAcHBwAIiIiACkpKQAzMzMAOTk5AEJCQgBNTU0AVVVVAGBg + YABmZmYAcHBwAICAgACMjIwAlJSUAJmZmQCkpKQArKysALa2tgDAwMAAzMzMANTU1ADa2toA4ODgAOzs + 7AD4+PgA+/v7AP///wAzAAAAZgAAAJkAAADMAAAA/wAAAAAzAAAzMwAAZjMAAJkzAADMMwAA/zMAAABm + AAAzZgAAZmYAAJlmAADMZgAA/2YAAACZAAAzmQAAZpkAAJmZAADMmQAA/5kAAADMAAAzzAAAZswAAJnM + AADMzAAA/8wAAAD/AAAz/wAAZv8AAJn/AADM/wAA//8AAAAAMwAzADMAZgAzAJkAMwDMADMA/wAzAAAz + MwBmMzMAmTMzAMwzMwD/MzMAAGYzADNmMwBmZjMAmWYzAMxmMwD/ZjMAAJkzADOZMwBmmTMAmZkzAMyZ + MwD/mTMAAMwzADPMMwBmzDMAmcwzAMzMMwD/zDMAAP8zADP/MwBm/zMAmf8zAMz/MwD//zMAAABmADMA + ZgBmAGYAmQBmAMwAZgD/AGYAADNmADMzZgBmM2YAmTNmAMwzZgD/M2YAAGZmADNmZgCZZmYAzGZmAP9m + ZgAAmWYAM5lmAGaZZgCZmWYAzJlmAP+ZZgAAzGYAM8xmAGbMZgCZzGYAzMxmAP/MZgAA/2YAM/9mAGb/ + ZgCZ/2YAzP9mAP//ZgAAAJkAMwCZAGYAmQCZAJkAzACZAP8AmQAAM5kAMzOZAGYzmQCZM5kAzDOZAP8z + mQAAZpkAM2aZAGZmmQCZZpkAzGaZAP9mmQAAmZkAM5mZAGaZmQDMmZkA/5mZAAHMmQAzzJkAZsyZAJnM + mQDMzJkA/8yZAAD/mQAz/5kAZv+ZAJn/mQDM/5kA//+ZAAAAzAAzAMwAZgDMAJkAzADMAMwA/wDMAAAz + zAAzM8wAZjPMAJkzzADMM8wA/zPMAABmzAAzZswAZmbMAJlmzADMZswA/2bMAACZzAAzmcwAZpnMAJmZ + zADMmcwA/5nMAADMzAAzzMwAZszMAJnMzAD/zMwAAP/MADP/zABm/8wAmf/MAMz/zAD//8wAAAD/ADMA + /wBmAP8AmQD/AMwA/wD/AP8AADP/ADMz/wBmM/8AmTP/AMwz/wD/M/8AAGb/ADNm/wBmZv8AmWb/AMxm + /wD/Zv8AAJn/ADOZ/wBmmf8AmZn/AMyZ/wD/mf8AAMz/ADPM/wBmzP8Amcz/AMzM/wD/zP8AAP//ADP/ + /wBm//8Amf//AMz//wCfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pra2trZ+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+tra2tn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD62tra2fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+f + n5+tra2tra2tra2tra2fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8P + Dw+fn5+fn5+fn62tra2tra2tra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+f + n58PDw8PDw8PD5+fn5+fn5+fra2tra2tra2tra2tn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8P + Dw+fn5+fDw8PDw8PDw+tra2tra2tra2tra2tra2tra2tra2tra2tra2tn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PD5+fn58PDw8PDw8PD62tra2tra2tra2tra2tra2tra2tra2tra2tra2fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8Pn5+fnw8PDw8PDw8Pra2tra2tra2tra2tra2tra2tra2tra2tra2trZ+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw+fn5+fDw8PDw8PDw+tra2tra2tra2tra2tra2tra2tra2t + ra2tra2tn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+fn58PDw8PDw8PD62tra2tra2tra2tra2t + ra2tra2tra2tra2tra2fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PD62t + ra2tra2tra2trZ+fn5+tra2tra2trZ+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8Pra2tra2tra2tra2tn5+fn62tra2tra2tn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PDw8PDw+tra2tra2tra2tra2fn5+fra2tra2tra2fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n58PDw8Pn5+fn5+fn58PDw8PDw8PD62tra2tra2tra2tra2tra2fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pra2tra2tra2tra2tra2trZ+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw+tra2tra2tra2tra2tra2tn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PD62tra2tra2tra2tra2t + ra2fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pra2tra2t + ra2tra2tra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw+tra2tDw8PD5+fn5+tra2tn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PD62tra0PDw8Pn5+fn62tra2fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pra2trQ8PDw+fn5+fra2trZ+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw+tra2tn5+fn5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PD62tra2fn5+fn5+fnw8PDw+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8Pra2trZ+fn5+fn5+fDw8PD5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw+tra2tn5+fn5+f + n58PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PD62t + ra2fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PD5+fn5+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8Pn5+fn62t + ra0PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw+fn5+fra2trQ8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PD5+fn5+tra2tDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PD5+fn58PDw8PDw8PD5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fDw8PD5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+fn58PDw8PDw8PD5+f + n58PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n58PDw8Pn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fnw8P + Dw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fnw8PDw+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fn5+fn62tra2fn5+fn5+fnw8PDw+tra2tn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fDw8PD62t + ra2fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+tra2tn5+fn5+f + n58PDw8Pra2trZ+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+fn5+fn5+fn5+fn62t + ra2fn5+fn5+fn5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+f + n5+fn5+fra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8P + Dw+fn5+fn5+fn5+fn5+tra2tn5+fn5+fn5+fn5+fDw8PDw8PDw+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PD5+fn5+fn5+fn5+fn62tra2fn5+fn5+fn5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn5+tra2tra2trZ+fn5+tra2tn5+fnw8P + Dw+fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn62tra2tra2tn5+fn62t + ra2fn5+fDw8PD5+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fra2tra2t + ra2fn5+fra2trZ+fn58PDw8Pn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+tra2tn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn62tra2fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+tra2tn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fra2trZ+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+tra2tn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn62tra2fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8Pn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n58PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + + + \ No newline at end of file diff --git a/Server.MirForms/Database/ItemInfoFormNew.Designer.cs b/Server.MirForms/Database/ItemInfoFormNew.Designer.cs new file mode 100644 index 0000000..49fab3e --- /dev/null +++ b/Server.MirForms/Database/ItemInfoFormNew.Designer.cs @@ -0,0 +1,553 @@ + +namespace Server.Database +{ + partial class ItemInfoFormNew + { + /// + /// 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() + { + DataGridViewCellStyle dataGridViewCellStyle1 = new DataGridViewCellStyle(); + DataGridViewCellStyle dataGridViewCellStyle3 = new DataGridViewCellStyle(); + DataGridViewCellStyle dataGridViewCellStyle2 = new DataGridViewCellStyle(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ItemInfoFormNew)); + itemInfoGridView = new DataGridView(); + Modified = new DataGridViewCheckBoxColumn(); + ItemIndex = new DataGridViewTextBoxColumn(); + ItemName = new DataGridViewTextBoxColumn(); + ItemType = new DataGridViewComboBoxColumn(); + ItemGrade = new DataGridViewComboBoxColumn(); + ItemRequiredType = new DataGridViewComboBoxColumn(); + ItemRequiredGender = new DataGridViewComboBoxColumn(); + ItemRequiredClass = new DataGridViewComboBoxColumn(); + ItemSet = new DataGridViewComboBoxColumn(); + ItemRandomStatsId = new DataGridViewTextBoxColumn(); + ItemRequiredAmount = new DataGridViewTextBoxColumn(); + ItemImage = new DataGridViewTextBoxColumn(); + ItemShape = new DataGridViewTextBoxColumn(); + ItemEffect = new DataGridViewTextBoxColumn(); + ItemStackSize = new DataGridViewTextBoxColumn(); + ItemWeight = new DataGridViewTextBoxColumn(); + ItemLightRange = new DataGridViewTextBoxColumn(); + ItemLightIntensity = new DataGridViewTextBoxColumn(); + ItemDurability = new DataGridViewTextBoxColumn(); + ItemPrice = new DataGridViewTextBoxColumn(); + ItemToolTip = new DataGridViewTextBoxColumn(); + StartItem = new DataGridViewCheckBoxColumn(); + NeedIdentify = new DataGridViewCheckBoxColumn(); + ShowGroupPickup = new DataGridViewCheckBoxColumn(); + GlobalDropNotify = new DataGridViewCheckBoxColumn(); + ClassBased = new DataGridViewCheckBoxColumn(); + LevelBased = new DataGridViewCheckBoxColumn(); + panel1 = new Panel(); + panel3 = new Panel(); + Gameshop_button = new Button(); + btnExport = new Button(); + btnImport = new Button(); + lblFilterType = new Label(); + groupView = new GroupBox(); + rBtnViewSpecial = new RadioButton(); + rbtnViewAll = new RadioButton(); + rbtnViewBinding = new RadioButton(); + rbtnViewBasic = new RadioButton(); + rbtnViewStats = new RadioButton(); + drpFilterType = new ComboBox(); + lblSearch = new Label(); + txtSearch = new TextBox(); + panel2 = new Panel(); + ((System.ComponentModel.ISupportInitialize)itemInfoGridView).BeginInit(); + panel1.SuspendLayout(); + panel3.SuspendLayout(); + groupView.SuspendLayout(); + panel2.SuspendLayout(); + SuspendLayout(); + // + // itemInfoGridView + // + dataGridViewCellStyle1.Alignment = DataGridViewContentAlignment.MiddleCenter; + itemInfoGridView.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1; + itemInfoGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + itemInfoGridView.Columns.AddRange(new DataGridViewColumn[] { Modified, ItemIndex, ItemName, ItemType, ItemGrade, ItemRequiredType, ItemRequiredGender, ItemRequiredClass, ItemSet, ItemRandomStatsId, ItemRequiredAmount, ItemImage, ItemShape, ItemEffect, ItemStackSize, ItemWeight, ItemLightRange, ItemLightIntensity, ItemDurability, ItemPrice, ItemToolTip, StartItem, NeedIdentify, ShowGroupPickup, GlobalDropNotify, ClassBased, LevelBased }); + dataGridViewCellStyle3.Alignment = DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle3.BackColor = SystemColors.Window; + dataGridViewCellStyle3.Font = new Font("Microsoft Sans Serif", 8.25F); + dataGridViewCellStyle3.ForeColor = SystemColors.ControlText; + dataGridViewCellStyle3.SelectionBackColor = SystemColors.Highlight; + dataGridViewCellStyle3.SelectionForeColor = SystemColors.HighlightText; + dataGridViewCellStyle3.WrapMode = DataGridViewTriState.False; + itemInfoGridView.DefaultCellStyle = dataGridViewCellStyle3; + itemInfoGridView.Dock = DockStyle.Fill; + itemInfoGridView.Location = new Point(0, 0); + itemInfoGridView.Margin = new Padding(4, 3, 4, 3); + itemInfoGridView.Name = "itemInfoGridView"; + itemInfoGridView.RowTemplate.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; + itemInfoGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + itemInfoGridView.Size = new Size(1115, 500); + itemInfoGridView.TabIndex = 0; + itemInfoGridView.CurrentCellDirtyStateChanged += CurrentCellDirtyStateChanged; + itemInfoGridView.DataError += itemInfoGridView_DataError; + itemInfoGridView.DefaultValuesNeeded += itemInfoGridView_DefaultValuesNeeded; + itemInfoGridView.UserDeletingRow += itemInfoGridView_UserDeletingRow; + // + // Modified + // + Modified.AutoSizeMode = DataGridViewAutoSizeColumnMode.ColumnHeader; + Modified.DataPropertyName = "Modified"; + Modified.Frozen = true; + Modified.HeaderText = "Modified"; + Modified.Name = "Modified"; + Modified.ReadOnly = true; + Modified.Width = 61; + // + // ItemIndex + // + ItemIndex.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; + ItemIndex.DataPropertyName = "ItemIndex"; + ItemIndex.Frozen = true; + ItemIndex.HeaderText = "Index"; + ItemIndex.Name = "ItemIndex"; + ItemIndex.ReadOnly = true; + ItemIndex.Width = 61; + // + // ItemName + // + ItemName.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells; + ItemName.DataPropertyName = "ItemName"; + ItemName.Frozen = true; + ItemName.HeaderText = "Name"; + ItemName.Name = "ItemName"; + ItemName.Width = 64; + // + // ItemType + // + ItemType.DataPropertyName = "ItemType"; + ItemType.HeaderText = "Type"; + ItemType.Name = "ItemType"; + ItemType.SortMode = DataGridViewColumnSortMode.Automatic; + // + // ItemGrade + // + ItemGrade.DataPropertyName = "ItemGrade"; + ItemGrade.HeaderText = "Grade"; + ItemGrade.Name = "ItemGrade"; + // + // ItemRequiredType + // + ItemRequiredType.DataPropertyName = "ItemRequiredType"; + ItemRequiredType.HeaderText = "Required Type"; + ItemRequiredType.Name = "ItemRequiredType"; + // + // ItemRequiredGender + // + ItemRequiredGender.DataPropertyName = "ItemRequiredGender"; + ItemRequiredGender.HeaderText = "Required Gender"; + ItemRequiredGender.Name = "ItemRequiredGender"; + // + // ItemRequiredClass + // + ItemRequiredClass.DataPropertyName = "ItemRequiredClass"; + ItemRequiredClass.HeaderText = "Required Class"; + ItemRequiredClass.Name = "ItemRequiredClass"; + // + // ItemSet + // + ItemSet.DataPropertyName = "ItemSet"; + ItemSet.HeaderText = "Set"; + ItemSet.Name = "ItemSet"; + // + // ItemRandomStatsId + // + ItemRandomStatsId.DataPropertyName = "ItemRandomStatsId"; + ItemRandomStatsId.HeaderText = "Random Stats"; + ItemRandomStatsId.Name = "ItemRandomStatsId"; + // + // ItemRequiredAmount + // + ItemRequiredAmount.DataPropertyName = "ItemRequiredAmount"; + ItemRequiredAmount.HeaderText = "Required Amount"; + ItemRequiredAmount.Name = "ItemRequiredAmount"; + // + // ItemImage + // + ItemImage.DataPropertyName = "ItemImage"; + ItemImage.HeaderText = "Image"; + ItemImage.Name = "ItemImage"; + // + // ItemShape + // + ItemShape.DataPropertyName = "ItemShape"; + ItemShape.HeaderText = "Shape"; + ItemShape.Name = "ItemShape"; + // + // ItemEffect + // + ItemEffect.DataPropertyName = "ItemEffect"; + ItemEffect.HeaderText = "Effect"; + ItemEffect.Name = "ItemEffect"; + // + // ItemStackSize + // + ItemStackSize.DataPropertyName = "ItemStackSize"; + ItemStackSize.HeaderText = "Stack Size"; + ItemStackSize.Name = "ItemStackSize"; + // + // ItemWeight + // + ItemWeight.DataPropertyName = "ItemWeight"; + ItemWeight.HeaderText = "Weight"; + ItemWeight.Name = "ItemWeight"; + // + // ItemLightRange + // + ItemLightRange.DataPropertyName = "ItemLightRange"; + ItemLightRange.HeaderText = "Light Range"; + ItemLightRange.Name = "ItemLightRange"; + // + // ItemLightIntensity + // + ItemLightIntensity.DataPropertyName = "ItemLightIntensity"; + ItemLightIntensity.HeaderText = "Intensity"; + ItemLightIntensity.Name = "ItemLightIntensity"; + // + // ItemDurability + // + ItemDurability.DataPropertyName = "ItemDurability"; + ItemDurability.HeaderText = "Durability"; + ItemDurability.Name = "ItemDurability"; + // + // ItemPrice + // + ItemPrice.DataPropertyName = "ItemPrice"; + ItemPrice.HeaderText = "Price"; + ItemPrice.Name = "ItemPrice"; + // + // ItemToolTip + // + ItemToolTip.DataPropertyName = "ItemToolTip"; + dataGridViewCellStyle2.WrapMode = DataGridViewTriState.True; + ItemToolTip.DefaultCellStyle = dataGridViewCellStyle2; + ItemToolTip.HeaderText = "ToolTip"; + ItemToolTip.Name = "ItemToolTip"; + ItemToolTip.Width = 68; + // + // StartItem + // + StartItem.DataPropertyName = "StartItem"; + StartItem.HeaderText = "Start Item"; + StartItem.Name = "StartItem"; + StartItem.Resizable = DataGridViewTriState.True; + // + // NeedIdentify + // + NeedIdentify.DataPropertyName = "NeedIdentify"; + NeedIdentify.HeaderText = "Need Identify"; + NeedIdentify.Name = "NeedIdentify"; + // + // ShowGroupPickup + // + ShowGroupPickup.DataPropertyName = "ShowGroupPickup"; + ShowGroupPickup.HeaderText = "Show Group Pickup"; + ShowGroupPickup.Name = "ShowGroupPickup"; + // + // GlobalDropNotify + // + GlobalDropNotify.DataPropertyName = "GlobalDropNotify"; + GlobalDropNotify.HeaderText = "Global Drop Notify"; + GlobalDropNotify.Name = "GlobalDropNotify"; + // + // ClassBased + // + ClassBased.DataPropertyName = "ClassBased"; + ClassBased.HeaderText = "Class Based"; + ClassBased.Name = "ClassBased"; + // + // LevelBased + // + LevelBased.DataPropertyName = "LevelBased"; + LevelBased.HeaderText = "Level Based"; + LevelBased.Name = "LevelBased"; + // + // panel1 + // + panel1.Controls.Add(panel3); + panel1.Dock = DockStyle.Top; + panel1.Location = new Point(0, 0); + panel1.Margin = new Padding(4, 3, 4, 3); + panel1.Name = "panel1"; + panel1.Size = new Size(1115, 54); + panel1.TabIndex = 1; + // + // panel3 + // + panel3.Controls.Add(Gameshop_button); + panel3.Controls.Add(btnExport); + panel3.Controls.Add(btnImport); + panel3.Controls.Add(lblFilterType); + panel3.Controls.Add(groupView); + panel3.Controls.Add(drpFilterType); + panel3.Controls.Add(lblSearch); + panel3.Controls.Add(txtSearch); + panel3.Dock = DockStyle.Fill; + panel3.Location = new Point(0, 0); + panel3.Margin = new Padding(4, 3, 4, 3); + panel3.Name = "panel3"; + panel3.Size = new Size(1115, 54); + panel3.TabIndex = 5; + // + // Gameshop_button + // + Gameshop_button.Location = new Point(903, 25); + Gameshop_button.Margin = new Padding(4, 3, 4, 3); + Gameshop_button.Name = "Gameshop_button"; + Gameshop_button.Size = new Size(97, 27); + Gameshop_button.TabIndex = 30; + Gameshop_button.Text = "+ Gameshop"; + Gameshop_button.UseVisualStyleBackColor = true; + Gameshop_button.Click += Gameshop_button_Click; + // + // btnExport + // + btnExport.Location = new Point(808, 25); + btnExport.Margin = new Padding(4, 3, 4, 3); + btnExport.Name = "btnExport"; + btnExport.Size = new Size(88, 27); + btnExport.TabIndex = 6; + btnExport.Text = "Export"; + btnExport.UseVisualStyleBackColor = true; + btnExport.Click += btnExport_Click; + // + // btnImport + // + btnImport.Location = new Point(713, 25); + btnImport.Margin = new Padding(4, 3, 4, 3); + btnImport.Name = "btnImport"; + btnImport.Size = new Size(88, 27); + btnImport.TabIndex = 5; + btnImport.Text = "Import"; + btnImport.UseVisualStyleBackColor = true; + btnImport.Click += btnImport_Click; + // + // lblFilterType + // + lblFilterType.AutoSize = true; + lblFilterType.Location = new Point(390, 10); + lblFilterType.Margin = new Padding(4, 0, 4, 0); + lblFilterType.Name = "lblFilterType"; + lblFilterType.Size = new Size(37, 15); + lblFilterType.TabIndex = 3; + lblFilterType.Text = "Type :"; + // + // groupView + // + groupView.Controls.Add(rBtnViewSpecial); + groupView.Controls.Add(rbtnViewAll); + groupView.Controls.Add(rbtnViewBinding); + groupView.Controls.Add(rbtnViewBasic); + groupView.Controls.Add(rbtnViewStats); + groupView.Location = new Point(4, 3); + groupView.Margin = new Padding(4, 3, 4, 3); + groupView.Name = "groupView"; + groupView.Padding = new Padding(4, 3, 4, 3); + groupView.Size = new Size(379, 47); + groupView.TabIndex = 4; + groupView.TabStop = false; + groupView.Text = "View Mode"; + // + // rBtnViewSpecial + // + rBtnViewSpecial.AutoSize = true; + rBtnViewSpecial.Location = new Point(289, 23); + rBtnViewSpecial.Margin = new Padding(4, 3, 4, 3); + rBtnViewSpecial.Name = "rBtnViewSpecial"; + rBtnViewSpecial.Size = new Size(62, 19); + rBtnViewSpecial.TabIndex = 4; + rBtnViewSpecial.TabStop = true; + rBtnViewSpecial.Text = "Special"; + rBtnViewSpecial.UseVisualStyleBackColor = true; + rBtnViewSpecial.CheckedChanged += rBtnViewSpecial_CheckedChanged; + // + // rbtnViewAll + // + rbtnViewAll.AutoSize = true; + rbtnViewAll.Checked = true; + rbtnViewAll.Location = new Point(31, 22); + rbtnViewAll.Margin = new Padding(4, 3, 4, 3); + rbtnViewAll.Name = "rbtnViewAll"; + rbtnViewAll.Size = new Size(39, 19); + rbtnViewAll.TabIndex = 0; + rbtnViewAll.TabStop = true; + rbtnViewAll.Text = "All"; + rbtnViewAll.UseVisualStyleBackColor = true; + rbtnViewAll.CheckedChanged += rbtnViewAll_CheckedChanged; + // + // rbtnViewBinding + // + rbtnViewBinding.AutoSize = true; + rbtnViewBinding.Location = new Point(211, 22); + rbtnViewBinding.Margin = new Padding(4, 3, 4, 3); + rbtnViewBinding.Name = "rbtnViewBinding"; + rbtnViewBinding.Size = new Size(66, 19); + rbtnViewBinding.TabIndex = 3; + rbtnViewBinding.TabStop = true; + rbtnViewBinding.Text = "Binding"; + rbtnViewBinding.UseVisualStyleBackColor = true; + rbtnViewBinding.CheckedChanged += rbtnViewBinding_CheckedChanged; + // + // rbtnViewBasic + // + rbtnViewBasic.AutoSize = true; + rbtnViewBasic.Location = new Point(80, 22); + rbtnViewBasic.Margin = new Padding(4, 3, 4, 3); + rbtnViewBasic.Name = "rbtnViewBasic"; + rbtnViewBasic.Size = new Size(52, 19); + rbtnViewBasic.TabIndex = 1; + rbtnViewBasic.TabStop = true; + rbtnViewBasic.Text = "Basic"; + rbtnViewBasic.UseVisualStyleBackColor = true; + rbtnViewBasic.CheckedChanged += rbtnViewBasic_CheckedChanged; + // + // rbtnViewStats + // + rbtnViewStats.AutoSize = true; + rbtnViewStats.Location = new Point(147, 22); + rbtnViewStats.Margin = new Padding(4, 3, 4, 3); + rbtnViewStats.Name = "rbtnViewStats"; + rbtnViewStats.Size = new Size(50, 19); + rbtnViewStats.TabIndex = 2; + rbtnViewStats.TabStop = true; + rbtnViewStats.Text = "Stats"; + rbtnViewStats.UseVisualStyleBackColor = true; + rbtnViewStats.CheckedChanged += rbtnViewStats_CheckedChanged; + // + // drpFilterType + // + drpFilterType.DropDownStyle = ComboBoxStyle.DropDownList; + drpFilterType.FormattingEnabled = true; + drpFilterType.Location = new Point(393, 28); + drpFilterType.Margin = new Padding(4, 3, 4, 3); + drpFilterType.Name = "drpFilterType"; + drpFilterType.Size = new Size(140, 23); + drpFilterType.TabIndex = 2; + drpFilterType.SelectedIndexChanged += drpFilterType_SelectedIndexChanged; + // + // lblSearch + // + lblSearch.AutoSize = true; + lblSearch.Location = new Point(538, 10); + lblSearch.Margin = new Padding(4, 0, 4, 0); + lblSearch.Name = "lblSearch"; + lblSearch.Size = new Size(45, 15); + lblSearch.TabIndex = 1; + lblSearch.Text = "Search:"; + // + // txtSearch + // + txtSearch.Location = new Point(541, 29); + txtSearch.Margin = new Padding(4, 3, 4, 3); + txtSearch.Name = "txtSearch"; + txtSearch.Size = new Size(164, 23); + txtSearch.TabIndex = 0; + txtSearch.KeyDown += txtSearch_KeyDown; + // + // panel2 + // + panel2.Controls.Add(itemInfoGridView); + panel2.Dock = DockStyle.Fill; + panel2.Location = new Point(0, 54); + panel2.Margin = new Padding(4, 3, 4, 3); + panel2.Name = "panel2"; + panel2.Size = new Size(1115, 500); + panel2.TabIndex = 2; + // + // ItemInfoFormNew + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(1115, 554); + Controls.Add(panel2); + Controls.Add(panel1); + Icon = (Icon)resources.GetObject("$this.Icon"); + Margin = new Padding(4, 3, 4, 3); + Name = "ItemInfoFormNew"; + Text = "ItemInfoFormNew"; + FormClosing += ItemInfoFormNew_FormClosing; + ((System.ComponentModel.ISupportInitialize)itemInfoGridView).EndInit(); + panel1.ResumeLayout(false); + panel3.ResumeLayout(false); + panel3.PerformLayout(); + groupView.ResumeLayout(false); + groupView.PerformLayout(); + panel2.ResumeLayout(false); + ResumeLayout(false); + } + + #endregion + + private System.Windows.Forms.DataGridView itemInfoGridView; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.GroupBox groupView; + private System.Windows.Forms.RadioButton rbtnViewAll; + private System.Windows.Forms.RadioButton rbtnViewBinding; + private System.Windows.Forms.RadioButton rbtnViewBasic; + private System.Windows.Forms.RadioButton rbtnViewStats; + private System.Windows.Forms.RadioButton rBtnViewSpecial; + private System.Windows.Forms.Panel panel3; + private System.Windows.Forms.Label lblSearch; + private System.Windows.Forms.TextBox txtSearch; + private System.Windows.Forms.Label lblFilterType; + private System.Windows.Forms.ComboBox drpFilterType; + private System.Windows.Forms.Button btnExport; + private System.Windows.Forms.Button btnImport; + private System.Windows.Forms.Button Gameshop_button; + private DataGridViewCheckBoxColumn Modified; + private DataGridViewTextBoxColumn ItemIndex; + private DataGridViewTextBoxColumn ItemName; + private DataGridViewComboBoxColumn ItemType; + private DataGridViewComboBoxColumn ItemGrade; + private DataGridViewComboBoxColumn ItemRequiredType; + private DataGridViewComboBoxColumn ItemRequiredGender; + private DataGridViewComboBoxColumn ItemRequiredClass; + private DataGridViewComboBoxColumn ItemSet; + private DataGridViewTextBoxColumn ItemRandomStatsId; + private DataGridViewTextBoxColumn ItemRequiredAmount; + private DataGridViewTextBoxColumn ItemImage; + private DataGridViewTextBoxColumn ItemShape; + private DataGridViewTextBoxColumn ItemEffect; + private DataGridViewTextBoxColumn ItemStackSize; + private DataGridViewTextBoxColumn ItemWeight; + private DataGridViewTextBoxColumn ItemLightRange; + private DataGridViewTextBoxColumn ItemLightIntensity; + private DataGridViewTextBoxColumn ItemDurability; + private DataGridViewTextBoxColumn ItemPrice; + private DataGridViewTextBoxColumn ItemToolTip; + private DataGridViewCheckBoxColumn StartItem; + private DataGridViewCheckBoxColumn NeedIdentify; + private DataGridViewCheckBoxColumn ShowGroupPickup; + private DataGridViewCheckBoxColumn GlobalDropNotify; + private DataGridViewCheckBoxColumn ClassBased; + private DataGridViewCheckBoxColumn LevelBased; + } +} \ No newline at end of file diff --git a/Server.MirForms/Database/ItemInfoFormNew.cs b/Server.MirForms/Database/ItemInfoFormNew.cs new file mode 100644 index 0000000..d12f1c0 --- /dev/null +++ b/Server.MirForms/Database/ItemInfoFormNew.cs @@ -0,0 +1,1135 @@ +using Server.MirEnvir; +using System.Data; +using System.Text; +using Microsoft.VisualBasic; + +namespace Server.Database +{ + public partial class ItemInfoFormNew : Form + { + public Envir Envir => SMain.EditEnvir; + + private readonly Array StatEnums = Enum.GetValues(typeof(Stat)); + private readonly Array BindEnums = Enum.GetValues(typeof(BindMode)); + private readonly Array SpecialEnums = Enum.GetValues(typeof(SpecialItemMode)); + + private bool _isInGemContext = false; + private Dictionary _defaultItemHeaderMappings = new(); + private Dictionary _gemItemHeaderMappings = new(); + + private DataTable Table; + + public ItemInfoFormNew() + { + InitializeComponent(); + + SetDoubleBuffered(itemInfoGridView); + + InitializeItemInfoFilters(); + InitializeItemInfoGridView(); + + CreateDynamicColumns(); + + PopulateTable(); + + MapHeaderText(); + + // register after initializing data to prevent erroneous throws + itemInfoGridView.CellValueChanged += CellValueChanged; + itemInfoGridView.CellValidating += itemInfoGridView_CellValidating; + itemInfoGridView.MouseClick += ItemInfoGridView_MouseClick; + itemInfoGridView.SelectionChanged += ItemInfoGridView_SelectionChanged; + } + + public static void SetDoubleBuffered(Control c) + { + System.Reflection.PropertyInfo aProp = + typeof(Control).GetProperty( + "DoubleBuffered", + System.Reflection.BindingFlags.NonPublic | + System.Reflection.BindingFlags.Instance); + + aProp.SetValue(c, true, null); + } + + private void InitializeItemInfoFilters() + { + Dictionary filterItems = new() + { + { "-1", "" } + }; + + var types = Enum.GetValues(typeof(ItemType)); + foreach (ItemType type in types) + { + filterItems.Add(((byte)type).ToString(), type.ToString()); + } + + drpFilterType.DataSource = new BindingSource(filterItems, null); + drpFilterType.DisplayMember = "Value"; + drpFilterType.ValueMember = "Key"; + } + + private void InitializeItemInfoGridView() + { + Modified.ValueType = typeof(bool); + ItemIndex.ValueType = typeof(int); + ItemName.ValueType = typeof(string); + ItemRandomStatsId.ValueType = typeof(byte); + ItemRequiredAmount.ValueType = typeof(byte); + ItemImage.ValueType = typeof(ushort); + ItemShape.ValueType = typeof(short); + ItemEffect.ValueType = typeof(byte); + ItemStackSize.ValueType = typeof(ushort); + ItemWeight.ValueType = typeof(byte); + + ItemLightIntensity.ValueType = typeof(byte); + ItemLightRange.ValueType = typeof(byte); + ItemDurability.ValueType = typeof(ushort); + ItemPrice.ValueType = typeof(uint); + ItemToolTip.ValueType = typeof(string); + + StartItem.ValueType = typeof(bool); + NeedIdentify.ValueType = typeof(bool); + ShowGroupPickup.ValueType = typeof(bool); + GlobalDropNotify.ValueType = typeof(bool); + ClassBased.ValueType = typeof(bool); + LevelBased.ValueType = typeof(bool); + + //Basic + ItemType.ValueType = typeof(ItemType); + ItemType.DataSource = Enum2DataTable(); + ItemType.ValueMember = "Value"; + ItemType.DisplayMember = "Display"; + + ItemGrade.ValueType = typeof(ItemGrade); + ItemGrade.DataSource = Enum2DataTable(); + ItemGrade.ValueMember = "Value"; + ItemGrade.DisplayMember = "Display"; + + ItemRequiredType.ValueType = typeof(RequiredType); + ItemRequiredType.DataSource = Enum2DataTable(); + ItemRequiredType.ValueMember = "Value"; + ItemRequiredType.DisplayMember = "Display"; + + ItemRequiredGender.ValueType = typeof(RequiredGender); + ItemRequiredGender.DataSource = Enum2DataTable(); + ItemRequiredGender.ValueMember = "Value"; + ItemRequiredGender.DisplayMember = "Display"; + + ItemRequiredClass.ValueType = typeof(RequiredClass); + ItemRequiredClass.DataSource = Enum2DataTable(); + ItemRequiredClass.ValueMember = "Value"; + ItemRequiredClass.DisplayMember = "Display"; + + ItemSet.ValueType = typeof(ItemSet); + ItemSet.DataSource = Enum2DataTable(); + ItemSet.ValueMember = "Value"; + ItemSet.DisplayMember = "Display"; + } + + public static DataTable Enum2DataTable() + { + DataTable enumTable = new DataTable(); + enumTable.Columns.Add(new DataColumn("Value", Enum.GetUnderlyingType(typeof(T)))); + enumTable.Columns.Add(new DataColumn("Display", typeof(string))); + DataRow EnumRow; + + foreach (T E in Enum.GetValues(typeof(T))) + { + EnumRow = enumTable.NewRow(); + EnumRow["Value"] = E; + EnumRow["Display"] = E.ToString(); + enumTable.Rows.Add(EnumRow); + } + + return enumTable; + } + + private void CreateDynamicColumns() + { + foreach (Stat stat in StatEnums) + { + if (stat == Stat.Unknown) continue; + + var key = stat.ToString(); + var strKey = RegexFunctions.SeperateCamelCase(key.Replace("Rate", "").Replace("Multiplier", "").Replace("Percent", "")); + + var sign = ""; + + if (key.Contains("Percent")) + sign = "%"; + else if (key.Contains("Multiplier")) + sign = "x"; + + var col = new DataGridViewTextBoxColumn + { + HeaderText = $"{strKey} {sign}", + Name = "Stat" + stat.ToString(), + ValueType = typeof(int), + DataPropertyName = "Stat" + stat.ToString() + }; + + itemInfoGridView.Columns.Add(col); + } + + foreach (BindMode bind in BindEnums) + { + if (bind == BindMode.None) continue; + + var col = new DataGridViewCheckBoxColumn + { + HeaderText = bind.ToString(), + Name = "Bind" + bind.ToString(), + ValueType = typeof(bool), + DataPropertyName = "Bind" + bind.ToString() + }; + + itemInfoGridView.Columns.Add(col); + } + + foreach (SpecialItemMode special in SpecialEnums) + { + if (special == SpecialItemMode.None) continue; + + var col = new DataGridViewCheckBoxColumn + { + HeaderText = special.ToString(), + Name = "Special" + special.ToString(), + ValueType = typeof(bool), + DataPropertyName = "Special" + special.ToString() + }; + + itemInfoGridView.Columns.Add(col); + } + } + + private void PopulateTable() + { + Table = new DataTable("itemInfo"); + + foreach (DataGridViewColumn col in itemInfoGridView.Columns) + { + Table.Columns.Add(col.DataPropertyName, col.ValueType); + } + + foreach (ItemInfo item in Envir.ItemInfoList) + { + DataRow row = Table.NewRow(); + + row["Modified"] = false; + + row["ItemIndex"] = item.Index; + row["ItemName"] = item.Name; + + row["ItemType"] = item.Type; + row["ItemGrade"] = item.Grade; + row["ItemRequiredType"] = item.RequiredType; + row["ItemRequiredGender"] = item.RequiredGender; + row["ItemRequiredClass"] = item.RequiredClass; + row["ItemSet"] = item.Set; + row["ItemRandomStatsId"] = item.RandomStatsId; + row["ItemRequiredAmount"] = item.RequiredAmount; + row["ItemImage"] = item.Image; + row["ItemShape"] = item.Shape; + row["ItemEffect"] = item.Effect; + row["ItemStackSize"] = item.StackSize; + row["ItemWeight"] = item.Weight; + row["ItemLightRange"] = (byte)(item.Light % 15); + row["ItemLightIntensity"] = (byte)(item.Light / 15); + row["ItemDurability"] = item.Durability; + row["ItemPrice"] = item.Price; + row["ItemToolTip"] = item.ToolTip; + + row["StartItem"] = item.StartItem; + row["NeedIdentify"] = item.NeedIdentify; + row["ShowGroupPickup"] = item.ShowGroupPickup; + row["GlobalDropNotify"] = item.GlobalDropNotify; + row["ClassBased"] = item.ClassBased; + row["LevelBased"] = item.LevelBased; + + foreach (Stat stat in StatEnums) + { + if (stat == Stat.Unknown) continue; + + row["Stat" + stat.ToString()] = item.Stats[stat]; + } + + foreach (BindMode bind in BindEnums) + { + if (bind == BindMode.None) continue; + + row["Bind" + bind.ToString()] = item.Bind.HasFlag(bind); + } + + foreach (SpecialItemMode special in SpecialEnums) + { + if (special == SpecialItemMode.None) continue; + + row["Special" + special.ToString()] = item.Unique.HasFlag(special); + } + + Table.Rows.Add(row); + } + + itemInfoGridView.DataSource = Table; + + itemInfoGridView.Columns["Modified"].ReadOnly = true; + } + + private void UpdateFilter() + { + if (itemInfoGridView.DataSource == null) + { + return; + } + + var filterText = txtSearch.Text; + var filterType = ((KeyValuePair)drpFilterType.SelectedItem).Key; + + if (string.IsNullOrEmpty(filterText) && + filterType == "-1") + { + (itemInfoGridView.DataSource as DataTable).DefaultView.RowFilter = string.Empty; + return; + } + + string rowFilter = string.Format("([ItemType] = '{0}' OR '{0}' = -1) AND [ItemName] LIKE '%{1}%'", filterType, filterText); + + (itemInfoGridView.DataSource as DataTable).DefaultView.RowFilter = rowFilter; + } + + private void SaveForm() + { + int lastIndex = 0; + if (Envir.ItemInfoList.Count > 0) + { + lastIndex = Envir.ItemInfoList.Max(x => x.Index); + } + + foreach (DataGridViewRow row in itemInfoGridView.Rows) + { + var name = row.Cells["ItemName"].Value; + + if (name == null || name.GetType() == typeof(System.DBNull) || string.IsNullOrWhiteSpace((string)name)) + { + continue; + } + + ItemInfo item; + + if (string.IsNullOrEmpty((string)row.Cells["ItemIndex"].FormattedValue)) + { + Envir.ItemInfoList.Add(item = new ItemInfo()); + + item.Index = ++lastIndex; + } + else + { + int index = (int)row.Cells["ItemIndex"].Value; + + item = Envir.ItemInfoList.FirstOrDefault(x => x.Index == index); + + if (row.Cells["Modified"].Value != null && (bool)row.Cells["Modified"].Value == false) continue; + } + + item.Name = (string)row.Cells["ItemName"].Value; + item.Type = (ItemType)row.Cells["ItemType"].Value; + item.Grade = (ItemGrade)row.Cells["ItemGrade"].Value; + item.RequiredType = (RequiredType)row.Cells["ItemRequiredType"].Value; + item.RequiredGender = (RequiredGender)row.Cells["ItemRequiredGender"].Value; + item.RequiredClass = (RequiredClass)row.Cells["ItemRequiredClass"].Value; + item.Set = (ItemSet)row.Cells["ItemSet"].Value; + item.RandomStatsId = (byte)row.Cells["ItemRandomStatsId"].Value; + item.RequiredAmount = (byte)row.Cells["ItemRequiredAmount"].Value; + item.Image = (ushort)row.Cells["ItemImage"].Value; + item.Shape = (short)row.Cells["ItemShape"].Value; + item.Effect = (byte)row.Cells["ItemEffect"].Value; + item.StackSize = (ushort)row.Cells["ItemStackSize"].Value; + item.Weight = (byte)row.Cells["ItemWeight"].Value; + + item.StartItem = (bool)row.Cells["StartItem"].Value; + item.NeedIdentify = (bool)row.Cells["NeedIdentify"].Value; + item.ShowGroupPickup = (bool)row.Cells["ShowGroupPickup"].Value; + item.GlobalDropNotify = (bool)row.Cells["GlobalDropNotify"].Value; + item.ClassBased = (bool)row.Cells["ClassBased"].Value; + item.LevelBased = (bool)row.Cells["LevelBased"].Value; + + var light = ((byte)row.Cells["ItemLightRange"].Value % 15) + ((byte)row.Cells["ItemLightIntensity"].Value * 15); + item.Light = (byte)Math.Min(byte.MaxValue, light); + item.Durability = (ushort)row.Cells["ItemDurability"].Value; + item.Price = (uint)row.Cells["ItemPrice"].Value; + item.ToolTip = row.Cells["ItemToolTip"].Value.ToString(); + + item.Stats.Clear(); + item.Bind = BindMode.None; + item.Unique = SpecialItemMode.None; + + foreach (DataGridViewColumn col in itemInfoGridView.Columns) + { + if (col.Name.StartsWith("Stat")) + { + var stat = col.Name.Substring(4); + + Stat enumStat = (Stat)Enum.Parse(typeof(Stat), stat); + + item.Stats[enumStat] = (int)row.Cells[col.Name].Value; + } + else if (col.Name.StartsWith("Bind")) + { + var bind = col.Name.Substring(4); + + BindMode enumBind = (BindMode)Enum.Parse(typeof(BindMode), bind); + + if ((bool)row.Cells[col.Name].Value) + { + item.Bind |= enumBind; + } + } + else if (col.Name.StartsWith("Special")) + { + var special = col.Name.Substring(7); + + SpecialItemMode enumSpecial = (SpecialItemMode)Enum.Parse(typeof(SpecialItemMode), special); + + if ((bool)row.Cells[col.Name].Value) + { + item.Unique |= enumSpecial; + } + } + } + } + } + + private DataRow FindRowByItemName(string value) + { + foreach (DataRow row in Table.Rows) + { + var val = row["ItemName"]; + + if (val?.ToString().Equals(value) ?? false) + { + return row; + } + } + + return null; + } + + private void itemInfoGridView_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) + { + var col = itemInfoGridView.Columns[e.ColumnIndex]; + + if (col.Name.Equals("Modified", comparisonType: StringComparison.CurrentCultureIgnoreCase) || + col.Name.Equals("ItemIndex", comparisonType: StringComparison.CurrentCultureIgnoreCase)) + { + return; + } + + var cell = itemInfoGridView.Rows[e.RowIndex].Cells[col.Name]; + + var val = e.FormattedValue.ToString(); + + itemInfoGridView.Rows[e.RowIndex].ErrorText = ""; + + //Only AttackSpeed stat can be negative + if (col.ValueType == typeof(int) && col.Name != "StatAttackSpeed" && int.TryParse(val, out int val1) && val1 < 0) + { + e.Cancel = true; + itemInfoGridView.Rows[e.RowIndex].ErrorText = "the value must be a positive integer"; + } + + if (col.ValueType == typeof(int) && !int.TryParse(val, out _)) + { + e.Cancel = true; + itemInfoGridView.Rows[e.RowIndex].ErrorText = "the value must be an integer"; + } + else if (col.ValueType == typeof(byte) && !byte.TryParse(val, out _)) + { + e.Cancel = true; + itemInfoGridView.Rows[e.RowIndex].ErrorText = "the value must be a byte"; + } + else if (col.ValueType == typeof(short) && !short.TryParse(val, out _)) + { + e.Cancel = true; + itemInfoGridView.Rows[e.RowIndex].ErrorText = "the value must be a short"; + } + else if (col.ValueType == typeof(ushort) && !ushort.TryParse(val, out _)) + { + e.Cancel = true; + itemInfoGridView.Rows[e.RowIndex].ErrorText = "the value must be a ushort"; + } + else if (col.ValueType == typeof(long) && !long.TryParse(val, out _)) + { + e.Cancel = true; + itemInfoGridView.Rows[e.RowIndex].ErrorText = "the value must be a long"; + } + + if (!e.Cancel) + { + itemInfoGridView.Rows[e.RowIndex].Cells["Modified"].Value = true; + } + } + + private void rbtnViewAll_CheckedChanged(object sender, EventArgs e) + { + if (rbtnViewAll.Checked) + { + foreach (DataGridViewColumn col in itemInfoGridView.Columns) + { + if (col.Name == "Modified") continue; + + col.Visible = true; + continue; + } + } + } + + private void rbtnViewBasic_CheckedChanged(object sender, EventArgs e) + { + if (rbtnViewBasic.Checked) + { + foreach (DataGridViewColumn col in itemInfoGridView.Columns) + { + if (col.Name == "ItemIndex" || col.Name == "ItemName" || col.Name == "Modified") + { + continue; + } + + if (col.Name.StartsWith("Item")) + { + col.Visible = true; + continue; + } + + col.Visible = false; + } + } + } + + private void rbtnViewStats_CheckedChanged(object sender, EventArgs e) + { + if (rbtnViewStats.Checked) + { + foreach (DataGridViewColumn col in itemInfoGridView.Columns) + { + if (col.Name == "ItemIndex" || col.Name == "ItemName" || col.Name == "Modified") + { + continue; + } + + if (col.Name.StartsWith("Stat")) + { + col.Visible = true; + continue; + } + + col.Visible = false; + } + } + } + + private void rbtnViewBinding_CheckedChanged(object sender, EventArgs e) + { + if (rbtnViewBinding.Checked) + { + foreach (DataGridViewColumn col in itemInfoGridView.Columns) + { + if (col.Name == "ItemIndex" || col.Name == "ItemName" || col.Name == "Modified") + { + continue; + } + + if (col.Name.StartsWith("Bind")) + { + col.Visible = true; + continue; + } + + col.Visible = false; + } + } + } + + private void rBtnViewSpecial_CheckedChanged(object sender, EventArgs e) + { + var specialCols = new string[] + { + "StartItem", "NeedIdentify", "ShowGroupPickup", "GlobalDropNotify", "ClassBased", "LevelBased", "CanMine", "CanFastRun", "CanAwakening" + }; + + if (rBtnViewSpecial.Checked) + { + foreach (DataGridViewColumn col in itemInfoGridView.Columns) + { + if (col.Name == "ItemIndex" || col.Name == "ItemName" || col.Name == "Modified") + { + continue; + } + + if (col.Name.StartsWith("Special")) + { + col.Visible = true; + continue; + } + + if (specialCols.Contains(col.Name)) + { + col.Visible = true; + continue; + } + + col.Visible = false; + } + } + } + + private void drpFilterType_SelectedIndexChanged(object sender, EventArgs e) + { + if (itemInfoGridView.DataSource == null) + { + return; + } + + UpdateFilter(); + + var filterType = ((KeyValuePair)drpFilterType.SelectedItem).Value; + + if (filterType == global::ItemType.Gem.ToString()) + { + SwapGemContext(true); + } + else + { + SwapGemContext(false); + } + + } + + private void txtSearch_KeyDown(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.Enter) + { + UpdateFilter(); + + e.Handled = true; + e.SuppressKeyPress = true; + } + } + + private void btnImport_Click(object sender, EventArgs e) + { + OpenFileDialog ofd = new OpenFileDialog(); + ofd.Filter = "CSV (*.csv)|*.csv"; + + if (ofd.ShowDialog() == DialogResult.OK) + { + var fileName = ofd.FileName; + bool fileError = false; + + var rows = File.ReadAllLines(fileName); + + if (rows.Length > 1) + { + var columns = rows[0].Split(','); + + if (columns.Length < 2) + { + fileError = true; + MessageBox.Show("No columns to import."); + } + + if (!fileError) + { + itemInfoGridView.EditMode = DataGridViewEditMode.EditProgrammatically; + + int rowsEdited = 0; + + this.itemInfoGridView.CurrentCell = this.itemInfoGridView[1, 0]; + + for (int i = 1; i < rows.Length; i++) + { + var row = rows[i]; + + var cells = row.Split(','); + + if (string.IsNullOrWhiteSpace(cells[0])) + { + continue; + } + + if (cells.Length != columns.Length) + { + fileError = true; + MessageBox.Show($"Row {i} column count does not match the headers column count."); + break; + } + + var dataRow = FindRowByItemName(cells[0]); + + try + { + itemInfoGridView.BeginEdit(true); + + if (dataRow == null) + { + dataRow = Table.NewRow(); + + Table.Rows.Add(dataRow); + } + + for (int j = 0; j < columns.Length; j++) + { + var column = columns[j]; + + if (string.IsNullOrWhiteSpace(column)) + { + continue; + } + + var dataColumn = itemInfoGridView.Columns[column]; + + if (dataColumn == null) + { + fileError = true; + MessageBox.Show($"Column {column} was not found."); + break; + } + + if (dataColumn.ValueType.IsEnum) + { + dataRow[column] = Enum.Parse(dataColumn.ValueType, cells[j]); + } + else + { + if (dataColumn.Name == "ItemToolTip") + { + dataRow[column] = cells[j].Trim('"').Replace("\\r\\n", "\r\n"); + } + else + { + dataRow[column] = cells[j]; + } + } + } + + dataRow["Modified"] = true; + + itemInfoGridView.EndEdit(); + } + catch (Exception ex) + { + fileError = true; + itemInfoGridView.EndEdit(); + + MessageBox.Show($"Error when importing item {cells[0]}. {ex.Message}"); + continue; + } + + rowsEdited++; + + if (fileError) + { + break; + } + } + + if (!fileError) + { + itemInfoGridView.EditMode = DataGridViewEditMode.EditOnKeystrokeOrF2; + + MessageBox.Show($"{rowsEdited} items have been imported."); + } + } + } + else + { + MessageBox.Show("No rows to import."); + } + } + } + + private void btnExport_Click(object sender, EventArgs e) + { + if (itemInfoGridView.Rows.Count > 0) + { + SaveFileDialog sfd = new SaveFileDialog(); + sfd.Filter = "CSV (*.csv)|*.csv"; + sfd.FileName = "ItemInfo Output.csv"; + bool fileError = false; + if (sfd.ShowDialog() == DialogResult.OK) + { + if (File.Exists(sfd.FileName)) + { + try + { + File.Delete(sfd.FileName); + } + catch (IOException ex) + { + fileError = true; + MessageBox.Show("It wasn't possible to write the data to the disk." + ex.Message); + } + } + if (!fileError) + { + try + { + int columnCount = itemInfoGridView.Columns.Count; + string columnNames = ""; + var outputCsv = new List(itemInfoGridView.Rows.Count + 1); + for (int i = 2; i < columnCount; i++) + { + columnNames += itemInfoGridView.Columns[i].Name.ToString() + ","; + } + outputCsv.Add(columnNames); + + var line = new StringBuilder(); + for (int i = 1; (i - 1) < itemInfoGridView.Rows.Count; i++) + { + line.Clear(); + + var row = itemInfoGridView.Rows[i - 1]; + + var name = row.Cells["ItemName"].Value; + if (name == null || name.GetType() == typeof(System.DBNull) || string.IsNullOrWhiteSpace((string)name)) + { + continue; + } + + for (int j = 2; j < columnCount; j++) + { + var cell = row.Cells[j]; + + var col = itemInfoGridView.Columns[j]; + + var valueType = col.ValueType; + if (valueType.IsEnum) + { + line.Append(((Enum.ToObject(valueType, cell.Value ?? 0))?.ToString() ?? "") + ","); + } + else + { + var val = cell.Value?.ToString() ?? ""; + + if (col.Name == "ItemToolTip") + { + line.Append($"\"{val.Replace("\r\n", "\\r\\n")}\","); + } + else + { + line.Append($"{val},"); + } + } + } + + if (line.Length > 0) + outputCsv.Add(line.ToString()); + } + + File.WriteAllLines(sfd.FileName, outputCsv, Encoding.UTF8); + MessageBox.Show("Data Exported Successfully.", "Info"); + } + catch (Exception ex) + { + MessageBox.Show("Error :" + ex.Message); + } + } + } + } + else + { + MessageBox.Show("No Items To Export.", "Info"); + } + } + + private void itemInfoGridView_DefaultValuesNeeded(object sender, DataGridViewRowEventArgs e) + { + var row = e.Row; + + row.Cells["Modified"].Value = (bool)true; + row.Cells["ItemName"].Value = ""; + + row.Cells["ItemType"].Value = (ItemType)0; + row.Cells["ItemGrade"].Value = (ItemGrade)0; + row.Cells["ItemRequiredType"].Value = (RequiredType)0; + row.Cells["ItemRequiredGender"].Value = RequiredGender.None; + row.Cells["ItemRequiredClass"].Value = RequiredClass.None; + row.Cells["ItemSet"].Value = (ItemSet)0; + row.Cells["ItemRandomStatsId"].Value = (byte)0; + row.Cells["ItemRequiredAmount"].Value = (byte)0; + row.Cells["ItemImage"].Value = (ushort)0; + row.Cells["ItemShape"].Value = (short)0; + row.Cells["ItemEffect"].Value = (byte)0; + row.Cells["ItemStackSize"].Value = (ushort)1; + row.Cells["ItemWeight"].Value = (byte)0; + row.Cells["ItemLightRange"].Value = (byte)0; + row.Cells["ItemLightIntensity"].Value = (byte)0; + row.Cells["ItemDurability"].Value = (ushort)0; + row.Cells["ItemPrice"].Value = (uint)0; + row.Cells["ItemToolTip"].Value = (string)""; + + row.Cells["StartItem"].Value = false; + row.Cells["NeedIdentify"].Value = false; + row.Cells["ShowGroupPickup"].Value = false; + row.Cells["GlobalDropNotify"].Value = false; + row.Cells["ClassBased"].Value = false; + row.Cells["LevelBased"].Value = false; + + foreach (Stat stat in StatEnums) + { + if (stat == Stat.Unknown) continue; + + row.Cells["Stat" + stat.ToString()].Value = 0; + } + + foreach (BindMode bind in BindEnums) + { + if (bind == BindMode.None) continue; + + row.Cells["Bind" + bind.ToString()].Value = false; + } + + foreach (SpecialItemMode special in SpecialEnums) + { + if (special == SpecialItemMode.None) continue; + + row.Cells["Special" + special.ToString()].Value = false; + } + } + + private void ItemInfoGridView_MouseClick(object sender, MouseEventArgs e) + { + + if (e.Button == MouseButtons.Right && + itemInfoGridView.SelectedRows.Count > 1) + { + var mouseOverRow = itemInfoGridView.HitTest(e.X, e.Y).RowIndex; + var mouseOverCol = itemInfoGridView.HitTest(e.X, e.Y).ColumnIndex; + + if (mouseOverRow >= 0 && + mouseOverCol >= 0) + { + var colName = itemInfoGridView.Rows[mouseOverRow].Cells[mouseOverCol].OwningColumn.HeaderText; + + if (colName == "Modified" || + colName == "Index" || + colName == "Name" || + itemInfoGridView.Rows[mouseOverRow].Cells[mouseOverCol] is DataGridViewComboBoxCell + ) + { + return; + } + + String promptText = $"Enter new value for column [{colName}]:"; + if (itemInfoGridView.Rows[mouseOverRow].Cells[mouseOverCol] is DataGridViewCheckBoxCell) + { + promptText += $"{Environment.NewLine}[[Enter 1 for tick or 0 for untick]]"; + } + + var updateValue = Interaction.InputBox(promptText, + "Bulk Update", + String.Empty); + + if (!String.IsNullOrEmpty(updateValue)) + { + foreach (DataGridViewRow selectedRow in itemInfoGridView.SelectedRows) + { + selectedRow.Cells[mouseOverCol].Value = updateValue; + } + + // for some reason datagridview doesn't reflect selected cell value updating like this + // so re-assigning value fixes it. + if (itemInfoGridView.Rows[mouseOverRow].Cells[mouseOverCol] is DataGridViewCheckBoxCell) + { + itemInfoGridView.Rows[mouseOverRow].Cells[mouseOverCol].Value = updateValue; + } + } + } + } + } + + private void itemInfoGridView_UserDeletingRow(object sender, DataGridViewRowCancelEventArgs e) + { + var row = e.Row; + + if (row.Cells["ItemIndex"].Value != null) + { + int index = (int)row.Cells["ItemIndex"].Value; + + var item = Envir.ItemInfoList.FirstOrDefault(x => x.Index == index); + + Envir.ItemInfoList.Remove(item); + } + } + + private void itemInfoGridView_DataError(object sender, DataGridViewDataErrorEventArgs e) + { + + } + private void Gameshop_button_Click(object sender, EventArgs e) + { + foreach (DataGridViewRow row in itemInfoGridView.Rows) + { + if (row.Selected && row.Cells["ItemIndex"].Value != null) + { + int index = (int)row.Cells["ItemIndex"].Value; + + var item = Envir.ItemInfoList.FirstOrDefault(x => x.Index == index); + + Envir.AddToGameShop(item); + } + } + + Envir.SaveDB(); + } + + private void CellValueChanged(object sender, DataGridViewCellEventArgs e) + { + + if (itemInfoGridView.CurrentCell is DataGridViewComboBoxCell || + itemInfoGridView.CurrentCell is DataGridViewCheckBoxCell && + e.RowIndex != -1) + { + if (itemInfoGridView.Rows[e.RowIndex].DataBoundItem != null) + { + itemInfoGridView.Rows[e.RowIndex].Cells["Modified"].Value = true; + } + } + } + + private void ItemInfoGridView_SelectionChanged(object sender, EventArgs e) + { + if (itemInfoGridView.CurrentRow != null && + itemInfoGridView.CurrentRow.Index != -1) + { + var itemType = itemInfoGridView.CurrentRow.Cells["ItemType"]; + bool isGemSelected = (global::ItemType)itemType.Value == global::ItemType.Gem; + SwapGemContext(isGemSelected); + } + } + + private void CurrentCellDirtyStateChanged(object sender, EventArgs e) + { + if (itemInfoGridView.IsCurrentCellDirty) + { + itemInfoGridView.CommitEdit(DataGridViewDataErrorContexts.Commit); + } + } + + private void ItemInfoFormNew_FormClosing(object sender, FormClosingEventArgs e) + { + List inError = new(); + int indexColumn = itemInfoGridView.Columns["ItemIndex"].Index; + int nameColumn = itemInfoGridView.Columns["ItemName"].Index; + + for (int i = 0; i < itemInfoGridView.RowCount; i++) + { + if (!String.IsNullOrEmpty(itemInfoGridView.Rows[i].ErrorText)) + { + inError.Add($"Index: [{itemInfoGridView.Rows[i].Cells[indexColumn].Value}] Item: [{itemInfoGridView.Rows[i].Cells[nameColumn].Value}]"); + } + } + + if (inError.Count > 0) + { + String msg = string.Join(Environment.NewLine, inError); + if (MessageBox.Show($"The following items are invalid: {msg}", "Discard Invalid Items?", MessageBoxButtons.OKCancel) != DialogResult.OK) + { + e.Cancel = true; + return; + } + } + + SaveForm(); + Envir.SaveDB(); + } + + private void MapHeaderText() + { + for (int i = 0; i < itemInfoGridView.ColumnCount; i++) + { + var col = itemInfoGridView.Columns[i]; + + _defaultItemHeaderMappings.Add(i, col.HeaderText); + } + + foreach (var entry in _defaultItemHeaderMappings) + { + switch (entry.Value.Trim()) + { + case nameof(SpecialItemMode.Paralize): + _gemItemHeaderMappings.Add(entry.Key, "Weapon"); + break; + case nameof(SpecialItemMode.Teleport): + _gemItemHeaderMappings.Add(entry.Key, "Armour"); + break; + case nameof(SpecialItemMode.ClearRing): + _gemItemHeaderMappings.Add(entry.Key, "Helmet"); + break; + case nameof(SpecialItemMode.Protection): + _gemItemHeaderMappings.Add(entry.Key, "Necklace"); + break; + case nameof(SpecialItemMode.Revival): + _gemItemHeaderMappings.Add(entry.Key, "Bracelet"); + break; + case nameof(SpecialItemMode.Muscle): + _gemItemHeaderMappings.Add(entry.Key, "Ring"); + break; + case nameof(SpecialItemMode.Flame): + _gemItemHeaderMappings.Add(entry.Key, "Amulet"); + break; + case nameof(SpecialItemMode.Healing): + _gemItemHeaderMappings.Add(entry.Key, "Belt"); + break; + case nameof(SpecialItemMode.Probe): + _gemItemHeaderMappings.Add(entry.Key, "Boots"); + break; + case nameof(SpecialItemMode.Skill): + _gemItemHeaderMappings.Add(entry.Key, "Stone"); + break; + case nameof(SpecialItemMode.NoDuraLoss): + _gemItemHeaderMappings.Add(entry.Key, "Torch"); + break; + case "Critical Damage": + _gemItemHeaderMappings.Add(entry.Key, "Max Stats (All)"); + break; + case "Critical": + _gemItemHeaderMappings.Add(entry.Key, "Base Rate %"); + break; + case "Reflect": + _gemItemHeaderMappings.Add(entry.Key, "Success Drop"); + break; + case "HP Drain %": + _gemItemHeaderMappings.Add(entry.Key, "Max Gem Stat"); + break; + } + } + } + + private void SwapGemContext(bool showGemInfo) + { + // are we already showing correct field names? + if ((showGemInfo && _isInGemContext) || + (!showGemInfo && !_isInGemContext)) + { + return; + } + + foreach (var entry in _gemItemHeaderMappings) + { + var col = itemInfoGridView.Columns[entry.Key]; + + col.HeaderText = showGemInfo ? + _gemItemHeaderMappings[entry.Key] : + _defaultItemHeaderMappings[entry.Key]; + + col.DefaultCellStyle.BackColor = showGemInfo ? + Color.Yellow : + Color.Empty; + } + + _isInGemContext = showGemInfo; + } + } +} diff --git a/Server.MirForms/Database/ItemInfoFormNew.resx b/Server.MirForms/Database/ItemInfoFormNew.resx new file mode 100644 index 0000000..e77b621 --- /dev/null +++ b/Server.MirForms/Database/ItemInfoFormNew.resx @@ -0,0 +1,1844 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + + + AAABAAgAICAQAAAABADoAgAAhgAAACAgAAAAABgAqAwAAG4DAAAgIAAAAAAIAKgIAAAWEAAAQEAAAAAA + GAAoMgAAvhgAAEBAEAAAAAQAaAoAAOZKAABAQAAAAAAIACgWAABOVQAAgIAAAAAAGAAoyAAAdmsAAICA + AAAAAAgAKEwAAJ4zAQAoAAAAIAAAAEAAAAABAAQAAAAAAAACAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAA + gAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////ABER + ERAAAAAAAAAAAAAAAAARERERAAAAAAAAAAAAAAAAERERERAAAAAAAAAAAAAAABERERERAAAAAQAAAAAA + AAARERAAAQAAAAEAAAAAAAAAEREREQAAAAABAAAAAAAAABERERERAAAAABAAAAAAAAAREREREQAAAAAQ + AAAQAAAAEREREREAAAAAAAABEAAAAAERERERAAAAAAAxERAAAAAQERERERAAAAABEQAAAAAAAAAREREQ + AAAAAQARERARAAAAEREREAAAAAEBEAERERAAAAAAAAAAAAAQEQARMzERAAAAEREAAAABEBADMzMzEQAA + AAEQAAAAAAEAADMxMxEAAAAAAAAAAAEQEQAzMxEQAAABAAEAAAEREAAAMBMQEAAAAAARAAABEREQADEQ + EQAAAAABEBEBEREQATAREREAAAAQAQAQARERAQABEQERAAAAAAAAEBETEQMRERAREQAAAAAAARARExEQ + AREAAREQAAAAAAEBERMxMQEBAAABEQABAAAAAQERERMREQAAAAEAABAAABABERExERAAAAAAAAAAAAAA + EREREREAAAAAAAAAABAQEQAAAREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABAAAAAAAAAAAA + AAAAEAARAAAAAAAAAAAAAAAAAAABEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABABgAAAAAAAAM + AAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA + AACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAAAA + AAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA + AACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACA + AACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAACAAACAAACAAACAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAA + AACAAACAAACAAACAAACAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAAAAAAAAAACAAACAAACAAACAAACA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACAAAAAAACAAACAAAAAAAAAAACAAACAAICAAICAAICAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAA + AACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAACAAAAAAAAAAICAAICAAICA + AICAAICAAICAAICAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAICAAICAAICAAACAAICAAICAAACAAACAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAACAAACA + AAAAAAAAAICAAICAAICAAICAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAACA + AAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAICAAAAAAACAAICAAACAAAAA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAACAAACAAACA + AACAAACAAACAAAAAAAAAAAAAAICAAACAAACAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAACAAACAAAAAAACAAACAAAAAAACAAACAAACAAACAAACAAACAAAAAAAAAAACAAICAAAAAAACAAACA + AACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAACA + AACAAACAAACAAACAAAAAAACAAAAAAAAAAAAAAACAAACAAACAAAAAAACAAACAAACAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAICAAACAAACAAAAAAICAAACAAACA + AACAAACAAACAAAAAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + AACAAAAAAACAAACAAACAAICAAACAAACAAACAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAACAAACAAACA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAACAAICAAICAAACA + AICAAACAAAAAAACAAAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAACAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAACAAACAAACAAICAAACAAACAAACAAACAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACA + AACAAACAAACAAACAAICAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAAAA + AACAAACAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAA + AACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAACAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE + AAAAAAAAAAAAAAABAAAAAQAAAAD/AAD/AAD/AAAAAP//AP//AAD/AP8AwMDAAP/48ADX6/oA1P9/AP8A + AADiK4oAKiqlAAAAAAAEBAQACAgIAAwMDAAREREAFhYWABwcHAAiIiIAKSkpADMzMwA5OTkAQkJCAE1N + TQBVVVUAYGBgAGZmZgBwcHAAgICAAIyMjACUlJQAmZmZAKSkpACsrKwAtra2AMDAwADMzMwA1NTUANra + 2gDg4OAA7OzsAPj4+AD7+/sA////ADMAAABmAAAAmQAAAMwAAAD/AAAAADMAADMzAABmMwAAmTMAAMwz + AAD/MwAAAGYAADNmAABmZgAAmWYAAMxmAAD/ZgAAAJkAADOZAABmmQAAmZkAAMyZAAD/mQAAAMwAADPM + AABmzAAAmcwAAMzMAAD/zAAAAP8AADP/AABm/wAAmf8AAMz/AAD//wAAAAAzADMAMwBmADMAmQAzAMwA + MwD/ADMAADMzAGYzMwCZMzMAzDMzAP8zMwAAZjMAM2YzAGZmMwCZZjMAzGYzAP9mMwAAmTMAM5kzAGaZ + MwCZmTMAzJkzAP+ZMwAAzDMAM8wzAGbMMwCZzDMAzMwzAP/MMwAA/zMAM/8zAGb/MwCZ/zMAzP8zAP// + MwAAAGYAMwBmAGYAZgCZAGYAzABmAP8AZgAAM2YAMzNmAGYzZgCZM2YAzDNmAP8zZgAAZmYAM2ZmAJlm + ZgDMZmYA/2ZmAACZZgAzmWYAZplmAJmZZgDMmWYA/5lmAADMZgAzzGYAZsxmAJnMZgDMzGYA/8xmAAD/ + ZgAz/2YAZv9mAJn/ZgDM/2YA//9mAAAAmQAzAJkAZgCZAJkAmQDMAJkA/wCZAAAzmQAzM5kAZjOZAJkz + mQDMM5kA/zOZAABmmQAzZpkAZmaZAJlmmQDMZpkA/2aZAACZmQAzmZkAZpmZAMyZmQD/mZkAAcyZADPM + mQBmzJkAmcyZAMzMmQD/zJkAAP+ZADP/mQBm/5kAmf+ZAMz/mQD//5kAAADMADMAzABmAMwAmQDMAMwA + zAD/AMwAADPMADMzzABmM8wAmTPMAMwzzAD/M8wAAGbMADNmzABmZswAmWbMAMxmzAD/ZswAAJnMADOZ + zABmmcwAmZnMAMyZzAD/mcwAAMzMADPMzABmzMwAmczMAP/MzAAA/8wAM//MAGb/zACZ/8wAzP/MAP// + zAAAAP8AMwD/AGYA/wCZAP8AzAD/AP8A/wAAM/8AMzP/AGYz/wCZM/8AzDP/AP8z/wAAZv8AM2b/AGZm + /wCZZv8AzGb/AP9m/wAAmf8AM5n/AGaZ/wCZmf8AzJn/AP+Z/wAAzP8AM8z/AGbM/wCZzP8AzMz/AP/M + /wAA//8AM///AGb//wCZ//8AzP//AJ+fn5+fn58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQn5+fn5+f + n58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBCfn5+fn5+fn58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEJ+f + n5+fn5+fn58QEBAQEBAQnxAQEBAQEBAQEBAQEBAQn5+fn58QEBAQnxAQEBAQEBCfEBAQEBAQEBAQEBAQ + EBCfn5+fn5+fnxAQEBAQEBAQEJ8QEBAQEBAQEBAQEBAQEJ+fn5+fn5+fn58QEBAQEBAQEJ8QEBAQEBAQ + EBAQEBAQn5+fn5+fn5+fnxAQEBAQEBAQnxAQEBAQnxAQEBAQEBCfn5+fn5+fn5+fEBAQEBAQEBAQEBAQ + EJ+fEBAQEBAQEBCfn5+fn5+fn58QEBAQEBAQEBAQrZ+fn58QEBAQEBAQnxCfn5+fn5+fn58QEBAQEBAQ + EJ+fnxAQEBAQEBAQEBAQEBAQn5+fn5+fnxAQEBAQEBAQnxAQn5+fn58Qn58QEBAQEBCfn5+fn5+fEBAQ + EBAQEBCfEJ+fEBCfn5+fn58QEBAQEBAQEBAQEBAQEBAQEBAQnxCfnxAQn5+tra2fn58QEBAQEBCfn5+f + EBAQEBAQEJ+fEJ8QEK2tra2tra2fnxAQEBAQEBCfnxAQEBAQEBAQEBCfEBAQEK2trZ+trZ+fEBAQEBAQ + EBAQEBAQEBAQEBCfnxCfnxAQra2trZ+fnxAQEBAQEJ8QEBCfEBAQEBCfn5+fEBAQEBCtEJ+tnxCfEBAQ + EBAQEBAQn58QEBAQEJ+fn5+fnxAQEK2fnxCfnxAQEBAQEBAQEJ+fEJ+fEJ+fn5+fnxAQn60Qn5+fn5+f + EBAQEBAQnxAQnxAQnxAQn5+fn58QnxAQEJ+fnxCfn58QEBAQEBAQEBAQEBCfEJ+fn62fnxCtn5+fn58Q + n5+fnxAQEBAQEBAQEBAQn58Qn5+frZ+fnxAQn5+fEBAQn5+fnxAQEBAQEBAQEBCfEJ+fn5+trZ+tnxCf + EJ8QEBAQEJ+fnxAQEJ8QEBAQEBAQnxCfn5+fn5+tn5+fnxAQEBAQEBCfEBAQEJ8QEBAQEJ8QEJ+fn5+f + rZ+fn58QEBAQEBAQEBAQEBAQEBAQEBAQEBCfn5+fn5+fn5+fEBAQEBAQEBAQEBAQEBAQEJ8QnxCfnxAQ + EBAQn5+fEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEJ8QEJ8QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBCfEBAQn58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEJ+fEJ8QEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAABAAAAAgAAAAAEAGAAAAAAAADAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAA + AAAAAIAAAIAAAAAAAAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAA + gIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAAIAA + AIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAgIAA + gIAAgIAAgIAAAIAAAIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAAAAAAAAAIAAAIAAgIAAgIAAAIAAAIAAAAAA + AAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAAAAAAAAAIAAAIAAgIAA + gIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAA + AIAAgIAAgIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAA + AAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAIAAAIAAgIAAgIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAgIAAgIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAgIAA + gIAAgIAAgIAAAIAAAIAAgIAAgIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAgIAAgIAAgIAAgIAAAIAAAIAAgIAAgIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAgIAA + gIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAAAA + AAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAABAAAAAgAAAAAEABAAAAAAAAAgAAAAA + AAAAAAAAEAAAABAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAwMDAAICAgAAAAP8AAP8AAAD/ + /wD/AAAA/wD/AP//AAD///8AEREREREREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARERERERERAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAABERERERERERAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAERERERER + EREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAREREREREREREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABER + EREREREREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEREREREREREREQAAAAAAAAARAAAAAAAAAAAAAAAA + AAARERERERERERERAAAAAAAAABEAAAAAAAAAAAAAAAAAABERERERAAAAABEAAAAAAAAAEQAAAAAAAAAA + AAAAAAAAEREREREAAAAAEQAAAAAAAAARAAAAAAAAAAAAAAAAAAAREREREREREQAAAAAAAAAAABEAAAAA + AAAAAAAAAAAAABERERERERERAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAEREREREREREREQAAAAAAAAAA + EQAAAAAAAAAAAAAAAAARERERERERERERAAAAAAAAAAARAAAAAAAAAAAAAAAAABEREREREREREREAAAAA + AAAAABEAAAAAABEAAAAAAAAAEREREREREREREQAAAAAAAAAAEQAAAAAAEQAAAAAAAAARERERERERERER + AAAAAAAAAAAAAAAAABERAAAAAAAAABEREREREREREREAAAAAAAAAAAAAAAAAEREAAAAAAAAAABERERER + EREREQAAAAAAAAAAAAAzEREREQAAAAAAAAAAERERERERERERAAAAAAAAAAAAADMRERERAAAAAAAAABEA + ERERERERERERAAAAAAAAAAAREREAAAAAAAAAAAAAEQAREREREREREREAAAAAAAAAABEREQAAAAAAAAAA + AAAAAAAAEREREREREQAAAAAAAAAAEQAAEREREREAEREAAAAAAAARERERERERAAAAAAAAAAARAAARERER + EQAREQAAAAAAABEREREREREAAAAAAAAAABEAEREAABEREREREQAAAAAAEREREREREQAAAAAAAAAAEQAR + EQAAERERERERAAAAAAAAAAAAAAAAAAAAAAAAABEAEREAABERMzMzERERAAAAAAAAAAAAAAAAAAAAAAAA + EQAREQAAEREzMzMREREAAAAAAAARERERAAAAAAAAABERABEAADMzMzMzMzMREQAAAAAAABEREREAAAAA + AAAAEREAEQAAMzMzMzMzMxERAAAAAAAAABERAAAAAAAAAAAAABEAAAAAMzMzETMzEREAAAAAAAAAEREA + AAAAAAAAAAAAEQAAAAAzMzMRMzMREQAAAAAAAAAAAAAAAAAAAAAAEREAEREAADMzMzMREREAAAAAAAAA + AAAAAAAAAAAAAAAREQAREQAAMzMzMxEREQAAAAAAABEAAAARAAAAAAARERERAAAAAAAzABEzEQARAAAA + AAAAEQAAABEAAAAAABEREREAAAAAADMAETMRABEAAAAAAAAAAAAREQAAAAAAERERERERAAAAMxERABER + AAAAAAAAAAAAABERAAAAAAAREREREREAAAAzEREAEREAAAAAAAAAAAAREQAREQAREREREREAABEzABER + EREREQAAAAAAAAAAABERABERABEREREREQAAETMAERERERERAAAAAAAAEQAAEQAAEQAAEREREREAEQAA + ABEREQAREREAAAAAAAARAAARAAARAAAREREREQARAAAAERERABEREQAAAAAAAAAAAAAAABEAERERMxER + ADMREREREQARERERAAAAAAAAAAAAAAAAEQAREREzEREAMxERERERABEREREAAAAAAAAAAAAAABERABER + ETMREREAABEREQAAABEREREAAAAAAAAAAAAAEREAERERMxEREQAAERERAAAAEREREQAAAAAAAAAAAAAR + ABEREREzMxEzEQARABEAAAAAABEREQAAAAAAAAAAABEAERERETMzETMRABEAEQAAAAAAERERAAAAEQAA + AAAAAAARABERERERETMRERERAAAAAAAAABEAAAARAAAAAAAAABEAERERERERMxEREREAAAAAAAAAEQAA + AAARAAAAAAARAAARERERETMRERERAAAAAAAAAAAAAAAAABEAAAAAABEAABERERERMxEREREAAAAAAAAA + AAAAAAAAAAAAAAAAAAARERERERERERERAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEREREREREREREAAAAA + AAAAAAAAAAAAAAAAEQARABERAAAAAAAREREAAAAAAAAAAAAAAAAAAAAAAAARABEAEREAAAAAABEREQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + EQAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAAAREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + EQAAABERAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAREQARAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAABERABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgA + AABAAAAAgAAAAAEACAAAAAAAABAAAAAAAAAAAAAAAAEAAAABAAAAAP8AAP8AAP8AAAAA//8A//8AAP8A + /wDAwMAA//jwANfr+gDU/38A/wAAAOIrigAqKqUAAAAAAAQEBAAICAgADAwMABEREQAWFhYAHBwcACIi + IgApKSkAMzMzADk5OQBCQkIATU1NAFVVVQBgYGAAZmZmAHBwcACAgIAAjIyMAJSUlACZmZkApKSkAKys + rAC2trYAwMDAAMzMzADU1NQA2traAODg4ADs7OwA+Pj4APv7+wD///8AMwAAAGYAAACZAAAAzAAAAP8A + AAAAMwAAMzMAAGYzAACZMwAAzDMAAP8zAAAAZgAAM2YAAGZmAACZZgAAzGYAAP9mAAAAmQAAM5kAAGaZ + AACZmQAAzJkAAP+ZAAAAzAAAM8wAAGbMAACZzAAAzMwAAP/MAAAA/wAAM/8AAGb/AACZ/wAAzP8AAP// + AAAAADMAMwAzAGYAMwCZADMAzAAzAP8AMwAAMzMAZjMzAJkzMwDMMzMA/zMzAABmMwAzZjMAZmYzAJlm + MwDMZjMA/2YzAACZMwAzmTMAZpkzAJmZMwDMmTMA/5kzAADMMwAzzDMAZswzAJnMMwDMzDMA/8wzAAD/ + MwAz/zMAZv8zAJn/MwDM/zMA//8zAAAAZgAzAGYAZgBmAJkAZgDMAGYA/wBmAAAzZgAzM2YAZjNmAJkz + ZgDMM2YA/zNmAABmZgAzZmYAmWZmAMxmZgD/ZmYAAJlmADOZZgBmmWYAmZlmAMyZZgD/mWYAAMxmADPM + ZgBmzGYAmcxmAMzMZgD/zGYAAP9mADP/ZgBm/2YAmf9mAMz/ZgD//2YAAACZADMAmQBmAJkAmQCZAMwA + mQD/AJkAADOZADMzmQBmM5kAmTOZAMwzmQD/M5kAAGaZADNmmQBmZpkAmWaZAMxmmQD/ZpkAAJmZADOZ + mQBmmZkAzJmZAP+ZmQABzJkAM8yZAGbMmQCZzJkAzMyZAP/MmQAA/5kAM/+ZAGb/mQCZ/5kAzP+ZAP// + mQAAAMwAMwDMAGYAzACZAMwAzADMAP8AzAAAM8wAMzPMAGYzzACZM8wAzDPMAP8zzAAAZswAM2bMAGZm + zACZZswAzGbMAP9mzAAAmcwAM5nMAGaZzACZmcwAzJnMAP+ZzAAAzMwAM8zMAGbMzACZzMwA/8zMAAD/ + zAAz/8wAZv/MAJn/zADM/8wA///MAAAA/wAzAP8AZgD/AJkA/wDMAP8A/wD/AAAz/wAzM/8AZjP/AJkz + /wDMM/8A/zP/AABm/wAzZv8AZmb/AJlm/wDMZv8A/2b/AACZ/wAzmf8AZpn/AJmZ/wDMmf8A/5n/AADM + /wAzzP8AZsz/AJnM/wDMzP8A/8z/AAD//wAz//8AZv//AJn//wDM//8An5+fn5+fn5+fn5+fn58dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+f + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+f + n5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+f + n5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+f + n5+fn5+fn5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fn5+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn5+fn5+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHZ+fHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fHR0dHR0dHR2fnx0dHR0dHR0dHR0dHR0dn58dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fnx0dHR0dHR0dn58dHR0dHR0dHR0dHR0dHZ+fHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR2fnx0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0d + n58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0d + HR0dHR0dn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0d + HR0dHR0dHR0dHZ+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fn5+fn5+fnx0d + HR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dHR2fnx0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn5+fn5+f + n58dHR0dHR0dHR0dHR0dHR0dn58dHR0dHR0dHR0dn58dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+f + n5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+f + n5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fnx0dHR0dHR0dHR0dHR0dHR2fn5+f + n5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHa2tn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0d + n5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR2trZ+fn5+fn5+fHR0dHR0dHR0dHR0d + HR2fnx0dn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHZ+fn5+fnx0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHZ+fn5+fn5+fn5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR2fn5+fn58dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dn58dHR0dn5+fn5+f + n5+fnx0dn5+fnx0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHZ+fHR0dHZ+f + n5+fn5+fn58dHZ+fn58dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR2fnx0d + n5+fnx0dHR2fn5+fn5+fn5+fn58dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0d + n58dHZ+fn58dHR0dn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fnx0dn5+fnx0dHR2fn5+fra2tra2tn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHZ+fn58dHR0dn5+fn62tra2trZ+fn5+fnx0dHR0dHR0dHR0dHZ+fn5+fn5+fHR0dHR0d + HR0dHR0dHR2fn5+fHR2fnx0dHR2tra2tra2tra2tra2trZ+fn58dHR0dHR0dHR0dHR2fn5+fn5+fnx0d + HR0dHR0dHR0dHR0dn5+fnx0dn58dHR0dra2tra2tra2tra2tra2fn5+fHR0dHR0dHR0dHR0dHR2fn5+f + HR0dHR0dHR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dra2tra2tn5+tra2tn5+fnx0dHR0dHR0dHR0dHR0d + n5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dn58dHR0dHR0dHa2tra2trZ+fra2trZ+fn58dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fnx0dn5+fnx0dHR2tra2tra2trZ+fn5+fnx0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn58dHZ+fn58dHR0dra2tra2tra2fn5+fn58dHR0d + HR0dHR0dHR2fnx0dHR0dHZ+fHR0dHR0dHR0dHZ+fn5+fn5+fHR0dHR0dHR0dHa2tHR2fn62tn58dHZ+f + HR0dHR0dHR0dHR0dn58dHR0dHR2fnx0dHR0dHR0dHR2fn5+fn5+fnx0dHR0dHR0dHR2trR0dn5+trZ+f + HR2fnx0dHR0dHR0dHR0dHR0dHR0dHZ+fn58dHR0dHR0dHR0dn5+fn5+fn5+fn5+fHR0dHR0dra2fn5+f + HR2fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR0dHR0dHR0dHZ+fn5+fn5+fn5+fnx0dHR0dHa2t + n5+fnx0dn5+fnx0dHR0dHR0dHR0dHR0dHR0dHZ+fn58dHZ+fn58dHZ+fn5+fn5+fn5+fnx0dHR2fn62t + HR2fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR2fn5+fHR2fn5+fn5+fn5+fn58dHR0d + n5+trR0dn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dn58dHR0dn58dHR0dn58dHR0dn5+fn5+fn5+fnx0d + n58dHR0dHR2fn5+fn58dHZ+fn5+fnx0dHR0dHR0dHR0dHZ+fHR0dHZ+fHR0dHZ+fHR0dHZ+fn5+fn5+f + n58dHZ+fHR0dHR0dn5+fn5+fHR2fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fnx0dn5+fn5+f + ra2fn5+fHR2trZ+fn5+fn5+fn58dHZ+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn58dHZ+f + n5+fn62tn5+fnx0dra2fn5+fn5+fn5+fHR2fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+f + HR2fn5+fn5+trZ+fn5+fnx0dHR2fn5+fn58dHR0dHR2fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0d + n5+fnx0dn5+fn5+fra2fn5+fn58dHR0dn5+fn5+fHR0dHR0dn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0d + HR0dHZ+fHR2fn5+fn5+fn62tra2fn62tn58dHZ+fHR2fnx0dHR0dHR0dHR2fn5+fn58dHR0dHR0dHR0d + HR0dHR0dHR2fnx0dn5+fn5+fn5+tra2tn5+trZ+fHR2fnx0dn58dHR0dHR0dHR0dn5+fn5+fHR0dHR0d + n58dHR0dHR0dHR0dHR0dHZ+fHR2fn5+fn5+fn5+fn5+trZ+fn5+fn5+fHR0dHR0dHR0dHR0dHR2fnx0d + HR0dHZ+fHR0dHR0dHR0dHR0dHR2fnx0dn5+fn5+fn5+fn5+fra2fn5+fn5+fnx0dHR0dHR0dHR0dHR0d + n58dHR0dHR0dHZ+fHR0dHR0dHR0dHZ+fHR0dHZ+fn5+fn5+fn5+trZ+fn5+fn5+fHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dHR2fnx0dHR2fn5+fn5+fn5+fra2fn5+fn5+fnx0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fn5+fn5+fnx0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn58dHZ+fHR2fn5+fHR0dHR0dHR0dHZ+fn5+fnx0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fHR2fnx0dn5+fnx0dHR0dHR0dHR2fn5+f + n58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fnx0dHR2fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHR0dn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fnx0dHR0dHZ+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHR0dHR2fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHZ+fn58dHZ+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR2fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAIAAAAAAAQAAAQAYAAAAAAAAwAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAIAAAAAAAQAAAQAIAAAAAAAAQAAAAAAAAAAA + AAAAAQAAAAEAAAAA/wAA/wAA/wAAAAD//wD//wAA/wD/AMDAwAD/+PAA1+v6ANT/fwD/AAAA4iuKACoq + pQAAAAAABAQEAAgICAAMDAwAERERABYWFgAcHBwAIiIiACkpKQAzMzMAOTk5AEJCQgBNTU0AVVVVAGBg + YABmZmYAcHBwAICAgACMjIwAlJSUAJmZmQCkpKQArKysALa2tgDAwMAAzMzMANTU1ADa2toA4ODgAOzs + 7AD4+PgA+/v7AP///wAzAAAAZgAAAJkAAADMAAAA/wAAAAAzAAAzMwAAZjMAAJkzAADMMwAA/zMAAABm + AAAzZgAAZmYAAJlmAADMZgAA/2YAAACZAAAzmQAAZpkAAJmZAADMmQAA/5kAAADMAAAzzAAAZswAAJnM + AADMzAAA/8wAAAD/AAAz/wAAZv8AAJn/AADM/wAA//8AAAAAMwAzADMAZgAzAJkAMwDMADMA/wAzAAAz + MwBmMzMAmTMzAMwzMwD/MzMAAGYzADNmMwBmZjMAmWYzAMxmMwD/ZjMAAJkzADOZMwBmmTMAmZkzAMyZ + MwD/mTMAAMwzADPMMwBmzDMAmcwzAMzMMwD/zDMAAP8zADP/MwBm/zMAmf8zAMz/MwD//zMAAABmADMA + ZgBmAGYAmQBmAMwAZgD/AGYAADNmADMzZgBmM2YAmTNmAMwzZgD/M2YAAGZmADNmZgCZZmYAzGZmAP9m + ZgAAmWYAM5lmAGaZZgCZmWYAzJlmAP+ZZgAAzGYAM8xmAGbMZgCZzGYAzMxmAP/MZgAA/2YAM/9mAGb/ + ZgCZ/2YAzP9mAP//ZgAAAJkAMwCZAGYAmQCZAJkAzACZAP8AmQAAM5kAMzOZAGYzmQCZM5kAzDOZAP8z + mQAAZpkAM2aZAGZmmQCZZpkAzGaZAP9mmQAAmZkAM5mZAGaZmQDMmZkA/5mZAAHMmQAzzJkAZsyZAJnM + mQDMzJkA/8yZAAD/mQAz/5kAZv+ZAJn/mQDM/5kA//+ZAAAAzAAzAMwAZgDMAJkAzADMAMwA/wDMAAAz + zAAzM8wAZjPMAJkzzADMM8wA/zPMAABmzAAzZswAZmbMAJlmzADMZswA/2bMAACZzAAzmcwAZpnMAJmZ + zADMmcwA/5nMAADMzAAzzMwAZszMAJnMzAD/zMwAAP/MADP/zABm/8wAmf/MAMz/zAD//8wAAAD/ADMA + /wBmAP8AmQD/AMwA/wD/AP8AADP/ADMz/wBmM/8AmTP/AMwz/wD/M/8AAGb/ADNm/wBmZv8AmWb/AMxm + /wD/Zv8AAJn/ADOZ/wBmmf8AmZn/AMyZ/wD/mf8AAMz/ADPM/wBmzP8Amcz/AMzM/wD/zP8AAP//ADP/ + /wBm//8Amf//AMz//wCfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pra2trZ+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+tra2tn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD62tra2fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+f + n5+tra2tra2tra2tra2fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8P + Dw+fn5+fn5+fn62tra2tra2tra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+f + n58PDw8PDw8PD5+fn5+fn5+fra2tra2tra2tra2tn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8P + Dw+fn5+fDw8PDw8PDw+tra2tra2tra2tra2tra2tra2tra2tra2tra2tn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PD5+fn58PDw8PDw8PD62tra2tra2tra2tra2tra2tra2tra2tra2tra2fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8Pn5+fnw8PDw8PDw8Pra2tra2tra2tra2tra2tra2tra2tra2tra2trZ+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw+fn5+fDw8PDw8PDw+tra2tra2tra2tra2tra2tra2tra2t + ra2tra2tn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+fn58PDw8PDw8PD62tra2tra2tra2tra2t + ra2tra2tra2tra2tra2fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PD62t + ra2tra2tra2trZ+fn5+tra2tra2trZ+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8Pra2tra2tra2tra2tn5+fn62tra2tra2tn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PDw8PDw+tra2tra2tra2tra2fn5+fra2tra2tra2fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n58PDw8Pn5+fn5+fn58PDw8PDw8PD62tra2tra2tra2tra2tra2fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pra2tra2tra2tra2tra2trZ+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw+tra2tra2tra2tra2tra2tn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PD62tra2tra2tra2tra2t + ra2fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pra2tra2t + ra2tra2tra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw+tra2tDw8PD5+fn5+tra2tn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PD62tra0PDw8Pn5+fn62tra2fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pra2trQ8PDw+fn5+fra2trZ+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw+tra2tn5+fn5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PD62tra2fn5+fn5+fnw8PDw+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8Pra2trZ+fn5+fn5+fDw8PD5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw+tra2tn5+fn5+f + n58PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PD62t + ra2fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PD5+fn5+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8Pn5+fn62t + ra0PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw+fn5+fra2trQ8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PD5+fn5+tra2tDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PD5+fn58PDw8PDw8PD5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fDw8PD5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+fn58PDw8PDw8PD5+f + n58PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n58PDw8Pn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fnw8P + Dw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fnw8PDw+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fn5+fn62tra2fn5+fn5+fnw8PDw+tra2tn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fDw8PD62t + ra2fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+tra2tn5+fn5+f + n58PDw8Pra2trZ+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+fn5+fn5+fn5+fn62t + ra2fn5+fn5+fn5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+f + n5+fn5+fra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8P + Dw+fn5+fn5+fn5+fn5+tra2tn5+fn5+fn5+fn5+fDw8PDw8PDw+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PD5+fn5+fn5+fn5+fn62tra2fn5+fn5+fn5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn5+tra2tra2trZ+fn5+tra2tn5+fnw8P + Dw+fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn62tra2tra2tn5+fn62t + ra2fn5+fDw8PD5+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fra2tra2t + ra2fn5+fra2trZ+fn58PDw8Pn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+tra2tn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn62tra2fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+tra2tn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fra2trZ+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+tra2tn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn62tra2fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8Pn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n58PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + + + \ No newline at end of file diff --git a/Server.MirForms/Database/MagicInfoForm.Designer.cs b/Server.MirForms/Database/MagicInfoForm.Designer.cs new file mode 100644 index 0000000..57a169b --- /dev/null +++ b/Server.MirForms/Database/MagicInfoForm.Designer.cs @@ -0,0 +1,62 @@ +namespace Server +{ + partial class MagicInfoForm + { + private System.Windows.Forms.ListBox MagiclistBox; + private System.Windows.Forms.TabControl tabControl1; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.Label lblBookValid; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox txtSkillIcon; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.TextBox txtSkillLvl3Points; + private System.Windows.Forms.TextBox txtSkillLvl2Points; + private System.Windows.Forms.TextBox txtSkillLvl1Points; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.TextBox txtSkillLvl3Req; + private System.Windows.Forms.TextBox txtSkillLvl2Req; + private System.Windows.Forms.TextBox txtSkillLvl1Req; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.TextBox txtMPIncrease; + private System.Windows.Forms.TextBox txtMPBase; + private System.Windows.Forms.ToolTip toolTip1; + private System.ComponentModel.IContainer components; + private System.Windows.Forms.Panel panel3; + private System.Windows.Forms.TextBox txtDelayReduction; + private System.Windows.Forms.TextBox txtDelayBase; + private System.Windows.Forms.Label label14; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.Panel panel4; + private System.Windows.Forms.Label label15; + private System.Windows.Forms.Label lblDamageExample; + private System.Windows.Forms.TextBox txtDmgBonusMax; + private System.Windows.Forms.TextBox txtDmgBonusMin; + private System.Windows.Forms.Label label18; + private System.Windows.Forms.Label label19; + private System.Windows.Forms.TextBox txtDmgBaseMax; + private System.Windows.Forms.TextBox txtDmgBaseMin; + private System.Windows.Forms.Label label17; + private System.Windows.Forms.Label label16; + private System.Windows.Forms.Label lblSelected; + private System.Windows.Forms.Label label20; + private System.Windows.Forms.TextBox txtRange; + private System.Windows.Forms.Label lblDamageExplained; + private System.Windows.Forms.TextBox txtDmgMultBoost; + private System.Windows.Forms.TextBox txtDmgMultBase; + private System.Windows.Forms.Label label21; + private System.Windows.Forms.Label label22; + private System.Windows.Forms.TextBox textBoxName; + private System.Windows.Forms.Label label23; + private System.Windows.Forms.Label label24; + } +} \ No newline at end of file diff --git a/Server.MirForms/Database/MagicInfoForm.cs b/Server.MirForms/Database/MagicInfoForm.cs new file mode 100644 index 0000000..d70d7bd --- /dev/null +++ b/Server.MirForms/Database/MagicInfoForm.cs @@ -0,0 +1,982 @@ +using Server.MirDatabase; +using Server.MirEnvir; + +namespace Server +{ + public partial class MagicInfoForm : Form + { + + public Envir Envir => SMain.EditEnvir; + + private MagicInfo _selectedMagicInfo; + + public MagicInfoForm() + { + InitializeComponent(); + for (int i = 0; i < Envir.MagicInfoList.Count; i++) + MagiclistBox.Items.Add(Envir.MagicInfoList[i]); + UpdateMagicForm(); + } + + private void UpdateMagicForm(byte field = 0) + { + _selectedMagicInfo = (MagicInfo)MagiclistBox.SelectedItem; + + lblBookValid.BackColor = SystemColors.Window; + + if (_selectedMagicInfo == null) + { + tabControl1.Enabled = false; + lblBookValid.Text = "Searching"; + lblSelected.Text = "Selected Skill: none"; + lblDamageExample.Text = ""; + lblDamageExplained.Text = ""; + txtSkillIcon.Text = "0"; + txtSkillLvl1Points.Text = "0"; + txtSkillLvl1Req.Text = "0"; + txtSkillLvl2Points.Text = "0"; + txtSkillLvl2Req.Text = "0"; + txtSkillLvl3Points.Text = "0"; + txtSkillLvl3Req.Text = "0"; + txtMPBase.Text = "0"; + txtMPIncrease.Text = "0"; + txtDelayBase.Text = "0"; + txtDelayReduction.Text = "0"; + txtDmgBaseMin.Text = "0"; + txtDmgBaseMax.Text = "0"; + txtDmgBonusMin.Text = "0"; + txtDmgBonusMax.Text = "0"; + } + else + { + tabControl1.Enabled = true; + lblSelected.Text = "Selected Skill: " + _selectedMagicInfo.ToString(); + lblDamageExample.Text = + $"Damage @ Skill level 0: {GetMinPower(0):000}-{GetMaxPower(0):000} ||| level 1: {GetMinPower(1):000}-{GetMaxPower(1):000} ||| level 2: {GetMinPower(2):000}-{GetMaxPower(2):000} ||| level 3: {GetMinPower(3):000}-{GetMaxPower(3):000}"; + lblDamageExplained.Text = + $"Damage: {{Random(minstat-maxstat) + [<(random({_selectedMagicInfo.MPowerBase}-{_selectedMagicInfo.MPowerBase + _selectedMagicInfo.MPowerBonus})/4) X (skill level +1)> + random<{_selectedMagicInfo.PowerBase}-{_selectedMagicInfo.PowerBonus + _selectedMagicInfo.PowerBase}>]}} X {{{_selectedMagicInfo.MultiplierBase} + (skill level * {_selectedMagicInfo.MultiplierBonus})}}"; + txtSkillIcon.Text = _selectedMagicInfo.Icon.ToString(); + txtSkillLvl1Points.Text = _selectedMagicInfo.Need1.ToString(); + txtSkillLvl1Req.Text = _selectedMagicInfo.Level1.ToString(); + txtSkillLvl2Points.Text = _selectedMagicInfo.Need2.ToString(); + txtSkillLvl2Req.Text = _selectedMagicInfo.Level2.ToString(); + txtSkillLvl3Points.Text = _selectedMagicInfo.Need3.ToString(); + txtSkillLvl3Req.Text = _selectedMagicInfo.Level3.ToString(); + txtMPBase.Text = _selectedMagicInfo.BaseCost.ToString(); + txtMPIncrease.Text = _selectedMagicInfo.LevelCost.ToString(); + txtDelayBase.Text = _selectedMagicInfo.DelayBase.ToString(); + txtDelayReduction.Text = _selectedMagicInfo.DelayReduction.ToString(); + txtDmgBaseMin.Text = _selectedMagicInfo.PowerBase.ToString(); + txtDmgBaseMax.Text = (_selectedMagicInfo.PowerBase + _selectedMagicInfo.PowerBonus).ToString(); + txtDmgBonusMin.Text = _selectedMagicInfo.MPowerBase.ToString(); + txtDmgBonusMax.Text = (_selectedMagicInfo.MPowerBase + _selectedMagicInfo.MPowerBonus).ToString(); + if (field != 1) + txtDmgMultBase.Text = _selectedMagicInfo.MultiplierBase.ToString(); + if (field != 2) + txtDmgMultBoost.Text = _selectedMagicInfo.MultiplierBonus.ToString(); + txtRange.Text = _selectedMagicInfo.Range.ToString(); + ItemInfo Book = Envir.GetBook((short)_selectedMagicInfo.Spell); + if (Book != null) + { + lblBookValid.Text = Book.Name; + } + else + { + lblBookValid.Text = "No book found"; + lblBookValid.BackColor = Color.Red; + } + this.textBoxName.Text = _selectedMagicInfo.Name; + } + } + + private int GetMaxPower(byte level) + { + if (_selectedMagicInfo == null) return 0; + return (int)Math.Round((((_selectedMagicInfo.MPowerBase + _selectedMagicInfo.MPowerBonus) / 4F) * (level + 1) + (_selectedMagicInfo.PowerBase + _selectedMagicInfo.PowerBonus))* (_selectedMagicInfo.MultiplierBase + (level * _selectedMagicInfo.MultiplierBonus))); + } + private int GetMinPower(byte level) + { + if (_selectedMagicInfo == null) return 0; + return (int)Math.Round(((_selectedMagicInfo.MPowerBase / 4F) * (level + 1) + _selectedMagicInfo.PowerBase) * (_selectedMagicInfo.MultiplierBase + (level * _selectedMagicInfo.MultiplierBonus))); + } + + private void InitializeComponent() + { + components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MagicInfoForm)); + MagiclistBox = new ListBox(); + tabControl1 = new TabControl(); + tabPage1 = new TabPage(); + label24 = new Label(); + label23 = new Label(); + textBoxName = new TextBox(); + lblDamageExample = new Label(); + lblDamageExplained = new Label(); + lblSelected = new Label(); + panel4 = new Panel(); + txtDmgMultBoost = new TextBox(); + txtDmgMultBase = new TextBox(); + label21 = new Label(); + label22 = new Label(); + txtDmgBonusMax = new TextBox(); + txtDmgBonusMin = new TextBox(); + label18 = new Label(); + label19 = new Label(); + txtDmgBaseMax = new TextBox(); + txtDmgBaseMin = new TextBox(); + label17 = new Label(); + label16 = new Label(); + label15 = new Label(); + panel3 = new Panel(); + label20 = new Label(); + txtRange = new TextBox(); + txtDelayReduction = new TextBox(); + txtDelayBase = new TextBox(); + label14 = new Label(); + label13 = new Label(); + label12 = new Label(); + panel2 = new Panel(); + txtMPIncrease = new TextBox(); + txtMPBase = new TextBox(); + label11 = new Label(); + label10 = new Label(); + label9 = new Label(); + panel1 = new Panel(); + txtSkillLvl3Points = new TextBox(); + txtSkillLvl2Points = new TextBox(); + txtSkillLvl1Points = new TextBox(); + label6 = new Label(); + label7 = new Label(); + label8 = new Label(); + txtSkillLvl3Req = new TextBox(); + txtSkillLvl2Req = new TextBox(); + txtSkillLvl1Req = new TextBox(); + label5 = new Label(); + label4 = new Label(); + label3 = new Label(); + label2 = new Label(); + txtSkillIcon = new TextBox(); + label1 = new Label(); + lblBookValid = new Label(); + toolTip1 = new ToolTip(components); + tabControl1.SuspendLayout(); + tabPage1.SuspendLayout(); + panel4.SuspendLayout(); + panel3.SuspendLayout(); + panel2.SuspendLayout(); + panel1.SuspendLayout(); + SuspendLayout(); + // + // MagiclistBox + // + MagiclistBox.Dock = DockStyle.Left; + MagiclistBox.FormattingEnabled = true; + MagiclistBox.ItemHeight = 15; + MagiclistBox.Location = new Point(0, 0); + MagiclistBox.Name = "MagiclistBox"; + MagiclistBox.Size = new Size(225, 542); + MagiclistBox.TabIndex = 0; + MagiclistBox.SelectedIndexChanged += MagiclistBox_SelectedIndexChanged; + // + // tabControl1 + // + tabControl1.Controls.Add(tabPage1); + tabControl1.Dock = DockStyle.Fill; + tabControl1.Location = new Point(225, 0); + tabControl1.Name = "tabControl1"; + tabControl1.SelectedIndex = 0; + tabControl1.Size = new Size(702, 542); + tabControl1.TabIndex = 1; + // + // tabPage1 + // + tabPage1.Controls.Add(label24); + tabPage1.Controls.Add(label23); + tabPage1.Controls.Add(textBoxName); + tabPage1.Controls.Add(lblDamageExample); + tabPage1.Controls.Add(lblDamageExplained); + tabPage1.Controls.Add(lblSelected); + tabPage1.Controls.Add(panel4); + tabPage1.Controls.Add(panel3); + tabPage1.Controls.Add(panel2); + tabPage1.Controls.Add(panel1); + tabPage1.Controls.Add(txtSkillIcon); + tabPage1.Controls.Add(label1); + tabPage1.Controls.Add(lblBookValid); + tabPage1.Location = new Point(4, 24); + tabPage1.Name = "tabPage1"; + tabPage1.Padding = new Padding(3); + tabPage1.Size = new Size(694, 514); + tabPage1.TabIndex = 0; + tabPage1.Text = "Basics"; + tabPage1.UseVisualStyleBackColor = true; + // + // label24 + // + label24.AutoSize = true; + label24.Location = new Point(20, 23); + label24.Name = "label24"; + label24.Size = new Size(63, 15); + label24.TabIndex = 12; + label24.Text = "SkillName:"; + // + // label23 + // + label23.AutoSize = true; + label23.Location = new Point(181, 3); + label23.Name = "label23"; + label23.Size = new Size(37, 15); + label23.TabIndex = 11; + label23.Text = "book:"; + // + // textBoxName + // + textBoxName.Location = new Point(89, 18); + textBoxName.Name = "textBoxName"; + textBoxName.Size = new Size(112, 23); + textBoxName.TabIndex = 10; + textBoxName.TextChanged += textBoxName_TextChanged; + // + // lblDamageExample + // + lblDamageExample.AutoSize = true; + lblDamageExample.Location = new Point(11, 394); + lblDamageExample.Name = "lblDamageExample"; + lblDamageExample.Size = new Size(99, 15); + lblDamageExample.TabIndex = 0; + lblDamageExample.Text = "Damage example"; + // + // lblDamageExplained + // + lblDamageExplained.AutoSize = true; + lblDamageExplained.Location = new Point(11, 366); + lblDamageExplained.Name = "lblDamageExplained"; + lblDamageExplained.Size = new Size(54, 15); + lblDamageExplained.TabIndex = 9; + lblDamageExplained.Text = "Damage:"; + // + // lblSelected + // + lblSelected.AutoSize = true; + lblSelected.Location = new Point(20, 3); + lblSelected.Name = "lblSelected"; + lblSelected.Size = new Size(80, 15); + lblSelected.TabIndex = 8; + lblSelected.Text = "Selected skill: "; + // + // panel4 + // + panel4.BorderStyle = BorderStyle.FixedSingle; + panel4.Controls.Add(txtDmgMultBoost); + panel4.Controls.Add(txtDmgMultBase); + panel4.Controls.Add(label21); + panel4.Controls.Add(label22); + panel4.Controls.Add(txtDmgBonusMax); + panel4.Controls.Add(txtDmgBonusMin); + panel4.Controls.Add(label18); + panel4.Controls.Add(label19); + panel4.Controls.Add(txtDmgBaseMax); + panel4.Controls.Add(txtDmgBaseMin); + panel4.Controls.Add(label17); + panel4.Controls.Add(label16); + panel4.Controls.Add(label15); + panel4.Location = new Point(14, 166); + panel4.Name = "panel4"; + panel4.Size = new Size(233, 191); + panel4.TabIndex = 6; + // + // txtDmgMultBoost + // + txtDmgMultBoost.Location = new Point(168, 157); + txtDmgMultBoost.Name = "txtDmgMultBoost"; + txtDmgMultBoost.Size = new Size(46, 23); + txtDmgMultBoost.TabIndex = 14; + toolTip1.SetToolTip(txtDmgMultBoost, "extra multiplyer apply'd for every skill level"); + txtDmgMultBoost.TextChanged += txtDmgMultBoost_TextChanged; + // + // txtDmgMultBase + // + txtDmgMultBase.Location = new Point(168, 131); + txtDmgMultBase.Name = "txtDmgMultBase"; + txtDmgMultBase.Size = new Size(46, 23); + txtDmgMultBase.TabIndex = 13; + toolTip1.SetToolTip(txtDmgMultBase, "multiplier apply'd to total skill dmg"); + txtDmgMultBase.TextChanged += txtDmgMultBase_TextChanged; + // + // label21 + // + label21.AutoSize = true; + label21.Location = new Point(12, 160); + label21.Name = "label21"; + label21.Size = new Size(178, 15); + label21.TabIndex = 12; + label21.Text = "Damage multiplyer boost/skilllvl"; + // + // label22 + // + label22.AutoSize = true; + label22.Location = new Point(12, 134); + label22.Name = "label22"; + label22.Size = new Size(135, 15); + label22.TabIndex = 11; + label22.Text = "Damage multiplyer base"; + // + // txtDmgBonusMax + // + txtDmgBonusMax.Location = new Point(168, 105); + txtDmgBonusMax.Name = "txtDmgBonusMax"; + txtDmgBonusMax.Size = new Size(46, 23); + txtDmgBonusMax.TabIndex = 10; + toolTip1.SetToolTip(txtDmgBonusMax, "Damage bonus at skill level '4' "); + txtDmgBonusMax.TextChanged += txtDmgBonusMax_TextChanged; + // + // txtDmgBonusMin + // + txtDmgBonusMin.Location = new Point(168, 79); + txtDmgBonusMin.Name = "txtDmgBonusMin"; + txtDmgBonusMin.Size = new Size(46, 23); + txtDmgBonusMin.TabIndex = 9; + toolTip1.SetToolTip(txtDmgBonusMin, "Damage bonus at skill level '4' \r\nyou will get 1/4th of this bonus for every skill level\r\nnote ingame level 0 = 1 bonus, so level 3 = max bonus (4)"); + txtDmgBonusMin.TextChanged += txtDmgBonusMin_TextChanged; + // + // label18 + // + label18.AutoSize = true; + label18.Location = new Point(12, 108); + label18.Name = "label18"; + label18.Size = new Size(155, 15); + label18.TabIndex = 8; + label18.Text = "Maximum skill lvl 3 damage"; + // + // label19 + // + label19.AutoSize = true; + label19.Location = new Point(12, 82); + label19.Name = "label19"; + label19.Size = new Size(156, 15); + label19.TabIndex = 7; + label19.Text = "Minimum skill lvl 3 damage:"; + // + // txtDmgBaseMax + // + txtDmgBaseMax.Location = new Point(168, 53); + txtDmgBaseMax.Name = "txtDmgBaseMax"; + txtDmgBaseMax.Size = new Size(46, 23); + txtDmgBaseMax.TabIndex = 6; + toolTip1.SetToolTip(txtDmgBaseMax, "Damage at skill level 0"); + txtDmgBaseMax.TextChanged += txtDmgBaseMax_TextChanged; + // + // txtDmgBaseMin + // + txtDmgBaseMin.Location = new Point(168, 27); + txtDmgBaseMin.Name = "txtDmgBaseMin"; + txtDmgBaseMin.Size = new Size(46, 23); + txtDmgBaseMin.TabIndex = 5; + toolTip1.SetToolTip(txtDmgBaseMin, "Damage at skill level 0"); + txtDmgBaseMin.TextChanged += txtDmgBaseMin_TextChanged; + // + // label17 + // + label17.AutoSize = true; + label17.Location = new Point(12, 56); + label17.Name = "label17"; + label17.Size = new Size(135, 15); + label17.TabIndex = 2; + label17.Text = "Maximum base damage"; + // + // label16 + // + label16.AutoSize = true; + label16.Location = new Point(12, 30); + label16.Name = "label16"; + label16.Size = new Size(136, 15); + label16.TabIndex = 1; + label16.Text = "Minimum base damage:"; + // + // label15 + // + label15.AutoSize = true; + label15.Location = new Point(5, 8); + label15.Name = "label15"; + label15.Size = new Size(95, 15); + label15.TabIndex = 0; + label15.Text = "Damage settings"; + // + // panel3 + // + panel3.BorderStyle = BorderStyle.FixedSingle; + panel3.Controls.Add(label20); + panel3.Controls.Add(txtRange); + panel3.Controls.Add(txtDelayReduction); + panel3.Controls.Add(txtDelayBase); + panel3.Controls.Add(label14); + panel3.Controls.Add(label13); + panel3.Controls.Add(label12); + panel3.Location = new Point(253, 166); + panel3.Name = "panel3"; + panel3.Size = new Size(216, 191); + panel3.TabIndex = 5; + toolTip1.SetToolTip(panel3, "delay = - (skill level * )"); + // + // label20 + // + label20.AutoSize = true; + label20.Location = new Point(12, 77); + label20.Name = "label20"; + label20.Size = new Size(103, 15); + label20.TabIndex = 15; + label20.Text = "Range (0 No limit)"; + // + // txtRange + // + txtRange.Location = new Point(121, 74); + txtRange.Name = "txtRange"; + txtRange.Size = new Size(79, 23); + txtRange.TabIndex = 14; + txtRange.TextChanged += txtRange_TextChanged; + // + // txtDelayReduction + // + txtDelayReduction.Location = new Point(121, 47); + txtDelayReduction.Name = "txtDelayReduction"; + txtDelayReduction.Size = new Size(79, 23); + txtDelayReduction.TabIndex = 13; + toolTip1.SetToolTip(txtDelayReduction, "delay = - (skill level * )"); + txtDelayReduction.TextChanged += txtDelayReduction_TextChanged; + // + // txtDelayBase + // + txtDelayBase.Location = new Point(121, 22); + txtDelayBase.Name = "txtDelayBase"; + txtDelayBase.Size = new Size(79, 23); + txtDelayBase.TabIndex = 12; + toolTip1.SetToolTip(txtDelayBase, "delay = - (skill level * )"); + txtDelayBase.TextChanged += txtDelayBase_TextChanged; + // + // label14 + // + label14.AutoSize = true; + label14.Location = new Point(12, 50); + label14.Name = "label14"; + label14.Size = new Size(112, 15); + label14.TabIndex = 2; + label14.Text = "Decrease / skill level"; + // + // label13 + // + label13.AutoSize = true; + label13.Location = new Point(12, 25); + label13.Name = "label13"; + label13.Size = new Size(62, 15); + label13.TabIndex = 1; + label13.Text = "Base delay"; + // + // label12 + // + label12.AutoSize = true; + label12.Location = new Point(12, 8); + label12.Name = "label12"; + label12.Size = new Size(129, 15); + label12.TabIndex = 0; + label12.Text = "Delay (in milliseconds!)"; + // + // panel2 + // + panel2.BorderStyle = BorderStyle.FixedSingle; + panel2.Controls.Add(txtMPIncrease); + panel2.Controls.Add(txtMPBase); + panel2.Controls.Add(label11); + panel2.Controls.Add(label10); + panel2.Controls.Add(label9); + panel2.Location = new Point(253, 53); + panel2.Name = "panel2"; + panel2.Size = new Size(216, 107); + panel2.TabIndex = 4; + // + // txtMPIncrease + // + txtMPIncrease.Location = new Point(135, 47); + txtMPIncrease.Name = "txtMPIncrease"; + txtMPIncrease.Size = new Size(46, 23); + txtMPIncrease.TabIndex = 12; + toolTip1.SetToolTip(txtMPIncrease, "extra amount of mp used each level"); + txtMPIncrease.TextChanged += txtMPIncrease_TextChanged; + // + // txtMPBase + // + txtMPBase.Location = new Point(135, 22); + txtMPBase.Name = "txtMPBase"; + txtMPBase.Size = new Size(46, 23); + txtMPBase.TabIndex = 11; + toolTip1.SetToolTip(txtMPBase, "Mp usage when skill is level 0"); + txtMPBase.TextChanged += txtMPBase_TextChanged; + // + // label11 + // + label11.AutoSize = true; + label11.Location = new Point(12, 50); + label11.Name = "label11"; + label11.Size = new Size(126, 15); + label11.TabIndex = 2; + label11.Text = "MP increase each level"; + // + // label10 + // + label10.AutoSize = true; + label10.Location = new Point(12, 25); + label10.Name = "label10"; + label10.Size = new Size(86, 15); + label10.TabIndex = 1; + label10.Text = "Base mp usage"; + // + // label9 + // + label9.AutoSize = true; + label9.Location = new Point(12, 6); + label9.Name = "label9"; + label9.Size = new Size(59, 15); + label9.TabIndex = 0; + label9.Text = "MP usage"; + // + // panel1 + // + panel1.BorderStyle = BorderStyle.FixedSingle; + panel1.Controls.Add(txtSkillLvl3Points); + panel1.Controls.Add(txtSkillLvl2Points); + panel1.Controls.Add(txtSkillLvl1Points); + panel1.Controls.Add(label6); + panel1.Controls.Add(label7); + panel1.Controls.Add(label8); + panel1.Controls.Add(txtSkillLvl3Req); + panel1.Controls.Add(txtSkillLvl2Req); + panel1.Controls.Add(txtSkillLvl1Req); + panel1.Controls.Add(label5); + panel1.Controls.Add(label4); + panel1.Controls.Add(label3); + panel1.Controls.Add(label2); + panel1.Location = new Point(13, 53); + panel1.Name = "panel1"; + panel1.Size = new Size(234, 107); + panel1.TabIndex = 3; + // + // txtSkillLvl3Points + // + txtSkillLvl3Points.Location = new Point(169, 72); + txtSkillLvl3Points.Name = "txtSkillLvl3Points"; + txtSkillLvl3Points.Size = new Size(46, 23); + txtSkillLvl3Points.TabIndex = 12; + txtSkillLvl3Points.TextChanged += txtSkillLvl3Points_TextChanged; + // + // txtSkillLvl2Points + // + txtSkillLvl2Points.Location = new Point(169, 47); + txtSkillLvl2Points.Name = "txtSkillLvl2Points"; + txtSkillLvl2Points.Size = new Size(46, 23); + txtSkillLvl2Points.TabIndex = 11; + txtSkillLvl2Points.TextChanged += txtSkillLvl2Points_TextChanged; + // + // txtSkillLvl1Points + // + txtSkillLvl1Points.Location = new Point(169, 22); + txtSkillLvl1Points.Name = "txtSkillLvl1Points"; + txtSkillLvl1Points.Size = new Size(46, 23); + txtSkillLvl1Points.TabIndex = 10; + txtSkillLvl1Points.TextChanged += txtSkillLvl1Points_TextChanged; + // + // label6 + // + label6.AutoSize = true; + label6.Location = new Point(110, 75); + label6.Name = "label6"; + label6.Size = new Size(64, 15); + label6.TabIndex = 9; + label6.Text = "Skill points"; + // + // label7 + // + label7.AutoSize = true; + label7.Location = new Point(110, 50); + label7.Name = "label7"; + label7.Size = new Size(64, 15); + label7.TabIndex = 8; + label7.Text = "Skill points"; + // + // label8 + // + label8.AutoSize = true; + label8.Location = new Point(110, 25); + label8.Name = "label8"; + label8.Size = new Size(64, 15); + label8.TabIndex = 7; + label8.Text = "Skill points"; + // + // txtSkillLvl3Req + // + txtSkillLvl3Req.Location = new Point(57, 72); + txtSkillLvl3Req.Name = "txtSkillLvl3Req"; + txtSkillLvl3Req.Size = new Size(46, 23); + txtSkillLvl3Req.TabIndex = 6; + txtSkillLvl3Req.TextChanged += txtSkillLvl3Req_TextChanged; + // + // txtSkillLvl2Req + // + txtSkillLvl2Req.Location = new Point(57, 47); + txtSkillLvl2Req.Name = "txtSkillLvl2Req"; + txtSkillLvl2Req.Size = new Size(46, 23); + txtSkillLvl2Req.TabIndex = 5; + txtSkillLvl2Req.TextChanged += txtSkillLvl2Req_TextChanged; + // + // txtSkillLvl1Req + // + txtSkillLvl1Req.Location = new Point(57, 22); + txtSkillLvl1Req.Name = "txtSkillLvl1Req"; + txtSkillLvl1Req.Size = new Size(46, 23); + txtSkillLvl1Req.TabIndex = 4; + txtSkillLvl1Req.TextChanged += txtSkillLvl1Req_TextChanged; + // + // label5 + // + label5.AutoSize = true; + label5.Location = new Point(13, 75); + label5.Name = "label5"; + label5.Size = new Size(40, 15); + label5.TabIndex = 3; + label5.Text = "level 3"; + // + // label4 + // + label4.AutoSize = true; + label4.Location = new Point(13, 50); + label4.Name = "label4"; + label4.Size = new Size(40, 15); + label4.TabIndex = 2; + label4.Text = "level 2"; + // + // label3 + // + label3.AutoSize = true; + label3.Location = new Point(13, 25); + label3.Name = "label3"; + label3.Size = new Size(40, 15); + label3.TabIndex = 1; + label3.Text = "level 1"; + // + // label2 + // + label2.AutoSize = true; + label2.Location = new Point(6, 6); + label2.Name = "label2"; + label2.Size = new Size(174, 15); + label2.TabIndex = 0; + label2.Text = "Skill level increase requirements"; + // + // txtSkillIcon + // + txtSkillIcon.Location = new Point(311, 20); + txtSkillIcon.Name = "txtSkillIcon"; + txtSkillIcon.Size = new Size(41, 23); + txtSkillIcon.TabIndex = 2; + txtSkillIcon.TextChanged += txtSkillIcon_TextChanged; + // + // label1 + // + label1.AutoSize = true; + label1.Location = new Point(250, 23); + label1.Name = "label1"; + label1.Size = new Size(60, 15); + label1.TabIndex = 1; + label1.Text = "Skill icon: "; + // + // lblBookValid + // + lblBookValid.AutoSize = true; + lblBookValid.Location = new Point(222, 3); + lblBookValid.Name = "lblBookValid"; + lblBookValid.Size = new Size(112, 15); + lblBookValid.TabIndex = 0; + lblBookValid.Text = "Searching for books"; + // + // MagicInfoForm + // + ClientSize = new Size(927, 542); + Controls.Add(tabControl1); + Controls.Add(MagiclistBox); + Icon = (Icon)resources.GetObject("$this.Icon"); + Name = "MagicInfoForm"; + Text = "Magic Settings"; + FormClosed += MagicInfoForm_FormClosed; + tabControl1.ResumeLayout(false); + tabPage1.ResumeLayout(false); + tabPage1.PerformLayout(); + panel4.ResumeLayout(false); + panel4.PerformLayout(); + panel3.ResumeLayout(false); + panel3.PerformLayout(); + panel2.ResumeLayout(false); + panel2.PerformLayout(); + panel1.ResumeLayout(false); + panel1.PerformLayout(); + ResumeLayout(false); + } + + private void MagicInfoForm_FormClosed(object sender, FormClosedEventArgs e) + { + //do something to save it all + Envir.SaveDB(); + } + + private void MagiclistBox_SelectedIndexChanged(object sender, EventArgs e) + { + UpdateMagicForm(); + } + + private bool IsValid(ref byte input) + { + if (!byte.TryParse(ActiveControl.Text, out input)) + { + ActiveControl.BackColor = Color.Red; + return false; + } + return true; + } + private bool IsValid(ref ushort input) + { + if (!ushort.TryParse(ActiveControl.Text, out input)) + { + ActiveControl.BackColor = Color.Red; + return false; + } + return true; + } + + private bool IsValid(ref uint input) + { + if (!uint.TryParse(ActiveControl.Text, out input)) + { + ActiveControl.BackColor = Color.Red; + return false; + } + return true; + } + + private bool IsValid(ref float input) + { + if (!float.TryParse(ActiveControl.Text, out input)) + { + ActiveControl.BackColor = Color.Red; + return false; + } + return true; + } + + private void txtSkillIcon_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + byte temp = 0; + if (!IsValid(ref temp)) return; + + ActiveControl.BackColor = SystemColors.Window; + _selectedMagicInfo.Icon = temp; + } + + private void txtSkillLvl1Req_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + byte temp = 0; + if (!IsValid(ref temp)) return; + + ActiveControl.BackColor = SystemColors.Window; + _selectedMagicInfo.Level1 = temp; + } + + private void txtSkillLvl2Req_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + byte temp = 0; + if (!IsValid(ref temp)) return; + + ActiveControl.BackColor = SystemColors.Window; + _selectedMagicInfo.Level2 = temp; + } + + private void txtSkillLvl3Req_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + byte temp = 0; + if (!IsValid(ref temp)) return; + + ActiveControl.BackColor = SystemColors.Window; + _selectedMagicInfo.Level3 = temp; + } + + private void txtSkillLvl1Points_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + ushort temp = 0; + if (!IsValid(ref temp)) return; + + ActiveControl.BackColor = SystemColors.Window; + _selectedMagicInfo.Need1 = temp; + } + + private void txtSkillLvl2Points_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + ushort temp = 0; + if (!IsValid(ref temp)) return; + + ActiveControl.BackColor = SystemColors.Window; + _selectedMagicInfo.Need2 = temp; + } + + private void txtSkillLvl3Points_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + ushort temp = 0; + if (!IsValid(ref temp)) return; + + ActiveControl.BackColor = SystemColors.Window; + _selectedMagicInfo.Need3 = temp; + } + + private void txtMPBase_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + byte temp = 0; + if (!IsValid(ref temp)) return; + + ActiveControl.BackColor = SystemColors.Window; + _selectedMagicInfo.BaseCost = temp; + } + + private void txtMPIncrease_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + byte temp = 0; + if (!IsValid(ref temp)) return; + + ActiveControl.BackColor = SystemColors.Window; + _selectedMagicInfo.LevelCost = temp; + } + + private void txtDmgBaseMin_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + ushort temp = 0; + if (!IsValid(ref temp)) return; + + ActiveControl.BackColor = SystemColors.Window; + _selectedMagicInfo.PowerBase = temp; + UpdateMagicForm(); + } + + private void txtDmgBaseMax_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + ushort temp = 0; + if (!IsValid(ref temp)) return; + if (temp < _selectedMagicInfo.PowerBase) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + _selectedMagicInfo.PowerBonus = (ushort)(temp - _selectedMagicInfo.PowerBase); + UpdateMagicForm(); + } + + private void txtDmgBonusMin_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + ushort temp = 0; + if (!IsValid(ref temp)) return; + + ActiveControl.BackColor = SystemColors.Window; + _selectedMagicInfo.MPowerBase = temp; + UpdateMagicForm(); + } + + private void txtDmgBonusMax_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + ushort temp = 0; + if (!IsValid(ref temp)) return; + if (temp < _selectedMagicInfo.MPowerBase) + { + ActiveControl.BackColor = Color.Red; + return; + } + + ActiveControl.BackColor = SystemColors.Window; + _selectedMagicInfo.MPowerBonus = (ushort)(temp - _selectedMagicInfo.MPowerBase); + UpdateMagicForm(); + } + + private void txtDelayBase_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + uint temp = 0; + if (!IsValid(ref temp)) return; + + ActiveControl.BackColor = SystemColors.Window; + _selectedMagicInfo.DelayBase = temp; + } + + private void txtDelayReduction_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + uint temp = 0; + if (!IsValid(ref temp)) return; + + ActiveControl.BackColor = SystemColors.Window; + _selectedMagicInfo.DelayReduction = temp; + } + + private void txtRange_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + byte temp = 0; + if (!IsValid(ref temp)) return; + + ActiveControl.BackColor = SystemColors.Window; + _selectedMagicInfo.Range = temp; + } + + private void txtDmgMultBase_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + float temp = 0; + if (!IsValid(ref temp)) return; + + + ActiveControl.BackColor = SystemColors.Window; + _selectedMagicInfo.MultiplierBase = temp; + UpdateMagicForm(1); + } + + private void txtDmgMultBoost_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + float temp = 0; + if (!IsValid(ref temp)) return; + + ActiveControl.BackColor = SystemColors.Window; + _selectedMagicInfo.MultiplierBonus = temp; + UpdateMagicForm(2); + } + + private void textBoxName_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + _selectedMagicInfo.Name = ActiveControl.Text; + UpdateMagicForm(); + if (ActiveControl.Text == "") + { + ActiveControl.BackColor = Color.Red; + } + else { + ActiveControl.BackColor = SystemColors.Window; + } + } + } +} diff --git a/Server.MirForms/Database/MagicInfoForm.resx b/Server.MirForms/Database/MagicInfoForm.resx new file mode 100644 index 0000000..d2fb654 --- /dev/null +++ b/Server.MirForms/Database/MagicInfoForm.resx @@ -0,0 +1,1766 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + AAABAAgAICAQAAAABADoAgAAhgAAACAgAAAAABgAqAwAAG4DAAAgIAAAAAAIAKgIAAAWEAAAQEAAAAAA + GAAoMgAAvhgAAEBAEAAAAAQAaAoAAOZKAABAQAAAAAAIACgWAABOVQAAgIAAAAAAGAAoyAAAdmsAAICA + AAAAAAgAKEwAAJ4zAQAoAAAAIAAAAEAAAAABAAQAAAAAAAACAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAA + gAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////ABER + ERAAAAAAAAAAAAAAAAARERERAAAAAAAAAAAAAAAAERERERAAAAAAAAAAAAAAABERERERAAAAAQAAAAAA + AAARERAAAQAAAAEAAAAAAAAAEREREQAAAAABAAAAAAAAABERERERAAAAABAAAAAAAAAREREREQAAAAAQ + AAAQAAAAEREREREAAAAAAAABEAAAAAERERERAAAAAAAxERAAAAAQERERERAAAAABEQAAAAAAAAAREREQ + AAAAAQARERARAAAAEREREAAAAAEBEAERERAAAAAAAAAAAAAQEQARMzERAAAAEREAAAABEBADMzMzEQAA + AAEQAAAAAAEAADMxMxEAAAAAAAAAAAEQEQAzMxEQAAABAAEAAAEREAAAMBMQEAAAAAARAAABEREQADEQ + EQAAAAABEBEBEREQATAREREAAAAQAQAQARERAQABEQERAAAAAAAAEBETEQMRERAREQAAAAAAARARExEQ + AREAAREQAAAAAAEBERMxMQEBAAABEQABAAAAAQERERMREQAAAAEAABAAABABERExERAAAAAAAAAAAAAA + EREREREAAAAAAAAAABAQEQAAAREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABAAAAAAAAAAAA + AAAAEAARAAAAAAAAAAAAAAAAAAABEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABABgAAAAAAAAM + AAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA + AACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAAAA + AAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA + AACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACA + AACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAACAAACAAACAAACAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAA + AACAAACAAACAAACAAACAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAAAAAAAAAACAAACAAACAAACAAACA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACAAAAAAACAAACAAAAAAAAAAACAAACAAICAAICAAICAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAA + AACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAACAAAAAAAAAAICAAICAAICA + AICAAICAAICAAICAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAICAAICAAICAAACAAICAAICAAACAAACAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAACAAACA + AAAAAAAAAICAAICAAICAAICAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAACA + AAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAICAAAAAAACAAICAAACAAAAA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAACAAACAAACA + AACAAACAAACAAAAAAAAAAAAAAICAAACAAACAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAACAAACAAAAAAACAAACAAAAAAACAAACAAACAAACAAACAAACAAAAAAAAAAACAAICAAAAAAACAAACA + AACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAACA + AACAAACAAACAAACAAAAAAACAAAAAAAAAAAAAAACAAACAAACAAAAAAACAAACAAACAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAICAAACAAACAAAAAAICAAACAAACA + AACAAACAAACAAAAAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + AACAAAAAAACAAACAAACAAICAAACAAACAAACAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAACAAACAAACA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAACAAICAAICAAACA + AICAAACAAAAAAACAAAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAACAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAACAAACAAACAAICAAACAAACAAACAAACAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACA + AACAAACAAACAAACAAICAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAAAA + AACAAACAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAA + AACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAACAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE + AAAAAAAAAAAAAAABAAAAAQAAAAD/AAD/AAD/AAAAAP//AP//AAD/AP8AwMDAAP/48ADX6/oA1P9/AP8A + AADiK4oAKiqlAAAAAAAEBAQACAgIAAwMDAAREREAFhYWABwcHAAiIiIAKSkpADMzMwA5OTkAQkJCAE1N + TQBVVVUAYGBgAGZmZgBwcHAAgICAAIyMjACUlJQAmZmZAKSkpACsrKwAtra2AMDAwADMzMwA1NTUANra + 2gDg4OAA7OzsAPj4+AD7+/sA////ADMAAABmAAAAmQAAAMwAAAD/AAAAADMAADMzAABmMwAAmTMAAMwz + AAD/MwAAAGYAADNmAABmZgAAmWYAAMxmAAD/ZgAAAJkAADOZAABmmQAAmZkAAMyZAAD/mQAAAMwAADPM + AABmzAAAmcwAAMzMAAD/zAAAAP8AADP/AABm/wAAmf8AAMz/AAD//wAAAAAzADMAMwBmADMAmQAzAMwA + MwD/ADMAADMzAGYzMwCZMzMAzDMzAP8zMwAAZjMAM2YzAGZmMwCZZjMAzGYzAP9mMwAAmTMAM5kzAGaZ + MwCZmTMAzJkzAP+ZMwAAzDMAM8wzAGbMMwCZzDMAzMwzAP/MMwAA/zMAM/8zAGb/MwCZ/zMAzP8zAP// + MwAAAGYAMwBmAGYAZgCZAGYAzABmAP8AZgAAM2YAMzNmAGYzZgCZM2YAzDNmAP8zZgAAZmYAM2ZmAJlm + ZgDMZmYA/2ZmAACZZgAzmWYAZplmAJmZZgDMmWYA/5lmAADMZgAzzGYAZsxmAJnMZgDMzGYA/8xmAAD/ + ZgAz/2YAZv9mAJn/ZgDM/2YA//9mAAAAmQAzAJkAZgCZAJkAmQDMAJkA/wCZAAAzmQAzM5kAZjOZAJkz + mQDMM5kA/zOZAABmmQAzZpkAZmaZAJlmmQDMZpkA/2aZAACZmQAzmZkAZpmZAMyZmQD/mZkAAcyZADPM + mQBmzJkAmcyZAMzMmQD/zJkAAP+ZADP/mQBm/5kAmf+ZAMz/mQD//5kAAADMADMAzABmAMwAmQDMAMwA + zAD/AMwAADPMADMzzABmM8wAmTPMAMwzzAD/M8wAAGbMADNmzABmZswAmWbMAMxmzAD/ZswAAJnMADOZ + zABmmcwAmZnMAMyZzAD/mcwAAMzMADPMzABmzMwAmczMAP/MzAAA/8wAM//MAGb/zACZ/8wAzP/MAP// + zAAAAP8AMwD/AGYA/wCZAP8AzAD/AP8A/wAAM/8AMzP/AGYz/wCZM/8AzDP/AP8z/wAAZv8AM2b/AGZm + /wCZZv8AzGb/AP9m/wAAmf8AM5n/AGaZ/wCZmf8AzJn/AP+Z/wAAzP8AM8z/AGbM/wCZzP8AzMz/AP/M + /wAA//8AM///AGb//wCZ//8AzP//AJ+fn5+fn58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQn5+fn5+f + n58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBCfn5+fn5+fn58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEJ+f + n5+fn5+fn58QEBAQEBAQnxAQEBAQEBAQEBAQEBAQn5+fn58QEBAQnxAQEBAQEBCfEBAQEBAQEBAQEBAQ + EBCfn5+fn5+fnxAQEBAQEBAQEJ8QEBAQEBAQEBAQEBAQEJ+fn5+fn5+fn58QEBAQEBAQEJ8QEBAQEBAQ + EBAQEBAQn5+fn5+fn5+fnxAQEBAQEBAQnxAQEBAQnxAQEBAQEBCfn5+fn5+fn5+fEBAQEBAQEBAQEBAQ + EJ+fEBAQEBAQEBCfn5+fn5+fn58QEBAQEBAQEBAQrZ+fn58QEBAQEBAQnxCfn5+fn5+fn58QEBAQEBAQ + EJ+fnxAQEBAQEBAQEBAQEBAQn5+fn5+fnxAQEBAQEBAQnxAQn5+fn58Qn58QEBAQEBCfn5+fn5+fEBAQ + EBAQEBCfEJ+fEBCfn5+fn58QEBAQEBAQEBAQEBAQEBAQEBAQnxCfnxAQn5+tra2fn58QEBAQEBCfn5+f + EBAQEBAQEJ+fEJ8QEK2tra2tra2fnxAQEBAQEBCfnxAQEBAQEBAQEBCfEBAQEK2trZ+trZ+fEBAQEBAQ + EBAQEBAQEBAQEBCfnxCfnxAQra2trZ+fnxAQEBAQEJ8QEBCfEBAQEBCfn5+fEBAQEBCtEJ+tnxCfEBAQ + EBAQEBAQn58QEBAQEJ+fn5+fnxAQEK2fnxCfnxAQEBAQEBAQEJ+fEJ+fEJ+fn5+fnxAQn60Qn5+fn5+f + EBAQEBAQnxAQnxAQnxAQn5+fn58QnxAQEJ+fnxCfn58QEBAQEBAQEBAQEBCfEJ+fn62fnxCtn5+fn58Q + n5+fnxAQEBAQEBAQEBAQn58Qn5+frZ+fnxAQn5+fEBAQn5+fnxAQEBAQEBAQEBCfEJ+fn5+trZ+tnxCf + EJ8QEBAQEJ+fnxAQEJ8QEBAQEBAQnxCfn5+fn5+tn5+fnxAQEBAQEBCfEBAQEJ8QEBAQEJ8QEJ+fn5+f + rZ+fn58QEBAQEBAQEBAQEBAQEBAQEBAQEBCfn5+fn5+fn5+fEBAQEBAQEBAQEBAQEBAQEJ8QnxCfnxAQ + EBAQn5+fEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEJ8QEJ8QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBCfEBAQn58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEJ+fEJ8QEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAABAAAAAgAAAAAEAGAAAAAAAADAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAA + AAAAAIAAAIAAAAAAAAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAA + gIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAAIAA + AIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAgIAA + gIAAgIAAgIAAAIAAAIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAAAAAAAAAIAAAIAAgIAAgIAAAIAAAIAAAAAA + AAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAAAAAAAAAIAAAIAAgIAA + gIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAA + AIAAgIAAgIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAA + AAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAIAAAIAAgIAAgIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAgIAAgIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAgIAA + gIAAgIAAgIAAAIAAAIAAgIAAgIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAgIAAgIAAgIAAgIAAAIAAAIAAgIAAgIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAgIAA + gIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAAAA + AAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAABAAAAAgAAAAAEABAAAAAAAAAgAAAAA + AAAAAAAAEAAAABAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAwMDAAICAgAAAAP8AAP8AAAD/ + /wD/AAAA/wD/AP//AAD///8AEREREREREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARERERERERAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAABERERERERERAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAERERERER + EREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAREREREREREREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABER + EREREREREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEREREREREREREQAAAAAAAAARAAAAAAAAAAAAAAAA + AAARERERERERERERAAAAAAAAABEAAAAAAAAAAAAAAAAAABERERERAAAAABEAAAAAAAAAEQAAAAAAAAAA + AAAAAAAAEREREREAAAAAEQAAAAAAAAARAAAAAAAAAAAAAAAAAAAREREREREREQAAAAAAAAAAABEAAAAA + AAAAAAAAAAAAABERERERERERAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAEREREREREREREQAAAAAAAAAA + EQAAAAAAAAAAAAAAAAARERERERERERERAAAAAAAAAAARAAAAAAAAAAAAAAAAABEREREREREREREAAAAA + AAAAABEAAAAAABEAAAAAAAAAEREREREREREREQAAAAAAAAAAEQAAAAAAEQAAAAAAAAARERERERERERER + AAAAAAAAAAAAAAAAABERAAAAAAAAABEREREREREREREAAAAAAAAAAAAAAAAAEREAAAAAAAAAABERERER + EREREQAAAAAAAAAAAAAzEREREQAAAAAAAAAAERERERERERERAAAAAAAAAAAAADMRERERAAAAAAAAABEA + ERERERERERERAAAAAAAAAAAREREAAAAAAAAAAAAAEQAREREREREREREAAAAAAAAAABEREQAAAAAAAAAA + AAAAAAAAEREREREREQAAAAAAAAAAEQAAEREREREAEREAAAAAAAARERERERERAAAAAAAAAAARAAARERER + EQAREQAAAAAAABEREREREREAAAAAAAAAABEAEREAABEREREREQAAAAAAEREREREREQAAAAAAAAAAEQAR + EQAAERERERERAAAAAAAAAAAAAAAAAAAAAAAAABEAEREAABERMzMzERERAAAAAAAAAAAAAAAAAAAAAAAA + EQAREQAAEREzMzMREREAAAAAAAARERERAAAAAAAAABERABEAADMzMzMzMzMREQAAAAAAABEREREAAAAA + AAAAEREAEQAAMzMzMzMzMxERAAAAAAAAABERAAAAAAAAAAAAABEAAAAAMzMzETMzEREAAAAAAAAAEREA + AAAAAAAAAAAAEQAAAAAzMzMRMzMREQAAAAAAAAAAAAAAAAAAAAAAEREAEREAADMzMzMREREAAAAAAAAA + AAAAAAAAAAAAAAAREQAREQAAMzMzMxEREQAAAAAAABEAAAARAAAAAAARERERAAAAAAAzABEzEQARAAAA + AAAAEQAAABEAAAAAABEREREAAAAAADMAETMRABEAAAAAAAAAAAAREQAAAAAAERERERERAAAAMxERABER + AAAAAAAAAAAAABERAAAAAAAREREREREAAAAzEREAEREAAAAAAAAAAAAREQAREQAREREREREAABEzABER + EREREQAAAAAAAAAAABERABERABEREREREQAAETMAERERERERAAAAAAAAEQAAEQAAEQAAEREREREAEQAA + ABEREQAREREAAAAAAAARAAARAAARAAAREREREQARAAAAERERABEREQAAAAAAAAAAAAAAABEAERERMxER + ADMREREREQARERERAAAAAAAAAAAAAAAAEQAREREzEREAMxERERERABEREREAAAAAAAAAAAAAABERABER + ETMREREAABEREQAAABEREREAAAAAAAAAAAAAEREAERERMxEREQAAERERAAAAEREREQAAAAAAAAAAAAAR + ABEREREzMxEzEQARABEAAAAAABEREQAAAAAAAAAAABEAERERETMzETMRABEAEQAAAAAAERERAAAAEQAA + AAAAAAARABERERERETMRERERAAAAAAAAABEAAAARAAAAAAAAABEAERERERERMxEREREAAAAAAAAAEQAA + AAARAAAAAAARAAARERERETMRERERAAAAAAAAAAAAAAAAABEAAAAAABEAABERERERMxEREREAAAAAAAAA + AAAAAAAAAAAAAAAAAAARERERERERERERAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEREREREREREREAAAAA + AAAAAAAAAAAAAAAAEQARABERAAAAAAAREREAAAAAAAAAAAAAAAAAAAAAAAARABEAEREAAAAAABEREQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + EQAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAAAREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + EQAAABERAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAREQARAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAABERABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgA + AABAAAAAgAAAAAEACAAAAAAAABAAAAAAAAAAAAAAAAEAAAABAAAAAP8AAP8AAP8AAAAA//8A//8AAP8A + /wDAwMAA//jwANfr+gDU/38A/wAAAOIrigAqKqUAAAAAAAQEBAAICAgADAwMABEREQAWFhYAHBwcACIi + IgApKSkAMzMzADk5OQBCQkIATU1NAFVVVQBgYGAAZmZmAHBwcACAgIAAjIyMAJSUlACZmZkApKSkAKys + rAC2trYAwMDAAMzMzADU1NQA2traAODg4ADs7OwA+Pj4APv7+wD///8AMwAAAGYAAACZAAAAzAAAAP8A + AAAAMwAAMzMAAGYzAACZMwAAzDMAAP8zAAAAZgAAM2YAAGZmAACZZgAAzGYAAP9mAAAAmQAAM5kAAGaZ + AACZmQAAzJkAAP+ZAAAAzAAAM8wAAGbMAACZzAAAzMwAAP/MAAAA/wAAM/8AAGb/AACZ/wAAzP8AAP// + AAAAADMAMwAzAGYAMwCZADMAzAAzAP8AMwAAMzMAZjMzAJkzMwDMMzMA/zMzAABmMwAzZjMAZmYzAJlm + MwDMZjMA/2YzAACZMwAzmTMAZpkzAJmZMwDMmTMA/5kzAADMMwAzzDMAZswzAJnMMwDMzDMA/8wzAAD/ + MwAz/zMAZv8zAJn/MwDM/zMA//8zAAAAZgAzAGYAZgBmAJkAZgDMAGYA/wBmAAAzZgAzM2YAZjNmAJkz + ZgDMM2YA/zNmAABmZgAzZmYAmWZmAMxmZgD/ZmYAAJlmADOZZgBmmWYAmZlmAMyZZgD/mWYAAMxmADPM + ZgBmzGYAmcxmAMzMZgD/zGYAAP9mADP/ZgBm/2YAmf9mAMz/ZgD//2YAAACZADMAmQBmAJkAmQCZAMwA + mQD/AJkAADOZADMzmQBmM5kAmTOZAMwzmQD/M5kAAGaZADNmmQBmZpkAmWaZAMxmmQD/ZpkAAJmZADOZ + mQBmmZkAzJmZAP+ZmQABzJkAM8yZAGbMmQCZzJkAzMyZAP/MmQAA/5kAM/+ZAGb/mQCZ/5kAzP+ZAP// + mQAAAMwAMwDMAGYAzACZAMwAzADMAP8AzAAAM8wAMzPMAGYzzACZM8wAzDPMAP8zzAAAZswAM2bMAGZm + zACZZswAzGbMAP9mzAAAmcwAM5nMAGaZzACZmcwAzJnMAP+ZzAAAzMwAM8zMAGbMzACZzMwA/8zMAAD/ + zAAz/8wAZv/MAJn/zADM/8wA///MAAAA/wAzAP8AZgD/AJkA/wDMAP8A/wD/AAAz/wAzM/8AZjP/AJkz + /wDMM/8A/zP/AABm/wAzZv8AZmb/AJlm/wDMZv8A/2b/AACZ/wAzmf8AZpn/AJmZ/wDMmf8A/5n/AADM + /wAzzP8AZsz/AJnM/wDMzP8A/8z/AAD//wAz//8AZv//AJn//wDM//8An5+fn5+fn5+fn5+fn58dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+f + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+f + n5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+f + n5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+f + n5+fn5+fn5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fn5+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn5+fn5+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHZ+fHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fHR0dHR0dHR2fnx0dHR0dHR0dHR0dHR0dn58dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fnx0dHR0dHR0dn58dHR0dHR0dHR0dHR0dHZ+fHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR2fnx0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0d + n58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0d + HR0dHR0dn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0d + HR0dHR0dHR0dHZ+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fn5+fn5+fnx0d + HR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dHR2fnx0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn5+fn5+f + n58dHR0dHR0dHR0dHR0dHR0dn58dHR0dHR0dHR0dn58dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+f + n5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+f + n5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fnx0dHR0dHR0dHR0dHR0dHR2fn5+f + n5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHa2tn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0d + n5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR2trZ+fn5+fn5+fHR0dHR0dHR0dHR0d + HR2fnx0dn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHZ+fn5+fnx0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHZ+fn5+fn5+fn5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR2fn5+fn58dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dn58dHR0dn5+fn5+f + n5+fnx0dn5+fnx0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHZ+fHR0dHZ+f + n5+fn5+fn58dHZ+fn58dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR2fnx0d + n5+fnx0dHR2fn5+fn5+fn5+fn58dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0d + n58dHZ+fn58dHR0dn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fnx0dn5+fnx0dHR2fn5+fra2tra2tn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHZ+fn58dHR0dn5+fn62tra2trZ+fn5+fnx0dHR0dHR0dHR0dHZ+fn5+fn5+fHR0dHR0d + HR0dHR0dHR2fn5+fHR2fnx0dHR2tra2tra2tra2tra2trZ+fn58dHR0dHR0dHR0dHR2fn5+fn5+fnx0d + HR0dHR0dHR0dHR0dn5+fnx0dn58dHR0dra2tra2tra2tra2tra2fn5+fHR0dHR0dHR0dHR0dHR2fn5+f + HR0dHR0dHR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dra2tra2tn5+tra2tn5+fnx0dHR0dHR0dHR0dHR0d + n5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dn58dHR0dHR0dHa2tra2trZ+fra2trZ+fn58dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fnx0dn5+fnx0dHR2tra2tra2trZ+fn5+fnx0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn58dHZ+fn58dHR0dra2tra2tra2fn5+fn58dHR0d + HR0dHR0dHR2fnx0dHR0dHZ+fHR0dHR0dHR0dHZ+fn5+fn5+fHR0dHR0dHR0dHa2tHR2fn62tn58dHZ+f + HR0dHR0dHR0dHR0dn58dHR0dHR2fnx0dHR0dHR0dHR2fn5+fn5+fnx0dHR0dHR0dHR2trR0dn5+trZ+f + HR2fnx0dHR0dHR0dHR0dHR0dHR0dHZ+fn58dHR0dHR0dHR0dn5+fn5+fn5+fn5+fHR0dHR0dra2fn5+f + HR2fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR0dHR0dHR0dHZ+fn5+fn5+fn5+fnx0dHR0dHa2t + n5+fnx0dn5+fnx0dHR0dHR0dHR0dHR0dHR0dHZ+fn58dHZ+fn58dHZ+fn5+fn5+fn5+fnx0dHR2fn62t + HR2fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR2fn5+fHR2fn5+fn5+fn5+fn58dHR0d + n5+trR0dn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dn58dHR0dn58dHR0dn58dHR0dn5+fn5+fn5+fnx0d + n58dHR0dHR2fn5+fn58dHZ+fn5+fnx0dHR0dHR0dHR0dHZ+fHR0dHZ+fHR0dHZ+fHR0dHZ+fn5+fn5+f + n58dHZ+fHR0dHR0dn5+fn5+fHR2fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fnx0dn5+fn5+f + ra2fn5+fHR2trZ+fn5+fn5+fn58dHZ+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn58dHZ+f + n5+fn62tn5+fnx0dra2fn5+fn5+fn5+fHR2fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+f + HR2fn5+fn5+trZ+fn5+fnx0dHR2fn5+fn58dHR0dHR2fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0d + n5+fnx0dn5+fn5+fra2fn5+fn58dHR0dn5+fn5+fHR0dHR0dn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0d + HR0dHZ+fHR2fn5+fn5+fn62tra2fn62tn58dHZ+fHR2fnx0dHR0dHR0dHR2fn5+fn58dHR0dHR0dHR0d + HR0dHR0dHR2fnx0dn5+fn5+fn5+tra2tn5+trZ+fHR2fnx0dn58dHR0dHR0dHR0dn5+fn5+fHR0dHR0d + n58dHR0dHR0dHR0dHR0dHZ+fHR2fn5+fn5+fn5+fn5+trZ+fn5+fn5+fHR0dHR0dHR0dHR0dHR2fnx0d + HR0dHZ+fHR0dHR0dHR0dHR0dHR2fnx0dn5+fn5+fn5+fn5+fra2fn5+fn5+fnx0dHR0dHR0dHR0dHR0d + n58dHR0dHR0dHZ+fHR0dHR0dHR0dHZ+fHR0dHZ+fn5+fn5+fn5+trZ+fn5+fn5+fHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dHR2fnx0dHR2fn5+fn5+fn5+fra2fn5+fn5+fnx0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fn5+fn5+fnx0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn58dHZ+fHR2fn5+fHR0dHR0dHR0dHZ+fn5+fnx0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fHR2fnx0dn5+fnx0dHR0dHR0dHR2fn5+f + n58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fnx0dHR2fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHR0dn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fnx0dHR0dHZ+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHR0dHR2fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHZ+fn58dHZ+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR2fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAIAAAAAAAQAAAQAYAAAAAAAAwAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAIAAAAAAAQAAAQAIAAAAAAAAQAAAAAAAAAAA + AAAAAQAAAAEAAAAA/wAA/wAA/wAAAAD//wD//wAA/wD/AMDAwAD/+PAA1+v6ANT/fwD/AAAA4iuKACoq + pQAAAAAABAQEAAgICAAMDAwAERERABYWFgAcHBwAIiIiACkpKQAzMzMAOTk5AEJCQgBNTU0AVVVVAGBg + YABmZmYAcHBwAICAgACMjIwAlJSUAJmZmQCkpKQArKysALa2tgDAwMAAzMzMANTU1ADa2toA4ODgAOzs + 7AD4+PgA+/v7AP///wAzAAAAZgAAAJkAAADMAAAA/wAAAAAzAAAzMwAAZjMAAJkzAADMMwAA/zMAAABm + AAAzZgAAZmYAAJlmAADMZgAA/2YAAACZAAAzmQAAZpkAAJmZAADMmQAA/5kAAADMAAAzzAAAZswAAJnM + AADMzAAA/8wAAAD/AAAz/wAAZv8AAJn/AADM/wAA//8AAAAAMwAzADMAZgAzAJkAMwDMADMA/wAzAAAz + MwBmMzMAmTMzAMwzMwD/MzMAAGYzADNmMwBmZjMAmWYzAMxmMwD/ZjMAAJkzADOZMwBmmTMAmZkzAMyZ + MwD/mTMAAMwzADPMMwBmzDMAmcwzAMzMMwD/zDMAAP8zADP/MwBm/zMAmf8zAMz/MwD//zMAAABmADMA + ZgBmAGYAmQBmAMwAZgD/AGYAADNmADMzZgBmM2YAmTNmAMwzZgD/M2YAAGZmADNmZgCZZmYAzGZmAP9m + ZgAAmWYAM5lmAGaZZgCZmWYAzJlmAP+ZZgAAzGYAM8xmAGbMZgCZzGYAzMxmAP/MZgAA/2YAM/9mAGb/ + ZgCZ/2YAzP9mAP//ZgAAAJkAMwCZAGYAmQCZAJkAzACZAP8AmQAAM5kAMzOZAGYzmQCZM5kAzDOZAP8z + mQAAZpkAM2aZAGZmmQCZZpkAzGaZAP9mmQAAmZkAM5mZAGaZmQDMmZkA/5mZAAHMmQAzzJkAZsyZAJnM + mQDMzJkA/8yZAAD/mQAz/5kAZv+ZAJn/mQDM/5kA//+ZAAAAzAAzAMwAZgDMAJkAzADMAMwA/wDMAAAz + zAAzM8wAZjPMAJkzzADMM8wA/zPMAABmzAAzZswAZmbMAJlmzADMZswA/2bMAACZzAAzmcwAZpnMAJmZ + zADMmcwA/5nMAADMzAAzzMwAZszMAJnMzAD/zMwAAP/MADP/zABm/8wAmf/MAMz/zAD//8wAAAD/ADMA + /wBmAP8AmQD/AMwA/wD/AP8AADP/ADMz/wBmM/8AmTP/AMwz/wD/M/8AAGb/ADNm/wBmZv8AmWb/AMxm + /wD/Zv8AAJn/ADOZ/wBmmf8AmZn/AMyZ/wD/mf8AAMz/ADPM/wBmzP8Amcz/AMzM/wD/zP8AAP//ADP/ + /wBm//8Amf//AMz//wCfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pra2trZ+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+tra2tn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD62tra2fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+f + n5+tra2tra2tra2tra2fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8P + Dw+fn5+fn5+fn62tra2tra2tra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+f + n58PDw8PDw8PD5+fn5+fn5+fra2tra2tra2tra2tn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8P + Dw+fn5+fDw8PDw8PDw+tra2tra2tra2tra2tra2tra2tra2tra2tra2tn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PD5+fn58PDw8PDw8PD62tra2tra2tra2tra2tra2tra2tra2tra2tra2fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8Pn5+fnw8PDw8PDw8Pra2tra2tra2tra2tra2tra2tra2tra2tra2trZ+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw+fn5+fDw8PDw8PDw+tra2tra2tra2tra2tra2tra2tra2t + ra2tra2tn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+fn58PDw8PDw8PD62tra2tra2tra2tra2t + ra2tra2tra2tra2tra2fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PD62t + ra2tra2tra2trZ+fn5+tra2tra2trZ+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8Pra2tra2tra2tra2tn5+fn62tra2tra2tn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PDw8PDw+tra2tra2tra2tra2fn5+fra2tra2tra2fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n58PDw8Pn5+fn5+fn58PDw8PDw8PD62tra2tra2tra2tra2tra2fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pra2tra2tra2tra2tra2trZ+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw+tra2tra2tra2tra2tra2tn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PD62tra2tra2tra2tra2t + ra2fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pra2tra2t + ra2tra2tra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw+tra2tDw8PD5+fn5+tra2tn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PD62tra0PDw8Pn5+fn62tra2fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pra2trQ8PDw+fn5+fra2trZ+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw+tra2tn5+fn5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PD62tra2fn5+fn5+fnw8PDw+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8Pra2trZ+fn5+fn5+fDw8PD5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw+tra2tn5+fn5+f + n58PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PD62t + ra2fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PD5+fn5+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8Pn5+fn62t + ra0PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw+fn5+fra2trQ8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PD5+fn5+tra2tDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PD5+fn58PDw8PDw8PD5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fDw8PD5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+fn58PDw8PDw8PD5+f + n58PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n58PDw8Pn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fnw8P + Dw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fnw8PDw+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fn5+fn62tra2fn5+fn5+fnw8PDw+tra2tn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fDw8PD62t + ra2fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+tra2tn5+fn5+f + n58PDw8Pra2trZ+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+fn5+fn5+fn5+fn62t + ra2fn5+fn5+fn5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+f + n5+fn5+fra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8P + Dw+fn5+fn5+fn5+fn5+tra2tn5+fn5+fn5+fn5+fDw8PDw8PDw+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PD5+fn5+fn5+fn5+fn62tra2fn5+fn5+fn5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn5+tra2tra2trZ+fn5+tra2tn5+fnw8P + Dw+fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn62tra2tra2tn5+fn62t + ra2fn5+fDw8PD5+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fra2tra2t + ra2fn5+fra2trZ+fn58PDw8Pn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+tra2tn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn62tra2fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+tra2tn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fra2trZ+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+tra2tn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn62tra2fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8Pn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n58PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + + + \ No newline at end of file diff --git a/Server.MirForms/Database/MapForm.cs b/Server.MirForms/Database/MapForm.cs new file mode 100644 index 0000000..d0c54e9 --- /dev/null +++ b/Server.MirForms/Database/MapForm.cs @@ -0,0 +1,425 @@ +using Server.MirDatabase; +using Server.MirEnvir; + +namespace Server.MirForms +{ + public static class ConvertMapInfo + { + public static Envir EditEnvir = null; + + public static string Path = string.Empty; + + private static List errors = new List(); + + public static void Start(Envir envirToUpdate) + { + if (Path == string.Empty) return; + EditEnvir = envirToUpdate; + + if (EditEnvir == null) return; + + var lines = File.ReadAllLines(Path); + for (int i = 0; i < lines.Length; i++) + { + if (lines[i].StartsWith("[")) // Read map info + { + lines[i] = System.Text.RegularExpressions.Regex.Replace(lines[i], @"\s+", " "); // Clear white-space + lines[i] = lines[i].Replace(" ;", ";"); // Remove space before semi-colon + + // Trim comment at the end of the line + if (lines[i].Contains(';')) + lines[i] = lines[i].Substring(0, lines[i].IndexOf(";", System.StringComparison.Ordinal)); + + MirDatabase.MapInfo newMapInfo = new MirDatabase.MapInfo { Index = ++EditEnvir.MapIndex }; + + var a = lines[i].Split(']'); // Split map info into [0] = MapFile MapName 0 || [1] = Attributes + string[] b = a[0].Split(' '); + + newMapInfo.FileName = b[0].TrimStart('['); // Assign MapFile from variable and trim leading '[' char + newMapInfo.Title = b[1]; // Assign MapName from variable + + List mapAttributes = new List(); // Group of all attributes associated with that map + mapAttributes.AddRange(a[1].Split(' ')); + + newMapInfo.NoTeleport = mapAttributes.Any(s => s.Contains("NOTELEPORT".ToUpper())); + newMapInfo.NoRandom = mapAttributes.Any(s => s.Contains("NORANDOMMOVE".ToUpper())); + newMapInfo.NoEscape = mapAttributes.Any(s => s.Contains("NOESCAPE".ToUpper())); + newMapInfo.NoRecall = mapAttributes.Any(s => s.Contains("NORECALL".ToUpper())); + newMapInfo.NoDrug = mapAttributes.Any(s => s.Contains("NODRUG".ToUpper())); + newMapInfo.NoPosition = mapAttributes.Any(s => s.Contains("NOPOSITIONMOVE".ToUpper())); + newMapInfo.NoThrowItem = mapAttributes.Any(s => s.Contains("NOTHROWITEM".ToUpper())); + newMapInfo.NoDropPlayer = mapAttributes.Any(s => s.Contains("NOPLAYERDROP".ToUpper())); + newMapInfo.NoDropMonster = mapAttributes.Any(s => s.Contains("NOMONSTERDROP".ToUpper())); + newMapInfo.NoNames = mapAttributes.Any(s => s.Contains("NONAMES".ToUpper())); + newMapInfo.NoFight = mapAttributes.Any(s => s.Contains("NOFIGHT".ToUpper())); + newMapInfo.Fight = mapAttributes.Any(s => s.Contains("FIGHT".ToUpper())); + newMapInfo.NoTownTeleport = mapAttributes.Any(s => s.Contains("NOTOWNTELEPORT".ToUpper())); + + newMapInfo.Fire = mapAttributes.Any(x => x.StartsWith("FIRE(".ToUpper())); + if (newMapInfo.Fire) + { + int index = mapAttributes.FindIndex(x => x.StartsWith("FIRE(".ToUpper())); + newMapInfo.FireDamage = Convert.ToInt16(mapAttributes[index].TrimStart("FIRE(".ToCharArray()).TrimEnd(')')); + } + newMapInfo.Lightning = mapAttributes.Any(x => x.StartsWith("LIGHTNING(".ToUpper())); + if (newMapInfo.Lightning) + { + int index = mapAttributes.FindIndex(x => x.StartsWith("LIGHTNING(".ToUpper())); + newMapInfo.LightningDamage = Convert.ToInt16(mapAttributes[index].TrimStart("LIGHTNING(".ToCharArray()).TrimEnd(')')); + } + newMapInfo.NoReconnect = mapAttributes.Any(x => x.StartsWith("NORECONNECT(".ToUpper())); + if (newMapInfo.NoReconnect) + { + int index = mapAttributes.FindIndex(x => x.StartsWith("NORECONNECT(".ToUpper())); + newMapInfo.NoReconnectMap = newMapInfo.NoReconnectMap == string.Empty ? "0" : mapAttributes[index].TrimStart("NORECONNECT(".ToCharArray()).TrimEnd(')'); + } + + if (mapAttributes.Any(x => x.StartsWith("MINIMAP(".ToUpper()))) + { + int index = mapAttributes.FindIndex(x => x.StartsWith("MINIMAP(".ToUpper())); + newMapInfo.MiniMap = Convert.ToUInt16(mapAttributes[index].TrimStart("MINIMAP(".ToCharArray()).TrimEnd(')')); + } + if (mapAttributes.Any(x => x.StartsWith("BIGMAP(".ToUpper()))) + { + int index = mapAttributes.FindIndex(x => x.StartsWith("BIGMAP(".ToUpper())); + newMapInfo.BigMap = Convert.ToUInt16(mapAttributes[index].TrimStart("BIGMAP(".ToCharArray()).TrimEnd(')')); + } + if (mapAttributes.Any(s => s.Contains("MAPLIGHT(".ToUpper()))) + { + int index = mapAttributes.FindIndex(x => x.StartsWith("MAPLIGHT(".ToUpper())); + newMapInfo.MapDarkLight = Convert.ToByte(mapAttributes[index].TrimStart("MAPLIGHT(".ToCharArray()).TrimEnd(')')); + } + if (mapAttributes.Any(s => s.Contains("MUSIC(".ToUpper()))) + { + int index = mapAttributes.FindIndex(x => x.StartsWith("MUSIC(".ToUpper())); + newMapInfo.Music = Convert.ToUInt16(mapAttributes[index].TrimStart("MUSIC(".ToCharArray()).TrimEnd(')')); + } + if (mapAttributes.Any(x => x.StartsWith("LIGHT(".ToUpper()))) // Check if there is a LIGHT attribute and get its value + { + int index = mapAttributes.FindIndex(x => x.StartsWith("LIGHT(".ToUpper())); + switch (mapAttributes[index].TrimStart("LIGHT(".ToCharArray()).TrimEnd(')')) + { + case "Dawn": + newMapInfo.Light = LightSetting.Dawn; + break; + case "Day": + newMapInfo.Light = LightSetting.Day; + break; + case "Evening": + newMapInfo.Light = LightSetting.Evening; + break; + case "Night": + newMapInfo.Light = LightSetting.Night; + break; + case "Normal": + newMapInfo.Light = LightSetting.Normal; + break; + default: + newMapInfo.Light = LightSetting.Normal; + break; + } + } + else newMapInfo.Light = LightSetting.Normal; + + // Check for light type + if (mapAttributes.Any(s => s.Contains("DAY".ToUpper()))) // DAY = Day + newMapInfo.Light = LightSetting.Day; + else if (mapAttributes.Any(s => s.Contains("DARK".ToUpper()))) // DARK = Night + newMapInfo.Light = LightSetting.Night; + + EditEnvir.MapInfoList.Add(newMapInfo); // Add map to list + } + else if (lines[i].StartsWith(";")) continue; + else + continue; + } + + for (int j = 0; j < EditEnvir.MapInfoList.Count; j++) + { + for (int k = 0; k < lines.Length; k++) + { + try + { + if (lines[k].StartsWith(EditEnvir.MapInfoList[j].FileName + " ")) + { + MirDatabase.MovementInfo newMovement = new MirDatabase.MovementInfo(); + + if (lines[k].Contains("NEEDMOVE")) + { + newMovement.NeedMove = true; + lines[k] = lines[k].Replace("NEEDMOVE", ""); + } + if (lines[k].Contains("SHOWONBIGMAP")) + { + newMovement.ShowOnBigMap = true; + lines[k] = lines[k].Replace("SHOWONBIGMAP", ""); + } + if (lines[k].Contains("BIGMAPICON")) + { + int iconLocation = lines[k].IndexOf(" BIGMAPICON"); + string icon = lines[k].Substring(iconLocation); + int iconIndex = int.Parse(icon.Replace("BIGMAPICON(", "").Replace(")", "")); //get value + newMovement.Icon = iconIndex; + lines[k] = lines[k].Remove(iconLocation); + } + + lines[k] = lines[k].Replace('.', ','); // Replace point with comma + lines[k] = lines[k].Replace(":", ","); // Replace colon with comma + lines[k] = lines[k].Replace(", ", ","); // Remove space after comma + lines[k] = lines[k].Replace(" ,", ","); // Remove space before comma + lines[k] = System.Text.RegularExpressions.Regex.Replace(lines[k], @"\s+", " "); // Clear whitespace + lines[k] = lines[k].Replace(" ;", ";"); // Remove space before semi-colon + + // Trim comment at the end of the line + if (lines[k].Contains(';')) + lines[k] = lines[k].Substring(0, lines[k].IndexOf(";", System.StringComparison.Ordinal)); + + var c = lines[k].Split(' '); + + // START - Get values from line + if (c.Length == 7) // Every value has a space + { + c[1] = c[1] + "," + c[2]; + c[2] = c[5] + "," + c[6]; + c[3] = c[4]; + } + else if (c.Length == 6) // One value has a space + { + if (c[2] == "->") // Space in to XY + { + c[2] = c[4] + "," + c[5]; + } + else if (c[3] == "->") // Space in from XY + { + c[1] = c[1] + "," + c[2]; + c[2] = c[5]; + c[3] = c[4]; + } + } + else if (c.Length == 5) // Proper format + { + c[2] = c[4]; + } + else // Unreadable value count + { + continue; + } + // END - Get values from line + + string[] d = c[1].Split(','); + string[] e = c[2].Split(','); + + + var toMapIndex = EditEnvir.MapInfoList.FindIndex(a => a.FileName == c[3]); //check existing maps for the connection info + var toMap = -1; + + if (toMapIndex >= 0) + { + toMap = EditEnvir.MapInfoList[toMapIndex].Index; //get real index + } + if (toMap < 0) + { + toMapIndex = EditEnvir.MapInfoList.FindIndex(a => a.FileName.ToString() == c[3]); + + if (toMapIndex >= 0) + { + toMap = EditEnvir.MapInfoList[toMapIndex].Index; + } + } + + if (toMap < 0) + { + errors.Add("Destination Map Failed on line: " + lines[k] + ""); + continue; + } + + newMovement.MapIndex = toMap; + newMovement.Source = new Point(int.Parse(d[0]), int.Parse(d[1])); + newMovement.Destination = new Point(int.Parse(e[0]), int.Parse(e[1])); + //NeedHole + //NeedMove + //ConquestIndex + EditEnvir.MapInfoList[j].Movements.Add(newMovement); + } + } + catch (Exception) + { + continue; + } + } + } + for (int j = 0; j < EditEnvir.MapInfoList.Count; j++) + { + for (int k = 0; k < lines.Length; k++) + { + //STARTZONE(0,150,150,50) || SAFEZONE(0,150,150,50) + if (!lines[k].StartsWith("SAFEZONE") && !lines[k].StartsWith("STARTZONE")) continue; + var line = lines[k].Replace(")", "").Split(','); // STARTZONE(0,150,150,50) -> STARTZONE(0 || 150 || 150 || 50 + var head = line[0].Split('('); // STARTZONE(0 -> STARTZONE || 0 + try + { + if (head[1] == EditEnvir.MapInfoList[j].FileName) + { + MirDatabase.SafeZoneInfo newSafeZone = new MirDatabase.SafeZoneInfo + { + Info = EditEnvir.MapInfoList[j], + StartPoint = head[0].Equals("STARTZONE"), + Location = new Point(Convert.ToInt16(line[2]), Convert.ToInt16(line[3])), + Size = Convert.ToUInt16(line[1]) + }; + if (!EditEnvir.MapInfoList[j].SafeZones.Exists(sz => sz.StartPoint == newSafeZone.StartPoint && sz.Location.X == newSafeZone.Location.X && sz.Location.Y == newSafeZone.Location.Y)) + EditEnvir.MapInfoList[j].SafeZones.Add(newSafeZone); + } + } + catch (Exception) { continue; } + } + } + } + public static void End() + { + SMain.Enqueue(String.Join("MapInfo Import Report:", errors.Count > 0 ? "" : "No Errors")); + foreach (String error in errors) + SMain.Enqueue(error); + } + } + + public static class ConvertNPCInfo + { + public static List NPCInfoList = new List(); + + public static void Start() + { + string Path = string.Empty; + + OpenFileDialog ofd = new OpenFileDialog(); + ofd.Filter = "Text File|*.txt"; + ofd.ShowDialog(); + + if (ofd.FileName == string.Empty) return; + + Path = ofd.FileName; + + var NPCList = File.ReadAllLines(Path); + + for (int i = 0; i < NPCList.Length; i++) + { + if (NPCList[i].Contains(';')) + NPCList[i] = NPCList[i].Substring(0, NPCList[i].IndexOf(";", System.StringComparison.Ordinal)); + + var Line = System.Text.RegularExpressions.Regex.Replace(NPCList[i], @"\s+", " ").Split(' '); + + if (Line.Length < 6) continue; + + try + { + NPCInfo NPC = new NPCInfo + { + FileName = Line[0], + Map = Line[1], + X = Convert.ToInt16(Line[2]), + Y = Convert.ToInt16(Line[3]), + Title = Line[4], + Image = (Line.Length >= 8) ? Convert.ToInt16(Line[6]) : Convert.ToInt16(Line[5]) + }; + + NPCInfoList.Add(NPC); + } + catch (Exception) + { + continue; + } + } + } + + public static void Stop() + { + NPCInfoList.Clear(); + } + } + + public class NPCInfo + { + public string + FileName = string.Empty, + Map = "0", + Title = string.Empty; + + public int + Index = 0, + X = 0, + Y = 0, + Image = 0, + Rate = 100; + } + + + public static class ConvertMonGenInfo + { + public static List monGenList = new List(); + + public static void Start() + { + OpenFileDialog ofd = new OpenFileDialog(); + ofd.Filter = "Text File|*.txt|Gen File|*.gen|All|*.*"; + ofd.Multiselect = true; + ofd.ShowDialog(); + + if (ofd.FileNames.Length == 0) return; + + for (int i = 0; i < ofd.FileNames.Length; i++) + { + var MonGen = File.ReadAllLines(ofd.FileNames[i]); + + for (int j = 0; j < MonGen.Length; j++) + { + if (MonGen[j].Contains(';')) + MonGen[j] = MonGen[j].Substring(0, MonGen[j].IndexOf(";", System.StringComparison.Ordinal)); + + var Line = System.Text.RegularExpressions.Regex.Replace(MonGen[j], @"\s+", " ").Split(','); + + if (Line.Length < 7) continue; + + try + { + MonGenInfo MonGenItem = new MonGenInfo + { + Map = Line[0], + X = Convert.ToInt16(Line[1]), + Y = Convert.ToInt16(Line[2]), + Name = Line[3], + Range = Convert.ToInt16(Line[4]), + Count = Convert.ToInt16(Line[5]), + Delay = Convert.ToInt16(Line[6]), + Direction = (Line.Length >= 8) ? Convert.ToInt16(Line[7]) : 0, + RoutePath = (Line.Length >= 9) ? Line[8] : string.Empty + }; + + monGenList.Add(MonGenItem); + } + catch (Exception) { continue; } + } + } + } + + public static void Stop() + { + monGenList.Clear(); + } + } + + public class MonGenInfo + { + public string + Map = string.Empty, + Name = string.Empty, + RoutePath = string.Empty; + + public int + X = 0, + Y = 0, + Range = 0, + Count = 0, + Delay = 0, + Direction = 0; + } +} \ No newline at end of file diff --git a/Server.MirForms/Database/MapInfoForm.Designer.cs b/Server.MirForms/Database/MapInfoForm.Designer.cs new file mode 100644 index 0000000..948221b --- /dev/null +++ b/Server.MirForms/Database/MapInfoForm.Designer.cs @@ -0,0 +1,1579 @@ +using System; +using System.ComponentModel; +using System.Drawing; +using System.Windows.Forms; + +namespace Server +{ + partial class MapInfoForm + { + /// + /// Required designer variable. + /// + private 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() + { + components = new Container(); + ComponentResourceManager resources = new ComponentResourceManager(typeof(MapInfoForm)); + MapTabs = new TabControl(); + tabPage1 = new TabPage(); + MinimapPreview = new PictureBox(); + button1 = new Button(); + label11 = new Label(); + MusicTextBox = new TextBox(); + label15 = new Label(); + BigMapTextBox = new TextBox(); + LightsComboBox = new ComboBox(); + label5 = new Label(); + label1 = new Label(); + label4 = new Label(); + MapIndexTextBox = new TextBox(); + MiniMapTextBox = new TextBox(); + label2 = new Label(); + MapNameTextBox = new TextBox(); + FileNameTextBox = new TextBox(); + label3 = new Label(); + tabPage6 = new TabPage(); + NoReincarnation = new CheckBox(); + NoTownTeleportCheckbox = new CheckBox(); + NoFightCheckbox = new CheckBox(); + label19 = new Label(); + MapDarkLighttextBox = new TextBox(); + NoNamesCheckbox = new CheckBox(); + NoDropMonsterCheckbox = new CheckBox(); + NoDropPlayerCheckbox = new CheckBox(); + NoThrowItemCheckbox = new CheckBox(); + NoPositionCheckbox = new CheckBox(); + NoDrugCheckbox = new CheckBox(); + NoRecallCheckbox = new CheckBox(); + NoEscapeCheckbox = new CheckBox(); + NoRandomCheckbox = new CheckBox(); + LightningTextbox = new TextBox(); + FireTextbox = new TextBox(); + NoReconnectTextbox = new TextBox(); + LightningCheckbox = new CheckBox(); + FireCheckbox = new CheckBox(); + FightCheckbox = new CheckBox(); + NoReconnectCheckbox = new CheckBox(); + NoTeleportCheckbox = new CheckBox(); + tabPage3 = new TabPage(); + RemoveSZButton = new Button(); + AddSZButton = new Button(); + SafeZoneInfoPanel = new Panel(); + label12 = new Label(); + SZYTextBox = new TextBox(); + label14 = new Label(); + SizeTextBox = new TextBox(); + label17 = new Label(); + SZXTextBox = new TextBox(); + StartPointCheckBox = new CheckBox(); + SafeZoneInfoListBox = new ListBox(); + tabPage2 = new TabPage(); + RPasteButton = new Button(); + RCopyButton = new Button(); + RemoveRButton = new Button(); + AddRButton = new Button(); + RespawnInfoListBox = new ListBox(); + RespawnInfoPanel = new Panel(); + chkrespawnsave = new CheckBox(); + chkRespawnEnableTick = new CheckBox(); + Randomtextbox = new TextBox(); + label23 = new Label(); + label34 = new Label(); + RoutePathTextBox = new TextBox(); + label24 = new Label(); + DirectionTextBox = new TextBox(); + label8 = new Label(); + DelayTextBox = new TextBox(); + label7 = new Label(); + MonsterInfoComboBox = new ComboBox(); + label6 = new Label(); + SpreadTextBox = new TextBox(); + label9 = new Label(); + RYTextBox = new TextBox(); + label10 = new Label(); + CountTextBox = new TextBox(); + label13 = new Label(); + RXTextBox = new TextBox(); + tabPage4 = new TabPage(); + RemoveMButton = new Button(); + AddMButton = new Button(); + MovementInfoPanel = new Panel(); + NeedMoveMCheckBox = new CheckBox(); + label22 = new Label(); + DestMapComboBox = new ComboBox(); + label18 = new Label(); + DestYTextBox = new TextBox(); + label21 = new Label(); + DestXTextBox = new TextBox(); + label16 = new Label(); + SourceYTextBox = new TextBox(); + label20 = new Label(); + SourceXTextBox = new TextBox(); + MovementInfoListBox = new ListBox(); + LIVETab = new TabPage(); + monsterTreeView = new TreeView(); + playerTreeView = new TreeView(); + RemoveButton = new Button(); + AddButton = new Button(); + MapInfoListBox = new ListBox(); + PasteMapButton = new Button(); + CopyMapButton = new Button(); + ImportMapInfoButton = new Button(); + ExportMapInfoButton = new Button(); + ImportMongenButton = new Button(); + ExportMongenButton = new Button(); + VisualizerButton = new Button(); + toolTip1 = new ToolTip(components); + button2 = new Button(); + MapTabs.SuspendLayout(); + tabPage1.SuspendLayout(); + ((ISupportInitialize)MinimapPreview).BeginInit(); + tabPage6.SuspendLayout(); + tabPage3.SuspendLayout(); + SafeZoneInfoPanel.SuspendLayout(); + tabPage2.SuspendLayout(); + RespawnInfoPanel.SuspendLayout(); + tabPage4.SuspendLayout(); + MovementInfoPanel.SuspendLayout(); + LIVETab.SuspendLayout(); + SuspendLayout(); + // + // MapTabs + // + MapTabs.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; + MapTabs.Controls.Add(tabPage1); + MapTabs.Controls.Add(tabPage6); + MapTabs.Controls.Add(tabPage3); + MapTabs.Controls.Add(tabPage2); + MapTabs.Controls.Add(tabPage4); + MapTabs.Controls.Add(LIVETab); + MapTabs.Location = new Point(241, 72); + MapTabs.Margin = new Padding(4, 3, 4, 3); + MapTabs.Name = "MapTabs"; + MapTabs.SelectedIndex = 0; + MapTabs.Size = new Size(630, 315); + MapTabs.TabIndex = 8; + // + // tabPage1 + // + tabPage1.Controls.Add(MinimapPreview); + tabPage1.Controls.Add(button1); + tabPage1.Controls.Add(label11); + tabPage1.Controls.Add(MusicTextBox); + tabPage1.Controls.Add(label15); + tabPage1.Controls.Add(BigMapTextBox); + tabPage1.Controls.Add(LightsComboBox); + tabPage1.Controls.Add(label5); + tabPage1.Controls.Add(label1); + tabPage1.Controls.Add(label4); + tabPage1.Controls.Add(MapIndexTextBox); + tabPage1.Controls.Add(MiniMapTextBox); + tabPage1.Controls.Add(label2); + tabPage1.Controls.Add(MapNameTextBox); + tabPage1.Controls.Add(FileNameTextBox); + tabPage1.Controls.Add(label3); + tabPage1.Location = new Point(4, 24); + tabPage1.Margin = new Padding(4, 3, 4, 3); + tabPage1.Name = "tabPage1"; + tabPage1.Padding = new Padding(4, 3, 4, 3); + tabPage1.Size = new Size(622, 287); + tabPage1.TabIndex = 0; + tabPage1.Text = "Info"; + tabPage1.UseVisualStyleBackColor = true; + // + // MinimapPreview + // + MinimapPreview.BackColor = Color.Transparent; + MinimapPreview.Location = new Point(274, 0); + MinimapPreview.Name = "MinimapPreview"; + MinimapPreview.Size = new Size(348, 287); + MinimapPreview.SizeMode = PictureBoxSizeMode.StretchImage; + MinimapPreview.TabIndex = 33; + MinimapPreview.TabStop = false; + // + // button1 + // + button1.Location = new Point(182, 51); + button1.Name = "button1"; + button1.Size = new Size(75, 23); + button1.TabIndex = 32; + button1.Text = "Open"; + button1.UseVisualStyleBackColor = true; + button1.Click += OpenProgramButton_Click; + // + // label11 + // + label11.AutoSize = true; + label11.Location = new Point(44, 209); + label11.Margin = new Padding(4, 0, 4, 0); + label11.Name = "label11"; + label11.Size = new Size(42, 15); + label11.TabIndex = 18; + label11.Text = "Music:"; + // + // MusicTextBox + // + MusicTextBox.Location = new Point(96, 205); + MusicTextBox.Margin = new Padding(4, 3, 4, 3); + MusicTextBox.Name = "MusicTextBox"; + MusicTextBox.Size = new Size(107, 23); + MusicTextBox.TabIndex = 17; + MusicTextBox.TextChanged += MusicTextBox_TextChanged; + // + // label15 + // + label15.AutoSize = true; + label15.Location = new Point(150, 114); + label15.Margin = new Padding(4, 0, 4, 0); + label15.Name = "label15"; + label15.Size = new Size(54, 15); + label15.TabIndex = 14; + label15.Text = "Big Map:"; + // + // BigMapTextBox + // + BigMapTextBox.Location = new Point(215, 111); + BigMapTextBox.Margin = new Padding(4, 3, 4, 3); + BigMapTextBox.MaxLength = 5; + BigMapTextBox.Name = "BigMapTextBox"; + BigMapTextBox.Size = new Size(42, 23); + BigMapTextBox.TabIndex = 13; + BigMapTextBox.TextChanged += BigMapTextBox_TextChanged; + // + // LightsComboBox + // + LightsComboBox.DropDownStyle = ComboBoxStyle.DropDownList; + LightsComboBox.FormattingEnabled = true; + LightsComboBox.Location = new Point(96, 141); + LightsComboBox.Margin = new Padding(4, 3, 4, 3); + LightsComboBox.Name = "LightsComboBox"; + LightsComboBox.Size = new Size(107, 23); + LightsComboBox.TabIndex = 11; + LightsComboBox.SelectedIndexChanged += LightsComboBox_SelectedIndexChanged; + // + // label5 + // + label5.AutoSize = true; + label5.Location = new Point(44, 144); + label5.Margin = new Padding(4, 0, 4, 0); + label5.Name = "label5"; + label5.Size = new Size(42, 15); + label5.TabIndex = 12; + label5.Text = "Lights:"; + // + // label1 + // + label1.AutoSize = true; + label1.Location = new Point(19, 21); + label1.Margin = new Padding(4, 0, 4, 0); + label1.Name = "label1"; + label1.Size = new Size(66, 15); + label1.TabIndex = 4; + label1.Text = "Map Index:"; + // + // label4 + // + label4.AutoSize = true; + label4.Location = new Point(27, 114); + label4.Margin = new Padding(4, 0, 4, 0); + label4.Name = "label4"; + label4.Size = new Size(61, 15); + label4.TabIndex = 10; + label4.Text = "Mini Map:"; + // + // MapIndexTextBox + // + MapIndexTextBox.Location = new Point(96, 17); + MapIndexTextBox.Margin = new Padding(4, 3, 4, 3); + MapIndexTextBox.Name = "MapIndexTextBox"; + MapIndexTextBox.ReadOnly = true; + MapIndexTextBox.Size = new Size(54, 23); + MapIndexTextBox.TabIndex = 0; + // + // MiniMapTextBox + // + MiniMapTextBox.Location = new Point(96, 111); + MiniMapTextBox.Margin = new Padding(4, 3, 4, 3); + MiniMapTextBox.MaxLength = 5; + MiniMapTextBox.Name = "MiniMapTextBox"; + MiniMapTextBox.Size = new Size(42, 23); + MiniMapTextBox.TabIndex = 9; + MiniMapTextBox.TextChanged += MiniMapTextBox_TextChanged; + // + // label2 + // + label2.AutoSize = true; + label2.Location = new Point(22, 54); + label2.Margin = new Padding(4, 0, 4, 0); + label2.Name = "label2"; + label2.Size = new Size(63, 15); + label2.TabIndex = 6; + label2.Text = "File Name:"; + // + // MapNameTextBox + // + MapNameTextBox.Location = new Point(96, 81); + MapNameTextBox.Margin = new Padding(4, 3, 4, 3); + MapNameTextBox.Name = "MapNameTextBox"; + MapNameTextBox.Size = new Size(107, 23); + MapNameTextBox.TabIndex = 2; + MapNameTextBox.TextChanged += MapNameTextBox_TextChanged; + // + // FileNameTextBox + // + FileNameTextBox.Location = new Point(96, 51); + FileNameTextBox.Margin = new Padding(4, 3, 4, 3); + FileNameTextBox.Name = "FileNameTextBox"; + FileNameTextBox.Size = new Size(54, 23); + FileNameTextBox.TabIndex = 1; + FileNameTextBox.TextChanged += FileNameTextBox_TextChanged; + // + // label3 + // + label3.AutoSize = true; + label3.Location = new Point(16, 84); + label3.Margin = new Padding(4, 0, 4, 0); + label3.Name = "label3"; + label3.Size = new Size(69, 15); + label3.TabIndex = 8; + label3.Text = "Map Name:"; + // + // tabPage6 + // + tabPage6.Controls.Add(NoReincarnation); + tabPage6.Controls.Add(NoTownTeleportCheckbox); + tabPage6.Controls.Add(NoFightCheckbox); + tabPage6.Controls.Add(label19); + tabPage6.Controls.Add(MapDarkLighttextBox); + tabPage6.Controls.Add(NoNamesCheckbox); + tabPage6.Controls.Add(NoDropMonsterCheckbox); + tabPage6.Controls.Add(NoDropPlayerCheckbox); + tabPage6.Controls.Add(NoThrowItemCheckbox); + tabPage6.Controls.Add(NoPositionCheckbox); + tabPage6.Controls.Add(NoDrugCheckbox); + tabPage6.Controls.Add(NoRecallCheckbox); + tabPage6.Controls.Add(NoEscapeCheckbox); + tabPage6.Controls.Add(NoRandomCheckbox); + tabPage6.Controls.Add(LightningTextbox); + tabPage6.Controls.Add(FireTextbox); + tabPage6.Controls.Add(NoReconnectTextbox); + tabPage6.Controls.Add(LightningCheckbox); + tabPage6.Controls.Add(FireCheckbox); + tabPage6.Controls.Add(FightCheckbox); + tabPage6.Controls.Add(NoReconnectCheckbox); + tabPage6.Controls.Add(NoTeleportCheckbox); + tabPage6.Location = new Point(4, 24); + tabPage6.Margin = new Padding(4, 3, 4, 3); + tabPage6.Name = "tabPage6"; + tabPage6.Padding = new Padding(4, 3, 4, 3); + tabPage6.Size = new Size(622, 287); + tabPage6.TabIndex = 5; + tabPage6.Text = "Attributes"; + tabPage6.UseVisualStyleBackColor = true; + // + // NoReincarnation + // + NoReincarnation.AutoSize = true; + NoReincarnation.Location = new Point(18, 228); + NoReincarnation.Margin = new Padding(4, 3, 4, 3); + NoReincarnation.Name = "NoReincarnation"; + NoReincarnation.Size = new Size(118, 19); + NoReincarnation.TabIndex = 45; + NoReincarnation.Text = "No Reincarnation"; + NoReincarnation.UseVisualStyleBackColor = true; + NoReincarnation.CheckedChanged += NoReincarnation_CheckedChanged; + // + // NoTownTeleportCheckbox + // + NoTownTeleportCheckbox.AutoSize = true; + NoTownTeleportCheckbox.Location = new Point(397, 137); + NoTownTeleportCheckbox.Margin = new Padding(4, 3, 4, 3); + NoTownTeleportCheckbox.Name = "NoTownTeleportCheckbox"; + NoTownTeleportCheckbox.Size = new Size(115, 19); + NoTownTeleportCheckbox.TabIndex = 44; + NoTownTeleportCheckbox.Text = "No TownTeleport"; + NoTownTeleportCheckbox.UseVisualStyleBackColor = true; + NoTownTeleportCheckbox.CheckedChanged += NoTownTeleportCheckbox_CheckedChanged; + // + // NoFightCheckbox + // + NoFightCheckbox.AutoSize = true; + NoFightCheckbox.Location = new Point(203, 158); + NoFightCheckbox.Margin = new Padding(4, 3, 4, 3); + NoFightCheckbox.Name = "NoFightCheckbox"; + NoFightCheckbox.Size = new Size(72, 19); + NoFightCheckbox.TabIndex = 43; + NoFightCheckbox.Text = "No Fight"; + NoFightCheckbox.UseVisualStyleBackColor = true; + NoFightCheckbox.CheckedChanged += NoFightCheckbox_CheckedChanged; + // + // label19 + // + label19.AutoSize = true; + label19.Location = new Point(394, 108); + label19.Margin = new Padding(4, 0, 4, 0); + label19.Name = "label19"; + label19.Size = new Size(88, 15); + label19.TabIndex = 40; + label19.Text = "Map Dark Light"; + // + // MapDarkLighttextBox + // + MapDarkLighttextBox.Location = new Point(517, 105); + MapDarkLighttextBox.Margin = new Padding(4, 3, 4, 3); + MapDarkLighttextBox.Name = "MapDarkLighttextBox"; + MapDarkLighttextBox.Size = new Size(56, 23); + MapDarkLighttextBox.TabIndex = 39; + MapDarkLighttextBox.TextChanged += MapDarkLighttextBox_TextChanged; + // + // NoNamesCheckbox + // + NoNamesCheckbox.AutoSize = true; + NoNamesCheckbox.Location = new Point(203, 103); + NoNamesCheckbox.Margin = new Padding(4, 3, 4, 3); + NoNamesCheckbox.Name = "NoNamesCheckbox"; + NoNamesCheckbox.Size = new Size(82, 19); + NoNamesCheckbox.TabIndex = 38; + NoNamesCheckbox.Text = "No Names"; + NoNamesCheckbox.UseVisualStyleBackColor = true; + NoNamesCheckbox.CheckedChanged += NoNamesCheckbox_CheckedChanged; + // + // NoDropMonsterCheckbox + // + NoDropMonsterCheckbox.AutoSize = true; + NoDropMonsterCheckbox.Location = new Point(203, 75); + NoDropMonsterCheckbox.Margin = new Padding(4, 3, 4, 3); + NoDropMonsterCheckbox.Name = "NoDropMonsterCheckbox"; + NoDropMonsterCheckbox.Size = new Size(126, 19); + NoDropMonsterCheckbox.TabIndex = 37; + NoDropMonsterCheckbox.Text = "No Drop (Monster)"; + NoDropMonsterCheckbox.UseVisualStyleBackColor = true; + NoDropMonsterCheckbox.CheckedChanged += NoDropMonsterCheckbox_CheckedChanged; + // + // NoDropPlayerCheckbox + // + NoDropPlayerCheckbox.AutoSize = true; + NoDropPlayerCheckbox.Location = new Point(203, 47); + NoDropPlayerCheckbox.Margin = new Padding(4, 3, 4, 3); + NoDropPlayerCheckbox.Name = "NoDropPlayerCheckbox"; + NoDropPlayerCheckbox.Size = new Size(114, 19); + NoDropPlayerCheckbox.TabIndex = 36; + NoDropPlayerCheckbox.Text = "No Drop (Player)"; + NoDropPlayerCheckbox.UseVisualStyleBackColor = true; + NoDropPlayerCheckbox.CheckedChanged += NoDropPlayerCheckbox_CheckedChanged; + // + // NoThrowItemCheckbox + // + NoThrowItemCheckbox.AutoSize = true; + NoThrowItemCheckbox.Location = new Point(203, 20); + NoThrowItemCheckbox.Margin = new Padding(4, 3, 4, 3); + NoThrowItemCheckbox.Name = "NoThrowItemCheckbox"; + NoThrowItemCheckbox.Size = new Size(105, 19); + NoThrowItemCheckbox.TabIndex = 35; + NoThrowItemCheckbox.Text = "No Throw Item"; + NoThrowItemCheckbox.UseVisualStyleBackColor = true; + NoThrowItemCheckbox.CheckedChanged += NoThrowItemCheckbox_CheckedChanged; + // + // NoPositionCheckbox + // + NoPositionCheckbox.AutoSize = true; + NoPositionCheckbox.Location = new Point(18, 185); + NoPositionCheckbox.Margin = new Padding(4, 3, 4, 3); + NoPositionCheckbox.Name = "NoPositionCheckbox"; + NoPositionCheckbox.Size = new Size(88, 19); + NoPositionCheckbox.TabIndex = 34; + NoPositionCheckbox.Text = "No Position"; + NoPositionCheckbox.UseVisualStyleBackColor = true; + NoPositionCheckbox.CheckedChanged += NoPositionCheckbox_CheckedChanged; + // + // NoDrugCheckbox + // + NoDrugCheckbox.AutoSize = true; + NoDrugCheckbox.Location = new Point(19, 158); + NoDrugCheckbox.Margin = new Padding(4, 3, 4, 3); + NoDrugCheckbox.Name = "NoDrugCheckbox"; + NoDrugCheckbox.Size = new Size(71, 19); + NoDrugCheckbox.TabIndex = 33; + NoDrugCheckbox.Text = "No Drug"; + NoDrugCheckbox.UseVisualStyleBackColor = true; + NoDrugCheckbox.CheckedChanged += NoDrugCheckbox_CheckedChanged; + // + // NoRecallCheckbox + // + NoRecallCheckbox.AutoSize = true; + NoRecallCheckbox.Location = new Point(19, 130); + NoRecallCheckbox.Margin = new Padding(4, 3, 4, 3); + NoRecallCheckbox.Name = "NoRecallCheckbox"; + NoRecallCheckbox.Size = new Size(76, 19); + NoRecallCheckbox.TabIndex = 32; + NoRecallCheckbox.Text = "No Recall"; + NoRecallCheckbox.UseVisualStyleBackColor = true; + NoRecallCheckbox.CheckedChanged += NoRecallCheckbox_CheckedChanged; + // + // NoEscapeCheckbox + // + NoEscapeCheckbox.AutoSize = true; + NoEscapeCheckbox.Location = new Point(19, 103); + NoEscapeCheckbox.Margin = new Padding(4, 3, 4, 3); + NoEscapeCheckbox.Name = "NoEscapeCheckbox"; + NoEscapeCheckbox.Size = new Size(81, 19); + NoEscapeCheckbox.TabIndex = 31; + NoEscapeCheckbox.Text = "No Escape"; + NoEscapeCheckbox.UseVisualStyleBackColor = true; + NoEscapeCheckbox.CheckedChanged += NoEscapeCheckbox_CheckedChanged; + // + // NoRandomCheckbox + // + NoRandomCheckbox.AutoSize = true; + NoRandomCheckbox.Location = new Point(19, 75); + NoRandomCheckbox.Margin = new Padding(4, 3, 4, 3); + NoRandomCheckbox.Name = "NoRandomCheckbox"; + NoRandomCheckbox.Size = new Size(90, 19); + NoRandomCheckbox.TabIndex = 30; + NoRandomCheckbox.Text = "No Random"; + NoRandomCheckbox.UseVisualStyleBackColor = true; + NoRandomCheckbox.CheckedChanged += NoRandomCheckbox_CheckedChanged; + // + // LightningTextbox + // + LightningTextbox.Location = new Point(517, 75); + LightningTextbox.Margin = new Padding(4, 3, 4, 3); + LightningTextbox.Name = "LightningTextbox"; + LightningTextbox.Size = new Size(56, 23); + LightningTextbox.TabIndex = 29; + LightningTextbox.TextChanged += LightningTextbox_TextChanged; + // + // FireTextbox + // + FireTextbox.Location = new Point(517, 47); + FireTextbox.Margin = new Padding(4, 3, 4, 3); + FireTextbox.Name = "FireTextbox"; + FireTextbox.Size = new Size(56, 23); + FireTextbox.TabIndex = 28; + FireTextbox.TextChanged += FireTextbox_TextChanged; + // + // NoReconnectTextbox + // + NoReconnectTextbox.Location = new Point(138, 45); + NoReconnectTextbox.Margin = new Padding(4, 3, 4, 3); + NoReconnectTextbox.Name = "NoReconnectTextbox"; + NoReconnectTextbox.Size = new Size(56, 23); + NoReconnectTextbox.TabIndex = 27; + NoReconnectTextbox.TextChanged += NoReconnectTextbox_TextChanged; + // + // LightningCheckbox + // + LightningCheckbox.AutoSize = true; + LightningCheckbox.Location = new Point(398, 75); + LightningCheckbox.Margin = new Padding(4, 3, 4, 3); + LightningCheckbox.Name = "LightningCheckbox"; + LightningCheckbox.Size = new Size(77, 19); + LightningCheckbox.TabIndex = 26; + LightningCheckbox.Text = "Lightning"; + LightningCheckbox.UseVisualStyleBackColor = true; + LightningCheckbox.CheckedChanged += LightningCheckbox_CheckedChanged; + // + // FireCheckbox + // + FireCheckbox.AutoSize = true; + FireCheckbox.Location = new Point(398, 47); + FireCheckbox.Margin = new Padding(4, 3, 4, 3); + FireCheckbox.Name = "FireCheckbox"; + FireCheckbox.Size = new Size(45, 19); + FireCheckbox.TabIndex = 25; + FireCheckbox.Text = "Fire"; + FireCheckbox.UseVisualStyleBackColor = true; + FireCheckbox.CheckStateChanged += FireCheckbox_CheckStateChanged; + // + // FightCheckbox + // + FightCheckbox.AutoSize = true; + FightCheckbox.Location = new Point(398, 18); + FightCheckbox.Margin = new Padding(4, 3, 4, 3); + FightCheckbox.Name = "FightCheckbox"; + FightCheckbox.Size = new Size(53, 19); + FightCheckbox.TabIndex = 23; + FightCheckbox.Text = "Fight"; + FightCheckbox.UseVisualStyleBackColor = true; + FightCheckbox.CheckedChanged += FightCheckbox_CheckedChanged; + // + // NoReconnectCheckbox + // + NoReconnectCheckbox.AutoSize = true; + NoReconnectCheckbox.Location = new Point(19, 47); + NoReconnectCheckbox.Margin = new Padding(4, 3, 4, 3); + NoReconnectCheckbox.Name = "NoReconnectCheckbox"; + NoReconnectCheckbox.Size = new Size(101, 19); + NoReconnectCheckbox.TabIndex = 22; + NoReconnectCheckbox.Text = "No Reconnect"; + NoReconnectCheckbox.UseVisualStyleBackColor = true; + NoReconnectCheckbox.CheckedChanged += NoReconnectCheckbox_CheckedChanged; + // + // NoTeleportCheckbox + // + NoTeleportCheckbox.AutoSize = true; + NoTeleportCheckbox.Location = new Point(19, 20); + NoTeleportCheckbox.Margin = new Padding(4, 3, 4, 3); + NoTeleportCheckbox.Name = "NoTeleportCheckbox"; + NoTeleportCheckbox.Size = new Size(87, 19); + NoTeleportCheckbox.TabIndex = 21; + NoTeleportCheckbox.Text = "No Teleport"; + NoTeleportCheckbox.UseVisualStyleBackColor = true; + NoTeleportCheckbox.CheckedChanged += NoTeleportCheckbox_CheckedChanged; + // + // tabPage3 + // + tabPage3.Controls.Add(RemoveSZButton); + tabPage3.Controls.Add(AddSZButton); + tabPage3.Controls.Add(SafeZoneInfoPanel); + tabPage3.Controls.Add(SafeZoneInfoListBox); + tabPage3.Location = new Point(4, 24); + tabPage3.Margin = new Padding(4, 3, 4, 3); + tabPage3.Name = "tabPage3"; + tabPage3.Size = new Size(622, 287); + tabPage3.TabIndex = 2; + tabPage3.Text = "Safe Zones"; + tabPage3.UseVisualStyleBackColor = true; + // + // RemoveSZButton + // + RemoveSZButton.Location = new Point(126, 8); + RemoveSZButton.Margin = new Padding(4, 3, 4, 3); + RemoveSZButton.Name = "RemoveSZButton"; + RemoveSZButton.Size = new Size(88, 27); + RemoveSZButton.TabIndex = 8; + RemoveSZButton.Text = "Remove"; + RemoveSZButton.UseVisualStyleBackColor = true; + RemoveSZButton.Click += RemoveSZButton_Click; + // + // AddSZButton + // + AddSZButton.Location = new Point(7, 8); + AddSZButton.Margin = new Padding(4, 3, 4, 3); + AddSZButton.Name = "AddSZButton"; + AddSZButton.Size = new Size(88, 27); + AddSZButton.TabIndex = 7; + AddSZButton.Text = "Add"; + AddSZButton.UseVisualStyleBackColor = true; + AddSZButton.Click += AddSZButton_Click; + // + // SafeZoneInfoPanel + // + SafeZoneInfoPanel.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; + SafeZoneInfoPanel.Controls.Add(label12); + SafeZoneInfoPanel.Controls.Add(SZYTextBox); + SafeZoneInfoPanel.Controls.Add(label14); + SafeZoneInfoPanel.Controls.Add(SizeTextBox); + SafeZoneInfoPanel.Controls.Add(label17); + SafeZoneInfoPanel.Controls.Add(SZXTextBox); + SafeZoneInfoPanel.Controls.Add(StartPointCheckBox); + SafeZoneInfoPanel.Enabled = false; + SafeZoneInfoPanel.Location = new Point(220, 40); + SafeZoneInfoPanel.Margin = new Padding(4, 3, 4, 3); + SafeZoneInfoPanel.Name = "SafeZoneInfoPanel"; + SafeZoneInfoPanel.Size = new Size(230, 160); + SafeZoneInfoPanel.TabIndex = 10; + // + // label12 + // + label12.AutoSize = true; + label12.Location = new Point(145, 29); + label12.Margin = new Padding(4, 0, 4, 0); + label12.Name = "label12"; + label12.Size = new Size(17, 15); + label12.TabIndex = 10; + label12.Text = "Y:"; + // + // SZYTextBox + // + SZYTextBox.Location = new Point(172, 25); + SZYTextBox.Margin = new Padding(4, 3, 4, 3); + SZYTextBox.MaxLength = 5; + SZYTextBox.Name = "SZYTextBox"; + SZYTextBox.Size = new Size(42, 23); + SZYTextBox.TabIndex = 3; + SZYTextBox.TextChanged += SZYTextBox_TextChanged; + // + // label14 + // + label14.AutoSize = true; + label14.Location = new Point(29, 59); + label14.Margin = new Padding(4, 0, 4, 0); + label14.Name = "label14"; + label14.Size = new Size(30, 15); + label14.TabIndex = 8; + label14.Text = "Size:"; + // + // SizeTextBox + // + SizeTextBox.Location = new Point(71, 55); + SizeTextBox.Margin = new Padding(4, 3, 4, 3); + SizeTextBox.MaxLength = 5; + SizeTextBox.Name = "SizeTextBox"; + SizeTextBox.Size = new Size(42, 23); + SizeTextBox.TabIndex = 4; + SizeTextBox.TextChanged += SizeTextBox_TextChanged; + // + // label17 + // + label17.AutoSize = true; + label17.Location = new Point(44, 29); + label17.Margin = new Padding(4, 0, 4, 0); + label17.Name = "label17"; + label17.Size = new Size(17, 15); + label17.TabIndex = 3; + label17.Text = "X:"; + // + // SZXTextBox + // + SZXTextBox.Location = new Point(71, 25); + SZXTextBox.Margin = new Padding(4, 3, 4, 3); + SZXTextBox.MaxLength = 5; + SZXTextBox.Name = "SZXTextBox"; + SZXTextBox.Size = new Size(42, 23); + SZXTextBox.TabIndex = 2; + SZXTextBox.TextChanged += SZXTextBox_TextChanged; + // + // StartPointCheckBox + // + StartPointCheckBox.AutoSize = true; + StartPointCheckBox.Location = new Point(71, 103); + StartPointCheckBox.Margin = new Padding(4, 3, 4, 3); + StartPointCheckBox.Name = "StartPointCheckBox"; + StartPointCheckBox.Size = new Size(81, 19); + StartPointCheckBox.TabIndex = 5; + StartPointCheckBox.Text = "Start Point"; + StartPointCheckBox.UseVisualStyleBackColor = true; + StartPointCheckBox.CheckedChanged += StartPointCheckBox_CheckedChanged; + // + // SafeZoneInfoListBox + // + SafeZoneInfoListBox.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left; + SafeZoneInfoListBox.FormattingEnabled = true; + SafeZoneInfoListBox.ItemHeight = 15; + SafeZoneInfoListBox.Location = new Point(7, 40); + SafeZoneInfoListBox.Margin = new Padding(4, 3, 4, 3); + SafeZoneInfoListBox.Name = "SafeZoneInfoListBox"; + SafeZoneInfoListBox.SelectionMode = SelectionMode.MultiExtended; + SafeZoneInfoListBox.Size = new Size(206, 154); + SafeZoneInfoListBox.TabIndex = 9; + SafeZoneInfoListBox.SelectedIndexChanged += SafeZoneInfoListBox_SelectedIndexChanged; + // + // tabPage2 + // + tabPage2.Controls.Add(RPasteButton); + tabPage2.Controls.Add(RCopyButton); + tabPage2.Controls.Add(RemoveRButton); + tabPage2.Controls.Add(AddRButton); + tabPage2.Controls.Add(RespawnInfoListBox); + tabPage2.Controls.Add(RespawnInfoPanel); + tabPage2.Location = new Point(4, 24); + tabPage2.Margin = new Padding(4, 3, 4, 3); + tabPage2.Name = "tabPage2"; + tabPage2.Padding = new Padding(4, 3, 4, 3); + tabPage2.Size = new Size(622, 287); + tabPage2.TabIndex = 1; + tabPage2.Text = "Respawns"; + tabPage2.UseVisualStyleBackColor = true; + // + // RPasteButton + // + RPasteButton.Location = new Point(315, 8); + RPasteButton.Margin = new Padding(4, 3, 4, 3); + RPasteButton.Name = "RPasteButton"; + RPasteButton.Size = new Size(88, 27); + RPasteButton.TabIndex = 22; + RPasteButton.Text = "Paste"; + RPasteButton.UseVisualStyleBackColor = true; + RPasteButton.Click += RPasteButton_Click; + // + // RCopyButton + // + RCopyButton.Location = new Point(220, 8); + RCopyButton.Margin = new Padding(4, 3, 4, 3); + RCopyButton.Name = "RCopyButton"; + RCopyButton.Size = new Size(88, 27); + RCopyButton.TabIndex = 21; + RCopyButton.Text = "Copy"; + RCopyButton.UseVisualStyleBackColor = true; + // + // RemoveRButton + // + RemoveRButton.Location = new Point(126, 8); + RemoveRButton.Margin = new Padding(4, 3, 4, 3); + RemoveRButton.Name = "RemoveRButton"; + RemoveRButton.Size = new Size(88, 27); + RemoveRButton.TabIndex = 16; + RemoveRButton.Text = "Remove"; + RemoveRButton.UseVisualStyleBackColor = true; + RemoveRButton.Click += RemoveRButton_Click; + // + // AddRButton + // + AddRButton.Location = new Point(7, 8); + AddRButton.Margin = new Padding(4, 3, 4, 3); + AddRButton.Name = "AddRButton"; + AddRButton.Size = new Size(88, 27); + AddRButton.TabIndex = 15; + AddRButton.Text = "Add"; + AddRButton.UseVisualStyleBackColor = true; + AddRButton.Click += AddRButton_Click; + // + // RespawnInfoListBox + // + RespawnInfoListBox.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left; + RespawnInfoListBox.FormattingEnabled = true; + RespawnInfoListBox.ItemHeight = 15; + RespawnInfoListBox.Location = new Point(7, 40); + RespawnInfoListBox.Margin = new Padding(4, 3, 4, 3); + RespawnInfoListBox.Name = "RespawnInfoListBox"; + RespawnInfoListBox.SelectionMode = SelectionMode.MultiExtended; + RespawnInfoListBox.Size = new Size(303, 169); + RespawnInfoListBox.TabIndex = 14; + RespawnInfoListBox.SelectedIndexChanged += RespawnInfoListBox_SelectedIndexChanged; + // + // RespawnInfoPanel + // + RespawnInfoPanel.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; + RespawnInfoPanel.Controls.Add(chkrespawnsave); + RespawnInfoPanel.Controls.Add(chkRespawnEnableTick); + RespawnInfoPanel.Controls.Add(Randomtextbox); + RespawnInfoPanel.Controls.Add(label23); + RespawnInfoPanel.Controls.Add(label34); + RespawnInfoPanel.Controls.Add(RoutePathTextBox); + RespawnInfoPanel.Controls.Add(label24); + RespawnInfoPanel.Controls.Add(DirectionTextBox); + RespawnInfoPanel.Controls.Add(label8); + RespawnInfoPanel.Controls.Add(DelayTextBox); + RespawnInfoPanel.Controls.Add(label7); + RespawnInfoPanel.Controls.Add(MonsterInfoComboBox); + RespawnInfoPanel.Controls.Add(label6); + RespawnInfoPanel.Controls.Add(SpreadTextBox); + RespawnInfoPanel.Controls.Add(label9); + RespawnInfoPanel.Controls.Add(RYTextBox); + RespawnInfoPanel.Controls.Add(label10); + RespawnInfoPanel.Controls.Add(CountTextBox); + RespawnInfoPanel.Controls.Add(label13); + RespawnInfoPanel.Controls.Add(RXTextBox); + RespawnInfoPanel.Enabled = false; + RespawnInfoPanel.Location = new Point(317, 40); + RespawnInfoPanel.Margin = new Padding(4, 3, 4, 3); + RespawnInfoPanel.Name = "RespawnInfoPanel"; + RespawnInfoPanel.Size = new Size(296, 237); + RespawnInfoPanel.TabIndex = 11; + // + // chkrespawnsave + // + chkrespawnsave.AutoSize = true; + chkrespawnsave.Location = new Point(29, 126); + chkrespawnsave.Margin = new Padding(4, 3, 4, 3); + chkrespawnsave.Name = "chkrespawnsave"; + chkrespawnsave.Size = new Size(176, 19); + chkrespawnsave.TabIndex = 25; + chkrespawnsave.Text = "Save respawnticks on reboot"; + chkrespawnsave.UseVisualStyleBackColor = true; + chkrespawnsave.CheckedChanged += chkrespawnsave_CheckedChanged; + // + // chkRespawnEnableTick + // + chkRespawnEnableTick.AutoSize = true; + chkRespawnEnableTick.Location = new Point(29, 106); + chkRespawnEnableTick.Margin = new Padding(4, 3, 4, 3); + chkRespawnEnableTick.Name = "chkRespawnEnableTick"; + chkRespawnEnableTick.Size = new Size(145, 19); + chkRespawnEnableTick.TabIndex = 24; + chkRespawnEnableTick.Text = "Use tickbased respawn"; + chkRespawnEnableTick.UseVisualStyleBackColor = true; + chkRespawnEnableTick.CheckedChanged += chkRespawnEnableTick_CheckedChanged; + // + // Randomtextbox + // + Randomtextbox.Location = new Point(184, 150); + Randomtextbox.Margin = new Padding(4, 3, 4, 3); + Randomtextbox.MaxLength = 10; + Randomtextbox.Multiline = true; + Randomtextbox.Name = "Randomtextbox"; + Randomtextbox.Size = new Size(42, 22); + Randomtextbox.TabIndex = 23; + toolTip1.SetToolTip(Randomtextbox, "Allows random + or - added to each spawn time"); + Randomtextbox.TextChanged += RandomTextBox_TextChanged; + // + // label23 + // + label23.AutoSize = true; + label23.Location = new Point(158, 153); + label23.Margin = new Padding(4, 0, 4, 0); + label23.Name = "label23"; + label23.Size = new Size(17, 15); + label23.TabIndex = 22; + label23.Text = "R:"; + // + // label34 + // + label34.AutoSize = true; + label34.Location = new Point(26, 183); + label34.Margin = new Padding(4, 0, 4, 0); + label34.Name = "label34"; + label34.Size = new Size(41, 15); + label34.TabIndex = 21; + label34.Text = "Route:"; + // + // RoutePathTextBox + // + RoutePathTextBox.Location = new Point(76, 180); + RoutePathTextBox.Margin = new Padding(4, 3, 4, 3); + RoutePathTextBox.Name = "RoutePathTextBox"; + RoutePathTextBox.Size = new Size(151, 23); + RoutePathTextBox.TabIndex = 20; + RoutePathTextBox.TextChanged += RoutePathTextBox_TextChanged; + // + // label24 + // + label24.AutoSize = true; + label24.Location = new Point(26, 213); + label24.Margin = new Padding(4, 0, 4, 0); + label24.Name = "label24"; + label24.Size = new Size(25, 15); + label24.TabIndex = 18; + label24.Text = "Dir:"; + // + // DirectionTextBox + // + DirectionTextBox.Location = new Point(76, 210); + DirectionTextBox.Margin = new Padding(4, 3, 4, 3); + DirectionTextBox.MaxLength = 5; + DirectionTextBox.Name = "DirectionTextBox"; + DirectionTextBox.Size = new Size(42, 23); + DirectionTextBox.TabIndex = 17; + DirectionTextBox.TextChanged += DirectionTextBox_TextChanged; + // + // label8 + // + label8.AutoSize = true; + label8.Location = new Point(26, 153); + label8.Margin = new Padding(4, 0, 4, 0); + label8.Name = "label8"; + label8.Size = new Size(39, 15); + label8.TabIndex = 16; + label8.Text = "Delay:"; + // + // DelayTextBox + // + DelayTextBox.Location = new Point(76, 150); + DelayTextBox.Margin = new Padding(4, 3, 4, 3); + DelayTextBox.MaxLength = 10; + DelayTextBox.Multiline = true; + DelayTextBox.Name = "DelayTextBox"; + DelayTextBox.Size = new Size(72, 22); + DelayTextBox.TabIndex = 15; + toolTip1.SetToolTip(DelayTextBox, "if you use tick based spawn: this is ignored!"); + DelayTextBox.TextChanged += DelayTextBox_TextChanged; + // + // label7 + // + label7.AutoSize = true; + label7.Location = new Point(13, 18); + label7.Margin = new Padding(4, 0, 4, 0); + label7.Name = "label7"; + label7.Size = new Size(54, 15); + label7.TabIndex = 14; + label7.Text = "Monster:"; + // + // MonsterInfoComboBox + // + MonsterInfoComboBox.DropDownStyle = ComboBoxStyle.DropDownList; + MonsterInfoComboBox.FormattingEnabled = true; + MonsterInfoComboBox.Location = new Point(76, 15); + MonsterInfoComboBox.Margin = new Padding(4, 3, 4, 3); + MonsterInfoComboBox.Name = "MonsterInfoComboBox"; + MonsterInfoComboBox.Size = new Size(151, 23); + MonsterInfoComboBox.TabIndex = 13; + MonsterInfoComboBox.SelectedIndexChanged += MonsterInfoComboBox_SelectedIndexChanged; + // + // label6 + // + label6.AutoSize = true; + label6.Location = new Point(126, 80); + label6.Margin = new Padding(4, 0, 4, 0); + label6.Name = "label6"; + label6.Size = new Size(46, 15); + label6.TabIndex = 12; + label6.Text = "Spread:"; + // + // SpreadTextBox + // + SpreadTextBox.Location = new Point(184, 76); + SpreadTextBox.Margin = new Padding(4, 3, 4, 3); + SpreadTextBox.MaxLength = 5; + SpreadTextBox.Name = "SpreadTextBox"; + SpreadTextBox.Size = new Size(42, 23); + SpreadTextBox.TabIndex = 11; + SpreadTextBox.TextChanged += SpreadTextBox_TextChanged; + // + // label9 + // + label9.AutoSize = true; + label9.Location = new Point(158, 50); + label9.Margin = new Padding(4, 0, 4, 0); + label9.Name = "label9"; + label9.Size = new Size(17, 15); + label9.TabIndex = 10; + label9.Text = "Y:"; + // + // RYTextBox + // + RYTextBox.Location = new Point(184, 46); + RYTextBox.Margin = new Padding(4, 3, 4, 3); + RYTextBox.MaxLength = 5; + RYTextBox.Name = "RYTextBox"; + RYTextBox.Size = new Size(42, 23); + RYTextBox.TabIndex = 3; + RYTextBox.TextChanged += RYTextBox_TextChanged; + // + // label10 + // + label10.AutoSize = true; + label10.Location = new Point(24, 80); + label10.Margin = new Padding(4, 0, 4, 0); + label10.Name = "label10"; + label10.Size = new Size(43, 15); + label10.TabIndex = 8; + label10.Text = "Count:"; + // + // CountTextBox + // + CountTextBox.Location = new Point(76, 76); + CountTextBox.Margin = new Padding(4, 3, 4, 3); + CountTextBox.MaxLength = 5; + CountTextBox.Name = "CountTextBox"; + CountTextBox.Size = new Size(42, 23); + CountTextBox.TabIndex = 4; + CountTextBox.TextChanged += CountTextBox_TextChanged; + // + // label13 + // + label13.AutoSize = true; + label13.Location = new Point(49, 50); + label13.Margin = new Padding(4, 0, 4, 0); + label13.Name = "label13"; + label13.Size = new Size(17, 15); + label13.TabIndex = 3; + label13.Text = "X:"; + // + // RXTextBox + // + RXTextBox.Location = new Point(76, 46); + RXTextBox.Margin = new Padding(4, 3, 4, 3); + RXTextBox.MaxLength = 5; + RXTextBox.Name = "RXTextBox"; + RXTextBox.Size = new Size(42, 23); + RXTextBox.TabIndex = 2; + RXTextBox.TextChanged += RXTextBox_TextChanged; + // + // tabPage4 + // + tabPage4.Controls.Add(RemoveMButton); + tabPage4.Controls.Add(AddMButton); + tabPage4.Controls.Add(MovementInfoPanel); + tabPage4.Controls.Add(MovementInfoListBox); + tabPage4.Location = new Point(4, 24); + tabPage4.Margin = new Padding(4, 3, 4, 3); + tabPage4.Name = "tabPage4"; + tabPage4.Padding = new Padding(4, 3, 4, 3); + tabPage4.Size = new Size(622, 287); + tabPage4.TabIndex = 3; + tabPage4.Text = "Movements"; + tabPage4.UseVisualStyleBackColor = true; + // + // RemoveMButton + // + RemoveMButton.Location = new Point(126, 8); + RemoveMButton.Margin = new Padding(4, 3, 4, 3); + RemoveMButton.Name = "RemoveMButton"; + RemoveMButton.Size = new Size(88, 27); + RemoveMButton.TabIndex = 12; + RemoveMButton.Text = "Remove"; + RemoveMButton.UseVisualStyleBackColor = true; + RemoveMButton.Click += RemoveMButton_Click; + // + // AddMButton + // + AddMButton.Location = new Point(7, 8); + AddMButton.Margin = new Padding(4, 3, 4, 3); + AddMButton.Name = "AddMButton"; + AddMButton.Size = new Size(88, 27); + AddMButton.TabIndex = 11; + AddMButton.Text = "Add"; + AddMButton.UseVisualStyleBackColor = true; + AddMButton.Click += AddMButton_Click; + // + // MovementInfoPanel + // + MovementInfoPanel.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; + MovementInfoPanel.Controls.Add(NeedMoveMCheckBox); + MovementInfoPanel.Controls.Add(label22); + MovementInfoPanel.Controls.Add(DestMapComboBox); + MovementInfoPanel.Controls.Add(label18); + MovementInfoPanel.Controls.Add(DestYTextBox); + MovementInfoPanel.Controls.Add(label21); + MovementInfoPanel.Controls.Add(DestXTextBox); + MovementInfoPanel.Controls.Add(label16); + MovementInfoPanel.Controls.Add(SourceYTextBox); + MovementInfoPanel.Controls.Add(label20); + MovementInfoPanel.Controls.Add(SourceXTextBox); + MovementInfoPanel.Enabled = false; + MovementInfoPanel.Location = new Point(279, 40); + MovementInfoPanel.Margin = new Padding(4, 3, 4, 3); + MovementInfoPanel.Name = "MovementInfoPanel"; + MovementInfoPanel.Size = new Size(299, 237); + MovementInfoPanel.TabIndex = 14; + // + // NeedMoveMCheckBox + // + NeedMoveMCheckBox.AutoSize = true; + NeedMoveMCheckBox.Location = new Point(16, 142); + NeedMoveMCheckBox.Margin = new Padding(4, 3, 4, 3); + NeedMoveMCheckBox.Name = "NeedMoveMCheckBox"; + NeedMoveMCheckBox.Size = new Size(87, 19); + NeedMoveMCheckBox.TabIndex = 18; + NeedMoveMCheckBox.Text = "Need Move"; + NeedMoveMCheckBox.UseVisualStyleBackColor = true; + NeedMoveMCheckBox.CheckedChanged += NeedScriptMCheckBox_CheckedChanged; + // + // label22 + // + label22.AutoSize = true; + label22.Location = new Point(13, 43); + label22.Margin = new Padding(4, 0, 4, 0); + label22.Name = "label22"; + label22.Size = new Size(49, 15); + label22.TabIndex = 16; + label22.Text = "To Map:"; + // + // DestMapComboBox + // + DestMapComboBox.DropDownStyle = ComboBoxStyle.DropDownList; + DestMapComboBox.FormattingEnabled = true; + DestMapComboBox.Location = new Point(75, 38); + DestMapComboBox.Margin = new Padding(4, 3, 4, 3); + DestMapComboBox.Name = "DestMapComboBox"; + DestMapComboBox.Size = new Size(212, 23); + DestMapComboBox.TabIndex = 15; + DestMapComboBox.SelectedIndexChanged += DestMapComboBox_SelectedIndexChanged; + // + // label18 + // + label18.AutoSize = true; + label18.Location = new Point(138, 73); + label18.Margin = new Padding(4, 0, 4, 0); + label18.Name = "label18"; + label18.Size = new Size(32, 15); + label18.TabIndex = 14; + label18.Text = "To Y:"; + // + // DestYTextBox + // + DestYTextBox.Location = new Point(183, 69); + DestYTextBox.Margin = new Padding(4, 3, 4, 3); + DestYTextBox.MaxLength = 5; + DestYTextBox.Name = "DestYTextBox"; + DestYTextBox.Size = new Size(42, 23); + DestYTextBox.TabIndex = 12; + DestYTextBox.TextChanged += DestYTextBox_TextChanged; + // + // label21 + // + label21.AutoSize = true; + label21.Location = new Point(27, 73); + label21.Margin = new Padding(4, 0, 4, 0); + label21.Name = "label21"; + label21.Size = new Size(32, 15); + label21.TabIndex = 13; + label21.Text = "To X:"; + // + // DestXTextBox + // + DestXTextBox.Location = new Point(72, 69); + DestXTextBox.Margin = new Padding(4, 3, 4, 3); + DestXTextBox.MaxLength = 5; + DestXTextBox.Name = "DestXTextBox"; + DestXTextBox.Size = new Size(42, 23); + DestXTextBox.TabIndex = 11; + DestXTextBox.TextChanged += DestXTextBox_TextChanged; + // + // label16 + // + label16.AutoSize = true; + label16.Location = new Point(126, 13); + label16.Margin = new Padding(4, 0, 4, 0); + label16.Name = "label16"; + label16.Size = new Size(48, 15); + label16.TabIndex = 10; + label16.Text = "From Y:"; + // + // SourceYTextBox + // + SourceYTextBox.Location = new Point(183, 8); + SourceYTextBox.Margin = new Padding(4, 3, 4, 3); + SourceYTextBox.MaxLength = 5; + SourceYTextBox.Name = "SourceYTextBox"; + SourceYTextBox.Size = new Size(42, 23); + SourceYTextBox.TabIndex = 3; + SourceYTextBox.TextChanged += SourceYTextBox_TextChanged; + // + // label20 + // + label20.AutoSize = true; + label20.Location = new Point(15, 13); + label20.Margin = new Padding(4, 0, 4, 0); + label20.Name = "label20"; + label20.Size = new Size(48, 15); + label20.TabIndex = 3; + label20.Text = "From X:"; + // + // SourceXTextBox + // + SourceXTextBox.Location = new Point(72, 8); + SourceXTextBox.Margin = new Padding(4, 3, 4, 3); + SourceXTextBox.MaxLength = 5; + SourceXTextBox.Name = "SourceXTextBox"; + SourceXTextBox.Size = new Size(42, 23); + SourceXTextBox.TabIndex = 2; + SourceXTextBox.TextChanged += SourceXTextBox_TextChanged; + // + // MovementInfoListBox + // + MovementInfoListBox.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left; + MovementInfoListBox.FormattingEnabled = true; + MovementInfoListBox.ItemHeight = 15; + MovementInfoListBox.Location = new Point(7, 40); + MovementInfoListBox.Margin = new Padding(4, 3, 4, 3); + MovementInfoListBox.Name = "MovementInfoListBox"; + MovementInfoListBox.SelectionMode = SelectionMode.MultiExtended; + MovementInfoListBox.Size = new Size(264, 199); + MovementInfoListBox.TabIndex = 13; + MovementInfoListBox.SelectedIndexChanged += MovementInfoListBox_SelectedIndexChanged; + // + // LIVETab + // + LIVETab.Controls.Add(monsterTreeView); + LIVETab.Controls.Add(playerTreeView); + LIVETab.Location = new Point(4, 24); + LIVETab.Name = "LIVETab"; + LIVETab.Size = new Size(622, 287); + LIVETab.TabIndex = 6; + LIVETab.Text = "LIVE"; + LIVETab.UseVisualStyleBackColor = true; + // + // monsterTreeView + // + monsterTreeView.Location = new Point(319, -1); + monsterTreeView.Name = "monsterTreeView"; + monsterTreeView.Size = new Size(307, 288); + monsterTreeView.TabIndex = 1; + // + // playerTreeView + // + playerTreeView.Location = new Point(0, 0); + playerTreeView.Name = "playerTreeView"; + playerTreeView.Size = new Size(319, 287); + playerTreeView.TabIndex = 2; + // + // RemoveButton + // + RemoveButton.Location = new Point(147, 38); + RemoveButton.Margin = new Padding(4, 3, 4, 3); + RemoveButton.Name = "RemoveButton"; + RemoveButton.Size = new Size(88, 27); + RemoveButton.TabIndex = 6; + RemoveButton.Text = "Remove"; + RemoveButton.UseVisualStyleBackColor = true; + RemoveButton.Click += RemoveButton_Click; + // + // AddButton + // + AddButton.Location = new Point(14, 38); + AddButton.Margin = new Padding(4, 3, 4, 3); + AddButton.Name = "AddButton"; + AddButton.Size = new Size(88, 27); + AddButton.TabIndex = 5; + AddButton.Text = "Add"; + AddButton.UseVisualStyleBackColor = true; + AddButton.Click += AddButton_Click; + // + // MapInfoListBox + // + MapInfoListBox.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left; + MapInfoListBox.FormattingEnabled = true; + MapInfoListBox.ItemHeight = 15; + MapInfoListBox.Location = new Point(14, 72); + MapInfoListBox.Margin = new Padding(4, 3, 4, 3); + MapInfoListBox.Name = "MapInfoListBox"; + MapInfoListBox.SelectionMode = SelectionMode.MultiExtended; + MapInfoListBox.Size = new Size(220, 304); + MapInfoListBox.TabIndex = 7; + MapInfoListBox.SelectedIndexChanged += MapInfoListBox_SelectedIndexChanged; + // + // PasteMapButton + // + PasteMapButton.Location = new Point(336, 38); + PasteMapButton.Margin = new Padding(4, 3, 4, 3); + PasteMapButton.Name = "PasteMapButton"; + PasteMapButton.Size = new Size(88, 27); + PasteMapButton.TabIndex = 24; + PasteMapButton.Text = "Paste"; + PasteMapButton.UseVisualStyleBackColor = true; + PasteMapButton.Click += PasteMapButton_Click; + // + // CopyMapButton + // + CopyMapButton.Location = new Point(241, 38); + CopyMapButton.Margin = new Padding(4, 3, 4, 3); + CopyMapButton.Name = "CopyMapButton"; + CopyMapButton.Size = new Size(88, 27); + CopyMapButton.TabIndex = 23; + CopyMapButton.Text = "Copy"; + CopyMapButton.UseVisualStyleBackColor = true; + // + // ImportMapInfoButton + // + ImportMapInfoButton.Location = new Point(658, 5); + ImportMapInfoButton.Margin = new Padding(4, 3, 4, 3); + ImportMapInfoButton.Name = "ImportMapInfoButton"; + ImportMapInfoButton.Size = new Size(102, 27); + ImportMapInfoButton.TabIndex = 25; + ImportMapInfoButton.Text = "Import MapInfo"; + ImportMapInfoButton.UseVisualStyleBackColor = true; + ImportMapInfoButton.Click += ImportMapInfoButton_Click; + // + // ExportMapInfoButton + // + ExportMapInfoButton.Location = new Point(658, 38); + ExportMapInfoButton.Margin = new Padding(4, 3, 4, 3); + ExportMapInfoButton.Name = "ExportMapInfoButton"; + ExportMapInfoButton.Size = new Size(102, 27); + ExportMapInfoButton.TabIndex = 26; + ExportMapInfoButton.Text = "Export MapInfo"; + ExportMapInfoButton.UseVisualStyleBackColor = true; + ExportMapInfoButton.Click += ExportMapInfoButton_Click; + // + // ImportMongenButton + // + ImportMongenButton.Location = new Point(766, 3); + ImportMongenButton.Margin = new Padding(4, 3, 4, 3); + ImportMongenButton.Name = "ImportMongenButton"; + ImportMongenButton.Size = new Size(100, 27); + ImportMongenButton.TabIndex = 27; + ImportMongenButton.Text = "Import Spawns"; + ImportMongenButton.UseVisualStyleBackColor = true; + ImportMongenButton.Click += ImportMonGenButton_Click; + // + // ExportMongenButton + // + ExportMongenButton.Location = new Point(766, 38); + ExportMongenButton.Margin = new Padding(4, 3, 4, 3); + ExportMongenButton.Name = "ExportMongenButton"; + ExportMongenButton.Size = new Size(100, 27); + ExportMongenButton.TabIndex = 28; + ExportMongenButton.Text = "Export Spawns"; + ExportMongenButton.UseVisualStyleBackColor = true; + ExportMongenButton.Click += ExportMonGenButton_Click; + // + // VisualizerButton + // + VisualizerButton.Location = new Point(564, 5); + VisualizerButton.Margin = new Padding(4, 3, 4, 3); + VisualizerButton.Name = "VisualizerButton"; + VisualizerButton.Size = new Size(88, 27); + VisualizerButton.TabIndex = 31; + VisualizerButton.Text = "Visualizer"; + VisualizerButton.UseVisualStyleBackColor = true; + VisualizerButton.Click += VisualizerButton_Click; + // + // button2 + // + button2.Location = new Point(431, 38); + button2.Name = "button2"; + button2.Size = new Size(141, 28); + button2.TabIndex = 33; + button2.Text = "Map Viewer Dir"; + button2.UseVisualStyleBackColor = true; + button2.Click += SelectDirectoryButton_Click; + // + // MapInfoForm + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(886, 388); + Controls.Add(button2); + Controls.Add(VisualizerButton); + Controls.Add(ExportMongenButton); + Controls.Add(ImportMongenButton); + Controls.Add(ExportMapInfoButton); + Controls.Add(ImportMapInfoButton); + Controls.Add(PasteMapButton); + Controls.Add(CopyMapButton); + Controls.Add(MapTabs); + Controls.Add(RemoveButton); + Controls.Add(AddButton); + Controls.Add(MapInfoListBox); + Icon = (Icon)resources.GetObject("$this.Icon"); + Margin = new Padding(4, 3, 4, 3); + Name = "MapInfoForm"; + Text = "Map Info"; + FormClosed += MapInfoForm_FormClosed; + MapTabs.ResumeLayout(false); + tabPage1.ResumeLayout(false); + tabPage1.PerformLayout(); + ((ISupportInitialize)MinimapPreview).EndInit(); + tabPage6.ResumeLayout(false); + tabPage6.PerformLayout(); + tabPage3.ResumeLayout(false); + SafeZoneInfoPanel.ResumeLayout(false); + SafeZoneInfoPanel.PerformLayout(); + tabPage2.ResumeLayout(false); + RespawnInfoPanel.ResumeLayout(false); + RespawnInfoPanel.PerformLayout(); + tabPage4.ResumeLayout(false); + MovementInfoPanel.ResumeLayout(false); + MovementInfoPanel.PerformLayout(); + LIVETab.ResumeLayout(false); + ResumeLayout(false); + } + + #endregion + + private TabControl MapTabs; + private TabPage tabPage3; + private Button RemoveSZButton; + private Button AddSZButton; + private Panel SafeZoneInfoPanel; + private Label label12; + private TextBox SZYTextBox; + private Label label14; + private TextBox SizeTextBox; + private Label label17; + private TextBox SZXTextBox; + private CheckBox StartPointCheckBox; + private ListBox SafeZoneInfoListBox; + private TabPage tabPage2; + private Button RPasteButton; + private Button RCopyButton; + private Button RemoveRButton; + private Button AddRButton; + private ListBox RespawnInfoListBox; + private Panel RespawnInfoPanel; + private Label label24; + private TextBox DirectionTextBox; + private Label label8; + private TextBox DelayTextBox; + private Label label7; + private ComboBox MonsterInfoComboBox; + private Label label6; + private TextBox SpreadTextBox; + private Label label9; + private TextBox RYTextBox; + private Label label10; + private TextBox CountTextBox; + private Label label13; + private TextBox RXTextBox; + private TabPage tabPage4; + private Button RemoveMButton; + private Button AddMButton; + private Panel MovementInfoPanel; + private Label label22; + private ComboBox DestMapComboBox; + private Label label18; + private TextBox DestYTextBox; + private Label label21; + private TextBox DestXTextBox; + private Label label16; + private TextBox SourceYTextBox; + private Label label20; + private TextBox SourceXTextBox; + private ListBox MovementInfoListBox; + private Button RemoveButton; + private Button AddButton; + private ListBox MapInfoListBox; + private Button PasteMapButton; + private Button CopyMapButton; + private TabPage tabPage1; + private Label label15; + private TextBox BigMapTextBox; + private ComboBox LightsComboBox; + private Label label5; + private Label label1; + private Label label4; + private TextBox MapIndexTextBox; + private TextBox MiniMapTextBox; + private Label label2; + private TextBox MapNameTextBox; + private TextBox FileNameTextBox; + private Label label3; + private TabPage tabPage6; + private CheckBox LightningCheckbox; + private CheckBox FireCheckbox; + private CheckBox FightCheckbox; + private CheckBox NoReconnectCheckbox; + private CheckBox NoTeleportCheckbox; + private TextBox LightningTextbox; + private TextBox FireTextbox; + private TextBox NoReconnectTextbox; + private CheckBox NoNamesCheckbox; + private CheckBox NoDropMonsterCheckbox; + private CheckBox NoDropPlayerCheckbox; + private CheckBox NoThrowItemCheckbox; + private CheckBox NoPositionCheckbox; + private CheckBox NoDrugCheckbox; + private CheckBox NoRecallCheckbox; + private CheckBox NoEscapeCheckbox; + private CheckBox NoRandomCheckbox; + private Button ImportMapInfoButton; + private Button ExportMapInfoButton; + private Label label19; + private TextBox MapDarkLighttextBox; + private Button ImportMongenButton; + private Button ExportMongenButton; + private Button VisualizerButton; + private Label label34; + private TextBox RoutePathTextBox; + private CheckBox NoFightCheckbox; + private CheckBox NeedMoveMCheckBox; + private Label label11; + private TextBox MusicTextBox; + private Label label23; + private TextBox Randomtextbox; + private ToolTip toolTip1; + private CheckBox chkrespawnsave; + private CheckBox chkRespawnEnableTick; + private CheckBox NoTownTeleportCheckbox; + private CheckBox NoReincarnation; + private Button button1; + private Button button2; + private PictureBox MinimapPreview; + private TabPage LIVETab; + private TreeView monsterTreeView; + private TreeView playerTreeView; + } +} \ No newline at end of file diff --git a/Server.MirForms/Database/MapInfoForm.cs b/Server.MirForms/Database/MapInfoForm.cs new file mode 100644 index 0000000..d11525d --- /dev/null +++ b/Server.MirForms/Database/MapInfoForm.cs @@ -0,0 +1,1780 @@ +using Microsoft.VisualBasic.ApplicationServices; +using Server.MirDatabase; +using Server.MirEnvir; +using System.Diagnostics; +using System.Windows.Forms; +using Server.MirObjects; +using System.Threading; + +namespace Server +{ + public partial class MapInfoForm : Form + { + public Envir Envir => SMain.EditEnvir; + + public Envir PlayerEnvir => SMain.Envir; + + private List _selectedMapInfos; + private List _selectedSafeZoneInfos; + private List _selectedRespawnInfos; + private List _selectedMovementInfos; + private MapInfo _info; + private string selectedDirectory; // Field for storing the selected directory path + public MapInfoForm() + { + InitializeComponent(); + + LightsComboBox.Items.AddRange(Enum.GetValues(typeof(LightSetting)).Cast().ToArray()); + + List monsterInfoItems = new(); + Envir.MonsterInfoList.ForEach(x => monsterInfoItems.Add(x)); + MonsterInfoComboBox.DataSource = monsterInfoItems; + + UpdateInterface(); + + selectedDirectory = Properties.Settings.Default.selectedDirectory; + + } + private void MapInfoForm_FormClosed(object sender, FormClosedEventArgs e) + { + Envir.SaveDB(); + } + + + private void UpdateInterface() + { + //Group orderedMapInfoList = Envir.MapInfoList.OrderBy(m => m.Title).ToList(); + + if (MapInfoListBox.Items.Count != Envir.MapInfoList.Count) + { + MapInfoListBox.Items.Clear(); + DestMapComboBox.Items.Clear(); + + for (int i = 0; i < Envir.MapInfoList.Count; i++) + { + MapInfoListBox.Items.Add(Envir.MapInfoList[i]); + DestMapComboBox.Items.Add(Envir.MapInfoList[i]); + } + } + + _selectedMapInfos = MapInfoListBox.SelectedItems.Cast().ToList(); + + if (_selectedMapInfos == null || _selectedMapInfos.Count == 0) + { + tabPage1.Show(); + MapTabs.Enabled = false; + MapIndexTextBox.Text = string.Empty; + FileNameTextBox.Text = string.Empty; + MapNameTextBox.Text = string.Empty; + MiniMapTextBox.Text = string.Empty; + BigMapTextBox.Text = string.Empty; + LightsComboBox.SelectedItem = null; + MusicTextBox.Text = string.Empty; + + NoTeleportCheckbox.Checked = false; + NoReconnectCheckbox.Checked = false; + NoRandomCheckbox.Checked = false; + NoEscapeCheckbox.Checked = false; + NoRecallCheckbox.Checked = false; + NoDrugCheckbox.Checked = false; + + NoPositionCheckbox.Checked = false; + NoThrowItemCheckbox.Checked = false; + NoDropPlayerCheckbox.Checked = false; + NoDropMonsterCheckbox.Checked = false; + NoNamesCheckbox.Checked = false; + + FightCheckbox.Checked = false; + FireCheckbox.Checked = false; + LightningCheckbox.Checked = false; + NoReconnectTextbox.Text = string.Empty; + FireTextbox.Text = string.Empty; + LightningTextbox.Text = string.Empty; + MapDarkLighttextBox.Text = string.Empty; + //MineIndextextBox.Text = string.Empty; + return; + } + + + MapInfo mi = _selectedMapInfos[0]; + + MapTabs.Enabled = true; + + MapIndexTextBox.Text = mi.Index.ToString(); + FileNameTextBox.Text = mi.FileName; + MapNameTextBox.Text = mi.Title; + MiniMapTextBox.Text = mi.MiniMap.ToString(); + BigMapTextBox.Text = mi.BigMap.ToString(); + LightsComboBox.SelectedItem = mi.Light; + MusicTextBox.Text = mi.Music.ToString(); + + //map attributes + NoTeleportCheckbox.Checked = mi.NoTeleport; + NoReconnectCheckbox.Checked = mi.NoReconnect; + NoReconnectTextbox.Text = mi.NoReconnectMap; + NoRandomCheckbox.Checked = mi.NoRandom; + NoEscapeCheckbox.Checked = mi.NoEscape; + NoRecallCheckbox.Checked = mi.NoRecall; + NoDrugCheckbox.Checked = mi.NoDrug; + NoPositionCheckbox.Checked = mi.NoPosition; + NoThrowItemCheckbox.Checked = mi.NoThrowItem; + NoDropPlayerCheckbox.Checked = mi.NoDropPlayer; + NoDropMonsterCheckbox.Checked = mi.NoDropMonster; + NoNamesCheckbox.Checked = mi.NoNames; + FightCheckbox.Checked = mi.Fight; + NoFightCheckbox.Checked = mi.NoFight; + FireCheckbox.Checked = mi.Fire; + FireTextbox.Text = mi.FireDamage.ToString(); + LightningCheckbox.Checked = mi.Lightning; + LightningTextbox.Text = mi.LightningDamage.ToString(); + MapDarkLighttextBox.Text = mi.MapDarkLight.ToString(); + + NoTownTeleportCheckbox.Checked = mi.NoTownTeleport; + NoReincarnation.Checked = mi.NoReincarnation; + for (int i = 1; i < _selectedMapInfos.Count; i++) + { + mi = _selectedMapInfos[i]; + + if (MapIndexTextBox.Text != mi.Index.ToString()) MapIndexTextBox.Text = string.Empty; + if (FileNameTextBox.Text != mi.FileName) FileNameTextBox.Text = string.Empty; + if (MapNameTextBox.Text != mi.Title) MapNameTextBox.Text = string.Empty; + if (MiniMapTextBox.Text != mi.MiniMap.ToString()) MiniMapTextBox.Text = string.Empty; + if (BigMapTextBox.Text != mi.BigMap.ToString()) BigMapTextBox.Text = string.Empty; + if (LightsComboBox.SelectedItem == null || (LightSetting)LightsComboBox.SelectedItem != mi.Light) LightsComboBox.SelectedItem = null; + if (MusicTextBox.Text != mi.Music.ToString()) MusicTextBox.Text = string.Empty; + + //map attributes + if (NoTeleportCheckbox.Checked != mi.NoTeleport) NoTeleportCheckbox.Checked = false; + if (NoReconnectCheckbox.Checked != mi.NoReconnect) NoReconnectCheckbox.Checked = false; + if (NoReconnectTextbox.Text != mi.NoReconnectMap) NoReconnectTextbox.Text = string.Empty; + if (NoRandomCheckbox.Checked != mi.NoRandom) NoRandomCheckbox.Checked = false; + if (NoEscapeCheckbox.Checked != mi.NoEscape) NoEscapeCheckbox.Checked = false; + if (NoRecallCheckbox.Checked != mi.NoRecall) NoRecallCheckbox.Checked = false; + if (NoDrugCheckbox.Checked != mi.NoDrug) NoDrugCheckbox.Checked = false; + if (NoPositionCheckbox.Checked != mi.NoPosition) NoPositionCheckbox.Checked = false; + if (NoThrowItemCheckbox.Checked != mi.NoThrowItem) NoThrowItemCheckbox.Checked = false; + if (NoDropPlayerCheckbox.Checked != mi.NoDropPlayer) NoDropPlayerCheckbox.Checked = false; + if (NoDropMonsterCheckbox.Checked != mi.NoDropMonster) NoDropMonsterCheckbox.Checked = false; + if (NoNamesCheckbox.Checked != mi.NoNames) NoNamesCheckbox.Checked = false; + if (FightCheckbox.Checked != mi.Fight) FightCheckbox.Checked = false; + if (NoFightCheckbox.Checked != mi.NoFight) NoFightCheckbox.Checked = false; + if (FireCheckbox.Checked != mi.Fire) FireCheckbox.Checked = false; + if (FireTextbox.Text != mi.FireDamage.ToString()) FireTextbox.Text = string.Empty; + if (LightningCheckbox.Checked != mi.Lightning) LightningCheckbox.Checked = false; + if (LightningTextbox.Text != mi.LightningDamage.ToString()) LightningTextbox.Text = string.Empty; + if (MapDarkLighttextBox.Text != mi.MapDarkLight.ToString()) MapDarkLighttextBox.Text = string.Empty; + if (NoTownTeleportCheckbox.Checked != mi.NoTownTeleport) NoTownTeleportCheckbox.Checked = false; + if (NoReincarnation.Checked != mi.NoReincarnation) NoReincarnation.Checked = false; + } + + UpdateSafeZoneInterface(); + UpdateRespawnInterface(); + UpdateMovementInterface(); + UpdateMineZoneInterface(); + UpdatePlayersViewInterface(); + UpdateMonstersViewInterface(); + } + private void UpdateSafeZoneInterface() + { + if (_selectedMapInfos.Count != 1) + { + SafeZoneInfoListBox.Items.Clear(); + if (_selectedSafeZoneInfos != null && _selectedSafeZoneInfos.Count > 0) + _selectedSafeZoneInfos.Clear(); + _info = null; + + SafeZoneInfoPanel.Enabled = false; + + SZXTextBox.Text = string.Empty; + SZYTextBox.Text = string.Empty; + StartPointCheckBox.CheckState = CheckState.Unchecked; + return; + } + + if (_info != _selectedMapInfos[0]) + { + SafeZoneInfoListBox.Items.Clear(); + _info = _selectedMapInfos[0]; + } + + if (SafeZoneInfoListBox.Items.Count != _info.SafeZones.Count) + { + SafeZoneInfoListBox.Items.Clear(); + for (int i = 0; i < _info.SafeZones.Count; i++) SafeZoneInfoListBox.Items.Add(_info.SafeZones[i]); + } + _selectedSafeZoneInfos = SafeZoneInfoListBox.SelectedItems.Cast().ToList(); + + if (_selectedSafeZoneInfos.Count == 0) + { + SafeZoneInfoPanel.Enabled = false; + + SZXTextBox.Text = string.Empty; + SZYTextBox.Text = string.Empty; + StartPointCheckBox.CheckState = CheckState.Unchecked; + return; + } + + SafeZoneInfo info = _selectedSafeZoneInfos[0]; + SafeZoneInfoPanel.Enabled = true; + + SZXTextBox.Text = info.Location.X.ToString(); + SZYTextBox.Text = info.Location.Y.ToString(); + StartPointCheckBox.CheckState = info.StartPoint ? CheckState.Checked : CheckState.Unchecked; + SizeTextBox.Text = info.Size.ToString(); + + + for (int i = 1; i < _selectedSafeZoneInfos.Count; i++) + { + info = _selectedSafeZoneInfos[i]; + + if (SZXTextBox.Text != info.Location.X.ToString()) SZXTextBox.Text = string.Empty; + if (SZYTextBox.Text != info.Location.Y.ToString()) SZYTextBox.Text = string.Empty; + if (StartPointCheckBox.Checked != info.StartPoint) StartPointCheckBox.CheckState = CheckState.Indeterminate; + if (SizeTextBox.Text != info.Size.ToString()) SizeTextBox.Text = string.Empty; + } + } + private void UpdateRespawnInterface() + { + if (_selectedMapInfos.Count != 1) + { + RespawnInfoListBox.Items.Clear(); + if (_selectedRespawnInfos != null && _selectedRespawnInfos.Count > 0) + _selectedRespawnInfos.Clear(); + _info = null; + + RespawnInfoPanel.Enabled = false; + + MonsterInfoComboBox.SelectedItem = null; + RXTextBox.Text = string.Empty; + RYTextBox.Text = string.Empty; + CountTextBox.Text = string.Empty; + SpreadTextBox.Text = string.Empty; + DelayTextBox.Text = string.Empty; + chkrespawnsave.Enabled = false; + chkRespawnEnableTick.Checked = false; + chkrespawnsave.Checked = false; + DirectionTextBox.Text = string.Empty; + RoutePathTextBox.Text = string.Empty; + Randomtextbox.Text = string.Empty; + return; + } + + if (_info != _selectedMapInfos[0]) + { + RespawnInfoListBox.Items.Clear(); + _info = _selectedMapInfos[0]; + } + + if (RespawnInfoListBox.Items.Count != _info.Respawns.Count) + { + RespawnInfoListBox.Items.Clear(); + for (int i = 0; i < _info.Respawns.Count; i++) RespawnInfoListBox.Items.Add(_info.Respawns[i]); + } + _selectedRespawnInfos = RespawnInfoListBox.SelectedItems.Cast().ToList(); + + if (_selectedRespawnInfos.Count == 0) + { + RespawnInfoPanel.Enabled = false; + + MonsterInfoComboBox.SelectedItem = null; + RXTextBox.Text = string.Empty; + RYTextBox.Text = string.Empty; + CountTextBox.Text = string.Empty; + SpreadTextBox.Text = string.Empty; + DelayTextBox.Text = string.Empty; + chkrespawnsave.Enabled = false; + chkRespawnEnableTick.Checked = false; + chkrespawnsave.Checked = false; + DirectionTextBox.Text = string.Empty; + RoutePathTextBox.Text = string.Empty; + Randomtextbox.Text = string.Empty; + return; + } + + RespawnInfo info = _selectedRespawnInfos[0]; + RespawnInfoPanel.Enabled = true; + + MonsterInfoComboBox.SelectedItem = Envir.MonsterInfoList.FirstOrDefault(x => x.Index == info.MonsterIndex); + RXTextBox.Text = info.Location.X.ToString(); + RYTextBox.Text = info.Location.Y.ToString(); + CountTextBox.Text = info.Count.ToString(); + SpreadTextBox.Text = info.Spread.ToString(); + DelayTextBox.Text = info.RespawnTicks == 0 ? info.Delay.ToString() : info.RespawnTicks.ToString(); + chkrespawnsave.Enabled = info.RespawnTicks != 0; + chkRespawnEnableTick.Checked = info.RespawnTicks != 0; + chkrespawnsave.Checked = ((info.RespawnTicks != 0) && (info.SaveRespawnTime)) ? true : false; + DirectionTextBox.Text = info.Direction.ToString(); + RoutePathTextBox.Text = info.RoutePath; + Randomtextbox.Enabled = info.RespawnTicks == 0; + Randomtextbox.Text = info.RandomDelay.ToString(); + + for (int i = 1; i < _selectedRespawnInfos.Count; i++) + { + info = _selectedRespawnInfos[i]; + + if (MonsterInfoComboBox.SelectedItem != Envir.MonsterInfoList.FirstOrDefault(x => x.Index == info.MonsterIndex)) MonsterInfoComboBox.SelectedItem = null; + if (RXTextBox.Text != info.Location.X.ToString()) RXTextBox.Text = string.Empty; + if (RYTextBox.Text != info.Location.Y.ToString()) RYTextBox.Text = string.Empty; + if (CountTextBox.Text != info.Count.ToString()) CountTextBox.Text = string.Empty; + if (SpreadTextBox.Text != info.Spread.ToString()) SpreadTextBox.Text = string.Empty; + if (chkRespawnEnableTick.Checked != (info.RespawnTicks == 0)) + { + DelayTextBox.Text = string.Empty; + chkrespawnsave.Enabled = false; + chkrespawnsave.Checked = false; + Randomtextbox.Text = string.Empty; + } + else + { + if (chkRespawnEnableTick.Checked) + { + if (DelayTextBox.Text != info.RespawnTicks.ToString()) DelayTextBox.Text = string.Empty; + if (chkrespawnsave.Checked != info.SaveRespawnTime) + { + chkrespawnsave.Enabled = false; + chkrespawnsave.Checked = false; + } + Randomtextbox.Enabled = false; + Randomtextbox.Text = string.Empty; + } + else + { + if (DelayTextBox.Text != info.Delay.ToString()) DelayTextBox.Text = string.Empty; + chkrespawnsave.Enabled = false; + chkrespawnsave.Checked = false; + if (Randomtextbox.Text != info.RandomDelay.ToString()) Randomtextbox.Text = string.Empty; + } + } + if (DirectionTextBox.Text != info.Direction.ToString()) DirectionTextBox.Text = string.Empty; + if (RoutePathTextBox.Text != info.RoutePath) RoutePathTextBox.Text = string.Empty; + } + } + private void UpdateMovementInterface() + { + if (_selectedMapInfos.Count != 1) + { + MovementInfoListBox.Items.Clear(); + if (_selectedMovementInfos != null && _selectedMovementInfos.Count > 0) + _selectedMovementInfos.Clear(); + _info = null; + + MovementInfoPanel.Enabled = false; + + SourceXTextBox.Text = string.Empty; + SourceYTextBox.Text = string.Empty; + DestMapComboBox.SelectedItem = null; + DestXTextBox.Text = string.Empty; + DestYTextBox.Text = string.Empty; + return; + } + + if (_info != _selectedMapInfos[0]) + { + MovementInfoListBox.Items.Clear(); + _info = _selectedMapInfos[0]; + } + + if (MovementInfoListBox.Items.Count != _info.Movements.Count) + { + MovementInfoListBox.Items.Clear(); + for (int i = 0; i < _info.Movements.Count; i++) MovementInfoListBox.Items.Add(_info.Movements[i]); + } + _selectedMovementInfos = MovementInfoListBox.SelectedItems.Cast().ToList(); + + if (_selectedMovementInfos.Count == 0) + { + MovementInfoPanel.Enabled = false; + + SourceXTextBox.Text = string.Empty; + SourceYTextBox.Text = string.Empty; + NeedMoveMCheckBox.Checked = false; + DestMapComboBox.SelectedItem = null; + DestXTextBox.Text = string.Empty; + DestYTextBox.Text = string.Empty; + return; + } + + MovementInfo info = _selectedMovementInfos[0]; + + MovementInfoPanel.Enabled = true; + + SourceXTextBox.Text = info.Source.X.ToString(); + SourceYTextBox.Text = info.Source.Y.ToString(); + NeedMoveMCheckBox.Checked = info.NeedMove; + DestMapComboBox.SelectedItem = Envir.MapInfoList.FirstOrDefault(x => x.Index == info.MapIndex); + DestXTextBox.Text = info.Destination.X.ToString(); + DestYTextBox.Text = info.Destination.Y.ToString(); + + for (int i = 1; i < _selectedMovementInfos.Count; i++) + { + info = _selectedMovementInfos[i]; + + SourceXTextBox.Text = info.Source.X.ToString(); + SourceYTextBox.Text = info.Source.Y.ToString(); + DestMapComboBox.SelectedItem = Envir.MapInfoList.FirstOrDefault(x => x.Index == info.MapIndex); + DestXTextBox.Text = info.Destination.X.ToString(); + DestYTextBox.Text = info.Destination.Y.ToString(); + + if (SourceXTextBox.Text != info.Source.X.ToString()) SourceXTextBox.Text = string.Empty; + if (SourceYTextBox.Text != info.Source.Y.ToString()) SourceYTextBox.Text = string.Empty; + + if (DestMapComboBox.SelectedItem != Envir.MapInfoList.FirstOrDefault(x => x.Index == info.MapIndex)) DestMapComboBox.SelectedItem = null; + + if (DestXTextBox.Text != info.Destination.X.ToString()) DestXTextBox.Text = string.Empty; + if (DestYTextBox.Text != info.Destination.Y.ToString()) DestYTextBox.Text = string.Empty; + } + + } + + private void UpdateMineZoneInterface() + { + } + + private void UpdateMonstersViewInterface() + { + if (_selectedMapInfos.Count != 1) + { + monsterTreeView.Nodes.Clear(); + return; + } + if (_info != _selectedMapInfos[0]) + { + monsterTreeView.Nodes.Clear(); + _info = _selectedMapInfos[0]; + } + + List monsters = new List(); + + foreach (MapObject obj in PlayerEnvir.Objects) + { + if (obj == null) continue; + if (obj.Race != ObjectType.Monster) continue; + if (obj.Master != null) continue; + + monsters.Add(obj); + } + + Dictionary monsterCount = new Dictionary(); + + foreach (MapObject monster in monsters) + { + if (monster == null) continue; + if (monster.CurrentMapIndex != _info.Index) continue; + if (string.IsNullOrEmpty(monster.Name)) continue; + + // Update the count in the dictionary + if (monsterCount.ContainsKey(monster.Name)) + { + monsterCount[monster.Name]++; + } + else + { + monsterCount[monster.Name] = 1; + } + } + + foreach (var entry in monsterCount) + { + string nodeName = $"Name: {entry.Key}, Amount: {entry.Value}"; + TreeNode parentNode = monsterTreeView.Nodes.Add(nodeName); + + var matchingMonsters = monsters.Where(monster => monster.Name == entry.Key && monster.CurrentMapIndex == _info.Index); + + foreach (MapObject matchingMonster in matchingMonsters) + { + TreeNode subNode = parentNode.Nodes.Add($"Name: {matchingMonster.Name},X: {matchingMonster.CurrentLocation.X}, Y: {matchingMonster.CurrentLocation.Y} | Health: {matchingMonster.Health}/{matchingMonster.MaxHealth}"); + + if (matchingMonster.Health == 0) + { + subNode.ForeColor = Color.Red; + } + } + } + } + + private void UpdatePlayersViewInterface() + { + if (_selectedMapInfos.Count != 1) + { + playerTreeView.Nodes.Clear(); + return; + } + if (_info != _selectedMapInfos[0]) + { + playerTreeView.Nodes.Clear(); + _info = _selectedMapInfos[0]; + } + + // Clear existing nodes + playerTreeView.Nodes.Clear(); + + foreach (PlayerObject player in PlayerEnvir.Players) + { + if (player == null || player.CurrentMapIndex != _info.Index) + continue; + + TreeNode playerNode = new TreeNode($"Name: {player.Name}"); + + #region Location + + TreeNode locationNode = new TreeNode("Location"); + locationNode.Nodes.Add($"Map: {player.CurrentMap.Info.Title}, File: {player.CurrentMap.Info.FileName}"); + locationNode.Nodes.Add($"X: {player.CurrentLocation.X}, Y: {player.CurrentLocation.Y}"); + + playerNode.Nodes.Add(locationNode); + + #endregion + + #region Stats + + TreeNode statsNode = new TreeNode("Stats"); + statsNode.Nodes.Add($"Health: {player.HP}/{player.MaxHealth}"); + statsNode.Nodes.Add($"Mana: {player.MP}/{player.Stats[Stat.MP]}"); + statsNode.Nodes.Add($"Level: {player.Level}"); + statsNode.Nodes.Add($"EXP: {string.Format("{0:#0.##%}", player.Experience / (double)player.MaxExperience)}"); + statsNode.Nodes.Add($"AC: {player.Stats[Stat.MinAC]}/{player.Stats[Stat.MaxAC]}"); + statsNode.Nodes.Add($"AMC: {player.Stats[Stat.MinMAC]}/{player.Stats[Stat.MaxMAC]}"); + statsNode.Nodes.Add($"DC: {player.Stats[Stat.MinDC]}/{player.Stats[Stat.MaxDC]}"); + statsNode.Nodes.Add($"MC: {player.Stats[Stat.MinMC]}/{player.Stats[Stat.MaxMC]}"); + statsNode.Nodes.Add($"SC: {player.Stats[Stat.MinSC]}/{player.Stats[Stat.MaxSC]}"); + statsNode.Nodes.Add($"Attack Speed: {player.Stats[Stat.AttackSpeed]}"); + statsNode.Nodes.Add($"ACC: {player.Stats[Stat.Accuracy]}"); + statsNode.Nodes.Add($"AGIL: {player.Stats[Stat.Agility]}"); + + playerNode.Nodes.Add(statsNode); + + #endregion + + #region Pets + + List pets = new List(); + Dictionary petCount = new Dictionary(); + + TreeNode petNode = new TreeNode("Pets"); + + playerNode.Nodes.Add(petNode); + + foreach (MonsterObject pet in player.Pets) + { + pets.Add(pet); + + if (petCount.ContainsKey(pet.Name)) + { + petCount[pet.Name]++; + } + else + { + petCount[pet.Name] = 1; + } + } + + foreach (var entry in petCount) + { + string nodeName = $"Name: {entry.Key}, Amount: {entry.Value}"; + TreeNode parentNode = petNode.Nodes.Add(nodeName); + + var matchingPets = pets.Where(pet => pet.Name == entry.Key); + + foreach (MonsterObject matchingPet in matchingPets) + { + TreeNode subNode = parentNode.Nodes.Add($"Name: {matchingPet.Name}"); + + if (matchingPet.Health == 0) + { + subNode.ForeColor = Color.Red; + } + + TreeNode LocationNode = subNode.Nodes.Add("Location"); + + TreeNode MapName = LocationNode.Nodes.Add($"Map: {matchingPet.CurrentMap.Info.Title}, File: {matchingPet.CurrentMap.Info.FileName}"); + + TreeNode Coords = LocationNode.Nodes.Add($"X: {matchingPet.CurrentLocation.X}, Y: {matchingPet.CurrentLocation.Y}"); + + TreeNode StatsNode = subNode.Nodes.Add("Stats"); + + TreeNode HealthNode = StatsNode.Nodes.Add($"Health: {matchingPet.Health}/{matchingPet.MaxHealth}"); + + TreeNode PetLevelNode = StatsNode.Nodes.Add($"Level: {matchingPet.PetLevel}"); + } + } + + #endregion + + + + playerTreeView.Nodes.Add(playerNode); + } + } + + private void RefreshMapList() + { + MapInfoListBox.SelectedIndexChanged -= MapInfoListBox_SelectedIndexChanged; + + List selected = new List(); + + for (int i = 0; i < MapInfoListBox.Items.Count; i++) selected.Add(MapInfoListBox.GetSelected(i)); + MapInfoListBox.Items.Clear(); + for (int i = 0; i < Envir.MapInfoList.Count; i++) MapInfoListBox.Items.Add(Envir.MapInfoList[i]); + for (int i = 0; i < selected.Count; i++) MapInfoListBox.SetSelected(i, selected[i]); + + MapInfoListBox.SelectedIndexChanged += MapInfoListBox_SelectedIndexChanged; + } + private void RefreshSafeZoneList() + { + SafeZoneInfoListBox.SelectedIndexChanged -= SafeZoneInfoListBox_SelectedIndexChanged; + + List selected = new List(); + + for (int i = 0; i < SafeZoneInfoListBox.Items.Count; i++) selected.Add(SafeZoneInfoListBox.GetSelected(i)); + SafeZoneInfoListBox.Items.Clear(); + for (int i = 0; i < _info.SafeZones.Count; i++) SafeZoneInfoListBox.Items.Add(_info.SafeZones[i]); + for (int i = 0; i < selected.Count; i++) SafeZoneInfoListBox.SetSelected(i, selected[i]); + + SafeZoneInfoListBox.SelectedIndexChanged += SafeZoneInfoListBox_SelectedIndexChanged; + } + private void RefreshRespawnList() + { + RespawnInfoListBox.SelectedIndexChanged -= RespawnInfoListBox_SelectedIndexChanged; + + List selected = new List(); + + for (int i = 0; i < RespawnInfoListBox.Items.Count; i++) + selected.Add(RespawnInfoListBox.GetSelected(i)); + + RespawnInfoListBox.Items.Clear(); + + for (int i = 0; i < _info.Respawns.Count; i++) + RespawnInfoListBox.Items.Add(_info.Respawns[i]); + + for (int i = 0; i < selected.Count; i++) + RespawnInfoListBox.SetSelected(i, selected[i]); + + RespawnInfoListBox.SelectedIndexChanged += RespawnInfoListBox_SelectedIndexChanged; + } + private void RefreshMovementList() + { + MovementInfoListBox.SelectedIndexChanged -= MovementInfoListBox_SelectedIndexChanged; + + List selected = new List(); + + for (int i = 0; i < MovementInfoListBox.Items.Count; i++) selected.Add(MovementInfoListBox.GetSelected(i)); + MovementInfoListBox.Items.Clear(); + for (int i = 0; i < _info.Movements.Count; i++) MovementInfoListBox.Items.Add(_info.Movements[i]); + for (int i = 0; i < selected.Count; i++) MovementInfoListBox.SetSelected(i, selected[i]); + + MovementInfoListBox.SelectedIndexChanged += MovementInfoListBox_SelectedIndexChanged; + } + + private void RefreshMineZoneList() + { + } + + private void AddButton_Click(object sender, EventArgs e) + { + Envir.CreateMapInfo(); + UpdateInterface(); + } + private void RemoveButton_Click(object sender, EventArgs e) + { + if (_selectedMapInfos.Count == 0) return; + + if (MessageBox.Show("Are you sure you want to remove the selected maps?", "Remove Maps?", MessageBoxButtons.YesNo) != DialogResult.Yes) return; + + for (int i = 0; i < _selectedMapInfos.Count; i++) Envir.Remove(_selectedMapInfos[i]); + + if (Envir.MapInfoList.Count == 0) Envir.MapIndex = 0; + + MapTabs.SelectTab(0); + + UpdateInterface(); + } + private void MapInfoListBox_SelectedIndexChanged(object sender, EventArgs e) + { + SafeZoneInfoListBox.Items.Clear(); + RespawnInfoListBox.Items.Clear(); + MovementInfoListBox.Items.Clear(); + playerTreeView.Nodes.Clear(); + monsterTreeView.Nodes.Clear(); + UpdateInterface(); + } + private void FileNameTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedMapInfos.Count; i++) + _selectedMapInfos[i].FileName = ActiveControl.Text; + } + private void MapNameTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedMapInfos.Count; i++) + _selectedMapInfos[i].Title = ActiveControl.Text; + + RefreshMapList(); + } + private void MiniMapTextBox_TextChanged(object sender, EventArgs e) + { + if (!ushort.TryParse(MiniMapTextBox.Text, out ushort temp)) + { + MiniMapTextBox.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + MiniMapTextBox.BackColor = SystemColors.Window; + + for (int i = 0; i < _selectedMapInfos.Count; i++) + _selectedMapInfos[i].MiniMap = temp; + + LoadImage(temp); + } + private void LoadImage(ushort miniMapValue) + { + string imagePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "envir", "Previews", "Minimaps", miniMapValue + ".png"); + + if (File.Exists(imagePath)) + { + MinimapPreview.Image = Image.FromFile(imagePath); + MinimapPreview.SizeMode = PictureBoxSizeMode.StretchImage; + } + else + { + MinimapPreview.Image = null; + } + } + private void LightsComboBox_SelectedIndexChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedMapInfos.Count; i++) + _selectedMapInfos[i].Light = (LightSetting)LightsComboBox.SelectedItem; + } + + + private void AddSZButton_Click(object sender, EventArgs e) + { + if (_info == null) return; + + _info.CreateSafeZone(); + UpdateSafeZoneInterface(); + } + private void RemoveSZButton_Click(object sender, EventArgs e) + { + if (_selectedSafeZoneInfos.Count == 0) return; + + if (MessageBox.Show("Are you sure you want to remove the selected SafeZones?", "Remove SafeZones?", MessageBoxButtons.YesNo) != DialogResult.Yes) return; + + for (int i = 0; i < _selectedSafeZoneInfos.Count; i++) _info.SafeZones.Remove(_selectedSafeZoneInfos[i]); + + UpdateSafeZoneInterface(); + } + private void SafeZoneInfoListBox_SelectedIndexChanged(object sender, EventArgs e) + { + UpdateSafeZoneInterface(); + } + private void SZXTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + int temp; + + if (!int.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedSafeZoneInfos.Count; i++) + _selectedSafeZoneInfos[i].Location.X = temp; + + RefreshSafeZoneList(); + } + private void SZYTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + int temp; + + if (!int.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedSafeZoneInfos.Count; i++) + _selectedSafeZoneInfos[i].Location.Y = temp; + + RefreshSafeZoneList(); + } + private void SizeTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + ushort temp; + + if (!ushort.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedSafeZoneInfos.Count; i++) + _selectedSafeZoneInfos[i].Size = temp; + } + private void StartPointCheckBox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedSafeZoneInfos.Count; i++) + _selectedSafeZoneInfos[i].StartPoint = StartPointCheckBox.Checked; + + RefreshSafeZoneList(); + } + + + + private void AddRButton_Click(object sender, EventArgs e) + { + if (_info == null) return; + + _info.CreateRespawnInfo(); + UpdateRespawnInterface(); + } + private void RemoveRButton_Click(object sender, EventArgs e) + { + if (_selectedRespawnInfos.Count == 0) return; + + if (MessageBox.Show("Are you sure you want to remove the selected Respawns?", "Remove Respawns?", MessageBoxButtons.YesNo) != DialogResult.Yes) return; + + for (int i = 0; i < _selectedRespawnInfos.Count; i++) _info.Respawns.Remove(_selectedRespawnInfos[i]); + + UpdateRespawnInterface(); + } + private void RespawnInfoListBox_SelectedIndexChanged(object sender, EventArgs e) + { + UpdateRespawnInterface(); + } + private void MonsterInfoComboBox_SelectedIndexChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + MonsterInfo info = MonsterInfoComboBox.SelectedItem as MonsterInfo; + + if (info == null) return; + + for (int i = 0; i < _selectedRespawnInfos.Count; i++) + _selectedRespawnInfos[i].MonsterIndex = info.Index; + + RefreshRespawnList(); + + } + private void RXTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + int temp; + + if (!int.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedRespawnInfos.Count; i++) + _selectedRespawnInfos[i].Location.X = temp; + + RefreshRespawnList(); + } + private void RYTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + int temp; + + if (!int.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedRespawnInfos.Count; i++) + _selectedRespawnInfos[i].Location.Y = temp; + + RefreshRespawnList(); + } + private void CountTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + ushort temp; + + if (!ushort.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedRespawnInfos.Count; i++) + _selectedRespawnInfos[i].Count = temp; + + RefreshRespawnList(); + } + private void SpreadTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + ushort temp; + + if (!ushort.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedRespawnInfos.Count; i++) + _selectedRespawnInfos[i].Spread = temp; + + RefreshRespawnList(); + } + private void DelayTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + ushort temp; + + if (!ushort.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedRespawnInfos.Count; i++) + { + if (chkRespawnEnableTick.Checked) + { + _selectedRespawnInfos[i].RespawnTicks = Math.Max((ushort)1, temp);//you can never have respawnticks set to 0 or it would bug the entire thing really + _selectedRespawnInfos[i].Delay = 0; + } + else + { + _selectedRespawnInfos[i].Delay = temp; + _selectedRespawnInfos[i].RespawnTicks = 0; + } + } + + RefreshRespawnList(); + } + private void DirectionTextBox_TextChanged(object sender, EventArgs e) + { + + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedRespawnInfos.Count; i++) + _selectedRespawnInfos[i].Direction = temp; + + RefreshRespawnList(); + } + + private void RoutePathTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedRespawnInfos.Count; i++) + _selectedRespawnInfos[i].RoutePath = ActiveControl.Text; + + RefreshRespawnList(); + } + + private void RPasteButton_Click(object sender, EventArgs e) + { + if (_info == null) return; + + string data = Clipboard.GetText(); + + if (!data.StartsWith("Respawn", StringComparison.OrdinalIgnoreCase)) + { + MessageBox.Show("Cannot Paste, Copied data is not Respawn Information."); + return; + } + + + string[] respawns = data.Split(new[] { '\t' }, StringSplitOptions.RemoveEmptyEntries); + + + for (int i = 1; i < respawns.Length; i++) + { + RespawnInfo info = RespawnInfo.FromText(respawns[i]); + + if (info == null) continue; + + _info.Respawns.Add(info); + } + + UpdateRespawnInterface(); + } + //RCopy + + + + + private void AddMButton_Click(object sender, EventArgs e) + { + if (_info == null) return; + + _info.CreateMovementInfo(); + UpdateMovementInterface(); + } + private void RemoveMButton_Click(object sender, EventArgs e) + { + if (_selectedMovementInfos.Count == 0) return; + + if (MessageBox.Show("Are you sure you want to remove the selected Movements?", "Remove Movements?", MessageBoxButtons.YesNo) != DialogResult.Yes) return; + + for (int i = 0; i < _selectedMovementInfos.Count; i++) _info.Movements.Remove(_selectedMovementInfos[i]); + + UpdateMovementInterface(); + } + private void SourceXTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + int temp; + + if (!int.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedMovementInfos.Count; i++) + _selectedMovementInfos[i].Source.X = temp; + + RefreshMovementList(); + } + private void SourceYTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + int temp; + + if (!int.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedMovementInfos.Count; i++) + _selectedMovementInfos[i].Source.Y = temp; + + RefreshMovementList(); + } + private void DestXTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + int temp; + + if (!int.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedMovementInfos.Count; i++) + _selectedMovementInfos[i].Destination.X = temp; + + RefreshMovementList(); + } + private void DestYTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + int temp; + + if (!int.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedMovementInfos.Count; i++) + _selectedMovementInfos[i].Destination.Y = temp; + + RefreshMovementList(); + } + private void DestMapComboBox_SelectedIndexChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + MapInfo info = DestMapComboBox.SelectedItem as MapInfo; + + if (info == null) return; + + for (int i = 0; i < _selectedMovementInfos.Count; i++) + _selectedMovementInfos[i].MapIndex = info.Index; + + RefreshMovementList(); + + } + private void NeedHoleMCheckBox_CheckedChanged(object sender, EventArgs e) + { + } + + private void NeedScriptMCheckBox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedMovementInfos.Count; i++) + _selectedMovementInfos[i].NeedMove = NeedMoveMCheckBox.Checked; + } + + private void MovementInfoListBox_SelectedIndexChanged(object sender, EventArgs e) + { + UpdateMovementInterface(); + } + + private void PasteMapButton_Click(object sender, EventArgs e) + { + string data = Clipboard.GetText(); + + if (!data.StartsWith("Map", StringComparison.OrdinalIgnoreCase)) + { + MessageBox.Show("Cannot Paste, Copied data is not Map Information."); + return; + } + + + string[] maps = data.Split(new[] { '\t' }, StringSplitOptions.RemoveEmptyEntries); + + + for (int i = 1; i < maps.Length; i++) + MapInfo.FromText(maps[i]); + + UpdateInterface(); + } + + private void BigMapTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + ushort temp; + + if (!ushort.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedMapInfos.Count; i++) + _selectedMapInfos[i].BigMap = temp; + } + + + + private void NoTeleportCheckbox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedMapInfos.Count; i++) + _selectedMapInfos[i].NoTeleport = NoTeleportCheckbox.Checked; + } + private void NoReconnectCheckbox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedMapInfos.Count; i++) + _selectedMapInfos[i].NoReconnect = NoReconnectCheckbox.Checked; + } + private void NoReconnectTextbox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedMapInfos.Count; i++) + _selectedMapInfos[i].NoReconnectMap = ActiveControl.Text; + } + private void NoRandomCheckbox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedMapInfos.Count; i++) + _selectedMapInfos[i].NoRandom = NoRandomCheckbox.Checked; + } + private void NoEscapeCheckbox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedMapInfos.Count; i++) + _selectedMapInfos[i].NoEscape = NoEscapeCheckbox.Checked; + } + private void NoRecallCheckbox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedMapInfos.Count; i++) + _selectedMapInfos[i].NoRecall = NoRecallCheckbox.Checked; + } + private void NoDrugCheckbox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedMapInfos.Count; i++) + _selectedMapInfos[i].NoDrug = NoDrugCheckbox.Checked; + } + private void NoPositionCheckbox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedMapInfos.Count; i++) + _selectedMapInfos[i].NoPosition = NoPositionCheckbox.Checked; + } + private void NoThrowItemCheckbox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedMapInfos.Count; i++) + _selectedMapInfos[i].NoThrowItem = NoThrowItemCheckbox.Checked; + } + private void NoDropPlayerCheckbox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedMapInfos.Count; i++) + _selectedMapInfos[i].NoDropPlayer = NoDropPlayerCheckbox.Checked; + } + private void NoDropMonsterCheckbox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedMapInfos.Count; i++) + _selectedMapInfos[i].NoDropMonster = NoDropMonsterCheckbox.Checked; + } + private void NoNamesCheckbox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedMapInfos.Count; i++) + _selectedMapInfos[i].NoNames = NoNamesCheckbox.Checked; + } + private void FightCheckbox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedMapInfos.Count; i++) + _selectedMapInfos[i].Fight = FightCheckbox.Checked; + } + private void FireCheckbox_CheckStateChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedMapInfos.Count; i++) + _selectedMapInfos[i].Fire = FireCheckbox.Checked; + } + private void FireTextbox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + int temp; + + if (!int.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedMapInfos.Count; i++) + _selectedMapInfos[i].FireDamage = temp; + } + private void LightningCheckbox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedMapInfos.Count; i++) + _selectedMapInfos[i].Lightning = LightningCheckbox.Checked; + } + private void LightningTextbox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + int temp; + + if (!int.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedMapInfos.Count; i++) + _selectedMapInfos[i].LightningDamage = temp; + } + + private void ClearHButton_Click(object sender, EventArgs e) + { + + } + + private void MapDarkLighttextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedMapInfos.Count; i++) + _selectedMapInfos[i].MapDarkLight = temp; + } + + private void MZDeletebutton_Click(object sender, EventArgs e) + { + } + + private void MZAddbutton_Click(object sender, EventArgs e) + { + } + + private void MZListlistBox_SelectedIndexChanged(object sender, EventArgs e) + { + } + + private void MZMineIndextextBox_TextChanged(object sender, EventArgs e) + { + } + + private void MZXtextBox_TextChanged(object sender, EventArgs e) + { + } + + private void MZYtextBox_TextChanged(object sender, EventArgs e) + { + } + + private void MZSizetextBox_TextChanged(object sender, EventArgs e) + { + } + + private void ImportMapInfoButton_Click(object sender, EventArgs e) + { + OpenFileDialog ofd = new OpenFileDialog(); + ofd.Filter = "CSV|*.csv"; + ofd.ShowDialog(); + + if (ofd.FileName == string.Empty) return; + + MirForms.ConvertMapInfo.Path = ofd.FileName; + MirForms.ConvertMapInfo.Start(Envir); + + MirForms.ConvertMapInfo.End(); + UpdateInterface(); + + } + private void ExportMapInfoButton_Click(object sender, EventArgs e) + { + if (_selectedMapInfos.Count == 0) return; + + SaveFileDialog sfd = new SaveFileDialog(); + sfd.InitialDirectory = Path.Combine(Application.StartupPath, "Exports"); + sfd.FileName = "MapInfoExport"; + sfd.Filter = "CSV|*.csv"; + sfd.ShowDialog(); + + if (sfd.FileName == string.Empty) return; + for (int i = 0; i < _selectedMapInfos.Count; i++) + { + using (StreamWriter sw = File.AppendText(sfd.FileNames[0])) + { + string textOut = string.Empty; + textOut += $"[{_selectedMapInfos[i].FileName} {_selectedMapInfos[i].Title.Replace(' ', '*')}]"; + + textOut += " LIGHT(" + _selectedMapInfos[i].Light + ")"; + textOut += " MINIMAP(" + _selectedMapInfos[i].MiniMap + ")"; + textOut += " BIGMAP(" + _selectedMapInfos[i].BigMap + ")"; + textOut += " MAPLIGHT(" + _selectedMapInfos[i].MapDarkLight + ")"; + textOut += " MUSIC(" + _selectedMapInfos[i].Music + ")"; + textOut += PrintMapAttributes(_selectedMapInfos[i]); + sw.WriteLine(textOut); + + //STARTZONE(0,150,150,50) || SAFEZONE(0,150,150,50) + for (int j = 0; j < _selectedMapInfos[i].SafeZones.Count; j++) + { + string safeZoneOut = _selectedMapInfos[i].SafeZones[j].StartPoint ? "STARTZONE" : "SAFEZONE"; + safeZoneOut += "(" + _selectedMapInfos[i].FileName + "," + + _selectedMapInfos[i].SafeZones[j].Size.ToString() + "," + + _selectedMapInfos[i].SafeZones[j].Location.X.ToString() + "," + + _selectedMapInfos[i].SafeZones[j].Location.Y.ToString() + ")"; + sw.WriteLine(safeZoneOut); + } + for (int j = 0; j < _selectedMapInfos[i].Movements.Count; j++) + { + try + { + string movement = + $"{_selectedMapInfos[i].FileName} {_selectedMapInfos[i].Movements[j].Source.X + "," + _selectedMapInfos[i].Movements[j].Source.Y} {"->"} {Envir.MapInfoList[_selectedMapInfos[i].Movements[j].MapIndex - 1].FileName} {_selectedMapInfos[i].Movements[j].Destination.X + "," + _selectedMapInfos[i].Movements[j].Destination.Y} {(_selectedMapInfos[i].Movements[j].NeedMove ? "NEEDMOVE " : "") + (_selectedMapInfos[i].Movements[j].ShowOnBigMap ? "SHOWONBIGMAP " : "") + (_selectedMapInfos[i].Movements[j].Icon > 0 ? "BIGMAPICON(" + _selectedMapInfos[i].Movements[j].Icon + ")" : "")}"; + + sw.WriteLine(movement); + } + catch + { + continue; + } + } + } + } + MessageBox.Show("Map Info Export Complete"); + } + private String PrintMapAttributes(MapInfo map) + { + string textOut = string.Empty; + if (map.NoTeleport) textOut += " NOTELEPORT"; + if (map.NoReconnect) textOut += " NORECONNECT(" + map.NoReconnectMap + ")"; + if (map.NoRandom) textOut += " NORANDOMMOVE"; + if (map.NoEscape) textOut += " NOESCAPE"; + if (map.NoRecall) textOut += " NORECALL"; + if (map.NoDrug) textOut += " NODRUG"; + if (map.NoPosition) textOut += " NOPOSITIONMOVE"; + if (map.NoThrowItem) textOut += " NOTHROWITEM"; + if (map.NoDropPlayer) textOut += " NOPLAYERDROP"; + if (map.NoDropMonster) textOut += " NOMONSTERDROP"; + if (map.NoNames) textOut += " NONAMES"; + if (map.NoFight) textOut += " NOFIGHT"; + if (map.Fight) textOut += " FIGHT"; + if (map.Fire) textOut += " FIRE(" + map.FireDamage + ")"; + if (map.Lightning) textOut += " LIGHTNING(" + map.LightningDamage + ")"; + if (map.NoTownTeleport) textOut += " NOTownTeleport"; + return textOut; + } + private void ImportMonGenButton_Click(object sender, EventArgs e) + { + bool hasImported = false; + + if (Envir.MapInfoList.Count == 0) return; + + MirForms.ConvertMonGenInfo.Start(); + + for (int i = 0; i < MirForms.ConvertMonGenInfo.monGenList.Count; i++) + { + try + { + int monsterIndex = Envir.MonsterInfoList.Find(a => a.Name == MirForms.ConvertMonGenInfo.monGenList[i].Name).Index; + if (monsterIndex == -1) continue; + + RespawnInfo respawnInfo = new RespawnInfo + { + MonsterIndex = monsterIndex, + Location = new Point(MirForms.ConvertMonGenInfo.monGenList[i].X, MirForms.ConvertMonGenInfo.monGenList[i].Y), + Count = (ushort)MirForms.ConvertMonGenInfo.monGenList[i].Count, + Spread = (ushort)MirForms.ConvertMonGenInfo.monGenList[i].Range, + Delay = (ushort)MirForms.ConvertMonGenInfo.monGenList[i].Delay, + Direction = (byte)MirForms.ConvertMonGenInfo.monGenList[i].Direction, + RoutePath = MirForms.ConvertMonGenInfo.monGenList[i].RoutePath, + RespawnIndex = ++Envir.RespawnIndex + }; + + int index = Envir.MapInfoList.FindIndex(a => a.FileName == MirForms.ConvertMonGenInfo.monGenList[i].Map); + if (index == -1) continue; + + Envir.MapInfoList[index].Respawns.Add(respawnInfo); + hasImported = true; + } + catch (Exception) + { + continue; + } + } + MirForms.ConvertMonGenInfo.Stop(); + + if (!hasImported) return; + + UpdateInterface(); + MessageBox.Show("MonGen Import complete"); + } + private void ExportMonGenButton_Click(object sender, EventArgs e) + { + if (_selectedMapInfos.Count == 0) return; + + SaveFileDialog sfd = new SaveFileDialog(); + sfd.InitialDirectory = Path.Combine(Application.StartupPath, "Exports"); + sfd.Filter = "CSV|*.csv"; + sfd.ShowDialog(); + + if (sfd.FileName == string.Empty) return; + + for (int i = 0; i < _selectedMapInfos.Count; i++) + { + using (StreamWriter sw = File.AppendText(sfd.FileNames[0])) + { + for (int j = 0; j < _selectedMapInfos[i].Respawns.Count; j++) + { + MonsterInfo mob = Envir.GetMonsterInfo(_selectedMapInfos[i].Respawns[j].MonsterIndex); + + if (mob == null) continue; + + string Output = $"{_selectedMapInfos[i].FileName}" + + $",{_selectedMapInfos[i].Respawns[j].Location.X}" + + $",{_selectedMapInfos[i].Respawns[j].Location.Y}" + + $",{mob.Name}" + + $",{_selectedMapInfos[i].Respawns[j].Spread}" + + $",{_selectedMapInfos[i].Respawns[j].Count}" + + $",{_selectedMapInfos[i].Respawns[j].Delay}" + + $",{_selectedMapInfos[i].Respawns[j].Direction}" + + $",{_selectedMapInfos[i].Respawns[j].RoutePath}"; + + sw.WriteLine(Output); + } + } + } + MessageBox.Show("MonGen Export complete"); + } + + private void VisualizerButton_Click(object sender, EventArgs e) + { + if (_selectedMapInfos.Count != 1) + return; + + MirForms.VisualMapInfo.VForm VForm = new MirForms.VisualMapInfo.VForm(); + MirForms.VisualMapInfo.Class.VisualizerGlobal.MapInfo = _selectedMapInfos[0]; + VForm.FormClosed += VForm_Disposed; + + VForm.ShowDialog(); + + _selectedMapInfos[0] = MirForms.VisualMapInfo.Class.VisualizerGlobal.MapInfo; + UpdateMineZoneInterface(); + UpdateRespawnInterface(); + } + + private void VForm_Disposed(object sender, EventArgs e) + { + RefreshRespawnList(); + } + + private void MineComboBox_SelectedIndexChanged(object sender, EventArgs e) + { + } + + private void MineZoneComboBox_SelectedIndexChanged(object sender, EventArgs e) + { + } + + private void NoMountCheckbox_CheckedChanged(object sender, EventArgs e) + { + } + + private void NeedBridleCheckbox_CheckedChanged(object sender, EventArgs e) + { + } + + private void NoFightCheckbox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedMapInfos.Count; i++) + _selectedMapInfos[i].NoFight = NoFightCheckbox.Checked; + } + + private void MusicTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; ushort temp; + if (!ushort.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedMapInfos.Count; i++) + _selectedMapInfos[i].Music = temp; + } + + private void RandomTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + ushort temp; + + if (!ushort.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedRespawnInfos.Count; i++) + _selectedRespawnInfos[i].RandomDelay = temp; + + RefreshRespawnList(); + } + + private void chkRespawnEnableTick_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (chkRespawnEnableTick.Checked) + { + chkrespawnsave.Enabled = true; + for (int i = 0; i < _selectedRespawnInfos.Count; i++) + { + _selectedRespawnInfos[i].RespawnTicks = _selectedRespawnInfos[i].Delay; + _selectedRespawnInfos[i].Delay = 0; + } + } + else + { + chkrespawnsave.Enabled = false; + for (int i = 0; i < _selectedRespawnInfos.Count; i++) + { + _selectedRespawnInfos[i].Delay = _selectedRespawnInfos[i].RespawnTicks; + _selectedRespawnInfos[i].RespawnTicks = 0; + } + } + RefreshRespawnList(); + + } + + private void chkrespawnsave_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (chkRespawnEnableTick.Checked) + { + for (int i = 0; i < _selectedRespawnInfos.Count; i++) + { + _selectedRespawnInfos[i].SaveRespawnTime = chkrespawnsave.Checked; + } + } + RefreshRespawnList(); + } + + private void ConquestComboBox_SelectedIndexChanged(object sender, EventArgs e) + { + } + + private void NoTownTeleportCheckbox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedMapInfos.Count; i++) + _selectedMapInfos[i].NoTownTeleport = NoTownTeleportCheckbox.Checked; + } + + private void NoReincarnation_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + for (int i = 0; i < _selectedMapInfos.Count; i++) + _selectedMapInfos[i].NoReincarnation = NoReincarnation.Checked; + } + + + private void SelectDirectoryButton_Click(object sender, EventArgs e) + { + using (FolderBrowserDialog folderDialog = new FolderBrowserDialog()) + { + if (folderDialog.ShowDialog() == DialogResult.OK) + { + selectedDirectory = folderDialog.SelectedPath; + + // Store the selected directory in application settings + Properties.Settings.Default.selectedDirectory = selectedDirectory; + Properties.Settings.Default.Save(); + } + } + } + + private void OpenProgramButton_Click(object sender, EventArgs e) + { + if (string.IsNullOrEmpty(selectedDirectory)) + { + MessageBox.Show("You must first select your map viewer's directory.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + + string executablePath = FindExecutableInDirectory(selectedDirectory); + + if (!string.IsNullOrEmpty(executablePath)) + { + try + { + Process.Start(executablePath); + } + catch (Exception ex) + { + MessageBox.Show($"Error: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + else + { + MessageBox.Show("No executable file found in the selected directory.", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + } + + private string FindExecutableInDirectory(string directory) + { + try + { + string[] executableExtensions = { ".exe" }; // Only search for .exe files + + foreach (string extension in executableExtensions) + { + string[] executableFiles = Directory.GetFiles(directory, $"*{extension}"); + + if (executableFiles.Length > 0) + { + return executableFiles[0]; // Return the first executable found + } + } + + return null; // No executable files found + } + catch (Exception ex) + { + MessageBox.Show($"Error searching for executable: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return null; + } + } + } +} \ No newline at end of file diff --git a/Server.MirForms/Database/MapInfoForm.resx b/Server.MirForms/Database/MapInfoForm.resx new file mode 100644 index 0000000..d2fb654 --- /dev/null +++ b/Server.MirForms/Database/MapInfoForm.resx @@ -0,0 +1,1766 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + AAABAAgAICAQAAAABADoAgAAhgAAACAgAAAAABgAqAwAAG4DAAAgIAAAAAAIAKgIAAAWEAAAQEAAAAAA + GAAoMgAAvhgAAEBAEAAAAAQAaAoAAOZKAABAQAAAAAAIACgWAABOVQAAgIAAAAAAGAAoyAAAdmsAAICA + AAAAAAgAKEwAAJ4zAQAoAAAAIAAAAEAAAAABAAQAAAAAAAACAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAA + gAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////ABER + ERAAAAAAAAAAAAAAAAARERERAAAAAAAAAAAAAAAAERERERAAAAAAAAAAAAAAABERERERAAAAAQAAAAAA + AAARERAAAQAAAAEAAAAAAAAAEREREQAAAAABAAAAAAAAABERERERAAAAABAAAAAAAAAREREREQAAAAAQ + AAAQAAAAEREREREAAAAAAAABEAAAAAERERERAAAAAAAxERAAAAAQERERERAAAAABEQAAAAAAAAAREREQ + AAAAAQARERARAAAAEREREAAAAAEBEAERERAAAAAAAAAAAAAQEQARMzERAAAAEREAAAABEBADMzMzEQAA + AAEQAAAAAAEAADMxMxEAAAAAAAAAAAEQEQAzMxEQAAABAAEAAAEREAAAMBMQEAAAAAARAAABEREQADEQ + EQAAAAABEBEBEREQATAREREAAAAQAQAQARERAQABEQERAAAAAAAAEBETEQMRERAREQAAAAAAARARExEQ + AREAAREQAAAAAAEBERMxMQEBAAABEQABAAAAAQERERMREQAAAAEAABAAABABERExERAAAAAAAAAAAAAA + EREREREAAAAAAAAAABAQEQAAAREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABAAAAAAAAAAAA + AAAAEAARAAAAAAAAAAAAAAAAAAABEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABABgAAAAAAAAM + AAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA + AACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAAAA + AAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA + AACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACA + AACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAACAAACAAACAAACAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAA + AACAAACAAACAAACAAACAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAAAAAAAAAACAAACAAACAAACAAACA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACAAAAAAACAAACAAAAAAAAAAACAAACAAICAAICAAICAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAA + AACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAACAAAAAAAAAAICAAICAAICA + AICAAICAAICAAICAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAICAAICAAICAAACAAICAAICAAACAAACAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAACAAACA + AAAAAAAAAICAAICAAICAAICAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAACA + AAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAICAAAAAAACAAICAAACAAAAA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAACAAACAAACA + AACAAACAAACAAAAAAAAAAAAAAICAAACAAACAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAACAAACAAAAAAACAAACAAAAAAACAAACAAACAAACAAACAAACAAAAAAAAAAACAAICAAAAAAACAAACA + AACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAACA + AACAAACAAACAAACAAAAAAACAAAAAAAAAAAAAAACAAACAAACAAAAAAACAAACAAACAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAICAAACAAACAAAAAAICAAACAAACA + AACAAACAAACAAAAAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + AACAAAAAAACAAACAAACAAICAAACAAACAAACAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAACAAACAAACA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAACAAICAAICAAACA + AICAAACAAAAAAACAAAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAACAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAACAAACAAACAAICAAACAAACAAACAAACAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACA + AACAAACAAACAAACAAICAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAAAA + AACAAACAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAA + AACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAACAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE + AAAAAAAAAAAAAAABAAAAAQAAAAD/AAD/AAD/AAAAAP//AP//AAD/AP8AwMDAAP/48ADX6/oA1P9/AP8A + AADiK4oAKiqlAAAAAAAEBAQACAgIAAwMDAAREREAFhYWABwcHAAiIiIAKSkpADMzMwA5OTkAQkJCAE1N + TQBVVVUAYGBgAGZmZgBwcHAAgICAAIyMjACUlJQAmZmZAKSkpACsrKwAtra2AMDAwADMzMwA1NTUANra + 2gDg4OAA7OzsAPj4+AD7+/sA////ADMAAABmAAAAmQAAAMwAAAD/AAAAADMAADMzAABmMwAAmTMAAMwz + AAD/MwAAAGYAADNmAABmZgAAmWYAAMxmAAD/ZgAAAJkAADOZAABmmQAAmZkAAMyZAAD/mQAAAMwAADPM + AABmzAAAmcwAAMzMAAD/zAAAAP8AADP/AABm/wAAmf8AAMz/AAD//wAAAAAzADMAMwBmADMAmQAzAMwA + MwD/ADMAADMzAGYzMwCZMzMAzDMzAP8zMwAAZjMAM2YzAGZmMwCZZjMAzGYzAP9mMwAAmTMAM5kzAGaZ + MwCZmTMAzJkzAP+ZMwAAzDMAM8wzAGbMMwCZzDMAzMwzAP/MMwAA/zMAM/8zAGb/MwCZ/zMAzP8zAP// + MwAAAGYAMwBmAGYAZgCZAGYAzABmAP8AZgAAM2YAMzNmAGYzZgCZM2YAzDNmAP8zZgAAZmYAM2ZmAJlm + ZgDMZmYA/2ZmAACZZgAzmWYAZplmAJmZZgDMmWYA/5lmAADMZgAzzGYAZsxmAJnMZgDMzGYA/8xmAAD/ + ZgAz/2YAZv9mAJn/ZgDM/2YA//9mAAAAmQAzAJkAZgCZAJkAmQDMAJkA/wCZAAAzmQAzM5kAZjOZAJkz + mQDMM5kA/zOZAABmmQAzZpkAZmaZAJlmmQDMZpkA/2aZAACZmQAzmZkAZpmZAMyZmQD/mZkAAcyZADPM + mQBmzJkAmcyZAMzMmQD/zJkAAP+ZADP/mQBm/5kAmf+ZAMz/mQD//5kAAADMADMAzABmAMwAmQDMAMwA + zAD/AMwAADPMADMzzABmM8wAmTPMAMwzzAD/M8wAAGbMADNmzABmZswAmWbMAMxmzAD/ZswAAJnMADOZ + zABmmcwAmZnMAMyZzAD/mcwAAMzMADPMzABmzMwAmczMAP/MzAAA/8wAM//MAGb/zACZ/8wAzP/MAP// + zAAAAP8AMwD/AGYA/wCZAP8AzAD/AP8A/wAAM/8AMzP/AGYz/wCZM/8AzDP/AP8z/wAAZv8AM2b/AGZm + /wCZZv8AzGb/AP9m/wAAmf8AM5n/AGaZ/wCZmf8AzJn/AP+Z/wAAzP8AM8z/AGbM/wCZzP8AzMz/AP/M + /wAA//8AM///AGb//wCZ//8AzP//AJ+fn5+fn58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQn5+fn5+f + n58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBCfn5+fn5+fn58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEJ+f + n5+fn5+fn58QEBAQEBAQnxAQEBAQEBAQEBAQEBAQn5+fn58QEBAQnxAQEBAQEBCfEBAQEBAQEBAQEBAQ + EBCfn5+fn5+fnxAQEBAQEBAQEJ8QEBAQEBAQEBAQEBAQEJ+fn5+fn5+fn58QEBAQEBAQEJ8QEBAQEBAQ + EBAQEBAQn5+fn5+fn5+fnxAQEBAQEBAQnxAQEBAQnxAQEBAQEBCfn5+fn5+fn5+fEBAQEBAQEBAQEBAQ + EJ+fEBAQEBAQEBCfn5+fn5+fn58QEBAQEBAQEBAQrZ+fn58QEBAQEBAQnxCfn5+fn5+fn58QEBAQEBAQ + EJ+fnxAQEBAQEBAQEBAQEBAQn5+fn5+fnxAQEBAQEBAQnxAQn5+fn58Qn58QEBAQEBCfn5+fn5+fEBAQ + EBAQEBCfEJ+fEBCfn5+fn58QEBAQEBAQEBAQEBAQEBAQEBAQnxCfnxAQn5+tra2fn58QEBAQEBCfn5+f + EBAQEBAQEJ+fEJ8QEK2tra2tra2fnxAQEBAQEBCfnxAQEBAQEBAQEBCfEBAQEK2trZ+trZ+fEBAQEBAQ + EBAQEBAQEBAQEBCfnxCfnxAQra2trZ+fnxAQEBAQEJ8QEBCfEBAQEBCfn5+fEBAQEBCtEJ+tnxCfEBAQ + EBAQEBAQn58QEBAQEJ+fn5+fnxAQEK2fnxCfnxAQEBAQEBAQEJ+fEJ+fEJ+fn5+fnxAQn60Qn5+fn5+f + EBAQEBAQnxAQnxAQnxAQn5+fn58QnxAQEJ+fnxCfn58QEBAQEBAQEBAQEBCfEJ+fn62fnxCtn5+fn58Q + n5+fnxAQEBAQEBAQEBAQn58Qn5+frZ+fnxAQn5+fEBAQn5+fnxAQEBAQEBAQEBCfEJ+fn5+trZ+tnxCf + EJ8QEBAQEJ+fnxAQEJ8QEBAQEBAQnxCfn5+fn5+tn5+fnxAQEBAQEBCfEBAQEJ8QEBAQEJ8QEJ+fn5+f + rZ+fn58QEBAQEBAQEBAQEBAQEBAQEBAQEBCfn5+fn5+fn5+fEBAQEBAQEBAQEBAQEBAQEJ8QnxCfnxAQ + EBAQn5+fEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEJ8QEJ8QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBCfEBAQn58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEJ+fEJ8QEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAABAAAAAgAAAAAEAGAAAAAAAADAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAA + AAAAAIAAAIAAAAAAAAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAA + gIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAAIAA + AIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAgIAA + gIAAgIAAgIAAAIAAAIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAAAAAAAAAIAAAIAAgIAAgIAAAIAAAIAAAAAA + AAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAAAAAAAAAIAAAIAAgIAA + gIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAA + AIAAgIAAgIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAA + AAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAIAAAIAAgIAAgIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAgIAAgIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAgIAA + gIAAgIAAgIAAAIAAAIAAgIAAgIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAgIAAgIAAgIAAgIAAAIAAAIAAgIAAgIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAgIAA + gIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAAAA + AAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAABAAAAAgAAAAAEABAAAAAAAAAgAAAAA + AAAAAAAAEAAAABAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAwMDAAICAgAAAAP8AAP8AAAD/ + /wD/AAAA/wD/AP//AAD///8AEREREREREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARERERERERAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAABERERERERERAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAERERERER + EREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAREREREREREREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABER + EREREREREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEREREREREREREQAAAAAAAAARAAAAAAAAAAAAAAAA + AAARERERERERERERAAAAAAAAABEAAAAAAAAAAAAAAAAAABERERERAAAAABEAAAAAAAAAEQAAAAAAAAAA + AAAAAAAAEREREREAAAAAEQAAAAAAAAARAAAAAAAAAAAAAAAAAAAREREREREREQAAAAAAAAAAABEAAAAA + AAAAAAAAAAAAABERERERERERAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAEREREREREREREQAAAAAAAAAA + EQAAAAAAAAAAAAAAAAARERERERERERERAAAAAAAAAAARAAAAAAAAAAAAAAAAABEREREREREREREAAAAA + AAAAABEAAAAAABEAAAAAAAAAEREREREREREREQAAAAAAAAAAEQAAAAAAEQAAAAAAAAARERERERERERER + AAAAAAAAAAAAAAAAABERAAAAAAAAABEREREREREREREAAAAAAAAAAAAAAAAAEREAAAAAAAAAABERERER + EREREQAAAAAAAAAAAAAzEREREQAAAAAAAAAAERERERERERERAAAAAAAAAAAAADMRERERAAAAAAAAABEA + ERERERERERERAAAAAAAAAAAREREAAAAAAAAAAAAAEQAREREREREREREAAAAAAAAAABEREQAAAAAAAAAA + AAAAAAAAEREREREREQAAAAAAAAAAEQAAEREREREAEREAAAAAAAARERERERERAAAAAAAAAAARAAARERER + EQAREQAAAAAAABEREREREREAAAAAAAAAABEAEREAABEREREREQAAAAAAEREREREREQAAAAAAAAAAEQAR + EQAAERERERERAAAAAAAAAAAAAAAAAAAAAAAAABEAEREAABERMzMzERERAAAAAAAAAAAAAAAAAAAAAAAA + EQAREQAAEREzMzMREREAAAAAAAARERERAAAAAAAAABERABEAADMzMzMzMzMREQAAAAAAABEREREAAAAA + AAAAEREAEQAAMzMzMzMzMxERAAAAAAAAABERAAAAAAAAAAAAABEAAAAAMzMzETMzEREAAAAAAAAAEREA + AAAAAAAAAAAAEQAAAAAzMzMRMzMREQAAAAAAAAAAAAAAAAAAAAAAEREAEREAADMzMzMREREAAAAAAAAA + AAAAAAAAAAAAAAAREQAREQAAMzMzMxEREQAAAAAAABEAAAARAAAAAAARERERAAAAAAAzABEzEQARAAAA + AAAAEQAAABEAAAAAABEREREAAAAAADMAETMRABEAAAAAAAAAAAAREQAAAAAAERERERERAAAAMxERABER + AAAAAAAAAAAAABERAAAAAAAREREREREAAAAzEREAEREAAAAAAAAAAAAREQAREQAREREREREAABEzABER + EREREQAAAAAAAAAAABERABERABEREREREQAAETMAERERERERAAAAAAAAEQAAEQAAEQAAEREREREAEQAA + ABEREQAREREAAAAAAAARAAARAAARAAAREREREQARAAAAERERABEREQAAAAAAAAAAAAAAABEAERERMxER + ADMREREREQARERERAAAAAAAAAAAAAAAAEQAREREzEREAMxERERERABEREREAAAAAAAAAAAAAABERABER + ETMREREAABEREQAAABEREREAAAAAAAAAAAAAEREAERERMxEREQAAERERAAAAEREREQAAAAAAAAAAAAAR + ABEREREzMxEzEQARABEAAAAAABEREQAAAAAAAAAAABEAERERETMzETMRABEAEQAAAAAAERERAAAAEQAA + AAAAAAARABERERERETMRERERAAAAAAAAABEAAAARAAAAAAAAABEAERERERERMxEREREAAAAAAAAAEQAA + AAARAAAAAAARAAARERERETMRERERAAAAAAAAAAAAAAAAABEAAAAAABEAABERERERMxEREREAAAAAAAAA + AAAAAAAAAAAAAAAAAAARERERERERERERAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEREREREREREREAAAAA + AAAAAAAAAAAAAAAAEQARABERAAAAAAAREREAAAAAAAAAAAAAAAAAAAAAAAARABEAEREAAAAAABEREQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + EQAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAAAREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + EQAAABERAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAREQARAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAABERABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgA + AABAAAAAgAAAAAEACAAAAAAAABAAAAAAAAAAAAAAAAEAAAABAAAAAP8AAP8AAP8AAAAA//8A//8AAP8A + /wDAwMAA//jwANfr+gDU/38A/wAAAOIrigAqKqUAAAAAAAQEBAAICAgADAwMABEREQAWFhYAHBwcACIi + IgApKSkAMzMzADk5OQBCQkIATU1NAFVVVQBgYGAAZmZmAHBwcACAgIAAjIyMAJSUlACZmZkApKSkAKys + rAC2trYAwMDAAMzMzADU1NQA2traAODg4ADs7OwA+Pj4APv7+wD///8AMwAAAGYAAACZAAAAzAAAAP8A + AAAAMwAAMzMAAGYzAACZMwAAzDMAAP8zAAAAZgAAM2YAAGZmAACZZgAAzGYAAP9mAAAAmQAAM5kAAGaZ + AACZmQAAzJkAAP+ZAAAAzAAAM8wAAGbMAACZzAAAzMwAAP/MAAAA/wAAM/8AAGb/AACZ/wAAzP8AAP// + AAAAADMAMwAzAGYAMwCZADMAzAAzAP8AMwAAMzMAZjMzAJkzMwDMMzMA/zMzAABmMwAzZjMAZmYzAJlm + MwDMZjMA/2YzAACZMwAzmTMAZpkzAJmZMwDMmTMA/5kzAADMMwAzzDMAZswzAJnMMwDMzDMA/8wzAAD/ + MwAz/zMAZv8zAJn/MwDM/zMA//8zAAAAZgAzAGYAZgBmAJkAZgDMAGYA/wBmAAAzZgAzM2YAZjNmAJkz + ZgDMM2YA/zNmAABmZgAzZmYAmWZmAMxmZgD/ZmYAAJlmADOZZgBmmWYAmZlmAMyZZgD/mWYAAMxmADPM + ZgBmzGYAmcxmAMzMZgD/zGYAAP9mADP/ZgBm/2YAmf9mAMz/ZgD//2YAAACZADMAmQBmAJkAmQCZAMwA + mQD/AJkAADOZADMzmQBmM5kAmTOZAMwzmQD/M5kAAGaZADNmmQBmZpkAmWaZAMxmmQD/ZpkAAJmZADOZ + mQBmmZkAzJmZAP+ZmQABzJkAM8yZAGbMmQCZzJkAzMyZAP/MmQAA/5kAM/+ZAGb/mQCZ/5kAzP+ZAP// + mQAAAMwAMwDMAGYAzACZAMwAzADMAP8AzAAAM8wAMzPMAGYzzACZM8wAzDPMAP8zzAAAZswAM2bMAGZm + zACZZswAzGbMAP9mzAAAmcwAM5nMAGaZzACZmcwAzJnMAP+ZzAAAzMwAM8zMAGbMzACZzMwA/8zMAAD/ + zAAz/8wAZv/MAJn/zADM/8wA///MAAAA/wAzAP8AZgD/AJkA/wDMAP8A/wD/AAAz/wAzM/8AZjP/AJkz + /wDMM/8A/zP/AABm/wAzZv8AZmb/AJlm/wDMZv8A/2b/AACZ/wAzmf8AZpn/AJmZ/wDMmf8A/5n/AADM + /wAzzP8AZsz/AJnM/wDMzP8A/8z/AAD//wAz//8AZv//AJn//wDM//8An5+fn5+fn5+fn5+fn58dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+f + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+f + n5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+f + n5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+f + n5+fn5+fn5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fn5+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn5+fn5+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHZ+fHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fHR0dHR0dHR2fnx0dHR0dHR0dHR0dHR0dn58dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fnx0dHR0dHR0dn58dHR0dHR0dHR0dHR0dHZ+fHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR2fnx0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0d + n58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0d + HR0dHR0dn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0d + HR0dHR0dHR0dHZ+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fn5+fn5+fnx0d + HR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dHR2fnx0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn5+fn5+f + n58dHR0dHR0dHR0dHR0dHR0dn58dHR0dHR0dHR0dn58dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+f + n5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+f + n5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fnx0dHR0dHR0dHR0dHR0dHR2fn5+f + n5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHa2tn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0d + n5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR2trZ+fn5+fn5+fHR0dHR0dHR0dHR0d + HR2fnx0dn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHZ+fn5+fnx0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHZ+fn5+fn5+fn5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR2fn5+fn58dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dn58dHR0dn5+fn5+f + n5+fnx0dn5+fnx0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHZ+fHR0dHZ+f + n5+fn5+fn58dHZ+fn58dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR2fnx0d + n5+fnx0dHR2fn5+fn5+fn5+fn58dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0d + n58dHZ+fn58dHR0dn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fnx0dn5+fnx0dHR2fn5+fra2tra2tn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHZ+fn58dHR0dn5+fn62tra2trZ+fn5+fnx0dHR0dHR0dHR0dHZ+fn5+fn5+fHR0dHR0d + HR0dHR0dHR2fn5+fHR2fnx0dHR2tra2tra2tra2tra2trZ+fn58dHR0dHR0dHR0dHR2fn5+fn5+fnx0d + HR0dHR0dHR0dHR0dn5+fnx0dn58dHR0dra2tra2tra2tra2tra2fn5+fHR0dHR0dHR0dHR0dHR2fn5+f + HR0dHR0dHR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dra2tra2tn5+tra2tn5+fnx0dHR0dHR0dHR0dHR0d + n5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dn58dHR0dHR0dHa2tra2trZ+fra2trZ+fn58dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fnx0dn5+fnx0dHR2tra2tra2trZ+fn5+fnx0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn58dHZ+fn58dHR0dra2tra2tra2fn5+fn58dHR0d + HR0dHR0dHR2fnx0dHR0dHZ+fHR0dHR0dHR0dHZ+fn5+fn5+fHR0dHR0dHR0dHa2tHR2fn62tn58dHZ+f + HR0dHR0dHR0dHR0dn58dHR0dHR2fnx0dHR0dHR0dHR2fn5+fn5+fnx0dHR0dHR0dHR2trR0dn5+trZ+f + HR2fnx0dHR0dHR0dHR0dHR0dHR0dHZ+fn58dHR0dHR0dHR0dn5+fn5+fn5+fn5+fHR0dHR0dra2fn5+f + HR2fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR0dHR0dHR0dHZ+fn5+fn5+fn5+fnx0dHR0dHa2t + n5+fnx0dn5+fnx0dHR0dHR0dHR0dHR0dHR0dHZ+fn58dHZ+fn58dHZ+fn5+fn5+fn5+fnx0dHR2fn62t + HR2fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR2fn5+fHR2fn5+fn5+fn5+fn58dHR0d + n5+trR0dn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dn58dHR0dn58dHR0dn58dHR0dn5+fn5+fn5+fnx0d + n58dHR0dHR2fn5+fn58dHZ+fn5+fnx0dHR0dHR0dHR0dHZ+fHR0dHZ+fHR0dHZ+fHR0dHZ+fn5+fn5+f + n58dHZ+fHR0dHR0dn5+fn5+fHR2fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fnx0dn5+fn5+f + ra2fn5+fHR2trZ+fn5+fn5+fn58dHZ+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn58dHZ+f + n5+fn62tn5+fnx0dra2fn5+fn5+fn5+fHR2fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+f + HR2fn5+fn5+trZ+fn5+fnx0dHR2fn5+fn58dHR0dHR2fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0d + n5+fnx0dn5+fn5+fra2fn5+fn58dHR0dn5+fn5+fHR0dHR0dn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0d + HR0dHZ+fHR2fn5+fn5+fn62tra2fn62tn58dHZ+fHR2fnx0dHR0dHR0dHR2fn5+fn58dHR0dHR0dHR0d + HR0dHR0dHR2fnx0dn5+fn5+fn5+tra2tn5+trZ+fHR2fnx0dn58dHR0dHR0dHR0dn5+fn5+fHR0dHR0d + n58dHR0dHR0dHR0dHR0dHZ+fHR2fn5+fn5+fn5+fn5+trZ+fn5+fn5+fHR0dHR0dHR0dHR0dHR2fnx0d + HR0dHZ+fHR0dHR0dHR0dHR0dHR2fnx0dn5+fn5+fn5+fn5+fra2fn5+fn5+fnx0dHR0dHR0dHR0dHR0d + n58dHR0dHR0dHZ+fHR0dHR0dHR0dHZ+fHR0dHZ+fn5+fn5+fn5+trZ+fn5+fn5+fHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dHR2fnx0dHR2fn5+fn5+fn5+fra2fn5+fn5+fnx0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fn5+fn5+fnx0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn58dHZ+fHR2fn5+fHR0dHR0dHR0dHZ+fn5+fnx0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fHR2fnx0dn5+fnx0dHR0dHR0dHR2fn5+f + n58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fnx0dHR2fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHR0dn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fnx0dHR0dHZ+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHR0dHR2fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHZ+fn58dHZ+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR2fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAIAAAAAAAQAAAQAYAAAAAAAAwAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAIAAAAAAAQAAAQAIAAAAAAAAQAAAAAAAAAAA + AAAAAQAAAAEAAAAA/wAA/wAA/wAAAAD//wD//wAA/wD/AMDAwAD/+PAA1+v6ANT/fwD/AAAA4iuKACoq + pQAAAAAABAQEAAgICAAMDAwAERERABYWFgAcHBwAIiIiACkpKQAzMzMAOTk5AEJCQgBNTU0AVVVVAGBg + YABmZmYAcHBwAICAgACMjIwAlJSUAJmZmQCkpKQArKysALa2tgDAwMAAzMzMANTU1ADa2toA4ODgAOzs + 7AD4+PgA+/v7AP///wAzAAAAZgAAAJkAAADMAAAA/wAAAAAzAAAzMwAAZjMAAJkzAADMMwAA/zMAAABm + AAAzZgAAZmYAAJlmAADMZgAA/2YAAACZAAAzmQAAZpkAAJmZAADMmQAA/5kAAADMAAAzzAAAZswAAJnM + AADMzAAA/8wAAAD/AAAz/wAAZv8AAJn/AADM/wAA//8AAAAAMwAzADMAZgAzAJkAMwDMADMA/wAzAAAz + MwBmMzMAmTMzAMwzMwD/MzMAAGYzADNmMwBmZjMAmWYzAMxmMwD/ZjMAAJkzADOZMwBmmTMAmZkzAMyZ + MwD/mTMAAMwzADPMMwBmzDMAmcwzAMzMMwD/zDMAAP8zADP/MwBm/zMAmf8zAMz/MwD//zMAAABmADMA + ZgBmAGYAmQBmAMwAZgD/AGYAADNmADMzZgBmM2YAmTNmAMwzZgD/M2YAAGZmADNmZgCZZmYAzGZmAP9m + ZgAAmWYAM5lmAGaZZgCZmWYAzJlmAP+ZZgAAzGYAM8xmAGbMZgCZzGYAzMxmAP/MZgAA/2YAM/9mAGb/ + ZgCZ/2YAzP9mAP//ZgAAAJkAMwCZAGYAmQCZAJkAzACZAP8AmQAAM5kAMzOZAGYzmQCZM5kAzDOZAP8z + mQAAZpkAM2aZAGZmmQCZZpkAzGaZAP9mmQAAmZkAM5mZAGaZmQDMmZkA/5mZAAHMmQAzzJkAZsyZAJnM + mQDMzJkA/8yZAAD/mQAz/5kAZv+ZAJn/mQDM/5kA//+ZAAAAzAAzAMwAZgDMAJkAzADMAMwA/wDMAAAz + zAAzM8wAZjPMAJkzzADMM8wA/zPMAABmzAAzZswAZmbMAJlmzADMZswA/2bMAACZzAAzmcwAZpnMAJmZ + zADMmcwA/5nMAADMzAAzzMwAZszMAJnMzAD/zMwAAP/MADP/zABm/8wAmf/MAMz/zAD//8wAAAD/ADMA + /wBmAP8AmQD/AMwA/wD/AP8AADP/ADMz/wBmM/8AmTP/AMwz/wD/M/8AAGb/ADNm/wBmZv8AmWb/AMxm + /wD/Zv8AAJn/ADOZ/wBmmf8AmZn/AMyZ/wD/mf8AAMz/ADPM/wBmzP8Amcz/AMzM/wD/zP8AAP//ADP/ + /wBm//8Amf//AMz//wCfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pra2trZ+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+tra2tn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD62tra2fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+f + n5+tra2tra2tra2tra2fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8P + Dw+fn5+fn5+fn62tra2tra2tra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+f + n58PDw8PDw8PD5+fn5+fn5+fra2tra2tra2tra2tn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8P + Dw+fn5+fDw8PDw8PDw+tra2tra2tra2tra2tra2tra2tra2tra2tra2tn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PD5+fn58PDw8PDw8PD62tra2tra2tra2tra2tra2tra2tra2tra2tra2fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8Pn5+fnw8PDw8PDw8Pra2tra2tra2tra2tra2tra2tra2tra2tra2trZ+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw+fn5+fDw8PDw8PDw+tra2tra2tra2tra2tra2tra2tra2t + ra2tra2tn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+fn58PDw8PDw8PD62tra2tra2tra2tra2t + ra2tra2tra2tra2tra2fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PD62t + ra2tra2tra2trZ+fn5+tra2tra2trZ+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8Pra2tra2tra2tra2tn5+fn62tra2tra2tn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PDw8PDw+tra2tra2tra2tra2fn5+fra2tra2tra2fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n58PDw8Pn5+fn5+fn58PDw8PDw8PD62tra2tra2tra2tra2tra2fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pra2tra2tra2tra2tra2trZ+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw+tra2tra2tra2tra2tra2tn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PD62tra2tra2tra2tra2t + ra2fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pra2tra2t + ra2tra2tra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw+tra2tDw8PD5+fn5+tra2tn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PD62tra0PDw8Pn5+fn62tra2fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pra2trQ8PDw+fn5+fra2trZ+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw+tra2tn5+fn5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PD62tra2fn5+fn5+fnw8PDw+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8Pra2trZ+fn5+fn5+fDw8PD5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw+tra2tn5+fn5+f + n58PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PD62t + ra2fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PD5+fn5+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8Pn5+fn62t + ra0PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw+fn5+fra2trQ8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PD5+fn5+tra2tDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PD5+fn58PDw8PDw8PD5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fDw8PD5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+fn58PDw8PDw8PD5+f + n58PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n58PDw8Pn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fnw8P + Dw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fnw8PDw+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fn5+fn62tra2fn5+fn5+fnw8PDw+tra2tn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fDw8PD62t + ra2fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+tra2tn5+fn5+f + n58PDw8Pra2trZ+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+fn5+fn5+fn5+fn62t + ra2fn5+fn5+fn5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+f + n5+fn5+fra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8P + Dw+fn5+fn5+fn5+fn5+tra2tn5+fn5+fn5+fn5+fDw8PDw8PDw+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PD5+fn5+fn5+fn5+fn62tra2fn5+fn5+fn5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn5+tra2tra2trZ+fn5+tra2tn5+fnw8P + Dw+fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn62tra2tra2tn5+fn62t + ra2fn5+fDw8PD5+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fra2tra2t + ra2fn5+fra2trZ+fn58PDw8Pn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+tra2tn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn62tra2fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+tra2tn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fra2trZ+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+tra2tn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn62tra2fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8Pn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n58PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + + + \ No newline at end of file diff --git a/Server.MirForms/Database/MonsterInfoForm.Designer.cs b/Server.MirForms/Database/MonsterInfoForm.Designer.cs new file mode 100644 index 0000000..69a9df0 --- /dev/null +++ b/Server.MirForms/Database/MonsterInfoForm.Designer.cs @@ -0,0 +1,929 @@ +namespace Server +{ + partial class MonsterInfoForm + { + /// + /// 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(MonsterInfoForm)); + tabControl1 = new TabControl(); + tabPage1 = new TabPage(); + MonsterInfoPanel = new Panel(); + label13 = new Label(); + DropPathTextBox = new TextBox(); + fileNameLabel = new Label(); + label11 = new Label(); + UndeadCheckBox = new CheckBox(); + AutoRevCheckBox = new CheckBox(); + ImageComboBox = new ComboBox(); + label10 = new Label(); + CoolEyeTextBox = new TextBox(); + label12 = new Label(); + CanTameCheckBox = new CheckBox(); + CanPushCheckBox = new CheckBox(); + ViewRangeTextBox = new TextBox(); + label33 = new Label(); + LightTextBox = new TextBox(); + label9 = new Label(); + ExperienceTextBox = new TextBox(); + label7 = new Label(); + MSpeedTextBox = new TextBox(); + label6 = new Label(); + ASpeedTextBox = new TextBox(); + label5 = new Label(); + LevelTextBox = new TextBox(); + label4 = new Label(); + EffectTextBox = new TextBox(); + label2 = new Label(); + AITextBox = new TextBox(); + label8 = new Label(); + AgilityTextBox = new TextBox(); + label26 = new Label(); + AccuracyTextBox = new TextBox(); + label27 = new Label(); + HPTextBox = new TextBox(); + label25 = new Label(); + MaxSCTextBox = new TextBox(); + label22 = new Label(); + MinSCTextBox = new TextBox(); + label23 = new Label(); + MaxMCTextBox = new TextBox(); + label18 = new Label(); + MinMCTextBox = new TextBox(); + label19 = new Label(); + MaxDCTextBox = new TextBox(); + label20 = new Label(); + MinDCTextBox = new TextBox(); + label21 = new Label(); + MaxMACTextBox = new TextBox(); + label16 = new Label(); + MinMACTextBox = new TextBox(); + label17 = new Label(); + MaxACTextBox = new TextBox(); + label15 = new Label(); + MinACTextBox = new TextBox(); + label14 = new Label(); + MonsterNameTextBox = new TextBox(); + label3 = new Label(); + MonsterIndexTextBox = new TextBox(); + label1 = new Label(); + RemoveButton = new Button(); + AddButton = new Button(); + MonsterInfoListBox = new ListBox(); + PasteMButton = new Button(); + CopyMButton = new Button(); + tabControl1.SuspendLayout(); + tabPage1.SuspendLayout(); + MonsterInfoPanel.SuspendLayout(); + SuspendLayout(); + // + // tabControl1 + // + tabControl1.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; + tabControl1.Controls.Add(tabPage1); + tabControl1.Location = new Point(203, 47); + tabControl1.Margin = new Padding(4, 3, 4, 3); + tabControl1.Name = "tabControl1"; + tabControl1.SelectedIndex = 0; + tabControl1.Size = new Size(741, 381); + tabControl1.TabIndex = 16; + // + // tabPage1 + // + tabPage1.Controls.Add(MonsterInfoPanel); + tabPage1.Location = new Point(4, 24); + tabPage1.Margin = new Padding(4, 3, 4, 3); + tabPage1.Name = "tabPage1"; + tabPage1.Padding = new Padding(4, 3, 4, 3); + tabPage1.Size = new Size(733, 353); + tabPage1.TabIndex = 0; + tabPage1.Text = "Info"; + tabPage1.UseVisualStyleBackColor = true; + // + // MonsterInfoPanel + // + MonsterInfoPanel.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; + MonsterInfoPanel.Controls.Add(label13); + MonsterInfoPanel.Controls.Add(DropPathTextBox); + MonsterInfoPanel.Controls.Add(fileNameLabel); + MonsterInfoPanel.Controls.Add(label11); + MonsterInfoPanel.Controls.Add(UndeadCheckBox); + MonsterInfoPanel.Controls.Add(AutoRevCheckBox); + MonsterInfoPanel.Controls.Add(ImageComboBox); + MonsterInfoPanel.Controls.Add(label10); + MonsterInfoPanel.Controls.Add(CoolEyeTextBox); + MonsterInfoPanel.Controls.Add(label12); + MonsterInfoPanel.Controls.Add(CanTameCheckBox); + MonsterInfoPanel.Controls.Add(CanPushCheckBox); + MonsterInfoPanel.Controls.Add(ViewRangeTextBox); + MonsterInfoPanel.Controls.Add(label33); + MonsterInfoPanel.Controls.Add(LightTextBox); + MonsterInfoPanel.Controls.Add(label9); + MonsterInfoPanel.Controls.Add(ExperienceTextBox); + MonsterInfoPanel.Controls.Add(label7); + MonsterInfoPanel.Controls.Add(MSpeedTextBox); + MonsterInfoPanel.Controls.Add(label6); + MonsterInfoPanel.Controls.Add(ASpeedTextBox); + MonsterInfoPanel.Controls.Add(label5); + MonsterInfoPanel.Controls.Add(LevelTextBox); + MonsterInfoPanel.Controls.Add(label4); + MonsterInfoPanel.Controls.Add(EffectTextBox); + MonsterInfoPanel.Controls.Add(label2); + MonsterInfoPanel.Controls.Add(AITextBox); + MonsterInfoPanel.Controls.Add(label8); + MonsterInfoPanel.Controls.Add(AgilityTextBox); + MonsterInfoPanel.Controls.Add(label26); + MonsterInfoPanel.Controls.Add(AccuracyTextBox); + MonsterInfoPanel.Controls.Add(label27); + MonsterInfoPanel.Controls.Add(HPTextBox); + MonsterInfoPanel.Controls.Add(label25); + MonsterInfoPanel.Controls.Add(MaxSCTextBox); + MonsterInfoPanel.Controls.Add(label22); + MonsterInfoPanel.Controls.Add(MinSCTextBox); + MonsterInfoPanel.Controls.Add(label23); + MonsterInfoPanel.Controls.Add(MaxMCTextBox); + MonsterInfoPanel.Controls.Add(label18); + MonsterInfoPanel.Controls.Add(MinMCTextBox); + MonsterInfoPanel.Controls.Add(label19); + MonsterInfoPanel.Controls.Add(MaxDCTextBox); + MonsterInfoPanel.Controls.Add(label20); + MonsterInfoPanel.Controls.Add(MinDCTextBox); + MonsterInfoPanel.Controls.Add(label21); + MonsterInfoPanel.Controls.Add(MaxMACTextBox); + MonsterInfoPanel.Controls.Add(label16); + MonsterInfoPanel.Controls.Add(MinMACTextBox); + MonsterInfoPanel.Controls.Add(label17); + MonsterInfoPanel.Controls.Add(MaxACTextBox); + MonsterInfoPanel.Controls.Add(label15); + MonsterInfoPanel.Controls.Add(MinACTextBox); + MonsterInfoPanel.Controls.Add(label14); + MonsterInfoPanel.Controls.Add(MonsterNameTextBox); + MonsterInfoPanel.Controls.Add(label3); + MonsterInfoPanel.Controls.Add(MonsterIndexTextBox); + MonsterInfoPanel.Controls.Add(label1); + MonsterInfoPanel.Enabled = false; + MonsterInfoPanel.Location = new Point(4, 8); + MonsterInfoPanel.Margin = new Padding(4, 3, 4, 3); + MonsterInfoPanel.Name = "MonsterInfoPanel"; + MonsterInfoPanel.Size = new Size(721, 338); + MonsterInfoPanel.TabIndex = 11; + // + // label13 + // + label13.AutoSize = true; + label13.Location = new Point(27, 249); + label13.Margin = new Padding(4, 0, 4, 0); + label13.Name = "label13"; + label13.Size = new Size(63, 15); + label13.TabIndex = 92; + label13.Text = "Drop Path:"; + // + // DropPathTextBox + // + DropPathTextBox.Location = new Point(102, 246); + DropPathTextBox.Margin = new Padding(4, 3, 4, 3); + DropPathTextBox.Name = "DropPathTextBox"; + DropPathTextBox.Size = new Size(384, 23); + DropPathTextBox.TabIndex = 91; + DropPathTextBox.TextChanged += DropPathTextBox_TextChanged; + // + // fileNameLabel + // + fileNameLabel.AutoSize = true; + fileNameLabel.Location = new Point(558, 39); + fileNameLabel.Margin = new Padding(4, 0, 4, 0); + fileNameLabel.Name = "fileNameLabel"; + fileNameLabel.Size = new Size(37, 15); + fileNameLabel.TabIndex = 90; + fileNameLabel.Text = "-1.Lib"; + // + // label11 + // + label11.AutoSize = true; + label11.Location = new Point(482, 39); + label11.Margin = new Padding(4, 0, 4, 0); + label11.Name = "label11"; + label11.Size = new Size(58, 15); + label11.TabIndex = 89; + label11.Text = "fileName:"; + // + // UndeadCheckBox + // + UndeadCheckBox.AutoSize = true; + UndeadCheckBox.Location = new Point(412, 218); + UndeadCheckBox.Margin = new Padding(4, 3, 4, 3); + UndeadCheckBox.Name = "UndeadCheckBox"; + UndeadCheckBox.Size = new Size(67, 19); + UndeadCheckBox.TabIndex = 88; + UndeadCheckBox.Text = "Undead"; + UndeadCheckBox.UseVisualStyleBackColor = true; + UndeadCheckBox.CheckedChanged += UndeadCheckBox_CheckedChanged; + // + // AutoRevCheckBox + // + AutoRevCheckBox.AutoSize = true; + AutoRevCheckBox.Location = new Point(412, 190); + AutoRevCheckBox.Margin = new Padding(4, 3, 4, 3); + AutoRevCheckBox.Name = "AutoRevCheckBox"; + AutoRevCheckBox.Size = new Size(74, 19); + AutoRevCheckBox.TabIndex = 87; + AutoRevCheckBox.Text = "Auto Rev"; + AutoRevCheckBox.UseVisualStyleBackColor = true; + AutoRevCheckBox.CheckedChanged += AutoRevCheckBox_CheckedChanged; + // + // ImageComboBox + // + ImageComboBox.DropDownStyle = ComboBoxStyle.DropDownList; + ImageComboBox.FormattingEnabled = true; + ImageComboBox.Location = new Point(316, 35); + ImageComboBox.Margin = new Padding(4, 3, 4, 3); + ImageComboBox.Name = "ImageComboBox"; + ImageComboBox.Size = new Size(149, 23); + ImageComboBox.Sorted = true; + ImageComboBox.TabIndex = 85; + ImageComboBox.SelectedIndexChanged += ImageComboBox_SelectedIndexChanged; + // + // label10 + // + label10.AutoSize = true; + label10.Location = new Point(264, 39); + label10.Margin = new Padding(4, 0, 4, 0); + label10.Name = "label10"; + label10.Size = new Size(43, 15); + label10.TabIndex = 86; + label10.Text = "Image:"; + // + // CoolEyeTextBox + // + CoolEyeTextBox.Location = new Point(622, 66); + CoolEyeTextBox.Margin = new Padding(4, 3, 4, 3); + CoolEyeTextBox.MaxLength = 3; + CoolEyeTextBox.Name = "CoolEyeTextBox"; + CoolEyeTextBox.Size = new Size(42, 23); + CoolEyeTextBox.TabIndex = 83; + CoolEyeTextBox.TextChanged += CoolEyeTextBox_TextChanged; + // + // label12 + // + label12.AutoSize = true; + label12.Location = new Point(554, 69); + label12.Margin = new Padding(4, 0, 4, 0); + label12.Name = "label12"; + label12.Size = new Size(56, 15); + label12.TabIndex = 84; + label12.Text = "Cool Eye:"; + // + // CanTameCheckBox + // + CanTameCheckBox.AutoSize = true; + CanTameCheckBox.Location = new Point(299, 218); + CanTameCheckBox.Margin = new Padding(4, 3, 4, 3); + CanTameCheckBox.Name = "CanTameCheckBox"; + CanTameCheckBox.Size = new Size(78, 19); + CanTameCheckBox.TabIndex = 82; + CanTameCheckBox.Text = "Can Tame"; + CanTameCheckBox.UseVisualStyleBackColor = true; + CanTameCheckBox.CheckedChanged += CanTameCheckBox_CheckedChanged; + // + // CanPushCheckBox + // + CanPushCheckBox.AutoSize = true; + CanPushCheckBox.Location = new Point(299, 190); + CanPushCheckBox.Margin = new Padding(4, 3, 4, 3); + CanPushCheckBox.Name = "CanPushCheckBox"; + CanPushCheckBox.Size = new Size(76, 19); + CanPushCheckBox.TabIndex = 81; + CanPushCheckBox.Text = "Can Push"; + CanPushCheckBox.UseVisualStyleBackColor = true; + CanPushCheckBox.CheckedChanged += CanPushCheckBox_CheckedChanged; + // + // ViewRangeTextBox + // + ViewRangeTextBox.Location = new Point(502, 66); + ViewRangeTextBox.Margin = new Padding(4, 3, 4, 3); + ViewRangeTextBox.MaxLength = 3; + ViewRangeTextBox.Name = "ViewRangeTextBox"; + ViewRangeTextBox.Size = new Size(34, 23); + ViewRangeTextBox.TabIndex = 79; + ViewRangeTextBox.TextChanged += ViewRangeTextBox_TextChanged; + // + // label33 + // + label33.AutoSize = true; + label33.Location = new Point(415, 69); + label33.Margin = new Padding(4, 0, 4, 0); + label33.Name = "label33"; + label33.Size = new Size(71, 15); + label33.TabIndex = 80; + label33.Text = "View Range:"; + // + // LightTextBox + // + LightTextBox.Location = new Point(373, 65); + LightTextBox.Margin = new Padding(4, 3, 4, 3); + LightTextBox.MaxLength = 3; + LightTextBox.Name = "LightTextBox"; + LightTextBox.Size = new Size(34, 23); + LightTextBox.TabIndex = 6; + LightTextBox.TextChanged += LightTextBox_TextChanged; + // + // label9 + // + label9.AutoSize = true; + label9.Location = new Point(328, 68); + label9.Margin = new Padding(4, 0, 4, 0); + label9.Name = "label9"; + label9.Size = new Size(37, 15); + label9.TabIndex = 76; + label9.Text = "Light:"; + // + // ExperienceTextBox + // + ExperienceTextBox.Location = new Point(273, 95); + ExperienceTextBox.Margin = new Padding(4, 3, 4, 3); + ExperienceTextBox.MaxLength = 10; + ExperienceTextBox.Name = "ExperienceTextBox"; + ExperienceTextBox.Size = new Size(83, 23); + ExperienceTextBox.TabIndex = 8; + ExperienceTextBox.TextChanged += ExperienceTextBox_TextChanged; + // + // label7 + // + label7.AutoSize = true; + label7.Location = new Point(192, 98); + label7.Margin = new Padding(4, 0, 4, 0); + label7.Name = "label7"; + label7.Size = new Size(67, 15); + label7.TabIndex = 74; + label7.Text = "Experience:"; + // + // MSpeedTextBox + // + MSpeedTextBox.Location = new Point(245, 215); + MSpeedTextBox.Margin = new Padding(4, 3, 4, 3); + MSpeedTextBox.MaxLength = 5; + MSpeedTextBox.Name = "MSpeedTextBox"; + MSpeedTextBox.Size = new Size(46, 23); + MSpeedTextBox.TabIndex = 22; + MSpeedTextBox.TextChanged += MSpeedTextBox_TextChanged; + // + // label6 + // + label6.AutoSize = true; + label6.Location = new Point(155, 218); + label6.Margin = new Padding(4, 0, 4, 0); + label6.Name = "label6"; + label6.Size = new Size(75, 15); + label6.TabIndex = 72; + label6.Text = "Move Speed:"; + // + // ASpeedTextBox + // + ASpeedTextBox.Location = new Point(102, 215); + ASpeedTextBox.Margin = new Padding(4, 3, 4, 3); + ASpeedTextBox.MaxLength = 5; + ASpeedTextBox.Name = "ASpeedTextBox"; + ASpeedTextBox.Size = new Size(46, 23); + ASpeedTextBox.TabIndex = 21; + ASpeedTextBox.TextChanged += ASpeedTextBox_TextChanged; + // + // label5 + // + label5.AutoSize = true; + label5.Location = new Point(7, 218); + label5.Margin = new Padding(4, 0, 4, 0); + label5.Name = "label5"; + label5.Size = new Size(79, 15); + label5.TabIndex = 70; + label5.Text = "Attack Speed:"; + // + // LevelTextBox + // + LevelTextBox.Location = new Point(286, 65); + LevelTextBox.Margin = new Padding(4, 3, 4, 3); + LevelTextBox.MaxLength = 3; + LevelTextBox.Name = "LevelTextBox"; + LevelTextBox.Size = new Size(34, 23); + LevelTextBox.TabIndex = 5; + LevelTextBox.TextChanged += LevelTextBox_TextChanged; + // + // label4 + // + label4.AutoSize = true; + label4.Location = new Point(237, 69); + label4.Margin = new Padding(4, 0, 4, 0); + label4.Name = "label4"; + label4.Size = new Size(37, 15); + label4.TabIndex = 68; + label4.Text = "Level:"; + // + // EffectTextBox + // + EffectTextBox.Location = new Point(195, 65); + EffectTextBox.Margin = new Padding(4, 3, 4, 3); + EffectTextBox.MaxLength = 3; + EffectTextBox.Name = "EffectTextBox"; + EffectTextBox.Size = new Size(34, 23); + EffectTextBox.TabIndex = 4; + EffectTextBox.TextChanged += EffectTextBox_TextChanged; + // + // label2 + // + label2.AutoSize = true; + label2.Location = new Point(144, 69); + label2.Margin = new Padding(4, 0, 4, 0); + label2.Name = "label2"; + label2.Size = new Size(40, 15); + label2.TabIndex = 66; + label2.Text = "Effect:"; + // + // AITextBox + // + AITextBox.Location = new Point(102, 65); + AITextBox.Margin = new Padding(4, 3, 4, 3); + AITextBox.MaxLength = 3; + AITextBox.Name = "AITextBox"; + AITextBox.Size = new Size(34, 23); + AITextBox.TabIndex = 3; + AITextBox.TextChanged += AITextBox_TextChanged; + // + // label8 + // + label8.AutoSize = true; + label8.Location = new Point(71, 69); + label8.Margin = new Padding(4, 0, 4, 0); + label8.Name = "label8"; + label8.Size = new Size(21, 15); + label8.TabIndex = 64; + label8.Text = "AI:"; + // + // AgilityTextBox + // + AgilityTextBox.Location = new Point(205, 185); + AgilityTextBox.Margin = new Padding(4, 3, 4, 3); + AgilityTextBox.MaxLength = 5; + AgilityTextBox.Name = "AgilityTextBox"; + AgilityTextBox.Size = new Size(34, 23); + AgilityTextBox.TabIndex = 20; + AgilityTextBox.TextChanged += AgilityTextBox_TextChanged; + // + // label26 + // + label26.AutoSize = true; + label26.Location = new Point(155, 188); + label26.Margin = new Padding(4, 0, 4, 0); + label26.Name = "label26"; + label26.Size = new Size(44, 15); + label26.TabIndex = 58; + label26.Text = "Agility:"; + // + // AccuracyTextBox + // + AccuracyTextBox.Location = new Point(102, 185); + AccuracyTextBox.Margin = new Padding(4, 3, 4, 3); + AccuracyTextBox.MaxLength = 5; + AccuracyTextBox.Name = "AccuracyTextBox"; + AccuracyTextBox.Size = new Size(34, 23); + AccuracyTextBox.TabIndex = 19; + AccuracyTextBox.TextChanged += AccuracyTextBox_TextChanged; + // + // label27 + // + label27.AutoSize = true; + label27.Location = new Point(30, 188); + label27.Margin = new Padding(4, 0, 4, 0); + label27.Name = "label27"; + label27.Size = new Size(59, 15); + label27.TabIndex = 56; + label27.Text = "Accuracy:"; + // + // HPTextBox + // + HPTextBox.Location = new Point(102, 95); + HPTextBox.Margin = new Padding(4, 3, 4, 3); + HPTextBox.MaxLength = 10; + HPTextBox.Name = "HPTextBox"; + HPTextBox.Size = new Size(83, 23); + HPTextBox.TabIndex = 7; + HPTextBox.TextChanged += HPTextBox_TextChanged; + // + // label25 + // + label25.AutoSize = true; + label25.Location = new Point(65, 98); + label25.Margin = new Padding(4, 0, 4, 0); + label25.Name = "label25"; + label25.Size = new Size(26, 15); + label25.TabIndex = 52; + label25.Text = "HP:"; + // + // MaxSCTextBox + // + MaxSCTextBox.Location = new Point(607, 155); + MaxSCTextBox.Margin = new Padding(4, 3, 4, 3); + MaxSCTextBox.MaxLength = 5; + MaxSCTextBox.Name = "MaxSCTextBox"; + MaxSCTextBox.Size = new Size(58, 23); + MaxSCTextBox.TabIndex = 18; + MaxSCTextBox.TextChanged += MaxSCTextBox_TextChanged; + // + // label22 + // + label22.AutoSize = true; + label22.Location = new Point(542, 158); + label22.Margin = new Padding(4, 0, 4, 0); + label22.Name = "label22"; + label22.Size = new Size(50, 15); + label22.TabIndex = 50; + label22.Text = "Max SC:"; + // + // MinSCTextBox + // + MinSCTextBox.Location = new Point(607, 125); + MinSCTextBox.Margin = new Padding(4, 3, 4, 3); + MinSCTextBox.MaxLength = 5; + MinSCTextBox.Name = "MinSCTextBox"; + MinSCTextBox.Size = new Size(58, 23); + MinSCTextBox.TabIndex = 17; + MinSCTextBox.TextChanged += MinSCTextBox_TextChanged; + // + // label23 + // + label23.AutoSize = true; + label23.Location = new Point(546, 128); + label23.Margin = new Padding(4, 0, 4, 0); + label23.Name = "label23"; + label23.Size = new Size(48, 15); + label23.TabIndex = 48; + label23.Text = "Min SC:"; + // + // MaxMCTextBox + // + MaxMCTextBox.Location = new Point(477, 155); + MaxMCTextBox.Margin = new Padding(4, 3, 4, 3); + MaxMCTextBox.MaxLength = 5; + MaxMCTextBox.Name = "MaxMCTextBox"; + MaxMCTextBox.Size = new Size(58, 23); + MaxMCTextBox.TabIndex = 16; + MaxMCTextBox.TextChanged += MaxMCTextBox_TextChanged; + // + // label18 + // + label18.AutoSize = true; + label18.Location = new Point(413, 158); + label18.Margin = new Padding(4, 0, 4, 0); + label18.Name = "label18"; + label18.Size = new Size(55, 15); + label18.TabIndex = 46; + label18.Text = "Max MC:"; + // + // MinMCTextBox + // + MinMCTextBox.Location = new Point(477, 125); + MinMCTextBox.Margin = new Padding(4, 3, 4, 3); + MinMCTextBox.MaxLength = 5; + MinMCTextBox.Name = "MinMCTextBox"; + MinMCTextBox.Size = new Size(58, 23); + MinMCTextBox.TabIndex = 15; + MinMCTextBox.TextChanged += MinMCTextBox_TextChanged; + // + // label19 + // + label19.AutoSize = true; + label19.Location = new Point(416, 128); + label19.Margin = new Padding(4, 0, 4, 0); + label19.Name = "label19"; + label19.Size = new Size(53, 15); + label19.TabIndex = 44; + label19.Text = "Min MC:"; + // + // MaxDCTextBox + // + MaxDCTextBox.Location = new Point(350, 155); + MaxDCTextBox.Margin = new Padding(4, 3, 4, 3); + MaxDCTextBox.MaxLength = 5; + MaxDCTextBox.Name = "MaxDCTextBox"; + MaxDCTextBox.Size = new Size(58, 23); + MaxDCTextBox.TabIndex = 14; + MaxDCTextBox.TextChanged += MaxDCTextBox_TextChanged; + // + // label20 + // + label20.AutoSize = true; + label20.Location = new Point(292, 158); + label20.Margin = new Padding(4, 0, 4, 0); + label20.Name = "label20"; + label20.Size = new Size(52, 15); + label20.TabIndex = 42; + label20.Text = "Max DC:"; + // + // MinDCTextBox + // + MinDCTextBox.Location = new Point(350, 125); + MinDCTextBox.Margin = new Padding(4, 3, 4, 3); + MinDCTextBox.MaxLength = 5; + MinDCTextBox.Name = "MinDCTextBox"; + MinDCTextBox.Size = new Size(58, 23); + MinDCTextBox.TabIndex = 13; + MinDCTextBox.TextChanged += MinDCTextBox_TextChanged; + // + // label21 + // + label21.AutoSize = true; + label21.Location = new Point(295, 128); + label21.Margin = new Padding(4, 0, 4, 0); + label21.Name = "label21"; + label21.Size = new Size(50, 15); + label21.TabIndex = 40; + label21.Text = "Min DC:"; + // + // MaxMACTextBox + // + MaxMACTextBox.Location = new Point(233, 155); + MaxMACTextBox.Margin = new Padding(4, 3, 4, 3); + MaxMACTextBox.MaxLength = 5; + MaxMACTextBox.Name = "MaxMACTextBox"; + MaxMACTextBox.Size = new Size(58, 23); + MaxMACTextBox.TabIndex = 12; + MaxMACTextBox.TextChanged += MaxMACTextBox_TextChanged; + // + // label16 + // + label16.AutoSize = true; + label16.Location = new Point(161, 158); + label16.Margin = new Padding(4, 0, 4, 0); + label16.Name = "label16"; + label16.Size = new Size(63, 15); + label16.TabIndex = 38; + label16.Text = "Max MAC:"; + // + // MinMACTextBox + // + MinMACTextBox.Location = new Point(233, 125); + MinMACTextBox.Margin = new Padding(4, 3, 4, 3); + MinMACTextBox.MaxLength = 5; + MinMACTextBox.Name = "MinMACTextBox"; + MinMACTextBox.Size = new Size(58, 23); + MinMACTextBox.TabIndex = 11; + MinMACTextBox.TextChanged += MinMACTextBox_TextChanged; + // + // label17 + // + label17.AutoSize = true; + label17.Location = new Point(164, 128); + label17.Margin = new Padding(4, 0, 4, 0); + label17.Name = "label17"; + label17.Size = new Size(61, 15); + label17.TabIndex = 14; + label17.Text = "Min MAC:"; + // + // MaxACTextBox + // + MaxACTextBox.Location = new Point(102, 155); + MaxACTextBox.Margin = new Padding(4, 3, 4, 3); + MaxACTextBox.MaxLength = 5; + MaxACTextBox.Name = "MaxACTextBox"; + MaxACTextBox.Size = new Size(58, 23); + MaxACTextBox.TabIndex = 10; + MaxACTextBox.TextChanged += MaxACTextBox_TextChanged; + // + // label15 + // + label15.AutoSize = true; + label15.Location = new Point(40, 158); + label15.Margin = new Padding(4, 0, 4, 0); + label15.Name = "label15"; + label15.Size = new Size(52, 15); + label15.TabIndex = 34; + label15.Text = "Max AC:"; + // + // MinACTextBox + // + MinACTextBox.Location = new Point(102, 125); + MinACTextBox.Margin = new Padding(4, 3, 4, 3); + MinACTextBox.MaxLength = 5; + MinACTextBox.Name = "MinACTextBox"; + MinACTextBox.Size = new Size(58, 23); + MinACTextBox.TabIndex = 9; + MinACTextBox.TextChanged += MinACTextBox_TextChanged; + // + // label14 + // + label14.AutoSize = true; + label14.Location = new Point(43, 128); + label14.Margin = new Padding(4, 0, 4, 0); + label14.Name = "label14"; + label14.Size = new Size(50, 15); + label14.TabIndex = 32; + label14.Text = "Min AC:"; + // + // MonsterNameTextBox + // + MonsterNameTextBox.Location = new Point(102, 35); + MonsterNameTextBox.Margin = new Padding(4, 3, 4, 3); + MonsterNameTextBox.Name = "MonsterNameTextBox"; + MonsterNameTextBox.Size = new Size(134, 23); + MonsterNameTextBox.TabIndex = 1; + MonsterNameTextBox.TextChanged += MonsterNameTextBox_TextChanged; + // + // label3 + // + label3.AutoSize = true; + label3.Location = new Point(2, 39); + label3.Margin = new Padding(4, 0, 4, 0); + label3.Name = "label3"; + label3.Size = new Size(89, 15); + label3.TabIndex = 8; + label3.Text = "Monster Name:"; + // + // MonsterIndexTextBox + // + MonsterIndexTextBox.Location = new Point(102, 5); + MonsterIndexTextBox.Margin = new Padding(4, 3, 4, 3); + MonsterIndexTextBox.Name = "MonsterIndexTextBox"; + MonsterIndexTextBox.ReadOnly = true; + MonsterIndexTextBox.Size = new Size(54, 23); + MonsterIndexTextBox.TabIndex = 0; + // + // label1 + // + label1.AutoSize = true; + label1.Location = new Point(5, 8); + label1.Margin = new Padding(4, 0, 4, 0); + label1.Name = "label1"; + label1.Size = new Size(86, 15); + label1.TabIndex = 4; + label1.Text = "Monster Index:"; + // + // RemoveButton + // + RemoveButton.Location = new Point(108, 14); + RemoveButton.Margin = new Padding(4, 3, 4, 3); + RemoveButton.Name = "RemoveButton"; + RemoveButton.Size = new Size(88, 27); + RemoveButton.TabIndex = 14; + RemoveButton.Text = "Remove"; + RemoveButton.UseVisualStyleBackColor = true; + RemoveButton.Click += RemoveButton_Click; + // + // AddButton + // + AddButton.Location = new Point(14, 14); + AddButton.Margin = new Padding(4, 3, 4, 3); + AddButton.Name = "AddButton"; + AddButton.Size = new Size(88, 27); + AddButton.TabIndex = 13; + AddButton.Text = "Add"; + AddButton.UseVisualStyleBackColor = true; + AddButton.Click += AddButton_Click; + // + // MonsterInfoListBox + // + MonsterInfoListBox.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left; + MonsterInfoListBox.FormattingEnabled = true; + MonsterInfoListBox.ItemHeight = 15; + MonsterInfoListBox.Location = new Point(14, 47); + MonsterInfoListBox.Margin = new Padding(4, 3, 4, 3); + MonsterInfoListBox.Name = "MonsterInfoListBox"; + MonsterInfoListBox.SelectionMode = SelectionMode.MultiExtended; + MonsterInfoListBox.Size = new Size(181, 364); + MonsterInfoListBox.TabIndex = 15; + MonsterInfoListBox.SelectedIndexChanged += MonsterInfoListBox_SelectedIndexChanged; + // + // PasteMButton + // + PasteMButton.Location = new Point(257, 14); + PasteMButton.Margin = new Padding(4, 3, 4, 3); + PasteMButton.Name = "PasteMButton"; + PasteMButton.Size = new Size(51, 27); + PasteMButton.TabIndex = 22; + PasteMButton.Text = "Paste"; + PasteMButton.UseVisualStyleBackColor = true; + PasteMButton.Click += PasteMButton_Click; + // + // CopyMButton + // + CopyMButton.Location = new Point(203, 14); + CopyMButton.Margin = new Padding(4, 3, 4, 3); + CopyMButton.Name = "CopyMButton"; + CopyMButton.Size = new Size(51, 27); + CopyMButton.TabIndex = 21; + CopyMButton.Text = "Copy"; + CopyMButton.UseVisualStyleBackColor = true; + // + // MonsterInfoForm + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(958, 443); + Controls.Add(PasteMButton); + Controls.Add(CopyMButton); + Controls.Add(tabControl1); + Controls.Add(RemoveButton); + Controls.Add(AddButton); + Controls.Add(MonsterInfoListBox); + Icon = (Icon)resources.GetObject("$this.Icon"); + Margin = new Padding(4, 3, 4, 3); + Name = "MonsterInfoForm"; + Text = "MonsterInfoForm"; + FormClosed += MonsterInfoForm_FormClosed; + tabControl1.ResumeLayout(false); + tabPage1.ResumeLayout(false); + MonsterInfoPanel.ResumeLayout(false); + MonsterInfoPanel.PerformLayout(); + ResumeLayout(false); + } + + #endregion + + private System.Windows.Forms.TabControl tabControl1; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.Panel MonsterInfoPanel; + private System.Windows.Forms.CheckBox CanTameCheckBox; + private System.Windows.Forms.CheckBox CanPushCheckBox; + private System.Windows.Forms.TextBox ViewRangeTextBox; + private System.Windows.Forms.Label label33; + private System.Windows.Forms.TextBox LightTextBox; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.TextBox ExperienceTextBox; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.TextBox MSpeedTextBox; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.TextBox ASpeedTextBox; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.TextBox LevelTextBox; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.TextBox EffectTextBox; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox AITextBox; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.TextBox AgilityTextBox; + private System.Windows.Forms.Label label26; + private System.Windows.Forms.TextBox AccuracyTextBox; + private System.Windows.Forms.Label label27; + private System.Windows.Forms.TextBox HPTextBox; + private System.Windows.Forms.Label label25; + private System.Windows.Forms.TextBox MaxSCTextBox; + private System.Windows.Forms.Label label22; + private System.Windows.Forms.TextBox MinSCTextBox; + private System.Windows.Forms.Label label23; + private System.Windows.Forms.TextBox MaxMCTextBox; + private System.Windows.Forms.Label label18; + private System.Windows.Forms.TextBox MinMCTextBox; + private System.Windows.Forms.Label label19; + private System.Windows.Forms.TextBox MaxDCTextBox; + private System.Windows.Forms.Label label20; + private System.Windows.Forms.TextBox MinDCTextBox; + private System.Windows.Forms.Label label21; + private System.Windows.Forms.TextBox MaxMACTextBox; + private System.Windows.Forms.Label label16; + private System.Windows.Forms.TextBox MinMACTextBox; + private System.Windows.Forms.Label label17; + private System.Windows.Forms.TextBox MaxACTextBox; + private System.Windows.Forms.Label label15; + private System.Windows.Forms.TextBox MinACTextBox; + private System.Windows.Forms.Label label14; + private System.Windows.Forms.TextBox MonsterNameTextBox; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TextBox MonsterIndexTextBox; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button RemoveButton; + private System.Windows.Forms.Button AddButton; + private System.Windows.Forms.ListBox MonsterInfoListBox; + private System.Windows.Forms.Button PasteMButton; + private System.Windows.Forms.Button CopyMButton; + private System.Windows.Forms.TextBox CoolEyeTextBox; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.ComboBox ImageComboBox; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.CheckBox UndeadCheckBox; + private System.Windows.Forms.CheckBox AutoRevCheckBox; + private System.Windows.Forms.Label fileNameLabel; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.TextBox DropPathTextBox; + } +} \ No newline at end of file diff --git a/Server.MirForms/Database/MonsterInfoForm.cs b/Server.MirForms/Database/MonsterInfoForm.cs new file mode 100644 index 0000000..ebff137 --- /dev/null +++ b/Server.MirForms/Database/MonsterInfoForm.cs @@ -0,0 +1,713 @@ +using Server.MirDatabase; +using Server.MirEnvir; + +namespace Server +{ + public partial class MonsterInfoForm : Form + { + public string MonsterListPath = Path.Combine(Settings.ExportPath, "MonsterList.txt"); + + public Envir Envir => SMain.EditEnvir; + + private List _selectedMonsterInfos; + + public MonsterInfoForm() + { + InitializeComponent(); + + ImageComboBox.Items.AddRange(Enum.GetValues(typeof(Monster)).Cast().ToArray()); + UpdateInterface(); + } + + private void AddButton_Click(object sender, EventArgs e) + { + Envir.CreateMonsterInfo(); + UpdateInterface(); + } + private void RemoveButton_Click(object sender, EventArgs e) + { + if (_selectedMonsterInfos.Count == 0) return; + + if (MessageBox.Show("Are you sure you want to remove the selected Monsters?", "Remove Monsters?", MessageBoxButtons.YesNo) != DialogResult.Yes) return; + + for (int i = 0; i < _selectedMonsterInfos.Count; i++) Envir.Remove(_selectedMonsterInfos[i]); + + if (Envir.MonsterInfoList.Count == 0) Envir.MonsterIndex = 0; + + UpdateInterface(); + } + + private void UpdateInterface() + { + if (MonsterInfoListBox.Items.Count != Envir.MonsterInfoList.Count) + { + MonsterInfoListBox.Items.Clear(); + + for (int i = 0; i < Envir.MonsterInfoList.Count; i++) + MonsterInfoListBox.Items.Add(Envir.MonsterInfoList[i]); + } + + _selectedMonsterInfos = MonsterInfoListBox.SelectedItems.Cast().ToList(); + + if (_selectedMonsterInfos.Count == 0) + { + MonsterInfoPanel.Enabled = false; + MonsterIndexTextBox.Text = string.Empty; + MonsterNameTextBox.Text = string.Empty; + + ImageComboBox.SelectedItem = null; + fileNameLabel.Text = ""; + AITextBox.Text = string.Empty; + EffectTextBox.Text = string.Empty; + LevelTextBox.Text = string.Empty; + ViewRangeTextBox.Text = string.Empty; + CoolEyeTextBox.Text = string.Empty; + + HPTextBox.Text = string.Empty; + ExperienceTextBox.Text = string.Empty; + + MinACTextBox.Text = string.Empty; + MaxACTextBox.Text = string.Empty; + MinMACTextBox.Text = string.Empty; + MaxMACTextBox.Text = string.Empty; + MinDCTextBox.Text = string.Empty; + MaxDCTextBox.Text = string.Empty; + MinMCTextBox.Text = string.Empty; + MaxMCTextBox.Text = string.Empty; + MinSCTextBox.Text = string.Empty; + MaxSCTextBox.Text = string.Empty; + AccuracyTextBox.Text = string.Empty; + AgilityTextBox.Text = string.Empty; + LightTextBox.Text = string.Empty; + + ASpeedTextBox.Text = string.Empty; + MSpeedTextBox.Text = string.Empty; + + CanPushCheckBox.Checked = false; + CanTameCheckBox.Checked = false; + AutoRevCheckBox.Checked = false; + UndeadCheckBox.Checked = false; + + return; + } + + MonsterInfo info = _selectedMonsterInfos[0]; + + MonsterInfoPanel.Enabled = true; + + MonsterIndexTextBox.Text = info.Index.ToString(); + MonsterNameTextBox.Text = info.Name; + DropPathTextBox.Text = info.DropPath; + + ImageComboBox.SelectedItem = null; + ImageComboBox.SelectedItem = info.Image; + fileNameLabel.Text = ((int)info.Image).ToString() + ".Lib"; + AITextBox.Text = info.AI.ToString(); + EffectTextBox.Text = info.Effect.ToString(); + LevelTextBox.Text = info.Level.ToString(); + ViewRangeTextBox.Text = info.ViewRange.ToString(); + CoolEyeTextBox.Text = info.CoolEye.ToString(); + + HPTextBox.Text = info.Stats[Stat.HP].ToString(); + ExperienceTextBox.Text = info.Experience.ToString(); + + MinACTextBox.Text = info.Stats[Stat.MinAC].ToString(); + MaxACTextBox.Text = info.Stats[Stat.MaxAC].ToString(); + MinMACTextBox.Text = info.Stats[Stat.MinMAC].ToString(); + MaxMACTextBox.Text = info.Stats[Stat.MaxMAC].ToString(); + MinDCTextBox.Text = info.Stats[Stat.MinDC].ToString(); + MaxDCTextBox.Text = info.Stats[Stat.MaxDC].ToString(); + MinMCTextBox.Text = info.Stats[Stat.MinMC].ToString(); + MaxMCTextBox.Text = info.Stats[Stat.MaxMC].ToString(); + MinSCTextBox.Text = info.Stats[Stat.MinSC].ToString(); + MaxSCTextBox.Text = info.Stats[Stat.MaxSC].ToString(); + AccuracyTextBox.Text = info.Stats[Stat.Accuracy].ToString(); + AgilityTextBox.Text = info.Stats[Stat.Agility].ToString(); + LightTextBox.Text = info.Light.ToString(); + + ASpeedTextBox.Text = info.AttackSpeed.ToString(); + MSpeedTextBox.Text = info.MoveSpeed.ToString(); + + + CanPushCheckBox.Checked = info.CanPush; + CanTameCheckBox.Checked = info.CanTame; + AutoRevCheckBox.Checked = info.AutoRev; + UndeadCheckBox.Checked = info.Undead; + + for (int i = 1; i < _selectedMonsterInfos.Count; i++) + { + info = _selectedMonsterInfos[i]; + + if (MonsterIndexTextBox.Text != info.Index.ToString()) MonsterIndexTextBox.Text = string.Empty; + if (MonsterNameTextBox.Text != info.Name) MonsterNameTextBox.Text = string.Empty; + if (DropPathTextBox.Text != info.DropPath) DropPathTextBox.Text = string.Empty; + + if (ImageComboBox.SelectedItem == null || (Monster)ImageComboBox.SelectedItem != info.Image) ImageComboBox.SelectedItem = null; + if (ImageComboBox.SelectedItem == null || (Monster)ImageComboBox.SelectedItem != info.Image) fileNameLabel.Text = ""; + if (AITextBox.Text != info.AI.ToString()) AITextBox.Text = string.Empty; + if (EffectTextBox.Text != info.Effect.ToString()) EffectTextBox.Text = string.Empty; + if (LevelTextBox.Text != info.Level.ToString()) LevelTextBox.Text = string.Empty; + if (ViewRangeTextBox.Text != info.ViewRange.ToString()) ViewRangeTextBox.Text = string.Empty; + if (CoolEyeTextBox.Text != info.CoolEye.ToString()) CoolEyeTextBox.Text = string.Empty; + if (HPTextBox.Text != info.Stats[Stat.HP].ToString()) HPTextBox.Text = string.Empty; + if (ExperienceTextBox.Text != info.Experience.ToString()) ExperienceTextBox.Text = string.Empty; + + if (MinACTextBox.Text != info.Stats[Stat.MinAC].ToString()) MinACTextBox.Text = string.Empty; + if (MaxACTextBox.Text != info.Stats[Stat.MaxAC].ToString()) MaxACTextBox.Text = string.Empty; + if (MinMACTextBox.Text != info.Stats[Stat.MinMAC].ToString()) MinMACTextBox.Text = string.Empty; + if (MaxMACTextBox.Text != info.Stats[Stat.MaxMAC].ToString()) MaxMACTextBox.Text = string.Empty; + if (MinDCTextBox.Text != info.Stats[Stat.MinDC].ToString()) MinDCTextBox.Text = string.Empty; + if (MaxDCTextBox.Text != info.Stats[Stat.MaxDC].ToString()) MaxDCTextBox.Text = string.Empty; + if (MinMCTextBox.Text != info.Stats[Stat.MinMC].ToString()) MinMCTextBox.Text = string.Empty; + if (MaxMCTextBox.Text != info.Stats[Stat.MaxMC].ToString()) MaxMCTextBox.Text = string.Empty; + if (MinSCTextBox.Text != info.Stats[Stat.MinSC].ToString()) MinSCTextBox.Text = string.Empty; + if (MaxSCTextBox.Text != info.Stats[Stat.MaxSC].ToString()) MaxSCTextBox.Text = string.Empty; + if (AccuracyTextBox.Text != info.Stats[Stat.Accuracy].ToString()) AccuracyTextBox.Text = string.Empty; + if (AgilityTextBox.Text != info.Stats[Stat.Agility].ToString()) AgilityTextBox.Text = string.Empty; + if (LightTextBox.Text != info.Light.ToString()) LightTextBox.Text = string.Empty; + if (ASpeedTextBox.Text != info.AttackSpeed.ToString()) ASpeedTextBox.Text = string.Empty; + if (MSpeedTextBox.Text != info.MoveSpeed.ToString()) MSpeedTextBox.Text = string.Empty; + + if (CanPushCheckBox.Checked != info.CanPush) CanPushCheckBox.CheckState = CheckState.Indeterminate; + if (CanTameCheckBox.Checked != info.CanTame) CanTameCheckBox.CheckState = CheckState.Indeterminate; + + if (AutoRevCheckBox.Checked != info.AutoRev) AutoRevCheckBox.CheckState = CheckState.Indeterminate; + if (UndeadCheckBox.Checked != info.Undead) UndeadCheckBox.CheckState = CheckState.Indeterminate; + } + + } + private void RefreshMonsterList() + { + MonsterInfoListBox.SelectedIndexChanged -= MonsterInfoListBox_SelectedIndexChanged; + + List selected = new List(); + + for (int i = 0; i < MonsterInfoListBox.Items.Count; i++) selected.Add(MonsterInfoListBox.GetSelected(i)); + MonsterInfoListBox.Items.Clear(); + for (int i = 0; i < Envir.MonsterInfoList.Count; i++) MonsterInfoListBox.Items.Add(Envir.MonsterInfoList[i]); + for (int i = 0; i < selected.Count; i++) MonsterInfoListBox.SetSelected(i, selected[i]); + + MonsterInfoListBox.SelectedIndexChanged += MonsterInfoListBox_SelectedIndexChanged; + } + private void MonsterInfoListBox_SelectedIndexChanged(object sender, EventArgs e) + { + UpdateInterface(); + } + private void MonsterNameTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedMonsterInfos.Count; i++) + _selectedMonsterInfos[i].Name = ActiveControl.Text; + + RefreshMonsterList(); + } + private void AITextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedMonsterInfos.Count; i++) + _selectedMonsterInfos[i].AI = temp; + } + private void EffectTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedMonsterInfos.Count; i++) + _selectedMonsterInfos[i].Effect = temp; + } + private void LevelTextBox_TextChanged(object sender, EventArgs e) + { + + if (ActiveControl != sender) return; + + ushort temp; + + if (!ushort.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedMonsterInfos.Count; i++) + _selectedMonsterInfos[i].Level = temp; + } + private void LightTextBox_TextChanged(object sender, EventArgs e) + { + + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedMonsterInfos.Count; i++) + _selectedMonsterInfos[i].Light = temp; + } + private void ViewRangeTextBox_TextChanged(object sender, EventArgs e) + { + + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedMonsterInfos.Count; i++) + _selectedMonsterInfos[i].ViewRange = temp; + } + private void HPTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + int temp; + + if (!int.TryParse(ActiveControl.Text, out temp) || temp < 0) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedMonsterInfos.Count; i++) + _selectedMonsterInfos[i].Stats[Stat.HP] = temp; + } + private void ExperienceTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + uint temp; + + if (!uint.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedMonsterInfos.Count; i++) + _selectedMonsterInfos[i].Experience = temp; + } + private void MinACTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + ushort temp; + + if (!ushort.TryParse(ActiveControl.Text, out temp) || temp < 0 || temp > ushort.MaxValue) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + for (int i = 0; i < _selectedMonsterInfos.Count; i++) + _selectedMonsterInfos[i].Stats[Stat.MinAC] = temp; + } + private void MaxACTextBox_TextChanged(object sender, EventArgs e) + { + + if (ActiveControl != sender) return; + + ushort temp; + + if (!ushort.TryParse(ActiveControl.Text, out temp) || temp < 0 || temp > ushort.MaxValue) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + for (int i = 0; i < _selectedMonsterInfos.Count; i++) + _selectedMonsterInfos[i].Stats[Stat.MaxAC] = temp; + } + private void MinMACTextBox_TextChanged(object sender, EventArgs e) + { + + if (ActiveControl != sender) return; + + ushort temp; + + if (!ushort.TryParse(ActiveControl.Text, out temp) || temp < 0 || temp > ushort.MaxValue) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + for (int i = 0; i < _selectedMonsterInfos.Count; i++) + _selectedMonsterInfos[i].Stats[Stat.MinMAC] = temp; + } + private void MaxMACTextBox_TextChanged(object sender, EventArgs e) + { + + if (ActiveControl != sender) return; + + ushort temp; + + if (!ushort.TryParse(ActiveControl.Text, out temp) || temp < 0 || temp > ushort.MaxValue) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + for (int i = 0; i < _selectedMonsterInfos.Count; i++) + _selectedMonsterInfos[i].Stats[Stat.MaxMAC] = temp; + } + private void MinDCTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + ushort temp; + + if (!ushort.TryParse(ActiveControl.Text, out temp) || temp < 0 || temp > ushort.MaxValue) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + for (int i = 0; i < _selectedMonsterInfos.Count; i++) + _selectedMonsterInfos[i].Stats[Stat.MinDC] = temp; + } + private void MaxDCTextBox_TextChanged(object sender, EventArgs e) + { + + if (ActiveControl != sender) return; + + ushort temp; + + if (!ushort.TryParse(ActiveControl.Text, out temp) || temp < 0 || temp > ushort.MaxValue) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + for (int i = 0; i < _selectedMonsterInfos.Count; i++) + _selectedMonsterInfos[i].Stats[Stat.MaxDC] = temp; + } + private void MinMCTextBox_TextChanged(object sender, EventArgs e) + { + + if (ActiveControl != sender) return; + + ushort temp; + + if (!ushort.TryParse(ActiveControl.Text, out temp) || temp < 0 || temp > ushort.MaxValue) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + for (int i = 0; i < _selectedMonsterInfos.Count; i++) + _selectedMonsterInfos[i].Stats[Stat.MinMC] = temp; + } + private void MaxMCTextBox_TextChanged(object sender, EventArgs e) + { + + if (ActiveControl != sender) return; + + ushort temp; + + if (!ushort.TryParse(ActiveControl.Text, out temp) || temp < 0 || temp > ushort.MaxValue) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + for (int i = 0; i < _selectedMonsterInfos.Count; i++) + _selectedMonsterInfos[i].Stats[Stat.MaxMC] = temp; + } + private void MinSCTextBox_TextChanged(object sender, EventArgs e) + { + + if (ActiveControl != sender) return; + + ushort temp; + + if (!ushort.TryParse(ActiveControl.Text, out temp) || temp < 0 || temp > ushort.MaxValue) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + for (int i = 0; i < _selectedMonsterInfos.Count; i++) + _selectedMonsterInfos[i].Stats[Stat.MinSC] = temp; + } + private void MaxSCTextBox_TextChanged(object sender, EventArgs e) + { + + if (ActiveControl != sender) return; + + ushort temp; + + if (!ushort.TryParse(ActiveControl.Text, out temp) || temp < 0 || temp > ushort.MaxValue) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + for (int i = 0; i < _selectedMonsterInfos.Count; i++) + _selectedMonsterInfos[i].Stats[Stat.MaxSC] = temp; + } + private void AccuracyTextBox_TextChanged(object sender, EventArgs e) + { + + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedMonsterInfos.Count; i++) + _selectedMonsterInfos[i].Stats[Stat.Accuracy] = temp; + } + private void AgilityTextBox_TextChanged(object sender, EventArgs e) + { + + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedMonsterInfos.Count; i++) + _selectedMonsterInfos[i].Stats[Stat.Agility] = temp; + } + private void ASpeedTextBox_TextChanged(object sender, EventArgs e) + { + + if (ActiveControl != sender) return; + + ushort temp; + + if (!ushort.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedMonsterInfos.Count; i++) + _selectedMonsterInfos[i].AttackSpeed = temp; + } + private void MSpeedTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + ushort temp; + + if (!ushort.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedMonsterInfos.Count; i++) + _selectedMonsterInfos[i].MoveSpeed = temp; + } + private void CanPushCheckBox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedMonsterInfos.Count; i++) + _selectedMonsterInfos[i].CanPush = CanPushCheckBox.Checked; + } + private void CanTameCheckBox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedMonsterInfos.Count; i++) + _selectedMonsterInfos[i].CanTame = CanTameCheckBox.Checked; + } + private void AutoRevCheckBox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedMonsterInfos.Count; i++) + _selectedMonsterInfos[i].AutoRev = AutoRevCheckBox.Checked; + } + + private void UndeadCheckBox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedMonsterInfos.Count; i++) + _selectedMonsterInfos[i].Undead = UndeadCheckBox.Checked; + } + private void MonsterInfoForm_FormClosed(object sender, FormClosedEventArgs e) + { + Envir.SaveDB(); + } + + private void PasteMButton_Click(object sender, EventArgs e) + { + string data = Clipboard.GetText(); + + if (!data.StartsWith("Monster", StringComparison.OrdinalIgnoreCase)) + { + MessageBox.Show("Cannot Paste, Copied data is not Monster Information."); + return; + } + + + string[] monsters = data.Split(new[] { '\t' }, StringSplitOptions.RemoveEmptyEntries); + + + for (int i = 1; i < monsters.Length; i++) + MonsterInfo.FromText(monsters[i]); + + UpdateInterface(); + } + + private void CoolEyeTextBox_TextChanged(object sender, EventArgs e) + { + + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedMonsterInfos.Count; i++) + _selectedMonsterInfos[i].CoolEye = temp; + } + + private void ImageComboBox_SelectedIndexChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedMonsterInfos.Count; i++) + { + _selectedMonsterInfos[i].Image = (Monster)ImageComboBox.SelectedItem; + fileNameLabel.Text = ((int)((Monster)ImageComboBox.SelectedItem)).ToString() + ".Lib"; + } + } + + private void ExportAllButton_Click(object sender, EventArgs e) + { + ExportMonsters(Envir.MonsterInfoList); + } + + private void ExportSelected_Click(object sender, EventArgs e) + { + var list = MonsterInfoListBox.SelectedItems.Cast().ToList(); + + ExportMonsters(list); + } + + private void ExportMonsters(IEnumerable monsters) + { + var monsterInfos = monsters as MonsterInfo[] ?? monsters.ToArray(); + var list = monsterInfos.Select(monster => monster.ToText()).ToList(); + + File.WriteAllLines(MonsterListPath, list); + + MessageBox.Show(monsterInfos.Count() + " Items have been exported"); + } + + private void ImportButton_Click(object sender, EventArgs e) + { + string Path = string.Empty; + + OpenFileDialog ofd = new OpenFileDialog(); + ofd.Filter = "Text File|*.txt"; + ofd.ShowDialog(); + + if (ofd.FileName == string.Empty) return; + + Path = ofd.FileName; + + string data; + using (var sr = new StreamReader(Path)) + { + data = sr.ReadToEnd(); + } + + var monsters = data.Split(new[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); + + foreach (var m in monsters) + MonsterInfo.FromText(m); + + UpdateInterface(); + } + + private void DropPathTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + var text = ActiveControl.Text; + + if (text.ToLower().EndsWith(".txt")) + { + text = text.Replace(".txt", ""); + } + + for (int i = 0; i < _selectedMonsterInfos.Count; i++) + _selectedMonsterInfos[i].DropPath = text; + } + } +} \ No newline at end of file diff --git a/Server.MirForms/Database/MonsterInfoForm.resx b/Server.MirForms/Database/MonsterInfoForm.resx new file mode 100644 index 0000000..1b01221 --- /dev/null +++ b/Server.MirForms/Database/MonsterInfoForm.resx @@ -0,0 +1,1763 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAgAICAQAAAABADoAgAAhgAAACAgAAAAABgAqAwAAG4DAAAgIAAAAAAIAKgIAAAWEAAAQEAAAAAA + GAAoMgAAvhgAAEBAEAAAAAQAaAoAAOZKAABAQAAAAAAIACgWAABOVQAAgIAAAAAAGAAoyAAAdmsAAICA + AAAAAAgAKEwAAJ4zAQAoAAAAIAAAAEAAAAABAAQAAAAAAAACAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAA + gAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////ABER + ERAAAAAAAAAAAAAAAAARERERAAAAAAAAAAAAAAAAERERERAAAAAAAAAAAAAAABERERERAAAAAQAAAAAA + AAARERAAAQAAAAEAAAAAAAAAEREREQAAAAABAAAAAAAAABERERERAAAAABAAAAAAAAAREREREQAAAAAQ + AAAQAAAAEREREREAAAAAAAABEAAAAAERERERAAAAAAAxERAAAAAQERERERAAAAABEQAAAAAAAAAREREQ + AAAAAQARERARAAAAEREREAAAAAEBEAERERAAAAAAAAAAAAAQEQARMzERAAAAEREAAAABEBADMzMzEQAA + AAEQAAAAAAEAADMxMxEAAAAAAAAAAAEQEQAzMxEQAAABAAEAAAEREAAAMBMQEAAAAAARAAABEREQADEQ + EQAAAAABEBEBEREQATAREREAAAAQAQAQARERAQABEQERAAAAAAAAEBETEQMRERAREQAAAAAAARARExEQ + AREAAREQAAAAAAEBERMxMQEBAAABEQABAAAAAQERERMREQAAAAEAABAAABABERExERAAAAAAAAAAAAAA + EREREREAAAAAAAAAABAQEQAAAREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABAAAAAAAAAAAA + AAAAEAARAAAAAAAAAAAAAAAAAAABEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABABgAAAAAAAAM + AAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA + AACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAAAA + AAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA + AACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACA + AACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAACAAACAAACAAACAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAA + AACAAACAAACAAACAAACAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAAAAAAAAAACAAACAAACAAACAAACA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACAAAAAAACAAACAAAAAAAAAAACAAACAAICAAICAAICAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAA + AACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAACAAAAAAAAAAICAAICAAICA + AICAAICAAICAAICAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAICAAICAAICAAACAAICAAICAAACAAACAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAACAAACA + AAAAAAAAAICAAICAAICAAICAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAACA + AAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAICAAAAAAACAAICAAACAAAAA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAACAAACAAACA + AACAAACAAACAAAAAAAAAAAAAAICAAACAAACAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAACAAACAAAAAAACAAACAAAAAAACAAACAAACAAACAAACAAACAAAAAAAAAAACAAICAAAAAAACAAACA + AACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAACA + AACAAACAAACAAACAAAAAAACAAAAAAAAAAAAAAACAAACAAACAAAAAAACAAACAAACAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAICAAACAAACAAAAAAICAAACAAACA + AACAAACAAACAAAAAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + AACAAAAAAACAAACAAACAAICAAACAAACAAACAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAACAAACAAACA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAACAAICAAICAAACA + AICAAACAAAAAAACAAAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAACAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAACAAACAAACAAICAAACAAACAAACAAACAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACA + AACAAACAAACAAACAAICAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAAAA + AACAAACAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAA + AACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAACAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE + AAAAAAAAAAAAAAABAAAAAQAAAAD/AAD/AAD/AAAAAP//AP//AAD/AP8AwMDAAP/48ADX6/oA1P9/AP8A + AADiK4oAKiqlAAAAAAAEBAQACAgIAAwMDAAREREAFhYWABwcHAAiIiIAKSkpADMzMwA5OTkAQkJCAE1N + TQBVVVUAYGBgAGZmZgBwcHAAgICAAIyMjACUlJQAmZmZAKSkpACsrKwAtra2AMDAwADMzMwA1NTUANra + 2gDg4OAA7OzsAPj4+AD7+/sA////ADMAAABmAAAAmQAAAMwAAAD/AAAAADMAADMzAABmMwAAmTMAAMwz + AAD/MwAAAGYAADNmAABmZgAAmWYAAMxmAAD/ZgAAAJkAADOZAABmmQAAmZkAAMyZAAD/mQAAAMwAADPM + AABmzAAAmcwAAMzMAAD/zAAAAP8AADP/AABm/wAAmf8AAMz/AAD//wAAAAAzADMAMwBmADMAmQAzAMwA + MwD/ADMAADMzAGYzMwCZMzMAzDMzAP8zMwAAZjMAM2YzAGZmMwCZZjMAzGYzAP9mMwAAmTMAM5kzAGaZ + MwCZmTMAzJkzAP+ZMwAAzDMAM8wzAGbMMwCZzDMAzMwzAP/MMwAA/zMAM/8zAGb/MwCZ/zMAzP8zAP// + MwAAAGYAMwBmAGYAZgCZAGYAzABmAP8AZgAAM2YAMzNmAGYzZgCZM2YAzDNmAP8zZgAAZmYAM2ZmAJlm + ZgDMZmYA/2ZmAACZZgAzmWYAZplmAJmZZgDMmWYA/5lmAADMZgAzzGYAZsxmAJnMZgDMzGYA/8xmAAD/ + ZgAz/2YAZv9mAJn/ZgDM/2YA//9mAAAAmQAzAJkAZgCZAJkAmQDMAJkA/wCZAAAzmQAzM5kAZjOZAJkz + mQDMM5kA/zOZAABmmQAzZpkAZmaZAJlmmQDMZpkA/2aZAACZmQAzmZkAZpmZAMyZmQD/mZkAAcyZADPM + mQBmzJkAmcyZAMzMmQD/zJkAAP+ZADP/mQBm/5kAmf+ZAMz/mQD//5kAAADMADMAzABmAMwAmQDMAMwA + zAD/AMwAADPMADMzzABmM8wAmTPMAMwzzAD/M8wAAGbMADNmzABmZswAmWbMAMxmzAD/ZswAAJnMADOZ + zABmmcwAmZnMAMyZzAD/mcwAAMzMADPMzABmzMwAmczMAP/MzAAA/8wAM//MAGb/zACZ/8wAzP/MAP// + zAAAAP8AMwD/AGYA/wCZAP8AzAD/AP8A/wAAM/8AMzP/AGYz/wCZM/8AzDP/AP8z/wAAZv8AM2b/AGZm + /wCZZv8AzGb/AP9m/wAAmf8AM5n/AGaZ/wCZmf8AzJn/AP+Z/wAAzP8AM8z/AGbM/wCZzP8AzMz/AP/M + /wAA//8AM///AGb//wCZ//8AzP//AJ+fn5+fn58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQn5+fn5+f + n58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBCfn5+fn5+fn58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEJ+f + n5+fn5+fn58QEBAQEBAQnxAQEBAQEBAQEBAQEBAQn5+fn58QEBAQnxAQEBAQEBCfEBAQEBAQEBAQEBAQ + EBCfn5+fn5+fnxAQEBAQEBAQEJ8QEBAQEBAQEBAQEBAQEJ+fn5+fn5+fn58QEBAQEBAQEJ8QEBAQEBAQ + EBAQEBAQn5+fn5+fn5+fnxAQEBAQEBAQnxAQEBAQnxAQEBAQEBCfn5+fn5+fn5+fEBAQEBAQEBAQEBAQ + EJ+fEBAQEBAQEBCfn5+fn5+fn58QEBAQEBAQEBAQrZ+fn58QEBAQEBAQnxCfn5+fn5+fn58QEBAQEBAQ + EJ+fnxAQEBAQEBAQEBAQEBAQn5+fn5+fnxAQEBAQEBAQnxAQn5+fn58Qn58QEBAQEBCfn5+fn5+fEBAQ + EBAQEBCfEJ+fEBCfn5+fn58QEBAQEBAQEBAQEBAQEBAQEBAQnxCfnxAQn5+tra2fn58QEBAQEBCfn5+f + EBAQEBAQEJ+fEJ8QEK2tra2tra2fnxAQEBAQEBCfnxAQEBAQEBAQEBCfEBAQEK2trZ+trZ+fEBAQEBAQ + EBAQEBAQEBAQEBCfnxCfnxAQra2trZ+fnxAQEBAQEJ8QEBCfEBAQEBCfn5+fEBAQEBCtEJ+tnxCfEBAQ + EBAQEBAQn58QEBAQEJ+fn5+fnxAQEK2fnxCfnxAQEBAQEBAQEJ+fEJ+fEJ+fn5+fnxAQn60Qn5+fn5+f + EBAQEBAQnxAQnxAQnxAQn5+fn58QnxAQEJ+fnxCfn58QEBAQEBAQEBAQEBCfEJ+fn62fnxCtn5+fn58Q + n5+fnxAQEBAQEBAQEBAQn58Qn5+frZ+fnxAQn5+fEBAQn5+fnxAQEBAQEBAQEBCfEJ+fn5+trZ+tnxCf + EJ8QEBAQEJ+fnxAQEJ8QEBAQEBAQnxCfn5+fn5+tn5+fnxAQEBAQEBCfEBAQEJ8QEBAQEJ8QEJ+fn5+f + rZ+fn58QEBAQEBAQEBAQEBAQEBAQEBAQEBCfn5+fn5+fn5+fEBAQEBAQEBAQEBAQEBAQEJ8QnxCfnxAQ + EBAQn5+fEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEJ8QEJ8QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBCfEBAQn58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEJ+fEJ8QEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAABAAAAAgAAAAAEAGAAAAAAAADAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAA + AAAAAIAAAIAAAAAAAAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAA + gIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAAIAA + AIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAgIAA + gIAAgIAAgIAAAIAAAIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAAAAAAAAAIAAAIAAgIAAgIAAAIAAAIAAAAAA + AAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAAAAAAAAAIAAAIAAgIAA + gIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAA + AIAAgIAAgIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAA + AAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAIAAAIAAgIAAgIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAgIAAgIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAgIAA + gIAAgIAAgIAAAIAAAIAAgIAAgIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAgIAAgIAAgIAAgIAAAIAAAIAAgIAAgIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAgIAA + gIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAAAA + AAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAABAAAAAgAAAAAEABAAAAAAAAAgAAAAA + AAAAAAAAEAAAABAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAwMDAAICAgAAAAP8AAP8AAAD/ + /wD/AAAA/wD/AP//AAD///8AEREREREREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARERERERERAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAABERERERERERAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAERERERER + EREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAREREREREREREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABER + EREREREREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEREREREREREREQAAAAAAAAARAAAAAAAAAAAAAAAA + AAARERERERERERERAAAAAAAAABEAAAAAAAAAAAAAAAAAABERERERAAAAABEAAAAAAAAAEQAAAAAAAAAA + AAAAAAAAEREREREAAAAAEQAAAAAAAAARAAAAAAAAAAAAAAAAAAAREREREREREQAAAAAAAAAAABEAAAAA + AAAAAAAAAAAAABERERERERERAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAEREREREREREREQAAAAAAAAAA + EQAAAAAAAAAAAAAAAAARERERERERERERAAAAAAAAAAARAAAAAAAAAAAAAAAAABEREREREREREREAAAAA + AAAAABEAAAAAABEAAAAAAAAAEREREREREREREQAAAAAAAAAAEQAAAAAAEQAAAAAAAAARERERERERERER + AAAAAAAAAAAAAAAAABERAAAAAAAAABEREREREREREREAAAAAAAAAAAAAAAAAEREAAAAAAAAAABERERER + EREREQAAAAAAAAAAAAAzEREREQAAAAAAAAAAERERERERERERAAAAAAAAAAAAADMRERERAAAAAAAAABEA + ERERERERERERAAAAAAAAAAAREREAAAAAAAAAAAAAEQAREREREREREREAAAAAAAAAABEREQAAAAAAAAAA + AAAAAAAAEREREREREQAAAAAAAAAAEQAAEREREREAEREAAAAAAAARERERERERAAAAAAAAAAARAAARERER + EQAREQAAAAAAABEREREREREAAAAAAAAAABEAEREAABEREREREQAAAAAAEREREREREQAAAAAAAAAAEQAR + EQAAERERERERAAAAAAAAAAAAAAAAAAAAAAAAABEAEREAABERMzMzERERAAAAAAAAAAAAAAAAAAAAAAAA + EQAREQAAEREzMzMREREAAAAAAAARERERAAAAAAAAABERABEAADMzMzMzMzMREQAAAAAAABEREREAAAAA + AAAAEREAEQAAMzMzMzMzMxERAAAAAAAAABERAAAAAAAAAAAAABEAAAAAMzMzETMzEREAAAAAAAAAEREA + AAAAAAAAAAAAEQAAAAAzMzMRMzMREQAAAAAAAAAAAAAAAAAAAAAAEREAEREAADMzMzMREREAAAAAAAAA + AAAAAAAAAAAAAAAREQAREQAAMzMzMxEREQAAAAAAABEAAAARAAAAAAARERERAAAAAAAzABEzEQARAAAA + AAAAEQAAABEAAAAAABEREREAAAAAADMAETMRABEAAAAAAAAAAAAREQAAAAAAERERERERAAAAMxERABER + AAAAAAAAAAAAABERAAAAAAAREREREREAAAAzEREAEREAAAAAAAAAAAAREQAREQAREREREREAABEzABER + EREREQAAAAAAAAAAABERABERABEREREREQAAETMAERERERERAAAAAAAAEQAAEQAAEQAAEREREREAEQAA + ABEREQAREREAAAAAAAARAAARAAARAAAREREREQARAAAAERERABEREQAAAAAAAAAAAAAAABEAERERMxER + ADMREREREQARERERAAAAAAAAAAAAAAAAEQAREREzEREAMxERERERABEREREAAAAAAAAAAAAAABERABER + ETMREREAABEREQAAABEREREAAAAAAAAAAAAAEREAERERMxEREQAAERERAAAAEREREQAAAAAAAAAAAAAR + ABEREREzMxEzEQARABEAAAAAABEREQAAAAAAAAAAABEAERERETMzETMRABEAEQAAAAAAERERAAAAEQAA + AAAAAAARABERERERETMRERERAAAAAAAAABEAAAARAAAAAAAAABEAERERERERMxEREREAAAAAAAAAEQAA + AAARAAAAAAARAAARERERETMRERERAAAAAAAAAAAAAAAAABEAAAAAABEAABERERERMxEREREAAAAAAAAA + AAAAAAAAAAAAAAAAAAARERERERERERERAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEREREREREREREAAAAA + AAAAAAAAAAAAAAAAEQARABERAAAAAAAREREAAAAAAAAAAAAAAAAAAAAAAAARABEAEREAAAAAABEREQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + EQAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAAAREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + EQAAABERAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAREQARAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAABERABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgA + AABAAAAAgAAAAAEACAAAAAAAABAAAAAAAAAAAAAAAAEAAAABAAAAAP8AAP8AAP8AAAAA//8A//8AAP8A + /wDAwMAA//jwANfr+gDU/38A/wAAAOIrigAqKqUAAAAAAAQEBAAICAgADAwMABEREQAWFhYAHBwcACIi + IgApKSkAMzMzADk5OQBCQkIATU1NAFVVVQBgYGAAZmZmAHBwcACAgIAAjIyMAJSUlACZmZkApKSkAKys + rAC2trYAwMDAAMzMzADU1NQA2traAODg4ADs7OwA+Pj4APv7+wD///8AMwAAAGYAAACZAAAAzAAAAP8A + AAAAMwAAMzMAAGYzAACZMwAAzDMAAP8zAAAAZgAAM2YAAGZmAACZZgAAzGYAAP9mAAAAmQAAM5kAAGaZ + AACZmQAAzJkAAP+ZAAAAzAAAM8wAAGbMAACZzAAAzMwAAP/MAAAA/wAAM/8AAGb/AACZ/wAAzP8AAP// + AAAAADMAMwAzAGYAMwCZADMAzAAzAP8AMwAAMzMAZjMzAJkzMwDMMzMA/zMzAABmMwAzZjMAZmYzAJlm + MwDMZjMA/2YzAACZMwAzmTMAZpkzAJmZMwDMmTMA/5kzAADMMwAzzDMAZswzAJnMMwDMzDMA/8wzAAD/ + MwAz/zMAZv8zAJn/MwDM/zMA//8zAAAAZgAzAGYAZgBmAJkAZgDMAGYA/wBmAAAzZgAzM2YAZjNmAJkz + ZgDMM2YA/zNmAABmZgAzZmYAmWZmAMxmZgD/ZmYAAJlmADOZZgBmmWYAmZlmAMyZZgD/mWYAAMxmADPM + ZgBmzGYAmcxmAMzMZgD/zGYAAP9mADP/ZgBm/2YAmf9mAMz/ZgD//2YAAACZADMAmQBmAJkAmQCZAMwA + mQD/AJkAADOZADMzmQBmM5kAmTOZAMwzmQD/M5kAAGaZADNmmQBmZpkAmWaZAMxmmQD/ZpkAAJmZADOZ + mQBmmZkAzJmZAP+ZmQABzJkAM8yZAGbMmQCZzJkAzMyZAP/MmQAA/5kAM/+ZAGb/mQCZ/5kAzP+ZAP// + mQAAAMwAMwDMAGYAzACZAMwAzADMAP8AzAAAM8wAMzPMAGYzzACZM8wAzDPMAP8zzAAAZswAM2bMAGZm + zACZZswAzGbMAP9mzAAAmcwAM5nMAGaZzACZmcwAzJnMAP+ZzAAAzMwAM8zMAGbMzACZzMwA/8zMAAD/ + zAAz/8wAZv/MAJn/zADM/8wA///MAAAA/wAzAP8AZgD/AJkA/wDMAP8A/wD/AAAz/wAzM/8AZjP/AJkz + /wDMM/8A/zP/AABm/wAzZv8AZmb/AJlm/wDMZv8A/2b/AACZ/wAzmf8AZpn/AJmZ/wDMmf8A/5n/AADM + /wAzzP8AZsz/AJnM/wDMzP8A/8z/AAD//wAz//8AZv//AJn//wDM//8An5+fn5+fn5+fn5+fn58dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+f + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+f + n5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+f + n5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+f + n5+fn5+fn5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fn5+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn5+fn5+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHZ+fHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fHR0dHR0dHR2fnx0dHR0dHR0dHR0dHR0dn58dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fnx0dHR0dHR0dn58dHR0dHR0dHR0dHR0dHZ+fHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR2fnx0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0d + n58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0d + HR0dHR0dn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0d + HR0dHR0dHR0dHZ+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fn5+fn5+fnx0d + HR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dHR2fnx0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn5+fn5+f + n58dHR0dHR0dHR0dHR0dHR0dn58dHR0dHR0dHR0dn58dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+f + n5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+f + n5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fnx0dHR0dHR0dHR0dHR0dHR2fn5+f + n5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHa2tn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0d + n5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR2trZ+fn5+fn5+fHR0dHR0dHR0dHR0d + HR2fnx0dn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHZ+fn5+fnx0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHZ+fn5+fn5+fn5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR2fn5+fn58dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dn58dHR0dn5+fn5+f + n5+fnx0dn5+fnx0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHZ+fHR0dHZ+f + n5+fn5+fn58dHZ+fn58dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR2fnx0d + n5+fnx0dHR2fn5+fn5+fn5+fn58dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0d + n58dHZ+fn58dHR0dn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fnx0dn5+fnx0dHR2fn5+fra2tra2tn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHZ+fn58dHR0dn5+fn62tra2trZ+fn5+fnx0dHR0dHR0dHR0dHZ+fn5+fn5+fHR0dHR0d + HR0dHR0dHR2fn5+fHR2fnx0dHR2tra2tra2tra2tra2trZ+fn58dHR0dHR0dHR0dHR2fn5+fn5+fnx0d + HR0dHR0dHR0dHR0dn5+fnx0dn58dHR0dra2tra2tra2tra2tra2fn5+fHR0dHR0dHR0dHR0dHR2fn5+f + HR0dHR0dHR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dra2tra2tn5+tra2tn5+fnx0dHR0dHR0dHR0dHR0d + n5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dn58dHR0dHR0dHa2tra2trZ+fra2trZ+fn58dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fnx0dn5+fnx0dHR2tra2tra2trZ+fn5+fnx0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn58dHZ+fn58dHR0dra2tra2tra2fn5+fn58dHR0d + HR0dHR0dHR2fnx0dHR0dHZ+fHR0dHR0dHR0dHZ+fn5+fn5+fHR0dHR0dHR0dHa2tHR2fn62tn58dHZ+f + HR0dHR0dHR0dHR0dn58dHR0dHR2fnx0dHR0dHR0dHR2fn5+fn5+fnx0dHR0dHR0dHR2trR0dn5+trZ+f + HR2fnx0dHR0dHR0dHR0dHR0dHR0dHZ+fn58dHR0dHR0dHR0dn5+fn5+fn5+fn5+fHR0dHR0dra2fn5+f + HR2fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR0dHR0dHR0dHZ+fn5+fn5+fn5+fnx0dHR0dHa2t + n5+fnx0dn5+fnx0dHR0dHR0dHR0dHR0dHR0dHZ+fn58dHZ+fn58dHZ+fn5+fn5+fn5+fnx0dHR2fn62t + HR2fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR2fn5+fHR2fn5+fn5+fn5+fn58dHR0d + n5+trR0dn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dn58dHR0dn58dHR0dn58dHR0dn5+fn5+fn5+fnx0d + n58dHR0dHR2fn5+fn58dHZ+fn5+fnx0dHR0dHR0dHR0dHZ+fHR0dHZ+fHR0dHZ+fHR0dHZ+fn5+fn5+f + n58dHZ+fHR0dHR0dn5+fn5+fHR2fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fnx0dn5+fn5+f + ra2fn5+fHR2trZ+fn5+fn5+fn58dHZ+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn58dHZ+f + n5+fn62tn5+fnx0dra2fn5+fn5+fn5+fHR2fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+f + HR2fn5+fn5+trZ+fn5+fnx0dHR2fn5+fn58dHR0dHR2fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0d + n5+fnx0dn5+fn5+fra2fn5+fn58dHR0dn5+fn5+fHR0dHR0dn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0d + HR0dHZ+fHR2fn5+fn5+fn62tra2fn62tn58dHZ+fHR2fnx0dHR0dHR0dHR2fn5+fn58dHR0dHR0dHR0d + HR0dHR0dHR2fnx0dn5+fn5+fn5+tra2tn5+trZ+fHR2fnx0dn58dHR0dHR0dHR0dn5+fn5+fHR0dHR0d + n58dHR0dHR0dHR0dHR0dHZ+fHR2fn5+fn5+fn5+fn5+trZ+fn5+fn5+fHR0dHR0dHR0dHR0dHR2fnx0d + HR0dHZ+fHR0dHR0dHR0dHR0dHR2fnx0dn5+fn5+fn5+fn5+fra2fn5+fn5+fnx0dHR0dHR0dHR0dHR0d + n58dHR0dHR0dHZ+fHR0dHR0dHR0dHZ+fHR0dHZ+fn5+fn5+fn5+trZ+fn5+fn5+fHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dHR2fnx0dHR2fn5+fn5+fn5+fra2fn5+fn5+fnx0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fn5+fn5+fnx0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn58dHZ+fHR2fn5+fHR0dHR0dHR0dHZ+fn5+fnx0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fHR2fnx0dn5+fnx0dHR0dHR0dHR2fn5+f + n58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fnx0dHR2fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHR0dn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fnx0dHR0dHZ+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHR0dHR2fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHZ+fn58dHZ+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR2fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAIAAAAAAAQAAAQAYAAAAAAAAwAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAIAAAAAAAQAAAQAIAAAAAAAAQAAAAAAAAAAA + AAAAAQAAAAEAAAAA/wAA/wAA/wAAAAD//wD//wAA/wD/AMDAwAD/+PAA1+v6ANT/fwD/AAAA4iuKACoq + pQAAAAAABAQEAAgICAAMDAwAERERABYWFgAcHBwAIiIiACkpKQAzMzMAOTk5AEJCQgBNTU0AVVVVAGBg + YABmZmYAcHBwAICAgACMjIwAlJSUAJmZmQCkpKQArKysALa2tgDAwMAAzMzMANTU1ADa2toA4ODgAOzs + 7AD4+PgA+/v7AP///wAzAAAAZgAAAJkAAADMAAAA/wAAAAAzAAAzMwAAZjMAAJkzAADMMwAA/zMAAABm + AAAzZgAAZmYAAJlmAADMZgAA/2YAAACZAAAzmQAAZpkAAJmZAADMmQAA/5kAAADMAAAzzAAAZswAAJnM + AADMzAAA/8wAAAD/AAAz/wAAZv8AAJn/AADM/wAA//8AAAAAMwAzADMAZgAzAJkAMwDMADMA/wAzAAAz + MwBmMzMAmTMzAMwzMwD/MzMAAGYzADNmMwBmZjMAmWYzAMxmMwD/ZjMAAJkzADOZMwBmmTMAmZkzAMyZ + MwD/mTMAAMwzADPMMwBmzDMAmcwzAMzMMwD/zDMAAP8zADP/MwBm/zMAmf8zAMz/MwD//zMAAABmADMA + ZgBmAGYAmQBmAMwAZgD/AGYAADNmADMzZgBmM2YAmTNmAMwzZgD/M2YAAGZmADNmZgCZZmYAzGZmAP9m + ZgAAmWYAM5lmAGaZZgCZmWYAzJlmAP+ZZgAAzGYAM8xmAGbMZgCZzGYAzMxmAP/MZgAA/2YAM/9mAGb/ + ZgCZ/2YAzP9mAP//ZgAAAJkAMwCZAGYAmQCZAJkAzACZAP8AmQAAM5kAMzOZAGYzmQCZM5kAzDOZAP8z + mQAAZpkAM2aZAGZmmQCZZpkAzGaZAP9mmQAAmZkAM5mZAGaZmQDMmZkA/5mZAAHMmQAzzJkAZsyZAJnM + mQDMzJkA/8yZAAD/mQAz/5kAZv+ZAJn/mQDM/5kA//+ZAAAAzAAzAMwAZgDMAJkAzADMAMwA/wDMAAAz + zAAzM8wAZjPMAJkzzADMM8wA/zPMAABmzAAzZswAZmbMAJlmzADMZswA/2bMAACZzAAzmcwAZpnMAJmZ + zADMmcwA/5nMAADMzAAzzMwAZszMAJnMzAD/zMwAAP/MADP/zABm/8wAmf/MAMz/zAD//8wAAAD/ADMA + /wBmAP8AmQD/AMwA/wD/AP8AADP/ADMz/wBmM/8AmTP/AMwz/wD/M/8AAGb/ADNm/wBmZv8AmWb/AMxm + /wD/Zv8AAJn/ADOZ/wBmmf8AmZn/AMyZ/wD/mf8AAMz/ADPM/wBmzP8Amcz/AMzM/wD/zP8AAP//ADP/ + /wBm//8Amf//AMz//wCfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pra2trZ+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+tra2tn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD62tra2fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+f + n5+tra2tra2tra2tra2fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8P + Dw+fn5+fn5+fn62tra2tra2tra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+f + n58PDw8PDw8PD5+fn5+fn5+fra2tra2tra2tra2tn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8P + Dw+fn5+fDw8PDw8PDw+tra2tra2tra2tra2tra2tra2tra2tra2tra2tn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PD5+fn58PDw8PDw8PD62tra2tra2tra2tra2tra2tra2tra2tra2tra2fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8Pn5+fnw8PDw8PDw8Pra2tra2tra2tra2tra2tra2tra2tra2tra2trZ+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw+fn5+fDw8PDw8PDw+tra2tra2tra2tra2tra2tra2tra2t + ra2tra2tn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+fn58PDw8PDw8PD62tra2tra2tra2tra2t + ra2tra2tra2tra2tra2fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PD62t + ra2tra2tra2trZ+fn5+tra2tra2trZ+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8Pra2tra2tra2tra2tn5+fn62tra2tra2tn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PDw8PDw+tra2tra2tra2tra2fn5+fra2tra2tra2fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n58PDw8Pn5+fn5+fn58PDw8PDw8PD62tra2tra2tra2tra2tra2fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pra2tra2tra2tra2tra2trZ+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw+tra2tra2tra2tra2tra2tn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PD62tra2tra2tra2tra2t + ra2fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pra2tra2t + ra2tra2tra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw+tra2tDw8PD5+fn5+tra2tn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PD62tra0PDw8Pn5+fn62tra2fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pra2trQ8PDw+fn5+fra2trZ+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw+tra2tn5+fn5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PD62tra2fn5+fn5+fnw8PDw+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8Pra2trZ+fn5+fn5+fDw8PD5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw+tra2tn5+fn5+f + n58PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PD62t + ra2fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PD5+fn5+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8Pn5+fn62t + ra0PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw+fn5+fra2trQ8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PD5+fn5+tra2tDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PD5+fn58PDw8PDw8PD5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fDw8PD5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+fn58PDw8PDw8PD5+f + n58PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n58PDw8Pn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fnw8P + Dw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fnw8PDw+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fn5+fn62tra2fn5+fn5+fnw8PDw+tra2tn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fDw8PD62t + ra2fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+tra2tn5+fn5+f + n58PDw8Pra2trZ+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+fn5+fn5+fn5+fn62t + ra2fn5+fn5+fn5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+f + n5+fn5+fra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8P + Dw+fn5+fn5+fn5+fn5+tra2tn5+fn5+fn5+fn5+fDw8PDw8PDw+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PD5+fn5+fn5+fn5+fn62tra2fn5+fn5+fn5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn5+tra2tra2trZ+fn5+tra2tn5+fnw8P + Dw+fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn62tra2tra2tn5+fn62t + ra2fn5+fDw8PD5+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fra2tra2t + ra2fn5+fra2trZ+fn58PDw8Pn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+tra2tn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn62tra2fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+tra2tn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fra2trZ+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+tra2tn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn62tra2fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8Pn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n58PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + + + \ No newline at end of file diff --git a/Server.MirForms/Database/MonsterInfoFormNew.Designer.cs b/Server.MirForms/Database/MonsterInfoFormNew.Designer.cs new file mode 100644 index 0000000..9faa523 --- /dev/null +++ b/Server.MirForms/Database/MonsterInfoFormNew.Designer.cs @@ -0,0 +1,396 @@ + +namespace Server.Database +{ + partial class MonsterInfoFormNew + { + /// + /// 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() + { + DataGridViewCellStyle dataGridViewCellStyle1 = new DataGridViewCellStyle(); + DataGridViewCellStyle dataGridViewCellStyle2 = new DataGridViewCellStyle(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MonsterInfoFormNew)); + monsterInfoGridView = new DataGridView(); + Modified = new DataGridViewCheckBoxColumn(); + MonsterIndex = new DataGridViewTextBoxColumn(); + MonsterName = new DataGridViewTextBoxColumn(); + MonsterImage = new DataGridViewComboBoxColumn(); + MonsterAI = new DataGridViewTextBoxColumn(); + MonsterEffect = new DataGridViewTextBoxColumn(); + MonsterLevel = new DataGridViewTextBoxColumn(); + MonsterLight = new DataGridViewTextBoxColumn(); + MonsterAttackSpeed = new DataGridViewTextBoxColumn(); + MonsterMoveSpeed = new DataGridViewTextBoxColumn(); + MonsterViewRange = new DataGridViewTextBoxColumn(); + MonsterCoolEye = new DataGridViewTextBoxColumn(); + MonsterExperience = new DataGridViewTextBoxColumn(); + MonsterCanPush = new DataGridViewCheckBoxColumn(); + MonsterAutoRev = new DataGridViewCheckBoxColumn(); + MonsterUndead = new DataGridViewCheckBoxColumn(); + MonsterCanTame = new DataGridViewCheckBoxColumn(); + MonsterDropPath = new DataGridViewTextBoxColumn(); + panel1 = new Panel(); + panel3 = new Panel(); + btnExport = new Button(); + btnImport = new Button(); + groupView = new GroupBox(); + rbtnViewAll = new RadioButton(); + rbtnViewBasic = new RadioButton(); + lblSearch = new Label(); + txtSearch = new TextBox(); + panel2 = new Panel(); + ((System.ComponentModel.ISupportInitialize)monsterInfoGridView).BeginInit(); + panel1.SuspendLayout(); + panel3.SuspendLayout(); + groupView.SuspendLayout(); + panel2.SuspendLayout(); + SuspendLayout(); + // + // monsterInfoGridView + // + dataGridViewCellStyle1.Alignment = DataGridViewContentAlignment.MiddleCenter; + monsterInfoGridView.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1; + monsterInfoGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + monsterInfoGridView.Columns.AddRange(new DataGridViewColumn[] { Modified, MonsterIndex, MonsterName, MonsterImage, MonsterAI, MonsterEffect, MonsterLevel, MonsterLight, MonsterAttackSpeed, MonsterMoveSpeed, MonsterViewRange, MonsterCoolEye, MonsterExperience, MonsterCanPush, MonsterAutoRev, MonsterUndead, MonsterCanTame, MonsterDropPath }); + dataGridViewCellStyle2.Alignment = DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle2.BackColor = SystemColors.Window; + dataGridViewCellStyle2.Font = new Font("Microsoft Sans Serif", 8.25F, FontStyle.Regular, GraphicsUnit.Point, 0); + dataGridViewCellStyle2.ForeColor = SystemColors.ControlText; + dataGridViewCellStyle2.SelectionBackColor = SystemColors.Highlight; + dataGridViewCellStyle2.SelectionForeColor = SystemColors.HighlightText; + dataGridViewCellStyle2.WrapMode = DataGridViewTriState.False; + monsterInfoGridView.DefaultCellStyle = dataGridViewCellStyle2; + monsterInfoGridView.Dock = DockStyle.Fill; + monsterInfoGridView.Location = new Point(0, 0); + monsterInfoGridView.Margin = new Padding(4, 3, 4, 3); + monsterInfoGridView.Name = "monsterInfoGridView"; + monsterInfoGridView.RowTemplate.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; + monsterInfoGridView.Size = new Size(1115, 500); + monsterInfoGridView.TabIndex = 0; + monsterInfoGridView.CellValidating += monsterInfoGridView_CellValidating; + monsterInfoGridView.DataError += monsterInfoGridView_DataError; + monsterInfoGridView.DefaultValuesNeeded += monsterInfoGridView_DefaultValuesNeeded; + monsterInfoGridView.UserDeletingRow += monsterInfoGridView_UserDeletingRow; + // + // Modified + // + Modified.AutoSizeMode = DataGridViewAutoSizeColumnMode.ColumnHeader; + Modified.DataPropertyName = "Modified"; + Modified.Frozen = true; + Modified.HeaderText = "Modified"; + Modified.Name = "Modified"; + Modified.ReadOnly = true; + Modified.Width = 61; + // + // MonsterIndex + // + MonsterIndex.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; + MonsterIndex.DataPropertyName = "MonsterIndex"; + MonsterIndex.Frozen = true; + MonsterIndex.HeaderText = "Index"; + MonsterIndex.Name = "MonsterIndex"; + MonsterIndex.ReadOnly = true; + MonsterIndex.Width = 61; + // + // MonsterName + // + MonsterName.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells; + MonsterName.DataPropertyName = "MonsterName"; + MonsterName.Frozen = true; + MonsterName.HeaderText = "Name"; + MonsterName.Name = "MonsterName"; + MonsterName.Width = 64; + // + // MonsterImage + // + MonsterImage.DataPropertyName = "MonsterImage"; + MonsterImage.HeaderText = "Image"; + MonsterImage.Name = "MonsterImage"; + MonsterImage.SortMode = DataGridViewColumnSortMode.Automatic; + // + // MonsterAI + // + MonsterAI.DataPropertyName = "MonsterAI"; + MonsterAI.HeaderText = "AI"; + MonsterAI.Name = "MonsterAI"; + // + // MonsterEffect + // + MonsterEffect.DataPropertyName = "MonsterEffect"; + MonsterEffect.HeaderText = "Effect"; + MonsterEffect.Name = "MonsterEffect"; + // + // MonsterLevel + // + MonsterLevel.DataPropertyName = "MonsterLevel"; + MonsterLevel.HeaderText = "Level"; + MonsterLevel.Name = "MonsterLevel"; + // + // MonsterLight + // + MonsterLight.DataPropertyName = "MonsterLight"; + MonsterLight.HeaderText = "Light"; + MonsterLight.Name = "MonsterLight"; + // + // MonsterAttackSpeed + // + MonsterAttackSpeed.DataPropertyName = "MonsterAttackSpeed"; + MonsterAttackSpeed.HeaderText = "Attack Speed"; + MonsterAttackSpeed.Name = "MonsterAttackSpeed"; + // + // MonsterMoveSpeed + // + MonsterMoveSpeed.DataPropertyName = "MonsterMoveSpeed"; + MonsterMoveSpeed.HeaderText = "Move Speed"; + MonsterMoveSpeed.Name = "MonsterMoveSpeed"; + // + // MonsterViewRange + // + MonsterViewRange.DataPropertyName = "MonsterViewRange"; + MonsterViewRange.HeaderText = "View Range"; + MonsterViewRange.Name = "MonsterViewRange"; + // + // MonsterCoolEye + // + MonsterCoolEye.DataPropertyName = "MonsterCoolEye"; + MonsterCoolEye.HeaderText = "Cool Eye"; + MonsterCoolEye.Name = "MonsterCoolEye"; + // + // MonsterExperience + // + MonsterExperience.DataPropertyName = "MonsterExperience"; + MonsterExperience.HeaderText = "Experience"; + MonsterExperience.Name = "MonsterExperience"; + // + // MonsterCanPush + // + MonsterCanPush.DataPropertyName = "MonsterCanPush"; + MonsterCanPush.HeaderText = "Can Push"; + MonsterCanPush.Name = "MonsterCanPush"; + MonsterCanPush.Resizable = DataGridViewTriState.True; + MonsterCanPush.SortMode = DataGridViewColumnSortMode.Automatic; + // + // MonsterAutoRev + // + MonsterAutoRev.DataPropertyName = "MonsterAutoRev"; + MonsterAutoRev.HeaderText = "Auto Rev"; + MonsterAutoRev.Name = "MonsterAutoRev"; + MonsterAutoRev.Resizable = DataGridViewTriState.True; + MonsterAutoRev.SortMode = DataGridViewColumnSortMode.Automatic; + // + // MonsterUndead + // + MonsterUndead.DataPropertyName = "MonsterUndead"; + MonsterUndead.HeaderText = "Undead"; + MonsterUndead.Name = "MonsterUndead"; + MonsterUndead.Resizable = DataGridViewTriState.True; + MonsterUndead.SortMode = DataGridViewColumnSortMode.Automatic; + // + // MonsterCanTame + // + MonsterCanTame.DataPropertyName = "MonsterCanTame"; + MonsterCanTame.HeaderText = "Can Tame"; + MonsterCanTame.Name = "MonsterCanTame"; + MonsterCanTame.Resizable = DataGridViewTriState.True; + MonsterCanTame.SortMode = DataGridViewColumnSortMode.Automatic; + // + // MonsterDropPath + // + MonsterDropPath.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells; + MonsterDropPath.DataPropertyName = "MonsterDropPath"; + MonsterDropPath.HeaderText = "Drop Path"; + MonsterDropPath.Name = "MonsterDropPath"; + MonsterDropPath.Width = 85; + // + // panel1 + // + panel1.Controls.Add(panel3); + panel1.Dock = DockStyle.Top; + panel1.Location = new Point(0, 0); + panel1.Margin = new Padding(4, 3, 4, 3); + panel1.Name = "panel1"; + panel1.Size = new Size(1115, 54); + panel1.TabIndex = 1; + // + // panel3 + // + panel3.Controls.Add(btnExport); + panel3.Controls.Add(btnImport); + panel3.Controls.Add(groupView); + panel3.Controls.Add(lblSearch); + panel3.Controls.Add(txtSearch); + panel3.Dock = DockStyle.Fill; + panel3.Location = new Point(0, 0); + panel3.Margin = new Padding(4, 3, 4, 3); + panel3.Name = "panel3"; + panel3.Size = new Size(1115, 54); + panel3.TabIndex = 5; + // + // btnExport + // + btnExport.Location = new Point(808, 25); + btnExport.Margin = new Padding(4, 3, 4, 3); + btnExport.Name = "btnExport"; + btnExport.Size = new Size(88, 27); + btnExport.TabIndex = 6; + btnExport.Text = "Export"; + btnExport.UseVisualStyleBackColor = true; + btnExport.Click += btnExport_Click; + // + // btnImport + // + btnImport.Location = new Point(713, 25); + btnImport.Margin = new Padding(4, 3, 4, 3); + btnImport.Name = "btnImport"; + btnImport.Size = new Size(88, 27); + btnImport.TabIndex = 5; + btnImport.Text = "Import"; + btnImport.UseVisualStyleBackColor = true; + btnImport.Click += btnImport_Click; + // + // groupView + // + groupView.Controls.Add(rbtnViewAll); + groupView.Controls.Add(rbtnViewBasic); + groupView.Enabled = false; + groupView.Location = new Point(4, 3); + groupView.Margin = new Padding(4, 3, 4, 3); + groupView.Name = "groupView"; + groupView.Padding = new Padding(4, 3, 4, 3); + groupView.Size = new Size(156, 48); + groupView.TabIndex = 4; + groupView.TabStop = false; + groupView.Text = "View Mode"; + // + // rbtnViewAll + // + rbtnViewAll.AutoSize = true; + rbtnViewAll.Checked = true; + rbtnViewAll.Location = new Point(31, 22); + rbtnViewAll.Margin = new Padding(4, 3, 4, 3); + rbtnViewAll.Name = "rbtnViewAll"; + rbtnViewAll.Size = new Size(39, 19); + rbtnViewAll.TabIndex = 0; + rbtnViewAll.TabStop = true; + rbtnViewAll.Text = "All"; + rbtnViewAll.UseVisualStyleBackColor = true; + rbtnViewAll.CheckedChanged += rbtnViewAll_CheckedChanged; + // + // rbtnViewBasic + // + rbtnViewBasic.AutoSize = true; + rbtnViewBasic.Location = new Point(80, 22); + rbtnViewBasic.Margin = new Padding(4, 3, 4, 3); + rbtnViewBasic.Name = "rbtnViewBasic"; + rbtnViewBasic.Size = new Size(52, 19); + rbtnViewBasic.TabIndex = 1; + rbtnViewBasic.Text = "Basic"; + rbtnViewBasic.UseVisualStyleBackColor = true; + rbtnViewBasic.CheckedChanged += rbtnViewBasic_CheckedChanged; + // + // lblSearch + // + lblSearch.AutoSize = true; + lblSearch.Location = new Point(538, 10); + lblSearch.Margin = new Padding(4, 0, 4, 0); + lblSearch.Name = "lblSearch"; + lblSearch.Size = new Size(45, 15); + lblSearch.TabIndex = 1; + lblSearch.Text = "Search:"; + // + // txtSearch + // + txtSearch.Location = new Point(541, 29); + txtSearch.Margin = new Padding(4, 3, 4, 3); + txtSearch.Name = "txtSearch"; + txtSearch.Size = new Size(164, 23); + txtSearch.TabIndex = 0; + txtSearch.KeyDown += txtSearch_KeyDown; + // + // panel2 + // + panel2.Controls.Add(monsterInfoGridView); + panel2.Dock = DockStyle.Fill; + panel2.Location = new Point(0, 54); + panel2.Margin = new Padding(4, 3, 4, 3); + panel2.Name = "panel2"; + panel2.Size = new Size(1115, 500); + panel2.TabIndex = 2; + // + // MonsterInfoFormNew + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(1115, 554); + Controls.Add(panel2); + Controls.Add(panel1); + Icon = (Icon)resources.GetObject("$this.Icon"); + Margin = new Padding(4, 3, 4, 3); + Name = "MonsterInfoFormNew"; + Text = "MonsterInfoFormNew"; + FormClosed += monsterInfoFormNew_FormClosed; + ((System.ComponentModel.ISupportInitialize)monsterInfoGridView).EndInit(); + panel1.ResumeLayout(false); + panel3.ResumeLayout(false); + panel3.PerformLayout(); + groupView.ResumeLayout(false); + groupView.PerformLayout(); + panel2.ResumeLayout(false); + ResumeLayout(false); + } + + #endregion + + private System.Windows.Forms.DataGridView monsterInfoGridView; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.GroupBox groupView; + private System.Windows.Forms.RadioButton rbtnViewAll; + private System.Windows.Forms.RadioButton rbtnViewBasic; + private System.Windows.Forms.Panel panel3; + private System.Windows.Forms.Label lblSearch; + private System.Windows.Forms.TextBox txtSearch; + private System.Windows.Forms.Button btnExport; + private System.Windows.Forms.Button btnImport; + private System.Windows.Forms.DataGridViewCheckBoxColumn Modified; + private System.Windows.Forms.DataGridViewTextBoxColumn MonsterIndex; + private System.Windows.Forms.DataGridViewTextBoxColumn MonsterName; + private System.Windows.Forms.DataGridViewComboBoxColumn MonsterImage; + private System.Windows.Forms.DataGridViewTextBoxColumn MonsterAI; + private System.Windows.Forms.DataGridViewTextBoxColumn MonsterEffect; + private System.Windows.Forms.DataGridViewTextBoxColumn MonsterLevel; + private System.Windows.Forms.DataGridViewTextBoxColumn MonsterLight; + private System.Windows.Forms.DataGridViewTextBoxColumn MonsterAttackSpeed; + private System.Windows.Forms.DataGridViewTextBoxColumn MonsterMoveSpeed; + private System.Windows.Forms.DataGridViewTextBoxColumn MonsterViewRange; + private System.Windows.Forms.DataGridViewTextBoxColumn MonsterCoolEye; + private System.Windows.Forms.DataGridViewTextBoxColumn MonsterExperience; + private System.Windows.Forms.DataGridViewCheckBoxColumn MonsterCanPush; + private System.Windows.Forms.DataGridViewCheckBoxColumn MonsterAutoRev; + private System.Windows.Forms.DataGridViewCheckBoxColumn MonsterUndead; + private System.Windows.Forms.DataGridViewCheckBoxColumn MonsterCanTame; + private System.Windows.Forms.DataGridViewTextBoxColumn MonsterDropPath; + } +} \ No newline at end of file diff --git a/Server.MirForms/Database/MonsterInfoFormNew.cs b/Server.MirForms/Database/MonsterInfoFormNew.cs new file mode 100644 index 0000000..73e558c --- /dev/null +++ b/Server.MirForms/Database/MonsterInfoFormNew.cs @@ -0,0 +1,626 @@ +using Server.MirDatabase; +using Server.MirEnvir; +using System.Data; +using System.Text; + +namespace Server.Database +{ + public partial class MonsterInfoFormNew : Form + { + public Envir Envir => SMain.EditEnvir; + + private readonly Array StatEnums = Enum.GetValues(typeof(Stat)); + + private DataTable Table; + + public MonsterInfoFormNew() + { + InitializeComponent(); + + SetDoubleBuffered(monsterInfoGridView); + + InitializeItemInfoGridView(); + + CreateDynamicColumns(); + + PopulateTable(); + + rbtnViewBasic.Checked = true; + } + + public static void SetDoubleBuffered(System.Windows.Forms.Control c) + { + System.Reflection.PropertyInfo aProp = + typeof(System.Windows.Forms.Control).GetProperty( + "DoubleBuffered", + System.Reflection.BindingFlags.NonPublic | + System.Reflection.BindingFlags.Instance); + + aProp.SetValue(c, true, null); + } + + private void InitializeItemInfoGridView() + { + Modified.ValueType = typeof(bool); + MonsterIndex.ValueType = typeof(int); + MonsterName.ValueType = typeof(string); + MonsterAI.ValueType = typeof(byte); + MonsterEffect.ValueType = typeof(byte); + MonsterLevel.ValueType = typeof(ushort); + MonsterLight.ValueType = typeof(byte); + MonsterAttackSpeed.ValueType = typeof(ushort); + MonsterMoveSpeed.ValueType = typeof(ushort); + MonsterViewRange.ValueType = typeof(byte); + MonsterCoolEye.ValueType = typeof(byte); + MonsterExperience.ValueType = typeof(uint); + MonsterCanPush.ValueType = typeof(bool); + MonsterAutoRev.ValueType = typeof(bool); + MonsterUndead.ValueType = typeof(bool); + MonsterCanTame.ValueType = typeof(bool); + MonsterDropPath.ValueType = typeof(string); + + //Basic + this.MonsterImage.ValueType = typeof(Monster); + this.MonsterImage.DataSource = Enum2DataTable(true); + this.MonsterImage.ValueMember = "Value"; + this.MonsterImage.DisplayMember = "Display"; + } + + public static DataTable Enum2DataTable(bool sort = false) + { + DataTable enumTable = new DataTable(); + enumTable.Columns.Add(new DataColumn("Value", Enum.GetUnderlyingType(typeof(T)))); + enumTable.Columns.Add(new DataColumn("Display", typeof(string))); + DataRow EnumRow; + + var values = Enum.GetValues(typeof(T)).Cast(); + + if (sort) + { + values = values.OrderBy(x => x.ToString()); + } + + foreach (T e in values) + { + EnumRow = enumTable.NewRow(); + EnumRow["Value"] = e; + EnumRow["Display"] = e.ToString(); + enumTable.Rows.Add(EnumRow); + } + + return enumTable; + } + + private void CreateDynamicColumns() + { + foreach (Stat stat in StatEnums) + { + if (stat == Stat.Unknown) continue; + + var key = stat.ToString(); + var strKey = RegexFunctions.SeperateCamelCase(key.Replace("Rate", "").Replace("Multiplier", "").Replace("Percent", "")); + + var sign = ""; + + if (key.Contains("Percent")) + sign = "%"; + else if (key.Contains("Multiplier")) + sign = "x"; + + var col = new DataGridViewTextBoxColumn + { + HeaderText = $"{strKey} {sign}", + Name = "Stat" + stat.ToString(), + ValueType = typeof(int), + DataPropertyName = "Stat" + stat.ToString() + }; + + monsterInfoGridView.Columns.Add(col); + } + + } + + private void PopulateTable() + { + Table = new DataTable("monsterInfo"); + + foreach (DataGridViewColumn col in monsterInfoGridView.Columns) + { + Table.Columns.Add(col.DataPropertyName, col.ValueType); + } + + foreach (MirDatabase.MonsterInfo item in Envir.MonsterInfoList) + { + DataRow row = Table.NewRow(); + + row["Modified"] = false; + + row["MonsterIndex"] = item.Index; + row["MonsterName"] = item.Name; + + row["MonsterImage"] = item.Image; + row["MonsterAI"] = item.AI; + row["MonsterLevel"] = item.Level; + row["MonsterEffect"] = item.Effect; + row["MonsterLight"] = item.Light; + row["MonsterAttackSpeed"] = item.AttackSpeed; + row["MonsterMoveSpeed"] = item.MoveSpeed; + row["MonsterViewRange"] = item.ViewRange; + row["MonsterCoolEye"] = item.CoolEye; + row["MonsterExperience"] = item.Experience; + row["MonsterCanPush"] = item.CanPush; + row["MonsterCanTame"] = item.CanTame; + row["MonsterUndead"] = item.Undead; + row["MonsterAutoRev"] = item.AutoRev; + row["MonsterDropPath"] = item.DropPath; + + foreach (Stat stat in StatEnums) + { + if (stat == Stat.Unknown) continue; + + row["Stat" + stat.ToString()] = item.Stats[stat]; + } + + Table.Rows.Add(row); + } + + monsterInfoGridView.DataSource = Table; + } + + private void UpdateFilter() + { + var filterText = txtSearch.Text; + + if (string.IsNullOrEmpty(filterText)) + { + (monsterInfoGridView.DataSource as DataTable).DefaultView.RowFilter = ""; + return; + } + + string rowFilter = string.Format("[MonsterName] LIKE '%{0}%'", filterText); + + (monsterInfoGridView.DataSource as DataTable).DefaultView.RowFilter = rowFilter; + } + + private void SaveForm() + { + int lastIndex = 0; + if (Envir.MonsterInfoList.Count > 0) + { + lastIndex = Envir.MonsterInfoList.Max(x => x.Index); + } + + foreach (DataGridViewRow row in monsterInfoGridView.Rows) + { + var name = row.Cells["MonsterName"].Value; + + if (name == null || name.GetType() == typeof(System.DBNull) || string.IsNullOrWhiteSpace((string)name)) + { + continue; + } + + MonsterInfo monster; + + if (string.IsNullOrEmpty((string)row.Cells["MonsterIndex"].FormattedValue)) + { + Envir.MonsterInfoList.Add(monster = new MonsterInfo()); + + monster.Index = ++lastIndex; + } + else + { + int index = (int)row.Cells["MonsterIndex"].Value; + + monster = Envir.MonsterInfoList.FirstOrDefault(x => x.Index == index); + + if (row.Cells["Modified"].Value != null && (bool)row.Cells["Modified"].Value == false) continue; + } + + monster.Name = (string)row.Cells["MonsterName"].Value; + monster.Image = (Monster)row.Cells["MonsterImage"].Value; + monster.AI = (byte)row.Cells["MonsterAI"].Value; + monster.Level = (ushort)row.Cells["MonsterLevel"].Value; + monster.Effect = (byte)row.Cells["MonsterEffect"].Value; + monster.Light = (byte)row.Cells["MonsterLight"].Value; + monster.AttackSpeed = (ushort)row.Cells["MonsterAttackSpeed"].Value; + monster.MoveSpeed = (ushort)row.Cells["MonsterMoveSpeed"].Value; + monster.ViewRange = (byte)row.Cells["MonsterViewRange"].Value; + monster.CoolEye = (byte)row.Cells["MonsterCoolEye"].Value; + monster.Experience = (uint)row.Cells["MonsterExperience"].Value; + monster.CanPush = (bool)row.Cells["MonsterCanPush"].Value; + monster.CanTame = (bool)row.Cells["MonsterCanTame"].Value; + monster.Undead = (bool)row.Cells["MonsterUndead"].Value; + monster.AutoRev = (bool)row.Cells["MonsterAutoRev"].Value; + monster.DropPath = (string)row.Cells["MonsterDropPath"].Value; + + monster.Stats.Clear(); + + foreach (DataGridViewColumn col in monsterInfoGridView.Columns) + { + if (col.Name.StartsWith("Stat")) + { + var stat = col.Name.Substring(4); + + Stat enumStat = (Stat)Enum.Parse(typeof(Stat), stat); + + monster.Stats[enumStat] = (int)row.Cells[col.Name].Value; + } + } + } + } + + private DataRow FindRowByMonsterName(string value) + { + foreach (DataRow row in Table.Rows) + { + var val = row["MonsterName"]; + + if (val?.ToString().Equals(value) ?? false) + { + return row; + } + } + + return null; + } + + private void monsterInfoGridView_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) + { + var col = monsterInfoGridView.Columns[e.ColumnIndex]; + + var cell = monsterInfoGridView.Rows[e.RowIndex].Cells[col.Name]; + + if (cell.FormattedValue != null && e.FormattedValue != null && cell.FormattedValue.ToString() == e.FormattedValue.ToString()) + { + return; + } + + monsterInfoGridView.Rows[e.RowIndex].Cells["Modified"].Value = true; + + var val = e.FormattedValue.ToString(); + + monsterInfoGridView.Rows[e.RowIndex].ErrorText = ""; + + if (col.ValueType == typeof(int) && int.TryParse(val, out int val1) && val1 < 0) + { + e.Cancel = true; + monsterInfoGridView.Rows[e.RowIndex].ErrorText = "the value must be a positive integer"; + } + + if (col.ValueType == typeof(int) && !int.TryParse(val, out _)) + { + e.Cancel = true; + monsterInfoGridView.Rows[e.RowIndex].ErrorText = "the value must be an integer"; + } + else if (col.ValueType == typeof(byte) && !byte.TryParse(val, out _)) + { + e.Cancel = true; + monsterInfoGridView.Rows[e.RowIndex].ErrorText = "the value must be a byte"; + } + else if (col.ValueType == typeof(short) && !short.TryParse(val, out _)) + { + e.Cancel = true; + monsterInfoGridView.Rows[e.RowIndex].ErrorText = "the value must be a short"; + } + else if (col.ValueType == typeof(ushort) && !ushort.TryParse(val, out _)) + { + e.Cancel = true; + monsterInfoGridView.Rows[e.RowIndex].ErrorText = "the value must be a ushort"; + } + else if (col.ValueType == typeof(long) && !long.TryParse(val, out _)) + { + e.Cancel = true; + monsterInfoGridView.Rows[e.RowIndex].ErrorText = "the value must be a long"; + } + } + + private void rbtnViewAll_CheckedChanged(object sender, EventArgs e) + { + if (rbtnViewAll.Checked) + { + foreach (DataGridViewColumn col in monsterInfoGridView.Columns) + { + if (col.Name == "Modified") continue; + + col.Visible = true; + continue; + } + } + } + + private void rbtnViewBasic_CheckedChanged(object sender, EventArgs e) + { + if (rbtnViewBasic.Checked) + { + foreach (DataGridViewColumn col in monsterInfoGridView.Columns) + { + if (col.Name == "MonsterIndex" || col.Name == "MonsterName" || col.Name == "Modified") + { + continue; + } + + if (col.Name.StartsWith("Monster")) + { + col.Visible = true; + continue; + } + + if (col.Name.Equals("StatHP") || + col.Name.Equals("StatMinAC") || col.Name.Equals("StatMaxAC") || + col.Name.Equals("StatMinMAC") || col.Name.Equals("StatMaxMAC") || + col.Name.Equals("StatMinDC") || col.Name.Equals("StatMaxDC") || + col.Name.Equals("StatMinMC") || col.Name.Equals("StatMaxMC") || + col.Name.Equals("StatMinSC") || col.Name.Equals("StatMaxSC") || + col.Name.Equals("StatAccuracy") || col.Name.Equals("StatAgility")) + { + col.Visible = true; + continue; + } + + col.Visible = false; + } + } + } + + private void txtSearch_KeyDown(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.Enter) + { + UpdateFilter(); + + e.Handled = true; + e.SuppressKeyPress = true; + } + } + + private void btnImport_Click(object sender, EventArgs e) + { + OpenFileDialog ofd = new OpenFileDialog(); + ofd.Filter = "CSV (*.csv)|*.csv"; + + if (ofd.ShowDialog() == DialogResult.OK) + { + var fileName = ofd.FileName; + bool fileError = false; + + var rows = File.ReadAllLines(fileName); + + if (rows.Length > 1) + { + var columns = rows[0].Split(','); + + if (columns.Length < 2) + { + fileError = true; + MessageBox.Show("No columns to import."); + } + + if (!fileError) + { + monsterInfoGridView.EditMode = DataGridViewEditMode.EditProgrammatically; + + int rowsEdited = 0; + + for (int i = 1; i < rows.Length; i++) + { + var row = rows[i]; + + var cells = row.Split(','); + + if (string.IsNullOrWhiteSpace(cells[0])) + { + continue; + } + + if (cells.Length != columns.Length) + { + fileError = true; + MessageBox.Show($"Row {i} column count does not match the headers column count."); + break; + } + + var dataRow = FindRowByMonsterName(cells[0]); + + try + { + if (dataRow != null) + { + monsterInfoGridView.BeginEdit(true); + } + + if (dataRow == null) + { + dataRow = Table.NewRow(); + + Table.Rows.Add(dataRow); + } + + for (int j = 0; j < columns.Length; j++) + { + var column = columns[j]; + + if (string.IsNullOrWhiteSpace(column)) + { + continue; + } + + var dataColumn = monsterInfoGridView.Columns[column]; + + if (dataColumn == null) + { + fileError = true; + MessageBox.Show($"Column {column} was not found."); + break; + } + + if (dataColumn.ValueType.IsEnum) + { + dataRow[column] = Enum.Parse(dataColumn.ValueType, cells[j]); + } + else + { + dataRow[column] = cells[j]; + } + } + + dataRow["Modified"] = true; + + monsterInfoGridView.EndEdit(); + } + catch (Exception ex) + { + fileError = true; + monsterInfoGridView.EndEdit(); + + MessageBox.Show($"Error when importing item {cells[0]}. {ex.Message}"); + continue; + } + + rowsEdited++; + + if (fileError) + { + break; + } + } + + if (!fileError) + { + monsterInfoGridView.EditMode = DataGridViewEditMode.EditOnKeystrokeOrF2; + MessageBox.Show($"{rowsEdited} monsters have been imported."); + } + } + } + else + { + MessageBox.Show("No rows to import."); + } + } + } + + private void btnExport_Click(object sender, EventArgs e) + { + if (monsterInfoGridView.Rows.Count > 0) + { + SaveFileDialog sfd = new SaveFileDialog(); + sfd.Filter = "CSV (*.csv)|*.csv"; + sfd.FileName = "MonsterInfo Output.csv"; + bool fileError = false; + if (sfd.ShowDialog() == DialogResult.OK) + { + if (File.Exists(sfd.FileName)) + { + try + { + File.Delete(sfd.FileName); + } + catch (IOException ex) + { + fileError = true; + MessageBox.Show("It wasn't possible to write the data to the disk." + ex.Message); + } + } + if (!fileError) + { + try + { + int columnCount = monsterInfoGridView.Columns.Count; + string columnNames = ""; + string[] outputCsv = new string[monsterInfoGridView.Rows.Count + 1]; + for (int i = 2; i < columnCount; i++) + { + columnNames += monsterInfoGridView.Columns[i].Name.ToString() + ","; + } + outputCsv[0] += columnNames; + + for (int i = 1; (i - 1) < monsterInfoGridView.Rows.Count; i++) + { + for (int j = 2; j < columnCount; j++) + { + var cell = monsterInfoGridView.Rows[i - 1].Cells[j]; + + var valueType = monsterInfoGridView.Columns[j].ValueType; + if (valueType.IsEnum) + { + outputCsv[i] += ((Enum.ToObject(valueType, cell.Value ?? 0))?.ToString() ?? "") + ","; + } + else + { + outputCsv[i] += (cell.Value?.ToString() ?? "") + ","; + } + } + } + + File.WriteAllLines(sfd.FileName, outputCsv, Encoding.UTF8); + MessageBox.Show("Data Exported Successfully.", "Info"); + } + catch (Exception ex) + { + MessageBox.Show("Error :" + ex.Message); + } + } + } + } + else + { + MessageBox.Show("No Monsters To Export.", "Info"); + } + } + + private void monsterInfoGridView_DefaultValuesNeeded(object sender, DataGridViewRowEventArgs e) + { + var row = e.Row; + + row.Cells["Modified"].Value = (bool)true; + + row.Cells["MonsterName"].Value = ""; + row.Cells["MonsterImage"].Value = (Monster)0; + row.Cells["MonsterAI"].Value = (byte)0; + row.Cells["MonsterLevel"].Value = (ushort)0; + row.Cells["MonsterEffect"].Value = (byte)0; + row.Cells["MonsterLight"].Value = (byte)0; + row.Cells["MonsterAttackSpeed"].Value = (ushort)2500; + row.Cells["MonsterMoveSpeed"].Value = (ushort)1800; + row.Cells["MonsterViewRange"].Value = (byte)7; + row.Cells["MonsterCoolEye"].Value = (byte)0; + row.Cells["MonsterExperience"].Value = (uint)0; + row.Cells["MonsterCanPush"].Value = (bool)true; + row.Cells["MonsterCanTame"].Value = (bool)true; + row.Cells["MonsterUndead"].Value = (bool)false; + row.Cells["MonsterAutoRev"].Value = (bool)true; + row.Cells["MonsterDropPath"].Value = ""; + + foreach (Stat stat in StatEnums) + { + if (stat == Stat.Unknown) continue; + + row.Cells["Stat" + stat.ToString()].Value = 0; + } + } + + private void monsterInfoGridView_UserDeletingRow(object sender, DataGridViewRowCancelEventArgs e) + { + var row = e.Row; + + if (row.Cells["MonsterIndex"].Value != null) + { + int index = (int)row.Cells["MonsterIndex"].Value; + + var item = Envir.MonsterInfoList.FirstOrDefault(x => x.Index == index); + + Envir.MonsterInfoList.Remove(item); + } + } + + private void monsterInfoFormNew_FormClosed(object sender, FormClosedEventArgs e) + { + SaveForm(); + Envir.SaveDB(); + } + + private void monsterInfoGridView_DataError(object sender, DataGridViewDataErrorEventArgs e) + { + + } + } +} \ No newline at end of file diff --git a/Server.MirForms/Database/MonsterInfoFormNew.resx b/Server.MirForms/Database/MonsterInfoFormNew.resx new file mode 100644 index 0000000..d94315e --- /dev/null +++ b/Server.MirForms/Database/MonsterInfoFormNew.resx @@ -0,0 +1,1772 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + + + AAABAAgAICAQAAAABADoAgAAhgAAACAgAAAAABgAqAwAAG4DAAAgIAAAAAAIAKgIAAAWEAAAQEAAAAAA + GAAoMgAAvhgAAEBAEAAAAAQAaAoAAOZKAABAQAAAAAAIACgWAABOVQAAgIAAAAAAGAAoyAAAdmsAAICA + AAAAAAgAKEwAAJ4zAQAoAAAAIAAAAEAAAAABAAQAAAAAAAACAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAA + gAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////ABER + ERAAAAAAAAAAAAAAAAARERERAAAAAAAAAAAAAAAAERERERAAAAAAAAAAAAAAABERERERAAAAAQAAAAAA + AAARERAAAQAAAAEAAAAAAAAAEREREQAAAAABAAAAAAAAABERERERAAAAABAAAAAAAAAREREREQAAAAAQ + AAAQAAAAEREREREAAAAAAAABEAAAAAERERERAAAAAAAxERAAAAAQERERERAAAAABEQAAAAAAAAAREREQ + AAAAAQARERARAAAAEREREAAAAAEBEAERERAAAAAAAAAAAAAQEQARMzERAAAAEREAAAABEBADMzMzEQAA + AAEQAAAAAAEAADMxMxEAAAAAAAAAAAEQEQAzMxEQAAABAAEAAAEREAAAMBMQEAAAAAARAAABEREQADEQ + EQAAAAABEBEBEREQATAREREAAAAQAQAQARERAQABEQERAAAAAAAAEBETEQMRERAREQAAAAAAARARExEQ + AREAAREQAAAAAAEBERMxMQEBAAABEQABAAAAAQERERMREQAAAAEAABAAABABERExERAAAAAAAAAAAAAA + EREREREAAAAAAAAAABAQEQAAAREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABAAAAAAAAAAAA + AAAAEAARAAAAAAAAAAAAAAAAAAABEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABABgAAAAAAAAM + AAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA + AACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAAAA + AAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA + AACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACA + AACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAACAAACAAACAAACAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAA + AACAAACAAACAAACAAACAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAAAAAAAAAACAAACAAACAAACAAACA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACAAAAAAACAAACAAAAAAAAAAACAAACAAICAAICAAICAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAA + AACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAACAAAAAAAAAAICAAICAAICA + AICAAICAAICAAICAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAICAAICAAICAAACAAICAAICAAACAAACAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAACAAACA + AAAAAAAAAICAAICAAICAAICAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAACA + AAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAICAAAAAAACAAICAAACAAAAA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAACAAACAAACA + AACAAACAAACAAAAAAAAAAAAAAICAAACAAACAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAACAAACAAAAAAACAAACAAAAAAACAAACAAACAAACAAACAAACAAAAAAAAAAACAAICAAAAAAACAAACA + AACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAACA + AACAAACAAACAAACAAAAAAACAAAAAAAAAAAAAAACAAACAAACAAAAAAACAAACAAACAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAICAAACAAACAAAAAAICAAACAAACA + AACAAACAAACAAAAAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + AACAAAAAAACAAACAAACAAICAAACAAACAAACAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAACAAACAAACA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAACAAICAAICAAACA + AICAAACAAAAAAACAAAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAACAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAACAAACAAACAAICAAACAAACAAACAAACAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACA + AACAAACAAACAAACAAICAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAAAA + AACAAACAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAA + AACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAACAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE + AAAAAAAAAAAAAAABAAAAAQAAAAD/AAD/AAD/AAAAAP//AP//AAD/AP8AwMDAAP/48ADX6/oA1P9/AP8A + AADiK4oAKiqlAAAAAAAEBAQACAgIAAwMDAAREREAFhYWABwcHAAiIiIAKSkpADMzMwA5OTkAQkJCAE1N + TQBVVVUAYGBgAGZmZgBwcHAAgICAAIyMjACUlJQAmZmZAKSkpACsrKwAtra2AMDAwADMzMwA1NTUANra + 2gDg4OAA7OzsAPj4+AD7+/sA////ADMAAABmAAAAmQAAAMwAAAD/AAAAADMAADMzAABmMwAAmTMAAMwz + AAD/MwAAAGYAADNmAABmZgAAmWYAAMxmAAD/ZgAAAJkAADOZAABmmQAAmZkAAMyZAAD/mQAAAMwAADPM + AABmzAAAmcwAAMzMAAD/zAAAAP8AADP/AABm/wAAmf8AAMz/AAD//wAAAAAzADMAMwBmADMAmQAzAMwA + MwD/ADMAADMzAGYzMwCZMzMAzDMzAP8zMwAAZjMAM2YzAGZmMwCZZjMAzGYzAP9mMwAAmTMAM5kzAGaZ + MwCZmTMAzJkzAP+ZMwAAzDMAM8wzAGbMMwCZzDMAzMwzAP/MMwAA/zMAM/8zAGb/MwCZ/zMAzP8zAP// + MwAAAGYAMwBmAGYAZgCZAGYAzABmAP8AZgAAM2YAMzNmAGYzZgCZM2YAzDNmAP8zZgAAZmYAM2ZmAJlm + ZgDMZmYA/2ZmAACZZgAzmWYAZplmAJmZZgDMmWYA/5lmAADMZgAzzGYAZsxmAJnMZgDMzGYA/8xmAAD/ + ZgAz/2YAZv9mAJn/ZgDM/2YA//9mAAAAmQAzAJkAZgCZAJkAmQDMAJkA/wCZAAAzmQAzM5kAZjOZAJkz + mQDMM5kA/zOZAABmmQAzZpkAZmaZAJlmmQDMZpkA/2aZAACZmQAzmZkAZpmZAMyZmQD/mZkAAcyZADPM + mQBmzJkAmcyZAMzMmQD/zJkAAP+ZADP/mQBm/5kAmf+ZAMz/mQD//5kAAADMADMAzABmAMwAmQDMAMwA + zAD/AMwAADPMADMzzABmM8wAmTPMAMwzzAD/M8wAAGbMADNmzABmZswAmWbMAMxmzAD/ZswAAJnMADOZ + zABmmcwAmZnMAMyZzAD/mcwAAMzMADPMzABmzMwAmczMAP/MzAAA/8wAM//MAGb/zACZ/8wAzP/MAP// + zAAAAP8AMwD/AGYA/wCZAP8AzAD/AP8A/wAAM/8AMzP/AGYz/wCZM/8AzDP/AP8z/wAAZv8AM2b/AGZm + /wCZZv8AzGb/AP9m/wAAmf8AM5n/AGaZ/wCZmf8AzJn/AP+Z/wAAzP8AM8z/AGbM/wCZzP8AzMz/AP/M + /wAA//8AM///AGb//wCZ//8AzP//AJ+fn5+fn58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQn5+fn5+f + n58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBCfn5+fn5+fn58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEJ+f + n5+fn5+fn58QEBAQEBAQnxAQEBAQEBAQEBAQEBAQn5+fn58QEBAQnxAQEBAQEBCfEBAQEBAQEBAQEBAQ + EBCfn5+fn5+fnxAQEBAQEBAQEJ8QEBAQEBAQEBAQEBAQEJ+fn5+fn5+fn58QEBAQEBAQEJ8QEBAQEBAQ + EBAQEBAQn5+fn5+fn5+fnxAQEBAQEBAQnxAQEBAQnxAQEBAQEBCfn5+fn5+fn5+fEBAQEBAQEBAQEBAQ + EJ+fEBAQEBAQEBCfn5+fn5+fn58QEBAQEBAQEBAQrZ+fn58QEBAQEBAQnxCfn5+fn5+fn58QEBAQEBAQ + EJ+fnxAQEBAQEBAQEBAQEBAQn5+fn5+fnxAQEBAQEBAQnxAQn5+fn58Qn58QEBAQEBCfn5+fn5+fEBAQ + EBAQEBCfEJ+fEBCfn5+fn58QEBAQEBAQEBAQEBAQEBAQEBAQnxCfnxAQn5+tra2fn58QEBAQEBCfn5+f + EBAQEBAQEJ+fEJ8QEK2tra2tra2fnxAQEBAQEBCfnxAQEBAQEBAQEBCfEBAQEK2trZ+trZ+fEBAQEBAQ + EBAQEBAQEBAQEBCfnxCfnxAQra2trZ+fnxAQEBAQEJ8QEBCfEBAQEBCfn5+fEBAQEBCtEJ+tnxCfEBAQ + EBAQEBAQn58QEBAQEJ+fn5+fnxAQEK2fnxCfnxAQEBAQEBAQEJ+fEJ+fEJ+fn5+fnxAQn60Qn5+fn5+f + EBAQEBAQnxAQnxAQnxAQn5+fn58QnxAQEJ+fnxCfn58QEBAQEBAQEBAQEBCfEJ+fn62fnxCtn5+fn58Q + n5+fnxAQEBAQEBAQEBAQn58Qn5+frZ+fnxAQn5+fEBAQn5+fnxAQEBAQEBAQEBCfEJ+fn5+trZ+tnxCf + EJ8QEBAQEJ+fnxAQEJ8QEBAQEBAQnxCfn5+fn5+tn5+fnxAQEBAQEBCfEBAQEJ8QEBAQEJ8QEJ+fn5+f + rZ+fn58QEBAQEBAQEBAQEBAQEBAQEBAQEBCfn5+fn5+fn5+fEBAQEBAQEBAQEBAQEBAQEJ8QnxCfnxAQ + EBAQn5+fEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEJ8QEJ8QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBCfEBAQn58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEJ+fEJ8QEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAABAAAAAgAAAAAEAGAAAAAAAADAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAA + AAAAAIAAAIAAAAAAAAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAA + gIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAAIAA + AIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAgIAA + gIAAgIAAgIAAAIAAAIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAAAAAAAAAIAAAIAAgIAAgIAAAIAAAIAAAAAA + AAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAAAAAAAAAIAAAIAAgIAA + gIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAA + AIAAgIAAgIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAA + AAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAIAAAIAAgIAAgIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAgIAAgIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAgIAA + gIAAgIAAgIAAAIAAAIAAgIAAgIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAgIAAgIAAgIAAgIAAAIAAAIAAgIAAgIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAgIAA + gIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAAAA + AAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAABAAAAAgAAAAAEABAAAAAAAAAgAAAAA + AAAAAAAAEAAAABAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAwMDAAICAgAAAAP8AAP8AAAD/ + /wD/AAAA/wD/AP//AAD///8AEREREREREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARERERERERAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAABERERERERERAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAERERERER + EREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAREREREREREREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABER + EREREREREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEREREREREREREQAAAAAAAAARAAAAAAAAAAAAAAAA + AAARERERERERERERAAAAAAAAABEAAAAAAAAAAAAAAAAAABERERERAAAAABEAAAAAAAAAEQAAAAAAAAAA + AAAAAAAAEREREREAAAAAEQAAAAAAAAARAAAAAAAAAAAAAAAAAAAREREREREREQAAAAAAAAAAABEAAAAA + AAAAAAAAAAAAABERERERERERAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAEREREREREREREQAAAAAAAAAA + EQAAAAAAAAAAAAAAAAARERERERERERERAAAAAAAAAAARAAAAAAAAAAAAAAAAABEREREREREREREAAAAA + AAAAABEAAAAAABEAAAAAAAAAEREREREREREREQAAAAAAAAAAEQAAAAAAEQAAAAAAAAARERERERERERER + AAAAAAAAAAAAAAAAABERAAAAAAAAABEREREREREREREAAAAAAAAAAAAAAAAAEREAAAAAAAAAABERERER + EREREQAAAAAAAAAAAAAzEREREQAAAAAAAAAAERERERERERERAAAAAAAAAAAAADMRERERAAAAAAAAABEA + ERERERERERERAAAAAAAAAAAREREAAAAAAAAAAAAAEQAREREREREREREAAAAAAAAAABEREQAAAAAAAAAA + AAAAAAAAEREREREREQAAAAAAAAAAEQAAEREREREAEREAAAAAAAARERERERERAAAAAAAAAAARAAARERER + EQAREQAAAAAAABEREREREREAAAAAAAAAABEAEREAABEREREREQAAAAAAEREREREREQAAAAAAAAAAEQAR + EQAAERERERERAAAAAAAAAAAAAAAAAAAAAAAAABEAEREAABERMzMzERERAAAAAAAAAAAAAAAAAAAAAAAA + EQAREQAAEREzMzMREREAAAAAAAARERERAAAAAAAAABERABEAADMzMzMzMzMREQAAAAAAABEREREAAAAA + AAAAEREAEQAAMzMzMzMzMxERAAAAAAAAABERAAAAAAAAAAAAABEAAAAAMzMzETMzEREAAAAAAAAAEREA + AAAAAAAAAAAAEQAAAAAzMzMRMzMREQAAAAAAAAAAAAAAAAAAAAAAEREAEREAADMzMzMREREAAAAAAAAA + AAAAAAAAAAAAAAAREQAREQAAMzMzMxEREQAAAAAAABEAAAARAAAAAAARERERAAAAAAAzABEzEQARAAAA + AAAAEQAAABEAAAAAABEREREAAAAAADMAETMRABEAAAAAAAAAAAAREQAAAAAAERERERERAAAAMxERABER + AAAAAAAAAAAAABERAAAAAAAREREREREAAAAzEREAEREAAAAAAAAAAAAREQAREQAREREREREAABEzABER + EREREQAAAAAAAAAAABERABERABEREREREQAAETMAERERERERAAAAAAAAEQAAEQAAEQAAEREREREAEQAA + ABEREQAREREAAAAAAAARAAARAAARAAAREREREQARAAAAERERABEREQAAAAAAAAAAAAAAABEAERERMxER + ADMREREREQARERERAAAAAAAAAAAAAAAAEQAREREzEREAMxERERERABEREREAAAAAAAAAAAAAABERABER + ETMREREAABEREQAAABEREREAAAAAAAAAAAAAEREAERERMxEREQAAERERAAAAEREREQAAAAAAAAAAAAAR + ABEREREzMxEzEQARABEAAAAAABEREQAAAAAAAAAAABEAERERETMzETMRABEAEQAAAAAAERERAAAAEQAA + AAAAAAARABERERERETMRERERAAAAAAAAABEAAAARAAAAAAAAABEAERERERERMxEREREAAAAAAAAAEQAA + AAARAAAAAAARAAARERERETMRERERAAAAAAAAAAAAAAAAABEAAAAAABEAABERERERMxEREREAAAAAAAAA + AAAAAAAAAAAAAAAAAAARERERERERERERAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEREREREREREREAAAAA + AAAAAAAAAAAAAAAAEQARABERAAAAAAAREREAAAAAAAAAAAAAAAAAAAAAAAARABEAEREAAAAAABEREQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + EQAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAAAREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + EQAAABERAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAREQARAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAABERABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgA + AABAAAAAgAAAAAEACAAAAAAAABAAAAAAAAAAAAAAAAEAAAABAAAAAP8AAP8AAP8AAAAA//8A//8AAP8A + /wDAwMAA//jwANfr+gDU/38A/wAAAOIrigAqKqUAAAAAAAQEBAAICAgADAwMABEREQAWFhYAHBwcACIi + IgApKSkAMzMzADk5OQBCQkIATU1NAFVVVQBgYGAAZmZmAHBwcACAgIAAjIyMAJSUlACZmZkApKSkAKys + rAC2trYAwMDAAMzMzADU1NQA2traAODg4ADs7OwA+Pj4APv7+wD///8AMwAAAGYAAACZAAAAzAAAAP8A + AAAAMwAAMzMAAGYzAACZMwAAzDMAAP8zAAAAZgAAM2YAAGZmAACZZgAAzGYAAP9mAAAAmQAAM5kAAGaZ + AACZmQAAzJkAAP+ZAAAAzAAAM8wAAGbMAACZzAAAzMwAAP/MAAAA/wAAM/8AAGb/AACZ/wAAzP8AAP// + AAAAADMAMwAzAGYAMwCZADMAzAAzAP8AMwAAMzMAZjMzAJkzMwDMMzMA/zMzAABmMwAzZjMAZmYzAJlm + MwDMZjMA/2YzAACZMwAzmTMAZpkzAJmZMwDMmTMA/5kzAADMMwAzzDMAZswzAJnMMwDMzDMA/8wzAAD/ + MwAz/zMAZv8zAJn/MwDM/zMA//8zAAAAZgAzAGYAZgBmAJkAZgDMAGYA/wBmAAAzZgAzM2YAZjNmAJkz + ZgDMM2YA/zNmAABmZgAzZmYAmWZmAMxmZgD/ZmYAAJlmADOZZgBmmWYAmZlmAMyZZgD/mWYAAMxmADPM + ZgBmzGYAmcxmAMzMZgD/zGYAAP9mADP/ZgBm/2YAmf9mAMz/ZgD//2YAAACZADMAmQBmAJkAmQCZAMwA + mQD/AJkAADOZADMzmQBmM5kAmTOZAMwzmQD/M5kAAGaZADNmmQBmZpkAmWaZAMxmmQD/ZpkAAJmZADOZ + mQBmmZkAzJmZAP+ZmQABzJkAM8yZAGbMmQCZzJkAzMyZAP/MmQAA/5kAM/+ZAGb/mQCZ/5kAzP+ZAP// + mQAAAMwAMwDMAGYAzACZAMwAzADMAP8AzAAAM8wAMzPMAGYzzACZM8wAzDPMAP8zzAAAZswAM2bMAGZm + zACZZswAzGbMAP9mzAAAmcwAM5nMAGaZzACZmcwAzJnMAP+ZzAAAzMwAM8zMAGbMzACZzMwA/8zMAAD/ + zAAz/8wAZv/MAJn/zADM/8wA///MAAAA/wAzAP8AZgD/AJkA/wDMAP8A/wD/AAAz/wAzM/8AZjP/AJkz + /wDMM/8A/zP/AABm/wAzZv8AZmb/AJlm/wDMZv8A/2b/AACZ/wAzmf8AZpn/AJmZ/wDMmf8A/5n/AADM + /wAzzP8AZsz/AJnM/wDMzP8A/8z/AAD//wAz//8AZv//AJn//wDM//8An5+fn5+fn5+fn5+fn58dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+f + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+f + n5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+f + n5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+f + n5+fn5+fn5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fn5+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn5+fn5+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHZ+fHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fHR0dHR0dHR2fnx0dHR0dHR0dHR0dHR0dn58dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fnx0dHR0dHR0dn58dHR0dHR0dHR0dHR0dHZ+fHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR2fnx0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0d + n58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0d + HR0dHR0dn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0d + HR0dHR0dHR0dHZ+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fn5+fn5+fnx0d + HR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dHR2fnx0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn5+fn5+f + n58dHR0dHR0dHR0dHR0dHR0dn58dHR0dHR0dHR0dn58dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+f + n5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+f + n5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fnx0dHR0dHR0dHR0dHR0dHR2fn5+f + n5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHa2tn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0d + n5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR2trZ+fn5+fn5+fHR0dHR0dHR0dHR0d + HR2fnx0dn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHZ+fn5+fnx0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHZ+fn5+fn5+fn5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR2fn5+fn58dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dn58dHR0dn5+fn5+f + n5+fnx0dn5+fnx0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHZ+fHR0dHZ+f + n5+fn5+fn58dHZ+fn58dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR2fnx0d + n5+fnx0dHR2fn5+fn5+fn5+fn58dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0d + n58dHZ+fn58dHR0dn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fnx0dn5+fnx0dHR2fn5+fra2tra2tn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHZ+fn58dHR0dn5+fn62tra2trZ+fn5+fnx0dHR0dHR0dHR0dHZ+fn5+fn5+fHR0dHR0d + HR0dHR0dHR2fn5+fHR2fnx0dHR2tra2tra2tra2tra2trZ+fn58dHR0dHR0dHR0dHR2fn5+fn5+fnx0d + HR0dHR0dHR0dHR0dn5+fnx0dn58dHR0dra2tra2tra2tra2tra2fn5+fHR0dHR0dHR0dHR0dHR2fn5+f + HR0dHR0dHR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dra2tra2tn5+tra2tn5+fnx0dHR0dHR0dHR0dHR0d + n5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dn58dHR0dHR0dHa2tra2trZ+fra2trZ+fn58dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fnx0dn5+fnx0dHR2tra2tra2trZ+fn5+fnx0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn58dHZ+fn58dHR0dra2tra2tra2fn5+fn58dHR0d + HR0dHR0dHR2fnx0dHR0dHZ+fHR0dHR0dHR0dHZ+fn5+fn5+fHR0dHR0dHR0dHa2tHR2fn62tn58dHZ+f + HR0dHR0dHR0dHR0dn58dHR0dHR2fnx0dHR0dHR0dHR2fn5+fn5+fnx0dHR0dHR0dHR2trR0dn5+trZ+f + HR2fnx0dHR0dHR0dHR0dHR0dHR0dHZ+fn58dHR0dHR0dHR0dn5+fn5+fn5+fn5+fHR0dHR0dra2fn5+f + HR2fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR0dHR0dHR0dHZ+fn5+fn5+fn5+fnx0dHR0dHa2t + n5+fnx0dn5+fnx0dHR0dHR0dHR0dHR0dHR0dHZ+fn58dHZ+fn58dHZ+fn5+fn5+fn5+fnx0dHR2fn62t + HR2fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR2fn5+fHR2fn5+fn5+fn5+fn58dHR0d + n5+trR0dn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dn58dHR0dn58dHR0dn58dHR0dn5+fn5+fn5+fnx0d + n58dHR0dHR2fn5+fn58dHZ+fn5+fnx0dHR0dHR0dHR0dHZ+fHR0dHZ+fHR0dHZ+fHR0dHZ+fn5+fn5+f + n58dHZ+fHR0dHR0dn5+fn5+fHR2fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fnx0dn5+fn5+f + ra2fn5+fHR2trZ+fn5+fn5+fn58dHZ+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn58dHZ+f + n5+fn62tn5+fnx0dra2fn5+fn5+fn5+fHR2fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+f + HR2fn5+fn5+trZ+fn5+fnx0dHR2fn5+fn58dHR0dHR2fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0d + n5+fnx0dn5+fn5+fra2fn5+fn58dHR0dn5+fn5+fHR0dHR0dn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0d + HR0dHZ+fHR2fn5+fn5+fn62tra2fn62tn58dHZ+fHR2fnx0dHR0dHR0dHR2fn5+fn58dHR0dHR0dHR0d + HR0dHR0dHR2fnx0dn5+fn5+fn5+tra2tn5+trZ+fHR2fnx0dn58dHR0dHR0dHR0dn5+fn5+fHR0dHR0d + n58dHR0dHR0dHR0dHR0dHZ+fHR2fn5+fn5+fn5+fn5+trZ+fn5+fn5+fHR0dHR0dHR0dHR0dHR2fnx0d + HR0dHZ+fHR0dHR0dHR0dHR0dHR2fnx0dn5+fn5+fn5+fn5+fra2fn5+fn5+fnx0dHR0dHR0dHR0dHR0d + n58dHR0dHR0dHZ+fHR0dHR0dHR0dHZ+fHR0dHZ+fn5+fn5+fn5+trZ+fn5+fn5+fHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dHR2fnx0dHR2fn5+fn5+fn5+fra2fn5+fn5+fnx0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fn5+fn5+fnx0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn58dHZ+fHR2fn5+fHR0dHR0dHR0dHZ+fn5+fnx0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fHR2fnx0dn5+fnx0dHR0dHR0dHR2fn5+f + n58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fnx0dHR2fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHR0dn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fnx0dHR0dHZ+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHR0dHR2fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHZ+fn58dHZ+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR2fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAIAAAAAAAQAAAQAYAAAAAAAAwAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAIAAAAAAAQAAAQAIAAAAAAAAQAAAAAAAAAAA + AAAAAQAAAAEAAAAA/wAA/wAA/wAAAAD//wD//wAA/wD/AMDAwAD/+PAA1+v6ANT/fwD/AAAA4iuKACoq + pQAAAAAABAQEAAgICAAMDAwAERERABYWFgAcHBwAIiIiACkpKQAzMzMAOTk5AEJCQgBNTU0AVVVVAGBg + YABmZmYAcHBwAICAgACMjIwAlJSUAJmZmQCkpKQArKysALa2tgDAwMAAzMzMANTU1ADa2toA4ODgAOzs + 7AD4+PgA+/v7AP///wAzAAAAZgAAAJkAAADMAAAA/wAAAAAzAAAzMwAAZjMAAJkzAADMMwAA/zMAAABm + AAAzZgAAZmYAAJlmAADMZgAA/2YAAACZAAAzmQAAZpkAAJmZAADMmQAA/5kAAADMAAAzzAAAZswAAJnM + AADMzAAA/8wAAAD/AAAz/wAAZv8AAJn/AADM/wAA//8AAAAAMwAzADMAZgAzAJkAMwDMADMA/wAzAAAz + MwBmMzMAmTMzAMwzMwD/MzMAAGYzADNmMwBmZjMAmWYzAMxmMwD/ZjMAAJkzADOZMwBmmTMAmZkzAMyZ + MwD/mTMAAMwzADPMMwBmzDMAmcwzAMzMMwD/zDMAAP8zADP/MwBm/zMAmf8zAMz/MwD//zMAAABmADMA + ZgBmAGYAmQBmAMwAZgD/AGYAADNmADMzZgBmM2YAmTNmAMwzZgD/M2YAAGZmADNmZgCZZmYAzGZmAP9m + ZgAAmWYAM5lmAGaZZgCZmWYAzJlmAP+ZZgAAzGYAM8xmAGbMZgCZzGYAzMxmAP/MZgAA/2YAM/9mAGb/ + ZgCZ/2YAzP9mAP//ZgAAAJkAMwCZAGYAmQCZAJkAzACZAP8AmQAAM5kAMzOZAGYzmQCZM5kAzDOZAP8z + mQAAZpkAM2aZAGZmmQCZZpkAzGaZAP9mmQAAmZkAM5mZAGaZmQDMmZkA/5mZAAHMmQAzzJkAZsyZAJnM + mQDMzJkA/8yZAAD/mQAz/5kAZv+ZAJn/mQDM/5kA//+ZAAAAzAAzAMwAZgDMAJkAzADMAMwA/wDMAAAz + zAAzM8wAZjPMAJkzzADMM8wA/zPMAABmzAAzZswAZmbMAJlmzADMZswA/2bMAACZzAAzmcwAZpnMAJmZ + zADMmcwA/5nMAADMzAAzzMwAZszMAJnMzAD/zMwAAP/MADP/zABm/8wAmf/MAMz/zAD//8wAAAD/ADMA + /wBmAP8AmQD/AMwA/wD/AP8AADP/ADMz/wBmM/8AmTP/AMwz/wD/M/8AAGb/ADNm/wBmZv8AmWb/AMxm + /wD/Zv8AAJn/ADOZ/wBmmf8AmZn/AMyZ/wD/mf8AAMz/ADPM/wBmzP8Amcz/AMzM/wD/zP8AAP//ADP/ + /wBm//8Amf//AMz//wCfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pra2trZ+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+tra2tn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD62tra2fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+f + n5+tra2tra2tra2tra2fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8P + Dw+fn5+fn5+fn62tra2tra2tra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+f + n58PDw8PDw8PD5+fn5+fn5+fra2tra2tra2tra2tn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8P + Dw+fn5+fDw8PDw8PDw+tra2tra2tra2tra2tra2tra2tra2tra2tra2tn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PD5+fn58PDw8PDw8PD62tra2tra2tra2tra2tra2tra2tra2tra2tra2fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8Pn5+fnw8PDw8PDw8Pra2tra2tra2tra2tra2tra2tra2tra2tra2trZ+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw+fn5+fDw8PDw8PDw+tra2tra2tra2tra2tra2tra2tra2t + ra2tra2tn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+fn58PDw8PDw8PD62tra2tra2tra2tra2t + ra2tra2tra2tra2tra2fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PD62t + ra2tra2tra2trZ+fn5+tra2tra2trZ+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8Pra2tra2tra2tra2tn5+fn62tra2tra2tn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PDw8PDw+tra2tra2tra2tra2fn5+fra2tra2tra2fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n58PDw8Pn5+fn5+fn58PDw8PDw8PD62tra2tra2tra2tra2tra2fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pra2tra2tra2tra2tra2trZ+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw+tra2tra2tra2tra2tra2tn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PD62tra2tra2tra2tra2t + ra2fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pra2tra2t + ra2tra2tra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw+tra2tDw8PD5+fn5+tra2tn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PD62tra0PDw8Pn5+fn62tra2fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pra2trQ8PDw+fn5+fra2trZ+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw+tra2tn5+fn5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PD62tra2fn5+fn5+fnw8PDw+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8Pra2trZ+fn5+fn5+fDw8PD5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw+tra2tn5+fn5+f + n58PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PD62t + ra2fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PD5+fn5+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8Pn5+fn62t + ra0PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw+fn5+fra2trQ8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PD5+fn5+tra2tDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PD5+fn58PDw8PDw8PD5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fDw8PD5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+fn58PDw8PDw8PD5+f + n58PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n58PDw8Pn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fnw8P + Dw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fnw8PDw+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fn5+fn62tra2fn5+fn5+fnw8PDw+tra2tn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fDw8PD62t + ra2fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+tra2tn5+fn5+f + n58PDw8Pra2trZ+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+fn5+fn5+fn5+fn62t + ra2fn5+fn5+fn5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+f + n5+fn5+fra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8P + Dw+fn5+fn5+fn5+fn5+tra2tn5+fn5+fn5+fn5+fDw8PDw8PDw+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PD5+fn5+fn5+fn5+fn62tra2fn5+fn5+fn5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn5+tra2tra2trZ+fn5+tra2tn5+fnw8P + Dw+fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn62tra2tra2tn5+fn62t + ra2fn5+fDw8PD5+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fra2tra2t + ra2fn5+fra2trZ+fn58PDw8Pn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+tra2tn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn62tra2fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+tra2tn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fra2trZ+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+tra2tn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn62tra2fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8Pn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n58PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + + + \ No newline at end of file diff --git a/Server.MirForms/Database/NPCInfoForm.Designer.cs b/Server.MirForms/Database/NPCInfoForm.Designer.cs new file mode 100644 index 0000000..383b0e5 --- /dev/null +++ b/Server.MirForms/Database/NPCInfoForm.Designer.cs @@ -0,0 +1,932 @@ +namespace Server +{ + partial class NPCInfoForm + { + /// + /// 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(NPCInfoForm)); + tabControl1 = new TabControl(); + tabPage1 = new TabPage(); + NPCHairPreview = new PictureBox(); + NPCPreview = new PictureBox(); + label16 = new Label(); + HairTextBox = new TextBox(); + GenderComboBox = new ComboBox(); + label14 = new Label(); + TeleportToCheckBox = new CheckBox(); + label15 = new Label(); + BigMapIconTextBox = new TextBox(); + ShowBigMapCheckBox = new CheckBox(); + label2 = new Label(); + MapComboBox = new ComboBox(); + label11 = new Label(); + NFileNameTextBox = new TextBox(); + label29 = new Label(); + NRateTextBox = new TextBox(); + ClearHButton = new Button(); + NNameTextBox = new TextBox(); + label13 = new Label(); + NPCIndexTextBox = new TextBox(); + label24 = new Label(); + label1 = new Label(); + NImageTextBox = new TextBox(); + NXTextBox = new TextBox(); + label28 = new Label(); + label30 = new Label(); + NYTextBox = new TextBox(); + tabPage2 = new TabPage(); + ConquestVisible_checkbox = new CheckBox(); + Flag_textbox = new TextBox(); + label12 = new Label(); + label10 = new Label(); + Day_combo = new ComboBox(); + Class_combo = new ComboBox(); + EndMin_num = new NumericUpDown(); + EndHour_combo = new ComboBox(); + label8 = new Label(); + label9 = new Label(); + StartMin_num = new NumericUpDown(); + StartHour_combo = new ComboBox(); + TimeVisible_checkbox = new CheckBox(); + label7 = new Label(); + MaxLev_textbox = new TextBox(); + label6 = new Label(); + label5 = new Label(); + label4 = new Label(); + label3 = new Label(); + MinLev_textbox = new TextBox(); + tabPage3 = new TabPage(); + ReloadScriptBtn = new Button(); + EditScriptBtn = new Button(); + CopyScriptBtn = new Button(); + OpenNPCScriptBtn = new Button(); + NPCScriptTextBox = new RichTextBox(); + RemoveButton = new Button(); + AddButton = new Button(); + NPCInfoListBox = new ListBox(); + PasteMButton = new Button(); + CopyMButton = new Button(); + ExportButton = new Button(); + ImportButton = new Button(); + ExportSelectedButton = new Button(); + tabControl1.SuspendLayout(); + tabPage1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)NPCHairPreview).BeginInit(); + ((System.ComponentModel.ISupportInitialize)NPCPreview).BeginInit(); + tabPage2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)EndMin_num).BeginInit(); + ((System.ComponentModel.ISupportInitialize)StartMin_num).BeginInit(); + tabPage3.SuspendLayout(); + SuspendLayout(); + // + // tabControl1 + // + tabControl1.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; + tabControl1.Controls.Add(tabPage1); + tabControl1.Controls.Add(tabPage2); + tabControl1.Controls.Add(tabPage3); + tabControl1.Location = new Point(298, 47); + tabControl1.Margin = new Padding(4, 3, 4, 3); + tabControl1.Name = "tabControl1"; + tabControl1.SelectedIndex = 0; + tabControl1.Size = new Size(606, 339); + tabControl1.TabIndex = 16; + // + // tabPage1 + // + tabPage1.Controls.Add(NPCHairPreview); + tabPage1.Controls.Add(NPCPreview); + tabPage1.Controls.Add(label16); + tabPage1.Controls.Add(HairTextBox); + tabPage1.Controls.Add(GenderComboBox); + tabPage1.Controls.Add(label14); + tabPage1.Controls.Add(TeleportToCheckBox); + tabPage1.Controls.Add(label15); + tabPage1.Controls.Add(BigMapIconTextBox); + tabPage1.Controls.Add(ShowBigMapCheckBox); + tabPage1.Controls.Add(label2); + tabPage1.Controls.Add(MapComboBox); + tabPage1.Controls.Add(label11); + tabPage1.Controls.Add(NFileNameTextBox); + tabPage1.Controls.Add(label29); + tabPage1.Controls.Add(NRateTextBox); + tabPage1.Controls.Add(ClearHButton); + tabPage1.Controls.Add(NNameTextBox); + tabPage1.Controls.Add(label13); + tabPage1.Controls.Add(NPCIndexTextBox); + tabPage1.Controls.Add(label24); + tabPage1.Controls.Add(label1); + tabPage1.Controls.Add(NImageTextBox); + tabPage1.Controls.Add(NXTextBox); + tabPage1.Controls.Add(label28); + tabPage1.Controls.Add(label30); + tabPage1.Controls.Add(NYTextBox); + tabPage1.Location = new Point(4, 24); + tabPage1.Margin = new Padding(4, 3, 4, 3); + tabPage1.Name = "tabPage1"; + tabPage1.Padding = new Padding(4, 3, 4, 3); + tabPage1.Size = new Size(598, 311); + tabPage1.TabIndex = 0; + tabPage1.Text = "Info"; + tabPage1.UseVisualStyleBackColor = true; + // + // NPCHairPreview + // + NPCHairPreview.Location = new Point(443, 65); + NPCHairPreview.Name = "NPCHairPreview"; + NPCHairPreview.Size = new Size(100, 50); + NPCHairPreview.TabIndex = 72; + NPCHairPreview.TabStop = false; + // + // NPCPreview + // + NPCPreview.Location = new Point(443, 112); + NPCPreview.Name = "NPCPreview"; + NPCPreview.Size = new Size(60, 98); + NPCPreview.SizeMode = PictureBoxSizeMode.StretchImage; + NPCPreview.TabIndex = 71; + NPCPreview.TabStop = false; + // + // label16 + // + label16.AutoSize = true; + label16.Location = new Point(314, 166); + label16.Margin = new Padding(4, 0, 4, 0); + label16.Name = "label16"; + label16.Size = new Size(32, 15); + label16.TabIndex = 68; + label16.Text = "Hair:"; + // + // HairTextBox + // + HairTextBox.Location = new Point(367, 164); + HairTextBox.Margin = new Padding(4, 3, 4, 3); + HairTextBox.MaxLength = 5; + HairTextBox.Name = "HairTextBox"; + HairTextBox.Size = new Size(42, 23); + HairTextBox.TabIndex = 67; + HairTextBox.TextChanged += HairTextBox_TextChanged; + // + // GenderComboBox + // + GenderComboBox.DropDownStyle = ComboBoxStyle.DropDownList; + GenderComboBox.FormattingEnabled = true; + GenderComboBox.Location = new Point(212, 163); + GenderComboBox.Margin = new Padding(4, 3, 4, 3); + GenderComboBox.Name = "GenderComboBox"; + GenderComboBox.Size = new Size(79, 23); + GenderComboBox.TabIndex = 66; + GenderComboBox.SelectedIndexChanged += GenderComboBox_SelectedIndexChanged; + // + // label14 + // + label14.AutoSize = true; + label14.Location = new Point(153, 166); + label14.Margin = new Padding(4, 0, 4, 0); + label14.Name = "label14"; + label14.Size = new Size(48, 15); + label14.TabIndex = 65; + label14.Text = "Gender:"; + // + // TeleportToCheckBox + // + TeleportToCheckBox.AutoSize = true; + TeleportToCheckBox.Location = new Point(293, 268); + TeleportToCheckBox.Margin = new Padding(4, 3, 4, 3); + TeleportToCheckBox.Name = "TeleportToCheckBox"; + TeleportToCheckBox.Size = new Size(107, 19); + TeleportToCheckBox.TabIndex = 63; + TeleportToCheckBox.Text = "Can Teleport To"; + TeleportToCheckBox.UseVisualStyleBackColor = true; + TeleportToCheckBox.CheckedChanged += TeleportToCheckBox_CheckedChanged; + // + // label15 + // + label15.AutoSize = true; + label15.Location = new Point(177, 270); + label15.Margin = new Padding(4, 0, 4, 0); + label15.Name = "label15"; + label15.Size = new Size(33, 15); + label15.TabIndex = 62; + label15.Text = "Icon:"; + // + // BigMapIconTextBox + // + BigMapIconTextBox.Location = new Point(219, 265); + BigMapIconTextBox.Margin = new Padding(4, 3, 4, 3); + BigMapIconTextBox.MaxLength = 5; + BigMapIconTextBox.Name = "BigMapIconTextBox"; + BigMapIconTextBox.Size = new Size(42, 23); + BigMapIconTextBox.TabIndex = 61; + BigMapIconTextBox.TextChanged += BigMapIconTextBox_TextChanged; + // + // ShowBigMapCheckBox + // + ShowBigMapCheckBox.AutoSize = true; + ShowBigMapCheckBox.Location = new Point(31, 269); + ShowBigMapCheckBox.Margin = new Padding(4, 3, 4, 3); + ShowBigMapCheckBox.Name = "ShowBigMapCheckBox"; + ShowBigMapCheckBox.Size = new Size(116, 19); + ShowBigMapCheckBox.TabIndex = 60; + ShowBigMapCheckBox.Text = "Show on BigMap"; + ShowBigMapCheckBox.UseVisualStyleBackColor = true; + ShowBigMapCheckBox.CheckedChanged += ShowBigMapCheckBox_CheckedChanged; + // + // label2 + // + label2.AutoSize = true; + label2.Location = new Point(58, 100); + label2.Margin = new Padding(4, 0, 4, 0); + label2.Name = "label2"; + label2.Size = new Size(34, 15); + label2.TabIndex = 32; + label2.Text = "Map:"; + // + // MapComboBox + // + MapComboBox.DropDownStyle = ComboBoxStyle.DropDownList; + MapComboBox.FormattingEnabled = true; + MapComboBox.Location = new Point(102, 97); + MapComboBox.Margin = new Padding(4, 3, 4, 3); + MapComboBox.Name = "MapComboBox"; + MapComboBox.Size = new Size(153, 23); + MapComboBox.TabIndex = 31; + MapComboBox.SelectedIndexChanged += MapComboBox_SelectedIndexChanged; + // + // label11 + // + label11.AutoSize = true; + label11.Location = new Point(28, 40); + label11.Margin = new Padding(4, 0, 4, 0); + label11.Name = "label11"; + label11.Size = new Size(63, 15); + label11.TabIndex = 23; + label11.Text = "File Name:"; + // + // NFileNameTextBox + // + NFileNameTextBox.Location = new Point(102, 37); + NFileNameTextBox.Margin = new Padding(4, 3, 4, 3); + NFileNameTextBox.MaxLength = 50; + NFileNameTextBox.Name = "NFileNameTextBox"; + NFileNameTextBox.Size = new Size(209, 23); + NFileNameTextBox.TabIndex = 22; + NFileNameTextBox.TextChanged += NFileNameTextBox_TextChanged; + // + // label29 + // + label29.AutoSize = true; + label29.Location = new Point(167, 198); + label29.Margin = new Padding(4, 0, 4, 0); + label29.Name = "label29"; + label29.Size = new Size(33, 15); + label29.TabIndex = 21; + label29.Text = "Rate:"; + // + // NRateTextBox + // + NRateTextBox.Location = new Point(212, 195); + NRateTextBox.Margin = new Padding(4, 3, 4, 3); + NRateTextBox.MaxLength = 3; + NRateTextBox.Name = "NRateTextBox"; + NRateTextBox.Size = new Size(42, 23); + NRateTextBox.TabIndex = 20; + NRateTextBox.TextChanged += NRateTextBox_TextChanged; + // + // ClearHButton + // + ClearHButton.Location = new Point(181, 222); + ClearHButton.Margin = new Padding(4, 3, 4, 3); + ClearHButton.Name = "ClearHButton"; + ClearHButton.Size = new Size(88, 27); + ClearHButton.TabIndex = 19; + ClearHButton.Text = "Clear History"; + ClearHButton.UseVisualStyleBackColor = true; + // + // NNameTextBox + // + NNameTextBox.Location = new Point(102, 67); + NNameTextBox.Margin = new Padding(4, 3, 4, 3); + NNameTextBox.Name = "NNameTextBox"; + NNameTextBox.Size = new Size(209, 23); + NNameTextBox.TabIndex = 14; + NNameTextBox.TextChanged += NNameTextBox_TextChanged; + // + // label13 + // + label13.AutoSize = true; + label13.Location = new Point(50, 70); + label13.Margin = new Padding(4, 0, 4, 0); + label13.Name = "label13"; + label13.Size = new Size(42, 15); + label13.TabIndex = 15; + label13.Text = "Name:"; + // + // NPCIndexTextBox + // + NPCIndexTextBox.Location = new Point(102, 5); + NPCIndexTextBox.Margin = new Padding(4, 3, 4, 3); + NPCIndexTextBox.Name = "NPCIndexTextBox"; + NPCIndexTextBox.ReadOnly = true; + NPCIndexTextBox.Size = new Size(54, 23); + NPCIndexTextBox.TabIndex = 0; + // + // label24 + // + label24.AutoSize = true; + label24.Location = new Point(49, 165); + label24.Margin = new Padding(4, 0, 4, 0); + label24.Name = "label24"; + label24.Size = new Size(37, 15); + label24.TabIndex = 13; + label24.Text = "Body:"; + // + // label1 + // + label1.AutoSize = true; + label1.Location = new Point(23, 8); + label1.Margin = new Padding(4, 0, 4, 0); + label1.Name = "label1"; + label1.Size = new Size(66, 15); + label1.TabIndex = 4; + label1.Text = "NPC Index:"; + // + // NImageTextBox + // + NImageTextBox.Location = new Point(102, 163); + NImageTextBox.Margin = new Padding(4, 3, 4, 3); + NImageTextBox.MaxLength = 5; + NImageTextBox.Name = "NImageTextBox"; + NImageTextBox.Size = new Size(42, 23); + NImageTextBox.TabIndex = 11; + NImageTextBox.TextChanged += NImageTextBox_TextChanged; + // + // NXTextBox + // + NXTextBox.Location = new Point(102, 128); + NXTextBox.Margin = new Padding(4, 3, 4, 3); + NXTextBox.MaxLength = 5; + NXTextBox.Name = "NXTextBox"; + NXTextBox.Size = new Size(42, 23); + NXTextBox.TabIndex = 2; + NXTextBox.TextChanged += NXTextBox_TextChanged; + // + // label28 + // + label28.AutoSize = true; + label28.Location = new Point(183, 132); + label28.Margin = new Padding(4, 0, 4, 0); + label28.Name = "label28"; + label28.Size = new Size(17, 15); + label28.TabIndex = 10; + label28.Text = "Y:"; + // + // label30 + // + label30.AutoSize = true; + label30.Location = new Point(68, 132); + label30.Margin = new Padding(4, 0, 4, 0); + label30.Name = "label30"; + label30.Size = new Size(17, 15); + label30.TabIndex = 3; + label30.Text = "X:"; + // + // NYTextBox + // + NYTextBox.Location = new Point(212, 128); + NYTextBox.Margin = new Padding(4, 3, 4, 3); + NYTextBox.MaxLength = 5; + NYTextBox.Name = "NYTextBox"; + NYTextBox.Size = new Size(42, 23); + NYTextBox.TabIndex = 3; + NYTextBox.TextChanged += NYTextBox_TextChanged; + // + // tabPage2 + // + tabPage2.Controls.Add(ConquestVisible_checkbox); + tabPage2.Controls.Add(Flag_textbox); + tabPage2.Controls.Add(label12); + tabPage2.Controls.Add(label10); + tabPage2.Controls.Add(Day_combo); + tabPage2.Controls.Add(Class_combo); + tabPage2.Controls.Add(EndMin_num); + tabPage2.Controls.Add(EndHour_combo); + tabPage2.Controls.Add(label8); + tabPage2.Controls.Add(label9); + tabPage2.Controls.Add(StartMin_num); + tabPage2.Controls.Add(StartHour_combo); + tabPage2.Controls.Add(TimeVisible_checkbox); + tabPage2.Controls.Add(label7); + tabPage2.Controls.Add(MaxLev_textbox); + tabPage2.Controls.Add(label6); + tabPage2.Controls.Add(label5); + tabPage2.Controls.Add(label4); + tabPage2.Controls.Add(label3); + tabPage2.Controls.Add(MinLev_textbox); + tabPage2.Location = new Point(4, 24); + tabPage2.Margin = new Padding(4, 3, 4, 3); + tabPage2.Name = "tabPage2"; + tabPage2.Size = new Size(598, 311); + tabPage2.TabIndex = 1; + tabPage2.Text = "Visibility"; + tabPage2.UseVisualStyleBackColor = true; + // + // ConquestVisible_checkbox + // + ConquestVisible_checkbox.AutoSize = true; + ConquestVisible_checkbox.CheckAlign = ContentAlignment.MiddleRight; + ConquestVisible_checkbox.Location = new Point(200, 135); + ConquestVisible_checkbox.Margin = new Padding(4, 3, 4, 3); + ConquestVisible_checkbox.Name = "ConquestVisible_checkbox"; + ConquestVisible_checkbox.Size = new Size(152, 19); + ConquestVisible_checkbox.TabIndex = 56; + ConquestVisible_checkbox.Text = "Visible during Conquest"; + ConquestVisible_checkbox.UseVisualStyleBackColor = true; + ConquestVisible_checkbox.CheckedChanged += ConquestVisible_checkbox_CheckedChanged; + // + // Flag_textbox + // + Flag_textbox.Location = new Point(131, 100); + Flag_textbox.Margin = new Padding(4, 3, 4, 3); + Flag_textbox.MaxLength = 3; + Flag_textbox.Name = "Flag_textbox"; + Flag_textbox.Size = new Size(56, 23); + Flag_textbox.TabIndex = 55; + Flag_textbox.TextChanged += Flag_textbox_TextChanged; + // + // label12 + // + label12.AutoSize = true; + label12.Location = new Point(48, 104); + label12.Margin = new Padding(4, 0, 4, 0); + label12.Name = "label12"; + label12.Size = new Size(76, 15); + label12.TabIndex = 54; + label12.Text = "Needed Flag:"; + // + // label10 + // + label10.AutoSize = true; + label10.Location = new Point(48, 73); + label10.Margin = new Padding(4, 0, 4, 0); + label10.Name = "label10"; + label10.Size = new Size(76, 15); + label10.TabIndex = 53; + label10.Text = "Day to Show:"; + // + // Day_combo + // + Day_combo.DropDownStyle = ComboBoxStyle.DropDownList; + Day_combo.FormattingEnabled = true; + Day_combo.Items.AddRange(new object[] { "", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" }); + Day_combo.Location = new Point(131, 68); + Day_combo.Margin = new Padding(4, 3, 4, 3); + Day_combo.Name = "Day_combo"; + Day_combo.Size = new Size(190, 23); + Day_combo.TabIndex = 52; + Day_combo.SelectedIndexChanged += Day_combo_SelectedIndexChanged; + // + // Class_combo + // + Class_combo.DropDownStyle = ComboBoxStyle.DropDownList; + Class_combo.FormattingEnabled = true; + Class_combo.Items.AddRange(new object[] { "", "Warrior", "Wizard", "Taoist", "Assassin", "Archer" }); + Class_combo.Location = new Point(131, 33); + Class_combo.Margin = new Padding(4, 3, 4, 3); + Class_combo.Name = "Class_combo"; + Class_combo.Size = new Size(101, 23); + Class_combo.TabIndex = 51; + Class_combo.SelectedIndexChanged += Class_combo_SelectedIndexChanged; + // + // EndMin_num + // + EndMin_num.Location = new Point(278, 196); + EndMin_num.Margin = new Padding(4, 3, 4, 3); + EndMin_num.Maximum = new decimal(new int[] { 59, 0, 0, 0 }); + EndMin_num.Minimum = new decimal(new int[] { 1, 0, 0, 0 }); + EndMin_num.Name = "EndMin_num"; + EndMin_num.Size = new Size(55, 23); + EndMin_num.TabIndex = 50; + EndMin_num.Value = new decimal(new int[] { 1, 0, 0, 0 }); + EndMin_num.ValueChanged += EndMin_num_ValueChanged; + // + // EndHour_combo + // + EndHour_combo.DropDownStyle = ComboBoxStyle.DropDownList; + EndHour_combo.FormattingEnabled = true; + EndHour_combo.Items.AddRange(new object[] { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23" }); + EndHour_combo.Location = new Point(131, 195); + EndHour_combo.Margin = new Padding(4, 3, 4, 3); + EndHour_combo.Name = "EndHour_combo"; + EndHour_combo.Size = new Size(56, 23); + EndHour_combo.TabIndex = 49; + EndHour_combo.SelectedIndexChanged += EndHour_combo_SelectedIndexChanged; + // + // label8 + // + label8.AutoSize = true; + label8.Location = new Point(200, 198); + label8.Margin = new Padding(4, 0, 4, 0); + label8.Name = "label8"; + label8.Size = new Size(71, 15); + label8.TabIndex = 48; + label8.Text = "End Minute:"; + // + // label9 + // + label9.AutoSize = true; + label9.Location = new Point(63, 198); + label9.Margin = new Padding(4, 0, 4, 0); + label9.Name = "label9"; + label9.Size = new Size(60, 15); + label9.TabIndex = 47; + label9.Text = "End Hour:"; + // + // StartMin_num + // + StartMin_num.Location = new Point(278, 166); + StartMin_num.Margin = new Padding(4, 3, 4, 3); + StartMin_num.Maximum = new decimal(new int[] { 58, 0, 0, 0 }); + StartMin_num.Name = "StartMin_num"; + StartMin_num.Size = new Size(55, 23); + StartMin_num.TabIndex = 46; + StartMin_num.ValueChanged += StartMin_num_ValueChanged; + // + // StartHour_combo + // + StartHour_combo.DropDownStyle = ComboBoxStyle.DropDownList; + StartHour_combo.FormattingEnabled = true; + StartHour_combo.Items.AddRange(new object[] { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23" }); + StartHour_combo.Location = new Point(131, 165); + StartHour_combo.Margin = new Padding(4, 3, 4, 3); + StartHour_combo.Name = "StartHour_combo"; + StartHour_combo.Size = new Size(56, 23); + StartHour_combo.TabIndex = 45; + StartHour_combo.SelectedIndexChanged += StartHour_combo_SelectedIndexChanged; + // + // TimeVisible_checkbox + // + TimeVisible_checkbox.AutoSize = true; + TimeVisible_checkbox.CheckAlign = ContentAlignment.MiddleRight; + TimeVisible_checkbox.Location = new Point(35, 135); + TimeVisible_checkbox.Margin = new Padding(4, 3, 4, 3); + TimeVisible_checkbox.Name = "TimeVisible_checkbox"; + TimeVisible_checkbox.Size = new Size(153, 19); + TimeVisible_checkbox.TabIndex = 44; + TimeVisible_checkbox.Text = "Only Visible at set Times"; + TimeVisible_checkbox.UseVisualStyleBackColor = true; + TimeVisible_checkbox.CheckedChanged += TimeVisible_checkbox_CheckedChanged; + // + // label7 + // + label7.AutoSize = true; + label7.Location = new Point(195, 7); + label7.Margin = new Padding(4, 0, 4, 0); + label7.Name = "label7"; + label7.Size = new Size(63, 15); + label7.TabIndex = 43; + label7.Text = "Max Level:"; + // + // MaxLev_textbox + // + MaxLev_textbox.Location = new Point(264, 3); + MaxLev_textbox.Margin = new Padding(4, 3, 4, 3); + MaxLev_textbox.MaxLength = 3; + MaxLev_textbox.Name = "MaxLev_textbox"; + MaxLev_textbox.Size = new Size(56, 23); + MaxLev_textbox.TabIndex = 42; + MaxLev_textbox.TextChanged += MaxLev_textbox_TextChanged; + // + // label6 + // + label6.AutoSize = true; + label6.Location = new Point(36, 37); + label6.Margin = new Padding(4, 0, 4, 0); + label6.Name = "label6"; + label6.Size = new Size(87, 15); + label6.TabIndex = 40; + label6.Text = "Class Required:"; + // + // label5 + // + label5.AutoSize = true; + label5.Location = new Point(200, 168); + label5.Margin = new Padding(4, 0, 4, 0); + label5.Name = "label5"; + label5.Size = new Size(75, 15); + label5.TabIndex = 37; + label5.Text = "Start Minute:"; + // + // label4 + // + label4.AutoSize = true; + label4.Location = new Point(63, 168); + label4.Margin = new Padding(4, 0, 4, 0); + label4.Name = "label4"; + label4.Size = new Size(64, 15); + label4.TabIndex = 36; + label4.Text = "Start Hour:"; + // + // label3 + // + label3.AutoSize = true; + label3.Location = new Point(65, 7); + label3.Margin = new Padding(4, 0, 4, 0); + label3.Name = "label3"; + label3.Size = new Size(61, 15); + label3.TabIndex = 34; + label3.Text = "Min Level:"; + // + // MinLev_textbox + // + MinLev_textbox.Location = new Point(131, 3); + MinLev_textbox.Margin = new Padding(4, 3, 4, 3); + MinLev_textbox.MaxLength = 3; + MinLev_textbox.Name = "MinLev_textbox"; + MinLev_textbox.Size = new Size(56, 23); + MinLev_textbox.TabIndex = 33; + MinLev_textbox.TextChanged += MinLev_textbox_TextChanged; + // + // tabPage3 + // + tabPage3.Controls.Add(ReloadScriptBtn); + tabPage3.Controls.Add(EditScriptBtn); + tabPage3.Controls.Add(CopyScriptBtn); + tabPage3.Controls.Add(OpenNPCScriptBtn); + tabPage3.Controls.Add(NPCScriptTextBox); + tabPage3.Location = new Point(4, 24); + tabPage3.Name = "tabPage3"; + tabPage3.Padding = new Padding(3); + tabPage3.Size = new Size(598, 311); + tabPage3.TabIndex = 2; + tabPage3.Text = "Script"; + tabPage3.UseVisualStyleBackColor = true; + // + // ReloadScriptBtn + // + ReloadScriptBtn.Location = new Point(493, 195); + ReloadScriptBtn.Margin = new Padding(4, 3, 4, 3); + ReloadScriptBtn.Name = "ReloadScriptBtn"; + ReloadScriptBtn.Size = new Size(88, 27); + ReloadScriptBtn.TabIndex = 35; + ReloadScriptBtn.Text = "Reload Script"; + ReloadScriptBtn.UseVisualStyleBackColor = true; + ReloadScriptBtn.Click += ReloadScriptBtn_Click; + // + // EditScriptBtn + // + EditScriptBtn.Location = new Point(493, 75); + EditScriptBtn.Margin = new Padding(4, 3, 4, 3); + EditScriptBtn.Name = "EditScriptBtn"; + EditScriptBtn.Size = new Size(88, 27); + EditScriptBtn.TabIndex = 34; + EditScriptBtn.Text = "Edit Script"; + EditScriptBtn.UseVisualStyleBackColor = true; + EditScriptBtn.Click += EditScriptBtn_Click; + // + // CopyScriptBtn + // + CopyScriptBtn.Location = new Point(493, 155); + CopyScriptBtn.Margin = new Padding(4, 3, 4, 3); + CopyScriptBtn.Name = "CopyScriptBtn"; + CopyScriptBtn.Size = new Size(88, 27); + CopyScriptBtn.TabIndex = 33; + CopyScriptBtn.Text = "Copy Script"; + CopyScriptBtn.UseVisualStyleBackColor = true; + CopyScriptBtn.Click += CopyScriptBtn_Click; + // + // OpenNPCScriptBtn + // + OpenNPCScriptBtn.Location = new Point(493, 115); + OpenNPCScriptBtn.Margin = new Padding(4, 3, 4, 3); + OpenNPCScriptBtn.Name = "OpenNPCScriptBtn"; + OpenNPCScriptBtn.Size = new Size(88, 27); + OpenNPCScriptBtn.TabIndex = 31; + OpenNPCScriptBtn.Text = "Open Script"; + OpenNPCScriptBtn.UseVisualStyleBackColor = true; + OpenNPCScriptBtn.Click += OpenNPCScriptBtn_Click; + // + // NPCScriptTextBox + // + NPCScriptTextBox.Location = new Point(0, 0); + NPCScriptTextBox.Name = "NPCScriptTextBox"; + NPCScriptTextBox.ReadOnly = true; + NPCScriptTextBox.Size = new Size(477, 311); + NPCScriptTextBox.TabIndex = 0; + NPCScriptTextBox.Text = ""; + // + // RemoveButton + // + RemoveButton.Location = new Point(108, 14); + RemoveButton.Margin = new Padding(4, 3, 4, 3); + RemoveButton.Name = "RemoveButton"; + RemoveButton.Size = new Size(88, 27); + RemoveButton.TabIndex = 14; + RemoveButton.Text = "Remove"; + RemoveButton.UseVisualStyleBackColor = true; + RemoveButton.Click += RemoveButton_Click; + // + // AddButton + // + AddButton.Location = new Point(14, 14); + AddButton.Margin = new Padding(4, 3, 4, 3); + AddButton.Name = "AddButton"; + AddButton.Size = new Size(88, 27); + AddButton.TabIndex = 13; + AddButton.Text = "Add"; + AddButton.UseVisualStyleBackColor = true; + AddButton.Click += AddButton_Click; + // + // NPCInfoListBox + // + NPCInfoListBox.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left; + NPCInfoListBox.FormattingEnabled = true; + NPCInfoListBox.ItemHeight = 15; + NPCInfoListBox.Location = new Point(14, 47); + NPCInfoListBox.Margin = new Padding(4, 3, 4, 3); + NPCInfoListBox.Name = "NPCInfoListBox"; + NPCInfoListBox.SelectionMode = SelectionMode.MultiExtended; + NPCInfoListBox.Size = new Size(276, 334); + NPCInfoListBox.TabIndex = 15; + NPCInfoListBox.SelectedIndexChanged += NPCInfoListBox_SelectedIndexChanged; + // + // PasteMButton + // + PasteMButton.Location = new Point(298, 14); + PasteMButton.Margin = new Padding(4, 3, 4, 3); + PasteMButton.Name = "PasteMButton"; + PasteMButton.Size = new Size(88, 27); + PasteMButton.TabIndex = 22; + PasteMButton.Text = "Paste"; + PasteMButton.UseVisualStyleBackColor = true; + PasteMButton.Click += PasteMButton_Click; + // + // CopyMButton + // + CopyMButton.Location = new Point(203, 14); + CopyMButton.Margin = new Padding(4, 3, 4, 3); + CopyMButton.Name = "CopyMButton"; + CopyMButton.Size = new Size(88, 27); + CopyMButton.TabIndex = 21; + CopyMButton.Text = "Copy"; + CopyMButton.UseVisualStyleBackColor = true; + CopyMButton.Click += CopyMButton_Click; + // + // ExportButton + // + ExportButton.Location = new Point(818, 14); + ExportButton.Margin = new Padding(4, 3, 4, 3); + ExportButton.Name = "ExportButton"; + ExportButton.Size = new Size(88, 27); + ExportButton.TabIndex = 23; + ExportButton.Text = "Export All"; + ExportButton.UseVisualStyleBackColor = true; + ExportButton.Click += ExportAllButton_Click; + // + // ImportButton + // + ImportButton.Location = new Point(581, 14); + ImportButton.Margin = new Padding(4, 3, 4, 3); + ImportButton.Name = "ImportButton"; + ImportButton.Size = new Size(88, 27); + ImportButton.TabIndex = 24; + ImportButton.Text = "Import"; + ImportButton.UseVisualStyleBackColor = true; + ImportButton.Click += ImportButton_Click; + // + // ExportSelectedButton + // + ExportSelectedButton.Location = new Point(674, 14); + ExportSelectedButton.Margin = new Padding(4, 3, 4, 3); + ExportSelectedButton.Name = "ExportSelectedButton"; + ExportSelectedButton.Size = new Size(136, 27); + ExportSelectedButton.TabIndex = 25; + ExportSelectedButton.Text = "Export Selected"; + ExportSelectedButton.UseVisualStyleBackColor = true; + ExportSelectedButton.Click += ExportSelected_Click; + // + // NPCInfoForm + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(917, 400); + Controls.Add(ExportSelectedButton); + Controls.Add(ImportButton); + Controls.Add(ExportButton); + Controls.Add(PasteMButton); + Controls.Add(CopyMButton); + Controls.Add(tabControl1); + Controls.Add(RemoveButton); + Controls.Add(AddButton); + Controls.Add(NPCInfoListBox); + Icon = (Icon)resources.GetObject("$this.Icon"); + Margin = new Padding(4, 3, 4, 3); + Name = "NPCInfoForm"; + Text = "NPCInfoForm"; + FormClosed += NPCInfoForm_FormClosed; + Load += NPCInfoForm_Load; + tabControl1.ResumeLayout(false); + tabPage1.ResumeLayout(false); + tabPage1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)NPCHairPreview).EndInit(); + ((System.ComponentModel.ISupportInitialize)NPCPreview).EndInit(); + tabPage2.ResumeLayout(false); + tabPage2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)EndMin_num).EndInit(); + ((System.ComponentModel.ISupportInitialize)StartMin_num).EndInit(); + tabPage3.ResumeLayout(false); + ResumeLayout(false); + } + + #endregion + + private System.Windows.Forms.TabControl tabControl1; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.TextBox NPCIndexTextBox; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button RemoveButton; + private System.Windows.Forms.Button AddButton; + private System.Windows.Forms.Button PasteMButton; + private System.Windows.Forms.Button CopyMButton; + private System.Windows.Forms.Button ExportButton; + private System.Windows.Forms.Button ImportButton; + private System.Windows.Forms.Button ExportSelectedButton; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.TextBox NFileNameTextBox; + private System.Windows.Forms.Label label29; + private System.Windows.Forms.TextBox NRateTextBox; + private System.Windows.Forms.Button ClearHButton; + private System.Windows.Forms.TextBox NNameTextBox; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.Label label24; + private System.Windows.Forms.TextBox NImageTextBox; + private System.Windows.Forms.TextBox NXTextBox; + private System.Windows.Forms.Label label28; + private System.Windows.Forms.Label label30; + private System.Windows.Forms.TextBox NYTextBox; + private System.Windows.Forms.ListBox NPCInfoListBox; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.ComboBox MapComboBox; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TextBox MinLev_textbox; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.ComboBox Day_combo; + private System.Windows.Forms.ComboBox Class_combo; + private System.Windows.Forms.NumericUpDown EndMin_num; + private System.Windows.Forms.ComboBox EndHour_combo; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.NumericUpDown StartMin_num; + private System.Windows.Forms.ComboBox StartHour_combo; + private System.Windows.Forms.CheckBox TimeVisible_checkbox; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.TextBox MaxLev_textbox; + private System.Windows.Forms.TextBox Flag_textbox; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.TabPage tabPage2; + private System.Windows.Forms.Label label15; + private System.Windows.Forms.TextBox BigMapIconTextBox; + private System.Windows.Forms.CheckBox ShowBigMapCheckBox; + private System.Windows.Forms.CheckBox TeleportToCheckBox; + private CheckBox ConquestVisible_checkbox; + private Label label16; + private TextBox HairTextBox; + private ComboBox GenderComboBox; + private Label label14; + private PictureBox NPCHairPreview; + private PictureBox NPCPreview; + private TabPage tabPage3; + private RichTextBox NPCScriptTextBox; + private Button OpenNPCScriptBtn; + private Button CopyScriptBtn; + private Button EditScriptBtn; + private Button ReloadScriptBtn; + } +} \ No newline at end of file diff --git a/Server.MirForms/Database/NPCInfoForm.cs b/Server.MirForms/Database/NPCInfoForm.cs new file mode 100644 index 0000000..d3c2d2d --- /dev/null +++ b/Server.MirForms/Database/NPCInfoForm.cs @@ -0,0 +1,809 @@ +using Server.MirDatabase; +using Server.MirEnvir; +using System.Diagnostics; +using System.Runtime.CompilerServices; + +namespace Server +{ + public partial class NPCInfoForm : Form + { + public string NPCListPath = Path.Combine(Settings.ExportPath, "NPCList.txt"); + + public Envir Envir => SMain.EditEnvir; + + private List _selectedNPCInfos; + private bool isEditing = false; + + public NPCInfoForm() + { + InitializeComponent(); + + for (int i = 0; i < Envir.MapInfoList.Count; i++) MapComboBox.Items.Add(Envir.MapInfoList[i]); + GenderComboBox.Items.AddRange(Enum.GetValues(typeof(MirGender)).Cast().ToArray()); + UpdateInterface(); + } + + private void AddButton_Click(object sender, EventArgs e) + { + Envir.CreateNPCInfo(); + UpdateInterface(); + } + private void RemoveButton_Click(object sender, EventArgs e) + { + if (_selectedNPCInfos.Count == 0) return; + + if (MessageBox.Show("Are you sure you want to remove the selected NPCs?", "Remove NPCs?", MessageBoxButtons.YesNo) != DialogResult.Yes) return; + + for (int i = 0; i < _selectedNPCInfos.Count; i++) Envir.Remove(_selectedNPCInfos[i]); + + if (Envir.NPCInfoList.Count == 0) Envir.NPCIndex = 0; + + UpdateInterface(); + } + + private void UpdateInterface() + { + if (NPCInfoListBox.Items.Count != Envir.NPCInfoList.Count) + { + NPCInfoListBox.Items.Clear(); + + for (int i = 0; i < Envir.NPCInfoList.Count; i++) + NPCInfoListBox.Items.Add(Envir.NPCInfoList[i]); + } + + _selectedNPCInfos = NPCInfoListBox.SelectedItems.Cast().ToList(); + + if (_selectedNPCInfos.Count == 0) + { + tabPage1.Enabled = false; + tabPage2.Enabled = false; + NPCIndexTextBox.Text = string.Empty; + NFileNameTextBox.Text = string.Empty; + NNameTextBox.Text = string.Empty; + NXTextBox.Text = string.Empty; + NYTextBox.Text = string.Empty; + NImageTextBox.Text = string.Empty; + GenderComboBox.SelectedItem = null; + HairTextBox.Text = string.Empty; + NRateTextBox.Text = string.Empty; + MapComboBox.SelectedItem = null; + MinLev_textbox.Text = string.Empty; + MaxLev_textbox.Text = string.Empty; + Class_combo.Text = string.Empty; + Day_combo.Text = string.Empty; + TimeVisible_checkbox.Checked = false; + StartHour_combo.Text = string.Empty; + EndHour_combo.Text = string.Empty; + StartMin_num.Value = 0; + EndMin_num.Value = 1; + Flag_textbox.Text = string.Empty; + ShowBigMapCheckBox.Checked = false; + BigMapIconTextBox.Text = string.Empty; + ConquestVisible_checkbox.Checked = true; + return; + } + + NPCInfo info = _selectedNPCInfos[0]; + + tabPage1.Enabled = true; + tabPage2.Enabled = true; + + NPCIndexTextBox.Text = info.Index.ToString(); + NFileNameTextBox.Text = info.FileName; + NNameTextBox.Text = info.Name; + NXTextBox.Text = info.Location.X.ToString(); + NYTextBox.Text = info.Location.Y.ToString(); + NImageTextBox.Text = info.Image.ToString(); + GenderComboBox.SelectedItem = info.Gender; + HairTextBox.Text = info.Hair.ToString(); + NRateTextBox.Text = info.Rate.ToString(); + MapComboBox.SelectedItem = Envir.MapInfoList.FirstOrDefault(x => x.Index == info.MapIndex); + MinLev_textbox.Text = info.MinLev.ToString(); + MaxLev_textbox.Text = info.MaxLev.ToString(); + Class_combo.Text = info.ClassRequired; + Day_combo.Text = info.DayofWeek; + TimeVisible_checkbox.Checked = info.TimeVisible; + StartHour_combo.Text = info.HourStart.ToString(); + EndHour_combo.Text = info.HourEnd.ToString(); + StartMin_num.Value = info.MinuteStart; + EndMin_num.Value = info.MinuteEnd; + Flag_textbox.Text = info.FlagNeeded.ToString(); + ShowBigMapCheckBox.Checked = info.ShowOnBigMap; + BigMapIconTextBox.Text = info.BigMapIcon.ToString(); + TeleportToCheckBox.Checked = info.CanTeleportTo; + + + for (int i = 1; i < _selectedNPCInfos.Count; i++) + { + info = _selectedNPCInfos[i]; + + if (NFileNameTextBox.Text != info.FileName) NFileNameTextBox.Text = string.Empty; + if (NNameTextBox.Text != info.Name) NNameTextBox.Text = string.Empty; + if (NXTextBox.Text != info.Location.X.ToString()) NXTextBox.Text = string.Empty; + + if (NYTextBox.Text != info.Location.Y.ToString()) NYTextBox.Text = string.Empty; + if (NImageTextBox.Text != info.Image.ToString()) NImageTextBox.Text = string.Empty; + if (GenderComboBox.SelectedItem == null || (MirGender)GenderComboBox.SelectedItem != info.Gender) GenderComboBox.SelectedItem = null; + if (HairTextBox.Text != info.Hair.ToString()) HairTextBox.Text = string.Empty; + if (NRateTextBox.Text != info.Rate.ToString()) NRateTextBox.Text = string.Empty; + if (BigMapIconTextBox.Text != info.BigMapIcon.ToString()) BigMapIconTextBox.Text = string.Empty; + } + } + + private void RefreshNPCList() + { + NPCInfoListBox.SelectedIndexChanged -= NPCInfoListBox_SelectedIndexChanged; + + List selected = new List(); + + for (int i = 0; i < NPCInfoListBox.Items.Count; i++) selected.Add(NPCInfoListBox.GetSelected(i)); + NPCInfoListBox.Items.Clear(); + + for (int i = 0; i < Envir.NPCInfoList.Count; i++) NPCInfoListBox.Items.Add(Envir.NPCInfoList[i]); + for (int i = 0; i < selected.Count; i++) NPCInfoListBox.SetSelected(i, selected[i]); + + NPCInfoListBox.SelectedIndexChanged += NPCInfoListBox_SelectedIndexChanged; + } + + private void NPCInfoListBox_SelectedIndexChanged(object sender, EventArgs e) + { + UpdateInterface(); + UpdateNPCPreview(); + UpdateNPCHairPreview(); + UpdateNPCScriptDisplay(); + } + private void UpdateNPCScriptDisplay() + { + string basePath = "Envir\\NPCs"; + string fileName = NFileNameTextBox.Text; + fileName = $"{fileName}.txt"; + + string filePath = Path.Combine(basePath, fileName); + + try + { + string fileContent = File.ReadAllText(filePath); + + NPCScriptTextBox.Text = fileContent; + NPCScriptTextBox.ReadOnly = !isEditing; + } + catch (Exception ex) + { + return; + } + } + + private void NFileNameTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedNPCInfos.Count; i++) + _selectedNPCInfos[i].FileName = ActiveControl.Text; + + RefreshNPCList(); + UpdateNPCScriptDisplay(); + } + private void NNameTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedNPCInfos.Count; i++) + _selectedNPCInfos[i].Name = ActiveControl.Text; + } + private void NXTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + int temp; + + if (!int.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedNPCInfos.Count; i++) + _selectedNPCInfos[i].Location.X = temp; + + RefreshNPCList(); + } + private void NYTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + int temp; + + if (!int.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedNPCInfos.Count; i++) + _selectedNPCInfos[i].Location.Y = temp; + + RefreshNPCList(); + } + private void NImageTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + ushort temp; + + if (!ushort.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedNPCInfos.Count; i++) + _selectedNPCInfos[i].Image = temp; + + UpdateNPCPreview(); + } + private void GenderComboBox_SelectedIndexChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedNPCInfos.Count; i++) + { + _selectedNPCInfos[i].Gender = (MirGender)GenderComboBox.SelectedItem; + } + + UpdateNPCPreview(); + UpdateNPCHairPreview(); + } + + private void UpdateNPCPreview() + { + string gender = GenderComboBox.Text.ToLower(); + string fileName = NImageTextBox.Text; + + // Assuming your images are in folders named "Body/Male" and "Body/Female" inside the "Envir" folder + string genderFolder = gender.Equals("male", StringComparison.OrdinalIgnoreCase) ? "Male" : "Female"; + string imagePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "envir", "Previews", "NPC", "Body", genderFolder, $"{fileName}.png"); + + try + { + if (File.Exists(imagePath)) + { + // Load the image from the specified path + NPCPreview.Image = Image.FromFile(imagePath); + + // Invalidate the PictureBox and refresh the form to force a redraw + NPCPreview.Invalidate(); + Refresh(); + } + else + { + // Handle the case when the image file does not exist + NPCPreview.Image = null; // Clear the PictureBox + } + } + catch (Exception ex) + { + NPCPreview.Image = null; // Clear the PictureBox + } + } + private void UpdateNPCHairPreview() + { + string gender = GenderComboBox.Text.ToLower(); + string fileName = HairTextBox.Text; + + // Assuming your images are in folders named "Hair/Male" and "Hair/Female" inside the "Envir" folder + string genderFolder = gender.Equals("male", StringComparison.OrdinalIgnoreCase) ? "Male" : "Female"; + string imagePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "envir", "Previews", "NPC", "Hair", genderFolder, $"{fileName}.png"); + + try + { + if (File.Exists(imagePath)) + { + // Load the image from the specified path + NPCHairPreview.Image = Image.FromFile(imagePath); + + // Invalidate the PictureBox and refresh the form to force a redraw + NPCHairPreview.Invalidate(); + Refresh(); + } + else + { + // Handle the case when the image file does not exist + Console.WriteLine($"Image not found for gender: {gender}, hair filename: {fileName}. No default image provided."); + NPCHairPreview.Image = null; // Clear the PictureBox + } + } + catch (Exception ex) + { + Console.WriteLine($"Error loading image: {ex.Message}"); + NPCHairPreview.Image = null; // Clear the PictureBox + } + } + private void HairTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedNPCInfos.Count; i++) + _selectedNPCInfos[i].Hair = temp; + + UpdateNPCHairPreview(); + } + private void NRateTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + ushort temp; + + if (!ushort.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedNPCInfos.Count; i++) + _selectedNPCInfos[i].Rate = temp; + } + + private void MapComboBox_SelectedIndexChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedNPCInfos.Count; i++) + { + MapInfo temp = (MapInfo)MapComboBox.SelectedItem; + _selectedNPCInfos[i].MapIndex = temp.Index; + } + + } + + private void NPCInfoForm_FormClosed(object sender, FormClosedEventArgs e) + { + Envir.SaveDB(); + } + + + + + private void PasteMButton_Click(object sender, EventArgs e) + { + string data = Clipboard.GetText(); + + if (!data.StartsWith("NPC", StringComparison.OrdinalIgnoreCase)) + { + MessageBox.Show("Cannot Paste, Copied data is not NPC Information."); + return; + } + + + string[] npcs = data.Split(new[] { '\t' }, StringSplitOptions.RemoveEmptyEntries); + + + //for (int i = 1; i < npcs.Length; i++) + // NPCInfo.FromText(npcs[i]); + + UpdateInterface(); + } + + private void ExportAllButton_Click(object sender, EventArgs e) + { + ExportNPCs(Envir.NPCInfoList); + } + + private void ExportSelected_Click(object sender, EventArgs e) + { + var list = NPCInfoListBox.SelectedItems.Cast().ToList(); + + ExportNPCs(list); + } + + public void ExportNPCs(List NPCs) + { + if (NPCs.Count == 0) return; + + SaveFileDialog sfd = new SaveFileDialog(); + sfd.InitialDirectory = Path.Combine(Application.StartupPath, "Exports"); + sfd.Filter = "Text File|*.txt"; + sfd.ShowDialog(); + + if (sfd.FileName == string.Empty) return; + + using (StreamWriter sw = File.AppendText(sfd.FileNames[0])) + { + for (int j = 0; j < NPCs.Count; j++) + { + sw.WriteLine(NPCs[j].ToText()); + } + } + MessageBox.Show("NPC Export complete"); + } + + private void ImportButton_Click(object sender, EventArgs e) + { + string Path = string.Empty; + + OpenFileDialog ofd = new OpenFileDialog(); + ofd.Filter = "Text File|*.txt"; + ofd.ShowDialog(); + + if (ofd.FileName == string.Empty) return; + + Path = ofd.FileName; + + string data; + using (var sr = new StreamReader(Path)) + { + data = sr.ReadToEnd(); + } + + var npcs = data.Split(new[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); + + foreach (var m in npcs) + { + try + { + NPCInfo.FromText(m); + } + catch { } + } + + UpdateInterface(); + MessageBox.Show("NPC Import complete"); + } + + private void MinLev_textbox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + short temp; + + if (!short.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedNPCInfos.Count; i++) + _selectedNPCInfos[i].MinLev = temp; + } + + private void HourShow_textbox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedNPCInfos.Count; i++) + _selectedNPCInfos[i].HourStart = temp; + } + + private void MinutesShow_textbox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedNPCInfos.Count; i++) + _selectedNPCInfos[i].MinuteStart = temp; + } + + private void Class_textbox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedNPCInfos.Count; i++) + _selectedNPCInfos[i].ClassRequired = ActiveControl.Text; + } + + private void CopyMButton_Click(object sender, EventArgs e) + { + MessageBox.Show(Envir.Now.DayOfWeek.ToString()); + } + + private void MaxLev_textbox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + short temp; + + if (!short.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedNPCInfos.Count; i++) + _selectedNPCInfos[i].MaxLev = temp; + } + + private void Class_combo_SelectedIndexChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + string temp = ActiveControl.Text; + + + for (int i = 0; i < _selectedNPCInfos.Count; i++) + _selectedNPCInfos[i].ClassRequired = temp; + } + + private void Day_combo_SelectedIndexChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + string temp = ActiveControl.Text; + + + for (int i = 0; i < _selectedNPCInfos.Count; i++) + _selectedNPCInfos[i].DayofWeek = temp; + } + + private void TimeVisible_checkbox_CheckedChanged(object sender, EventArgs e) + { + for (int i = 0; i < _selectedNPCInfos.Count; i++) + _selectedNPCInfos[i].TimeVisible = TimeVisible_checkbox.Checked; + } + + private void StartHour_combo_SelectedIndexChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + for (int i = 0; i < _selectedNPCInfos.Count; i++) + _selectedNPCInfos[i].HourStart = temp; + } + + private void EndHour_combo_SelectedIndexChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + for (int i = 0; i < _selectedNPCInfos.Count; i++) + _selectedNPCInfos[i].HourEnd = temp; + } + + private void StartMin_num_ValueChanged(object sender, EventArgs e) + { + for (int i = 0; i < _selectedNPCInfos.Count; i++) + _selectedNPCInfos[i].MinuteStart = (byte)StartMin_num.Value; + } + + private void EndMin_num_ValueChanged(object sender, EventArgs e) + { + for (int i = 0; i < _selectedNPCInfos.Count; i++) + _selectedNPCInfos[i].MinuteEnd = (byte)EndMin_num.Value; + } + + private void Flag_textbox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + int temp; + + if (!int.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + for (int i = 0; i < _selectedNPCInfos.Count; i++) + _selectedNPCInfos[i].FlagNeeded = temp; + } + + private void dateTimePicker1_ValueChanged(object sender, EventArgs e) + { + MessageBox.Show(Envir.Now.TimeOfDay.ToString()); + } + + private void NPCInfoForm_Load(object sender, EventArgs e) + { + + } + + private void ConquestHidden_combo_SelectedIndexChanged(object sender, EventArgs e) + { + } + + private void ShowBigMapCheckBox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedNPCInfos.Count; i++) + _selectedNPCInfos[i].ShowOnBigMap = ShowBigMapCheckBox.Checked; + } + + private void BigMapIconTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + int temp; + + if (!int.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + + for (int i = 0; i < _selectedNPCInfos.Count; i++) + _selectedNPCInfos[i].BigMapIcon = temp; + } + + private void TeleportToCheckBox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedNPCInfos.Count; i++) + _selectedNPCInfos[i].CanTeleportTo = TeleportToCheckBox.Checked; + } + + private void ConquestVisible_checkbox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedNPCInfos.Count; i++) + _selectedNPCInfos[i].ConquestVisible = ConquestVisible_checkbox.Checked; + } + + private void OpenNPCScriptBtn_Click(object sender, EventArgs e) + { + if (NFileNameTextBox.Text == string.Empty) return; + + var scriptPath = Path.Combine(Settings.NPCPath, NFileNameTextBox.Text + ".txt"); + + if (File.Exists(scriptPath)) + { + Shared.Helpers.FileIO.OpenScript(scriptPath, true); + } + else + { + Directory.CreateDirectory(Path.GetDirectoryName(scriptPath)); + + string templateFilePath = "Envir\\NPCs\\Template.txt"; + + try + { + if (File.Exists(templateFilePath)) + { + string templateContent = File.ReadAllText(templateFilePath); + File.WriteAllText(scriptPath, templateContent); + + Shared.Helpers.FileIO.OpenScript(scriptPath, true); + } + else + { + MessageBox.Show("Template file not found.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + catch (Exception ex) + { + MessageBox.Show($"Error creating or opening script: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } + + private void EditScriptBtn_Click(object sender, EventArgs e) + { + isEditing = !isEditing; + NPCScriptTextBox.ReadOnly = !isEditing; + + if (!isEditing) + { + SaveScriptContent(); + } + } + + private void SaveScriptContent() + { + // Get the base folder path + string basePath = "Envir\\NPCs"; // Adjust as needed + + // Get the file name from the NFileNameTextBox + string fileName = NFileNameTextBox.Text; + + // Add the ".txt" extension to the file name + fileName = $"{fileName}.txt"; + + // Combine the base path and file name to get the full file path + string filePath = Path.Combine(basePath, fileName); + + try + { + // Save the content of the RichTextBox back to the file + File.WriteAllText(filePath, NPCScriptTextBox.Text); + } + catch (Exception ex) + { + // Handle any exceptions that might occur during file writing + MessageBox.Show($"Error writing to file: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void CopyScriptBtn_Click(object sender, EventArgs e) + { + using (SaveFileDialog saveFileDialog = new SaveFileDialog()) + { + // Set initial directory and suggested file name + saveFileDialog.InitialDirectory = "Server\\Envir\\NPCs"; // Adjust as needed + saveFileDialog.FileName = NFileNameTextBox.Text; + + // Set the file filter + saveFileDialog.Filter = "Text Files (*.txt)|*.txt|All Files (*.*)|*.*"; + + if (saveFileDialog.ShowDialog() == DialogResult.OK) + { + try + { + // Save the content of the RichTextBox to the selected file + File.WriteAllText(saveFileDialog.FileName, NPCScriptTextBox.Text); + + MessageBox.Show("Script copied successfully.", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + catch (Exception ex) + { + // Handle any exceptions that might occur during file writing + MessageBox.Show($"Error copying script: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } + } + + private void ReloadScriptBtn_Click(object sender, EventArgs e) + { + Envir.ReloadNPCs(); + } + } +} + diff --git a/Server.MirForms/Database/NPCInfoForm.resx b/Server.MirForms/Database/NPCInfoForm.resx new file mode 100644 index 0000000..1b01221 --- /dev/null +++ b/Server.MirForms/Database/NPCInfoForm.resx @@ -0,0 +1,1763 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAgAICAQAAAABADoAgAAhgAAACAgAAAAABgAqAwAAG4DAAAgIAAAAAAIAKgIAAAWEAAAQEAAAAAA + GAAoMgAAvhgAAEBAEAAAAAQAaAoAAOZKAABAQAAAAAAIACgWAABOVQAAgIAAAAAAGAAoyAAAdmsAAICA + AAAAAAgAKEwAAJ4zAQAoAAAAIAAAAEAAAAABAAQAAAAAAAACAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAA + gAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////ABER + ERAAAAAAAAAAAAAAAAARERERAAAAAAAAAAAAAAAAERERERAAAAAAAAAAAAAAABERERERAAAAAQAAAAAA + AAARERAAAQAAAAEAAAAAAAAAEREREQAAAAABAAAAAAAAABERERERAAAAABAAAAAAAAAREREREQAAAAAQ + AAAQAAAAEREREREAAAAAAAABEAAAAAERERERAAAAAAAxERAAAAAQERERERAAAAABEQAAAAAAAAAREREQ + AAAAAQARERARAAAAEREREAAAAAEBEAERERAAAAAAAAAAAAAQEQARMzERAAAAEREAAAABEBADMzMzEQAA + AAEQAAAAAAEAADMxMxEAAAAAAAAAAAEQEQAzMxEQAAABAAEAAAEREAAAMBMQEAAAAAARAAABEREQADEQ + EQAAAAABEBEBEREQATAREREAAAAQAQAQARERAQABEQERAAAAAAAAEBETEQMRERAREQAAAAAAARARExEQ + AREAAREQAAAAAAEBERMxMQEBAAABEQABAAAAAQERERMREQAAAAEAABAAABABERExERAAAAAAAAAAAAAA + EREREREAAAAAAAAAABAQEQAAAREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABAAAAAAAAAAAA + AAAAEAARAAAAAAAAAAAAAAAAAAABEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABABgAAAAAAAAM + AAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA + AACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAAAA + AAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA + AACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACA + AACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAACAAACAAACAAACAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAA + AACAAACAAACAAACAAACAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAAAAAAAAAACAAACAAACAAACAAACA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACAAAAAAACAAACAAAAAAAAAAACAAACAAICAAICAAICAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAA + AACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAACAAAAAAAAAAICAAICAAICA + AICAAICAAICAAICAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAICAAICAAICAAACAAICAAICAAACAAACAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAACAAACA + AAAAAAAAAICAAICAAICAAICAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAACA + AAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAICAAAAAAACAAICAAACAAAAA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAACAAACAAACA + AACAAACAAACAAAAAAAAAAAAAAICAAACAAACAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAACAAACAAAAAAACAAACAAAAAAACAAACAAACAAACAAACAAACAAAAAAAAAAACAAICAAAAAAACAAACA + AACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAACA + AACAAACAAACAAACAAAAAAACAAAAAAAAAAAAAAACAAACAAACAAAAAAACAAACAAACAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAICAAACAAACAAAAAAICAAACAAACA + AACAAACAAACAAAAAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + AACAAAAAAACAAACAAACAAICAAACAAACAAACAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAACAAACAAACA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAACAAICAAICAAACA + AICAAACAAAAAAACAAAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAACAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAACAAACAAACAAICAAACAAACAAACAAACAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACA + AACAAACAAACAAACAAICAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAAAA + AACAAACAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAA + AACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAACAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE + AAAAAAAAAAAAAAABAAAAAQAAAAD/AAD/AAD/AAAAAP//AP//AAD/AP8AwMDAAP/48ADX6/oA1P9/AP8A + AADiK4oAKiqlAAAAAAAEBAQACAgIAAwMDAAREREAFhYWABwcHAAiIiIAKSkpADMzMwA5OTkAQkJCAE1N + TQBVVVUAYGBgAGZmZgBwcHAAgICAAIyMjACUlJQAmZmZAKSkpACsrKwAtra2AMDAwADMzMwA1NTUANra + 2gDg4OAA7OzsAPj4+AD7+/sA////ADMAAABmAAAAmQAAAMwAAAD/AAAAADMAADMzAABmMwAAmTMAAMwz + AAD/MwAAAGYAADNmAABmZgAAmWYAAMxmAAD/ZgAAAJkAADOZAABmmQAAmZkAAMyZAAD/mQAAAMwAADPM + AABmzAAAmcwAAMzMAAD/zAAAAP8AADP/AABm/wAAmf8AAMz/AAD//wAAAAAzADMAMwBmADMAmQAzAMwA + MwD/ADMAADMzAGYzMwCZMzMAzDMzAP8zMwAAZjMAM2YzAGZmMwCZZjMAzGYzAP9mMwAAmTMAM5kzAGaZ + MwCZmTMAzJkzAP+ZMwAAzDMAM8wzAGbMMwCZzDMAzMwzAP/MMwAA/zMAM/8zAGb/MwCZ/zMAzP8zAP// + MwAAAGYAMwBmAGYAZgCZAGYAzABmAP8AZgAAM2YAMzNmAGYzZgCZM2YAzDNmAP8zZgAAZmYAM2ZmAJlm + ZgDMZmYA/2ZmAACZZgAzmWYAZplmAJmZZgDMmWYA/5lmAADMZgAzzGYAZsxmAJnMZgDMzGYA/8xmAAD/ + ZgAz/2YAZv9mAJn/ZgDM/2YA//9mAAAAmQAzAJkAZgCZAJkAmQDMAJkA/wCZAAAzmQAzM5kAZjOZAJkz + mQDMM5kA/zOZAABmmQAzZpkAZmaZAJlmmQDMZpkA/2aZAACZmQAzmZkAZpmZAMyZmQD/mZkAAcyZADPM + mQBmzJkAmcyZAMzMmQD/zJkAAP+ZADP/mQBm/5kAmf+ZAMz/mQD//5kAAADMADMAzABmAMwAmQDMAMwA + zAD/AMwAADPMADMzzABmM8wAmTPMAMwzzAD/M8wAAGbMADNmzABmZswAmWbMAMxmzAD/ZswAAJnMADOZ + zABmmcwAmZnMAMyZzAD/mcwAAMzMADPMzABmzMwAmczMAP/MzAAA/8wAM//MAGb/zACZ/8wAzP/MAP// + zAAAAP8AMwD/AGYA/wCZAP8AzAD/AP8A/wAAM/8AMzP/AGYz/wCZM/8AzDP/AP8z/wAAZv8AM2b/AGZm + /wCZZv8AzGb/AP9m/wAAmf8AM5n/AGaZ/wCZmf8AzJn/AP+Z/wAAzP8AM8z/AGbM/wCZzP8AzMz/AP/M + /wAA//8AM///AGb//wCZ//8AzP//AJ+fn5+fn58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQn5+fn5+f + n58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBCfn5+fn5+fn58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEJ+f + n5+fn5+fn58QEBAQEBAQnxAQEBAQEBAQEBAQEBAQn5+fn58QEBAQnxAQEBAQEBCfEBAQEBAQEBAQEBAQ + EBCfn5+fn5+fnxAQEBAQEBAQEJ8QEBAQEBAQEBAQEBAQEJ+fn5+fn5+fn58QEBAQEBAQEJ8QEBAQEBAQ + EBAQEBAQn5+fn5+fn5+fnxAQEBAQEBAQnxAQEBAQnxAQEBAQEBCfn5+fn5+fn5+fEBAQEBAQEBAQEBAQ + EJ+fEBAQEBAQEBCfn5+fn5+fn58QEBAQEBAQEBAQrZ+fn58QEBAQEBAQnxCfn5+fn5+fn58QEBAQEBAQ + EJ+fnxAQEBAQEBAQEBAQEBAQn5+fn5+fnxAQEBAQEBAQnxAQn5+fn58Qn58QEBAQEBCfn5+fn5+fEBAQ + EBAQEBCfEJ+fEBCfn5+fn58QEBAQEBAQEBAQEBAQEBAQEBAQnxCfnxAQn5+tra2fn58QEBAQEBCfn5+f + EBAQEBAQEJ+fEJ8QEK2tra2tra2fnxAQEBAQEBCfnxAQEBAQEBAQEBCfEBAQEK2trZ+trZ+fEBAQEBAQ + EBAQEBAQEBAQEBCfnxCfnxAQra2trZ+fnxAQEBAQEJ8QEBCfEBAQEBCfn5+fEBAQEBCtEJ+tnxCfEBAQ + EBAQEBAQn58QEBAQEJ+fn5+fnxAQEK2fnxCfnxAQEBAQEBAQEJ+fEJ+fEJ+fn5+fnxAQn60Qn5+fn5+f + EBAQEBAQnxAQnxAQnxAQn5+fn58QnxAQEJ+fnxCfn58QEBAQEBAQEBAQEBCfEJ+fn62fnxCtn5+fn58Q + n5+fnxAQEBAQEBAQEBAQn58Qn5+frZ+fnxAQn5+fEBAQn5+fnxAQEBAQEBAQEBCfEJ+fn5+trZ+tnxCf + EJ8QEBAQEJ+fnxAQEJ8QEBAQEBAQnxCfn5+fn5+tn5+fnxAQEBAQEBCfEBAQEJ8QEBAQEJ8QEJ+fn5+f + rZ+fn58QEBAQEBAQEBAQEBAQEBAQEBAQEBCfn5+fn5+fn5+fEBAQEBAQEBAQEBAQEBAQEJ8QnxCfnxAQ + EBAQn5+fEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEJ8QEJ8QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBCfEBAQn58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEJ+fEJ8QEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAABAAAAAgAAAAAEAGAAAAAAAADAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAA + AAAAAIAAAIAAAAAAAAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAA + gIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAAIAA + AIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAgIAA + gIAAgIAAgIAAAIAAAIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAAAAAAAAAIAAAIAAgIAAgIAAAIAAAIAAAAAA + AAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAAAAAAAAAIAAAIAAgIAA + gIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAA + AIAAgIAAgIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAA + AAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAIAAAIAAgIAAgIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAgIAAgIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAgIAA + gIAAgIAAgIAAAIAAAIAAgIAAgIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAgIAAgIAAgIAAgIAAAIAAAIAAgIAAgIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAgIAA + gIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAAAA + AAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAABAAAAAgAAAAAEABAAAAAAAAAgAAAAA + AAAAAAAAEAAAABAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAwMDAAICAgAAAAP8AAP8AAAD/ + /wD/AAAA/wD/AP//AAD///8AEREREREREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARERERERERAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAABERERERERERAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAERERERER + EREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAREREREREREREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABER + EREREREREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEREREREREREREQAAAAAAAAARAAAAAAAAAAAAAAAA + AAARERERERERERERAAAAAAAAABEAAAAAAAAAAAAAAAAAABERERERAAAAABEAAAAAAAAAEQAAAAAAAAAA + AAAAAAAAEREREREAAAAAEQAAAAAAAAARAAAAAAAAAAAAAAAAAAAREREREREREQAAAAAAAAAAABEAAAAA + AAAAAAAAAAAAABERERERERERAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAEREREREREREREQAAAAAAAAAA + EQAAAAAAAAAAAAAAAAARERERERERERERAAAAAAAAAAARAAAAAAAAAAAAAAAAABEREREREREREREAAAAA + AAAAABEAAAAAABEAAAAAAAAAEREREREREREREQAAAAAAAAAAEQAAAAAAEQAAAAAAAAARERERERERERER + AAAAAAAAAAAAAAAAABERAAAAAAAAABEREREREREREREAAAAAAAAAAAAAAAAAEREAAAAAAAAAABERERER + EREREQAAAAAAAAAAAAAzEREREQAAAAAAAAAAERERERERERERAAAAAAAAAAAAADMRERERAAAAAAAAABEA + ERERERERERERAAAAAAAAAAAREREAAAAAAAAAAAAAEQAREREREREREREAAAAAAAAAABEREQAAAAAAAAAA + AAAAAAAAEREREREREQAAAAAAAAAAEQAAEREREREAEREAAAAAAAARERERERERAAAAAAAAAAARAAARERER + EQAREQAAAAAAABEREREREREAAAAAAAAAABEAEREAABEREREREQAAAAAAEREREREREQAAAAAAAAAAEQAR + EQAAERERERERAAAAAAAAAAAAAAAAAAAAAAAAABEAEREAABERMzMzERERAAAAAAAAAAAAAAAAAAAAAAAA + EQAREQAAEREzMzMREREAAAAAAAARERERAAAAAAAAABERABEAADMzMzMzMzMREQAAAAAAABEREREAAAAA + AAAAEREAEQAAMzMzMzMzMxERAAAAAAAAABERAAAAAAAAAAAAABEAAAAAMzMzETMzEREAAAAAAAAAEREA + AAAAAAAAAAAAEQAAAAAzMzMRMzMREQAAAAAAAAAAAAAAAAAAAAAAEREAEREAADMzMzMREREAAAAAAAAA + AAAAAAAAAAAAAAAREQAREQAAMzMzMxEREQAAAAAAABEAAAARAAAAAAARERERAAAAAAAzABEzEQARAAAA + AAAAEQAAABEAAAAAABEREREAAAAAADMAETMRABEAAAAAAAAAAAAREQAAAAAAERERERERAAAAMxERABER + AAAAAAAAAAAAABERAAAAAAAREREREREAAAAzEREAEREAAAAAAAAAAAAREQAREQAREREREREAABEzABER + EREREQAAAAAAAAAAABERABERABEREREREQAAETMAERERERERAAAAAAAAEQAAEQAAEQAAEREREREAEQAA + ABEREQAREREAAAAAAAARAAARAAARAAAREREREQARAAAAERERABEREQAAAAAAAAAAAAAAABEAERERMxER + ADMREREREQARERERAAAAAAAAAAAAAAAAEQAREREzEREAMxERERERABEREREAAAAAAAAAAAAAABERABER + ETMREREAABEREQAAABEREREAAAAAAAAAAAAAEREAERERMxEREQAAERERAAAAEREREQAAAAAAAAAAAAAR + ABEREREzMxEzEQARABEAAAAAABEREQAAAAAAAAAAABEAERERETMzETMRABEAEQAAAAAAERERAAAAEQAA + AAAAAAARABERERERETMRERERAAAAAAAAABEAAAARAAAAAAAAABEAERERERERMxEREREAAAAAAAAAEQAA + AAARAAAAAAARAAARERERETMRERERAAAAAAAAAAAAAAAAABEAAAAAABEAABERERERMxEREREAAAAAAAAA + AAAAAAAAAAAAAAAAAAARERERERERERERAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEREREREREREREAAAAA + AAAAAAAAAAAAAAAAEQARABERAAAAAAAREREAAAAAAAAAAAAAAAAAAAAAAAARABEAEREAAAAAABEREQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + EQAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAAAREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + EQAAABERAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAREQARAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAABERABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgA + AABAAAAAgAAAAAEACAAAAAAAABAAAAAAAAAAAAAAAAEAAAABAAAAAP8AAP8AAP8AAAAA//8A//8AAP8A + /wDAwMAA//jwANfr+gDU/38A/wAAAOIrigAqKqUAAAAAAAQEBAAICAgADAwMABEREQAWFhYAHBwcACIi + IgApKSkAMzMzADk5OQBCQkIATU1NAFVVVQBgYGAAZmZmAHBwcACAgIAAjIyMAJSUlACZmZkApKSkAKys + rAC2trYAwMDAAMzMzADU1NQA2traAODg4ADs7OwA+Pj4APv7+wD///8AMwAAAGYAAACZAAAAzAAAAP8A + AAAAMwAAMzMAAGYzAACZMwAAzDMAAP8zAAAAZgAAM2YAAGZmAACZZgAAzGYAAP9mAAAAmQAAM5kAAGaZ + AACZmQAAzJkAAP+ZAAAAzAAAM8wAAGbMAACZzAAAzMwAAP/MAAAA/wAAM/8AAGb/AACZ/wAAzP8AAP// + AAAAADMAMwAzAGYAMwCZADMAzAAzAP8AMwAAMzMAZjMzAJkzMwDMMzMA/zMzAABmMwAzZjMAZmYzAJlm + MwDMZjMA/2YzAACZMwAzmTMAZpkzAJmZMwDMmTMA/5kzAADMMwAzzDMAZswzAJnMMwDMzDMA/8wzAAD/ + MwAz/zMAZv8zAJn/MwDM/zMA//8zAAAAZgAzAGYAZgBmAJkAZgDMAGYA/wBmAAAzZgAzM2YAZjNmAJkz + ZgDMM2YA/zNmAABmZgAzZmYAmWZmAMxmZgD/ZmYAAJlmADOZZgBmmWYAmZlmAMyZZgD/mWYAAMxmADPM + ZgBmzGYAmcxmAMzMZgD/zGYAAP9mADP/ZgBm/2YAmf9mAMz/ZgD//2YAAACZADMAmQBmAJkAmQCZAMwA + mQD/AJkAADOZADMzmQBmM5kAmTOZAMwzmQD/M5kAAGaZADNmmQBmZpkAmWaZAMxmmQD/ZpkAAJmZADOZ + mQBmmZkAzJmZAP+ZmQABzJkAM8yZAGbMmQCZzJkAzMyZAP/MmQAA/5kAM/+ZAGb/mQCZ/5kAzP+ZAP// + mQAAAMwAMwDMAGYAzACZAMwAzADMAP8AzAAAM8wAMzPMAGYzzACZM8wAzDPMAP8zzAAAZswAM2bMAGZm + zACZZswAzGbMAP9mzAAAmcwAM5nMAGaZzACZmcwAzJnMAP+ZzAAAzMwAM8zMAGbMzACZzMwA/8zMAAD/ + zAAz/8wAZv/MAJn/zADM/8wA///MAAAA/wAzAP8AZgD/AJkA/wDMAP8A/wD/AAAz/wAzM/8AZjP/AJkz + /wDMM/8A/zP/AABm/wAzZv8AZmb/AJlm/wDMZv8A/2b/AACZ/wAzmf8AZpn/AJmZ/wDMmf8A/5n/AADM + /wAzzP8AZsz/AJnM/wDMzP8A/8z/AAD//wAz//8AZv//AJn//wDM//8An5+fn5+fn5+fn5+fn58dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+f + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+f + n5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+f + n5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+f + n5+fn5+fn5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fn5+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn5+fn5+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHZ+fHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fHR0dHR0dHR2fnx0dHR0dHR0dHR0dHR0dn58dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fnx0dHR0dHR0dn58dHR0dHR0dHR0dHR0dHZ+fHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR2fnx0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0d + n58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0d + HR0dHR0dn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0d + HR0dHR0dHR0dHZ+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fn5+fn5+fnx0d + HR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dHR2fnx0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn5+fn5+f + n58dHR0dHR0dHR0dHR0dHR0dn58dHR0dHR0dHR0dn58dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+f + n5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+f + n5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fnx0dHR0dHR0dHR0dHR0dHR2fn5+f + n5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHa2tn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0d + n5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR2trZ+fn5+fn5+fHR0dHR0dHR0dHR0d + HR2fnx0dn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHZ+fn5+fnx0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHZ+fn5+fn5+fn5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR2fn5+fn58dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dn58dHR0dn5+fn5+f + n5+fnx0dn5+fnx0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHZ+fHR0dHZ+f + n5+fn5+fn58dHZ+fn58dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR2fnx0d + n5+fnx0dHR2fn5+fn5+fn5+fn58dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0d + n58dHZ+fn58dHR0dn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fnx0dn5+fnx0dHR2fn5+fra2tra2tn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHZ+fn58dHR0dn5+fn62tra2trZ+fn5+fnx0dHR0dHR0dHR0dHZ+fn5+fn5+fHR0dHR0d + HR0dHR0dHR2fn5+fHR2fnx0dHR2tra2tra2tra2tra2trZ+fn58dHR0dHR0dHR0dHR2fn5+fn5+fnx0d + HR0dHR0dHR0dHR0dn5+fnx0dn58dHR0dra2tra2tra2tra2tra2fn5+fHR0dHR0dHR0dHR0dHR2fn5+f + HR0dHR0dHR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dra2tra2tn5+tra2tn5+fnx0dHR0dHR0dHR0dHR0d + n5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dn58dHR0dHR0dHa2tra2trZ+fra2trZ+fn58dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fnx0dn5+fnx0dHR2tra2tra2trZ+fn5+fnx0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn58dHZ+fn58dHR0dra2tra2tra2fn5+fn58dHR0d + HR0dHR0dHR2fnx0dHR0dHZ+fHR0dHR0dHR0dHZ+fn5+fn5+fHR0dHR0dHR0dHa2tHR2fn62tn58dHZ+f + HR0dHR0dHR0dHR0dn58dHR0dHR2fnx0dHR0dHR0dHR2fn5+fn5+fnx0dHR0dHR0dHR2trR0dn5+trZ+f + HR2fnx0dHR0dHR0dHR0dHR0dHR0dHZ+fn58dHR0dHR0dHR0dn5+fn5+fn5+fn5+fHR0dHR0dra2fn5+f + HR2fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR0dHR0dHR0dHZ+fn5+fn5+fn5+fnx0dHR0dHa2t + n5+fnx0dn5+fnx0dHR0dHR0dHR0dHR0dHR0dHZ+fn58dHZ+fn58dHZ+fn5+fn5+fn5+fnx0dHR2fn62t + HR2fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR2fn5+fHR2fn5+fn5+fn5+fn58dHR0d + n5+trR0dn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dn58dHR0dn58dHR0dn58dHR0dn5+fn5+fn5+fnx0d + n58dHR0dHR2fn5+fn58dHZ+fn5+fnx0dHR0dHR0dHR0dHZ+fHR0dHZ+fHR0dHZ+fHR0dHZ+fn5+fn5+f + n58dHZ+fHR0dHR0dn5+fn5+fHR2fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fnx0dn5+fn5+f + ra2fn5+fHR2trZ+fn5+fn5+fn58dHZ+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn58dHZ+f + n5+fn62tn5+fnx0dra2fn5+fn5+fn5+fHR2fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+f + HR2fn5+fn5+trZ+fn5+fnx0dHR2fn5+fn58dHR0dHR2fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0d + n5+fnx0dn5+fn5+fra2fn5+fn58dHR0dn5+fn5+fHR0dHR0dn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0d + HR0dHZ+fHR2fn5+fn5+fn62tra2fn62tn58dHZ+fHR2fnx0dHR0dHR0dHR2fn5+fn58dHR0dHR0dHR0d + HR0dHR0dHR2fnx0dn5+fn5+fn5+tra2tn5+trZ+fHR2fnx0dn58dHR0dHR0dHR0dn5+fn5+fHR0dHR0d + n58dHR0dHR0dHR0dHR0dHZ+fHR2fn5+fn5+fn5+fn5+trZ+fn5+fn5+fHR0dHR0dHR0dHR0dHR2fnx0d + HR0dHZ+fHR0dHR0dHR0dHR0dHR2fnx0dn5+fn5+fn5+fn5+fra2fn5+fn5+fnx0dHR0dHR0dHR0dHR0d + n58dHR0dHR0dHZ+fHR0dHR0dHR0dHZ+fHR0dHZ+fn5+fn5+fn5+trZ+fn5+fn5+fHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dHR2fnx0dHR2fn5+fn5+fn5+fra2fn5+fn5+fnx0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fn5+fn5+fnx0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn58dHZ+fHR2fn5+fHR0dHR0dHR0dHZ+fn5+fnx0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fHR2fnx0dn5+fnx0dHR0dHR0dHR2fn5+f + n58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fnx0dHR2fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHR0dn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fnx0dHR0dHZ+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHR0dHR2fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHZ+fn58dHZ+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR2fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAIAAAAAAAQAAAQAYAAAAAAAAwAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAIAAAAAAAQAAAQAIAAAAAAAAQAAAAAAAAAAA + AAAAAQAAAAEAAAAA/wAA/wAA/wAAAAD//wD//wAA/wD/AMDAwAD/+PAA1+v6ANT/fwD/AAAA4iuKACoq + pQAAAAAABAQEAAgICAAMDAwAERERABYWFgAcHBwAIiIiACkpKQAzMzMAOTk5AEJCQgBNTU0AVVVVAGBg + YABmZmYAcHBwAICAgACMjIwAlJSUAJmZmQCkpKQArKysALa2tgDAwMAAzMzMANTU1ADa2toA4ODgAOzs + 7AD4+PgA+/v7AP///wAzAAAAZgAAAJkAAADMAAAA/wAAAAAzAAAzMwAAZjMAAJkzAADMMwAA/zMAAABm + AAAzZgAAZmYAAJlmAADMZgAA/2YAAACZAAAzmQAAZpkAAJmZAADMmQAA/5kAAADMAAAzzAAAZswAAJnM + AADMzAAA/8wAAAD/AAAz/wAAZv8AAJn/AADM/wAA//8AAAAAMwAzADMAZgAzAJkAMwDMADMA/wAzAAAz + MwBmMzMAmTMzAMwzMwD/MzMAAGYzADNmMwBmZjMAmWYzAMxmMwD/ZjMAAJkzADOZMwBmmTMAmZkzAMyZ + MwD/mTMAAMwzADPMMwBmzDMAmcwzAMzMMwD/zDMAAP8zADP/MwBm/zMAmf8zAMz/MwD//zMAAABmADMA + ZgBmAGYAmQBmAMwAZgD/AGYAADNmADMzZgBmM2YAmTNmAMwzZgD/M2YAAGZmADNmZgCZZmYAzGZmAP9m + ZgAAmWYAM5lmAGaZZgCZmWYAzJlmAP+ZZgAAzGYAM8xmAGbMZgCZzGYAzMxmAP/MZgAA/2YAM/9mAGb/ + ZgCZ/2YAzP9mAP//ZgAAAJkAMwCZAGYAmQCZAJkAzACZAP8AmQAAM5kAMzOZAGYzmQCZM5kAzDOZAP8z + mQAAZpkAM2aZAGZmmQCZZpkAzGaZAP9mmQAAmZkAM5mZAGaZmQDMmZkA/5mZAAHMmQAzzJkAZsyZAJnM + mQDMzJkA/8yZAAD/mQAz/5kAZv+ZAJn/mQDM/5kA//+ZAAAAzAAzAMwAZgDMAJkAzADMAMwA/wDMAAAz + zAAzM8wAZjPMAJkzzADMM8wA/zPMAABmzAAzZswAZmbMAJlmzADMZswA/2bMAACZzAAzmcwAZpnMAJmZ + zADMmcwA/5nMAADMzAAzzMwAZszMAJnMzAD/zMwAAP/MADP/zABm/8wAmf/MAMz/zAD//8wAAAD/ADMA + /wBmAP8AmQD/AMwA/wD/AP8AADP/ADMz/wBmM/8AmTP/AMwz/wD/M/8AAGb/ADNm/wBmZv8AmWb/AMxm + /wD/Zv8AAJn/ADOZ/wBmmf8AmZn/AMyZ/wD/mf8AAMz/ADPM/wBmzP8Amcz/AMzM/wD/zP8AAP//ADP/ + /wBm//8Amf//AMz//wCfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pra2trZ+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+tra2tn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD62tra2fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+f + n5+tra2tra2tra2tra2fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8P + Dw+fn5+fn5+fn62tra2tra2tra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+f + n58PDw8PDw8PD5+fn5+fn5+fra2tra2tra2tra2tn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8P + Dw+fn5+fDw8PDw8PDw+tra2tra2tra2tra2tra2tra2tra2tra2tra2tn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PD5+fn58PDw8PDw8PD62tra2tra2tra2tra2tra2tra2tra2tra2tra2fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8Pn5+fnw8PDw8PDw8Pra2tra2tra2tra2tra2tra2tra2tra2tra2trZ+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw+fn5+fDw8PDw8PDw+tra2tra2tra2tra2tra2tra2tra2t + ra2tra2tn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+fn58PDw8PDw8PD62tra2tra2tra2tra2t + ra2tra2tra2tra2tra2fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PD62t + ra2tra2tra2trZ+fn5+tra2tra2trZ+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8Pra2tra2tra2tra2tn5+fn62tra2tra2tn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PDw8PDw+tra2tra2tra2tra2fn5+fra2tra2tra2fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n58PDw8Pn5+fn5+fn58PDw8PDw8PD62tra2tra2tra2tra2tra2fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pra2tra2tra2tra2tra2trZ+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw+tra2tra2tra2tra2tra2tn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PD62tra2tra2tra2tra2t + ra2fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pra2tra2t + ra2tra2tra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw+tra2tDw8PD5+fn5+tra2tn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PD62tra0PDw8Pn5+fn62tra2fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pra2trQ8PDw+fn5+fra2trZ+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw+tra2tn5+fn5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PD62tra2fn5+fn5+fnw8PDw+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8Pra2trZ+fn5+fn5+fDw8PD5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw+tra2tn5+fn5+f + n58PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PD62t + ra2fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PD5+fn5+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8Pn5+fn62t + ra0PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw+fn5+fra2trQ8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PD5+fn5+tra2tDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PD5+fn58PDw8PDw8PD5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fDw8PD5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+fn58PDw8PDw8PD5+f + n58PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n58PDw8Pn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fnw8P + Dw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fnw8PDw+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fn5+fn62tra2fn5+fn5+fnw8PDw+tra2tn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fDw8PD62t + ra2fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+tra2tn5+fn5+f + n58PDw8Pra2trZ+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+fn5+fn5+fn5+fn62t + ra2fn5+fn5+fn5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+f + n5+fn5+fra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8P + Dw+fn5+fn5+fn5+fn5+tra2tn5+fn5+fn5+fn5+fDw8PDw8PDw+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PD5+fn5+fn5+fn5+fn62tra2fn5+fn5+fn5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn5+tra2tra2trZ+fn5+tra2tn5+fnw8P + Dw+fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn62tra2tra2tn5+fn62t + ra2fn5+fDw8PD5+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fra2tra2t + ra2fn5+fra2trZ+fn58PDw8Pn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+tra2tn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn62tra2fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+tra2tn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fra2trZ+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+tra2tn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn62tra2fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8Pn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n58PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + + + \ No newline at end of file diff --git a/Server.MirForms/Database/QuestInfoForm.Designer.cs b/Server.MirForms/Database/QuestInfoForm.Designer.cs new file mode 100644 index 0000000..fb1be7d --- /dev/null +++ b/Server.MirForms/Database/QuestInfoForm.Designer.cs @@ -0,0 +1,653 @@ +namespace Server +{ + partial class QuestInfoForm + { + /// + /// 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(QuestInfoForm)); + tabControl1 = new TabControl(); + tabPage1 = new TabPage(); + QuestInfoPanel = new Panel(); + label5 = new Label(); + TimeLimitTextBox = new TextBox(); + label4 = new Label(); + RequiredMaxLevelTextBox = new TextBox(); + label3 = new Label(); + QFlagTextBox = new TextBox(); + label14 = new Label(); + label12 = new Label(); + label10 = new Label(); + QItemTextBox = new TextBox(); + QKillTextBox = new TextBox(); + QGotoTextBox = new TextBox(); + label9 = new Label(); + label8 = new Label(); + label7 = new Label(); + RequiredClassComboBox = new ComboBox(); + RequiredQuestComboBox = new ComboBox(); + RequiredMinLevelTextBox = new TextBox(); + label2 = new Label(); + QTypeComboBox = new ComboBox(); + label11 = new Label(); + OpenQButton = new Button(); + QFileNameTextBox = new TextBox(); + label29 = new Label(); + QGroupTextBox = new TextBox(); + QNameTextBox = new TextBox(); + label13 = new Label(); + QuestIndexTextBox = new TextBox(); + label1 = new Label(); + tabPage2 = new TabPage(); + EditQScriptBtn = new Button(); + CopyQScriptBtn = new Button(); + OpenQScriptBtn = new Button(); + QuestScriptTextBox = new RichTextBox(); + RemoveButton = new Button(); + AddButton = new Button(); + QuestInfoListBox = new ListBox(); + PasteMButton = new Button(); + CopyMButton = new Button(); + ExportButton = new Button(); + ImportButton = new Button(); + ExportSelectedButton = new Button(); + tabControl1.SuspendLayout(); + tabPage1.SuspendLayout(); + QuestInfoPanel.SuspendLayout(); + tabPage2.SuspendLayout(); + SuspendLayout(); + // + // tabControl1 + // + tabControl1.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; + tabControl1.Controls.Add(tabPage1); + tabControl1.Controls.Add(tabPage2); + tabControl1.Location = new Point(203, 47); + tabControl1.Margin = new Padding(4, 3, 4, 3); + tabControl1.Name = "tabControl1"; + tabControl1.SelectedIndex = 0; + tabControl1.Size = new Size(702, 331); + tabControl1.TabIndex = 16; + // + // tabPage1 + // + tabPage1.Controls.Add(QuestInfoPanel); + tabPage1.Location = new Point(4, 24); + tabPage1.Margin = new Padding(4, 3, 4, 3); + tabPage1.Name = "tabPage1"; + tabPage1.Padding = new Padding(4, 3, 4, 3); + tabPage1.Size = new Size(694, 303); + tabPage1.TabIndex = 0; + tabPage1.Text = "Info"; + tabPage1.UseVisualStyleBackColor = true; + // + // QuestInfoPanel + // + QuestInfoPanel.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; + QuestInfoPanel.Controls.Add(label5); + QuestInfoPanel.Controls.Add(TimeLimitTextBox); + QuestInfoPanel.Controls.Add(label4); + QuestInfoPanel.Controls.Add(RequiredMaxLevelTextBox); + QuestInfoPanel.Controls.Add(label3); + QuestInfoPanel.Controls.Add(QFlagTextBox); + QuestInfoPanel.Controls.Add(label14); + QuestInfoPanel.Controls.Add(label12); + QuestInfoPanel.Controls.Add(label10); + QuestInfoPanel.Controls.Add(QItemTextBox); + QuestInfoPanel.Controls.Add(QKillTextBox); + QuestInfoPanel.Controls.Add(QGotoTextBox); + QuestInfoPanel.Controls.Add(label9); + QuestInfoPanel.Controls.Add(label8); + QuestInfoPanel.Controls.Add(label7); + QuestInfoPanel.Controls.Add(RequiredClassComboBox); + QuestInfoPanel.Controls.Add(RequiredQuestComboBox); + QuestInfoPanel.Controls.Add(RequiredMinLevelTextBox); + QuestInfoPanel.Controls.Add(label2); + QuestInfoPanel.Controls.Add(QTypeComboBox); + QuestInfoPanel.Controls.Add(label11); + QuestInfoPanel.Controls.Add(OpenQButton); + QuestInfoPanel.Controls.Add(QFileNameTextBox); + QuestInfoPanel.Controls.Add(label29); + QuestInfoPanel.Controls.Add(QGroupTextBox); + QuestInfoPanel.Controls.Add(QNameTextBox); + QuestInfoPanel.Controls.Add(label13); + QuestInfoPanel.Controls.Add(QuestIndexTextBox); + QuestInfoPanel.Controls.Add(label1); + QuestInfoPanel.Enabled = false; + QuestInfoPanel.Location = new Point(4, 7); + QuestInfoPanel.Margin = new Padding(4, 3, 4, 3); + QuestInfoPanel.Name = "QuestInfoPanel"; + QuestInfoPanel.Size = new Size(682, 287); + QuestInfoPanel.TabIndex = 11; + // + // label5 + // + label5.AutoSize = true; + label5.Location = new Point(404, 160); + label5.Margin = new Padding(4, 0, 4, 0); + label5.Name = "label5"; + label5.Size = new Size(121, 15); + label5.TabIndex = 59; + label5.Text = "Time Limit (Seconds):"; + // + // TimeLimitTextBox + // + TimeLimitTextBox.Location = new Point(532, 157); + TimeLimitTextBox.Margin = new Padding(4, 3, 4, 3); + TimeLimitTextBox.Name = "TimeLimitTextBox"; + TimeLimitTextBox.Size = new Size(140, 23); + TimeLimitTextBox.TabIndex = 58; + TimeLimitTextBox.TextChanged += TimeLimitTextBox_TextChanged; + // + // label4 + // + label4.AutoSize = true; + label4.Location = new Point(407, 38); + label4.Margin = new Padding(4, 0, 4, 0); + label4.Name = "label4"; + label4.Size = new Size(113, 15); + label4.TabIndex = 57; + label4.Text = "Required Max Level:"; + // + // RequiredMaxLevelTextBox + // + RequiredMaxLevelTextBox.Location = new Point(532, 32); + RequiredMaxLevelTextBox.Margin = new Padding(4, 3, 4, 3); + RequiredMaxLevelTextBox.MaxLength = 3; + RequiredMaxLevelTextBox.Name = "RequiredMaxLevelTextBox"; + RequiredMaxLevelTextBox.Size = new Size(140, 23); + RequiredMaxLevelTextBox.TabIndex = 56; + RequiredMaxLevelTextBox.TextChanged += RequiredMaxLevelTextBox_TextChanged; + // + // label3 + // + label3.AutoSize = true; + label3.Location = new Point(31, 254); + label3.Margin = new Padding(4, 0, 4, 0); + label3.Name = "label3"; + label3.Size = new Size(56, 15); + label3.TabIndex = 55; + label3.Text = "Flag Text:"; + // + // QFlagTextBox + // + QFlagTextBox.Location = new Point(102, 250); + QFlagTextBox.Margin = new Padding(4, 3, 4, 3); + QFlagTextBox.Name = "QFlagTextBox"; + QFlagTextBox.Size = new Size(209, 23); + QFlagTextBox.TabIndex = 54; + QFlagTextBox.TextChanged += QFlagTextBox_TextChanged; + // + // label14 + // + label14.AutoSize = true; + label14.Location = new Point(31, 223); + label14.Margin = new Padding(4, 0, 4, 0); + label14.Name = "label14"; + label14.Size = new Size(58, 15); + label14.TabIndex = 53; + label14.Text = "Item Text:"; + // + // label12 + // + label12.AutoSize = true; + label12.Location = new Point(40, 192); + label12.Margin = new Padding(4, 0, 4, 0); + label12.Name = "label12"; + label12.Size = new Size(50, 15); + label12.TabIndex = 52; + label12.Text = "Kill Text:"; + // + // label10 + // + label10.AutoSize = true; + label10.Location = new Point(28, 160); + label10.Margin = new Padding(4, 0, 4, 0); + label10.Name = "label10"; + label10.Size = new Size(60, 15); + label10.TabIndex = 51; + label10.Text = "Goto Text:"; + // + // QItemTextBox + // + QItemTextBox.Location = new Point(102, 219); + QItemTextBox.Margin = new Padding(4, 3, 4, 3); + QItemTextBox.Name = "QItemTextBox"; + QItemTextBox.Size = new Size(209, 23); + QItemTextBox.TabIndex = 49; + QItemTextBox.TextChanged += QItemTextBox_TextChanged; + // + // QKillTextBox + // + QKillTextBox.Location = new Point(102, 188); + QKillTextBox.Margin = new Padding(4, 3, 4, 3); + QKillTextBox.Name = "QKillTextBox"; + QKillTextBox.Size = new Size(209, 23); + QKillTextBox.TabIndex = 48; + QKillTextBox.TextChanged += QKillTextBox_TextChanged; + // + // QGotoTextBox + // + QGotoTextBox.Location = new Point(102, 157); + QGotoTextBox.Margin = new Padding(4, 3, 4, 3); + QGotoTextBox.Name = "QGotoTextBox"; + QGotoTextBox.Size = new Size(209, 23); + QGotoTextBox.TabIndex = 47; + QGotoTextBox.TextChanged += QGotoTextBox_TextChanged; + // + // label9 + // + label9.AutoSize = true; + label9.Location = new Point(435, 98); + label9.Margin = new Padding(4, 0, 4, 0); + label9.Name = "label9"; + label9.Size = new Size(87, 15); + label9.TabIndex = 46; + label9.Text = "Required Class:"; + // + // label8 + // + label8.AutoSize = true; + label8.Location = new Point(432, 68); + label8.Margin = new Padding(4, 0, 4, 0); + label8.Name = "label8"; + label8.Size = new Size(91, 15); + label8.TabIndex = 45; + label8.Text = "Required Quest:"; + // + // label7 + // + label7.AutoSize = true; + label7.Location = new Point(411, 8); + label7.Margin = new Padding(4, 0, 4, 0); + label7.Name = "label7"; + label7.Size = new Size(111, 15); + label7.TabIndex = 44; + label7.Text = "Required Min Level:"; + // + // RequiredClassComboBox + // + RequiredClassComboBox.DropDownStyle = ComboBoxStyle.DropDownList; + RequiredClassComboBox.FormattingEnabled = true; + RequiredClassComboBox.Location = new Point(532, 95); + RequiredClassComboBox.Margin = new Padding(4, 3, 4, 3); + RequiredClassComboBox.Name = "RequiredClassComboBox"; + RequiredClassComboBox.Size = new Size(140, 23); + RequiredClassComboBox.TabIndex = 43; + RequiredClassComboBox.SelectedIndexChanged += RequiredClassComboBox_SelectedIndexChanged; + // + // RequiredQuestComboBox + // + RequiredQuestComboBox.DropDownStyle = ComboBoxStyle.DropDownList; + RequiredQuestComboBox.FormattingEnabled = true; + RequiredQuestComboBox.Location = new Point(532, 62); + RequiredQuestComboBox.Margin = new Padding(4, 3, 4, 3); + RequiredQuestComboBox.Name = "RequiredQuestComboBox"; + RequiredQuestComboBox.Size = new Size(140, 23); + RequiredQuestComboBox.TabIndex = 42; + RequiredQuestComboBox.SelectedIndexChanged += RequiredQuestComboBox_SelectedIndexChanged; + // + // RequiredMinLevelTextBox + // + RequiredMinLevelTextBox.Location = new Point(532, 5); + RequiredMinLevelTextBox.Margin = new Padding(4, 3, 4, 3); + RequiredMinLevelTextBox.MaxLength = 3; + RequiredMinLevelTextBox.Name = "RequiredMinLevelTextBox"; + RequiredMinLevelTextBox.Size = new Size(140, 23); + RequiredMinLevelTextBox.TabIndex = 41; + RequiredMinLevelTextBox.TextChanged += RequiredMinLevelTextBox_TextChanged; + // + // label2 + // + label2.AutoSize = true; + label2.Location = new Point(55, 98); + label2.Margin = new Padding(4, 0, 4, 0); + label2.Name = "label2"; + label2.Size = new Size(34, 15); + label2.TabIndex = 32; + label2.Text = "Type:"; + // + // QTypeComboBox + // + QTypeComboBox.DropDownStyle = ComboBoxStyle.DropDownList; + QTypeComboBox.FormattingEnabled = true; + QTypeComboBox.Location = new Point(102, 95); + QTypeComboBox.Margin = new Padding(4, 3, 4, 3); + QTypeComboBox.Name = "QTypeComboBox"; + QTypeComboBox.Size = new Size(209, 23); + QTypeComboBox.TabIndex = 31; + QTypeComboBox.SelectedIndexChanged += QTypeComboBox_SelectedIndexChanged; + // + // label11 + // + label11.AutoSize = true; + label11.Location = new Point(28, 129); + label11.Margin = new Padding(4, 0, 4, 0); + label11.Name = "label11"; + label11.Size = new Size(63, 15); + label11.TabIndex = 23; + label11.Text = "File Name:"; + // + // OpenQButton + // + OpenQButton.Location = new Point(323, 123); + OpenQButton.Margin = new Padding(4, 3, 4, 3); + OpenQButton.Name = "OpenQButton"; + OpenQButton.Size = new Size(88, 27); + OpenQButton.TabIndex = 30; + OpenQButton.Text = "Open Script"; + OpenQButton.UseVisualStyleBackColor = true; + OpenQButton.Click += OpenQButton_Click; + // + // QFileNameTextBox + // + QFileNameTextBox.Location = new Point(102, 126); + QFileNameTextBox.Margin = new Padding(4, 3, 4, 3); + QFileNameTextBox.Name = "QFileNameTextBox"; + QFileNameTextBox.Size = new Size(209, 23); + QFileNameTextBox.TabIndex = 22; + QFileNameTextBox.TextChanged += QFileNameTextBox_TextChanged; + // + // label29 + // + label29.AutoSize = true; + label29.Location = new Point(49, 68); + label29.Margin = new Padding(4, 0, 4, 0); + label29.Name = "label29"; + label29.Size = new Size(43, 15); + label29.TabIndex = 21; + label29.Text = "Group:"; + // + // QGroupTextBox + // + QGroupTextBox.Location = new Point(102, 65); + QGroupTextBox.Margin = new Padding(4, 3, 4, 3); + QGroupTextBox.MaxLength = 20; + QGroupTextBox.Name = "QGroupTextBox"; + QGroupTextBox.Size = new Size(209, 23); + QGroupTextBox.TabIndex = 20; + QGroupTextBox.TextChanged += QGroupTextBox_TextChanged; + // + // QNameTextBox + // + QNameTextBox.Location = new Point(102, 35); + QNameTextBox.Margin = new Padding(4, 3, 4, 3); + QNameTextBox.MaxLength = 30; + QNameTextBox.Name = "QNameTextBox"; + QNameTextBox.Size = new Size(209, 23); + QNameTextBox.TabIndex = 14; + QNameTextBox.TextChanged += QNameTextBox_TextChanged; + // + // label13 + // + label13.AutoSize = true; + label13.Location = new Point(50, 38); + label13.Margin = new Padding(4, 0, 4, 0); + label13.Name = "label13"; + label13.Size = new Size(42, 15); + label13.TabIndex = 15; + label13.Text = "Name:"; + // + // QuestIndexTextBox + // + QuestIndexTextBox.Location = new Point(102, 5); + QuestIndexTextBox.Margin = new Padding(4, 3, 4, 3); + QuestIndexTextBox.Name = "QuestIndexTextBox"; + QuestIndexTextBox.ReadOnly = true; + QuestIndexTextBox.Size = new Size(54, 23); + QuestIndexTextBox.TabIndex = 0; + // + // label1 + // + label1.AutoSize = true; + label1.Location = new Point(16, 8); + label1.Margin = new Padding(4, 0, 4, 0); + label1.Name = "label1"; + label1.Size = new Size(73, 15); + label1.TabIndex = 4; + label1.Text = "Quest Index:"; + // + // tabPage2 + // + tabPage2.Controls.Add(EditQScriptBtn); + tabPage2.Controls.Add(CopyQScriptBtn); + tabPage2.Controls.Add(OpenQScriptBtn); + tabPage2.Controls.Add(QuestScriptTextBox); + tabPage2.Location = new Point(4, 24); + tabPage2.Name = "tabPage2"; + tabPage2.Padding = new Padding(3); + tabPage2.Size = new Size(694, 303); + tabPage2.TabIndex = 1; + tabPage2.Text = "Script"; + tabPage2.UseVisualStyleBackColor = true; + // + // EditQScriptBtn + // + EditQScriptBtn.Location = new Point(537, 90); + EditQScriptBtn.Margin = new Padding(4, 3, 4, 3); + EditQScriptBtn.Name = "EditQScriptBtn"; + EditQScriptBtn.Size = new Size(88, 27); + EditQScriptBtn.TabIndex = 38; + EditQScriptBtn.Text = "Edit Script"; + EditQScriptBtn.UseVisualStyleBackColor = true; + EditQScriptBtn.Click += EditQScriptBtn_Click; + // + // CopyQScriptBtn + // + CopyQScriptBtn.Location = new Point(537, 170); + CopyQScriptBtn.Margin = new Padding(4, 3, 4, 3); + CopyQScriptBtn.Name = "CopyQScriptBtn"; + CopyQScriptBtn.Size = new Size(88, 27); + CopyQScriptBtn.TabIndex = 37; + CopyQScriptBtn.Text = "Copy Script"; + CopyQScriptBtn.UseVisualStyleBackColor = true; + CopyQScriptBtn.Click += CopyQScriptBtn_Click; + // + // OpenQScriptBtn + // + OpenQScriptBtn.Location = new Point(537, 130); + OpenQScriptBtn.Margin = new Padding(4, 3, 4, 3); + OpenQScriptBtn.Name = "OpenQScriptBtn"; + OpenQScriptBtn.Size = new Size(88, 27); + OpenQScriptBtn.TabIndex = 36; + OpenQScriptBtn.Text = "Open Script"; + OpenQScriptBtn.UseVisualStyleBackColor = true; + OpenQScriptBtn.Click += OpenQScriptBtn_Click; + // + // QuestScriptTextBox + // + QuestScriptTextBox.Location = new Point(0, -1); + QuestScriptTextBox.Name = "QuestScriptTextBox"; + QuestScriptTextBox.ReadOnly = true; + QuestScriptTextBox.Size = new Size(477, 301); + QuestScriptTextBox.TabIndex = 35; + QuestScriptTextBox.Text = ""; + // + // RemoveButton + // + RemoveButton.Location = new Point(108, 14); + RemoveButton.Margin = new Padding(4, 3, 4, 3); + RemoveButton.Name = "RemoveButton"; + RemoveButton.Size = new Size(88, 27); + RemoveButton.TabIndex = 14; + RemoveButton.Text = "Remove"; + RemoveButton.UseVisualStyleBackColor = true; + RemoveButton.Click += RemoveButton_Click; + // + // AddButton + // + AddButton.Location = new Point(14, 14); + AddButton.Margin = new Padding(4, 3, 4, 3); + AddButton.Name = "AddButton"; + AddButton.Size = new Size(88, 27); + AddButton.TabIndex = 13; + AddButton.Text = "Add"; + AddButton.UseVisualStyleBackColor = true; + AddButton.Click += AddButton_Click; + // + // QuestInfoListBox + // + QuestInfoListBox.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left; + QuestInfoListBox.FormattingEnabled = true; + QuestInfoListBox.ItemHeight = 15; + QuestInfoListBox.Location = new Point(14, 47); + QuestInfoListBox.Margin = new Padding(4, 3, 4, 3); + QuestInfoListBox.Name = "QuestInfoListBox"; + QuestInfoListBox.SelectionMode = SelectionMode.MultiExtended; + QuestInfoListBox.Size = new Size(181, 319); + QuestInfoListBox.TabIndex = 15; + QuestInfoListBox.SelectedIndexChanged += QuestInfoListBox_SelectedIndexChanged; + // + // PasteMButton + // + PasteMButton.Location = new Point(298, 14); + PasteMButton.Margin = new Padding(4, 3, 4, 3); + PasteMButton.Name = "PasteMButton"; + PasteMButton.Size = new Size(88, 27); + PasteMButton.TabIndex = 22; + PasteMButton.Text = "Paste"; + PasteMButton.UseVisualStyleBackColor = true; + PasteMButton.Click += PasteMButton_Click; + // + // CopyMButton + // + CopyMButton.Location = new Point(203, 14); + CopyMButton.Margin = new Padding(4, 3, 4, 3); + CopyMButton.Name = "CopyMButton"; + CopyMButton.Size = new Size(88, 27); + CopyMButton.TabIndex = 21; + CopyMButton.Text = "Copy"; + CopyMButton.UseVisualStyleBackColor = true; + // + // ExportButton + // + ExportButton.Location = new Point(818, 14); + ExportButton.Margin = new Padding(4, 3, 4, 3); + ExportButton.Name = "ExportButton"; + ExportButton.Size = new Size(88, 27); + ExportButton.TabIndex = 23; + ExportButton.Text = "Export All"; + ExportButton.UseVisualStyleBackColor = true; + ExportButton.Click += ExportAllButton_Click; + // + // ImportButton + // + ImportButton.Location = new Point(581, 14); + ImportButton.Margin = new Padding(4, 3, 4, 3); + ImportButton.Name = "ImportButton"; + ImportButton.Size = new Size(88, 27); + ImportButton.TabIndex = 24; + ImportButton.Text = "Import"; + ImportButton.UseVisualStyleBackColor = true; + ImportButton.Click += ImportButton_Click; + // + // ExportSelectedButton + // + ExportSelectedButton.Location = new Point(674, 14); + ExportSelectedButton.Margin = new Padding(4, 3, 4, 3); + ExportSelectedButton.Name = "ExportSelectedButton"; + ExportSelectedButton.Size = new Size(136, 27); + ExportSelectedButton.TabIndex = 25; + ExportSelectedButton.Text = "Export Selected"; + ExportSelectedButton.UseVisualStyleBackColor = true; + ExportSelectedButton.Click += ExportSelected_Click; + // + // QuestInfoForm + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(919, 384); + Controls.Add(ExportSelectedButton); + Controls.Add(ImportButton); + Controls.Add(ExportButton); + Controls.Add(PasteMButton); + Controls.Add(CopyMButton); + Controls.Add(tabControl1); + Controls.Add(RemoveButton); + Controls.Add(AddButton); + Controls.Add(QuestInfoListBox); + Icon = (Icon)resources.GetObject("$this.Icon"); + Margin = new Padding(4, 3, 4, 3); + Name = "QuestInfoForm"; + Text = "QuestInfoForm"; + FormClosed += QuestInfoForm_FormClosed; + tabControl1.ResumeLayout(false); + tabPage1.ResumeLayout(false); + QuestInfoPanel.ResumeLayout(false); + QuestInfoPanel.PerformLayout(); + tabPage2.ResumeLayout(false); + ResumeLayout(false); + } + + #endregion + + private System.Windows.Forms.TabControl tabControl1; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.Panel QuestInfoPanel; + private System.Windows.Forms.TextBox QuestIndexTextBox; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button RemoveButton; + private System.Windows.Forms.Button AddButton; + private System.Windows.Forms.Button PasteMButton; + private System.Windows.Forms.Button CopyMButton; + private System.Windows.Forms.Button ExportButton; + private System.Windows.Forms.Button ImportButton; + private System.Windows.Forms.Button ExportSelectedButton; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.Button OpenQButton; + private System.Windows.Forms.TextBox QFileNameTextBox; + private System.Windows.Forms.Label label29; + private System.Windows.Forms.TextBox QGroupTextBox; + private System.Windows.Forms.TextBox QNameTextBox; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.ListBox QuestInfoListBox; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.ComboBox QTypeComboBox; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.ComboBox RequiredClassComboBox; + private System.Windows.Forms.ComboBox RequiredQuestComboBox; + private System.Windows.Forms.TextBox RequiredMinLevelTextBox; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.Label label14; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.TextBox QItemTextBox; + private System.Windows.Forms.TextBox QKillTextBox; + private System.Windows.Forms.TextBox QGotoTextBox; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TextBox QFlagTextBox; + private System.Windows.Forms.TextBox RequiredMaxLevelTextBox; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.TextBox TimeLimitTextBox; + private TabPage tabPage2; + private Button EditQScriptBtn; + private Button CopyQScriptBtn; + private Button OpenQScriptBtn; + private RichTextBox QuestScriptTextBox; + } +} \ No newline at end of file diff --git a/Server.MirForms/Database/QuestInfoForm.cs b/Server.MirForms/Database/QuestInfoForm.cs new file mode 100644 index 0000000..21dea65 --- /dev/null +++ b/Server.MirForms/Database/QuestInfoForm.cs @@ -0,0 +1,541 @@ +using Server.MirDatabase; +using Server.MirEnvir; +using System.Diagnostics; + +namespace Server +{ + public partial class QuestInfoForm : Form + { + public string QuestListPath = Path.Combine(Settings.ExportPath, "QuestList.txt"); + + public Envir Envir => SMain.EditEnvir; + + private List _selectedQuestInfos; + private bool isEditing = false; + + public QuestInfoForm() + { + InitializeComponent(); + + QTypeComboBox.Items.AddRange(Enum.GetValues(typeof(QuestType)).Cast().ToArray()); + RequiredClassComboBox.Items.AddRange(Enum.GetValues(typeof(RequiredClass)).Cast().ToArray()); + + UpdateInterface(); + } + + private void AddButton_Click(object sender, EventArgs e) + { + Envir.CreateQuestInfo(); + UpdateInterface(); + } + private void RemoveButton_Click(object sender, EventArgs e) + { + if (_selectedQuestInfos.Count == 0) return; + + if (MessageBox.Show("Are you sure you want to remove the selected Quests?", "Remove Quests?", MessageBoxButtons.YesNo) != DialogResult.Yes) return; + + for (int i = 0; i < _selectedQuestInfos.Count; i++) Envir.Remove(_selectedQuestInfos[i]); + + if (Envir.QuestInfoList.Count == 0) Envir.QuestIndex = 0; + + UpdateInterface(); + } + + private void UpdateInterface() + { + if (QuestInfoListBox.Items.Count != Envir.QuestInfoList.Count) + { + QuestInfoListBox.Items.Clear(); + RequiredQuestComboBox.Items.Clear(); + + RequiredQuestComboBox.Items.Add(new QuestInfo() { Index = 0, Name = "None" }); + + for (int i = 0; i < Envir.QuestInfoList.Count; i++) + { + QuestInfoListBox.Items.Add(Envir.QuestInfoList[i]); + RequiredQuestComboBox.Items.Add(Envir.QuestInfoList[i]); + } + + } + + _selectedQuestInfos = QuestInfoListBox.SelectedItems.Cast().ToList(); + + if (_selectedQuestInfos.Count == 0) + { + QuestInfoPanel.Enabled = false; + QuestIndexTextBox.Text = string.Empty; + QFileNameTextBox.Text = string.Empty; + QNameTextBox.Text = string.Empty; + QGroupTextBox.Text = string.Empty; + QTypeComboBox.SelectedItem = null; + + QGotoTextBox.Text = string.Empty; + QKillTextBox.Text = string.Empty; + QItemTextBox.Text = string.Empty; + QFlagTextBox.Text = string.Empty; + + RequiredMinLevelTextBox.Text = string.Empty; + RequiredMaxLevelTextBox.Text = string.Empty; + RequiredQuestComboBox.SelectedItem = null; + RequiredClassComboBox.SelectedItem = null; + + return; + } + + QuestInfo info = _selectedQuestInfos[0]; + + QuestInfoPanel.Enabled = true; + QuestIndexTextBox.Text = info.Index.ToString(); + QFileNameTextBox.Text = info.FileName; + QNameTextBox.Text = info.Name; + QGroupTextBox.Text = info.Group; + QTypeComboBox.SelectedItem = info.Type; + + QGotoTextBox.Text = info.GotoMessage; + QKillTextBox.Text = info.KillMessage; + QItemTextBox.Text = info.ItemMessage; + QFlagTextBox.Text = info.FlagMessage; + + RequiredMinLevelTextBox.Text = info.RequiredMinLevel.ToString(); + RequiredMaxLevelTextBox.Text = info.RequiredMaxLevel.ToString(); + + if (Convert.ToInt32(RequiredMaxLevelTextBox.Text) <= 0) RequiredMaxLevelTextBox.Text = byte.MaxValue.ToString(); + + QuestInfo tempQuest = Envir.QuestInfoList.FirstOrDefault(c => c.Index == info.RequiredQuest); + + if (tempQuest == null) + { + tempQuest = (QuestInfo)RequiredQuestComboBox.Items[0]; + } + + RequiredQuestComboBox.SelectedItem = tempQuest; //test + RequiredClassComboBox.SelectedItem = info.RequiredClass; + + TimeLimitTextBox.Text = info.TimeLimitInSeconds.ToString(); + + for (int i = 1; i < _selectedQuestInfos.Count; i++) + { + info = _selectedQuestInfos[i]; + + if (QFileNameTextBox.Text != info.FileName) QFileNameTextBox.Text = string.Empty; + if (QNameTextBox.Text != info.Name) QNameTextBox.Text = string.Empty; + if (QGroupTextBox.Text != info.Group) QGroupTextBox.Text = string.Empty; + + if (QTypeComboBox.SelectedItem != null) + if ((QuestType)QTypeComboBox.SelectedItem != info.Type) QTypeComboBox.SelectedItem = null; + + if (QGotoTextBox.Text != info.GotoMessage) QGotoTextBox.Text = string.Empty; + if (QKillTextBox.Text != info.KillMessage) QKillTextBox.Text = string.Empty; + if (QItemTextBox.Text != info.ItemMessage) QItemTextBox.Text = string.Empty; + if (QFlagTextBox.Text != info.ItemMessage) QFlagTextBox.Text = string.Empty; + + if (RequiredMinLevelTextBox.Text != info.RequiredMinLevel.ToString()) RequiredMinLevelTextBox.Text = string.Empty; + if (RequiredMaxLevelTextBox.Text != info.RequiredMaxLevel.ToString()) RequiredMaxLevelTextBox.Text = byte.MaxValue.ToString(); + + if (RequiredQuestComboBox.SelectedValue != null) + if ((string)RequiredQuestComboBox.SelectedValue != info.RequiredQuest.ToString()) RequiredQuestComboBox.SelectedItem = null; + + if (RequiredClassComboBox.SelectedItem != null) + if ((RequiredClass)RequiredClassComboBox.SelectedItem != info.RequiredClass) RequiredClassComboBox.SelectedItem = null; + + if (TimeLimitTextBox.SelectedText != info.TimeLimitInSeconds.ToString()) TimeLimitTextBox.Text = "0"; + } + } + + private void RefreshQuestList() + { + QuestInfoListBox.SelectedIndexChanged -= QuestInfoListBox_SelectedIndexChanged; + + List selected = new List(); + + for (int i = 0; i < QuestInfoListBox.Items.Count; i++) selected.Add(QuestInfoListBox.GetSelected(i)); + QuestInfoListBox.Items.Clear(); + for (int i = 0; i < Envir.QuestInfoList.Count; i++) QuestInfoListBox.Items.Add(Envir.QuestInfoList[i]); + for (int i = 0; i < selected.Count; i++) QuestInfoListBox.SetSelected(i, selected[i]); + + QuestInfoListBox.SelectedIndexChanged += QuestInfoListBox_SelectedIndexChanged; + + } + + private void QuestInfoListBox_SelectedIndexChanged(object sender, EventArgs e) + { + UpdateInterface(); + UpdateQScriptDisplay(); + } + + private void UpdateQScriptDisplay() + { + string basePath = "Envir\\Quests"; + string fileName = QFileNameTextBox.Text; + fileName = $"{fileName}.txt"; + + string filePath = Path.Combine(basePath, fileName); + + try + { + string fileContent = File.ReadAllText(filePath); + + QuestScriptTextBox.Text = fileContent; + QuestScriptTextBox.ReadOnly = !isEditing; + } + catch (Exception ex) + { + return; + } + } + + private void QuestInfoForm_FormClosed(object sender, FormClosedEventArgs e) + { + Envir.SaveDB(); + } + + private void PasteMButton_Click(object sender, EventArgs e) + { + string data = Clipboard.GetText(); + + if (!data.StartsWith("Quest", StringComparison.OrdinalIgnoreCase)) + { + MessageBox.Show("Cannot Paste, Copied data is not Quest Information."); + return; + } + + + string[] npcs = data.Split(new[] { '\t' }, StringSplitOptions.RemoveEmptyEntries); + + + //for (int i = 1; i < npcs.Length; i++) + // NPCInfo.FromText(npcs[i]); + + UpdateInterface(); + } + + + private void ExportAllButton_Click(object sender, EventArgs e) + { + ExportQuests(Envir.QuestInfoList); + } + + private void ExportSelected_Click(object sender, EventArgs e) + { + var list = QuestInfoListBox.SelectedItems.Cast().ToList(); + + ExportQuests(list); + } + + public void ExportQuests(List Quests) + { + if (Quests.Count == 0) return; + + SaveFileDialog sfd = new SaveFileDialog(); + sfd.InitialDirectory = Path.Combine(Application.StartupPath, "Exports"); + sfd.Filter = "Text File|*.txt"; + sfd.ShowDialog(); + + if (sfd.FileName == string.Empty) return; + + using (StreamWriter sw = File.AppendText(sfd.FileNames[0])) + { + for (int j = 0; j < Quests.Count; j++) + { + sw.WriteLine(Quests[j].ToText()); + } + } + MessageBox.Show("Quest Export complete"); + } + + + private void ImportButton_Click(object sender, EventArgs e) + { + string Path = string.Empty; + + OpenFileDialog ofd = new OpenFileDialog(); + ofd.Filter = "Text File|*.txt"; + ofd.ShowDialog(); + + if (ofd.FileName == string.Empty) return; + + Path = ofd.FileName; + + string data; + using (var sr = new StreamReader(Path)) + { + data = sr.ReadToEnd(); + } + + var quests = data.Split(new[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); + + foreach (var m in quests) + QuestInfo.FromText(m); + + UpdateInterface(); + MessageBox.Show("Quest Import complete"); + } + + private void QNameTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedQuestInfos.Count; i++) + _selectedQuestInfos[i].Name = ActiveControl.Text; + + RefreshQuestList(); + } + + private void QGroupTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedQuestInfos.Count; i++) + _selectedQuestInfos[i].Group = ActiveControl.Text; + } + + private void QTypeComboBox_SelectedIndexChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedQuestInfos.Count; i++) + _selectedQuestInfos[i].Type = (QuestType)QTypeComboBox.SelectedItem; + } + + private void QFileNameTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedQuestInfos.Count; i++) + _selectedQuestInfos[i].FileName = ActiveControl.Text; + + UpdateQScriptDisplay(); + } + + private void QGotoTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedQuestInfos.Count; i++) + _selectedQuestInfos[i].GotoMessage = ActiveControl.Text; + + } + + private void QKillTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedQuestInfos.Count; i++) + _selectedQuestInfos[i].KillMessage = ActiveControl.Text; + + } + + private void QItemTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedQuestInfos.Count; i++) + _selectedQuestInfos[i].ItemMessage = ActiveControl.Text; + } + + private void QFlagTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedQuestInfos.Count; i++) + _selectedQuestInfos[i].FlagMessage = ActiveControl.Text; + } + + + private void RequiredMinLevelTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + int temp; + + if (!int.TryParse(ActiveControl.Text, out temp) || temp > Convert.ToInt32(RequiredMaxLevelTextBox.Text) || temp < byte.MinValue) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + for (int i = 0; i < _selectedQuestInfos.Count; i++) + _selectedQuestInfos[i].RequiredMinLevel = temp; + } + + private void RequiredMaxLevelTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + int temp; + + if (!int.TryParse(ActiveControl.Text, out temp) || temp < Convert.ToInt32(RequiredMinLevelTextBox.Text) || temp > byte.MaxValue) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + for (int i = 0; i < _selectedQuestInfos.Count; i++) + _selectedQuestInfos[i].RequiredMaxLevel = temp; + } + + private void RequiredQuestComboBox_SelectedIndexChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedQuestInfos.Count; i++) + { + QuestInfo temp = (QuestInfo)RequiredQuestComboBox.SelectedItem; + + _selectedQuestInfos[i].RequiredQuest = temp.Index; + } + } + + private void RequiredClassComboBox_SelectedIndexChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + for (int i = 0; i < _selectedQuestInfos.Count; i++) + _selectedQuestInfos[i].RequiredClass = (RequiredClass)RequiredClassComboBox.SelectedItem; + } + + private void OpenQButton_Click(object sender, EventArgs e) + { + if (QFileNameTextBox.Text == string.Empty) return; + + var scriptPath = Path.Combine(Settings.QuestPath, QFileNameTextBox.Text + ".txt"); + + if (File.Exists(scriptPath)) + { + Shared.Helpers.FileIO.OpenScript(scriptPath, true); + } + else + { + Directory.CreateDirectory(Path.GetDirectoryName(scriptPath)); + + File.Create(scriptPath).Close(); + + File.WriteAllText(scriptPath, + $"{"[@Description]"}\r\n\r\n{"[@TaskDescription]"}\r\n\r\n{"[@Completion]"}\r\n\r\n{"[@KillTasks]"}\r\n\r\n{"[@ItemTasks]"}\r\n\r\n{"[@FlagTasks]"}\r\n\r\n{"[@CarryItems]"}\r\n\r\n{"[@FixedRewards]"}\r\n\r\n{"[@SelectRewards]"}\r\n\r\n{"[@ExpReward]"}\r\n\r\n{"[@GoldReward]"}"); + + Shared.Helpers.FileIO.OpenScript(scriptPath, true); + } + } + + private void TimeLimitTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + int temp; + + if (!int.TryParse(ActiveControl.Text, out temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + + for (int i = 0; i < _selectedQuestInfos.Count; i++) + _selectedQuestInfos[i].TimeLimitInSeconds = temp; + } + + private void SaveScriptContent() + { + string basePath = "Envir\\Quests"; // Adjust as needed + + // Get the file name from the NFileNameTextBox + string fileName = QFileNameTextBox.Text; + + // Add the ".txt" extension to the file name + fileName = $"{fileName}.txt"; + + // Combine the base path and file name to get the full file path + string filePath = Path.Combine(basePath, fileName); + + try + { + // Save the content of the RichTextBox back to the file + File.WriteAllText(filePath, QuestScriptTextBox.Text); + } + catch (Exception ex) + { + // Handle any exceptions that might occur during file writing + MessageBox.Show($"Error writing to file: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void EditQScriptBtn_Click(object sender, EventArgs e) + { + isEditing = !isEditing; + QuestScriptTextBox.ReadOnly = !isEditing; + + if (!isEditing) + { + SaveScriptContent(); + } + } + + private void OpenQScriptBtn_Click(object sender, EventArgs e) + { + if (QFileNameTextBox.Text == string.Empty) return; + + var scriptPath = Path.Combine(Settings.QuestPath, QFileNameTextBox.Text + ".txt"); + + if (File.Exists(scriptPath)) + { + Shared.Helpers.FileIO.OpenScript(scriptPath, true); + } + else + { + Directory.CreateDirectory(Path.GetDirectoryName(scriptPath)); + + string templateFilePath = "Envir\\Quests\\Template.txt"; + + try + { + if (File.Exists(templateFilePath)) + { + string templateContent = File.ReadAllText(templateFilePath); + File.WriteAllText(scriptPath, templateContent); + + Shared.Helpers.FileIO.OpenScript(scriptPath, true); + } + else + { + MessageBox.Show("Template file not found.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + catch (Exception ex) + { + MessageBox.Show($"Error creating or opening script: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } + + private void CopyQScriptBtn_Click(object sender, EventArgs e) + { + using (SaveFileDialog saveFileDialog = new SaveFileDialog()) + { + // Set initial directory and suggested file name + saveFileDialog.InitialDirectory = "Envir\\Quests"; // Adjust as needed + saveFileDialog.FileName = QFileNameTextBox.Text; + + // Set the file filter + saveFileDialog.Filter = "Text Files (*.txt)|*.txt|All Files (*.*)|*.*"; + + if (saveFileDialog.ShowDialog() == DialogResult.OK) + { + try + { + // Save the content of the RichTextBox to the selected file + File.WriteAllText(saveFileDialog.FileName, QuestScriptTextBox.Text); + + MessageBox.Show("Script copied successfully.", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + catch (Exception ex) + { + // Handle any exceptions that might occur during file writing + MessageBox.Show($"Error copying script: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } + } + } +} diff --git a/Server.MirForms/Database/QuestInfoForm.resx b/Server.MirForms/Database/QuestInfoForm.resx new file mode 100644 index 0000000..1b01221 --- /dev/null +++ b/Server.MirForms/Database/QuestInfoForm.resx @@ -0,0 +1,1763 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAgAICAQAAAABADoAgAAhgAAACAgAAAAABgAqAwAAG4DAAAgIAAAAAAIAKgIAAAWEAAAQEAAAAAA + GAAoMgAAvhgAAEBAEAAAAAQAaAoAAOZKAABAQAAAAAAIACgWAABOVQAAgIAAAAAAGAAoyAAAdmsAAICA + AAAAAAgAKEwAAJ4zAQAoAAAAIAAAAEAAAAABAAQAAAAAAAACAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAA + gAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////ABER + ERAAAAAAAAAAAAAAAAARERERAAAAAAAAAAAAAAAAERERERAAAAAAAAAAAAAAABERERERAAAAAQAAAAAA + AAARERAAAQAAAAEAAAAAAAAAEREREQAAAAABAAAAAAAAABERERERAAAAABAAAAAAAAAREREREQAAAAAQ + AAAQAAAAEREREREAAAAAAAABEAAAAAERERERAAAAAAAxERAAAAAQERERERAAAAABEQAAAAAAAAAREREQ + AAAAAQARERARAAAAEREREAAAAAEBEAERERAAAAAAAAAAAAAQEQARMzERAAAAEREAAAABEBADMzMzEQAA + AAEQAAAAAAEAADMxMxEAAAAAAAAAAAEQEQAzMxEQAAABAAEAAAEREAAAMBMQEAAAAAARAAABEREQADEQ + EQAAAAABEBEBEREQATAREREAAAAQAQAQARERAQABEQERAAAAAAAAEBETEQMRERAREQAAAAAAARARExEQ + AREAAREQAAAAAAEBERMxMQEBAAABEQABAAAAAQERERMREQAAAAEAABAAABABERExERAAAAAAAAAAAAAA + EREREREAAAAAAAAAABAQEQAAAREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABAAAAAAAAAAAA + AAAAEAARAAAAAAAAAAAAAAAAAAABEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABABgAAAAAAAAM + AAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA + AACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAAAA + AAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA + AACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACA + AACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAACAAACAAACAAACAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAA + AACAAACAAACAAACAAACAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAAAAAAAAAACAAACAAACAAACAAACA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACAAAAAAACAAACAAAAAAAAAAACAAACAAICAAICAAICAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAA + AACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAACAAAAAAAAAAICAAICAAICA + AICAAICAAICAAICAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAICAAICAAICAAACAAICAAICAAACAAACAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAACAAACA + AAAAAAAAAICAAICAAICAAICAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAACA + AAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAICAAAAAAACAAICAAACAAAAA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAACAAACAAACA + AACAAACAAACAAAAAAAAAAAAAAICAAACAAACAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAACAAACAAAAAAACAAACAAAAAAACAAACAAACAAACAAACAAACAAAAAAAAAAACAAICAAAAAAACAAACA + AACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAACA + AACAAACAAACAAACAAAAAAACAAAAAAAAAAAAAAACAAACAAACAAAAAAACAAACAAACAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAICAAACAAACAAAAAAICAAACAAACA + AACAAACAAACAAAAAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + AACAAAAAAACAAACAAACAAICAAACAAACAAACAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAACAAACAAACA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAACAAICAAICAAACA + AICAAACAAAAAAACAAAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAACAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAACAAACAAACAAICAAACAAACAAACAAACAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACA + AACAAACAAACAAACAAICAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAAAA + AACAAACAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAA + AACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAACAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE + AAAAAAAAAAAAAAABAAAAAQAAAAD/AAD/AAD/AAAAAP//AP//AAD/AP8AwMDAAP/48ADX6/oA1P9/AP8A + AADiK4oAKiqlAAAAAAAEBAQACAgIAAwMDAAREREAFhYWABwcHAAiIiIAKSkpADMzMwA5OTkAQkJCAE1N + TQBVVVUAYGBgAGZmZgBwcHAAgICAAIyMjACUlJQAmZmZAKSkpACsrKwAtra2AMDAwADMzMwA1NTUANra + 2gDg4OAA7OzsAPj4+AD7+/sA////ADMAAABmAAAAmQAAAMwAAAD/AAAAADMAADMzAABmMwAAmTMAAMwz + AAD/MwAAAGYAADNmAABmZgAAmWYAAMxmAAD/ZgAAAJkAADOZAABmmQAAmZkAAMyZAAD/mQAAAMwAADPM + AABmzAAAmcwAAMzMAAD/zAAAAP8AADP/AABm/wAAmf8AAMz/AAD//wAAAAAzADMAMwBmADMAmQAzAMwA + MwD/ADMAADMzAGYzMwCZMzMAzDMzAP8zMwAAZjMAM2YzAGZmMwCZZjMAzGYzAP9mMwAAmTMAM5kzAGaZ + MwCZmTMAzJkzAP+ZMwAAzDMAM8wzAGbMMwCZzDMAzMwzAP/MMwAA/zMAM/8zAGb/MwCZ/zMAzP8zAP// + MwAAAGYAMwBmAGYAZgCZAGYAzABmAP8AZgAAM2YAMzNmAGYzZgCZM2YAzDNmAP8zZgAAZmYAM2ZmAJlm + ZgDMZmYA/2ZmAACZZgAzmWYAZplmAJmZZgDMmWYA/5lmAADMZgAzzGYAZsxmAJnMZgDMzGYA/8xmAAD/ + ZgAz/2YAZv9mAJn/ZgDM/2YA//9mAAAAmQAzAJkAZgCZAJkAmQDMAJkA/wCZAAAzmQAzM5kAZjOZAJkz + mQDMM5kA/zOZAABmmQAzZpkAZmaZAJlmmQDMZpkA/2aZAACZmQAzmZkAZpmZAMyZmQD/mZkAAcyZADPM + mQBmzJkAmcyZAMzMmQD/zJkAAP+ZADP/mQBm/5kAmf+ZAMz/mQD//5kAAADMADMAzABmAMwAmQDMAMwA + zAD/AMwAADPMADMzzABmM8wAmTPMAMwzzAD/M8wAAGbMADNmzABmZswAmWbMAMxmzAD/ZswAAJnMADOZ + zABmmcwAmZnMAMyZzAD/mcwAAMzMADPMzABmzMwAmczMAP/MzAAA/8wAM//MAGb/zACZ/8wAzP/MAP// + zAAAAP8AMwD/AGYA/wCZAP8AzAD/AP8A/wAAM/8AMzP/AGYz/wCZM/8AzDP/AP8z/wAAZv8AM2b/AGZm + /wCZZv8AzGb/AP9m/wAAmf8AM5n/AGaZ/wCZmf8AzJn/AP+Z/wAAzP8AM8z/AGbM/wCZzP8AzMz/AP/M + /wAA//8AM///AGb//wCZ//8AzP//AJ+fn5+fn58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQn5+fn5+f + n58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBCfn5+fn5+fn58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEJ+f + n5+fn5+fn58QEBAQEBAQnxAQEBAQEBAQEBAQEBAQn5+fn58QEBAQnxAQEBAQEBCfEBAQEBAQEBAQEBAQ + EBCfn5+fn5+fnxAQEBAQEBAQEJ8QEBAQEBAQEBAQEBAQEJ+fn5+fn5+fn58QEBAQEBAQEJ8QEBAQEBAQ + EBAQEBAQn5+fn5+fn5+fnxAQEBAQEBAQnxAQEBAQnxAQEBAQEBCfn5+fn5+fn5+fEBAQEBAQEBAQEBAQ + EJ+fEBAQEBAQEBCfn5+fn5+fn58QEBAQEBAQEBAQrZ+fn58QEBAQEBAQnxCfn5+fn5+fn58QEBAQEBAQ + EJ+fnxAQEBAQEBAQEBAQEBAQn5+fn5+fnxAQEBAQEBAQnxAQn5+fn58Qn58QEBAQEBCfn5+fn5+fEBAQ + EBAQEBCfEJ+fEBCfn5+fn58QEBAQEBAQEBAQEBAQEBAQEBAQnxCfnxAQn5+tra2fn58QEBAQEBCfn5+f + EBAQEBAQEJ+fEJ8QEK2tra2tra2fnxAQEBAQEBCfnxAQEBAQEBAQEBCfEBAQEK2trZ+trZ+fEBAQEBAQ + EBAQEBAQEBAQEBCfnxCfnxAQra2trZ+fnxAQEBAQEJ8QEBCfEBAQEBCfn5+fEBAQEBCtEJ+tnxCfEBAQ + EBAQEBAQn58QEBAQEJ+fn5+fnxAQEK2fnxCfnxAQEBAQEBAQEJ+fEJ+fEJ+fn5+fnxAQn60Qn5+fn5+f + EBAQEBAQnxAQnxAQnxAQn5+fn58QnxAQEJ+fnxCfn58QEBAQEBAQEBAQEBCfEJ+fn62fnxCtn5+fn58Q + n5+fnxAQEBAQEBAQEBAQn58Qn5+frZ+fnxAQn5+fEBAQn5+fnxAQEBAQEBAQEBCfEJ+fn5+trZ+tnxCf + EJ8QEBAQEJ+fnxAQEJ8QEBAQEBAQnxCfn5+fn5+tn5+fnxAQEBAQEBCfEBAQEJ8QEBAQEJ8QEJ+fn5+f + rZ+fn58QEBAQEBAQEBAQEBAQEBAQEBAQEBCfn5+fn5+fn5+fEBAQEBAQEBAQEBAQEBAQEJ8QnxCfnxAQ + EBAQn5+fEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEJ8QEJ8QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBCfEBAQn58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEJ+fEJ8QEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAABAAAAAgAAAAAEAGAAAAAAAADAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAA + AAAAAIAAAIAAAAAAAAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAA + gIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAAIAA + AIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAgIAA + gIAAgIAAgIAAAIAAAIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAAAAAAAAAIAAAIAAgIAAgIAAAIAAAIAAAAAA + AAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAAAAAAAAAIAAAIAAgIAA + gIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAA + AIAAgIAAgIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAA + AAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAIAAAIAAgIAAgIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAgIAAgIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAgIAA + gIAAgIAAgIAAAIAAAIAAgIAAgIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAgIAAgIAAgIAAgIAAAIAAAIAAgIAAgIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAgIAA + gIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAAAA + AAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAABAAAAAgAAAAAEABAAAAAAAAAgAAAAA + AAAAAAAAEAAAABAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAwMDAAICAgAAAAP8AAP8AAAD/ + /wD/AAAA/wD/AP//AAD///8AEREREREREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARERERERERAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAABERERERERERAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAERERERER + EREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAREREREREREREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABER + EREREREREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEREREREREREREQAAAAAAAAARAAAAAAAAAAAAAAAA + AAARERERERERERERAAAAAAAAABEAAAAAAAAAAAAAAAAAABERERERAAAAABEAAAAAAAAAEQAAAAAAAAAA + AAAAAAAAEREREREAAAAAEQAAAAAAAAARAAAAAAAAAAAAAAAAAAAREREREREREQAAAAAAAAAAABEAAAAA + AAAAAAAAAAAAABERERERERERAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAEREREREREREREQAAAAAAAAAA + EQAAAAAAAAAAAAAAAAARERERERERERERAAAAAAAAAAARAAAAAAAAAAAAAAAAABEREREREREREREAAAAA + AAAAABEAAAAAABEAAAAAAAAAEREREREREREREQAAAAAAAAAAEQAAAAAAEQAAAAAAAAARERERERERERER + AAAAAAAAAAAAAAAAABERAAAAAAAAABEREREREREREREAAAAAAAAAAAAAAAAAEREAAAAAAAAAABERERER + EREREQAAAAAAAAAAAAAzEREREQAAAAAAAAAAERERERERERERAAAAAAAAAAAAADMRERERAAAAAAAAABEA + ERERERERERERAAAAAAAAAAAREREAAAAAAAAAAAAAEQAREREREREREREAAAAAAAAAABEREQAAAAAAAAAA + AAAAAAAAEREREREREQAAAAAAAAAAEQAAEREREREAEREAAAAAAAARERERERERAAAAAAAAAAARAAARERER + EQAREQAAAAAAABEREREREREAAAAAAAAAABEAEREAABEREREREQAAAAAAEREREREREQAAAAAAAAAAEQAR + EQAAERERERERAAAAAAAAAAAAAAAAAAAAAAAAABEAEREAABERMzMzERERAAAAAAAAAAAAAAAAAAAAAAAA + EQAREQAAEREzMzMREREAAAAAAAARERERAAAAAAAAABERABEAADMzMzMzMzMREQAAAAAAABEREREAAAAA + AAAAEREAEQAAMzMzMzMzMxERAAAAAAAAABERAAAAAAAAAAAAABEAAAAAMzMzETMzEREAAAAAAAAAEREA + AAAAAAAAAAAAEQAAAAAzMzMRMzMREQAAAAAAAAAAAAAAAAAAAAAAEREAEREAADMzMzMREREAAAAAAAAA + AAAAAAAAAAAAAAAREQAREQAAMzMzMxEREQAAAAAAABEAAAARAAAAAAARERERAAAAAAAzABEzEQARAAAA + AAAAEQAAABEAAAAAABEREREAAAAAADMAETMRABEAAAAAAAAAAAAREQAAAAAAERERERERAAAAMxERABER + AAAAAAAAAAAAABERAAAAAAAREREREREAAAAzEREAEREAAAAAAAAAAAAREQAREQAREREREREAABEzABER + EREREQAAAAAAAAAAABERABERABEREREREQAAETMAERERERERAAAAAAAAEQAAEQAAEQAAEREREREAEQAA + ABEREQAREREAAAAAAAARAAARAAARAAAREREREQARAAAAERERABEREQAAAAAAAAAAAAAAABEAERERMxER + ADMREREREQARERERAAAAAAAAAAAAAAAAEQAREREzEREAMxERERERABEREREAAAAAAAAAAAAAABERABER + ETMREREAABEREQAAABEREREAAAAAAAAAAAAAEREAERERMxEREQAAERERAAAAEREREQAAAAAAAAAAAAAR + ABEREREzMxEzEQARABEAAAAAABEREQAAAAAAAAAAABEAERERETMzETMRABEAEQAAAAAAERERAAAAEQAA + AAAAAAARABERERERETMRERERAAAAAAAAABEAAAARAAAAAAAAABEAERERERERMxEREREAAAAAAAAAEQAA + AAARAAAAAAARAAARERERETMRERERAAAAAAAAAAAAAAAAABEAAAAAABEAABERERERMxEREREAAAAAAAAA + AAAAAAAAAAAAAAAAAAARERERERERERERAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEREREREREREREAAAAA + AAAAAAAAAAAAAAAAEQARABERAAAAAAAREREAAAAAAAAAAAAAAAAAAAAAAAARABEAEREAAAAAABEREQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + EQAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAAAREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + EQAAABERAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAREQARAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAABERABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgA + AABAAAAAgAAAAAEACAAAAAAAABAAAAAAAAAAAAAAAAEAAAABAAAAAP8AAP8AAP8AAAAA//8A//8AAP8A + /wDAwMAA//jwANfr+gDU/38A/wAAAOIrigAqKqUAAAAAAAQEBAAICAgADAwMABEREQAWFhYAHBwcACIi + IgApKSkAMzMzADk5OQBCQkIATU1NAFVVVQBgYGAAZmZmAHBwcACAgIAAjIyMAJSUlACZmZkApKSkAKys + rAC2trYAwMDAAMzMzADU1NQA2traAODg4ADs7OwA+Pj4APv7+wD///8AMwAAAGYAAACZAAAAzAAAAP8A + AAAAMwAAMzMAAGYzAACZMwAAzDMAAP8zAAAAZgAAM2YAAGZmAACZZgAAzGYAAP9mAAAAmQAAM5kAAGaZ + AACZmQAAzJkAAP+ZAAAAzAAAM8wAAGbMAACZzAAAzMwAAP/MAAAA/wAAM/8AAGb/AACZ/wAAzP8AAP// + AAAAADMAMwAzAGYAMwCZADMAzAAzAP8AMwAAMzMAZjMzAJkzMwDMMzMA/zMzAABmMwAzZjMAZmYzAJlm + MwDMZjMA/2YzAACZMwAzmTMAZpkzAJmZMwDMmTMA/5kzAADMMwAzzDMAZswzAJnMMwDMzDMA/8wzAAD/ + MwAz/zMAZv8zAJn/MwDM/zMA//8zAAAAZgAzAGYAZgBmAJkAZgDMAGYA/wBmAAAzZgAzM2YAZjNmAJkz + ZgDMM2YA/zNmAABmZgAzZmYAmWZmAMxmZgD/ZmYAAJlmADOZZgBmmWYAmZlmAMyZZgD/mWYAAMxmADPM + ZgBmzGYAmcxmAMzMZgD/zGYAAP9mADP/ZgBm/2YAmf9mAMz/ZgD//2YAAACZADMAmQBmAJkAmQCZAMwA + mQD/AJkAADOZADMzmQBmM5kAmTOZAMwzmQD/M5kAAGaZADNmmQBmZpkAmWaZAMxmmQD/ZpkAAJmZADOZ + mQBmmZkAzJmZAP+ZmQABzJkAM8yZAGbMmQCZzJkAzMyZAP/MmQAA/5kAM/+ZAGb/mQCZ/5kAzP+ZAP// + mQAAAMwAMwDMAGYAzACZAMwAzADMAP8AzAAAM8wAMzPMAGYzzACZM8wAzDPMAP8zzAAAZswAM2bMAGZm + zACZZswAzGbMAP9mzAAAmcwAM5nMAGaZzACZmcwAzJnMAP+ZzAAAzMwAM8zMAGbMzACZzMwA/8zMAAD/ + zAAz/8wAZv/MAJn/zADM/8wA///MAAAA/wAzAP8AZgD/AJkA/wDMAP8A/wD/AAAz/wAzM/8AZjP/AJkz + /wDMM/8A/zP/AABm/wAzZv8AZmb/AJlm/wDMZv8A/2b/AACZ/wAzmf8AZpn/AJmZ/wDMmf8A/5n/AADM + /wAzzP8AZsz/AJnM/wDMzP8A/8z/AAD//wAz//8AZv//AJn//wDM//8An5+fn5+fn5+fn5+fn58dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+f + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+f + n5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+f + n5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+f + n5+fn5+fn5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fn5+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn5+fn5+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHZ+fHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fHR0dHR0dHR2fnx0dHR0dHR0dHR0dHR0dn58dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fnx0dHR0dHR0dn58dHR0dHR0dHR0dHR0dHZ+fHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR2fnx0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0d + n58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0d + HR0dHR0dn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0d + HR0dHR0dHR0dHZ+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fn5+fn5+fnx0d + HR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dHR2fnx0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn5+fn5+f + n58dHR0dHR0dHR0dHR0dHR0dn58dHR0dHR0dHR0dn58dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+f + n5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+f + n5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fnx0dHR0dHR0dHR0dHR0dHR2fn5+f + n5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHa2tn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0d + n5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR2trZ+fn5+fn5+fHR0dHR0dHR0dHR0d + HR2fnx0dn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHZ+fn5+fnx0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHZ+fn5+fn5+fn5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR2fn5+fn58dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dn58dHR0dn5+fn5+f + n5+fnx0dn5+fnx0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHZ+fHR0dHZ+f + n5+fn5+fn58dHZ+fn58dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR2fnx0d + n5+fnx0dHR2fn5+fn5+fn5+fn58dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0d + n58dHZ+fn58dHR0dn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fnx0dn5+fnx0dHR2fn5+fra2tra2tn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHZ+fn58dHR0dn5+fn62tra2trZ+fn5+fnx0dHR0dHR0dHR0dHZ+fn5+fn5+fHR0dHR0d + HR0dHR0dHR2fn5+fHR2fnx0dHR2tra2tra2tra2tra2trZ+fn58dHR0dHR0dHR0dHR2fn5+fn5+fnx0d + HR0dHR0dHR0dHR0dn5+fnx0dn58dHR0dra2tra2tra2tra2tra2fn5+fHR0dHR0dHR0dHR0dHR2fn5+f + HR0dHR0dHR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dra2tra2tn5+tra2tn5+fnx0dHR0dHR0dHR0dHR0d + n5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dn58dHR0dHR0dHa2tra2trZ+fra2trZ+fn58dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fnx0dn5+fnx0dHR2tra2tra2trZ+fn5+fnx0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn58dHZ+fn58dHR0dra2tra2tra2fn5+fn58dHR0d + HR0dHR0dHR2fnx0dHR0dHZ+fHR0dHR0dHR0dHZ+fn5+fn5+fHR0dHR0dHR0dHa2tHR2fn62tn58dHZ+f + HR0dHR0dHR0dHR0dn58dHR0dHR2fnx0dHR0dHR0dHR2fn5+fn5+fnx0dHR0dHR0dHR2trR0dn5+trZ+f + HR2fnx0dHR0dHR0dHR0dHR0dHR0dHZ+fn58dHR0dHR0dHR0dn5+fn5+fn5+fn5+fHR0dHR0dra2fn5+f + HR2fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR0dHR0dHR0dHZ+fn5+fn5+fn5+fnx0dHR0dHa2t + n5+fnx0dn5+fnx0dHR0dHR0dHR0dHR0dHR0dHZ+fn58dHZ+fn58dHZ+fn5+fn5+fn5+fnx0dHR2fn62t + HR2fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR2fn5+fHR2fn5+fn5+fn5+fn58dHR0d + n5+trR0dn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dn58dHR0dn58dHR0dn58dHR0dn5+fn5+fn5+fnx0d + n58dHR0dHR2fn5+fn58dHZ+fn5+fnx0dHR0dHR0dHR0dHZ+fHR0dHZ+fHR0dHZ+fHR0dHZ+fn5+fn5+f + n58dHZ+fHR0dHR0dn5+fn5+fHR2fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fnx0dn5+fn5+f + ra2fn5+fHR2trZ+fn5+fn5+fn58dHZ+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn58dHZ+f + n5+fn62tn5+fnx0dra2fn5+fn5+fn5+fHR2fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+f + HR2fn5+fn5+trZ+fn5+fnx0dHR2fn5+fn58dHR0dHR2fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0d + n5+fnx0dn5+fn5+fra2fn5+fn58dHR0dn5+fn5+fHR0dHR0dn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0d + HR0dHZ+fHR2fn5+fn5+fn62tra2fn62tn58dHZ+fHR2fnx0dHR0dHR0dHR2fn5+fn58dHR0dHR0dHR0d + HR0dHR0dHR2fnx0dn5+fn5+fn5+tra2tn5+trZ+fHR2fnx0dn58dHR0dHR0dHR0dn5+fn5+fHR0dHR0d + n58dHR0dHR0dHR0dHR0dHZ+fHR2fn5+fn5+fn5+fn5+trZ+fn5+fn5+fHR0dHR0dHR0dHR0dHR2fnx0d + HR0dHZ+fHR0dHR0dHR0dHR0dHR2fnx0dn5+fn5+fn5+fn5+fra2fn5+fn5+fnx0dHR0dHR0dHR0dHR0d + n58dHR0dHR0dHZ+fHR0dHR0dHR0dHZ+fHR0dHZ+fn5+fn5+fn5+trZ+fn5+fn5+fHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dHR2fnx0dHR2fn5+fn5+fn5+fra2fn5+fn5+fnx0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fn5+fn5+fnx0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn58dHZ+fHR2fn5+fHR0dHR0dHR0dHZ+fn5+fnx0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fHR2fnx0dn5+fnx0dHR0dHR0dHR2fn5+f + n58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fnx0dHR2fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHR0dn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fnx0dHR0dHZ+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHR0dHR2fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHZ+fn58dHZ+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR2fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAIAAAAAAAQAAAQAYAAAAAAAAwAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAIAAAAAAAQAAAQAIAAAAAAAAQAAAAAAAAAAA + AAAAAQAAAAEAAAAA/wAA/wAA/wAAAAD//wD//wAA/wD/AMDAwAD/+PAA1+v6ANT/fwD/AAAA4iuKACoq + pQAAAAAABAQEAAgICAAMDAwAERERABYWFgAcHBwAIiIiACkpKQAzMzMAOTk5AEJCQgBNTU0AVVVVAGBg + YABmZmYAcHBwAICAgACMjIwAlJSUAJmZmQCkpKQArKysALa2tgDAwMAAzMzMANTU1ADa2toA4ODgAOzs + 7AD4+PgA+/v7AP///wAzAAAAZgAAAJkAAADMAAAA/wAAAAAzAAAzMwAAZjMAAJkzAADMMwAA/zMAAABm + AAAzZgAAZmYAAJlmAADMZgAA/2YAAACZAAAzmQAAZpkAAJmZAADMmQAA/5kAAADMAAAzzAAAZswAAJnM + AADMzAAA/8wAAAD/AAAz/wAAZv8AAJn/AADM/wAA//8AAAAAMwAzADMAZgAzAJkAMwDMADMA/wAzAAAz + MwBmMzMAmTMzAMwzMwD/MzMAAGYzADNmMwBmZjMAmWYzAMxmMwD/ZjMAAJkzADOZMwBmmTMAmZkzAMyZ + MwD/mTMAAMwzADPMMwBmzDMAmcwzAMzMMwD/zDMAAP8zADP/MwBm/zMAmf8zAMz/MwD//zMAAABmADMA + ZgBmAGYAmQBmAMwAZgD/AGYAADNmADMzZgBmM2YAmTNmAMwzZgD/M2YAAGZmADNmZgCZZmYAzGZmAP9m + ZgAAmWYAM5lmAGaZZgCZmWYAzJlmAP+ZZgAAzGYAM8xmAGbMZgCZzGYAzMxmAP/MZgAA/2YAM/9mAGb/ + ZgCZ/2YAzP9mAP//ZgAAAJkAMwCZAGYAmQCZAJkAzACZAP8AmQAAM5kAMzOZAGYzmQCZM5kAzDOZAP8z + mQAAZpkAM2aZAGZmmQCZZpkAzGaZAP9mmQAAmZkAM5mZAGaZmQDMmZkA/5mZAAHMmQAzzJkAZsyZAJnM + mQDMzJkA/8yZAAD/mQAz/5kAZv+ZAJn/mQDM/5kA//+ZAAAAzAAzAMwAZgDMAJkAzADMAMwA/wDMAAAz + zAAzM8wAZjPMAJkzzADMM8wA/zPMAABmzAAzZswAZmbMAJlmzADMZswA/2bMAACZzAAzmcwAZpnMAJmZ + zADMmcwA/5nMAADMzAAzzMwAZszMAJnMzAD/zMwAAP/MADP/zABm/8wAmf/MAMz/zAD//8wAAAD/ADMA + /wBmAP8AmQD/AMwA/wD/AP8AADP/ADMz/wBmM/8AmTP/AMwz/wD/M/8AAGb/ADNm/wBmZv8AmWb/AMxm + /wD/Zv8AAJn/ADOZ/wBmmf8AmZn/AMyZ/wD/mf8AAMz/ADPM/wBmzP8Amcz/AMzM/wD/zP8AAP//ADP/ + /wBm//8Amf//AMz//wCfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pra2trZ+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+tra2tn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD62tra2fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+f + n5+tra2tra2tra2tra2fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8P + Dw+fn5+fn5+fn62tra2tra2tra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+f + n58PDw8PDw8PD5+fn5+fn5+fra2tra2tra2tra2tn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8P + Dw+fn5+fDw8PDw8PDw+tra2tra2tra2tra2tra2tra2tra2tra2tra2tn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PD5+fn58PDw8PDw8PD62tra2tra2tra2tra2tra2tra2tra2tra2tra2fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8Pn5+fnw8PDw8PDw8Pra2tra2tra2tra2tra2tra2tra2tra2tra2trZ+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw+fn5+fDw8PDw8PDw+tra2tra2tra2tra2tra2tra2tra2t + ra2tra2tn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+fn58PDw8PDw8PD62tra2tra2tra2tra2t + ra2tra2tra2tra2tra2fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PD62t + ra2tra2tra2trZ+fn5+tra2tra2trZ+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8Pra2tra2tra2tra2tn5+fn62tra2tra2tn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PDw8PDw+tra2tra2tra2tra2fn5+fra2tra2tra2fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n58PDw8Pn5+fn5+fn58PDw8PDw8PD62tra2tra2tra2tra2tra2fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pra2tra2tra2tra2tra2trZ+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw+tra2tra2tra2tra2tra2tn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PD62tra2tra2tra2tra2t + ra2fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pra2tra2t + ra2tra2tra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw+tra2tDw8PD5+fn5+tra2tn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PD62tra0PDw8Pn5+fn62tra2fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pra2trQ8PDw+fn5+fra2trZ+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw+tra2tn5+fn5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PD62tra2fn5+fn5+fnw8PDw+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8Pra2trZ+fn5+fn5+fDw8PD5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw+tra2tn5+fn5+f + n58PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PD62t + ra2fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PD5+fn5+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8Pn5+fn62t + ra0PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw+fn5+fra2trQ8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PD5+fn5+tra2tDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PD5+fn58PDw8PDw8PD5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fDw8PD5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+fn58PDw8PDw8PD5+f + n58PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n58PDw8Pn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fnw8P + Dw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fnw8PDw+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fn5+fn62tra2fn5+fn5+fnw8PDw+tra2tn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fDw8PD62t + ra2fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+tra2tn5+fn5+f + n58PDw8Pra2trZ+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+fn5+fn5+fn5+fn62t + ra2fn5+fn5+fn5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+f + n5+fn5+fra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8P + Dw+fn5+fn5+fn5+fn5+tra2tn5+fn5+fn5+fn5+fDw8PDw8PDw+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PD5+fn5+fn5+fn5+fn62tra2fn5+fn5+fn5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn5+tra2tra2trZ+fn5+tra2tn5+fnw8P + Dw+fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn62tra2tra2tn5+fn62t + ra2fn5+fDw8PD5+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fra2tra2t + ra2fn5+fra2trZ+fn58PDw8Pn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+tra2tn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn62tra2fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+tra2tn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fra2trZ+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+tra2tn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn62tra2fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8Pn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n58PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + + + \ No newline at end of file diff --git a/Server.MirForms/DropBuilder/DropBuilderForm.cs b/Server.MirForms/DropBuilder/DropBuilderForm.cs new file mode 100644 index 0000000..79814a5 --- /dev/null +++ b/Server.MirForms/DropBuilder/DropBuilderForm.cs @@ -0,0 +1,664 @@ +using Server.MirEnvir; + +namespace Server.MirForms.DropBuilder +{ + public class MonsterDropInfo + { + public string Name { get; set; } + public string Path { get; set; } + + public override string ToString() + { + return Name; + } + } + + public partial class DropGenForm : Form + { + string Gold = "0", GoldOdds; + + List + Weapon = new List(), + Armour = new List(), + Helmet = new List(), + Necklace = new List(), + Bracelet = new List(), + Ring = new List(), + Potion = new List(), + Ore = new List(), + Meat = new List(), + CraftingMaterial = new List(), + Scrolls = new List(), + Gem = new List(), + Book = new List(), + Nothing = new List(), + Script = new List(), + Quest = new List(); + + List[] ItemLists; + ListBox[] ItemListBoxes; + + public DropGenForm() + { + InitializeComponent(); + + // Array of items + ItemLists = new List[16] + { + Weapon, + Armour, + Helmet, + Necklace, + Bracelet, + Ring, + Potion, + Ore, + Meat, + CraftingMaterial, + Scrolls, + Gem, + Book, + Nothing, + Script, + Quest + }; + + // Array of item list boxes + ItemListBoxes = new ListBox[37] + { + listBoxWeapon, + listBoxArmour, + listBoxHelmet, + listBoxNecklace, + listBoxBracelet, + listBoxRing, + listBoxAmulet, + listBoxBelt, + listBoxBoot, + listBoxStone, + listBoxTorch, + listBoxPotion, + listBoxOre, + listBoxMeat, + listBoxCraftingMaterial, + listBoxScroll, + listBoxGem, + listBoxMount, + listBoxBook, + listBoxNothing, + listBoxScript, + listBoxReins, + listBoxBells, + listBoxSaddle, + listBoxRibbon, + listBoxMask, + listBoxFood, + listBoxHook, + listBoxFloat, + listBoxBait, + listBoxFinder, + listBoxReel, + listBoxFish, + listBoxQuest, + listBoxAwakening, + listBoxPets, + listBoxTransform + }; + + // Add monsters to list + for (int i = 0; i < Envir.MonsterInfoList.Count; i++) + { + listBoxMonsters.Items.Add(new MonsterDropInfo { Name = Envir.MonsterInfoList[i].Name, Path = Envir.MonsterInfoList[i].DropPath }); + } + + tabControlSeperateItems_SelectedIndexChanged(tabControlSeperateItems, null); + listBoxMonsters.SelectedIndex = 0; + labelMonsterList.Text = $"Monster Count: {Envir.MonsterInfoList.Count}"; + } + + // Gets server data + public Envir Envir => SMain.EditEnvir; + + // Updates the drop file text + private void UpdateDropFile() + { + textBoxDropList.Clear(); + + textBoxDropList.Text += $";Gold{Environment.NewLine}"; + if (Gold != "0") + { + textBoxDropList.Text += $"1/{GoldOdds} Gold {Gold}{Environment.NewLine}"; + textBoxGoldAmount.Text = Gold; + textBoxGoldOdds.Text = GoldOdds; + } + else + { + textBoxGoldAmount.Text = "0"; + textBoxGoldOdds.Text = string.Empty; + } + + textBoxDropList.Text += string.Format("{0};Weapons{0}", Environment.NewLine); + for (int i = 0; i < Weapon.Count; i++) + textBoxDropList.Text += $"{Weapon[i].Odds} {Weapon[i].Name} {Weapon[i].Quest}{Environment.NewLine}"; + + textBoxDropList.Text += string.Format("{0};Armours{0}", Environment.NewLine); + for (int i = 0; i < Armour.Count; i++) + textBoxDropList.Text += $"{Armour[i].Odds} {Armour[i].Name} {Armour[i].Quest}{Environment.NewLine}"; + + textBoxDropList.Text += string.Format("{0};Helmets{0}", Environment.NewLine); + for (int i = 0; i < Helmet.Count; i++) + textBoxDropList.Text += $"{Helmet[i].Odds} {Helmet[i].Name} {Helmet[i].Quest}{Environment.NewLine}"; + + textBoxDropList.Text += string.Format("{0};Necklaces{0}", Environment.NewLine); + for (int i = 0; i < Necklace.Count; i++) + textBoxDropList.Text += + $"{Necklace[i].Odds} {Necklace[i].Name} {Necklace[i].Quest}{Environment.NewLine}"; + + textBoxDropList.Text += string.Format("{0};Bracelets{0}", Environment.NewLine); + for (int i = 0; i < Bracelet.Count; i++) + textBoxDropList.Text += + $"{Bracelet[i].Odds} {Bracelet[i].Name} {Bracelet[i].Quest}{Environment.NewLine}"; + + textBoxDropList.Text += string.Format("{0};Rings{0}", Environment.NewLine); + for (int i = 0; i < Ring.Count; i++) + textBoxDropList.Text += $"{Ring[i].Odds} {Ring[i].Name} {Ring[i].Quest}{Environment.NewLine}"; + + textBoxDropList.Text += string.Format("{0};Potions{0}", Environment.NewLine); + for (int i = 0; i < Potion.Count; i++) + textBoxDropList.Text += $"{Potion[i].Odds} {Potion[i].Name} {Potion[i].Quest}{Environment.NewLine}"; + + textBoxDropList.Text += string.Format("{0};Ores{0}", Environment.NewLine); + for (int i = 0; i < Ore.Count; i++) + textBoxDropList.Text += $"{Ore[i].Odds} {Ore[i].Name} {Ore[i].Quest}{Environment.NewLine}"; + + textBoxDropList.Text += string.Format("{0};Meat{0}", Environment.NewLine); + for (int i = 0; i < Meat.Count; i++) + textBoxDropList.Text += $"{Meat[i].Odds} {Meat[i].Name} {Meat[i].Quest}{Environment.NewLine}"; + + textBoxDropList.Text += string.Format("{0};Crafting Materials{0}", Environment.NewLine); + for (int i = 0; i < CraftingMaterial.Count; i++) + textBoxDropList.Text += + $"{CraftingMaterial[i].Odds} {CraftingMaterial[i].Name} {CraftingMaterial[i].Quest}{Environment.NewLine}"; + + textBoxDropList.Text += string.Format("{0};Scrolls{0}", Environment.NewLine); + for (int i = 0; i < Scrolls.Count; i++) + textBoxDropList.Text += $"{Scrolls[i].Odds} {Scrolls[i].Name} {Scrolls[i].Quest}{Environment.NewLine}"; + + textBoxDropList.Text += string.Format("{0};Gems{0}", Environment.NewLine); + for (int i = 0; i < Gem.Count; i++) + textBoxDropList.Text += $"{Gem[i].Odds} {Gem[i].Name} {Gem[i].Quest}{Environment.NewLine}"; + + textBoxDropList.Text += string.Format("{0};Books{0}", Environment.NewLine); + for (int i = 0; i < Book.Count; i++) + textBoxDropList.Text += $"{Book[i].Odds} {Book[i].Name} {Book[i].Quest}{Environment.NewLine}"; + + textBoxDropList.Text += string.Format("{0};Nothing{0}", Environment.NewLine); + for (int i = 0; i < Nothing.Count; i++) + textBoxDropList.Text += $"{Nothing[i].Odds} {Nothing[i].Name} {Nothing[i].Quest}{Environment.NewLine}"; + + textBoxDropList.Text += string.Format("{0};Script{0}", Environment.NewLine); + for (int i = 0; i < Script.Count; i++) + textBoxDropList.Text += $"{Script[i].Odds} {Script[i].Name} {Script[i].Quest}{Environment.NewLine}"; + + textBoxDropList.Text += string.Format("{0};Quest{0}", Environment.NewLine); + for (int i = 0; i < Quest.Count; i++) + textBoxDropList.Text += $"{Quest[i].Odds} {Quest[i].Name} {Quest[i].Quest}{Environment.NewLine}"; + + SaveDropFile(); + } + + // Item tab change, draw appropriate items + private void tabControlSeperateItems_SelectedIndexChanged(object sender, EventArgs e) + { + TabControl Tab = (TabControl)sender; + + foreach (var list in ItemListBoxes) + list.Items.Clear(); + + ListBox TempListBox = new ListBox(); + for (int i = 0; i < Envir.ItemInfoList.Count; i++) + { + if (Envir.ItemInfoList[i].Type.ToString() == Tab.SelectedTab.Tag.ToString()) + { + try + { + if (textBoxMinLevel.Text == string.Empty || textBoxMaxLevel.Text == string.Empty) + TempListBox.Items.Add(Envir.ItemInfoList[i].Name); + else if (Envir.ItemInfoList[i].RequiredAmount >= int.Parse(textBoxMinLevel.Text) & + Envir.ItemInfoList[i].RequiredAmount <= int.Parse(textBoxMaxLevel.Text)) + TempListBox.Items.Add(Envir.ItemInfoList[i].Name); + } + catch (Exception) + { + MessageBox.Show("Unreadable level filters."); + break; + } + } + } + + switch (Tab.SelectedTab.Tag.ToString()) + { + case "Weapon": + listBoxWeapon.Items.AddRange(TempListBox.Items); + break; + case "Armour": + listBoxArmour.Items.AddRange(TempListBox.Items); + break; + case "Helmet": + listBoxHelmet.Items.AddRange(TempListBox.Items); + break; + case "Necklace": + listBoxNecklace.Items.AddRange(TempListBox.Items); + break; + case "Bracelet": + listBoxBracelet.Items.AddRange(TempListBox.Items); + break; + case "Ring": + listBoxRing.Items.AddRange(TempListBox.Items); + break; + case "Potion": + listBoxPotion.Items.AddRange(TempListBox.Items); + break; + case "Ore": + listBoxOre.Items.AddRange(TempListBox.Items); + break; + case "Meat": + listBoxMeat.Items.AddRange(TempListBox.Items); + break; + case "CraftingMaterial": + listBoxCraftingMaterial.Items.AddRange(TempListBox.Items); + break; + case "Scroll": + listBoxScroll.Items.AddRange(TempListBox.Items); + break; + case "Gem": + listBoxGem.Items.AddRange(TempListBox.Items); + break; + case "Book": + listBoxBook.Items.AddRange(TempListBox.Items); + break; + case "Nothing": + listBoxNothing.Items.AddRange(TempListBox.Items); + break; + case "Script": + listBoxScript.Items.AddRange(TempListBox.Items); + break; + case "Quest": + listBoxQuest.Items.AddRange(TempListBox.Items); + break; + } + } + + // Update the results to show them filtered + private void FilterValueChange(object sender, EventArgs e) + { + tabControlSeperateItems_SelectedIndexChanged(tabControlSeperateItems, null); + } + + // Add the item to the drop list + private void buttonAdd_Click(object sender, EventArgs e) + { + int dropChance; + + int.TryParse(textBoxItemOdds.Text, out dropChance); + + if (dropChance < 1) dropChance = 1; + + string quest = QuestOnlyCheckBox.Checked ? "Q" : ""; + + try + { + switch (tabControlSeperateItems.SelectedTab.Tag.ToString()) + { + case "Weapon": + Weapon.Add(new DropItem { Name = listBoxWeapon.SelectedItem.ToString().Replace(" ", string.Empty), Odds = + $"1/{dropChance}", Quest = quest }); + break; + case "Armour": + Armour.Add(new DropItem { Name = listBoxArmour.SelectedItem.ToString().Replace(" ", string.Empty), Odds = + $"1/{dropChance}", Quest = quest }); + break; + case "Helmet": + Helmet.Add(new DropItem { Name = listBoxHelmet.SelectedItem.ToString().Replace(" ", string.Empty), Odds = + $"1/{dropChance}", Quest = quest }); + break; + case "Necklace": + Necklace.Add(new DropItem { Name = listBoxNecklace.SelectedItem.ToString().Replace(" ", string.Empty), Odds = + $"1/{dropChance}", Quest = quest }); + break; + case "Bracelet": + Bracelet.Add(new DropItem { Name = listBoxBracelet.SelectedItem.ToString().Replace(" ", string.Empty), Odds = + $"1/{dropChance}", Quest = quest }); + break; + case "Ring": + Ring.Add(new DropItem { Name = listBoxRing.SelectedItem.ToString().Replace(" ", string.Empty), Odds = + $"1/{dropChance}", Quest = quest }); + break; + case "Potion": + Potion.Add(new DropItem { Name = listBoxPotion.SelectedItem.ToString().Replace(" ", string.Empty), Odds = + $"1/{dropChance}", Quest = quest }); + break; + case "Ore": + Ore.Add(new DropItem { Name = listBoxOre.SelectedItem.ToString().Replace(" ", string.Empty), Odds = + $"1/{dropChance}", Quest = quest }); + break; + case "Meat": + Meat.Add(new DropItem { Name = listBoxMeat.SelectedItem.ToString().Replace(" ", string.Empty), Odds = + $"1/{dropChance}", Quest = quest }); + break; + case "CraftingMaterial": + CraftingMaterial.Add(new DropItem { Name = listBoxCraftingMaterial.SelectedItem.ToString().Replace(" ", string.Empty), Odds = + $"1/{dropChance}" + }); + break; + case "Scroll": + Scrolls.Add(new DropItem { Name = listBoxScroll.SelectedItem.ToString().Replace(" ", string.Empty), Odds = + $"1/{dropChance}", Quest = quest }); + break; + case "Gem": + Gem.Add(new DropItem { Name = listBoxGem.SelectedItem.ToString().Replace(" ", string.Empty), Odds = + $"1/{dropChance}", Quest = quest }); + break; + case "Book": + Book.Add(new DropItem { Name = listBoxBook.SelectedItem.ToString().Replace(" ", string.Empty), Odds = + $"1/{dropChance}", Quest = quest }); + break; + case "Nothing": + Nothing.Add(new DropItem { Name = listBoxNothing.SelectedItem.ToString().Replace(" ", string.Empty), Odds = + $"1/{dropChance}", Quest = quest }); + break; + case "Script": + Script.Add(new DropItem { Name = listBoxScript.SelectedItem.ToString().Replace(" ", string.Empty), Odds = + $"1/{dropChance}", Quest = quest }); + break; + case "Quest": + Quest.Add(new DropItem { Name = listBoxQuest.SelectedItem.ToString().Replace(" ", string.Empty), Odds = + $"1/{dropChance}", Quest = quest }); + break; + } + + UpdateDropFile(); + } + catch + { + //No item selected when trying to add an item to the drop + } + } + + // Choose another monster. + private void listBoxMonsters_SelectedItemChanged(object sender, EventArgs e) + { + // Empty List's + foreach (var item in ItemLists) + item.Clear(); + + LoadDropFile(false); + UpdateDropFile(); + + textBoxMinLevel.Text = string.Empty; + textBoxMaxLevel.Text = string.Empty; + checkBoxCap.Checked = false; + + labelMobLevel.Text = + $"Currently Editing: {((MonsterDropInfo)listBoxMonsters.SelectedItem).Name} - Level: {Envir.MonsterInfoList[listBoxMonsters.SelectedIndices[0]].Level}"; + } + + public string GetPathOfSelectedItem() + { + var selectedItem = (MonsterDropInfo)listBoxMonsters.SelectedItem; + + if (selectedItem == null) return null; + + var path = ""; + + if (string.IsNullOrEmpty(selectedItem.Path)) + { + path = Path.Combine(Settings.DropPath, $"{selectedItem.Name}.txt"); + } + else + { + path = Path.Combine(Settings.DropPath, selectedItem.Path + ".txt"); + } + + return path; + + } + + // Load the monster.txt drop file. + private void LoadDropFile(bool edit) + { + var lines = (edit == false) ? File.ReadAllLines(GetPathOfSelectedItem()) : textBoxDropList.Lines; + + for (int i = 0; i < lines.Length; i++) + { + if (lines[i].StartsWith(";Gold")) + { + if (lines[i + 1].StartsWith("1/")) + { + var workingLine = lines[i + 1].Split(' '); + GoldOdds = workingLine[0].Remove(0,2); + Gold = workingLine[2]; + break; + } + else + { + GoldOdds = "0"; + Gold = "0"; + } + } + } + + string[] Headers = new string[16] + { + ";Weapons", + ";Armours", + ";Helmets", + ";Necklaces", + ";Bracelets", + ";Rings", + ";Potions", + ";Ores", + ";Meat", + ";Crafting Materials", + ";Scrolls", + ";Gems", + ";Books", + ";Nothing", + ";Script", + ";Quest" + }; + + for (int i = 0; i < Headers.Length; i++) + { + for (int j = 0; j < lines.Length; j++) + { + if (lines[j].StartsWith(Headers[i])) + { + for (int k = j + 1; k < lines.Length; k++) + { + if (lines[k].StartsWith(";")) break; + + var workingLine = lines[k].Split(' '); + if (workingLine.Length < 2) continue; + + var quest = ""; + + if(workingLine.Length > 2 && workingLine[2] == "Q") + { + quest = workingLine[2]; + } + + DropItem newDropItem = new DropItem { Odds = workingLine[0], Name = workingLine[1], Quest = quest }; + switch (i) + { + case 0: + Weapon.Add(newDropItem); + break; + case 1: + Armour.Add(newDropItem); + break; + case 2: + Helmet.Add(newDropItem); + break; + case 3: + Necklace.Add(newDropItem); + break; + case 4: + Bracelet.Add(newDropItem); + break; + case 5: + Ring.Add(newDropItem); + break; + case 6: + Potion.Add(newDropItem); + break; + case 7: + Ore.Add(newDropItem); + break; + case 8: + Meat.Add(newDropItem); + break; + case 9: + CraftingMaterial.Add(newDropItem); + break; + case 10: + Scrolls.Add(newDropItem); + break; + case 11: + Gem.Add(newDropItem); + break; + case 12: + Book.Add(newDropItem); + break; + case 13: + Nothing.Add(newDropItem); + break; + case 14: + Script.Add(newDropItem); + break; + case 15: + Quest.Add(newDropItem); + break; + default: + break; + } + } + } + } + } + } + + // Save the monster.txt drop file + private void SaveDropFile() + { + var dropFile = GetPathOfSelectedItem(); + + if (dropFile == null) return; + + using (FileStream fs = new FileStream(dropFile, FileMode.Create)) + { + using (StreamWriter sw = new StreamWriter(fs)) + { + foreach (string line in textBoxDropList.Lines) + sw.Write(line + sw.NewLine); + } + } + } + + //Edit gold amount/odds + private void GoldDropChange(object sender, EventArgs e) + { + if (textBoxGoldOdds.Text != GoldOdds || textBoxGoldAmount.Text != Gold) + buttonUpdateGold.Enabled = true; + else + buttonUpdateGold.Enabled = false; + } + + //Switch to Edit mode + private void buttonEdit_Click(object sender, EventArgs e) + { + if (buttonEdit.Text == "Accept") + { + textBoxDropList.ReadOnly = true; + textBoxDropList.BackColor = System.Drawing.Color.Cornsilk; + buttonEdit.Text = "Edit Drop File"; + //buttonEdit.Image = Properties.Resources.edit; + + // Empty List's + foreach (var item in ItemLists) + item.Clear(); + + LoadDropFile(true); + UpdateDropFile(); + + buttonAdd.Enabled = true; + listBoxMonsters.Enabled = true; + tabControlSeperateItems.Enabled = true; + groupBoxGold.Enabled = true; + groupBoxItem.Enabled = true; + } + else + { + textBoxDropList.ReadOnly = false; + textBoxDropList.BackColor = System.Drawing.Color.Honeydew; + buttonEdit.Text = "Accept"; + //buttonEdit.Image = Properties.Resources.accept; + + buttonAdd.Enabled = false; + listBoxMonsters.Enabled = false; + tabControlSeperateItems.Enabled = false; + groupBoxGold.Enabled = false; + groupBoxItem.Enabled = false; + } + } + + //Cap item range to monsters level + private void checkBoxCap_CheckedChanged(object sender, EventArgs e) + { + if (checkBoxCap.Checked == true) + { + textBoxMinLevel.Text = "0"; + textBoxMaxLevel.Text = Envir.MonsterInfoList[listBoxMonsters.SelectedIndices[0]].Level.ToString(); + tabControlSeperateItems_SelectedIndexChanged(tabControlSeperateItems, null); + } + else + { + textBoxMinLevel.Text = string.Empty; + textBoxMaxLevel.Text = string.Empty; + tabControlSeperateItems_SelectedIndexChanged(tabControlSeperateItems, null); + } + } + + private void buttonUpdateGold_Click(object sender, EventArgs e) + { + Gold = textBoxGoldAmount.Text; + GoldOdds = textBoxGoldOdds.Text; + + UpdateDropFile(); + + buttonUpdateGold.Enabled = false; + tabControlSeperateItems.Focus(); + } + + private void textBoxSearch_TextChanged(object sender, EventArgs e) + { + int index = listBoxMonsters.FindString(textBoxSearch.Text, -1); + + if (index != -1) + { + textBoxSearch.BackColor = System.Drawing.SystemColors.Info; + listBoxMonsters.SetSelected(index, true); + } + else + { + textBoxSearch.BackColor = System.Drawing.Color.FromArgb(0xCC, 0x33, 0x33); + } + } + } + + // Item setup + public class DropItem + { + public string Name, Odds, Quest; + } +} diff --git a/Server.MirForms/DropBuilder/DropBuilderForm.designer.cs b/Server.MirForms/DropBuilder/DropBuilderForm.designer.cs new file mode 100644 index 0000000..e68624e --- /dev/null +++ b/Server.MirForms/DropBuilder/DropBuilderForm.designer.cs @@ -0,0 +1,1534 @@ +namespace Server.MirForms.DropBuilder +{ + partial class DropGenForm + { + /// + /// 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.listBoxMonsters = new System.Windows.Forms.ListBox(); + this.textBoxDropList = new System.Windows.Forms.TextBox(); + this.listBoxWeapon = new System.Windows.Forms.ListBox(); + this.tabControlSeperateItems = new System.Windows.Forms.TabControl(); + this.tabPageAmulet = new System.Windows.Forms.TabPage(); + this.listBoxAmulet = new System.Windows.Forms.ListBox(); + this.tabPageArmour = new System.Windows.Forms.TabPage(); + this.listBoxArmour = new System.Windows.Forms.ListBox(); + this.tabPageBait = new System.Windows.Forms.TabPage(); + this.listBoxBait = new System.Windows.Forms.ListBox(); + this.tabPageBells = new System.Windows.Forms.TabPage(); + this.listBoxBells = new System.Windows.Forms.ListBox(); + this.tabPageBelt = new System.Windows.Forms.TabPage(); + this.listBoxBelt = new System.Windows.Forms.ListBox(); + this.tabPageBook = new System.Windows.Forms.TabPage(); + this.listBoxBook = new System.Windows.Forms.ListBox(); + this.tabPageBoot = new System.Windows.Forms.TabPage(); + this.listBoxBoot = new System.Windows.Forms.ListBox(); + this.tabPageBracelet = new System.Windows.Forms.TabPage(); + this.listBoxBracelet = new System.Windows.Forms.ListBox(); + this.tabPageCraftingMaterial = new System.Windows.Forms.TabPage(); + this.listBoxCraftingMaterial = new System.Windows.Forms.ListBox(); + this.tabPageFinder = new System.Windows.Forms.TabPage(); + this.listBoxFinder = new System.Windows.Forms.ListBox(); + this.tabPageFish = new System.Windows.Forms.TabPage(); + this.listBoxFish = new System.Windows.Forms.ListBox(); + this.tabPageFloat = new System.Windows.Forms.TabPage(); + this.listBoxFloat = new System.Windows.Forms.ListBox(); + this.tabPageFood = new System.Windows.Forms.TabPage(); + this.listBoxFood = new System.Windows.Forms.ListBox(); + this.tabPageGem = new System.Windows.Forms.TabPage(); + this.listBoxGem = new System.Windows.Forms.ListBox(); + this.tabPageHelmet = new System.Windows.Forms.TabPage(); + this.listBoxHelmet = new System.Windows.Forms.ListBox(); + this.tabPageHook = new System.Windows.Forms.TabPage(); + this.listBoxHook = new System.Windows.Forms.ListBox(); + this.tabPageMask = new System.Windows.Forms.TabPage(); + this.listBoxMask = new System.Windows.Forms.ListBox(); + this.tabPageMeat = new System.Windows.Forms.TabPage(); + this.listBoxMeat = new System.Windows.Forms.ListBox(); + this.tabPageMount = new System.Windows.Forms.TabPage(); + this.listBoxMount = new System.Windows.Forms.ListBox(); + this.tabPageNecklace = new System.Windows.Forms.TabPage(); + this.listBoxNecklace = new System.Windows.Forms.ListBox(); + this.tabPageNothing = new System.Windows.Forms.TabPage(); + this.listBoxNothing = new System.Windows.Forms.ListBox(); + this.tabPageOre = new System.Windows.Forms.TabPage(); + this.listBoxOre = new System.Windows.Forms.ListBox(); + this.tabPagePotion = new System.Windows.Forms.TabPage(); + this.listBoxPotion = new System.Windows.Forms.ListBox(); + this.tabPageQuest = new System.Windows.Forms.TabPage(); + this.listBoxQuest = new System.Windows.Forms.ListBox(); + this.tabPageReel = new System.Windows.Forms.TabPage(); + this.listBoxReel = new System.Windows.Forms.ListBox(); + this.tabPageReins = new System.Windows.Forms.TabPage(); + this.listBoxReins = new System.Windows.Forms.ListBox(); + this.tabPageRibbon = new System.Windows.Forms.TabPage(); + this.listBoxRibbon = new System.Windows.Forms.ListBox(); + this.tabPageRing = new System.Windows.Forms.TabPage(); + this.listBoxRing = new System.Windows.Forms.ListBox(); + this.tabPageSaddle = new System.Windows.Forms.TabPage(); + this.listBoxSaddle = new System.Windows.Forms.ListBox(); + this.tabPageScript = new System.Windows.Forms.TabPage(); + this.listBoxScript = new System.Windows.Forms.ListBox(); + this.tabPageScroll = new System.Windows.Forms.TabPage(); + this.listBoxScroll = new System.Windows.Forms.ListBox(); + this.tabPageStone = new System.Windows.Forms.TabPage(); + this.listBoxStone = new System.Windows.Forms.ListBox(); + this.tabPageTorch = new System.Windows.Forms.TabPage(); + this.listBoxTorch = new System.Windows.Forms.ListBox(); + this.tabPageWeapon = new System.Windows.Forms.TabPage(); + this.tabPageAwakening = new System.Windows.Forms.TabPage(); + this.listBoxAwakening = new System.Windows.Forms.ListBox(); + this.tabPagePets = new System.Windows.Forms.TabPage(); + this.listBoxPets = new System.Windows.Forms.ListBox(); + this.tabPageTransform = new System.Windows.Forms.TabPage(); + this.listBoxTransform = new System.Windows.Forms.ListBox(); + this.labelItemOdds = new System.Windows.Forms.Label(); + this.textBoxMinLevel = new System.Windows.Forms.TextBox(); + this.textBoxMaxLevel = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.textBoxItemOdds = new System.Windows.Forms.TextBox(); + this.labelRange = new System.Windows.Forms.Label(); + this.labelGold = new System.Windows.Forms.Label(); + this.textBoxGoldOdds = new System.Windows.Forms.TextBox(); + this.labelGoldOdds = new System.Windows.Forms.Label(); + this.groupBoxGold = new System.Windows.Forms.GroupBox(); + this.buttonUpdateGold = new System.Windows.Forms.Button(); + this.textBoxGoldAmount = new System.Windows.Forms.TextBox(); + this.groupBoxItem = new System.Windows.Forms.GroupBox(); + this.QuestOnlyCheckBox = new System.Windows.Forms.CheckBox(); + this.checkBoxCap = new System.Windows.Forms.CheckBox(); + this.buttonEdit = new System.Windows.Forms.Button(); + this.buttonAdd = new System.Windows.Forms.Button(); + this.labelMobLevel = new System.Windows.Forms.Label(); + this.labelMonsterList = new System.Windows.Forms.Label(); + this.textBoxSearch = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.tabControlSeperateItems.SuspendLayout(); + this.tabPageAmulet.SuspendLayout(); + this.tabPageArmour.SuspendLayout(); + this.tabPageBait.SuspendLayout(); + this.tabPageBells.SuspendLayout(); + this.tabPageBelt.SuspendLayout(); + this.tabPageBook.SuspendLayout(); + this.tabPageBoot.SuspendLayout(); + this.tabPageBracelet.SuspendLayout(); + this.tabPageCraftingMaterial.SuspendLayout(); + this.tabPageFinder.SuspendLayout(); + this.tabPageFish.SuspendLayout(); + this.tabPageFloat.SuspendLayout(); + this.tabPageFood.SuspendLayout(); + this.tabPageGem.SuspendLayout(); + this.tabPageHelmet.SuspendLayout(); + this.tabPageHook.SuspendLayout(); + this.tabPageMask.SuspendLayout(); + this.tabPageMeat.SuspendLayout(); + this.tabPageMount.SuspendLayout(); + this.tabPageNecklace.SuspendLayout(); + this.tabPageNothing.SuspendLayout(); + this.tabPageOre.SuspendLayout(); + this.tabPagePotion.SuspendLayout(); + this.tabPageQuest.SuspendLayout(); + this.tabPageReel.SuspendLayout(); + this.tabPageReins.SuspendLayout(); + this.tabPageRibbon.SuspendLayout(); + this.tabPageRing.SuspendLayout(); + this.tabPageSaddle.SuspendLayout(); + this.tabPageScript.SuspendLayout(); + this.tabPageScroll.SuspendLayout(); + this.tabPageStone.SuspendLayout(); + this.tabPageTorch.SuspendLayout(); + this.tabPageWeapon.SuspendLayout(); + this.tabPageAwakening.SuspendLayout(); + this.tabPagePets.SuspendLayout(); + this.tabPageTransform.SuspendLayout(); + this.groupBoxGold.SuspendLayout(); + this.groupBoxItem.SuspendLayout(); + this.SuspendLayout(); + // + // listBoxMonsters + // + this.listBoxMonsters.BackColor = System.Drawing.Color.GhostWhite; + this.listBoxMonsters.Location = new System.Drawing.Point(12, 56); + this.listBoxMonsters.Name = "listBoxMonsters"; + this.listBoxMonsters.ScrollAlwaysVisible = true; + this.listBoxMonsters.Size = new System.Drawing.Size(180, 498); + this.listBoxMonsters.TabIndex = 0; + this.listBoxMonsters.SelectedIndexChanged += new System.EventHandler(this.listBoxMonsters_SelectedItemChanged); + // + // textBoxDropList + // + this.textBoxDropList.BackColor = System.Drawing.Color.Cornsilk; + this.textBoxDropList.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.textBoxDropList.Cursor = System.Windows.Forms.Cursors.IBeam; + this.textBoxDropList.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.textBoxDropList.Location = new System.Drawing.Point(680, 30); + this.textBoxDropList.MaxLength = 2147483647; + this.textBoxDropList.Multiline = true; + this.textBoxDropList.Name = "textBoxDropList"; + this.textBoxDropList.ReadOnly = true; + this.textBoxDropList.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.textBoxDropList.Size = new System.Drawing.Size(280, 524); + this.textBoxDropList.TabIndex = 1; + this.textBoxDropList.WordWrap = false; + // + // listBoxWeapon + // + this.listBoxWeapon.BackColor = System.Drawing.Color.GhostWhite; + this.listBoxWeapon.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.listBoxWeapon.Dock = System.Windows.Forms.DockStyle.Fill; + this.listBoxWeapon.FormattingEnabled = true; + this.listBoxWeapon.Location = new System.Drawing.Point(3, 3); + this.listBoxWeapon.Name = "listBoxWeapon"; + this.listBoxWeapon.Size = new System.Drawing.Size(462, 314); + this.listBoxWeapon.TabIndex = 2; + this.listBoxWeapon.Tag = "Weapon"; + // + // tabControlSeperateItems + // + this.tabControlSeperateItems.Controls.Add(this.tabPageAmulet); + this.tabControlSeperateItems.Controls.Add(this.tabPageArmour); + this.tabControlSeperateItems.Controls.Add(this.tabPageAwakening); + this.tabControlSeperateItems.Controls.Add(this.tabPageBait); + this.tabControlSeperateItems.Controls.Add(this.tabPageBells); + this.tabControlSeperateItems.Controls.Add(this.tabPageBelt); + this.tabControlSeperateItems.Controls.Add(this.tabPageBook); + this.tabControlSeperateItems.Controls.Add(this.tabPageBoot); + this.tabControlSeperateItems.Controls.Add(this.tabPageBracelet); + this.tabControlSeperateItems.Controls.Add(this.tabPageCraftingMaterial); + this.tabControlSeperateItems.Controls.Add(this.tabPageFinder); + this.tabControlSeperateItems.Controls.Add(this.tabPageFish); + this.tabControlSeperateItems.Controls.Add(this.tabPageFloat); + this.tabControlSeperateItems.Controls.Add(this.tabPageFood); + this.tabControlSeperateItems.Controls.Add(this.tabPageGem); + this.tabControlSeperateItems.Controls.Add(this.tabPageHelmet); + this.tabControlSeperateItems.Controls.Add(this.tabPageHook); + this.tabControlSeperateItems.Controls.Add(this.tabPageMask); + this.tabControlSeperateItems.Controls.Add(this.tabPageMeat); + this.tabControlSeperateItems.Controls.Add(this.tabPageMount); + this.tabControlSeperateItems.Controls.Add(this.tabPageNecklace); + this.tabControlSeperateItems.Controls.Add(this.tabPageNothing); + this.tabControlSeperateItems.Controls.Add(this.tabPageOre); + this.tabControlSeperateItems.Controls.Add(this.tabPagePets); + this.tabControlSeperateItems.Controls.Add(this.tabPagePotion); + this.tabControlSeperateItems.Controls.Add(this.tabPageQuest); + this.tabControlSeperateItems.Controls.Add(this.tabPageReel); + this.tabControlSeperateItems.Controls.Add(this.tabPageReins); + this.tabControlSeperateItems.Controls.Add(this.tabPageRibbon); + this.tabControlSeperateItems.Controls.Add(this.tabPageRing); + this.tabControlSeperateItems.Controls.Add(this.tabPageSaddle); + this.tabControlSeperateItems.Controls.Add(this.tabPageScript); + this.tabControlSeperateItems.Controls.Add(this.tabPageScroll); + this.tabControlSeperateItems.Controls.Add(this.tabPageStone); + this.tabControlSeperateItems.Controls.Add(this.tabPageTorch); + this.tabControlSeperateItems.Controls.Add(this.tabPageTransform); + this.tabControlSeperateItems.Controls.Add(this.tabPageWeapon); + this.tabControlSeperateItems.HotTrack = true; + this.tabControlSeperateItems.Location = new System.Drawing.Point(198, 12); + this.tabControlSeperateItems.Multiline = true; + this.tabControlSeperateItems.Name = "tabControlSeperateItems"; + this.tabControlSeperateItems.SelectedIndex = 0; + this.tabControlSeperateItems.Size = new System.Drawing.Size(476, 400); + this.tabControlSeperateItems.SizeMode = System.Windows.Forms.TabSizeMode.FillToRight; + this.tabControlSeperateItems.TabIndex = 3; + this.tabControlSeperateItems.Tag = ""; + this.tabControlSeperateItems.SelectedIndexChanged += new System.EventHandler(this.tabControlSeperateItems_SelectedIndexChanged); + // + // tabPageAmulet + // + this.tabPageAmulet.Controls.Add(this.listBoxAmulet); + this.tabPageAmulet.ImageIndex = 4; + this.tabPageAmulet.Location = new System.Drawing.Point(4, 76); + this.tabPageAmulet.Name = "tabPageAmulet"; + this.tabPageAmulet.Padding = new System.Windows.Forms.Padding(3); + this.tabPageAmulet.Size = new System.Drawing.Size(468, 320); + this.tabPageAmulet.TabIndex = 6; + this.tabPageAmulet.Tag = "Amulet"; + this.tabPageAmulet.Text = "Amulet"; + this.tabPageAmulet.UseVisualStyleBackColor = true; + // + // listBoxAmulet + // + this.listBoxAmulet.BackColor = System.Drawing.Color.GhostWhite; + this.listBoxAmulet.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.listBoxAmulet.Dock = System.Windows.Forms.DockStyle.Fill; + this.listBoxAmulet.FormattingEnabled = true; + this.listBoxAmulet.Location = new System.Drawing.Point(3, 3); + this.listBoxAmulet.Name = "listBoxAmulet"; + this.listBoxAmulet.Size = new System.Drawing.Size(462, 314); + this.listBoxAmulet.TabIndex = 3; + this.listBoxAmulet.Tag = "Amulet"; + // + // tabPageArmour + // + this.tabPageArmour.Controls.Add(this.listBoxArmour); + this.tabPageArmour.ImageIndex = 17; + this.tabPageArmour.Location = new System.Drawing.Point(4, 22); + this.tabPageArmour.Name = "tabPageArmour"; + this.tabPageArmour.Padding = new System.Windows.Forms.Padding(3); + this.tabPageArmour.Size = new System.Drawing.Size(468, 374); + this.tabPageArmour.TabIndex = 1; + this.tabPageArmour.Tag = "Armour"; + this.tabPageArmour.Text = "Armour"; + this.tabPageArmour.UseVisualStyleBackColor = true; + // + // listBoxArmour + // + this.listBoxArmour.BackColor = System.Drawing.Color.GhostWhite; + this.listBoxArmour.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.listBoxArmour.Dock = System.Windows.Forms.DockStyle.Fill; + this.listBoxArmour.FormattingEnabled = true; + this.listBoxArmour.Location = new System.Drawing.Point(3, 3); + this.listBoxArmour.Name = "listBoxArmour"; + this.listBoxArmour.Size = new System.Drawing.Size(462, 368); + this.listBoxArmour.TabIndex = 3; + this.listBoxArmour.Tag = "Armour"; + // + // tabPageBait + // + this.tabPageBait.Controls.Add(this.listBoxBait); + this.tabPageBait.Location = new System.Drawing.Point(4, 22); + this.tabPageBait.Name = "tabPageBait"; + this.tabPageBait.Padding = new System.Windows.Forms.Padding(3); + this.tabPageBait.Size = new System.Drawing.Size(468, 374); + this.tabPageBait.TabIndex = 29; + this.tabPageBait.Tag = "Bait"; + this.tabPageBait.Text = "Bait"; + this.tabPageBait.UseVisualStyleBackColor = true; + // + // listBoxBait + // + this.listBoxBait.BackColor = System.Drawing.Color.GhostWhite; + this.listBoxBait.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.listBoxBait.Dock = System.Windows.Forms.DockStyle.Fill; + this.listBoxBait.FormattingEnabled = true; + this.listBoxBait.Location = new System.Drawing.Point(3, 3); + this.listBoxBait.Name = "listBoxBait"; + this.listBoxBait.Size = new System.Drawing.Size(462, 368); + this.listBoxBait.TabIndex = 4; + this.listBoxBait.Tag = "Bait"; + // + // tabPageBells + // + this.tabPageBells.Controls.Add(this.listBoxBells); + this.tabPageBells.Location = new System.Drawing.Point(4, 22); + this.tabPageBells.Name = "tabPageBells"; + this.tabPageBells.Padding = new System.Windows.Forms.Padding(3); + this.tabPageBells.Size = new System.Drawing.Size(468, 374); + this.tabPageBells.TabIndex = 22; + this.tabPageBells.Tag = "Bells"; + this.tabPageBells.Text = "Bells"; + this.tabPageBells.UseVisualStyleBackColor = true; + // + // listBoxBells + // + this.listBoxBells.BackColor = System.Drawing.Color.GhostWhite; + this.listBoxBells.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.listBoxBells.Dock = System.Windows.Forms.DockStyle.Fill; + this.listBoxBells.FormattingEnabled = true; + this.listBoxBells.Location = new System.Drawing.Point(3, 3); + this.listBoxBells.Name = "listBoxBells"; + this.listBoxBells.Size = new System.Drawing.Size(462, 368); + this.listBoxBells.TabIndex = 4; + this.listBoxBells.Tag = "Bells"; + // + // tabPageBelt + // + this.tabPageBelt.Controls.Add(this.listBoxBelt); + this.tabPageBelt.ImageIndex = 18; + this.tabPageBelt.Location = new System.Drawing.Point(4, 22); + this.tabPageBelt.Name = "tabPageBelt"; + this.tabPageBelt.Padding = new System.Windows.Forms.Padding(3); + this.tabPageBelt.Size = new System.Drawing.Size(468, 374); + this.tabPageBelt.TabIndex = 7; + this.tabPageBelt.Tag = "Belt"; + this.tabPageBelt.Text = "Belt"; + this.tabPageBelt.UseVisualStyleBackColor = true; + // + // listBoxBelt + // + this.listBoxBelt.BackColor = System.Drawing.Color.GhostWhite; + this.listBoxBelt.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.listBoxBelt.Dock = System.Windows.Forms.DockStyle.Fill; + this.listBoxBelt.FormattingEnabled = true; + this.listBoxBelt.Location = new System.Drawing.Point(3, 3); + this.listBoxBelt.Name = "listBoxBelt"; + this.listBoxBelt.Size = new System.Drawing.Size(462, 368); + this.listBoxBelt.TabIndex = 3; + this.listBoxBelt.Tag = "Belt"; + // + // tabPageBook + // + this.tabPageBook.Controls.Add(this.listBoxBook); + this.tabPageBook.ImageIndex = 5; + this.tabPageBook.Location = new System.Drawing.Point(4, 22); + this.tabPageBook.Name = "tabPageBook"; + this.tabPageBook.Padding = new System.Windows.Forms.Padding(3); + this.tabPageBook.Size = new System.Drawing.Size(468, 374); + this.tabPageBook.TabIndex = 18; + this.tabPageBook.Tag = "Book"; + this.tabPageBook.Text = "Book"; + this.tabPageBook.UseVisualStyleBackColor = true; + // + // listBoxBook + // + this.listBoxBook.BackColor = System.Drawing.Color.GhostWhite; + this.listBoxBook.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.listBoxBook.Dock = System.Windows.Forms.DockStyle.Fill; + this.listBoxBook.FormattingEnabled = true; + this.listBoxBook.Location = new System.Drawing.Point(3, 3); + this.listBoxBook.Name = "listBoxBook"; + this.listBoxBook.Size = new System.Drawing.Size(462, 368); + this.listBoxBook.TabIndex = 3; + this.listBoxBook.Tag = "Book"; + // + // tabPageBoot + // + this.tabPageBoot.Controls.Add(this.listBoxBoot); + this.tabPageBoot.ImageIndex = 15; + this.tabPageBoot.Location = new System.Drawing.Point(4, 22); + this.tabPageBoot.Name = "tabPageBoot"; + this.tabPageBoot.Padding = new System.Windows.Forms.Padding(3); + this.tabPageBoot.Size = new System.Drawing.Size(468, 374); + this.tabPageBoot.TabIndex = 8; + this.tabPageBoot.Tag = "Boots"; + this.tabPageBoot.Text = "Boot"; + this.tabPageBoot.UseVisualStyleBackColor = true; + // + // listBoxBoot + // + this.listBoxBoot.BackColor = System.Drawing.Color.GhostWhite; + this.listBoxBoot.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.listBoxBoot.Dock = System.Windows.Forms.DockStyle.Fill; + this.listBoxBoot.FormattingEnabled = true; + this.listBoxBoot.Location = new System.Drawing.Point(3, 3); + this.listBoxBoot.Name = "listBoxBoot"; + this.listBoxBoot.Size = new System.Drawing.Size(462, 368); + this.listBoxBoot.TabIndex = 3; + this.listBoxBoot.Tag = "Boots"; + // + // tabPageBracelet + // + this.tabPageBracelet.Controls.Add(this.listBoxBracelet); + this.tabPageBracelet.ImageIndex = 13; + this.tabPageBracelet.Location = new System.Drawing.Point(4, 22); + this.tabPageBracelet.Name = "tabPageBracelet"; + this.tabPageBracelet.Padding = new System.Windows.Forms.Padding(3); + this.tabPageBracelet.Size = new System.Drawing.Size(468, 374); + this.tabPageBracelet.TabIndex = 4; + this.tabPageBracelet.Tag = "Bracelet"; + this.tabPageBracelet.Text = "Bracelet"; + this.tabPageBracelet.UseVisualStyleBackColor = true; + // + // listBoxBracelet + // + this.listBoxBracelet.BackColor = System.Drawing.Color.GhostWhite; + this.listBoxBracelet.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.listBoxBracelet.Dock = System.Windows.Forms.DockStyle.Fill; + this.listBoxBracelet.FormattingEnabled = true; + this.listBoxBracelet.Location = new System.Drawing.Point(3, 3); + this.listBoxBracelet.Name = "listBoxBracelet"; + this.listBoxBracelet.Size = new System.Drawing.Size(462, 368); + this.listBoxBracelet.TabIndex = 3; + this.listBoxBracelet.Tag = "Bracelet"; + // + // tabPageCraftingMaterial + // + this.tabPageCraftingMaterial.Controls.Add(this.listBoxCraftingMaterial); + this.tabPageCraftingMaterial.ImageIndex = 1; + this.tabPageCraftingMaterial.Location = new System.Drawing.Point(4, 40); + this.tabPageCraftingMaterial.Name = "tabPageCraftingMaterial"; + this.tabPageCraftingMaterial.Padding = new System.Windows.Forms.Padding(3); + this.tabPageCraftingMaterial.Size = new System.Drawing.Size(468, 356); + this.tabPageCraftingMaterial.TabIndex = 14; + this.tabPageCraftingMaterial.Tag = "CraftingMaterial"; + this.tabPageCraftingMaterial.Text = "Crafting Material"; + this.tabPageCraftingMaterial.UseVisualStyleBackColor = true; + // + // listBoxCraftingMaterial + // + this.listBoxCraftingMaterial.BackColor = System.Drawing.Color.GhostWhite; + this.listBoxCraftingMaterial.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.listBoxCraftingMaterial.Dock = System.Windows.Forms.DockStyle.Fill; + this.listBoxCraftingMaterial.FormattingEnabled = true; + this.listBoxCraftingMaterial.Location = new System.Drawing.Point(3, 3); + this.listBoxCraftingMaterial.Name = "listBoxCraftingMaterial"; + this.listBoxCraftingMaterial.Size = new System.Drawing.Size(462, 350); + this.listBoxCraftingMaterial.TabIndex = 3; + this.listBoxCraftingMaterial.Tag = "Crafting Material"; + // + // tabPageFinder + // + this.tabPageFinder.Controls.Add(this.listBoxFinder); + this.tabPageFinder.Location = new System.Drawing.Point(4, 40); + this.tabPageFinder.Name = "tabPageFinder"; + this.tabPageFinder.Padding = new System.Windows.Forms.Padding(3); + this.tabPageFinder.Size = new System.Drawing.Size(468, 356); + this.tabPageFinder.TabIndex = 30; + this.tabPageFinder.Tag = "Finder"; + this.tabPageFinder.Text = "Finder"; + this.tabPageFinder.UseVisualStyleBackColor = true; + // + // listBoxFinder + // + this.listBoxFinder.BackColor = System.Drawing.Color.GhostWhite; + this.listBoxFinder.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.listBoxFinder.Dock = System.Windows.Forms.DockStyle.Fill; + this.listBoxFinder.FormattingEnabled = true; + this.listBoxFinder.Location = new System.Drawing.Point(3, 3); + this.listBoxFinder.Name = "listBoxFinder"; + this.listBoxFinder.Size = new System.Drawing.Size(462, 350); + this.listBoxFinder.TabIndex = 5; + this.listBoxFinder.Tag = "Finder"; + // + // tabPageFish + // + this.tabPageFish.Controls.Add(this.listBoxFish); + this.tabPageFish.Location = new System.Drawing.Point(4, 40); + this.tabPageFish.Name = "tabPageFish"; + this.tabPageFish.Padding = new System.Windows.Forms.Padding(3); + this.tabPageFish.Size = new System.Drawing.Size(468, 356); + this.tabPageFish.TabIndex = 32; + this.tabPageFish.Tag = "Fish"; + this.tabPageFish.Text = "Fish"; + this.tabPageFish.UseVisualStyleBackColor = true; + // + // listBoxFish + // + this.listBoxFish.BackColor = System.Drawing.Color.GhostWhite; + this.listBoxFish.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.listBoxFish.Dock = System.Windows.Forms.DockStyle.Fill; + this.listBoxFish.FormattingEnabled = true; + this.listBoxFish.Location = new System.Drawing.Point(3, 3); + this.listBoxFish.Name = "listBoxFish"; + this.listBoxFish.Size = new System.Drawing.Size(462, 350); + this.listBoxFish.TabIndex = 5; + this.listBoxFish.Tag = "Fish"; + // + // tabPageFloat + // + this.tabPageFloat.Controls.Add(this.listBoxFloat); + this.tabPageFloat.Location = new System.Drawing.Point(4, 40); + this.tabPageFloat.Name = "tabPageFloat"; + this.tabPageFloat.Padding = new System.Windows.Forms.Padding(3); + this.tabPageFloat.Size = new System.Drawing.Size(468, 356); + this.tabPageFloat.TabIndex = 28; + this.tabPageFloat.Tag = "Float"; + this.tabPageFloat.Text = "Float"; + this.tabPageFloat.UseVisualStyleBackColor = true; + // + // listBoxFloat + // + this.listBoxFloat.BackColor = System.Drawing.Color.GhostWhite; + this.listBoxFloat.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.listBoxFloat.Dock = System.Windows.Forms.DockStyle.Fill; + this.listBoxFloat.FormattingEnabled = true; + this.listBoxFloat.Location = new System.Drawing.Point(3, 3); + this.listBoxFloat.Name = "listBoxFloat"; + this.listBoxFloat.Size = new System.Drawing.Size(462, 350); + this.listBoxFloat.TabIndex = 5; + this.listBoxFloat.Tag = "Float"; + // + // tabPageFood + // + this.tabPageFood.Controls.Add(this.listBoxFood); + this.tabPageFood.Location = new System.Drawing.Point(4, 40); + this.tabPageFood.Name = "tabPageFood"; + this.tabPageFood.Padding = new System.Windows.Forms.Padding(3); + this.tabPageFood.Size = new System.Drawing.Size(468, 356); + this.tabPageFood.TabIndex = 26; + this.tabPageFood.Tag = "Food"; + this.tabPageFood.Text = "Food"; + this.tabPageFood.UseVisualStyleBackColor = true; + // + // listBoxFood + // + this.listBoxFood.BackColor = System.Drawing.Color.GhostWhite; + this.listBoxFood.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.listBoxFood.Dock = System.Windows.Forms.DockStyle.Fill; + this.listBoxFood.FormattingEnabled = true; + this.listBoxFood.Location = new System.Drawing.Point(3, 3); + this.listBoxFood.Name = "listBoxFood"; + this.listBoxFood.Size = new System.Drawing.Size(462, 350); + this.listBoxFood.TabIndex = 5; + this.listBoxFood.Tag = "Food"; + // + // tabPageGem + // + this.tabPageGem.Controls.Add(this.listBoxGem); + this.tabPageGem.ImageIndex = 7; + this.tabPageGem.Location = new System.Drawing.Point(4, 40); + this.tabPageGem.Name = "tabPageGem"; + this.tabPageGem.Padding = new System.Windows.Forms.Padding(3); + this.tabPageGem.Size = new System.Drawing.Size(468, 356); + this.tabPageGem.TabIndex = 16; + this.tabPageGem.Tag = "Gem"; + this.tabPageGem.Text = "Gem"; + this.tabPageGem.UseVisualStyleBackColor = true; + // + // listBoxGem + // + this.listBoxGem.BackColor = System.Drawing.Color.GhostWhite; + this.listBoxGem.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.listBoxGem.Dock = System.Windows.Forms.DockStyle.Fill; + this.listBoxGem.FormattingEnabled = true; + this.listBoxGem.Location = new System.Drawing.Point(3, 3); + this.listBoxGem.Name = "listBoxGem"; + this.listBoxGem.Size = new System.Drawing.Size(462, 350); + this.listBoxGem.TabIndex = 3; + this.listBoxGem.Tag = "Gem"; + // + // tabPageHelmet + // + this.tabPageHelmet.Controls.Add(this.listBoxHelmet); + this.tabPageHelmet.ImageIndex = 11; + this.tabPageHelmet.Location = new System.Drawing.Point(4, 40); + this.tabPageHelmet.Name = "tabPageHelmet"; + this.tabPageHelmet.Padding = new System.Windows.Forms.Padding(3); + this.tabPageHelmet.Size = new System.Drawing.Size(468, 356); + this.tabPageHelmet.TabIndex = 2; + this.tabPageHelmet.Tag = "Helmet"; + this.tabPageHelmet.Text = "Helmet"; + this.tabPageHelmet.UseVisualStyleBackColor = true; + // + // listBoxHelmet + // + this.listBoxHelmet.BackColor = System.Drawing.Color.GhostWhite; + this.listBoxHelmet.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.listBoxHelmet.Dock = System.Windows.Forms.DockStyle.Fill; + this.listBoxHelmet.FormattingEnabled = true; + this.listBoxHelmet.Location = new System.Drawing.Point(3, 3); + this.listBoxHelmet.Name = "listBoxHelmet"; + this.listBoxHelmet.Size = new System.Drawing.Size(462, 350); + this.listBoxHelmet.TabIndex = 3; + this.listBoxHelmet.Tag = "Helmet"; + // + // tabPageHook + // + this.tabPageHook.Controls.Add(this.listBoxHook); + this.tabPageHook.Location = new System.Drawing.Point(4, 40); + this.tabPageHook.Name = "tabPageHook"; + this.tabPageHook.Padding = new System.Windows.Forms.Padding(3); + this.tabPageHook.Size = new System.Drawing.Size(468, 356); + this.tabPageHook.TabIndex = 27; + this.tabPageHook.Tag = "Hook"; + this.tabPageHook.Text = "Hook"; + this.tabPageHook.UseVisualStyleBackColor = true; + // + // listBoxHook + // + this.listBoxHook.BackColor = System.Drawing.Color.GhostWhite; + this.listBoxHook.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.listBoxHook.Dock = System.Windows.Forms.DockStyle.Fill; + this.listBoxHook.FormattingEnabled = true; + this.listBoxHook.Location = new System.Drawing.Point(3, 3); + this.listBoxHook.Name = "listBoxHook"; + this.listBoxHook.Size = new System.Drawing.Size(462, 350); + this.listBoxHook.TabIndex = 5; + this.listBoxHook.Tag = "Hook"; + // + // tabPageMask + // + this.tabPageMask.Controls.Add(this.listBoxMask); + this.tabPageMask.Location = new System.Drawing.Point(4, 40); + this.tabPageMask.Name = "tabPageMask"; + this.tabPageMask.Padding = new System.Windows.Forms.Padding(3); + this.tabPageMask.Size = new System.Drawing.Size(468, 356); + this.tabPageMask.TabIndex = 25; + this.tabPageMask.Tag = "Mask"; + this.tabPageMask.Text = "Mask"; + this.tabPageMask.UseVisualStyleBackColor = true; + // + // listBoxMask + // + this.listBoxMask.BackColor = System.Drawing.Color.GhostWhite; + this.listBoxMask.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.listBoxMask.Dock = System.Windows.Forms.DockStyle.Fill; + this.listBoxMask.FormattingEnabled = true; + this.listBoxMask.Location = new System.Drawing.Point(3, 3); + this.listBoxMask.Name = "listBoxMask"; + this.listBoxMask.Size = new System.Drawing.Size(462, 350); + this.listBoxMask.TabIndex = 5; + this.listBoxMask.Tag = "Mask"; + // + // tabPageMeat + // + this.tabPageMeat.Controls.Add(this.listBoxMeat); + this.tabPageMeat.ImageIndex = 3; + this.tabPageMeat.Location = new System.Drawing.Point(4, 40); + this.tabPageMeat.Name = "tabPageMeat"; + this.tabPageMeat.Padding = new System.Windows.Forms.Padding(3); + this.tabPageMeat.Size = new System.Drawing.Size(468, 356); + this.tabPageMeat.TabIndex = 13; + this.tabPageMeat.Tag = "Meat"; + this.tabPageMeat.Text = "Meat"; + this.tabPageMeat.UseVisualStyleBackColor = true; + // + // listBoxMeat + // + this.listBoxMeat.BackColor = System.Drawing.Color.GhostWhite; + this.listBoxMeat.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.listBoxMeat.Dock = System.Windows.Forms.DockStyle.Fill; + this.listBoxMeat.FormattingEnabled = true; + this.listBoxMeat.Location = new System.Drawing.Point(3, 3); + this.listBoxMeat.Name = "listBoxMeat"; + this.listBoxMeat.Size = new System.Drawing.Size(462, 350); + this.listBoxMeat.TabIndex = 3; + this.listBoxMeat.Tag = "Meat"; + // + // tabPageMount + // + this.tabPageMount.Controls.Add(this.listBoxMount); + this.tabPageMount.ImageIndex = 19; + this.tabPageMount.Location = new System.Drawing.Point(4, 58); + this.tabPageMount.Name = "tabPageMount"; + this.tabPageMount.Padding = new System.Windows.Forms.Padding(3); + this.tabPageMount.Size = new System.Drawing.Size(468, 338); + this.tabPageMount.TabIndex = 17; + this.tabPageMount.Tag = "Mount"; + this.tabPageMount.Text = "Mount"; + this.tabPageMount.UseVisualStyleBackColor = true; + // + // listBoxMount + // + this.listBoxMount.BackColor = System.Drawing.Color.GhostWhite; + this.listBoxMount.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.listBoxMount.Dock = System.Windows.Forms.DockStyle.Fill; + this.listBoxMount.FormattingEnabled = true; + this.listBoxMount.Location = new System.Drawing.Point(3, 3); + this.listBoxMount.Name = "listBoxMount"; + this.listBoxMount.Size = new System.Drawing.Size(462, 332); + this.listBoxMount.TabIndex = 3; + this.listBoxMount.Tag = "Mount"; + // + // tabPageNecklace + // + this.tabPageNecklace.Controls.Add(this.listBoxNecklace); + this.tabPageNecklace.ImageIndex = 14; + this.tabPageNecklace.Location = new System.Drawing.Point(4, 58); + this.tabPageNecklace.Name = "tabPageNecklace"; + this.tabPageNecklace.Padding = new System.Windows.Forms.Padding(3); + this.tabPageNecklace.Size = new System.Drawing.Size(468, 338); + this.tabPageNecklace.TabIndex = 3; + this.tabPageNecklace.Tag = "Necklace"; + this.tabPageNecklace.Text = "Necklace"; + this.tabPageNecklace.UseVisualStyleBackColor = true; + // + // listBoxNecklace + // + this.listBoxNecklace.BackColor = System.Drawing.Color.GhostWhite; + this.listBoxNecklace.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.listBoxNecklace.Dock = System.Windows.Forms.DockStyle.Fill; + this.listBoxNecklace.FormattingEnabled = true; + this.listBoxNecklace.Location = new System.Drawing.Point(3, 3); + this.listBoxNecklace.Name = "listBoxNecklace"; + this.listBoxNecklace.Size = new System.Drawing.Size(462, 332); + this.listBoxNecklace.TabIndex = 3; + this.listBoxNecklace.Tag = "Necklace"; + // + // tabPageNothing + // + this.tabPageNothing.Controls.Add(this.listBoxNothing); + this.tabPageNothing.ImageIndex = 8; + this.tabPageNothing.Location = new System.Drawing.Point(4, 58); + this.tabPageNothing.Name = "tabPageNothing"; + this.tabPageNothing.Padding = new System.Windows.Forms.Padding(3); + this.tabPageNothing.Size = new System.Drawing.Size(468, 338); + this.tabPageNothing.TabIndex = 19; + this.tabPageNothing.Tag = "Nothing"; + this.tabPageNothing.Text = "Nothing"; + this.tabPageNothing.UseVisualStyleBackColor = true; + // + // listBoxNothing + // + this.listBoxNothing.BackColor = System.Drawing.Color.GhostWhite; + this.listBoxNothing.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.listBoxNothing.Dock = System.Windows.Forms.DockStyle.Fill; + this.listBoxNothing.FormattingEnabled = true; + this.listBoxNothing.Location = new System.Drawing.Point(3, 3); + this.listBoxNothing.Name = "listBoxNothing"; + this.listBoxNothing.Size = new System.Drawing.Size(462, 332); + this.listBoxNothing.TabIndex = 4; + this.listBoxNothing.Tag = "Nothing"; + // + // tabPageOre + // + this.tabPageOre.Controls.Add(this.listBoxOre); + this.tabPageOre.ImageIndex = 6; + this.tabPageOre.Location = new System.Drawing.Point(4, 58); + this.tabPageOre.Name = "tabPageOre"; + this.tabPageOre.Padding = new System.Windows.Forms.Padding(3); + this.tabPageOre.Size = new System.Drawing.Size(468, 338); + this.tabPageOre.TabIndex = 12; + this.tabPageOre.Tag = "Ore"; + this.tabPageOre.Text = "Ore"; + this.tabPageOre.UseVisualStyleBackColor = true; + // + // listBoxOre + // + this.listBoxOre.BackColor = System.Drawing.Color.GhostWhite; + this.listBoxOre.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.listBoxOre.Dock = System.Windows.Forms.DockStyle.Fill; + this.listBoxOre.FormattingEnabled = true; + this.listBoxOre.Location = new System.Drawing.Point(3, 3); + this.listBoxOre.Name = "listBoxOre"; + this.listBoxOre.Size = new System.Drawing.Size(462, 332); + this.listBoxOre.TabIndex = 3; + this.listBoxOre.Tag = "Ore"; + // + // tabPagePotion + // + this.tabPagePotion.Controls.Add(this.listBoxPotion); + this.tabPagePotion.ImageIndex = 0; + this.tabPagePotion.Location = new System.Drawing.Point(4, 58); + this.tabPagePotion.Name = "tabPagePotion"; + this.tabPagePotion.Padding = new System.Windows.Forms.Padding(3); + this.tabPagePotion.Size = new System.Drawing.Size(468, 338); + this.tabPagePotion.TabIndex = 11; + this.tabPagePotion.Tag = "Potion"; + this.tabPagePotion.Text = "Potion"; + this.tabPagePotion.UseVisualStyleBackColor = true; + // + // listBoxPotion + // + this.listBoxPotion.BackColor = System.Drawing.Color.GhostWhite; + this.listBoxPotion.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.listBoxPotion.Dock = System.Windows.Forms.DockStyle.Fill; + this.listBoxPotion.FormattingEnabled = true; + this.listBoxPotion.Location = new System.Drawing.Point(3, 3); + this.listBoxPotion.Name = "listBoxPotion"; + this.listBoxPotion.Size = new System.Drawing.Size(462, 332); + this.listBoxPotion.TabIndex = 3; + this.listBoxPotion.Tag = "Potion"; + // + // tabPageQuest + // + this.tabPageQuest.Controls.Add(this.listBoxQuest); + this.tabPageQuest.Location = new System.Drawing.Point(4, 58); + this.tabPageQuest.Name = "tabPageQuest"; + this.tabPageQuest.Padding = new System.Windows.Forms.Padding(3); + this.tabPageQuest.Size = new System.Drawing.Size(468, 338); + this.tabPageQuest.TabIndex = 33; + this.tabPageQuest.Tag = "Quest"; + this.tabPageQuest.Text = "Quest"; + this.tabPageQuest.UseVisualStyleBackColor = true; + // + // listBoxQuest + // + this.listBoxQuest.BackColor = System.Drawing.Color.GhostWhite; + this.listBoxQuest.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.listBoxQuest.Dock = System.Windows.Forms.DockStyle.Fill; + this.listBoxQuest.FormattingEnabled = true; + this.listBoxQuest.Location = new System.Drawing.Point(3, 3); + this.listBoxQuest.Name = "listBoxQuest"; + this.listBoxQuest.Size = new System.Drawing.Size(462, 332); + this.listBoxQuest.TabIndex = 4; + this.listBoxQuest.Tag = "Quest"; + // + // tabPageReel + // + this.tabPageReel.Controls.Add(this.listBoxReel); + this.tabPageReel.Location = new System.Drawing.Point(4, 58); + this.tabPageReel.Name = "tabPageReel"; + this.tabPageReel.Padding = new System.Windows.Forms.Padding(3); + this.tabPageReel.Size = new System.Drawing.Size(468, 338); + this.tabPageReel.TabIndex = 31; + this.tabPageReel.Tag = "Reel"; + this.tabPageReel.Text = "Reel"; + this.tabPageReel.UseVisualStyleBackColor = true; + // + // listBoxReel + // + this.listBoxReel.BackColor = System.Drawing.Color.GhostWhite; + this.listBoxReel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.listBoxReel.Dock = System.Windows.Forms.DockStyle.Fill; + this.listBoxReel.FormattingEnabled = true; + this.listBoxReel.Location = new System.Drawing.Point(3, 3); + this.listBoxReel.Name = "listBoxReel"; + this.listBoxReel.Size = new System.Drawing.Size(462, 332); + this.listBoxReel.TabIndex = 4; + this.listBoxReel.Tag = "Reel"; + // + // tabPageReins + // + this.tabPageReins.Controls.Add(this.listBoxReins); + this.tabPageReins.Location = new System.Drawing.Point(4, 58); + this.tabPageReins.Name = "tabPageReins"; + this.tabPageReins.Padding = new System.Windows.Forms.Padding(3); + this.tabPageReins.Size = new System.Drawing.Size(468, 338); + this.tabPageReins.TabIndex = 21; + this.tabPageReins.Tag = "Reins"; + this.tabPageReins.Text = "Reins"; + this.tabPageReins.UseVisualStyleBackColor = true; + // + // listBoxReins + // + this.listBoxReins.BackColor = System.Drawing.Color.GhostWhite; + this.listBoxReins.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.listBoxReins.Dock = System.Windows.Forms.DockStyle.Fill; + this.listBoxReins.FormattingEnabled = true; + this.listBoxReins.Location = new System.Drawing.Point(3, 3); + this.listBoxReins.Name = "listBoxReins"; + this.listBoxReins.Size = new System.Drawing.Size(462, 332); + this.listBoxReins.TabIndex = 4; + this.listBoxReins.Tag = "Reins"; + // + // tabPageRibbon + // + this.tabPageRibbon.Controls.Add(this.listBoxRibbon); + this.tabPageRibbon.Location = new System.Drawing.Point(4, 58); + this.tabPageRibbon.Name = "tabPageRibbon"; + this.tabPageRibbon.Padding = new System.Windows.Forms.Padding(3); + this.tabPageRibbon.Size = new System.Drawing.Size(468, 338); + this.tabPageRibbon.TabIndex = 24; + this.tabPageRibbon.Tag = "Ribbon"; + this.tabPageRibbon.Text = "Ribbon"; + this.tabPageRibbon.UseVisualStyleBackColor = true; + // + // listBoxRibbon + // + this.listBoxRibbon.BackColor = System.Drawing.Color.GhostWhite; + this.listBoxRibbon.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.listBoxRibbon.Dock = System.Windows.Forms.DockStyle.Fill; + this.listBoxRibbon.FormattingEnabled = true; + this.listBoxRibbon.Location = new System.Drawing.Point(3, 3); + this.listBoxRibbon.Name = "listBoxRibbon"; + this.listBoxRibbon.Size = new System.Drawing.Size(462, 332); + this.listBoxRibbon.TabIndex = 5; + this.listBoxRibbon.Tag = "Ribbon"; + // + // tabPageRing + // + this.tabPageRing.Controls.Add(this.listBoxRing); + this.tabPageRing.ImageIndex = 12; + this.tabPageRing.Location = new System.Drawing.Point(4, 76); + this.tabPageRing.Name = "tabPageRing"; + this.tabPageRing.Padding = new System.Windows.Forms.Padding(3); + this.tabPageRing.Size = new System.Drawing.Size(468, 320); + this.tabPageRing.TabIndex = 5; + this.tabPageRing.Tag = "Ring"; + this.tabPageRing.Text = "Ring"; + this.tabPageRing.UseVisualStyleBackColor = true; + // + // listBoxRing + // + this.listBoxRing.BackColor = System.Drawing.Color.GhostWhite; + this.listBoxRing.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.listBoxRing.Dock = System.Windows.Forms.DockStyle.Fill; + this.listBoxRing.FormattingEnabled = true; + this.listBoxRing.Location = new System.Drawing.Point(3, 3); + this.listBoxRing.Name = "listBoxRing"; + this.listBoxRing.Size = new System.Drawing.Size(462, 314); + this.listBoxRing.TabIndex = 3; + this.listBoxRing.Tag = "Ring"; + // + // tabPageSaddle + // + this.tabPageSaddle.Controls.Add(this.listBoxSaddle); + this.tabPageSaddle.Location = new System.Drawing.Point(4, 76); + this.tabPageSaddle.Name = "tabPageSaddle"; + this.tabPageSaddle.Padding = new System.Windows.Forms.Padding(3); + this.tabPageSaddle.Size = new System.Drawing.Size(468, 320); + this.tabPageSaddle.TabIndex = 23; + this.tabPageSaddle.Tag = "Saddle"; + this.tabPageSaddle.Text = "Saddle"; + this.tabPageSaddle.UseVisualStyleBackColor = true; + // + // listBoxSaddle + // + this.listBoxSaddle.BackColor = System.Drawing.Color.GhostWhite; + this.listBoxSaddle.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.listBoxSaddle.Dock = System.Windows.Forms.DockStyle.Fill; + this.listBoxSaddle.FormattingEnabled = true; + this.listBoxSaddle.Location = new System.Drawing.Point(3, 3); + this.listBoxSaddle.Name = "listBoxSaddle"; + this.listBoxSaddle.Size = new System.Drawing.Size(462, 314); + this.listBoxSaddle.TabIndex = 4; + this.listBoxSaddle.Tag = "Saddle"; + // + // tabPageScript + // + this.tabPageScript.Controls.Add(this.listBoxScript); + this.tabPageScript.Location = new System.Drawing.Point(4, 76); + this.tabPageScript.Name = "tabPageScript"; + this.tabPageScript.Padding = new System.Windows.Forms.Padding(3); + this.tabPageScript.Size = new System.Drawing.Size(468, 320); + this.tabPageScript.TabIndex = 20; + this.tabPageScript.Tag = "Script"; + this.tabPageScript.Text = "Script"; + this.tabPageScript.UseVisualStyleBackColor = true; + // + // listBoxScript + // + this.listBoxScript.BackColor = System.Drawing.Color.GhostWhite; + this.listBoxScript.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.listBoxScript.Dock = System.Windows.Forms.DockStyle.Fill; + this.listBoxScript.FormattingEnabled = true; + this.listBoxScript.Location = new System.Drawing.Point(3, 3); + this.listBoxScript.Name = "listBoxScript"; + this.listBoxScript.Size = new System.Drawing.Size(462, 314); + this.listBoxScript.TabIndex = 4; + this.listBoxScript.Tag = "Script"; + // + // tabPageScroll + // + this.tabPageScroll.Controls.Add(this.listBoxScroll); + this.tabPageScroll.ImageIndex = 2; + this.tabPageScroll.Location = new System.Drawing.Point(4, 76); + this.tabPageScroll.Name = "tabPageScroll"; + this.tabPageScroll.Padding = new System.Windows.Forms.Padding(3); + this.tabPageScroll.Size = new System.Drawing.Size(468, 320); + this.tabPageScroll.TabIndex = 15; + this.tabPageScroll.Tag = "Scroll"; + this.tabPageScroll.Text = "Scroll"; + this.tabPageScroll.UseVisualStyleBackColor = true; + // + // listBoxScroll + // + this.listBoxScroll.BackColor = System.Drawing.Color.GhostWhite; + this.listBoxScroll.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.listBoxScroll.Dock = System.Windows.Forms.DockStyle.Fill; + this.listBoxScroll.FormattingEnabled = true; + this.listBoxScroll.Location = new System.Drawing.Point(3, 3); + this.listBoxScroll.Name = "listBoxScroll"; + this.listBoxScroll.Size = new System.Drawing.Size(462, 314); + this.listBoxScroll.TabIndex = 3; + this.listBoxScroll.Tag = "Scroll"; + // + // tabPageStone + // + this.tabPageStone.Controls.Add(this.listBoxStone); + this.tabPageStone.ImageIndex = 10; + this.tabPageStone.Location = new System.Drawing.Point(4, 76); + this.tabPageStone.Name = "tabPageStone"; + this.tabPageStone.Padding = new System.Windows.Forms.Padding(3); + this.tabPageStone.Size = new System.Drawing.Size(468, 320); + this.tabPageStone.TabIndex = 9; + this.tabPageStone.Tag = "Stone"; + this.tabPageStone.Text = "Stone"; + this.tabPageStone.UseVisualStyleBackColor = true; + // + // listBoxStone + // + this.listBoxStone.BackColor = System.Drawing.Color.GhostWhite; + this.listBoxStone.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.listBoxStone.Dock = System.Windows.Forms.DockStyle.Fill; + this.listBoxStone.FormattingEnabled = true; + this.listBoxStone.Location = new System.Drawing.Point(3, 3); + this.listBoxStone.Name = "listBoxStone"; + this.listBoxStone.Size = new System.Drawing.Size(462, 314); + this.listBoxStone.TabIndex = 3; + this.listBoxStone.Tag = "Stone"; + // + // tabPageTorch + // + this.tabPageTorch.Controls.Add(this.listBoxTorch); + this.tabPageTorch.ImageIndex = 9; + this.tabPageTorch.Location = new System.Drawing.Point(4, 76); + this.tabPageTorch.Name = "tabPageTorch"; + this.tabPageTorch.Padding = new System.Windows.Forms.Padding(3); + this.tabPageTorch.Size = new System.Drawing.Size(468, 320); + this.tabPageTorch.TabIndex = 10; + this.tabPageTorch.Tag = "Torch"; + this.tabPageTorch.Text = "Torch"; + this.tabPageTorch.UseVisualStyleBackColor = true; + // + // listBoxTorch + // + this.listBoxTorch.BackColor = System.Drawing.Color.GhostWhite; + this.listBoxTorch.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.listBoxTorch.Dock = System.Windows.Forms.DockStyle.Fill; + this.listBoxTorch.FormattingEnabled = true; + this.listBoxTorch.Location = new System.Drawing.Point(3, 3); + this.listBoxTorch.Name = "listBoxTorch"; + this.listBoxTorch.Size = new System.Drawing.Size(462, 314); + this.listBoxTorch.TabIndex = 3; + this.listBoxTorch.Tag = "Torch"; + // + // tabPageWeapon + // + this.tabPageWeapon.Controls.Add(this.listBoxWeapon); + this.tabPageWeapon.ImageIndex = 16; + this.tabPageWeapon.Location = new System.Drawing.Point(4, 76); + this.tabPageWeapon.Name = "tabPageWeapon"; + this.tabPageWeapon.Padding = new System.Windows.Forms.Padding(3); + this.tabPageWeapon.Size = new System.Drawing.Size(468, 320); + this.tabPageWeapon.TabIndex = 0; + this.tabPageWeapon.Tag = "Weapon"; + this.tabPageWeapon.Text = "Weapon"; + this.tabPageWeapon.UseVisualStyleBackColor = true; + // + // tabPageAwakening + // + this.tabPageAwakening.Controls.Add(this.listBoxAwakening); + this.tabPageAwakening.Location = new System.Drawing.Point(4, 22); + this.tabPageAwakening.Name = "tabPageAwakening"; + this.tabPageAwakening.Padding = new System.Windows.Forms.Padding(3); + this.tabPageAwakening.Size = new System.Drawing.Size(468, 374); + this.tabPageAwakening.TabIndex = 34; + this.tabPageAwakening.Tag = "Awakening"; + this.tabPageAwakening.Text = "Awakening"; + this.tabPageAwakening.UseVisualStyleBackColor = true; + // + // listBoxAwakening + // + this.listBoxAwakening.BackColor = System.Drawing.Color.GhostWhite; + this.listBoxAwakening.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.listBoxAwakening.Dock = System.Windows.Forms.DockStyle.Fill; + this.listBoxAwakening.FormattingEnabled = true; + this.listBoxAwakening.Location = new System.Drawing.Point(3, 3); + this.listBoxAwakening.Name = "listBoxAwakening"; + this.listBoxAwakening.Size = new System.Drawing.Size(462, 368); + this.listBoxAwakening.TabIndex = 0; + this.listBoxAwakening.Tag = "Awakening"; + // + // tabPagePets + // + this.tabPagePets.Controls.Add(this.listBoxPets); + this.tabPagePets.Location = new System.Drawing.Point(4, 58); + this.tabPagePets.Name = "tabPagePets"; + this.tabPagePets.Padding = new System.Windows.Forms.Padding(3); + this.tabPagePets.Size = new System.Drawing.Size(468, 338); + this.tabPagePets.TabIndex = 35; + this.tabPagePets.Tag = "Pets"; + this.tabPagePets.Text = "Pets"; + this.tabPagePets.UseVisualStyleBackColor = true; + // + // listBoxPets + // + this.listBoxPets.BackColor = System.Drawing.Color.GhostWhite; + this.listBoxPets.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.listBoxPets.Dock = System.Windows.Forms.DockStyle.Fill; + this.listBoxPets.FormattingEnabled = true; + this.listBoxPets.Location = new System.Drawing.Point(3, 3); + this.listBoxPets.Name = "listBoxPets"; + this.listBoxPets.Size = new System.Drawing.Size(462, 332); + this.listBoxPets.TabIndex = 1; + this.listBoxPets.Tag = "Pets"; + // + // tabPageTransform + // + this.tabPageTransform.Controls.Add(this.listBoxTransform); + this.tabPageTransform.Location = new System.Drawing.Point(4, 76); + this.tabPageTransform.Name = "tabPageTransform"; + this.tabPageTransform.Padding = new System.Windows.Forms.Padding(3); + this.tabPageTransform.Size = new System.Drawing.Size(468, 320); + this.tabPageTransform.TabIndex = 36; + this.tabPageTransform.Tag = "Transform"; + this.tabPageTransform.Text = "Transform"; + this.tabPageTransform.UseVisualStyleBackColor = true; + // + // listBoxTransform + // + this.listBoxTransform.BackColor = System.Drawing.Color.GhostWhite; + this.listBoxTransform.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.listBoxTransform.Dock = System.Windows.Forms.DockStyle.Fill; + this.listBoxTransform.FormattingEnabled = true; + this.listBoxTransform.Location = new System.Drawing.Point(3, 3); + this.listBoxTransform.Name = "listBoxTransform"; + this.listBoxTransform.Size = new System.Drawing.Size(462, 314); + this.listBoxTransform.TabIndex = 1; + this.listBoxTransform.Tag = "Transform"; + // + // labelItemOdds + // + this.labelItemOdds.AutoSize = true; + this.labelItemOdds.Location = new System.Drawing.Point(6, 93); + this.labelItemOdds.Name = "labelItemOdds"; + this.labelItemOdds.Size = new System.Drawing.Size(52, 13); + this.labelItemOdds.TabIndex = 7; + this.labelItemOdds.Text = "Odds: 1 /"; + // + // textBoxMinLevel + // + this.textBoxMinLevel.Location = new System.Drawing.Point(51, 22); + this.textBoxMinLevel.Name = "textBoxMinLevel"; + this.textBoxMinLevel.Size = new System.Drawing.Size(30, 20); + this.textBoxMinLevel.TabIndex = 11; + this.textBoxMinLevel.TextChanged += new System.EventHandler(this.FilterValueChange); + // + // textBoxMaxLevel + // + this.textBoxMaxLevel.Location = new System.Drawing.Point(103, 22); + this.textBoxMaxLevel.Name = "textBoxMaxLevel"; + this.textBoxMaxLevel.Size = new System.Drawing.Size(30, 20); + this.textBoxMaxLevel.TabIndex = 12; + this.textBoxMaxLevel.TextChanged += new System.EventHandler(this.FilterValueChange); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(87, 25); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(10, 13); + this.label1.TabIndex = 13; + this.label1.Text = "-"; + // + // textBoxItemOdds + // + this.textBoxItemOdds.Location = new System.Drawing.Point(64, 90); + this.textBoxItemOdds.Name = "textBoxItemOdds"; + this.textBoxItemOdds.Size = new System.Drawing.Size(69, 20); + this.textBoxItemOdds.TabIndex = 14; + // + // labelRange + // + this.labelRange.AutoSize = true; + this.labelRange.Location = new System.Drawing.Point(6, 25); + this.labelRange.Name = "labelRange"; + this.labelRange.Size = new System.Drawing.Size(39, 13); + this.labelRange.TabIndex = 15; + this.labelRange.Text = "Range"; + // + // labelGold + // + this.labelGold.AutoSize = true; + this.labelGold.Location = new System.Drawing.Point(6, 53); + this.labelGold.Name = "labelGold"; + this.labelGold.Size = new System.Drawing.Size(32, 13); + this.labelGold.TabIndex = 16; + this.labelGold.Text = "Gold:"; + // + // textBoxGoldOdds + // + this.textBoxGoldOdds.Location = new System.Drawing.Point(64, 22); + this.textBoxGoldOdds.Name = "textBoxGoldOdds"; + this.textBoxGoldOdds.Size = new System.Drawing.Size(69, 20); + this.textBoxGoldOdds.TabIndex = 19; + this.textBoxGoldOdds.TextChanged += new System.EventHandler(this.GoldDropChange); + // + // labelGoldOdds + // + this.labelGoldOdds.AutoSize = true; + this.labelGoldOdds.Location = new System.Drawing.Point(6, 25); + this.labelGoldOdds.Name = "labelGoldOdds"; + this.labelGoldOdds.Size = new System.Drawing.Size(52, 13); + this.labelGoldOdds.TabIndex = 18; + this.labelGoldOdds.Text = "Odds: 1 /"; + // + // groupBoxGold + // + this.groupBoxGold.Controls.Add(this.buttonUpdateGold); + this.groupBoxGold.Controls.Add(this.textBoxGoldAmount); + this.groupBoxGold.Controls.Add(this.textBoxGoldOdds); + this.groupBoxGold.Controls.Add(this.labelGold); + this.groupBoxGold.Controls.Add(this.labelGoldOdds); + this.groupBoxGold.Location = new System.Drawing.Point(205, 427); + this.groupBoxGold.Name = "groupBoxGold"; + this.groupBoxGold.Size = new System.Drawing.Size(144, 121); + this.groupBoxGold.TabIndex = 20; + this.groupBoxGold.TabStop = false; + this.groupBoxGold.Text = "Gold Settings"; + // + // buttonUpdateGold + // + this.buttonUpdateGold.Enabled = false; + this.buttonUpdateGold.ImageAlign = System.Drawing.ContentAlignment.MiddleRight; + this.buttonUpdateGold.Location = new System.Drawing.Point(9, 85); + this.buttonUpdateGold.Name = "buttonUpdateGold"; + this.buttonUpdateGold.Size = new System.Drawing.Size(124, 28); + this.buttonUpdateGold.TabIndex = 21; + this.buttonUpdateGold.Text = "Update"; + this.buttonUpdateGold.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; + this.buttonUpdateGold.UseVisualStyleBackColor = true; + this.buttonUpdateGold.Click += new System.EventHandler(this.buttonUpdateGold_Click); + // + // textBoxGoldAmount + // + this.textBoxGoldAmount.Location = new System.Drawing.Point(44, 50); + this.textBoxGoldAmount.Name = "textBoxGoldAmount"; + this.textBoxGoldAmount.Size = new System.Drawing.Size(89, 20); + this.textBoxGoldAmount.TabIndex = 20; + this.textBoxGoldAmount.TextChanged += new System.EventHandler(this.GoldDropChange); + // + // groupBoxItem + // + this.groupBoxItem.Controls.Add(this.QuestOnlyCheckBox); + this.groupBoxItem.Controls.Add(this.checkBoxCap); + this.groupBoxItem.Controls.Add(this.labelRange); + this.groupBoxItem.Controls.Add(this.textBoxMinLevel); + this.groupBoxItem.Controls.Add(this.textBoxItemOdds); + this.groupBoxItem.Controls.Add(this.textBoxMaxLevel); + this.groupBoxItem.Controls.Add(this.label1); + this.groupBoxItem.Controls.Add(this.labelItemOdds); + this.groupBoxItem.Location = new System.Drawing.Point(360, 427); + this.groupBoxItem.Name = "groupBoxItem"; + this.groupBoxItem.Size = new System.Drawing.Size(144, 121); + this.groupBoxItem.TabIndex = 21; + this.groupBoxItem.TabStop = false; + this.groupBoxItem.Text = "Item Settings"; + // + // QuestOnlyCheckBox + // + this.QuestOnlyCheckBox.AutoSize = true; + this.QuestOnlyCheckBox.Location = new System.Drawing.Point(9, 67); + this.QuestOnlyCheckBox.Name = "QuestOnlyCheckBox"; + this.QuestOnlyCheckBox.Size = new System.Drawing.Size(78, 17); + this.QuestOnlyCheckBox.TabIndex = 17; + this.QuestOnlyCheckBox.Text = "Quest Only"; + this.QuestOnlyCheckBox.UseVisualStyleBackColor = true; + // + // checkBoxCap + // + this.checkBoxCap.AutoSize = true; + this.checkBoxCap.Location = new System.Drawing.Point(9, 48); + this.checkBoxCap.Name = "checkBoxCap"; + this.checkBoxCap.Size = new System.Drawing.Size(128, 17); + this.checkBoxCap.TabIndex = 16; + this.checkBoxCap.Text = "Set cap to mobs level"; + this.checkBoxCap.UseVisualStyleBackColor = true; + this.checkBoxCap.CheckedChanged += new System.EventHandler(this.checkBoxCap_CheckedChanged); + // + // buttonEdit + // + this.buttonEdit.Location = new System.Drawing.Point(528, 491); + this.buttonEdit.Name = "buttonEdit"; + this.buttonEdit.Size = new System.Drawing.Size(124, 42); + this.buttonEdit.TabIndex = 9; + this.buttonEdit.Text = "Edit Drop File"; + this.buttonEdit.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + this.buttonEdit.UseVisualStyleBackColor = true; + this.buttonEdit.Click += new System.EventHandler(this.buttonEdit_Click); + // + // buttonAdd + // + this.buttonAdd.Location = new System.Drawing.Point(528, 443); + this.buttonAdd.Name = "buttonAdd"; + this.buttonAdd.Size = new System.Drawing.Size(124, 42); + this.buttonAdd.TabIndex = 8; + this.buttonAdd.Text = "Add Item"; + this.buttonAdd.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + this.buttonAdd.UseVisualStyleBackColor = true; + this.buttonAdd.Click += new System.EventHandler(this.buttonAdd_Click); + // + // labelMobLevel + // + this.labelMobLevel.AutoSize = true; + this.labelMobLevel.Location = new System.Drawing.Point(680, 12); + this.labelMobLevel.Name = "labelMobLevel"; + this.labelMobLevel.Size = new System.Drawing.Size(86, 13); + this.labelMobLevel.TabIndex = 22; + this.labelMobLevel.Text = "Currently Editing:"; + // + // labelMonsterList + // + this.labelMonsterList.AutoSize = true; + this.labelMonsterList.Location = new System.Drawing.Point(12, 12); + this.labelMonsterList.Name = "labelMonsterList"; + this.labelMonsterList.Size = new System.Drawing.Size(79, 13); + this.labelMonsterList.TabIndex = 23; + this.labelMonsterList.Text = "Monster Count:"; + // + // textBoxSearch + // + this.textBoxSearch.BackColor = System.Drawing.SystemColors.Info; + this.textBoxSearch.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.textBoxSearch.Location = new System.Drawing.Point(59, 31); + this.textBoxSearch.Name = "textBoxSearch"; + this.textBoxSearch.Size = new System.Drawing.Size(133, 20); + this.textBoxSearch.TabIndex = 24; + this.textBoxSearch.TextChanged += new System.EventHandler(this.textBoxSearch_TextChanged); + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(12, 33); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(44, 13); + this.label2.TabIndex = 25; + this.label2.Text = "Search:"; + // + // DropGenForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(969, 562); + this.Controls.Add(this.label2); + this.Controls.Add(this.textBoxSearch); + this.Controls.Add(this.labelMonsterList); + this.Controls.Add(this.labelMobLevel); + this.Controls.Add(this.groupBoxItem); + this.Controls.Add(this.groupBoxGold); + this.Controls.Add(this.buttonEdit); + this.Controls.Add(this.tabControlSeperateItems); + this.Controls.Add(this.textBoxDropList); + this.Controls.Add(this.buttonAdd); + this.Controls.Add(this.listBoxMonsters); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.Name = "DropGenForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Drop Builder"; + this.tabControlSeperateItems.ResumeLayout(false); + this.tabPageAmulet.ResumeLayout(false); + this.tabPageArmour.ResumeLayout(false); + this.tabPageBait.ResumeLayout(false); + this.tabPageBells.ResumeLayout(false); + this.tabPageBelt.ResumeLayout(false); + this.tabPageBook.ResumeLayout(false); + this.tabPageBoot.ResumeLayout(false); + this.tabPageBracelet.ResumeLayout(false); + this.tabPageCraftingMaterial.ResumeLayout(false); + this.tabPageFinder.ResumeLayout(false); + this.tabPageFish.ResumeLayout(false); + this.tabPageFloat.ResumeLayout(false); + this.tabPageFood.ResumeLayout(false); + this.tabPageGem.ResumeLayout(false); + this.tabPageHelmet.ResumeLayout(false); + this.tabPageHook.ResumeLayout(false); + this.tabPageMask.ResumeLayout(false); + this.tabPageMeat.ResumeLayout(false); + this.tabPageMount.ResumeLayout(false); + this.tabPageNecklace.ResumeLayout(false); + this.tabPageNothing.ResumeLayout(false); + this.tabPageOre.ResumeLayout(false); + this.tabPagePotion.ResumeLayout(false); + this.tabPageQuest.ResumeLayout(false); + this.tabPageReel.ResumeLayout(false); + this.tabPageReins.ResumeLayout(false); + this.tabPageRibbon.ResumeLayout(false); + this.tabPageRing.ResumeLayout(false); + this.tabPageSaddle.ResumeLayout(false); + this.tabPageScript.ResumeLayout(false); + this.tabPageScroll.ResumeLayout(false); + this.tabPageStone.ResumeLayout(false); + this.tabPageTorch.ResumeLayout(false); + this.tabPageWeapon.ResumeLayout(false); + this.tabPageAwakening.ResumeLayout(false); + this.tabPagePets.ResumeLayout(false); + this.tabPageTransform.ResumeLayout(false); + this.groupBoxGold.ResumeLayout(false); + this.groupBoxGold.PerformLayout(); + this.groupBoxItem.ResumeLayout(false); + this.groupBoxItem.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ListBox listBoxMonsters; + private System.Windows.Forms.TextBox textBoxDropList; + private System.Windows.Forms.ListBox listBoxWeapon; + private System.Windows.Forms.TabControl tabControlSeperateItems; + private System.Windows.Forms.TabPage tabPageWeapon; + private System.Windows.Forms.TabPage tabPageArmour; + private System.Windows.Forms.TabPage tabPageHelmet; + private System.Windows.Forms.TabPage tabPageNecklace; + private System.Windows.Forms.TabPage tabPageBracelet; + private System.Windows.Forms.TabPage tabPageRing; + private System.Windows.Forms.TabPage tabPageAmulet; + private System.Windows.Forms.TabPage tabPageBelt; + private System.Windows.Forms.TabPage tabPageBoot; + private System.Windows.Forms.TabPage tabPageStone; + private System.Windows.Forms.TabPage tabPageTorch; + private System.Windows.Forms.TabPage tabPagePotion; + private System.Windows.Forms.TabPage tabPageOre; + private System.Windows.Forms.Label labelItemOdds; + private System.Windows.Forms.Button buttonAdd; + private System.Windows.Forms.Button buttonEdit; + private System.Windows.Forms.TabPage tabPageMeat; + private System.Windows.Forms.TabPage tabPageCraftingMaterial; + private System.Windows.Forms.TabPage tabPageScroll; + private System.Windows.Forms.TabPage tabPageGem; + private System.Windows.Forms.TabPage tabPageMount; + private System.Windows.Forms.TabPage tabPageBook; + private System.Windows.Forms.ListBox listBoxArmour; + private System.Windows.Forms.ListBox listBoxHelmet; + private System.Windows.Forms.ListBox listBoxNecklace; + private System.Windows.Forms.ListBox listBoxBracelet; + private System.Windows.Forms.ListBox listBoxRing; + private System.Windows.Forms.ListBox listBoxAmulet; + private System.Windows.Forms.ListBox listBoxBelt; + private System.Windows.Forms.ListBox listBoxBoot; + private System.Windows.Forms.ListBox listBoxStone; + private System.Windows.Forms.ListBox listBoxTorch; + private System.Windows.Forms.ListBox listBoxPotion; + private System.Windows.Forms.ListBox listBoxOre; + private System.Windows.Forms.ListBox listBoxMeat; + private System.Windows.Forms.ListBox listBoxCraftingMaterial; + private System.Windows.Forms.ListBox listBoxScroll; + private System.Windows.Forms.ListBox listBoxGem; + private System.Windows.Forms.ListBox listBoxMount; + private System.Windows.Forms.ListBox listBoxBook; + private System.Windows.Forms.TextBox textBoxMinLevel; + private System.Windows.Forms.TextBox textBoxMaxLevel; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox textBoxItemOdds; + private System.Windows.Forms.Label labelRange; + private System.Windows.Forms.Label labelGold; + private System.Windows.Forms.TextBox textBoxGoldOdds; + private System.Windows.Forms.Label labelGoldOdds; + private System.Windows.Forms.GroupBox groupBoxGold; + private System.Windows.Forms.TextBox textBoxGoldAmount; + private System.Windows.Forms.GroupBox groupBoxItem; + private System.Windows.Forms.TabPage tabPageNothing; + private System.Windows.Forms.ListBox listBoxNothing; + private System.Windows.Forms.CheckBox checkBoxCap; + private System.Windows.Forms.Button buttonUpdateGold; + private System.Windows.Forms.Label labelMobLevel; + private System.Windows.Forms.Label labelMonsterList; + private System.Windows.Forms.TabPage tabPageScript; + private System.Windows.Forms.TabPage tabPageReins; + private System.Windows.Forms.TabPage tabPageBells; + private System.Windows.Forms.TabPage tabPageSaddle; + private System.Windows.Forms.TabPage tabPageRibbon; + private System.Windows.Forms.TabPage tabPageMask; + private System.Windows.Forms.TabPage tabPageFood; + private System.Windows.Forms.TabPage tabPageHook; + private System.Windows.Forms.TabPage tabPageFloat; + private System.Windows.Forms.TabPage tabPageBait; + private System.Windows.Forms.TabPage tabPageFinder; + private System.Windows.Forms.TabPage tabPageReel; + private System.Windows.Forms.TabPage tabPageFish; + private System.Windows.Forms.TabPage tabPageQuest; + private System.Windows.Forms.ListBox listBoxSaddle; + private System.Windows.Forms.ListBox listBoxBait; + private System.Windows.Forms.ListBox listBoxBells; + private System.Windows.Forms.ListBox listBoxQuest; + private System.Windows.Forms.ListBox listBoxReel; + private System.Windows.Forms.ListBox listBoxReins; + private System.Windows.Forms.ListBox listBoxRibbon; + private System.Windows.Forms.ListBox listBoxFinder; + private System.Windows.Forms.ListBox listBoxFish; + private System.Windows.Forms.ListBox listBoxFloat; + private System.Windows.Forms.ListBox listBoxFood; + private System.Windows.Forms.ListBox listBoxHook; + private System.Windows.Forms.ListBox listBoxMask; + private System.Windows.Forms.ListBox listBoxScript; + private System.Windows.Forms.TextBox textBoxSearch; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.CheckBox QuestOnlyCheckBox; + private System.Windows.Forms.TabPage tabPageAwakening; + private System.Windows.Forms.ListBox listBoxAwakening; + private System.Windows.Forms.TabPage tabPagePets; + private System.Windows.Forms.TabPage tabPageTransform; + private System.Windows.Forms.ListBox listBoxPets; + private System.Windows.Forms.ListBox listBoxTransform; + + } +} + diff --git a/Server.MirForms/DropBuilder/DropBuilderForm.resx b/Server.MirForms/DropBuilder/DropBuilderForm.resx new file mode 100644 index 0000000..9f71a54 --- /dev/null +++ b/Server.MirForms/DropBuilder/DropBuilderForm.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 60 + + \ No newline at end of file diff --git a/Server.MirForms/Program.cs b/Server.MirForms/Program.cs new file mode 100644 index 0000000..1ba45e2 --- /dev/null +++ b/Server.MirForms/Program.cs @@ -0,0 +1,31 @@ +namespace Server.MirForms +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Packet.IsServer = true; + + log4net.Config.XmlConfigurator.Configure(); + + try + { + Settings.Load(); + + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new SMain()); + + Settings.Save(); + } + catch(Exception ex) + { + Logger.GetLogger().Error(ex); + } + } + } +} diff --git a/Server.MirForms/Properties/Settings.Designer.cs b/Server.MirForms/Properties/Settings.Designer.cs new file mode 100644 index 0000000..3b4fbe2 --- /dev/null +++ b/Server.MirForms/Properties/Settings.Designer.cs @@ -0,0 +1,38 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Server.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.7.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; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string selectedDirectory { + get { + return ((string)(this["selectedDirectory"])); + } + set { + this["selectedDirectory"] = value; + } + } + } +} diff --git a/Server.MirForms/Properties/Settings.settings b/Server.MirForms/Properties/Settings.settings new file mode 100644 index 0000000..65c054f --- /dev/null +++ b/Server.MirForms/Properties/Settings.settings @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/Server.MirForms/SMain.Designer.cs b/Server.MirForms/SMain.Designer.cs new file mode 100644 index 0000000..b12844c --- /dev/null +++ b/Server.MirForms/SMain.Designer.cs @@ -0,0 +1,792 @@ +using System; +using System.ComponentModel; +using System.Drawing; +using System.Windows.Forms; +using Timer = System.Windows.Forms.Timer; + +namespace Server +{ + partial class SMain + { + /// + /// Required designer variable. + /// + private 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() + { + components = new Container(); + ComponentResourceManager resources = new ComponentResourceManager(typeof(SMain)); + MainTabs = new TabControl(); + tabPage1 = new TabPage(); + LogTextBox = new TextBox(); + tabPage2 = new TabPage(); + DebugLogTextBox = new TextBox(); + tabPage3 = new TabPage(); + groupBox1 = new GroupBox(); + GlobalMessageButton = new Button(); + GlobalMessageTextBox = new TextBox(); + ChatLogTextBox = new TextBox(); + tabPage4 = new TabPage(); + PlayersOnlineListView = new CustomFormControl.ListViewNF(); + indexHeader = new ColumnHeader(); + nameHeader = new ColumnHeader(); + levelHeader = new ColumnHeader(); + classHeader = new ColumnHeader(); + genderHeader = new ColumnHeader(); + MapHeader = new ColumnHeader(); + tabPage5 = new TabPage(); + GuildListView = new CustomFormControl.ListViewNF(); + columnHeader1 = new ColumnHeader(); + columnHeader2 = new ColumnHeader(); + columnHeader3 = new ColumnHeader(); + columnHeader4 = new ColumnHeader(); + columnHeader5 = new ColumnHeader(); + columnHeader6 = new ColumnHeader(); + StatusBar = new StatusStrip(); + PlayersLabel = new ToolStripStatusLabel(); + ConnectionsLabel = new ToolStripStatusLabel(); + BlockedIPsLabel = new ToolStripStatusLabel(); + MonsterLabel = new ToolStripStatusLabel(); + CycleDelayLabel = new ToolStripStatusLabel(); + MainMenu = new MenuStrip(); + controlToolStripMenuItem = new ToolStripMenuItem(); + clearBlockedIPsToolStripMenuItem = new ToolStripMenuItem(); + toolStripMenuItem1 = new ToolStripSeparator(); + toolStripSeparator1 = new ToolStripSeparator(); + closeServerToolStripMenuItem = new ToolStripMenuItem(); + reloadToolStripMenuItem = new ToolStripMenuItem(); + reloadNPCsToolStripMenuItem1 = new ToolStripMenuItem(); + reloadDropsToolStripMenuItem1 = new ToolStripMenuItem(); + lineMessageToolStripMenuItem = new ToolStripMenuItem(); + accountToolStripMenuItem = new ToolStripMenuItem(); + databaseFormsToolStripMenuItem = new ToolStripMenuItem(); + mapInfoToolStripMenuItem = new ToolStripMenuItem(); + itemInfoToolStripMenuItem = new ToolStripMenuItem(); + monsterInfoToolStripMenuItem = new ToolStripMenuItem(); + itemNEWToolStripMenuItem = new ToolStripMenuItem(); + monsterExperimentalToolStripMenuItem = new ToolStripMenuItem(); + nPCInfoToolStripMenuItem = new ToolStripMenuItem(); + questInfoToolStripMenuItem = new ToolStripMenuItem(); + magicInfoToolStripMenuItem = new ToolStripMenuItem(); + gameshopToolStripMenuItem = new ToolStripMenuItem(); + configToolStripMenuItem1 = new ToolStripMenuItem(); + serverToolStripMenuItem = new ToolStripMenuItem(); + balanceToolStripMenuItem = new ToolStripMenuItem(); + systemToolStripMenuItem = new ToolStripMenuItem(); + dragonSystemToolStripMenuItem = new ToolStripMenuItem(); + miningToolStripMenuItem = new ToolStripMenuItem(); + guildsToolStripMenuItem = new ToolStripMenuItem(); + fishingToolStripMenuItem = new ToolStripMenuItem(); + mailToolStripMenuItem = new ToolStripMenuItem(); + goodsToolStripMenuItem = new ToolStripMenuItem(); + refiningToolStripMenuItem = new ToolStripMenuItem(); + relationshipToolStripMenuItem = new ToolStripMenuItem(); + mentorToolStripMenuItem = new ToolStripMenuItem(); + gemToolStripMenuItem = new ToolStripMenuItem(); + conquestToolStripMenuItem = new ToolStripMenuItem(); + respawnsToolStripMenuItem = new ToolStripMenuItem(); + InterfaceTimer = new Timer(components); + UpTimeLabel = new Label(); + MainTabs.SuspendLayout(); + tabPage1.SuspendLayout(); + tabPage2.SuspendLayout(); + tabPage3.SuspendLayout(); + groupBox1.SuspendLayout(); + tabPage4.SuspendLayout(); + tabPage5.SuspendLayout(); + StatusBar.SuspendLayout(); + MainMenu.SuspendLayout(); + SuspendLayout(); + // + // MainTabs + // + MainTabs.Controls.Add(tabPage1); + MainTabs.Controls.Add(tabPage2); + MainTabs.Controls.Add(tabPage3); + MainTabs.Controls.Add(tabPage4); + MainTabs.Controls.Add(tabPage5); + MainTabs.Dock = DockStyle.Fill; + MainTabs.Location = new Point(0, 24); + MainTabs.Margin = new Padding(4, 3, 4, 3); + MainTabs.Name = "MainTabs"; + MainTabs.SelectedIndex = 0; + MainTabs.Size = new Size(621, 407); + MainTabs.TabIndex = 5; + MainTabs.SelectedIndexChanged += MainTabs_SelectedIndexChanged; + // + // tabPage1 + // + tabPage1.Controls.Add(LogTextBox); + tabPage1.Location = new Point(4, 24); + tabPage1.Margin = new Padding(4, 3, 4, 3); + tabPage1.Name = "tabPage1"; + tabPage1.Padding = new Padding(4, 3, 4, 3); + tabPage1.Size = new Size(613, 379); + tabPage1.TabIndex = 0; + tabPage1.Text = "Logs"; + tabPage1.UseVisualStyleBackColor = true; + // + // LogTextBox + // + LogTextBox.Dock = DockStyle.Fill; + LogTextBox.Location = new Point(4, 3); + LogTextBox.Margin = new Padding(4, 3, 4, 3); + LogTextBox.Multiline = true; + LogTextBox.Name = "LogTextBox"; + LogTextBox.ReadOnly = true; + LogTextBox.ScrollBars = ScrollBars.Vertical; + LogTextBox.Size = new Size(605, 373); + LogTextBox.TabIndex = 2; + // + // tabPage2 + // + tabPage2.Controls.Add(DebugLogTextBox); + tabPage2.Location = new Point(4, 24); + tabPage2.Margin = new Padding(4, 3, 4, 3); + tabPage2.Name = "tabPage2"; + tabPage2.Padding = new Padding(4, 3, 4, 3); + tabPage2.Size = new Size(613, 379); + tabPage2.TabIndex = 1; + tabPage2.Text = "Debug Logs"; + tabPage2.UseVisualStyleBackColor = true; + // + // DebugLogTextBox + // + DebugLogTextBox.Dock = DockStyle.Fill; + DebugLogTextBox.Location = new Point(4, 3); + DebugLogTextBox.Margin = new Padding(4, 3, 4, 3); + DebugLogTextBox.Multiline = true; + DebugLogTextBox.Name = "DebugLogTextBox"; + DebugLogTextBox.ReadOnly = true; + DebugLogTextBox.ScrollBars = ScrollBars.Vertical; + DebugLogTextBox.Size = new Size(605, 373); + DebugLogTextBox.TabIndex = 3; + // + // tabPage3 + // + tabPage3.Controls.Add(groupBox1); + tabPage3.Controls.Add(ChatLogTextBox); + tabPage3.Location = new Point(4, 24); + tabPage3.Margin = new Padding(4, 3, 4, 3); + tabPage3.Name = "tabPage3"; + tabPage3.Padding = new Padding(4, 3, 4, 3); + tabPage3.Size = new Size(613, 379); + tabPage3.TabIndex = 2; + tabPage3.Text = "Chat Logs"; + tabPage3.UseVisualStyleBackColor = true; + // + // groupBox1 + // + groupBox1.Controls.Add(GlobalMessageButton); + groupBox1.Controls.Add(GlobalMessageTextBox); + groupBox1.Dock = DockStyle.Bottom; + groupBox1.Location = new Point(4, 323); + groupBox1.Margin = new Padding(4, 3, 4, 3); + groupBox1.Name = "groupBox1"; + groupBox1.Padding = new Padding(4, 3, 4, 3); + groupBox1.Size = new Size(605, 53); + groupBox1.TabIndex = 7; + groupBox1.TabStop = false; + groupBox1.Text = "Send Message"; + // + // GlobalMessageButton + // + GlobalMessageButton.Location = new Point(457, 16); + GlobalMessageButton.Margin = new Padding(4, 3, 4, 3); + GlobalMessageButton.Name = "GlobalMessageButton"; + GlobalMessageButton.Size = new Size(85, 28); + GlobalMessageButton.TabIndex = 0; + GlobalMessageButton.Text = "Send"; + GlobalMessageButton.UseVisualStyleBackColor = true; + GlobalMessageButton.Click += GlobalMessageButton_Click; + // + // GlobalMessageTextBox + // + GlobalMessageTextBox.Location = new Point(7, 20); + GlobalMessageTextBox.Margin = new Padding(4, 3, 4, 3); + GlobalMessageTextBox.Name = "GlobalMessageTextBox"; + GlobalMessageTextBox.Size = new Size(443, 23); + GlobalMessageTextBox.TabIndex = 0; + // + // ChatLogTextBox + // + ChatLogTextBox.Dock = DockStyle.Top; + ChatLogTextBox.Location = new Point(4, 3); + ChatLogTextBox.Margin = new Padding(4, 3, 4, 3); + ChatLogTextBox.Multiline = true; + ChatLogTextBox.Name = "ChatLogTextBox"; + ChatLogTextBox.ReadOnly = true; + ChatLogTextBox.ScrollBars = ScrollBars.Vertical; + ChatLogTextBox.Size = new Size(605, 310); + ChatLogTextBox.TabIndex = 4; + // + // tabPage4 + // + tabPage4.BackColor = SystemColors.Control; + tabPage4.Controls.Add(PlayersOnlineListView); + tabPage4.Location = new Point(4, 24); + tabPage4.Margin = new Padding(4, 3, 4, 3); + tabPage4.Name = "tabPage4"; + tabPage4.Padding = new Padding(4, 3, 4, 3); + tabPage4.Size = new Size(613, 379); + tabPage4.TabIndex = 3; + tabPage4.Text = "Players Online"; + // + // PlayersOnlineListView + // + PlayersOnlineListView.Activation = ItemActivation.OneClick; + PlayersOnlineListView.BackColor = SystemColors.Window; + PlayersOnlineListView.Columns.AddRange(new ColumnHeader[] { indexHeader, nameHeader, levelHeader, classHeader, genderHeader, MapHeader }); + PlayersOnlineListView.Dock = DockStyle.Fill; + PlayersOnlineListView.FullRowSelect = true; + PlayersOnlineListView.GridLines = true; + PlayersOnlineListView.Location = new Point(4, 3); + PlayersOnlineListView.Margin = new Padding(4, 3, 4, 3); + PlayersOnlineListView.Name = "PlayersOnlineListView"; + PlayersOnlineListView.Size = new Size(605, 373); + PlayersOnlineListView.Sorting = SortOrder.Ascending; + PlayersOnlineListView.TabIndex = 0; + PlayersOnlineListView.UseCompatibleStateImageBehavior = false; + PlayersOnlineListView.View = View.Details; + PlayersOnlineListView.ColumnWidthChanging += PlayersOnlineListView_ColumnWidthChanging; + PlayersOnlineListView.DoubleClick += PlayersOnlineListView_DoubleClick; + // + // indexHeader + // + indexHeader.Text = "Index"; + indexHeader.Width = 71; + // + // nameHeader + // + nameHeader.Text = "Name"; + nameHeader.Width = 93; + // + // levelHeader + // + levelHeader.Text = "Level"; + levelHeader.Width = 90; + // + // classHeader + // + classHeader.Text = "Class"; + classHeader.Width = 100; + // + // genderHeader + // + genderHeader.Text = "Gender"; + genderHeader.Width = 98; + // + // MapHeader + // + MapHeader.Text = "Current Map"; + MapHeader.Width = 150; + // + // tabPage5 + // + tabPage5.Controls.Add(GuildListView); + tabPage5.Location = new Point(4, 24); + tabPage5.Name = "tabPage5"; + tabPage5.Padding = new Padding(3); + tabPage5.Size = new Size(613, 379); + tabPage5.TabIndex = 4; + tabPage5.Text = "Guilds"; + tabPage5.UseVisualStyleBackColor = true; + // + // GuildListView + // + GuildListView.Columns.AddRange(new ColumnHeader[] { columnHeader1, columnHeader2, columnHeader3, columnHeader4, columnHeader5, columnHeader6 }); + GuildListView.FullRowSelect = true; + GuildListView.GridLines = true; + GuildListView.Location = new Point(0, 0); + GuildListView.MultiSelect = false; + GuildListView.Name = "GuildListView"; + GuildListView.Size = new Size(617, 379); + GuildListView.TabIndex = 0; + GuildListView.UseCompatibleStateImageBehavior = false; + GuildListView.View = View.Details; + GuildListView.DoubleClick += GuildListView_DoubleClick; + // + // columnHeader1 + // + columnHeader1.Text = "Index"; + // + // columnHeader2 + // + columnHeader2.Text = "Name"; + columnHeader2.Width = 115; + // + // columnHeader3 + // + columnHeader3.Text = "Leader"; + columnHeader3.Width = 100; + // + // columnHeader4 + // + columnHeader4.Text = "Member Count"; + columnHeader4.Width = 100; + // + // columnHeader5 + // + columnHeader5.Text = "Level"; + columnHeader5.Width = 75; + // + // columnHeader6 + // + columnHeader6.Text = "Gold"; + columnHeader6.Width = 120; + // + // StatusBar + // + StatusBar.Items.AddRange(new ToolStripItem[] { PlayersLabel, ConnectionsLabel, BlockedIPsLabel, MonsterLabel, CycleDelayLabel }); + StatusBar.Location = new Point(0, 431); + StatusBar.Name = "StatusBar"; + StatusBar.Padding = new Padding(1, 0, 16, 0); + StatusBar.Size = new Size(621, 24); + StatusBar.SizingGrip = false; + StatusBar.TabIndex = 4; + StatusBar.Text = "statusStrip1"; + // + // PlayersLabel + // + PlayersLabel.BorderSides = ToolStripStatusLabelBorderSides.Left | ToolStripStatusLabelBorderSides.Top | ToolStripStatusLabelBorderSides.Right | ToolStripStatusLabelBorderSides.Bottom; + PlayersLabel.Name = "PlayersLabel"; + PlayersLabel.Size = new Size(60, 19); + PlayersLabel.Text = "Players: 0"; + // + // ConnectionsLabel + // + ConnectionsLabel.BorderSides = ToolStripStatusLabelBorderSides.Left | ToolStripStatusLabelBorderSides.Top | ToolStripStatusLabelBorderSides.Right | ToolStripStatusLabelBorderSides.Bottom; + ConnectionsLabel.Name = "ConnectionsLabel"; + ConnectionsLabel.Size = new Size(90, 19); + ConnectionsLabel.Text = "Connections: 0"; + // + // BlockedIPsLabel + // + BlockedIPsLabel.BorderSides = ToolStripStatusLabelBorderSides.Left | ToolStripStatusLabelBorderSides.Top | ToolStripStatusLabelBorderSides.Right | ToolStripStatusLabelBorderSides.Bottom; + BlockedIPsLabel.Name = "BlockedIPsLabel"; + BlockedIPsLabel.Size = new Size(83, 19); + BlockedIPsLabel.Text = "Blocked IPs: 0"; + // + // MonsterLabel + // + MonsterLabel.BorderSides = ToolStripStatusLabelBorderSides.Left | ToolStripStatusLabelBorderSides.Top | ToolStripStatusLabelBorderSides.Right | ToolStripStatusLabelBorderSides.Bottom; + MonsterLabel.Name = "MonsterLabel"; + MonsterLabel.Size = new Size(72, 19); + MonsterLabel.Text = "Monsters: 0"; + // + // CycleDelayLabel + // + CycleDelayLabel.BorderSides = ToolStripStatusLabelBorderSides.Left | ToolStripStatusLabelBorderSides.Top | ToolStripStatusLabelBorderSides.Right | ToolStripStatusLabelBorderSides.Bottom; + CycleDelayLabel.Name = "CycleDelayLabel"; + CycleDelayLabel.Size = new Size(81, 19); + CycleDelayLabel.Text = "CycleDelay: 0"; + // + // MainMenu + // + MainMenu.Items.AddRange(new ToolStripItem[] { controlToolStripMenuItem, accountToolStripMenuItem, databaseFormsToolStripMenuItem, configToolStripMenuItem1 }); + MainMenu.Location = new Point(0, 0); + MainMenu.Name = "MainMenu"; + MainMenu.Padding = new Padding(7, 2, 0, 2); + MainMenu.Size = new Size(621, 24); + MainMenu.TabIndex = 3; + MainMenu.Text = "menuStrip1"; + // + // controlToolStripMenuItem + // + controlToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { clearBlockedIPsToolStripMenuItem, toolStripMenuItem1, toolStripSeparator1, closeServerToolStripMenuItem, reloadToolStripMenuItem }); + controlToolStripMenuItem.Name = "controlToolStripMenuItem"; + controlToolStripMenuItem.Size = new Size(59, 20); + controlToolStripMenuItem.Text = "Control"; + // + // clearBlockedIPsToolStripMenuItem + // + clearBlockedIPsToolStripMenuItem.Name = "clearBlockedIPsToolStripMenuItem"; + clearBlockedIPsToolStripMenuItem.Size = new Size(164, 22); + clearBlockedIPsToolStripMenuItem.Text = "Clear Blocked IPs"; + clearBlockedIPsToolStripMenuItem.Click += clearBlockedIPsToolStripMenuItem_Click; + // + // toolStripMenuItem1 + // + toolStripMenuItem1.Name = "toolStripMenuItem1"; + toolStripMenuItem1.Size = new Size(161, 6); + // + // toolStripSeparator1 + // + toolStripSeparator1.Name = "toolStripSeparator1"; + toolStripSeparator1.Size = new Size(161, 6); + // + // closeServerToolStripMenuItem + // + closeServerToolStripMenuItem.Name = "closeServerToolStripMenuItem"; + closeServerToolStripMenuItem.Size = new Size(164, 22); + closeServerToolStripMenuItem.Text = "Close Server"; + closeServerToolStripMenuItem.Click += closeServerToolStripMenuItem_Click; + // + // reloadToolStripMenuItem + // + reloadToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { reloadNPCsToolStripMenuItem1, reloadDropsToolStripMenuItem1, lineMessageToolStripMenuItem }); + reloadToolStripMenuItem.Name = "reloadToolStripMenuItem"; + reloadToolStripMenuItem.Size = new Size(164, 22); + reloadToolStripMenuItem.Text = "Reload"; + // + // reloadNPCsToolStripMenuItem1 + // + reloadNPCsToolStripMenuItem1.Name = "reloadNPCsToolStripMenuItem1"; + reloadNPCsToolStripMenuItem1.Size = new Size(145, 22); + reloadNPCsToolStripMenuItem1.Text = "NPCs"; + reloadNPCsToolStripMenuItem1.Click += reloadNPCsToolStripMenuItem1_Click; + // + // reloadDropsToolStripMenuItem1 + // + reloadDropsToolStripMenuItem1.Name = "reloadDropsToolStripMenuItem1"; + reloadDropsToolStripMenuItem1.Size = new Size(145, 22); + reloadDropsToolStripMenuItem1.Text = "Drops"; + reloadDropsToolStripMenuItem1.Click += reloadDropsToolStripMenuItem1_Click; + // + // lineMessageToolStripMenuItem + // + lineMessageToolStripMenuItem.Name = "lineMessageToolStripMenuItem"; + lineMessageToolStripMenuItem.Size = new Size(145, 22); + lineMessageToolStripMenuItem.Text = "Line Message"; + lineMessageToolStripMenuItem.Click += lineMessageToolStripMenuItem_Click; + // + // accountToolStripMenuItem + // + accountToolStripMenuItem.Name = "accountToolStripMenuItem"; + accountToolStripMenuItem.Size = new Size(64, 20); + accountToolStripMenuItem.Text = "Account"; + accountToolStripMenuItem.Click += accountToolStripMenuItem_Click; + // + // databaseFormsToolStripMenuItem + // + databaseFormsToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { mapInfoToolStripMenuItem, itemInfoToolStripMenuItem, monsterInfoToolStripMenuItem, itemNEWToolStripMenuItem, monsterExperimentalToolStripMenuItem, nPCInfoToolStripMenuItem, questInfoToolStripMenuItem, magicInfoToolStripMenuItem, gameshopToolStripMenuItem }); + databaseFormsToolStripMenuItem.Name = "databaseFormsToolStripMenuItem"; + databaseFormsToolStripMenuItem.Size = new Size(67, 20); + databaseFormsToolStripMenuItem.Text = "Database"; + // + // mapInfoToolStripMenuItem + // + mapInfoToolStripMenuItem.Name = "mapInfoToolStripMenuItem"; + mapInfoToolStripMenuItem.Size = new Size(203, 22); + mapInfoToolStripMenuItem.Text = "Map"; + mapInfoToolStripMenuItem.Click += mapInfoToolStripMenuItem_Click; + // + // itemInfoToolStripMenuItem + // + itemInfoToolStripMenuItem.Name = "itemInfoToolStripMenuItem"; + itemInfoToolStripMenuItem.ShowShortcutKeys = false; + itemInfoToolStripMenuItem.Size = new Size(203, 22); + itemInfoToolStripMenuItem.Text = "Item (OLD- HIDDEN)"; + itemInfoToolStripMenuItem.Visible = false; + itemInfoToolStripMenuItem.Click += itemInfoToolStripMenuItem_Click; + // + // monsterInfoToolStripMenuItem + // + monsterInfoToolStripMenuItem.Name = "monsterInfoToolStripMenuItem"; + monsterInfoToolStripMenuItem.Size = new Size(203, 22); + monsterInfoToolStripMenuItem.Text = "Monster(OLD - HIDDEN)"; + monsterInfoToolStripMenuItem.Visible = false; + monsterInfoToolStripMenuItem.Click += monsterInfoToolStripMenuItem_Click; + // + // itemNEWToolStripMenuItem + // + itemNEWToolStripMenuItem.Name = "itemNEWToolStripMenuItem"; + itemNEWToolStripMenuItem.Size = new Size(203, 22); + itemNEWToolStripMenuItem.Text = "Item"; + itemNEWToolStripMenuItem.Click += itemNEWToolStripMenuItem_Click; + // + // monsterExperimentalToolStripMenuItem + // + monsterExperimentalToolStripMenuItem.Name = "monsterExperimentalToolStripMenuItem"; + monsterExperimentalToolStripMenuItem.Size = new Size(203, 22); + monsterExperimentalToolStripMenuItem.Text = "Monster"; + monsterExperimentalToolStripMenuItem.Click += monsterExperimentalToolStripMenuItem_Click; + // + // nPCInfoToolStripMenuItem + // + nPCInfoToolStripMenuItem.Name = "nPCInfoToolStripMenuItem"; + nPCInfoToolStripMenuItem.Size = new Size(203, 22); + nPCInfoToolStripMenuItem.Text = "NPC"; + nPCInfoToolStripMenuItem.Click += nPCInfoToolStripMenuItem_Click; + // + // questInfoToolStripMenuItem + // + questInfoToolStripMenuItem.Name = "questInfoToolStripMenuItem"; + questInfoToolStripMenuItem.Size = new Size(203, 22); + questInfoToolStripMenuItem.Text = "Quest"; + questInfoToolStripMenuItem.Click += questInfoToolStripMenuItem_Click; + // + // magicInfoToolStripMenuItem + // + magicInfoToolStripMenuItem.Name = "magicInfoToolStripMenuItem"; + magicInfoToolStripMenuItem.Size = new Size(203, 22); + magicInfoToolStripMenuItem.Text = "Magic"; + magicInfoToolStripMenuItem.Click += magicInfoToolStripMenuItem_Click; + // + // gameshopToolStripMenuItem + // + gameshopToolStripMenuItem.Name = "gameshopToolStripMenuItem"; + gameshopToolStripMenuItem.Size = new Size(203, 22); + gameshopToolStripMenuItem.Text = "Gameshop"; + gameshopToolStripMenuItem.Click += gameshopToolStripMenuItem_Click; + // + // configToolStripMenuItem1 + // + configToolStripMenuItem1.DropDownItems.AddRange(new ToolStripItem[] { serverToolStripMenuItem, balanceToolStripMenuItem, systemToolStripMenuItem }); + configToolStripMenuItem1.Name = "configToolStripMenuItem1"; + configToolStripMenuItem1.Size = new Size(55, 20); + configToolStripMenuItem1.Text = "Config"; + // + // serverToolStripMenuItem + // + serverToolStripMenuItem.Name = "serverToolStripMenuItem"; + serverToolStripMenuItem.Size = new Size(115, 22); + serverToolStripMenuItem.Text = "Server"; + serverToolStripMenuItem.Click += serverToolStripMenuItem_Click; + // + // balanceToolStripMenuItem + // + balanceToolStripMenuItem.Name = "balanceToolStripMenuItem"; + balanceToolStripMenuItem.Size = new Size(115, 22); + balanceToolStripMenuItem.Text = "Balance"; + balanceToolStripMenuItem.Click += balanceToolStripMenuItem_Click; + // + // systemToolStripMenuItem + // + systemToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { dragonSystemToolStripMenuItem, miningToolStripMenuItem, guildsToolStripMenuItem, fishingToolStripMenuItem, mailToolStripMenuItem, goodsToolStripMenuItem, refiningToolStripMenuItem, relationshipToolStripMenuItem, mentorToolStripMenuItem, gemToolStripMenuItem, conquestToolStripMenuItem, respawnsToolStripMenuItem }); + systemToolStripMenuItem.Name = "systemToolStripMenuItem"; + systemToolStripMenuItem.Size = new Size(115, 22); + systemToolStripMenuItem.Text = "System"; + // + // dragonSystemToolStripMenuItem + // + dragonSystemToolStripMenuItem.Name = "dragonSystemToolStripMenuItem"; + dragonSystemToolStripMenuItem.Size = new Size(139, 22); + dragonSystemToolStripMenuItem.Text = "Dragon"; + dragonSystemToolStripMenuItem.Click += dragonSystemToolStripMenuItem_Click; + // + // miningToolStripMenuItem + // + miningToolStripMenuItem.Name = "miningToolStripMenuItem"; + miningToolStripMenuItem.Size = new Size(139, 22); + miningToolStripMenuItem.Text = "Mining"; + miningToolStripMenuItem.Click += miningToolStripMenuItem_Click; + // + // guildsToolStripMenuItem + // + guildsToolStripMenuItem.Name = "guildsToolStripMenuItem"; + guildsToolStripMenuItem.Size = new Size(139, 22); + guildsToolStripMenuItem.Text = "Guilds"; + guildsToolStripMenuItem.Click += guildsToolStripMenuItem_Click; + // + // fishingToolStripMenuItem + // + fishingToolStripMenuItem.Name = "fishingToolStripMenuItem"; + fishingToolStripMenuItem.Size = new Size(139, 22); + fishingToolStripMenuItem.Text = "Fishing"; + fishingToolStripMenuItem.Click += fishingToolStripMenuItem_Click; + // + // mailToolStripMenuItem + // + mailToolStripMenuItem.Name = "mailToolStripMenuItem"; + mailToolStripMenuItem.Size = new Size(139, 22); + mailToolStripMenuItem.Text = "Mail"; + mailToolStripMenuItem.Click += mailToolStripMenuItem_Click; + // + // goodsToolStripMenuItem + // + goodsToolStripMenuItem.Name = "goodsToolStripMenuItem"; + goodsToolStripMenuItem.Size = new Size(139, 22); + goodsToolStripMenuItem.Text = "Goods"; + goodsToolStripMenuItem.Click += goodsToolStripMenuItem_Click; + // + // refiningToolStripMenuItem + // + refiningToolStripMenuItem.Name = "refiningToolStripMenuItem"; + refiningToolStripMenuItem.Size = new Size(139, 22); + refiningToolStripMenuItem.Text = "Refining"; + refiningToolStripMenuItem.Click += refiningToolStripMenuItem_Click; + // + // relationshipToolStripMenuItem + // + relationshipToolStripMenuItem.Name = "relationshipToolStripMenuItem"; + relationshipToolStripMenuItem.Size = new Size(139, 22); + relationshipToolStripMenuItem.Text = "Relationship"; + relationshipToolStripMenuItem.Click += relationshipToolStripMenuItem_Click; + // + // mentorToolStripMenuItem + // + mentorToolStripMenuItem.Name = "mentorToolStripMenuItem"; + mentorToolStripMenuItem.Size = new Size(139, 22); + mentorToolStripMenuItem.Text = "Mentor"; + mentorToolStripMenuItem.Click += mentorToolStripMenuItem_Click; + // + // gemToolStripMenuItem + // + gemToolStripMenuItem.Name = "gemToolStripMenuItem"; + gemToolStripMenuItem.Size = new Size(139, 22); + gemToolStripMenuItem.Text = "Gem"; + gemToolStripMenuItem.Click += gemToolStripMenuItem_Click; + // + // conquestToolStripMenuItem + // + conquestToolStripMenuItem.Name = "conquestToolStripMenuItem"; + conquestToolStripMenuItem.Size = new Size(139, 22); + conquestToolStripMenuItem.Text = "Conquest"; + conquestToolStripMenuItem.Click += conquestToolStripMenuItem_Click; + // + // respawnsToolStripMenuItem + // + respawnsToolStripMenuItem.Name = "respawnsToolStripMenuItem"; + respawnsToolStripMenuItem.Size = new Size(139, 22); + respawnsToolStripMenuItem.Text = "SpawnTick"; + respawnsToolStripMenuItem.Click += respawnsToolStripMenuItem_Click; + // + // InterfaceTimer + // + InterfaceTimer.Enabled = true; + InterfaceTimer.Tick += InterfaceTimer_Tick; + // + // UpTimeLabel + // + UpTimeLabel.AutoSize = true; + UpTimeLabel.Location = new Point(362, 0); + UpTimeLabel.Name = "UpTimeLabel"; + UpTimeLabel.Size = new Size(49, 15); + UpTimeLabel.TabIndex = 6; + UpTimeLabel.Text = "Uptime:"; + // + // SMain + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + AutoSizeMode = AutoSizeMode.GrowAndShrink; + BackColor = SystemColors.Control; + ClientSize = new Size(621, 455); + Controls.Add(UpTimeLabel); + Controls.Add(MainTabs); + Controls.Add(StatusBar); + Controls.Add(MainMenu); + FormBorderStyle = FormBorderStyle.FixedDialog; + Icon = (Icon)resources.GetObject("$this.Icon"); + Margin = new Padding(4, 3, 4, 3); + MaximizeBox = false; + Name = "SMain"; + Text = "Legend of Mir 1 Server"; + FormClosing += SMain_FormClosing; + Load += SMain_Load; + MainTabs.ResumeLayout(false); + tabPage1.ResumeLayout(false); + tabPage1.PerformLayout(); + tabPage2.ResumeLayout(false); + tabPage2.PerformLayout(); + tabPage3.ResumeLayout(false); + tabPage3.PerformLayout(); + groupBox1.ResumeLayout(false); + groupBox1.PerformLayout(); + tabPage4.ResumeLayout(false); + tabPage5.ResumeLayout(false); + StatusBar.ResumeLayout(false); + StatusBar.PerformLayout(); + MainMenu.ResumeLayout(false); + MainMenu.PerformLayout(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private TabControl MainTabs; + private TabPage tabPage1; + private TextBox LogTextBox; + private StatusStrip StatusBar; + private ToolStripStatusLabel PlayersLabel; + private ToolStripStatusLabel MonsterLabel; + private ToolStripStatusLabel ConnectionsLabel; + private MenuStrip MainMenu; + private ToolStripMenuItem controlToolStripMenuItem; + private ToolStripSeparator toolStripMenuItem1; + private ToolStripMenuItem closeServerToolStripMenuItem; + private Timer InterfaceTimer; + private TabPage tabPage2; + private TextBox DebugLogTextBox; + private TabPage tabPage3; + private TextBox ChatLogTextBox; + private ToolStripMenuItem accountToolStripMenuItem; + private ToolStripMenuItem databaseFormsToolStripMenuItem; + private ToolStripMenuItem mapInfoToolStripMenuItem; + private ToolStripMenuItem itemInfoToolStripMenuItem; + private ToolStripMenuItem monsterInfoToolStripMenuItem; + private ToolStripMenuItem nPCInfoToolStripMenuItem; + private ToolStripMenuItem questInfoToolStripMenuItem; + private ToolStripMenuItem configToolStripMenuItem1; + private ToolStripMenuItem serverToolStripMenuItem; + private ToolStripMenuItem balanceToolStripMenuItem; + private ToolStripMenuItem systemToolStripMenuItem; + private ToolStripMenuItem dragonSystemToolStripMenuItem; + private ToolStripMenuItem guildsToolStripMenuItem; + private ToolStripMenuItem miningToolStripMenuItem; + private ToolStripMenuItem fishingToolStripMenuItem; + private TabPage tabPage4; + private GroupBox groupBox1; + private Button GlobalMessageButton; + private TextBox GlobalMessageTextBox; + private CustomFormControl.ListViewNF PlayersOnlineListView; + private ColumnHeader nameHeader; + private ColumnHeader levelHeader; + private ColumnHeader classHeader; + private ColumnHeader genderHeader; + private ColumnHeader indexHeader; + private ToolStripMenuItem mailToolStripMenuItem; + private ToolStripMenuItem goodsToolStripMenuItem; + private ToolStripStatusLabel CycleDelayLabel; + private ToolStripMenuItem magicInfoToolStripMenuItem; + private ToolStripMenuItem refiningToolStripMenuItem; + private ToolStripMenuItem relationshipToolStripMenuItem; + private ToolStripMenuItem mentorToolStripMenuItem; + private ToolStripMenuItem gameshopToolStripMenuItem; + private ToolStripMenuItem gemToolStripMenuItem; + private ToolStripMenuItem conquestToolStripMenuItem; + private ToolStripMenuItem respawnsToolStripMenuItem; + private ToolStripSeparator toolStripSeparator1; + private ToolStripMenuItem itemNEWToolStripMenuItem; + private ToolStripMenuItem monsterExperimentalToolStripMenuItem; + private ToolStripStatusLabel BlockedIPsLabel; + private ToolStripMenuItem clearBlockedIPsToolStripMenuItem; + private ToolStripMenuItem reloadToolStripMenuItem; + private ToolStripMenuItem reloadNPCsToolStripMenuItem1; + private ToolStripMenuItem reloadDropsToolStripMenuItem1; + private ToolStripMenuItem lineMessageToolStripMenuItem; + private ColumnHeader MapHeader; + private TabPage tabPage5; + private CustomFormControl.ListViewNF GuildListView; + private ColumnHeader columnHeader1; + private ColumnHeader columnHeader2; + private ColumnHeader columnHeader3; + private ColumnHeader columnHeader4; + private ColumnHeader columnHeader5; + private Label UpTimeLabel; + private ColumnHeader columnHeader6; + } +} + diff --git a/Server.MirForms/SMain.cs b/Server.MirForms/SMain.cs new file mode 100644 index 0000000..f1f64a6 --- /dev/null +++ b/Server.MirForms/SMain.cs @@ -0,0 +1,480 @@ +using CustomFormControl; +using Server.Database; +using Server.MirDatabase; +using Server.MirEnvir; +using Server.MirObjects; +using Server.Systems; + +namespace Server +{ + public partial class SMain : Form + { + public static Envir Envir => Envir.Main; + + public static Envir EditEnvir => Envir.Edit; + + protected static MessageQueue MessageQueue => MessageQueue.Instance; + + private string selectedDirectory; + + public SMain() + { + InitializeComponent(); + + AutoResize(); + selectedDirectory = Properties.Settings.Default.selectedDirectory; + } + + private void AutoResize() + { + int columnCount = PlayersOnlineListView.Columns.Count; + + foreach (ColumnHeader column in PlayersOnlineListView.Columns) + { + column.Width = PlayersOnlineListView.Width / (columnCount - 1) - 1; + } + + indexHeader.Width = 2; + } + + public static void Enqueue(Exception ex) + { + MessageQueue.Enqueue(ex); + } + + public static void EnqueueDebugging(string msg) + { + MessageQueue.EnqueueDebugging(msg); + } + + public static void EnqueueChat(string msg) + { + MessageQueue.EnqueueChat(msg); + } + + public static void Enqueue(string msg) + { + MessageQueue.Enqueue(msg); + } + + private void configToolStripMenuItem_Click(object sender, EventArgs e) + { + + } + + private void InterfaceTimer_Tick(object sender, EventArgs e) + { + try + { + Text = $"Total: {Envir.LastCount}, Real: {Envir.LastRealCount}"; + PlayersLabel.Text = $"Players: {Envir.Players.Count}"; + ConnectionsLabel.Text = $"Connections: {Envir.Connections.Count}"; + BlockedIPsLabel.Text = $"Blocked IPs: {Envir.IPBlocks.Count(x => x.Value > Envir.Now)}"; + MonsterLabel.Text = $"Monsters: {Envir.MonsterCount}"; + UpTimeLabel.Text = $"Uptime: {Envir.Stopwatch.ElapsedMilliseconds / 1000 / 60 / 60 / 24}d:{Envir.Stopwatch.ElapsedMilliseconds / 1000 / 60 / 60 % 24}h:{Envir.Stopwatch.ElapsedMilliseconds / 1000 / 60 % 60}m:{Envir.Stopwatch.ElapsedMilliseconds / 1000 % 60}s"; + if (Settings.Multithreaded && (Envir.MobThreads != null)) + { + CycleDelayLabel.Text = $"CycleDelays: {Envir.LastRunTime:0000}"; + for (int i = 0; i < Envir.MobThreads.Length; i++) + { + if (Envir.MobThreads[i] == null) break; + CycleDelayLabel.Text = CycleDelayLabel.Text + $"|{Envir.MobThreads[i].LastRunTime:0000}"; + + } + } + else + CycleDelayLabel.Text = $"CycleDelay: {Envir.LastRunTime}"; + + while (!MessageQueue.MessageLog.IsEmpty) + { + string message; + + if (!MessageQueue.MessageLog.TryDequeue(out message)) continue; + + LogTextBox.AppendText(message); + } + + while (!MessageQueue.DebugLog.IsEmpty) + { + string message; + + if (!MessageQueue.DebugLog.TryDequeue(out message)) continue; + + DebugLogTextBox.AppendText(message); + } + + while (!MessageQueue.ChatLog.IsEmpty) + { + string message; + + if (!MessageQueue.ChatLog.TryDequeue(out message)) continue; + + ChatLogTextBox.AppendText(message); + } + + ProcessPlayersOnlineTab(false); + ProcessGuildViewTab(false); + } + catch (Exception ex) + { + MessageBox.Show(ex.ToString()); + } + } + + private ListViewItem CreateListView(CharacterInfo character) + { + ListViewItem ListItem = new ListViewItem(character.Index.ToString()) { Tag = character }; + + ListItem.SubItems.Add(character.Name); + ListItem.SubItems.Add(character.Level.ToString()); + ListItem.SubItems.Add(character.Class.ToString()); + ListItem.SubItems.Add(character.Gender.ToString()); + ListItem.SubItems.Add(character.Player.CurrentMap.Info.Title.ToString()); + + return ListItem; + } + + private void ProcessPlayersOnlineTab(bool forced = false) + { + if (PlayersOnlineListView.Items.Count != Envir.Players.Count || forced == true) + { + PlayersOnlineListView.Items.Clear(); + + for (int i = PlayersOnlineListView.Items.Count; i < Envir.Players.Count; i++) + { + CharacterInfo character = Envir.Players[i].Info; + + ListViewItem tempItem = CreateListView(character); + + PlayersOnlineListView.Items.Add(tempItem); + } + } + } + + private void SMain_FormClosing(object sender, FormClosingEventArgs e) + { + Envir.Stop(); + } + + private void closeServerToolStripMenuItem_Click(object sender, EventArgs e) + { + Close(); + } + + private void itemInfoToolStripMenuItem_Click(object sender, EventArgs e) + { + ItemInfoForm form = new ItemInfoForm(); + + form.ShowDialog(); + } + + private void monsterInfoToolStripMenuItem_Click(object sender, EventArgs e) + { + MonsterInfoForm form = new MonsterInfoForm(); + + form.ShowDialog(); + } + + private void nPCInfoToolStripMenuItem_Click(object sender, EventArgs e) + { + NPCInfoForm form = new NPCInfoForm(); + + form.ShowDialog(); + } + + private void balanceConfigToolStripMenuItem_Click(object sender, EventArgs e) + { + BalanceConfigForm form = new BalanceConfigForm(); + + form.ShowDialog(); + } + + private void questInfoToolStripMenuItem_Click(object sender, EventArgs e) + { + QuestInfoForm form = new QuestInfoForm(); + + form.ShowDialog(); + } + + private void serverToolStripMenuItem_Click(object sender, EventArgs e) + { + ConfigForm form = new ConfigForm(); + + form.ShowDialog(); + } + + private void balanceToolStripMenuItem_Click(object sender, EventArgs e) + { + BalanceConfigForm form = new BalanceConfigForm(); + + form.ShowDialog(); + } + + private void accountToolStripMenuItem_Click(object sender, EventArgs e) + { + AccountInfoForm form = new AccountInfoForm(); + + form.ShowDialog(); + } + + private void mapInfoToolStripMenuItem_Click(object sender, EventArgs e) + { + MapInfoForm form = new MapInfoForm(); + + form.ShowDialog(); + } + + private void itemInfoToolStripMenuItem_Click_1(object sender, EventArgs e) + { + ItemInfoForm form = new ItemInfoForm(); + + form.ShowDialog(); + } + + private void monsterInfoToolStripMenuItem_Click_1(object sender, EventArgs e) + { + MonsterInfoForm form = new MonsterInfoForm(); + + form.ShowDialog(); + } + + private void nPCInfoToolStripMenuItem_Click_1(object sender, EventArgs e) + { + NPCInfoForm form = new NPCInfoForm(); + + form.ShowDialog(); + } + + private void questInfoToolStripMenuItem_Click_1(object sender, EventArgs e) + { + QuestInfoForm form = new QuestInfoForm(); + + form.ShowDialog(); + } + + private void dragonSystemToolStripMenuItem_Click(object sender, EventArgs e) + { + } + + private void miningToolStripMenuItem_Click(object sender, EventArgs e) + { + } + + private void guildsToolStripMenuItem_Click(object sender, EventArgs e) + { + GuildInfoForm form = new GuildInfoForm(); + + form.ShowDialog(); + } + + private void fishingToolStripMenuItem_Click(object sender, EventArgs e) + { + } + + private void GlobalMessageButton_Click(object sender, EventArgs e) + { + if (GlobalMessageTextBox.Text.Length < 1) return; + + foreach (var player in Envir.Players) + { + player.ReceiveChat(GlobalMessageTextBox.Text, ChatType.Announcement); + } + + EnqueueChat(GlobalMessageTextBox.Text); + GlobalMessageTextBox.Text = string.Empty; + } + + private void PlayersOnlineListView_DoubleClick(object sender, EventArgs e) + { + CustomFormControl.ListViewNF list = (CustomFormControl.ListViewNF)sender; + + if (list.SelectedItems.Count > 0) + { + ListViewItem item = list.SelectedItems[0]; + string index = item.SubItems[0].Text; + + PlayerInfoForm form = new PlayerInfoForm(Convert.ToUInt32(index)); + + form.ShowDialog(); + } + } + + private void PlayersOnlineListView_ColumnWidthChanging(object sender, ColumnWidthChangingEventArgs e) + { + e.Cancel = true; + e.NewWidth = PlayersOnlineListView.Columns[e.ColumnIndex].Width; + } + + private void mailToolStripMenuItem_Click(object sender, EventArgs e) + { + SystemInfoForm form = new SystemInfoForm(1); + + form.ShowDialog(); + } + + private void goodsToolStripMenuItem_Click(object sender, EventArgs e) + { + SystemInfoForm form = new SystemInfoForm(2); + + form.ShowDialog(); + } + + private void relationshipToolStripMenuItem_Click(object sender, EventArgs e) + { + SystemInfoForm form = new SystemInfoForm(4); + + form.ShowDialog(); + } + + private void refiningToolStripMenuItem_Click(object sender, EventArgs e) + { + SystemInfoForm form = new SystemInfoForm(3); + + form.ShowDialog(); + } + + private void mentorToolStripMenuItem_Click(object sender, EventArgs e) + { + SystemInfoForm form = new SystemInfoForm(5); + + form.ShowDialog(); + } + + private void magicInfoToolStripMenuItem_Click(object sender, EventArgs e) + { + MagicInfoForm form = new MagicInfoForm(); + form.ShowDialog(); + } + + private void SMain_Load(object sender, EventArgs e) + { + var loaded = EditEnvir.LoadDB(); + + if (loaded) + { + Envir.Start(); + } + + AutoResize(); + } + + private void gemToolStripMenuItem_Click(object sender, EventArgs e) + { + SystemInfoForm form = new SystemInfoForm(6); + + form.ShowDialog(); + } + + private void conquestToolStripMenuItem_Click(object sender, EventArgs e) + { + } + + private void respawnsToolStripMenuItem_Click(object sender, EventArgs e) + { + SystemInfoForm form = new SystemInfoForm(7); + + form.ShowDialog(); + } + private void gameshopToolStripMenuItem_Click(object sender, EventArgs e) + { + GameShop form = new GameShop(); + form.ShowDialog(); + } + + private void itemNEWToolStripMenuItem_Click(object sender, EventArgs e) + { + ItemInfoFormNew form = new ItemInfoFormNew(); + + form.ShowDialog(); + } + + private void monsterExperimentalToolStripMenuItem_Click(object sender, EventArgs e) + { + MonsterInfoFormNew form = new MonsterInfoFormNew(); + + form.ShowDialog(); + } + + private void clearBlockedIPsToolStripMenuItem_Click(object sender, EventArgs e) + { + Envir.IPBlocks.Clear(); + } + + private void reloadNPCsToolStripMenuItem1_Click(object sender, EventArgs e) + { + Envir.ReloadNPCs(); + } + + private void reloadDropsToolStripMenuItem1_Click(object sender, EventArgs e) + { + Envir.ReloadDrops(); + } + + private void lineMessageToolStripMenuItem_Click(object sender, EventArgs e) + { + Envir.ReloadLineMessages(); + } + + public void ProcessGuildViewTab(bool forced = false) + { + if (GuildListView.Items.Count != Envir.GuildList.Count || forced == true) + { + GuildListView.Items.Clear(); + + foreach (GuildInfo guild in Envir.GuildList) + { + ListViewItem tempItem = new ListViewItem(guild.GuildIndex.ToString()) { Tag = this }; + + tempItem.SubItems.Add(guild.Name); + + if (guild.Ranks.Count > 0 && guild.Ranks[0].Members.Count > 0) + tempItem.SubItems.Add(guild.Ranks[0].Members[0].Name); + else + tempItem.SubItems.Add("DELETED"); + + tempItem.SubItems.Add(guild.Membercount.ToString()); + tempItem.SubItems.Add(guild.Level.ToString()); + tempItem.SubItems.Add($"{guild.Gold}"); + + GuildListView.Items.Add(tempItem); + } + } + } + + private void GuildListView_DoubleClick(object sender, EventArgs e) + { + ListViewNF list = (ListViewNF)sender; + + if (list.SelectedItems.Count <= 0) return; + + ListViewItem item = list.SelectedItems[0]; + int index = Int32.Parse(item.Text); + + GuildObject Guild = Envir.GetGuild(index); + + GuildMembersForm form = new GuildMembersForm + { + GuildName = Guild.Name, + main = this, + }; + + if (Guild == null) return; + + foreach (var r in Guild.Ranks) + foreach (var m in r.Members) + { + ListViewItem tempItem = new ListViewItem(m.Name) { Tag = this }; + tempItem.SubItems.Add(r.Name); + form.GuildMembersListView.Items.Add(tempItem); + } + + form.ShowDialog(); + } + + private void MainTabs_SelectedIndexChanged(object sender, EventArgs e) + { + ProcessPlayersOnlineTab(true); + ProcessGuildViewTab(true); + } + } +} \ No newline at end of file diff --git a/Server.MirForms/SMain.resx b/Server.MirForms/SMain.resx new file mode 100644 index 0000000..5a52392 --- /dev/null +++ b/Server.MirForms/SMain.resx @@ -0,0 +1,1775 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 230, 17 + + + 333, 17 + + + 443, 17 + + + 42 + + + + + AAABAAgAICAQAAAABADoAgAAhgAAACAgAAAAABgAqAwAAG4DAAAgIAAAAAAIAKgIAAAWEAAAQEAAAAAA + GAAoMgAAvhgAAEBAEAAAAAQAaAoAAOZKAABAQAAAAAAIACgWAABOVQAAgIAAAAAAGAAoyAAAdmsAAICA + AAAAAAgAKEwAAJ4zAQAoAAAAIAAAAEAAAAABAAQAAAAAAAACAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAA + gAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////ABER + ERAAAAAAAAAAAAAAAAARERERAAAAAAAAAAAAAAAAERERERAAAAAAAAAAAAAAABERERERAAAAAQAAAAAA + AAARERAAAQAAAAEAAAAAAAAAEREREQAAAAABAAAAAAAAABERERERAAAAABAAAAAAAAAREREREQAAAAAQ + AAAQAAAAEREREREAAAAAAAABEAAAAAERERERAAAAAAAxERAAAAAQERERERAAAAABEQAAAAAAAAAREREQ + AAAAAQARERARAAAAEREREAAAAAEBEAERERAAAAAAAAAAAAAQEQARMzERAAAAEREAAAABEBADMzMzEQAA + AAEQAAAAAAEAADMxMxEAAAAAAAAAAAEQEQAzMxEQAAABAAEAAAEREAAAMBMQEAAAAAARAAABEREQADEQ + EQAAAAABEBEBEREQATAREREAAAAQAQAQARERAQABEQERAAAAAAAAEBETEQMRERAREQAAAAAAARARExEQ + AREAAREQAAAAAAEBERMxMQEBAAABEQABAAAAAQERERMREQAAAAEAABAAABABERExERAAAAAAAAAAAAAA + EREREREAAAAAAAAAABAQEQAAAREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABAAAAAAAAAAAA + AAAAEAARAAAAAAAAAAAAAAAAAAABEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABABgAAAAAAAAM + AAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA + AACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAAAA + AAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA + AACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACA + AACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAACAAACAAACAAACAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAA + AACAAACAAACAAACAAACAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAAAAAAAAAACAAACAAACAAACAAACA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACAAAAAAACAAACAAAAAAAAAAACAAACAAICAAICAAICAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAA + AACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAACAAAAAAAAAAICAAICAAICA + AICAAICAAICAAICAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAICAAICAAICAAACAAICAAICAAACAAACAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAACAAACA + AAAAAAAAAICAAICAAICAAICAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAACA + AAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAICAAAAAAACAAICAAACAAAAA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAACAAACAAACA + AACAAACAAACAAAAAAAAAAAAAAICAAACAAACAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAACAAACAAAAAAACAAACAAAAAAACAAACAAACAAACAAACAAACAAAAAAAAAAACAAICAAAAAAACAAACA + AACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAACA + AACAAACAAACAAACAAAAAAACAAAAAAAAAAAAAAACAAACAAACAAAAAAACAAACAAACAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAICAAACAAACAAAAAAICAAACAAACA + AACAAACAAACAAAAAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + AACAAAAAAACAAACAAACAAICAAACAAACAAACAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAACAAACAAACA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAACAAICAAICAAACA + AICAAACAAAAAAACAAAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAACAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAACAAACAAACAAICAAACAAACAAACAAACAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACA + AACAAACAAACAAACAAICAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAAAA + AACAAACAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAA + AACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAACAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE + AAAAAAAAAAAAAAABAAAAAQAAAAD/AAD/AAD/AAAAAP//AP//AAD/AP8AwMDAAP/48ADX6/oA1P9/AP8A + AADiK4oAKiqlAAAAAAAEBAQACAgIAAwMDAAREREAFhYWABwcHAAiIiIAKSkpADMzMwA5OTkAQkJCAE1N + TQBVVVUAYGBgAGZmZgBwcHAAgICAAIyMjACUlJQAmZmZAKSkpACsrKwAtra2AMDAwADMzMwA1NTUANra + 2gDg4OAA7OzsAPj4+AD7+/sA////ADMAAABmAAAAmQAAAMwAAAD/AAAAADMAADMzAABmMwAAmTMAAMwz + AAD/MwAAAGYAADNmAABmZgAAmWYAAMxmAAD/ZgAAAJkAADOZAABmmQAAmZkAAMyZAAD/mQAAAMwAADPM + AABmzAAAmcwAAMzMAAD/zAAAAP8AADP/AABm/wAAmf8AAMz/AAD//wAAAAAzADMAMwBmADMAmQAzAMwA + MwD/ADMAADMzAGYzMwCZMzMAzDMzAP8zMwAAZjMAM2YzAGZmMwCZZjMAzGYzAP9mMwAAmTMAM5kzAGaZ + MwCZmTMAzJkzAP+ZMwAAzDMAM8wzAGbMMwCZzDMAzMwzAP/MMwAA/zMAM/8zAGb/MwCZ/zMAzP8zAP// + MwAAAGYAMwBmAGYAZgCZAGYAzABmAP8AZgAAM2YAMzNmAGYzZgCZM2YAzDNmAP8zZgAAZmYAM2ZmAJlm + ZgDMZmYA/2ZmAACZZgAzmWYAZplmAJmZZgDMmWYA/5lmAADMZgAzzGYAZsxmAJnMZgDMzGYA/8xmAAD/ + ZgAz/2YAZv9mAJn/ZgDM/2YA//9mAAAAmQAzAJkAZgCZAJkAmQDMAJkA/wCZAAAzmQAzM5kAZjOZAJkz + mQDMM5kA/zOZAABmmQAzZpkAZmaZAJlmmQDMZpkA/2aZAACZmQAzmZkAZpmZAMyZmQD/mZkAAcyZADPM + mQBmzJkAmcyZAMzMmQD/zJkAAP+ZADP/mQBm/5kAmf+ZAMz/mQD//5kAAADMADMAzABmAMwAmQDMAMwA + zAD/AMwAADPMADMzzABmM8wAmTPMAMwzzAD/M8wAAGbMADNmzABmZswAmWbMAMxmzAD/ZswAAJnMADOZ + zABmmcwAmZnMAMyZzAD/mcwAAMzMADPMzABmzMwAmczMAP/MzAAA/8wAM//MAGb/zACZ/8wAzP/MAP// + zAAAAP8AMwD/AGYA/wCZAP8AzAD/AP8A/wAAM/8AMzP/AGYz/wCZM/8AzDP/AP8z/wAAZv8AM2b/AGZm + /wCZZv8AzGb/AP9m/wAAmf8AM5n/AGaZ/wCZmf8AzJn/AP+Z/wAAzP8AM8z/AGbM/wCZzP8AzMz/AP/M + /wAA//8AM///AGb//wCZ//8AzP//AJ+fn5+fn58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQn5+fn5+f + n58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBCfn5+fn5+fn58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEJ+f + n5+fn5+fn58QEBAQEBAQnxAQEBAQEBAQEBAQEBAQn5+fn58QEBAQnxAQEBAQEBCfEBAQEBAQEBAQEBAQ + EBCfn5+fn5+fnxAQEBAQEBAQEJ8QEBAQEBAQEBAQEBAQEJ+fn5+fn5+fn58QEBAQEBAQEJ8QEBAQEBAQ + EBAQEBAQn5+fn5+fn5+fnxAQEBAQEBAQnxAQEBAQnxAQEBAQEBCfn5+fn5+fn5+fEBAQEBAQEBAQEBAQ + EJ+fEBAQEBAQEBCfn5+fn5+fn58QEBAQEBAQEBAQrZ+fn58QEBAQEBAQnxCfn5+fn5+fn58QEBAQEBAQ + EJ+fnxAQEBAQEBAQEBAQEBAQn5+fn5+fnxAQEBAQEBAQnxAQn5+fn58Qn58QEBAQEBCfn5+fn5+fEBAQ + EBAQEBCfEJ+fEBCfn5+fn58QEBAQEBAQEBAQEBAQEBAQEBAQnxCfnxAQn5+tra2fn58QEBAQEBCfn5+f + EBAQEBAQEJ+fEJ8QEK2tra2tra2fnxAQEBAQEBCfnxAQEBAQEBAQEBCfEBAQEK2trZ+trZ+fEBAQEBAQ + EBAQEBAQEBAQEBCfnxCfnxAQra2trZ+fnxAQEBAQEJ8QEBCfEBAQEBCfn5+fEBAQEBCtEJ+tnxCfEBAQ + EBAQEBAQn58QEBAQEJ+fn5+fnxAQEK2fnxCfnxAQEBAQEBAQEJ+fEJ+fEJ+fn5+fnxAQn60Qn5+fn5+f + EBAQEBAQnxAQnxAQnxAQn5+fn58QnxAQEJ+fnxCfn58QEBAQEBAQEBAQEBCfEJ+fn62fnxCtn5+fn58Q + n5+fnxAQEBAQEBAQEBAQn58Qn5+frZ+fnxAQn5+fEBAQn5+fnxAQEBAQEBAQEBCfEJ+fn5+trZ+tnxCf + EJ8QEBAQEJ+fnxAQEJ8QEBAQEBAQnxCfn5+fn5+tn5+fnxAQEBAQEBCfEBAQEJ8QEBAQEJ8QEJ+fn5+f + rZ+fn58QEBAQEBAQEBAQEBAQEBAQEBAQEBCfn5+fn5+fn5+fEBAQEBAQEBAQEBAQEBAQEJ8QnxCfnxAQ + EBAQn5+fEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEJ8QEJ8QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBCfEBAQn58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEJ+fEJ8QEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAABAAAAAgAAAAAEAGAAAAAAAADAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAA + AAAAAIAAAIAAAAAAAAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAA + gIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAAIAA + AIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAgIAA + gIAAgIAAgIAAAIAAAIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAAAAAAAAAIAAAIAAgIAAgIAAAIAAAIAAAAAA + AAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAAAAAAAAAIAAAIAAgIAA + gIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAA + AIAAgIAAgIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAA + AAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAIAAAIAAgIAAgIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAgIAAgIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAgIAA + gIAAgIAAgIAAAIAAAIAAgIAAgIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAgIAAgIAAgIAAgIAAAIAAAIAAgIAAgIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAgIAA + gIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAAAA + AAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAABAAAAAgAAAAAEABAAAAAAAAAgAAAAA + AAAAAAAAEAAAABAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAwMDAAICAgAAAAP8AAP8AAAD/ + /wD/AAAA/wD/AP//AAD///8AEREREREREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARERERERERAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAABERERERERERAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAERERERER + EREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAREREREREREREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABER + EREREREREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEREREREREREREQAAAAAAAAARAAAAAAAAAAAAAAAA + AAARERERERERERERAAAAAAAAABEAAAAAAAAAAAAAAAAAABERERERAAAAABEAAAAAAAAAEQAAAAAAAAAA + AAAAAAAAEREREREAAAAAEQAAAAAAAAARAAAAAAAAAAAAAAAAAAAREREREREREQAAAAAAAAAAABEAAAAA + AAAAAAAAAAAAABERERERERERAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAEREREREREREREQAAAAAAAAAA + EQAAAAAAAAAAAAAAAAARERERERERERERAAAAAAAAAAARAAAAAAAAAAAAAAAAABEREREREREREREAAAAA + AAAAABEAAAAAABEAAAAAAAAAEREREREREREREQAAAAAAAAAAEQAAAAAAEQAAAAAAAAARERERERERERER + AAAAAAAAAAAAAAAAABERAAAAAAAAABEREREREREREREAAAAAAAAAAAAAAAAAEREAAAAAAAAAABERERER + EREREQAAAAAAAAAAAAAzEREREQAAAAAAAAAAERERERERERERAAAAAAAAAAAAADMRERERAAAAAAAAABEA + ERERERERERERAAAAAAAAAAAREREAAAAAAAAAAAAAEQAREREREREREREAAAAAAAAAABEREQAAAAAAAAAA + AAAAAAAAEREREREREQAAAAAAAAAAEQAAEREREREAEREAAAAAAAARERERERERAAAAAAAAAAARAAARERER + EQAREQAAAAAAABEREREREREAAAAAAAAAABEAEREAABEREREREQAAAAAAEREREREREQAAAAAAAAAAEQAR + EQAAERERERERAAAAAAAAAAAAAAAAAAAAAAAAABEAEREAABERMzMzERERAAAAAAAAAAAAAAAAAAAAAAAA + EQAREQAAEREzMzMREREAAAAAAAARERERAAAAAAAAABERABEAADMzMzMzMzMREQAAAAAAABEREREAAAAA + AAAAEREAEQAAMzMzMzMzMxERAAAAAAAAABERAAAAAAAAAAAAABEAAAAAMzMzETMzEREAAAAAAAAAEREA + AAAAAAAAAAAAEQAAAAAzMzMRMzMREQAAAAAAAAAAAAAAAAAAAAAAEREAEREAADMzMzMREREAAAAAAAAA + AAAAAAAAAAAAAAAREQAREQAAMzMzMxEREQAAAAAAABEAAAARAAAAAAARERERAAAAAAAzABEzEQARAAAA + AAAAEQAAABEAAAAAABEREREAAAAAADMAETMRABEAAAAAAAAAAAAREQAAAAAAERERERERAAAAMxERABER + AAAAAAAAAAAAABERAAAAAAAREREREREAAAAzEREAEREAAAAAAAAAAAAREQAREQAREREREREAABEzABER + EREREQAAAAAAAAAAABERABERABEREREREQAAETMAERERERERAAAAAAAAEQAAEQAAEQAAEREREREAEQAA + ABEREQAREREAAAAAAAARAAARAAARAAAREREREQARAAAAERERABEREQAAAAAAAAAAAAAAABEAERERMxER + ADMREREREQARERERAAAAAAAAAAAAAAAAEQAREREzEREAMxERERERABEREREAAAAAAAAAAAAAABERABER + ETMREREAABEREQAAABEREREAAAAAAAAAAAAAEREAERERMxEREQAAERERAAAAEREREQAAAAAAAAAAAAAR + ABEREREzMxEzEQARABEAAAAAABEREQAAAAAAAAAAABEAERERETMzETMRABEAEQAAAAAAERERAAAAEQAA + AAAAAAARABERERERETMRERERAAAAAAAAABEAAAARAAAAAAAAABEAERERERERMxEREREAAAAAAAAAEQAA + AAARAAAAAAARAAARERERETMRERERAAAAAAAAAAAAAAAAABEAAAAAABEAABERERERMxEREREAAAAAAAAA + AAAAAAAAAAAAAAAAAAARERERERERERERAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEREREREREREREAAAAA + AAAAAAAAAAAAAAAAEQARABERAAAAAAAREREAAAAAAAAAAAAAAAAAAAAAAAARABEAEREAAAAAABEREQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + EQAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAAAREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + EQAAABERAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAREQARAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAABERABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgA + AABAAAAAgAAAAAEACAAAAAAAABAAAAAAAAAAAAAAAAEAAAABAAAAAP8AAP8AAP8AAAAA//8A//8AAP8A + /wDAwMAA//jwANfr+gDU/38A/wAAAOIrigAqKqUAAAAAAAQEBAAICAgADAwMABEREQAWFhYAHBwcACIi + IgApKSkAMzMzADk5OQBCQkIATU1NAFVVVQBgYGAAZmZmAHBwcACAgIAAjIyMAJSUlACZmZkApKSkAKys + rAC2trYAwMDAAMzMzADU1NQA2traAODg4ADs7OwA+Pj4APv7+wD///8AMwAAAGYAAACZAAAAzAAAAP8A + AAAAMwAAMzMAAGYzAACZMwAAzDMAAP8zAAAAZgAAM2YAAGZmAACZZgAAzGYAAP9mAAAAmQAAM5kAAGaZ + AACZmQAAzJkAAP+ZAAAAzAAAM8wAAGbMAACZzAAAzMwAAP/MAAAA/wAAM/8AAGb/AACZ/wAAzP8AAP// + AAAAADMAMwAzAGYAMwCZADMAzAAzAP8AMwAAMzMAZjMzAJkzMwDMMzMA/zMzAABmMwAzZjMAZmYzAJlm + MwDMZjMA/2YzAACZMwAzmTMAZpkzAJmZMwDMmTMA/5kzAADMMwAzzDMAZswzAJnMMwDMzDMA/8wzAAD/ + MwAz/zMAZv8zAJn/MwDM/zMA//8zAAAAZgAzAGYAZgBmAJkAZgDMAGYA/wBmAAAzZgAzM2YAZjNmAJkz + ZgDMM2YA/zNmAABmZgAzZmYAmWZmAMxmZgD/ZmYAAJlmADOZZgBmmWYAmZlmAMyZZgD/mWYAAMxmADPM + ZgBmzGYAmcxmAMzMZgD/zGYAAP9mADP/ZgBm/2YAmf9mAMz/ZgD//2YAAACZADMAmQBmAJkAmQCZAMwA + mQD/AJkAADOZADMzmQBmM5kAmTOZAMwzmQD/M5kAAGaZADNmmQBmZpkAmWaZAMxmmQD/ZpkAAJmZADOZ + mQBmmZkAzJmZAP+ZmQABzJkAM8yZAGbMmQCZzJkAzMyZAP/MmQAA/5kAM/+ZAGb/mQCZ/5kAzP+ZAP// + mQAAAMwAMwDMAGYAzACZAMwAzADMAP8AzAAAM8wAMzPMAGYzzACZM8wAzDPMAP8zzAAAZswAM2bMAGZm + zACZZswAzGbMAP9mzAAAmcwAM5nMAGaZzACZmcwAzJnMAP+ZzAAAzMwAM8zMAGbMzACZzMwA/8zMAAD/ + zAAz/8wAZv/MAJn/zADM/8wA///MAAAA/wAzAP8AZgD/AJkA/wDMAP8A/wD/AAAz/wAzM/8AZjP/AJkz + /wDMM/8A/zP/AABm/wAzZv8AZmb/AJlm/wDMZv8A/2b/AACZ/wAzmf8AZpn/AJmZ/wDMmf8A/5n/AADM + /wAzzP8AZsz/AJnM/wDMzP8A/8z/AAD//wAz//8AZv//AJn//wDM//8An5+fn5+fn5+fn5+fn58dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+f + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+f + n5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+f + n5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+f + n5+fn5+fn5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fn5+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn5+fn5+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHZ+fHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fHR0dHR0dHR2fnx0dHR0dHR0dHR0dHR0dn58dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fnx0dHR0dHR0dn58dHR0dHR0dHR0dHR0dHZ+fHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR2fnx0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0d + n58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0d + HR0dHR0dn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0d + HR0dHR0dHR0dHZ+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fn5+fn5+fnx0d + HR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dHR2fnx0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn5+fn5+f + n58dHR0dHR0dHR0dHR0dHR0dn58dHR0dHR0dHR0dn58dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+f + n5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+f + n5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fnx0dHR0dHR0dHR0dHR0dHR2fn5+f + n5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHa2tn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0d + n5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR2trZ+fn5+fn5+fHR0dHR0dHR0dHR0d + HR2fnx0dn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHZ+fn5+fnx0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHZ+fn5+fn5+fn5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR2fn5+fn58dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dn58dHR0dn5+fn5+f + n5+fnx0dn5+fnx0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHZ+fHR0dHZ+f + n5+fn5+fn58dHZ+fn58dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR2fnx0d + n5+fnx0dHR2fn5+fn5+fn5+fn58dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0d + n58dHZ+fn58dHR0dn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fnx0dn5+fnx0dHR2fn5+fra2tra2tn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHZ+fn58dHR0dn5+fn62tra2trZ+fn5+fnx0dHR0dHR0dHR0dHZ+fn5+fn5+fHR0dHR0d + HR0dHR0dHR2fn5+fHR2fnx0dHR2tra2tra2tra2tra2trZ+fn58dHR0dHR0dHR0dHR2fn5+fn5+fnx0d + HR0dHR0dHR0dHR0dn5+fnx0dn58dHR0dra2tra2tra2tra2tra2fn5+fHR0dHR0dHR0dHR0dHR2fn5+f + HR0dHR0dHR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dra2tra2tn5+tra2tn5+fnx0dHR0dHR0dHR0dHR0d + n5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dn58dHR0dHR0dHa2tra2trZ+fra2trZ+fn58dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fnx0dn5+fnx0dHR2tra2tra2trZ+fn5+fnx0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn58dHZ+fn58dHR0dra2tra2tra2fn5+fn58dHR0d + HR0dHR0dHR2fnx0dHR0dHZ+fHR0dHR0dHR0dHZ+fn5+fn5+fHR0dHR0dHR0dHa2tHR2fn62tn58dHZ+f + HR0dHR0dHR0dHR0dn58dHR0dHR2fnx0dHR0dHR0dHR2fn5+fn5+fnx0dHR0dHR0dHR2trR0dn5+trZ+f + HR2fnx0dHR0dHR0dHR0dHR0dHR0dHZ+fn58dHR0dHR0dHR0dn5+fn5+fn5+fn5+fHR0dHR0dra2fn5+f + HR2fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR0dHR0dHR0dHZ+fn5+fn5+fn5+fnx0dHR0dHa2t + n5+fnx0dn5+fnx0dHR0dHR0dHR0dHR0dHR0dHZ+fn58dHZ+fn58dHZ+fn5+fn5+fn5+fnx0dHR2fn62t + HR2fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR2fn5+fHR2fn5+fn5+fn5+fn58dHR0d + n5+trR0dn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dn58dHR0dn58dHR0dn58dHR0dn5+fn5+fn5+fnx0d + n58dHR0dHR2fn5+fn58dHZ+fn5+fnx0dHR0dHR0dHR0dHZ+fHR0dHZ+fHR0dHZ+fHR0dHZ+fn5+fn5+f + n58dHZ+fHR0dHR0dn5+fn5+fHR2fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fnx0dn5+fn5+f + ra2fn5+fHR2trZ+fn5+fn5+fn58dHZ+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn58dHZ+f + n5+fn62tn5+fnx0dra2fn5+fn5+fn5+fHR2fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+f + HR2fn5+fn5+trZ+fn5+fnx0dHR2fn5+fn58dHR0dHR2fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0d + n5+fnx0dn5+fn5+fra2fn5+fn58dHR0dn5+fn5+fHR0dHR0dn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0d + HR0dHZ+fHR2fn5+fn5+fn62tra2fn62tn58dHZ+fHR2fnx0dHR0dHR0dHR2fn5+fn58dHR0dHR0dHR0d + HR0dHR0dHR2fnx0dn5+fn5+fn5+tra2tn5+trZ+fHR2fnx0dn58dHR0dHR0dHR0dn5+fn5+fHR0dHR0d + n58dHR0dHR0dHR0dHR0dHZ+fHR2fn5+fn5+fn5+fn5+trZ+fn5+fn5+fHR0dHR0dHR0dHR0dHR2fnx0d + HR0dHZ+fHR0dHR0dHR0dHR0dHR2fnx0dn5+fn5+fn5+fn5+fra2fn5+fn5+fnx0dHR0dHR0dHR0dHR0d + n58dHR0dHR0dHZ+fHR0dHR0dHR0dHZ+fHR0dHZ+fn5+fn5+fn5+trZ+fn5+fn5+fHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dHR2fnx0dHR2fn5+fn5+fn5+fra2fn5+fn5+fnx0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fn5+fn5+fnx0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn58dHZ+fHR2fn5+fHR0dHR0dHR0dHZ+fn5+fnx0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fHR2fnx0dn5+fnx0dHR0dHR0dHR2fn5+f + n58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fnx0dHR2fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHR0dn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fnx0dHR0dHZ+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHR0dHR2fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHZ+fn58dHZ+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR2fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAIAAAAAAAQAAAQAYAAAAAAAAwAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAIAAAAAAAQAAAQAIAAAAAAAAQAAAAAAAAAAA + AAAAAQAAAAEAAAAA/wAA/wAA/wAAAAD//wD//wAA/wD/AMDAwAD/+PAA1+v6ANT/fwD/AAAA4iuKACoq + pQAAAAAABAQEAAgICAAMDAwAERERABYWFgAcHBwAIiIiACkpKQAzMzMAOTk5AEJCQgBNTU0AVVVVAGBg + YABmZmYAcHBwAICAgACMjIwAlJSUAJmZmQCkpKQArKysALa2tgDAwMAAzMzMANTU1ADa2toA4ODgAOzs + 7AD4+PgA+/v7AP///wAzAAAAZgAAAJkAAADMAAAA/wAAAAAzAAAzMwAAZjMAAJkzAADMMwAA/zMAAABm + AAAzZgAAZmYAAJlmAADMZgAA/2YAAACZAAAzmQAAZpkAAJmZAADMmQAA/5kAAADMAAAzzAAAZswAAJnM + AADMzAAA/8wAAAD/AAAz/wAAZv8AAJn/AADM/wAA//8AAAAAMwAzADMAZgAzAJkAMwDMADMA/wAzAAAz + MwBmMzMAmTMzAMwzMwD/MzMAAGYzADNmMwBmZjMAmWYzAMxmMwD/ZjMAAJkzADOZMwBmmTMAmZkzAMyZ + MwD/mTMAAMwzADPMMwBmzDMAmcwzAMzMMwD/zDMAAP8zADP/MwBm/zMAmf8zAMz/MwD//zMAAABmADMA + ZgBmAGYAmQBmAMwAZgD/AGYAADNmADMzZgBmM2YAmTNmAMwzZgD/M2YAAGZmADNmZgCZZmYAzGZmAP9m + ZgAAmWYAM5lmAGaZZgCZmWYAzJlmAP+ZZgAAzGYAM8xmAGbMZgCZzGYAzMxmAP/MZgAA/2YAM/9mAGb/ + ZgCZ/2YAzP9mAP//ZgAAAJkAMwCZAGYAmQCZAJkAzACZAP8AmQAAM5kAMzOZAGYzmQCZM5kAzDOZAP8z + mQAAZpkAM2aZAGZmmQCZZpkAzGaZAP9mmQAAmZkAM5mZAGaZmQDMmZkA/5mZAAHMmQAzzJkAZsyZAJnM + mQDMzJkA/8yZAAD/mQAz/5kAZv+ZAJn/mQDM/5kA//+ZAAAAzAAzAMwAZgDMAJkAzADMAMwA/wDMAAAz + zAAzM8wAZjPMAJkzzADMM8wA/zPMAABmzAAzZswAZmbMAJlmzADMZswA/2bMAACZzAAzmcwAZpnMAJmZ + zADMmcwA/5nMAADMzAAzzMwAZszMAJnMzAD/zMwAAP/MADP/zABm/8wAmf/MAMz/zAD//8wAAAD/ADMA + /wBmAP8AmQD/AMwA/wD/AP8AADP/ADMz/wBmM/8AmTP/AMwz/wD/M/8AAGb/ADNm/wBmZv8AmWb/AMxm + /wD/Zv8AAJn/ADOZ/wBmmf8AmZn/AMyZ/wD/mf8AAMz/ADPM/wBmzP8Amcz/AMzM/wD/zP8AAP//ADP/ + /wBm//8Amf//AMz//wCfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pra2trZ+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+tra2tn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD62tra2fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+f + n5+tra2tra2tra2tra2fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8P + Dw+fn5+fn5+fn62tra2tra2tra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+f + n58PDw8PDw8PD5+fn5+fn5+fra2tra2tra2tra2tn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8P + Dw+fn5+fDw8PDw8PDw+tra2tra2tra2tra2tra2tra2tra2tra2tra2tn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PD5+fn58PDw8PDw8PD62tra2tra2tra2tra2tra2tra2tra2tra2tra2fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8Pn5+fnw8PDw8PDw8Pra2tra2tra2tra2tra2tra2tra2tra2tra2trZ+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw+fn5+fDw8PDw8PDw+tra2tra2tra2tra2tra2tra2tra2t + ra2tra2tn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+fn58PDw8PDw8PD62tra2tra2tra2tra2t + ra2tra2tra2tra2tra2fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PD62t + ra2tra2tra2trZ+fn5+tra2tra2trZ+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8Pra2tra2tra2tra2tn5+fn62tra2tra2tn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PDw8PDw+tra2tra2tra2tra2fn5+fra2tra2tra2fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n58PDw8Pn5+fn5+fn58PDw8PDw8PD62tra2tra2tra2tra2tra2fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pra2tra2tra2tra2tra2trZ+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw+tra2tra2tra2tra2tra2tn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PD62tra2tra2tra2tra2t + ra2fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pra2tra2t + ra2tra2tra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw+tra2tDw8PD5+fn5+tra2tn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PD62tra0PDw8Pn5+fn62tra2fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pra2trQ8PDw+fn5+fra2trZ+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw+tra2tn5+fn5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PD62tra2fn5+fn5+fnw8PDw+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8Pra2trZ+fn5+fn5+fDw8PD5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw+tra2tn5+fn5+f + n58PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PD62t + ra2fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PD5+fn5+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8Pn5+fn62t + ra0PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw+fn5+fra2trQ8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PD5+fn5+tra2tDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PD5+fn58PDw8PDw8PD5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fDw8PD5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+fn58PDw8PDw8PD5+f + n58PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n58PDw8Pn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fnw8P + Dw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fnw8PDw+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fn5+fn62tra2fn5+fn5+fnw8PDw+tra2tn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fDw8PD62t + ra2fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+tra2tn5+fn5+f + n58PDw8Pra2trZ+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+fn5+fn5+fn5+fn62t + ra2fn5+fn5+fn5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+f + n5+fn5+fra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8P + Dw+fn5+fn5+fn5+fn5+tra2tn5+fn5+fn5+fn5+fDw8PDw8PDw+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PD5+fn5+fn5+fn5+fn62tra2fn5+fn5+fn5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn5+tra2tra2trZ+fn5+tra2tn5+fnw8P + Dw+fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn62tra2tra2tn5+fn62t + ra2fn5+fDw8PD5+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fra2tra2t + ra2fn5+fra2trZ+fn58PDw8Pn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+tra2tn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn62tra2fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+tra2tn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fra2trZ+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+tra2tn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn62tra2fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8Pn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n58PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + + + \ No newline at end of file diff --git a/Server.MirForms/Server.csproj b/Server.MirForms/Server.csproj new file mode 100644 index 0000000..c90d02d --- /dev/null +++ b/Server.MirForms/Server.csproj @@ -0,0 +1,64 @@ + + + + WinExe + net8.0-windows7.0 + disable + true + enable + ..\Build\Server\ + + + + false + false + + + + 1701;1702 + + + + 1701;1702 + + + + + + + + + + + + + + + + + + + + ..\Components\CustomFormControl.dll + + + ..\Components\Microsoft.VisualBasic.PowerPacks.Vs.dll + + + + + + True + True + Settings.settings + + + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + + \ No newline at end of file diff --git a/Server.MirForms/Systems/GuildInfoForm.Designer.cs b/Server.MirForms/Systems/GuildInfoForm.Designer.cs new file mode 100644 index 0000000..e05d07d --- /dev/null +++ b/Server.MirForms/Systems/GuildInfoForm.Designer.cs @@ -0,0 +1,1247 @@ +namespace Server +{ + partial class GuildInfoForm + { + /// + /// 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() + { + components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(GuildInfoForm)); + GuildExpratetextBox = new TextBox(); + label82 = new Label(); + GuildPPLtextBox = new TextBox(); + label81 = new Label(); + GuildMinOwnerLeveltextBox = new TextBox(); + label80 = new Label(); + tabControl1 = new TabControl(); + tabPage1 = new TabPage(); + groupBox10 = new GroupBox(); + GuildItemNamecomboBox = new ComboBox(); + label94 = new Label(); + GuildAmounttextBox = new TextBox(); + label93 = new Label(); + GuildDeleteCreateItembutton = new Button(); + label92 = new Label(); + GuildCreateListcomboBox = new ComboBox(); + GuildAddCreatItembutton = new Button(); + label86 = new Label(); + tabPage2 = new TabPage(); + groupBox9 = new GroupBox(); + label84 = new Label(); + label85 = new Label(); + GuildDeleteLevelbutton = new Button(); + GuildExpNeededtextBox = new TextBox(); + GuildAddLevelbutton = new Button(); + GuildMemberCaptextBox = new TextBox(); + label83 = new Label(); + GuildLevelListcomboBox = new ComboBox(); + tabPage3 = new TabPage(); + BuffPanel = new Panel(); + bufftxtIcon = new TextBox(); + label28 = new Label(); + BufftxtActivationCost = new TextBox(); + BufftxtTimeLimit = new TextBox(); + BufftxtPointsReq = new TextBox(); + BuffTxtLevelReq = new TextBox(); + groupBox2 = new GroupBox(); + BufftxtGoldRate = new TextBox(); + BufftxtDropRate = new TextBox(); + BufftxtSkillRate = new TextBox(); + BufftxtCraftRate = new TextBox(); + BufftxtExpRate = new TextBox(); + BufftxtFishRate = new TextBox(); + BufftxtGemRate = new TextBox(); + BufftxtMineRate = new TextBox(); + BufftxtMpRegen = new TextBox(); + BufftxtHpRegen = new TextBox(); + BufftxtMaxMp = new TextBox(); + BufftxtMaxHp = new TextBox(); + BufftxtAttack = new TextBox(); + BufftxtSc = new TextBox(); + BufftxtMc = new TextBox(); + BufftxtDc = new TextBox(); + BufftxtMac = new TextBox(); + BufftxtAc = new TextBox(); + label27 = new Label(); + label26 = new Label(); + label25 = new Label(); + label24 = new Label(); + label23 = new Label(); + label22 = new Label(); + label21 = new Label(); + label20 = new Label(); + label19 = new Label(); + label18 = new Label(); + label17 = new Label(); + label16 = new Label(); + label15 = new Label(); + label14 = new Label(); + label13 = new Label(); + label12 = new Label(); + label11 = new Label(); + label10 = new Label(); + label9 = new Label(); + label8 = new Label(); + label7 = new Label(); + label6 = new Label(); + BufftxtName = new TextBox(); + label5 = new Label(); + BufflblIndex = new Label(); + BuffList = new ListBox(); + BuffDelete = new Button(); + BuffAdd = new Button(); + tabPage4 = new TabPage(); + groupBox1 = new GroupBox(); + label4 = new Label(); + label3 = new Label(); + WarCostTextBox = new TextBox(); + WarLengthTextBox = new TextBox(); + label2 = new Label(); + label1 = new Label(); + toolTip1 = new ToolTip(components); + tabControl1.SuspendLayout(); + tabPage1.SuspendLayout(); + groupBox10.SuspendLayout(); + tabPage2.SuspendLayout(); + groupBox9.SuspendLayout(); + tabPage3.SuspendLayout(); + BuffPanel.SuspendLayout(); + groupBox2.SuspendLayout(); + tabPage4.SuspendLayout(); + groupBox1.SuspendLayout(); + SuspendLayout(); + // + // GuildExpratetextBox + // + GuildExpratetextBox.Location = new Point(371, 17); + GuildExpratetextBox.Margin = new Padding(4, 3, 4, 3); + GuildExpratetextBox.Name = "GuildExpratetextBox"; + GuildExpratetextBox.Size = new Size(39, 23); + GuildExpratetextBox.TabIndex = 46; + GuildExpratetextBox.TextChanged += GuildExpratetextBox_TextChanged; + // + // label82 + // + label82.AutoSize = true; + label82.Location = new Point(306, 21); + label82.Margin = new Padding(4, 0, 4, 0); + label82.Name = "label82"; + label82.Size = new Size(55, 15); + label82.TabIndex = 45; + label82.Text = "Exp Rate:"; + // + // GuildPPLtextBox + // + GuildPPLtextBox.Location = new Point(259, 17); + GuildPPLtextBox.Margin = new Padding(4, 3, 4, 3); + GuildPPLtextBox.Name = "GuildPPLtextBox"; + GuildPPLtextBox.Size = new Size(39, 23); + GuildPPLtextBox.TabIndex = 44; + GuildPPLtextBox.TextChanged += GuildPPLtextBox_TextChanged; + // + // label81 + // + label81.AutoSize = true; + label81.Location = new Point(168, 21); + label81.Margin = new Padding(4, 0, 4, 0); + label81.Name = "label81"; + label81.Size = new Size(78, 15); + label81.TabIndex = 43; + label81.Text = "Points / level:"; + // + // GuildMinOwnerLeveltextBox + // + GuildMinOwnerLeveltextBox.Location = new Point(121, 17); + GuildMinOwnerLeveltextBox.Margin = new Padding(4, 3, 4, 3); + GuildMinOwnerLeveltextBox.Name = "GuildMinOwnerLeveltextBox"; + GuildMinOwnerLeveltextBox.Size = new Size(39, 23); + GuildMinOwnerLeveltextBox.TabIndex = 42; + GuildMinOwnerLeveltextBox.TextChanged += GuildMinOwnerLeveltextBox_TextChanged; + // + // label80 + // + label80.AutoSize = true; + label80.Location = new Point(9, 21); + label80.Margin = new Padding(4, 0, 4, 0); + label80.Name = "label80"; + label80.Size = new Size(99, 15); + label80.TabIndex = 41; + label80.Text = "Min Owner Level:"; + // + // tabControl1 + // + tabControl1.Controls.Add(tabPage1); + tabControl1.Controls.Add(tabPage2); + tabControl1.Controls.Add(tabPage3); + tabControl1.Controls.Add(tabPage4); + tabControl1.Location = new Point(13, 47); + tabControl1.Margin = new Padding(4, 3, 4, 3); + tabControl1.Name = "tabControl1"; + tabControl1.SelectedIndex = 0; + tabControl1.Size = new Size(856, 428); + tabControl1.TabIndex = 46; + // + // tabPage1 + // + tabPage1.Controls.Add(groupBox10); + tabPage1.Location = new Point(4, 24); + tabPage1.Margin = new Padding(4, 3, 4, 3); + tabPage1.Name = "tabPage1"; + tabPage1.Padding = new Padding(4, 3, 4, 3); + tabPage1.Size = new Size(848, 400); + tabPage1.TabIndex = 0; + tabPage1.Text = "Creation"; + tabPage1.UseVisualStyleBackColor = true; + // + // groupBox10 + // + groupBox10.Controls.Add(GuildItemNamecomboBox); + groupBox10.Controls.Add(label94); + groupBox10.Controls.Add(GuildAmounttextBox); + groupBox10.Controls.Add(label93); + groupBox10.Controls.Add(GuildDeleteCreateItembutton); + groupBox10.Controls.Add(label92); + groupBox10.Controls.Add(GuildCreateListcomboBox); + groupBox10.Controls.Add(GuildAddCreatItembutton); + groupBox10.Controls.Add(label86); + groupBox10.Location = new Point(7, 8); + groupBox10.Margin = new Padding(4, 3, 4, 3); + groupBox10.Name = "groupBox10"; + groupBox10.Padding = new Padding(4, 3, 4, 3); + groupBox10.Size = new Size(392, 171); + groupBox10.TabIndex = 50; + groupBox10.TabStop = false; + groupBox10.Text = "Creation"; + // + // GuildItemNamecomboBox + // + GuildItemNamecomboBox.DropDownStyle = ComboBoxStyle.DropDownList; + GuildItemNamecomboBox.FormattingEnabled = true; + GuildItemNamecomboBox.Location = new Point(126, 60); + GuildItemNamecomboBox.Margin = new Padding(4, 3, 4, 3); + GuildItemNamecomboBox.Name = "GuildItemNamecomboBox"; + GuildItemNamecomboBox.Size = new Size(166, 23); + GuildItemNamecomboBox.TabIndex = 37; + GuildItemNamecomboBox.SelectedIndexChanged += GuildItemNamecomboBox_SelectedIndexChanged; + // + // label94 + // + label94.AutoSize = true; + label94.Location = new Point(298, 63); + label94.Margin = new Padding(4, 0, 4, 0); + label94.Name = "label94"; + label94.Size = new Size(86, 15); + label94.TabIndex = 36; + label94.Text = "(Gold = blank):"; + // + // GuildAmounttextBox + // + GuildAmounttextBox.Location = new Point(126, 87); + GuildAmounttextBox.Margin = new Padding(4, 3, 4, 3); + GuildAmounttextBox.Name = "GuildAmounttextBox"; + GuildAmounttextBox.Size = new Size(166, 23); + GuildAmounttextBox.TabIndex = 35; + GuildAmounttextBox.TextChanged += GuildAmounttextBox_TextChanged; + // + // label93 + // + label93.AutoSize = true; + label93.Location = new Point(48, 90); + label93.Margin = new Padding(4, 0, 4, 0); + label93.Name = "label93"; + label93.Size = new Size(54, 15); + label93.TabIndex = 34; + label93.Text = "Amount:"; + // + // GuildDeleteCreateItembutton + // + GuildDeleteCreateItembutton.Location = new Point(335, 18); + GuildDeleteCreateItembutton.Margin = new Padding(4, 3, 4, 3); + GuildDeleteCreateItembutton.Name = "GuildDeleteCreateItembutton"; + GuildDeleteCreateItembutton.Size = new Size(24, 24); + GuildDeleteCreateItembutton.TabIndex = 29; + GuildDeleteCreateItembutton.Text = "-"; + GuildDeleteCreateItembutton.UseVisualStyleBackColor = true; + GuildDeleteCreateItembutton.Click += GuildDeleteCreateItembutton_Click; + // + // label92 + // + label92.AutoSize = true; + label92.Location = new Point(48, 63); + label92.Margin = new Padding(4, 0, 4, 0); + label92.Name = "label92"; + label92.Size = new Size(69, 15); + label92.TabIndex = 32; + label92.Text = "Item Name:"; + // + // GuildCreateListcomboBox + // + GuildCreateListcomboBox.DropDownStyle = ComboBoxStyle.DropDownList; + GuildCreateListcomboBox.FormattingEnabled = true; + GuildCreateListcomboBox.Location = new Point(186, 18); + GuildCreateListcomboBox.Margin = new Padding(4, 3, 4, 3); + GuildCreateListcomboBox.Name = "GuildCreateListcomboBox"; + GuildCreateListcomboBox.Size = new Size(107, 23); + GuildCreateListcomboBox.TabIndex = 26; + GuildCreateListcomboBox.SelectedIndexChanged += GuildCreateListcomboBox_SelectedIndexChanged; + // + // GuildAddCreatItembutton + // + GuildAddCreatItembutton.Location = new Point(301, 18); + GuildAddCreatItembutton.Margin = new Padding(4, 3, 4, 3); + GuildAddCreatItembutton.Name = "GuildAddCreatItembutton"; + GuildAddCreatItembutton.Size = new Size(24, 24); + GuildAddCreatItembutton.TabIndex = 28; + GuildAddCreatItembutton.Text = "+"; + GuildAddCreatItembutton.UseVisualStyleBackColor = true; + GuildAddCreatItembutton.Click += GuildAddCreatItembutton_Click; + // + // label86 + // + label86.AutoSize = true; + label86.Location = new Point(10, 23); + label86.Margin = new Padding(4, 0, 4, 0); + label86.Name = "label86"; + label86.Size = new Size(162, 15); + label86.TabIndex = 27; + label86.Text = "Guild Creation Requirements:"; + // + // tabPage2 + // + tabPage2.Controls.Add(groupBox9); + tabPage2.Location = new Point(4, 24); + tabPage2.Margin = new Padding(4, 3, 4, 3); + tabPage2.Name = "tabPage2"; + tabPage2.Padding = new Padding(4, 3, 4, 3); + tabPage2.Size = new Size(848, 400); + tabPage2.TabIndex = 1; + tabPage2.Text = "Levels"; + tabPage2.UseVisualStyleBackColor = true; + // + // groupBox9 + // + groupBox9.Controls.Add(label84); + groupBox9.Controls.Add(label85); + groupBox9.Controls.Add(GuildDeleteLevelbutton); + groupBox9.Controls.Add(GuildExpNeededtextBox); + groupBox9.Controls.Add(GuildAddLevelbutton); + groupBox9.Controls.Add(GuildMemberCaptextBox); + groupBox9.Controls.Add(label83); + groupBox9.Controls.Add(GuildLevelListcomboBox); + groupBox9.Location = new Point(7, 8); + groupBox9.Margin = new Padding(4, 3, 4, 3); + groupBox9.Name = "groupBox9"; + groupBox9.Padding = new Padding(4, 3, 4, 3); + groupBox9.Size = new Size(392, 171); + groupBox9.TabIndex = 49; + groupBox9.TabStop = false; + groupBox9.Text = "Levelup"; + // + // label84 + // + label84.AutoSize = true; + label84.Location = new Point(51, 53); + label84.Margin = new Padding(4, 0, 4, 0); + label84.Name = "label84"; + label84.Size = new Size(72, 15); + label84.TabIndex = 18; + label84.Text = "Exp to lvlup:"; + // + // label85 + // + label85.AutoSize = true; + label85.Location = new Point(51, 83); + label85.Margin = new Padding(4, 0, 4, 0); + label85.Name = "label85"; + label85.Size = new Size(74, 15); + label85.TabIndex = 24; + label85.Text = "Membercap:"; + // + // GuildDeleteLevelbutton + // + GuildDeleteLevelbutton.Location = new Point(240, 17); + GuildDeleteLevelbutton.Margin = new Padding(4, 3, 4, 3); + GuildDeleteLevelbutton.Name = "GuildDeleteLevelbutton"; + GuildDeleteLevelbutton.Size = new Size(24, 24); + GuildDeleteLevelbutton.TabIndex = 16; + GuildDeleteLevelbutton.Text = "-"; + GuildDeleteLevelbutton.UseVisualStyleBackColor = true; + GuildDeleteLevelbutton.Click += GuildDeleteLevelbutton_Click; + // + // GuildExpNeededtextBox + // + GuildExpNeededtextBox.Location = new Point(134, 50); + GuildExpNeededtextBox.Margin = new Padding(4, 3, 4, 3); + GuildExpNeededtextBox.Name = "GuildExpNeededtextBox"; + GuildExpNeededtextBox.Size = new Size(130, 23); + GuildExpNeededtextBox.TabIndex = 17; + GuildExpNeededtextBox.TextChanged += GuildExpNeededtextBox_TextChanged; + // + // GuildAddLevelbutton + // + GuildAddLevelbutton.Location = new Point(206, 17); + GuildAddLevelbutton.Margin = new Padding(4, 3, 4, 3); + GuildAddLevelbutton.Name = "GuildAddLevelbutton"; + GuildAddLevelbutton.Size = new Size(24, 24); + GuildAddLevelbutton.TabIndex = 15; + GuildAddLevelbutton.Text = "+"; + GuildAddLevelbutton.UseVisualStyleBackColor = true; + GuildAddLevelbutton.Click += GuildAddLevelbutton_Click; + // + // GuildMemberCaptextBox + // + GuildMemberCaptextBox.Location = new Point(134, 80); + GuildMemberCaptextBox.Margin = new Padding(4, 3, 4, 3); + GuildMemberCaptextBox.Name = "GuildMemberCaptextBox"; + GuildMemberCaptextBox.Size = new Size(39, 23); + GuildMemberCaptextBox.TabIndex = 23; + GuildMemberCaptextBox.TextChanged += GuildMemberCaptextBox_TextChanged; + // + // label83 + // + label83.AutoSize = true; + label83.Location = new Point(51, 28); + label83.Margin = new Padding(4, 0, 4, 0); + label83.Name = "label83"; + label83.Size = new Size(65, 15); + label83.TabIndex = 14; + label83.Text = "Guild level:"; + // + // GuildLevelListcomboBox + // + GuildLevelListcomboBox.DropDownStyle = ComboBoxStyle.DropDownList; + GuildLevelListcomboBox.FormattingEnabled = true; + GuildLevelListcomboBox.Location = new Point(135, 18); + GuildLevelListcomboBox.Margin = new Padding(4, 3, 4, 3); + GuildLevelListcomboBox.Name = "GuildLevelListcomboBox"; + GuildLevelListcomboBox.Size = new Size(63, 23); + GuildLevelListcomboBox.TabIndex = 13; + GuildLevelListcomboBox.SelectedIndexChanged += GuildLevelListcomboBox_SelectedIndexChanged; + // + // tabPage3 + // + tabPage3.Controls.Add(BuffPanel); + tabPage3.Controls.Add(BuffList); + tabPage3.Controls.Add(BuffDelete); + tabPage3.Controls.Add(BuffAdd); + tabPage3.Location = new Point(4, 24); + tabPage3.Margin = new Padding(4, 3, 4, 3); + tabPage3.Name = "tabPage3"; + tabPage3.Padding = new Padding(4, 3, 4, 3); + tabPage3.Size = new Size(848, 400); + tabPage3.TabIndex = 2; + tabPage3.Text = "Buffs"; + tabPage3.UseVisualStyleBackColor = true; + // + // BuffPanel + // + BuffPanel.Controls.Add(bufftxtIcon); + BuffPanel.Controls.Add(label28); + BuffPanel.Controls.Add(BufftxtActivationCost); + BuffPanel.Controls.Add(BufftxtTimeLimit); + BuffPanel.Controls.Add(BufftxtPointsReq); + BuffPanel.Controls.Add(BuffTxtLevelReq); + BuffPanel.Controls.Add(groupBox2); + BuffPanel.Controls.Add(label9); + BuffPanel.Controls.Add(label8); + BuffPanel.Controls.Add(label7); + BuffPanel.Controls.Add(label6); + BuffPanel.Controls.Add(BufftxtName); + BuffPanel.Controls.Add(label5); + BuffPanel.Controls.Add(BufflblIndex); + BuffPanel.Location = new Point(198, 40); + BuffPanel.Margin = new Padding(4, 3, 4, 3); + BuffPanel.Name = "BuffPanel"; + BuffPanel.Size = new Size(642, 344); + BuffPanel.TabIndex = 3; + // + // bufftxtIcon + // + bufftxtIcon.Location = new Point(155, 175); + bufftxtIcon.Margin = new Padding(4, 3, 4, 3); + bufftxtIcon.Name = "bufftxtIcon"; + bufftxtIcon.Size = new Size(48, 23); + bufftxtIcon.TabIndex = 13; + bufftxtIcon.TextChanged += bufftxtIcon_TextChanged; + // + // label28 + // + label28.AutoSize = true; + label28.Location = new Point(12, 179); + label28.Margin = new Padding(4, 0, 4, 0); + label28.Name = "label28"; + label28.Size = new Size(30, 15); + label28.TabIndex = 12; + label28.Text = "Icon"; + // + // BufftxtActivationCost + // + BufftxtActivationCost.Location = new Point(155, 145); + BufftxtActivationCost.Margin = new Padding(4, 3, 4, 3); + BufftxtActivationCost.Name = "BufftxtActivationCost"; + BufftxtActivationCost.Size = new Size(48, 23); + BufftxtActivationCost.TabIndex = 11; + toolTip1.SetToolTip(BufftxtActivationCost, "Gold cost to active this.\r\nonly works if the buff is time limited."); + BufftxtActivationCost.TextChanged += BufftxtActivationCost_TextChanged; + // + // BufftxtTimeLimit + // + BufftxtTimeLimit.Location = new Point(155, 115); + BufftxtTimeLimit.Margin = new Padding(4, 3, 4, 3); + BufftxtTimeLimit.Name = "BufftxtTimeLimit"; + BufftxtTimeLimit.Size = new Size(48, 23); + BufftxtTimeLimit.TabIndex = 10; + toolTip1.SetToolTip(BufftxtTimeLimit, "0 = infinite\r\nTime in minutes the buff will last"); + BufftxtTimeLimit.TextChanged += BufftxtTimeLimit_TextChanged; + // + // BufftxtPointsReq + // + BufftxtPointsReq.Location = new Point(155, 88); + BufftxtPointsReq.Margin = new Padding(4, 3, 4, 3); + BufftxtPointsReq.Name = "BufftxtPointsReq"; + BufftxtPointsReq.Size = new Size(48, 23); + BufftxtPointsReq.TabIndex = 9; + BufftxtPointsReq.TextChanged += BufftxtPointsReq_TextChanged; + // + // BuffTxtLevelReq + // + BuffTxtLevelReq.Location = new Point(155, 58); + BuffTxtLevelReq.Margin = new Padding(4, 3, 4, 3); + BuffTxtLevelReq.Name = "BuffTxtLevelReq"; + BuffTxtLevelReq.Size = new Size(48, 23); + BuffTxtLevelReq.TabIndex = 8; + BuffTxtLevelReq.TextChanged += BuffTxtLevelReq_TextChanged; + // + // groupBox2 + // + groupBox2.Controls.Add(BufftxtGoldRate); + groupBox2.Controls.Add(BufftxtDropRate); + groupBox2.Controls.Add(BufftxtSkillRate); + groupBox2.Controls.Add(BufftxtCraftRate); + groupBox2.Controls.Add(BufftxtExpRate); + groupBox2.Controls.Add(BufftxtFishRate); + groupBox2.Controls.Add(BufftxtGemRate); + groupBox2.Controls.Add(BufftxtMineRate); + groupBox2.Controls.Add(BufftxtMpRegen); + groupBox2.Controls.Add(BufftxtHpRegen); + groupBox2.Controls.Add(BufftxtMaxMp); + groupBox2.Controls.Add(BufftxtMaxHp); + groupBox2.Controls.Add(BufftxtAttack); + groupBox2.Controls.Add(BufftxtSc); + groupBox2.Controls.Add(BufftxtMc); + groupBox2.Controls.Add(BufftxtDc); + groupBox2.Controls.Add(BufftxtMac); + groupBox2.Controls.Add(BufftxtAc); + groupBox2.Controls.Add(label27); + groupBox2.Controls.Add(label26); + groupBox2.Controls.Add(label25); + groupBox2.Controls.Add(label24); + groupBox2.Controls.Add(label23); + groupBox2.Controls.Add(label22); + groupBox2.Controls.Add(label21); + groupBox2.Controls.Add(label20); + groupBox2.Controls.Add(label19); + groupBox2.Controls.Add(label18); + groupBox2.Controls.Add(label17); + groupBox2.Controls.Add(label16); + groupBox2.Controls.Add(label15); + groupBox2.Controls.Add(label14); + groupBox2.Controls.Add(label13); + groupBox2.Controls.Add(label12); + groupBox2.Controls.Add(label11); + groupBox2.Controls.Add(label10); + groupBox2.Location = new Point(211, 10); + groupBox2.Margin = new Padding(4, 3, 4, 3); + groupBox2.Name = "groupBox2"; + groupBox2.Padding = new Padding(4, 3, 4, 3); + groupBox2.Size = new Size(413, 320); + groupBox2.TabIndex = 7; + groupBox2.TabStop = false; + groupBox2.Text = "Available Buffs"; + // + // BufftxtGoldRate + // + BufftxtGoldRate.Location = new Point(338, 225); + BufftxtGoldRate.Margin = new Padding(4, 3, 4, 3); + BufftxtGoldRate.Name = "BufftxtGoldRate"; + BufftxtGoldRate.Size = new Size(48, 23); + BufftxtGoldRate.TabIndex = 34; + BufftxtGoldRate.TextChanged += BufftxtGoldRate_TextChanged; + // + // BufftxtDropRate + // + BufftxtDropRate.Location = new Point(338, 195); + BufftxtDropRate.Margin = new Padding(4, 3, 4, 3); + BufftxtDropRate.Name = "BufftxtDropRate"; + BufftxtDropRate.Size = new Size(48, 23); + BufftxtDropRate.TabIndex = 33; + BufftxtDropRate.TextChanged += BufftxtDropRate_TextChanged; + // + // BufftxtSkillRate + // + BufftxtSkillRate.Location = new Point(338, 165); + BufftxtSkillRate.Margin = new Padding(4, 3, 4, 3); + BufftxtSkillRate.Name = "BufftxtSkillRate"; + BufftxtSkillRate.Size = new Size(48, 23); + BufftxtSkillRate.TabIndex = 32; + BufftxtSkillRate.TextChanged += BufftxtSkillRate_TextChanged; + // + // BufftxtCraftRate + // + BufftxtCraftRate.Location = new Point(338, 136); + BufftxtCraftRate.Margin = new Padding(4, 3, 4, 3); + BufftxtCraftRate.Name = "BufftxtCraftRate"; + BufftxtCraftRate.Size = new Size(48, 23); + BufftxtCraftRate.TabIndex = 31; + BufftxtCraftRate.TextChanged += BufftxtCraftRate_TextChanged; + // + // BufftxtExpRate + // + BufftxtExpRate.Location = new Point(338, 106); + BufftxtExpRate.Margin = new Padding(4, 3, 4, 3); + BufftxtExpRate.Name = "BufftxtExpRate"; + BufftxtExpRate.Size = new Size(48, 23); + BufftxtExpRate.TabIndex = 30; + BufftxtExpRate.TextChanged += BufftxtExpRate_TextChanged; + // + // BufftxtFishRate + // + BufftxtFishRate.Location = new Point(338, 77); + BufftxtFishRate.Margin = new Padding(4, 3, 4, 3); + BufftxtFishRate.Name = "BufftxtFishRate"; + BufftxtFishRate.Size = new Size(48, 23); + BufftxtFishRate.TabIndex = 29; + BufftxtFishRate.TextChanged += BufftxtFishRate_TextChanged; + // + // BufftxtGemRate + // + BufftxtGemRate.Location = new Point(338, 47); + BufftxtGemRate.Margin = new Padding(4, 3, 4, 3); + BufftxtGemRate.Name = "BufftxtGemRate"; + BufftxtGemRate.Size = new Size(48, 23); + BufftxtGemRate.TabIndex = 28; + BufftxtGemRate.TextChanged += BufftxtGemRate_TextChanged; + // + // BufftxtMineRate + // + BufftxtMineRate.Location = new Point(338, 17); + BufftxtMineRate.Margin = new Padding(4, 3, 4, 3); + BufftxtMineRate.Name = "BufftxtMineRate"; + BufftxtMineRate.Size = new Size(48, 23); + BufftxtMineRate.TabIndex = 27; + BufftxtMineRate.TextChanged += BufftxtMineRate_TextChanged; + // + // BufftxtMpRegen + // + BufftxtMpRegen.Location = new Point(110, 285); + BufftxtMpRegen.Margin = new Padding(4, 3, 4, 3); + BufftxtMpRegen.Name = "BufftxtMpRegen"; + BufftxtMpRegen.Size = new Size(48, 23); + BufftxtMpRegen.TabIndex = 26; + BufftxtMpRegen.TextChanged += BufftxtMpRegen_TextChanged; + // + // BufftxtHpRegen + // + BufftxtHpRegen.Location = new Point(110, 255); + BufftxtHpRegen.Margin = new Padding(4, 3, 4, 3); + BufftxtHpRegen.Name = "BufftxtHpRegen"; + BufftxtHpRegen.Size = new Size(48, 23); + BufftxtHpRegen.TabIndex = 25; + BufftxtHpRegen.TextChanged += BufftxtHpRegen_TextChanged; + // + // BufftxtMaxMp + // + BufftxtMaxMp.Location = new Point(110, 225); + BufftxtMaxMp.Margin = new Padding(4, 3, 4, 3); + BufftxtMaxMp.Name = "BufftxtMaxMp"; + BufftxtMaxMp.Size = new Size(48, 23); + BufftxtMaxMp.TabIndex = 24; + BufftxtMaxMp.TextChanged += BufftxtMaxMp_TextChanged; + // + // BufftxtMaxHp + // + BufftxtMaxHp.Location = new Point(110, 195); + BufftxtMaxHp.Margin = new Padding(4, 3, 4, 3); + BufftxtMaxHp.Name = "BufftxtMaxHp"; + BufftxtMaxHp.Size = new Size(48, 23); + BufftxtMaxHp.TabIndex = 23; + BufftxtMaxHp.TextChanged += BufftxtMaxHp_TextChanged; + // + // BufftxtAttack + // + BufftxtAttack.Location = new Point(110, 165); + BufftxtAttack.Margin = new Padding(4, 3, 4, 3); + BufftxtAttack.Name = "BufftxtAttack"; + BufftxtAttack.Size = new Size(48, 23); + BufftxtAttack.TabIndex = 22; + BufftxtAttack.TextChanged += BufftxtAttack_TextChanged; + // + // BufftxtSc + // + BufftxtSc.Location = new Point(110, 135); + BufftxtSc.Margin = new Padding(4, 3, 4, 3); + BufftxtSc.Name = "BufftxtSc"; + BufftxtSc.Size = new Size(48, 23); + BufftxtSc.TabIndex = 21; + BufftxtSc.TextChanged += BufftxtSc_TextChanged; + // + // BufftxtMc + // + BufftxtMc.Location = new Point(110, 106); + BufftxtMc.Margin = new Padding(4, 3, 4, 3); + BufftxtMc.Name = "BufftxtMc"; + BufftxtMc.Size = new Size(48, 23); + BufftxtMc.TabIndex = 20; + BufftxtMc.TextChanged += BufftxtMc_TextChanged; + // + // BufftxtDc + // + BufftxtDc.Location = new Point(110, 77); + BufftxtDc.Margin = new Padding(4, 3, 4, 3); + BufftxtDc.Name = "BufftxtDc"; + BufftxtDc.Size = new Size(48, 23); + BufftxtDc.TabIndex = 19; + BufftxtDc.TextChanged += BufftxtDc_TextChanged; + // + // BufftxtMac + // + BufftxtMac.Location = new Point(110, 47); + BufftxtMac.Margin = new Padding(4, 3, 4, 3); + BufftxtMac.Name = "BufftxtMac"; + BufftxtMac.Size = new Size(48, 23); + BufftxtMac.TabIndex = 18; + BufftxtMac.TextChanged += BufftxtMac_TextChanged; + // + // BufftxtAc + // + BufftxtAc.Location = new Point(110, 17); + BufftxtAc.Margin = new Padding(4, 3, 4, 3); + BufftxtAc.Name = "BufftxtAc"; + BufftxtAc.Size = new Size(48, 23); + BufftxtAc.TabIndex = 12; + BufftxtAc.TextChanged += BufftxtAc_TextChanged; + // + // label27 + // + label27.AutoSize = true; + label27.Location = new Point(234, 228); + label27.Margin = new Padding(4, 0, 4, 0); + label27.Name = "label27"; + label27.Size = new Size(74, 15); + label27.TabIndex = 17; + label27.Text = "Gold Rate %:"; + // + // label26 + // + label26.AutoSize = true; + label26.Location = new Point(234, 198); + label26.Margin = new Padding(4, 0, 4, 0); + label26.Name = "label26"; + label26.Size = new Size(75, 15); + label26.TabIndex = 16; + label26.Text = "Drop Rate %:"; + // + // label25 + // + label25.AutoSize = true; + label25.Location = new Point(234, 168); + label25.Margin = new Padding(4, 0, 4, 0); + label25.Name = "label25"; + label25.Size = new Size(67, 15); + label25.TabIndex = 15; + label25.Text = "Skill Rate X:"; + // + // label24 + // + label24.AutoSize = true; + label24.Location = new Point(234, 140); + label24.Margin = new Padding(4, 0, 4, 0); + label24.Name = "label24"; + label24.Size = new Size(75, 15); + label24.TabIndex = 14; + label24.Text = "Craft Rate %:"; + // + // label23 + // + label23.AutoSize = true; + label23.Location = new Point(234, 110); + label23.Margin = new Padding(4, 0, 4, 0); + label23.Name = "label23"; + label23.Size = new Size(68, 15); + label23.TabIndex = 13; + label23.Text = "Exp Rate %:"; + // + // label22 + // + label22.AutoSize = true; + label22.Location = new Point(234, 81); + label22.Margin = new Padding(4, 0, 4, 0); + label22.Name = "label22"; + label22.Size = new Size(87, 15); + label22.TabIndex = 12; + label22.Text = "Fishing Rate %:"; + // + // label21 + // + label21.AutoSize = true; + label21.Location = new Point(234, 51); + label21.Margin = new Padding(4, 0, 4, 0); + label21.Name = "label21"; + label21.Size = new Size(74, 15); + label21.TabIndex = 11; + label21.Text = "Gem Rate %:"; + // + // label20 + // + label20.AutoSize = true; + label20.Location = new Point(234, 21); + label20.Margin = new Padding(4, 0, 4, 0); + label20.Name = "label20"; + label20.Size = new Size(76, 15); + label20.TabIndex = 10; + label20.Text = "Mine Rate %:"; + // + // label19 + // + label19.AutoSize = true; + label19.Location = new Point(13, 288); + label19.Margin = new Padding(4, 0, 4, 0); + label19.Name = "label19"; + label19.Size = new Size(64, 15); + label19.TabIndex = 9; + label19.Text = "Mp Regen:"; + // + // label18 + // + label18.AutoSize = true; + label18.Location = new Point(13, 258); + label18.Margin = new Padding(4, 0, 4, 0); + label18.Name = "label18"; + label18.Size = new Size(62, 15); + label18.TabIndex = 8; + label18.Text = "Hp Regen:"; + // + // label17 + // + label17.AutoSize = true; + label17.Location = new Point(13, 228); + label17.Margin = new Padding(4, 0, 4, 0); + label17.Name = "label17"; + label17.Size = new Size(51, 15); + label17.TabIndex = 7; + label17.Text = "MaxMp:"; + // + // label16 + // + label16.AutoSize = true; + label16.Location = new Point(13, 198); + label16.Margin = new Padding(4, 0, 4, 0); + label16.Name = "label16"; + label16.Size = new Size(49, 15); + label16.TabIndex = 6; + label16.Text = "MaxHp:"; + // + // label15 + // + label15.AutoSize = true; + label15.Location = new Point(13, 168); + label15.Margin = new Padding(4, 0, 4, 0); + label15.Name = "label15"; + label15.Size = new Size(44, 15); + label15.TabIndex = 5; + label15.Text = "Attack:"; + // + // label14 + // + label14.AutoSize = true; + label14.Location = new Point(13, 140); + label14.Margin = new Padding(4, 0, 4, 0); + label14.Name = "label14"; + label14.Size = new Size(24, 15); + label14.TabIndex = 4; + label14.Text = "SC:"; + // + // label13 + // + label13.AutoSize = true; + label13.Location = new Point(13, 110); + label13.Margin = new Padding(4, 0, 4, 0); + label13.Name = "label13"; + label13.Size = new Size(29, 15); + label13.TabIndex = 3; + label13.Text = "MC:"; + // + // label12 + // + label12.AutoSize = true; + label12.Location = new Point(13, 81); + label12.Margin = new Padding(4, 0, 4, 0); + label12.Name = "label12"; + label12.Size = new Size(26, 15); + label12.TabIndex = 2; + label12.Text = "DC:"; + // + // label11 + // + label11.AutoSize = true; + label11.Location = new Point(13, 51); + label11.Margin = new Padding(4, 0, 4, 0); + label11.Name = "label11"; + label11.Size = new Size(37, 15); + label11.TabIndex = 1; + label11.Text = "MAC:"; + // + // label10 + // + label10.AutoSize = true; + label10.Location = new Point(13, 21); + label10.Margin = new Padding(4, 0, 4, 0); + label10.Name = "label10"; + label10.Size = new Size(26, 15); + label10.TabIndex = 0; + label10.Text = "AC:"; + // + // label9 + // + label9.AutoSize = true; + label9.Location = new Point(12, 149); + label9.Margin = new Padding(4, 0, 4, 0); + label9.Name = "label9"; + label9.Size = new Size(91, 15); + label9.TabIndex = 6; + label9.Text = "Activation Cost:"; + // + // label8 + // + label8.AutoSize = true; + label8.Location = new Point(12, 120); + label8.Margin = new Padding(4, 0, 4, 0); + label8.Name = "label8"; + label8.Size = new Size(66, 15); + label8.TabIndex = 5; + label8.Text = "Time Limit:"; + // + // label7 + // + label7.AutoSize = true; + label7.Location = new Point(12, 91); + label7.Margin = new Padding(4, 0, 4, 0); + label7.Name = "label7"; + label7.Size = new Size(93, 15); + label7.TabIndex = 4; + label7.Text = "Points Required:"; + // + // label6 + // + label6.AutoSize = true; + label6.Location = new Point(12, 61); + label6.Margin = new Padding(4, 0, 4, 0); + label6.Name = "label6"; + label6.Size = new Size(133, 15); + label6.TabIndex = 3; + label6.Text = "GuildLevelRequirement:"; + // + // BufftxtName + // + BufftxtName.Location = new Point(88, 28); + BufftxtName.Margin = new Padding(4, 3, 4, 3); + BufftxtName.Name = "BufftxtName"; + BufftxtName.Size = new Size(116, 23); + BufftxtName.TabIndex = 2; + BufftxtName.TextChanged += BufftxtName_TextChanged; + // + // label5 + // + label5.AutoSize = true; + label5.Location = new Point(12, 31); + label5.Margin = new Padding(4, 0, 4, 0); + label5.Name = "label5"; + label5.Size = new Size(42, 15); + label5.TabIndex = 1; + label5.Text = "Name:"; + // + // BufflblIndex + // + BufflblIndex.AutoSize = true; + BufflblIndex.Location = new Point(12, 10); + BufflblIndex.Margin = new Padding(4, 0, 4, 0); + BufflblIndex.Name = "BufflblIndex"; + BufflblIndex.Size = new Size(60, 15); + BufflblIndex.TabIndex = 0; + BufflblIndex.Text = "Index: 0"; + // + // BuffList + // + BuffList.FormattingEnabled = true; + BuffList.ItemHeight = 15; + BuffList.Location = new Point(9, 40); + BuffList.Margin = new Padding(4, 3, 4, 3); + BuffList.Name = "BuffList"; + BuffList.Size = new Size(181, 349); + BuffList.TabIndex = 2; + BuffList.SelectedIndexChanged += BuffList_SelectedIndexChanged; + // + // BuffDelete + // + BuffDelete.Location = new Point(104, 7); + BuffDelete.Margin = new Padding(4, 3, 4, 3); + BuffDelete.Name = "BuffDelete"; + BuffDelete.Size = new Size(88, 27); + BuffDelete.TabIndex = 1; + BuffDelete.Text = "Delete"; + BuffDelete.UseVisualStyleBackColor = true; + BuffDelete.Click += BuffDelete_Click; + // + // BuffAdd + // + BuffAdd.Location = new Point(9, 7); + BuffAdd.Margin = new Padding(4, 3, 4, 3); + BuffAdd.Name = "BuffAdd"; + BuffAdd.Size = new Size(88, 27); + BuffAdd.TabIndex = 0; + BuffAdd.Text = "Add"; + BuffAdd.UseVisualStyleBackColor = true; + BuffAdd.Click += BuffAdd_Click; + // + // tabPage4 + // + tabPage4.Controls.Add(groupBox1); + tabPage4.Location = new Point(4, 24); + tabPage4.Margin = new Padding(4, 3, 4, 3); + tabPage4.Name = "tabPage4"; + tabPage4.Size = new Size(848, 400); + tabPage4.TabIndex = 3; + tabPage4.Text = "Wars"; + tabPage4.UseVisualStyleBackColor = true; + // + // groupBox1 + // + groupBox1.Controls.Add(label4); + groupBox1.Controls.Add(label3); + groupBox1.Controls.Add(WarCostTextBox); + groupBox1.Controls.Add(WarLengthTextBox); + groupBox1.Controls.Add(label2); + groupBox1.Controls.Add(label1); + groupBox1.Location = new Point(6, 5); + groupBox1.Margin = new Padding(4, 3, 4, 3); + groupBox1.Name = "groupBox1"; + groupBox1.Padding = new Padding(4, 3, 4, 3); + groupBox1.Size = new Size(394, 177); + groupBox1.TabIndex = 0; + groupBox1.TabStop = false; + groupBox1.Text = "Wars"; + // + // label4 + // + label4.AutoSize = true; + label4.Location = new Point(197, 57); + label4.Margin = new Padding(4, 0, 4, 0); + label4.Name = "label4"; + label4.Size = new Size(32, 15); + label4.TabIndex = 5; + label4.Text = "Gold"; + // + // label3 + // + label3.AutoSize = true; + label3.Location = new Point(197, 27); + label3.Margin = new Padding(4, 0, 4, 0); + label3.Name = "label3"; + label3.Size = new Size(50, 15); + label3.TabIndex = 4; + label3.Text = "Minutes"; + // + // WarCostTextBox + // + WarCostTextBox.Location = new Point(74, 53); + WarCostTextBox.Margin = new Padding(4, 3, 4, 3); + WarCostTextBox.Name = "WarCostTextBox"; + WarCostTextBox.Size = new Size(116, 23); + WarCostTextBox.TabIndex = 3; + WarCostTextBox.TextChanged += WarCostTextBox_TextChanged; + // + // WarLengthTextBox + // + WarLengthTextBox.Location = new Point(74, 23); + WarLengthTextBox.Margin = new Padding(4, 3, 4, 3); + WarLengthTextBox.Name = "WarLengthTextBox"; + WarLengthTextBox.Size = new Size(116, 23); + WarLengthTextBox.TabIndex = 2; + WarLengthTextBox.TextChanged += WarLengthTextBox_TextChanged; + // + // label2 + // + label2.AutoSize = true; + label2.Location = new Point(8, 57); + label2.Margin = new Padding(4, 0, 4, 0); + label2.Name = "label2"; + label2.Size = new Size(40, 15); + label2.TabIndex = 1; + label2.Text = "Cost : "; + // + // label1 + // + label1.AutoSize = true; + label1.Location = new Point(8, 23); + label1.Margin = new Padding(4, 0, 4, 0); + label1.Name = "label1"; + label1.Size = new Size(53, 15); + label1.TabIndex = 0; + label1.Text = "Length : "; + // + // GuildInfoForm + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(878, 480); + Controls.Add(tabControl1); + Controls.Add(GuildExpratetextBox); + Controls.Add(label82); + Controls.Add(GuildPPLtextBox); + Controls.Add(label81); + Controls.Add(GuildMinOwnerLeveltextBox); + Controls.Add(label80); + Icon = (Icon)resources.GetObject("$this.Icon"); + Margin = new Padding(4, 3, 4, 3); + Name = "GuildInfoForm"; + Text = "GuildInfoForm"; + FormClosed += GuildInfoForm_FormClosed; + tabControl1.ResumeLayout(false); + tabPage1.ResumeLayout(false); + groupBox10.ResumeLayout(false); + groupBox10.PerformLayout(); + tabPage2.ResumeLayout(false); + groupBox9.ResumeLayout(false); + groupBox9.PerformLayout(); + tabPage3.ResumeLayout(false); + BuffPanel.ResumeLayout(false); + BuffPanel.PerformLayout(); + groupBox2.ResumeLayout(false); + groupBox2.PerformLayout(); + tabPage4.ResumeLayout(false); + groupBox1.ResumeLayout(false); + groupBox1.PerformLayout(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private System.Windows.Forms.TextBox GuildExpratetextBox; + private System.Windows.Forms.Label label82; + private System.Windows.Forms.TextBox GuildPPLtextBox; + private System.Windows.Forms.Label label81; + private System.Windows.Forms.TextBox GuildMinOwnerLeveltextBox; + private System.Windows.Forms.Label label80; + private System.Windows.Forms.TabControl tabControl1; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.TabPage tabPage2; + private System.Windows.Forms.GroupBox groupBox10; + private System.Windows.Forms.ComboBox GuildItemNamecomboBox; + private System.Windows.Forms.Label label94; + private System.Windows.Forms.TextBox GuildAmounttextBox; + private System.Windows.Forms.Label label93; + private System.Windows.Forms.Button GuildDeleteCreateItembutton; + private System.Windows.Forms.Label label92; + private System.Windows.Forms.ComboBox GuildCreateListcomboBox; + private System.Windows.Forms.Button GuildAddCreatItembutton; + private System.Windows.Forms.Label label86; + private System.Windows.Forms.GroupBox groupBox9; + private System.Windows.Forms.Label label84; + private System.Windows.Forms.Label label85; + private System.Windows.Forms.Button GuildDeleteLevelbutton; + private System.Windows.Forms.TextBox GuildExpNeededtextBox; + private System.Windows.Forms.Button GuildAddLevelbutton; + private System.Windows.Forms.TextBox GuildMemberCaptextBox; + private System.Windows.Forms.Label label83; + private System.Windows.Forms.ComboBox GuildLevelListcomboBox; + private System.Windows.Forms.TabPage tabPage3; + private System.Windows.Forms.TabPage tabPage4; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.TextBox WarCostTextBox; + private System.Windows.Forms.TextBox WarLengthTextBox; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Button BuffDelete; + private System.Windows.Forms.Button BuffAdd; + private System.Windows.Forms.ListBox BuffList; + private System.Windows.Forms.Panel BuffPanel; + private System.Windows.Forms.Label BufflblIndex; + private System.Windows.Forms.TextBox BufftxtName; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.Label label15; + private System.Windows.Forms.Label label14; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.Label label19; + private System.Windows.Forms.Label label18; + private System.Windows.Forms.Label label17; + private System.Windows.Forms.Label label16; + private System.Windows.Forms.Label label20; + private System.Windows.Forms.Label label21; + private System.Windows.Forms.Label label23; + private System.Windows.Forms.Label label22; + private System.Windows.Forms.Label label24; + private System.Windows.Forms.Label label25; + private System.Windows.Forms.Label label27; + private System.Windows.Forms.Label label26; + private System.Windows.Forms.TextBox BuffTxtLevelReq; + private System.Windows.Forms.TextBox BufftxtActivationCost; + private System.Windows.Forms.ToolTip toolTip1; + private System.Windows.Forms.TextBox BufftxtTimeLimit; + private System.Windows.Forms.TextBox BufftxtPointsReq; + private System.Windows.Forms.TextBox BufftxtGoldRate; + private System.Windows.Forms.TextBox BufftxtDropRate; + private System.Windows.Forms.TextBox BufftxtSkillRate; + private System.Windows.Forms.TextBox BufftxtCraftRate; + private System.Windows.Forms.TextBox BufftxtExpRate; + private System.Windows.Forms.TextBox BufftxtFishRate; + private System.Windows.Forms.TextBox BufftxtGemRate; + private System.Windows.Forms.TextBox BufftxtMineRate; + private System.Windows.Forms.TextBox BufftxtMpRegen; + private System.Windows.Forms.TextBox BufftxtHpRegen; + private System.Windows.Forms.TextBox BufftxtMaxMp; + private System.Windows.Forms.TextBox BufftxtMaxHp; + private System.Windows.Forms.TextBox BufftxtAttack; + private System.Windows.Forms.TextBox BufftxtSc; + private System.Windows.Forms.TextBox BufftxtMc; + private System.Windows.Forms.TextBox BufftxtDc; + private System.Windows.Forms.TextBox BufftxtMac; + private System.Windows.Forms.TextBox BufftxtAc; + private System.Windows.Forms.TextBox bufftxtIcon; + private System.Windows.Forms.Label label28; + + } +} \ No newline at end of file diff --git a/Server.MirForms/Systems/GuildInfoForm.cs b/Server.MirForms/Systems/GuildInfoForm.cs new file mode 100644 index 0000000..ce98f26 --- /dev/null +++ b/Server.MirForms/Systems/GuildInfoForm.cs @@ -0,0 +1,616 @@ +using Server.MirEnvir; +using Server.MirObjects; + +namespace Server +{ + public partial class GuildInfoForm : Form + { + public Envir Envir => SMain.EditEnvir; + + public bool GuildsChanged = false; + GuildBuffInfo SelectedBuff; + + public GuildInfoForm() + { + InitializeComponent(); + + for (int i = 0; i < Settings.Guild_ExperienceList.Count; i++) + GuildLevelListcomboBox.Items.Add(i); + for (int i = 0; i < Settings.Guild_CreationCostList.Count; i++) + GuildCreateListcomboBox.Items.Add(i); + GuildItemNamecomboBox.Items.Clear(); + GuildItemNamecomboBox.Items.Add(""); + for (int i = 0; i < Envir.ItemInfoList.Count; i++) + { + GuildItemNamecomboBox.Items.Add(Envir.ItemInfoList[i]); + } + for (int i = 0; i < Settings.Guild_BuffList.Count; i++) + BuffList.Items.Add(Settings.Guild_BuffList[i]); + UpdateGuildInterface(); + } + + private void GuildInfoForm_FormClosed(object sender, FormClosedEventArgs e) + { + if (GuildsChanged) + Settings.SaveGuildSettings(); + } + + private void UpdateGuildInterface() + { + GuildMinOwnerLeveltextBox.Text = Settings.Guild_RequiredLevel.ToString(); + GuildPPLtextBox.Text = Settings.Guild_PointPerLevel.ToString(); + GuildExpratetextBox.Text = Settings.Guild_ExpRate.ToString(); + WarLengthTextBox.Text = Settings.Guild_WarTime.ToString(); + WarCostTextBox.Text = Settings.Guild_WarCost.ToString(); + + if ((GuildLevelListcomboBox.SelectedItem == null) || (GuildLevelListcomboBox.SelectedIndex >= Settings.Guild_ExperienceList.Count) || (GuildLevelListcomboBox.SelectedIndex >= Settings.Guild_MembercapList.Count)) + { + GuildExpNeededtextBox.Text = string.Empty; + GuildMemberCaptextBox.Text = string.Empty; + } + else + { + GuildExpNeededtextBox.Text = Settings.Guild_ExperienceList[GuildLevelListcomboBox.SelectedIndex].ToString(); + GuildMemberCaptextBox.Text = Settings.Guild_MembercapList[GuildLevelListcomboBox.SelectedIndex].ToString(); + } + if ((GuildCreateListcomboBox.SelectedItem == null) || (GuildCreateListcomboBox.SelectedIndex >= Settings.Guild_CreationCostList.Count)) + { + GuildItemNamecomboBox.SelectedIndex = 0; + GuildAmounttextBox.Text = string.Empty; + } + else + { + if (Settings.Guild_CreationCostList[GuildCreateListcomboBox.SelectedIndex].Item == null) + GuildItemNamecomboBox.SelectedIndex = 0; + else + GuildItemNamecomboBox.SelectedIndex = Settings.Guild_CreationCostList[GuildCreateListcomboBox.SelectedIndex].Item.Index; + GuildAmounttextBox.Text = Settings.Guild_CreationCostList[GuildCreateListcomboBox.SelectedIndex].Amount.ToString(); + } + if (BuffList.SelectedItem == null) + { + SelectedBuff = null; + BuffPanel.Enabled = false; + BufflblIndex.Text = "No Buff Selected"; + BufftxtName.Text = string.Empty; + BuffTxtLevelReq.Text = string.Empty; + BufftxtPointsReq.Text = string.Empty; + BufftxtTimeLimit.Text = string.Empty; + BufftxtActivationCost.Text = string.Empty; + bufftxtIcon.Text = string.Empty; + BufftxtAc.Text = string.Empty; + BufftxtMac.Text = string.Empty; + BufftxtDc.Text = string.Empty; + BufftxtMc.Text = string.Empty; + BufftxtSc.Text = string.Empty; + BufftxtAttack.Text = string.Empty; + BufftxtHpRegen.Text = string.Empty; + BufftxtMpRegen.Text = string.Empty; + BufftxtMaxHp.Text = string.Empty; + BufftxtMaxMp.Text = string.Empty; + BufftxtMineRate.Text = string.Empty; + BufftxtGemRate.Text = string.Empty; + BufftxtFishRate.Text = string.Empty; + BufftxtExpRate.Text = string.Empty; + BufftxtCraftRate.Text = string.Empty; + BufftxtSkillRate.Text = string.Empty; + BufftxtDropRate.Text = string.Empty; + BufftxtGoldRate.Text = string.Empty; + } + else + { + SelectedBuff = (GuildBuffInfo)BuffList.SelectedItem; + BuffPanel.Enabled = true; + BufflblIndex.Text = $"Index: {SelectedBuff.Id}"; + BufftxtName.Text = SelectedBuff.Name; + BuffTxtLevelReq.Text = SelectedBuff.LevelRequirement.ToString(); + BufftxtPointsReq.Text = SelectedBuff.PointsRequirement.ToString(); + BufftxtTimeLimit.Text = SelectedBuff.TimeLimit.ToString(); + BufftxtActivationCost.Text = SelectedBuff.ActivationCost.ToString(); + bufftxtIcon.Text = SelectedBuff.Icon.ToString(); + BufftxtAc.Text = SelectedBuff.Stats[Stat.MaxAC].ToString(); + BufftxtMac.Text = SelectedBuff.Stats[Stat.MaxMAC].ToString(); + BufftxtDc.Text = SelectedBuff.Stats[Stat.MaxDC].ToString(); + BufftxtMc.Text = SelectedBuff.Stats[Stat.MaxMC].ToString(); + BufftxtSc.Text = SelectedBuff.Stats[Stat.MaxSC].ToString(); + BufftxtAttack.Text = SelectedBuff.Stats[Stat.AttackBonus].ToString(); + BufftxtHpRegen.Text = SelectedBuff.Stats[Stat.HealthRecovery].ToString(); + BufftxtMpRegen.Text = SelectedBuff.Stats[Stat.SpellRecovery].ToString(); + BufftxtMaxHp.Text = SelectedBuff.Stats[Stat.HP].ToString(); + BufftxtMaxMp.Text = SelectedBuff.Stats[Stat.MP].ToString(); + BufftxtMineRate.Text = SelectedBuff.Stats[Stat.MineRatePercent].ToString(); + BufftxtGemRate.Text = SelectedBuff.Stats[Stat.GemRatePercent].ToString(); + BufftxtExpRate.Text = SelectedBuff.Stats[Stat.ExpRatePercent].ToString(); + BufftxtCraftRate.Text = SelectedBuff.Stats[Stat.CraftRatePercent].ToString(); + BufftxtSkillRate.Text = SelectedBuff.Stats[Stat.SkillGainMultiplier].ToString(); + BufftxtDropRate.Text = SelectedBuff.Stats[Stat.ItemDropRatePercent].ToString(); + BufftxtGoldRate.Text = SelectedBuff.Stats[Stat.GoldDropRatePercent].ToString(); + } + } + + private void GuildMinOwnerLeveltextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + if (!byte.TryParse(ActiveControl.Text, out byte temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + Settings.Guild_RequiredLevel = temp; + GuildsChanged = true; + } + + private void GuildPPLtextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + if (!byte.TryParse(ActiveControl.Text, out byte temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + Settings.Guild_PointPerLevel = temp; + GuildsChanged = true; + } + + private void GuildExpratetextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + if (!byte.TryParse(ActiveControl.Text, out byte temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + Settings.Guild_ExpRate = (float)temp / 100; + GuildsChanged = true; + } + + private void GuildCreateListcomboBox_SelectedIndexChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + UpdateGuildInterface(); + } + + private void GuildAddCreatItembutton_Click(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + Settings.Guild_CreationCostList.Add(new GuildItemVolume()); + GuildCreateListcomboBox.Items.Add(Settings.Guild_CreationCostList.Count - 1); + GuildCreateListcomboBox.SelectedIndex = Settings.Guild_CreationCostList.Count - 1; + UpdateGuildInterface(); + GuildsChanged = true; + } + + private void GuildDeleteCreateItembutton_Click(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (MessageBox.Show("Are you sure you want to delete the last index?", "Delete?", MessageBoxButtons.YesNo) != DialogResult.Yes) return; + + GuildCreateListcomboBox.Items.RemoveAt(Settings.Guild_CreationCostList.Count - 1); + Settings.Guild_CreationCostList.RemoveAt(Settings.Guild_CreationCostList.Count - 1); + UpdateGuildInterface(); + GuildsChanged = true; + } + + private void GuildItemNamecomboBox_SelectedIndexChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + //if (GuildLevelListcomboBox.SelectedItem == null) return; + + if (GuildItemNamecomboBox.SelectedIndex == 0) + { + Settings.Guild_CreationCostList[GuildCreateListcomboBox.SelectedIndex].Item = null; + Settings.Guild_CreationCostList[GuildCreateListcomboBox.SelectedIndex].ItemName = ""; + } + else + { + Settings.Guild_CreationCostList[GuildCreateListcomboBox.SelectedIndex].Item = (ItemInfo)GuildItemNamecomboBox.SelectedItem; + Settings.Guild_CreationCostList[GuildCreateListcomboBox.SelectedIndex].ItemName = Settings.Guild_CreationCostList[GuildCreateListcomboBox.SelectedIndex].Item.Name; + } + UpdateGuildInterface(); + GuildsChanged = true; + } + + private void GuildAmounttextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (GuildLevelListcomboBox.SelectedItem == null) return; + + if (!uint.TryParse(ActiveControl.Text, out uint temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + + ActiveControl.BackColor = SystemColors.Window; + Settings.Guild_CreationCostList[GuildCreateListcomboBox.SelectedIndex].Amount = temp; + UpdateGuildInterface(); + GuildsChanged = true; + } + + private void GuildLevelListcomboBox_SelectedIndexChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + UpdateGuildInterface(); + } + + private void GuildAddLevelbutton_Click(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + Settings.Guild_ExperienceList.Add(0); + Settings.Guild_MembercapList.Add(0); + GuildLevelListcomboBox.Items.Add(Settings.Guild_ExperienceList.Count - 1); + GuildLevelListcomboBox.SelectedIndex = Settings.Guild_ExperienceList.Count - 1; + UpdateGuildInterface(); + GuildsChanged = true; + } + + private void GuildDeleteLevelbutton_Click(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (MessageBox.Show("Are you sure you want to delete the last index?", "Delete?", MessageBoxButtons.YesNo) != DialogResult.Yes) return; + + GuildLevelListcomboBox.Items.RemoveAt(Settings.Guild_ExperienceList.Count - 1); + Settings.Guild_ExperienceList.RemoveAt(Settings.Guild_ExperienceList.Count - 1); + Settings.Guild_MembercapList.RemoveAt(Settings.Guild_MembercapList.Count - 1); + UpdateGuildInterface(); + GuildsChanged = true; + } + + private void GuildExpNeededtextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (GuildLevelListcomboBox.SelectedItem == null) return; + + if (!long.TryParse(ActiveControl.Text, out long temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + + ActiveControl.BackColor = SystemColors.Window; + Settings.Guild_ExperienceList[GuildLevelListcomboBox.SelectedIndex] = temp; + UpdateGuildInterface(); + GuildsChanged = true; + } + + private void GuildMemberCaptextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (GuildLevelListcomboBox.SelectedItem == null) return; + + if (!int.TryParse(ActiveControl.Text, out int temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + + ActiveControl.BackColor = SystemColors.Window; + Settings.Guild_MembercapList[GuildLevelListcomboBox.SelectedIndex] = temp; + UpdateGuildInterface(); + GuildsChanged = true; + } + + + private void WarLengthTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + if (!long.TryParse(ActiveControl.Text, out long temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + Settings.Guild_WarTime = temp; + GuildsChanged = true; + } + + private void WarCostTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + if (!uint.TryParse(ActiveControl.Text, out uint temp)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + Settings.Guild_WarCost = temp; + GuildsChanged = true; + } + + private bool IsValid(ref byte input, object sender) + { + if (ActiveControl != sender) return false; + if (SelectedBuff == null) return false; + if (!byte.TryParse(ActiveControl.Text, out input)) + { + ActiveControl.BackColor = Color.Red; + return false; + } + return true; + } + + private bool IsValid(ref uint input, object sender) + { + if (ActiveControl != sender) return false; + if (SelectedBuff == null) return false; + if (!uint.TryParse(ActiveControl.Text, out input)) + { + ActiveControl.BackColor = Color.Red; + return false; + } + return true; + } + + private bool IsValid(ref int input, object sender) + { + if (ActiveControl != sender) return false; + if (SelectedBuff == null) return false; + if (!int.TryParse(ActiveControl.Text, out input)) + { + ActiveControl.BackColor = Color.Red; + return false; + } + return true; + } + + private void BuffAdd_Click(object sender, EventArgs e) + { + int Index = 0; + for (int i = 0; i < Settings.Guild_BuffList.Count; i++) + if (Index < Settings.Guild_BuffList[i].Id) + Index = Settings.Guild_BuffList[i].Id; + + GuildBuffInfo NewBuff = new GuildBuffInfo + { + Id = ++Index, + Name = "Buff " + Index.ToString() + }; + + Settings.Guild_BuffList.Add(NewBuff); + BuffList.Items.Add(NewBuff); + GuildsChanged = true; + } + + private void BuffDelete_Click(object sender, EventArgs e) + { + if (BuffList.SelectedItem == null) return; + + if (MessageBox.Show("Are you sure you want to remove the selected guildbuff?", "Remove guildbuff?", MessageBoxButtons.YesNo) != DialogResult.Yes) return; + Settings.Guild_BuffList.Remove((GuildBuffInfo)BuffList.SelectedItem); + BuffList.Items.RemoveAt(BuffList.SelectedIndex); + GuildsChanged = true; + UpdateGuildInterface(); + } + + private void BufftxtName_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (SelectedBuff == null) return; + if ((ActiveControl.Text == "") || (ActiveControl.Text.Length > 20)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + SelectedBuff.Name = ActiveControl.Text; + GuildsChanged = true; + } + + private void BuffList_SelectedIndexChanged(object sender, EventArgs e) + { + UpdateGuildInterface(); + } + + private void BuffTxtLevelReq_TextChanged(object sender, EventArgs e) + { + byte temp = 0; + if (!IsValid(ref temp, sender)) return; + ActiveControl.BackColor = SystemColors.Window; + SelectedBuff.LevelRequirement = temp; + GuildsChanged = true; + } + + private void BufftxtPointsReq_TextChanged(object sender, EventArgs e) + { + byte temp = 0; + if (!IsValid(ref temp, sender)) return; + ActiveControl.BackColor = SystemColors.Window; + SelectedBuff.PointsRequirement = temp; + GuildsChanged = true; + } + + private void BufftxtTimeLimit_TextChanged(object sender, EventArgs e) + { + uint temp2 = 0; + int temp = 0; + if (!IsValid(ref temp2, sender) || !IsValid(ref temp, sender)) return; + ActiveControl.BackColor = SystemColors.Window; + SelectedBuff.TimeLimit = temp; + GuildsChanged = true; + } + + private void BufftxtActivationCost_TextChanged(object sender, EventArgs e) + { + uint temp2 = 0; + int temp = 0; + if (!IsValid(ref temp2, sender) || !IsValid(ref temp, sender)) return; + ActiveControl.BackColor = SystemColors.Window; + SelectedBuff.ActivationCost = temp; + GuildsChanged = true; + } + + private void BufftxtAc_TextChanged(object sender, EventArgs e) + { + byte temp = 0; + if (!IsValid(ref temp, sender)) return; + ActiveControl.BackColor = SystemColors.Window; + SelectedBuff.Stats[Stat.MaxAC] = temp; + GuildsChanged = true; + } + + private void BufftxtMac_TextChanged(object sender, EventArgs e) + { + byte temp = 0; + if (!IsValid(ref temp, sender)) return; + ActiveControl.BackColor = SystemColors.Window; + SelectedBuff.Stats[Stat.MaxMAC] = temp; + GuildsChanged = true; + } + + private void BufftxtDc_TextChanged(object sender, EventArgs e) + { + byte temp = 0; + if (!IsValid(ref temp, sender)) return; + ActiveControl.BackColor = SystemColors.Window; + SelectedBuff.Stats[Stat.MaxDC] = temp; + GuildsChanged = true; + } + + private void BufftxtMc_TextChanged(object sender, EventArgs e) + { + byte temp = 0; + if (!IsValid(ref temp, sender)) return; + ActiveControl.BackColor = SystemColors.Window; + SelectedBuff.Stats[Stat.MaxMC] = temp; + GuildsChanged = true; + } + + private void BufftxtSc_TextChanged(object sender, EventArgs e) + { + byte temp = 0; + if (!IsValid(ref temp, sender)) return; + ActiveControl.BackColor = SystemColors.Window; + SelectedBuff.Stats[Stat.MaxSC] = temp; + GuildsChanged = true; + } + + private void BufftxtAttack_TextChanged(object sender, EventArgs e) + { + byte temp = 0; + if (!IsValid(ref temp, sender)) return; + ActiveControl.BackColor = SystemColors.Window; + SelectedBuff.Stats[Stat.AttackBonus] = temp; + GuildsChanged = true; + } + + private void BufftxtMaxHp_TextChanged(object sender, EventArgs e) + { + byte temp = 0; + if (!IsValid(ref temp, sender)) return; + ActiveControl.BackColor = SystemColors.Window; + SelectedBuff.Stats[Stat.HP] = temp; + GuildsChanged = true; + } + + private void BufftxtMaxMp_TextChanged(object sender, EventArgs e) + { + byte temp = 0; + if (!IsValid(ref temp, sender)) return; + ActiveControl.BackColor = SystemColors.Window; + SelectedBuff.Stats[Stat.MP] = temp; + GuildsChanged = true; + } + + private void BufftxtHpRegen_TextChanged(object sender, EventArgs e) + { + byte temp = 0; + if (!IsValid(ref temp, sender)) return; + ActiveControl.BackColor = SystemColors.Window; + SelectedBuff.Stats[Stat.HealthRecovery] = temp; + GuildsChanged = true; + } + + private void BufftxtMpRegen_TextChanged(object sender, EventArgs e) + { + byte temp = 0; + if (!IsValid(ref temp, sender)) return; + ActiveControl.BackColor = SystemColors.Window; + SelectedBuff.Stats[Stat.SpellRecovery] = temp; + GuildsChanged = true; + } + + private void BufftxtMineRate_TextChanged(object sender, EventArgs e) + { + byte temp = 0; + if (!IsValid(ref temp, sender)) return; + ActiveControl.BackColor = SystemColors.Window; + SelectedBuff.Stats[Stat.MineRatePercent] = temp; + GuildsChanged = true; + } + + private void BufftxtGemRate_TextChanged(object sender, EventArgs e) + { + byte temp = 0; + if (!IsValid(ref temp, sender)) return; + ActiveControl.BackColor = SystemColors.Window; + SelectedBuff.Stats[Stat.GemRatePercent] = temp; + GuildsChanged = true; + } + + private void BufftxtFishRate_TextChanged(object sender, EventArgs e) + { + } + + private void BufftxtExpRate_TextChanged(object sender, EventArgs e) + { + byte temp = 0; + if (!IsValid(ref temp, sender)) return; + ActiveControl.BackColor = SystemColors.Window; + SelectedBuff.Stats[Stat.ExpRatePercent] = temp; + GuildsChanged = true; + } + + private void BufftxtCraftRate_TextChanged(object sender, EventArgs e) + { + byte temp = 0; + if (!IsValid(ref temp, sender)) return; + ActiveControl.BackColor = SystemColors.Window; + SelectedBuff.Stats[Stat.CraftRatePercent] = temp; + GuildsChanged = true; + } + + private void BufftxtSkillRate_TextChanged(object sender, EventArgs e) + { + byte temp = 0; + if (!IsValid(ref temp, sender)) return; + ActiveControl.BackColor = SystemColors.Window; + SelectedBuff.Stats[Stat.SkillGainMultiplier] = temp; + GuildsChanged = true; + } + + private void BufftxtDropRate_TextChanged(object sender, EventArgs e) + { + byte temp = 0; + if (!IsValid(ref temp, sender)) return; + ActiveControl.BackColor = SystemColors.Window; + SelectedBuff.Stats[Stat.ItemDropRatePercent] = temp; + GuildsChanged = true; + } + + private void BufftxtGoldRate_TextChanged(object sender, EventArgs e) + { + byte temp = 0; + if (!IsValid(ref temp, sender)) return; + ActiveControl.BackColor = SystemColors.Window; + SelectedBuff.Stats[Stat.GoldDropRatePercent] = temp; + GuildsChanged = true; + } + + private void bufftxtIcon_TextChanged(object sender, EventArgs e) + { + uint temp2 = 0; + int temp = 0; + if (!IsValid(ref temp2, sender) || !IsValid(ref temp, sender)) return; + ActiveControl.BackColor = SystemColors.Window; + SelectedBuff.Icon = temp; + GuildsChanged = true; + } + } +} diff --git a/Server.MirForms/Systems/GuildInfoForm.resx b/Server.MirForms/Systems/GuildInfoForm.resx new file mode 100644 index 0000000..d2fb654 --- /dev/null +++ b/Server.MirForms/Systems/GuildInfoForm.resx @@ -0,0 +1,1766 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + AAABAAgAICAQAAAABADoAgAAhgAAACAgAAAAABgAqAwAAG4DAAAgIAAAAAAIAKgIAAAWEAAAQEAAAAAA + GAAoMgAAvhgAAEBAEAAAAAQAaAoAAOZKAABAQAAAAAAIACgWAABOVQAAgIAAAAAAGAAoyAAAdmsAAICA + AAAAAAgAKEwAAJ4zAQAoAAAAIAAAAEAAAAABAAQAAAAAAAACAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAA + gAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////ABER + ERAAAAAAAAAAAAAAAAARERERAAAAAAAAAAAAAAAAERERERAAAAAAAAAAAAAAABERERERAAAAAQAAAAAA + AAARERAAAQAAAAEAAAAAAAAAEREREQAAAAABAAAAAAAAABERERERAAAAABAAAAAAAAAREREREQAAAAAQ + AAAQAAAAEREREREAAAAAAAABEAAAAAERERERAAAAAAAxERAAAAAQERERERAAAAABEQAAAAAAAAAREREQ + AAAAAQARERARAAAAEREREAAAAAEBEAERERAAAAAAAAAAAAAQEQARMzERAAAAEREAAAABEBADMzMzEQAA + AAEQAAAAAAEAADMxMxEAAAAAAAAAAAEQEQAzMxEQAAABAAEAAAEREAAAMBMQEAAAAAARAAABEREQADEQ + EQAAAAABEBEBEREQATAREREAAAAQAQAQARERAQABEQERAAAAAAAAEBETEQMRERAREQAAAAAAARARExEQ + AREAAREQAAAAAAEBERMxMQEBAAABEQABAAAAAQERERMREQAAAAEAABAAABABERExERAAAAAAAAAAAAAA + EREREREAAAAAAAAAABAQEQAAAREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABAAAAAAAAAAAA + AAAAEAARAAAAAAAAAAAAAAAAAAABEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABABgAAAAAAAAM + AAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA + AACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAAAA + AAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA + AACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACA + AACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAACAAACAAACAAACAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAA + AACAAACAAACAAACAAACAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAAAAAAAAAACAAACAAACAAACAAACA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACAAAAAAACAAACAAAAAAAAAAACAAACAAICAAICAAICAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAA + AACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAACAAAAAAAAAAICAAICAAICA + AICAAICAAICAAICAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAICAAICAAICAAACAAICAAICAAACAAACAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAACAAACA + AAAAAAAAAICAAICAAICAAICAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAACA + AAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAICAAAAAAACAAICAAACAAAAA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAACAAACAAACA + AACAAACAAACAAAAAAAAAAAAAAICAAACAAACAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAACAAACAAAAAAACAAACAAAAAAACAAACAAACAAACAAACAAACAAAAAAAAAAACAAICAAAAAAACAAACA + AACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAACA + AACAAACAAACAAACAAAAAAACAAAAAAAAAAAAAAACAAACAAACAAAAAAACAAACAAACAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAICAAACAAACAAAAAAICAAACAAACA + AACAAACAAACAAAAAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + AACAAAAAAACAAACAAACAAICAAACAAACAAACAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAACAAACAAACA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAACAAICAAICAAACA + AICAAACAAAAAAACAAAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAACAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAACAAACAAACAAICAAACAAACAAACAAACAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACA + AACAAACAAACAAACAAICAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAAAA + AACAAACAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAA + AACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAACAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE + AAAAAAAAAAAAAAABAAAAAQAAAAD/AAD/AAD/AAAAAP//AP//AAD/AP8AwMDAAP/48ADX6/oA1P9/AP8A + AADiK4oAKiqlAAAAAAAEBAQACAgIAAwMDAAREREAFhYWABwcHAAiIiIAKSkpADMzMwA5OTkAQkJCAE1N + TQBVVVUAYGBgAGZmZgBwcHAAgICAAIyMjACUlJQAmZmZAKSkpACsrKwAtra2AMDAwADMzMwA1NTUANra + 2gDg4OAA7OzsAPj4+AD7+/sA////ADMAAABmAAAAmQAAAMwAAAD/AAAAADMAADMzAABmMwAAmTMAAMwz + AAD/MwAAAGYAADNmAABmZgAAmWYAAMxmAAD/ZgAAAJkAADOZAABmmQAAmZkAAMyZAAD/mQAAAMwAADPM + AABmzAAAmcwAAMzMAAD/zAAAAP8AADP/AABm/wAAmf8AAMz/AAD//wAAAAAzADMAMwBmADMAmQAzAMwA + MwD/ADMAADMzAGYzMwCZMzMAzDMzAP8zMwAAZjMAM2YzAGZmMwCZZjMAzGYzAP9mMwAAmTMAM5kzAGaZ + MwCZmTMAzJkzAP+ZMwAAzDMAM8wzAGbMMwCZzDMAzMwzAP/MMwAA/zMAM/8zAGb/MwCZ/zMAzP8zAP// + MwAAAGYAMwBmAGYAZgCZAGYAzABmAP8AZgAAM2YAMzNmAGYzZgCZM2YAzDNmAP8zZgAAZmYAM2ZmAJlm + ZgDMZmYA/2ZmAACZZgAzmWYAZplmAJmZZgDMmWYA/5lmAADMZgAzzGYAZsxmAJnMZgDMzGYA/8xmAAD/ + ZgAz/2YAZv9mAJn/ZgDM/2YA//9mAAAAmQAzAJkAZgCZAJkAmQDMAJkA/wCZAAAzmQAzM5kAZjOZAJkz + mQDMM5kA/zOZAABmmQAzZpkAZmaZAJlmmQDMZpkA/2aZAACZmQAzmZkAZpmZAMyZmQD/mZkAAcyZADPM + mQBmzJkAmcyZAMzMmQD/zJkAAP+ZADP/mQBm/5kAmf+ZAMz/mQD//5kAAADMADMAzABmAMwAmQDMAMwA + zAD/AMwAADPMADMzzABmM8wAmTPMAMwzzAD/M8wAAGbMADNmzABmZswAmWbMAMxmzAD/ZswAAJnMADOZ + zABmmcwAmZnMAMyZzAD/mcwAAMzMADPMzABmzMwAmczMAP/MzAAA/8wAM//MAGb/zACZ/8wAzP/MAP// + zAAAAP8AMwD/AGYA/wCZAP8AzAD/AP8A/wAAM/8AMzP/AGYz/wCZM/8AzDP/AP8z/wAAZv8AM2b/AGZm + /wCZZv8AzGb/AP9m/wAAmf8AM5n/AGaZ/wCZmf8AzJn/AP+Z/wAAzP8AM8z/AGbM/wCZzP8AzMz/AP/M + /wAA//8AM///AGb//wCZ//8AzP//AJ+fn5+fn58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQn5+fn5+f + n58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBCfn5+fn5+fn58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEJ+f + n5+fn5+fn58QEBAQEBAQnxAQEBAQEBAQEBAQEBAQn5+fn58QEBAQnxAQEBAQEBCfEBAQEBAQEBAQEBAQ + EBCfn5+fn5+fnxAQEBAQEBAQEJ8QEBAQEBAQEBAQEBAQEJ+fn5+fn5+fn58QEBAQEBAQEJ8QEBAQEBAQ + EBAQEBAQn5+fn5+fn5+fnxAQEBAQEBAQnxAQEBAQnxAQEBAQEBCfn5+fn5+fn5+fEBAQEBAQEBAQEBAQ + EJ+fEBAQEBAQEBCfn5+fn5+fn58QEBAQEBAQEBAQrZ+fn58QEBAQEBAQnxCfn5+fn5+fn58QEBAQEBAQ + EJ+fnxAQEBAQEBAQEBAQEBAQn5+fn5+fnxAQEBAQEBAQnxAQn5+fn58Qn58QEBAQEBCfn5+fn5+fEBAQ + EBAQEBCfEJ+fEBCfn5+fn58QEBAQEBAQEBAQEBAQEBAQEBAQnxCfnxAQn5+tra2fn58QEBAQEBCfn5+f + EBAQEBAQEJ+fEJ8QEK2tra2tra2fnxAQEBAQEBCfnxAQEBAQEBAQEBCfEBAQEK2trZ+trZ+fEBAQEBAQ + EBAQEBAQEBAQEBCfnxCfnxAQra2trZ+fnxAQEBAQEJ8QEBCfEBAQEBCfn5+fEBAQEBCtEJ+tnxCfEBAQ + EBAQEBAQn58QEBAQEJ+fn5+fnxAQEK2fnxCfnxAQEBAQEBAQEJ+fEJ+fEJ+fn5+fnxAQn60Qn5+fn5+f + EBAQEBAQnxAQnxAQnxAQn5+fn58QnxAQEJ+fnxCfn58QEBAQEBAQEBAQEBCfEJ+fn62fnxCtn5+fn58Q + n5+fnxAQEBAQEBAQEBAQn58Qn5+frZ+fnxAQn5+fEBAQn5+fnxAQEBAQEBAQEBCfEJ+fn5+trZ+tnxCf + EJ8QEBAQEJ+fnxAQEJ8QEBAQEBAQnxCfn5+fn5+tn5+fnxAQEBAQEBCfEBAQEJ8QEBAQEJ8QEJ+fn5+f + rZ+fn58QEBAQEBAQEBAQEBAQEBAQEBAQEBCfn5+fn5+fn5+fEBAQEBAQEBAQEBAQEBAQEJ8QnxCfnxAQ + EBAQn5+fEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEJ8QEJ8QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBCfEBAQn58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEJ+fEJ8QEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAABAAAAAgAAAAAEAGAAAAAAAADAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAA + AAAAAIAAAIAAAAAAAAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAA + gIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAAIAA + AIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAgIAA + gIAAgIAAgIAAAIAAAIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAAAAAAAAAIAAAIAAgIAAgIAAAIAAAIAAAAAA + AAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAAAAAAAAAIAAAIAAgIAA + gIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAA + AIAAgIAAgIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAA + AAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAIAAAIAAgIAAgIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAgIAAgIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAgIAA + gIAAgIAAgIAAAIAAAIAAgIAAgIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAgIAAgIAAgIAAgIAAAIAAAIAAgIAAgIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAgIAA + gIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAAAA + AAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAABAAAAAgAAAAAEABAAAAAAAAAgAAAAA + AAAAAAAAEAAAABAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAwMDAAICAgAAAAP8AAP8AAAD/ + /wD/AAAA/wD/AP//AAD///8AEREREREREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARERERERERAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAABERERERERERAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAERERERER + EREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAREREREREREREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABER + EREREREREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEREREREREREREQAAAAAAAAARAAAAAAAAAAAAAAAA + AAARERERERERERERAAAAAAAAABEAAAAAAAAAAAAAAAAAABERERERAAAAABEAAAAAAAAAEQAAAAAAAAAA + AAAAAAAAEREREREAAAAAEQAAAAAAAAARAAAAAAAAAAAAAAAAAAAREREREREREQAAAAAAAAAAABEAAAAA + AAAAAAAAAAAAABERERERERERAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAEREREREREREREQAAAAAAAAAA + EQAAAAAAAAAAAAAAAAARERERERERERERAAAAAAAAAAARAAAAAAAAAAAAAAAAABEREREREREREREAAAAA + AAAAABEAAAAAABEAAAAAAAAAEREREREREREREQAAAAAAAAAAEQAAAAAAEQAAAAAAAAARERERERERERER + AAAAAAAAAAAAAAAAABERAAAAAAAAABEREREREREREREAAAAAAAAAAAAAAAAAEREAAAAAAAAAABERERER + EREREQAAAAAAAAAAAAAzEREREQAAAAAAAAAAERERERERERERAAAAAAAAAAAAADMRERERAAAAAAAAABEA + ERERERERERERAAAAAAAAAAAREREAAAAAAAAAAAAAEQAREREREREREREAAAAAAAAAABEREQAAAAAAAAAA + AAAAAAAAEREREREREQAAAAAAAAAAEQAAEREREREAEREAAAAAAAARERERERERAAAAAAAAAAARAAARERER + EQAREQAAAAAAABEREREREREAAAAAAAAAABEAEREAABEREREREQAAAAAAEREREREREQAAAAAAAAAAEQAR + EQAAERERERERAAAAAAAAAAAAAAAAAAAAAAAAABEAEREAABERMzMzERERAAAAAAAAAAAAAAAAAAAAAAAA + EQAREQAAEREzMzMREREAAAAAAAARERERAAAAAAAAABERABEAADMzMzMzMzMREQAAAAAAABEREREAAAAA + AAAAEREAEQAAMzMzMzMzMxERAAAAAAAAABERAAAAAAAAAAAAABEAAAAAMzMzETMzEREAAAAAAAAAEREA + AAAAAAAAAAAAEQAAAAAzMzMRMzMREQAAAAAAAAAAAAAAAAAAAAAAEREAEREAADMzMzMREREAAAAAAAAA + AAAAAAAAAAAAAAAREQAREQAAMzMzMxEREQAAAAAAABEAAAARAAAAAAARERERAAAAAAAzABEzEQARAAAA + AAAAEQAAABEAAAAAABEREREAAAAAADMAETMRABEAAAAAAAAAAAAREQAAAAAAERERERERAAAAMxERABER + AAAAAAAAAAAAABERAAAAAAAREREREREAAAAzEREAEREAAAAAAAAAAAAREQAREQAREREREREAABEzABER + EREREQAAAAAAAAAAABERABERABEREREREQAAETMAERERERERAAAAAAAAEQAAEQAAEQAAEREREREAEQAA + ABEREQAREREAAAAAAAARAAARAAARAAAREREREQARAAAAERERABEREQAAAAAAAAAAAAAAABEAERERMxER + ADMREREREQARERERAAAAAAAAAAAAAAAAEQAREREzEREAMxERERERABEREREAAAAAAAAAAAAAABERABER + ETMREREAABEREQAAABEREREAAAAAAAAAAAAAEREAERERMxEREQAAERERAAAAEREREQAAAAAAAAAAAAAR + ABEREREzMxEzEQARABEAAAAAABEREQAAAAAAAAAAABEAERERETMzETMRABEAEQAAAAAAERERAAAAEQAA + AAAAAAARABERERERETMRERERAAAAAAAAABEAAAARAAAAAAAAABEAERERERERMxEREREAAAAAAAAAEQAA + AAARAAAAAAARAAARERERETMRERERAAAAAAAAAAAAAAAAABEAAAAAABEAABERERERMxEREREAAAAAAAAA + AAAAAAAAAAAAAAAAAAARERERERERERERAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEREREREREREREAAAAA + AAAAAAAAAAAAAAAAEQARABERAAAAAAAREREAAAAAAAAAAAAAAAAAAAAAAAARABEAEREAAAAAABEREQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + EQAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAAAREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + EQAAABERAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAREQARAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAABERABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgA + AABAAAAAgAAAAAEACAAAAAAAABAAAAAAAAAAAAAAAAEAAAABAAAAAP8AAP8AAP8AAAAA//8A//8AAP8A + /wDAwMAA//jwANfr+gDU/38A/wAAAOIrigAqKqUAAAAAAAQEBAAICAgADAwMABEREQAWFhYAHBwcACIi + IgApKSkAMzMzADk5OQBCQkIATU1NAFVVVQBgYGAAZmZmAHBwcACAgIAAjIyMAJSUlACZmZkApKSkAKys + rAC2trYAwMDAAMzMzADU1NQA2traAODg4ADs7OwA+Pj4APv7+wD///8AMwAAAGYAAACZAAAAzAAAAP8A + AAAAMwAAMzMAAGYzAACZMwAAzDMAAP8zAAAAZgAAM2YAAGZmAACZZgAAzGYAAP9mAAAAmQAAM5kAAGaZ + AACZmQAAzJkAAP+ZAAAAzAAAM8wAAGbMAACZzAAAzMwAAP/MAAAA/wAAM/8AAGb/AACZ/wAAzP8AAP// + AAAAADMAMwAzAGYAMwCZADMAzAAzAP8AMwAAMzMAZjMzAJkzMwDMMzMA/zMzAABmMwAzZjMAZmYzAJlm + MwDMZjMA/2YzAACZMwAzmTMAZpkzAJmZMwDMmTMA/5kzAADMMwAzzDMAZswzAJnMMwDMzDMA/8wzAAD/ + MwAz/zMAZv8zAJn/MwDM/zMA//8zAAAAZgAzAGYAZgBmAJkAZgDMAGYA/wBmAAAzZgAzM2YAZjNmAJkz + ZgDMM2YA/zNmAABmZgAzZmYAmWZmAMxmZgD/ZmYAAJlmADOZZgBmmWYAmZlmAMyZZgD/mWYAAMxmADPM + ZgBmzGYAmcxmAMzMZgD/zGYAAP9mADP/ZgBm/2YAmf9mAMz/ZgD//2YAAACZADMAmQBmAJkAmQCZAMwA + mQD/AJkAADOZADMzmQBmM5kAmTOZAMwzmQD/M5kAAGaZADNmmQBmZpkAmWaZAMxmmQD/ZpkAAJmZADOZ + mQBmmZkAzJmZAP+ZmQABzJkAM8yZAGbMmQCZzJkAzMyZAP/MmQAA/5kAM/+ZAGb/mQCZ/5kAzP+ZAP// + mQAAAMwAMwDMAGYAzACZAMwAzADMAP8AzAAAM8wAMzPMAGYzzACZM8wAzDPMAP8zzAAAZswAM2bMAGZm + zACZZswAzGbMAP9mzAAAmcwAM5nMAGaZzACZmcwAzJnMAP+ZzAAAzMwAM8zMAGbMzACZzMwA/8zMAAD/ + zAAz/8wAZv/MAJn/zADM/8wA///MAAAA/wAzAP8AZgD/AJkA/wDMAP8A/wD/AAAz/wAzM/8AZjP/AJkz + /wDMM/8A/zP/AABm/wAzZv8AZmb/AJlm/wDMZv8A/2b/AACZ/wAzmf8AZpn/AJmZ/wDMmf8A/5n/AADM + /wAzzP8AZsz/AJnM/wDMzP8A/8z/AAD//wAz//8AZv//AJn//wDM//8An5+fn5+fn5+fn5+fn58dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+f + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+f + n5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+f + n5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+f + n5+fn5+fn5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fn5+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn5+fn5+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHZ+fHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fHR0dHR0dHR2fnx0dHR0dHR0dHR0dHR0dn58dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fnx0dHR0dHR0dn58dHR0dHR0dHR0dHR0dHZ+fHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR2fnx0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0d + n58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0d + HR0dHR0dn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0d + HR0dHR0dHR0dHZ+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fn5+fn5+fnx0d + HR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dHR2fnx0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn5+fn5+f + n58dHR0dHR0dHR0dHR0dHR0dn58dHR0dHR0dHR0dn58dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+f + n5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+f + n5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fnx0dHR0dHR0dHR0dHR0dHR2fn5+f + n5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHa2tn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0d + n5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR2trZ+fn5+fn5+fHR0dHR0dHR0dHR0d + HR2fnx0dn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHZ+fn5+fnx0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHZ+fn5+fn5+fn5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR2fn5+fn58dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dn58dHR0dn5+fn5+f + n5+fnx0dn5+fnx0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHZ+fHR0dHZ+f + n5+fn5+fn58dHZ+fn58dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR2fnx0d + n5+fnx0dHR2fn5+fn5+fn5+fn58dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0d + n58dHZ+fn58dHR0dn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fnx0dn5+fnx0dHR2fn5+fra2tra2tn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHZ+fn58dHR0dn5+fn62tra2trZ+fn5+fnx0dHR0dHR0dHR0dHZ+fn5+fn5+fHR0dHR0d + HR0dHR0dHR2fn5+fHR2fnx0dHR2tra2tra2tra2tra2trZ+fn58dHR0dHR0dHR0dHR2fn5+fn5+fnx0d + HR0dHR0dHR0dHR0dn5+fnx0dn58dHR0dra2tra2tra2tra2tra2fn5+fHR0dHR0dHR0dHR0dHR2fn5+f + HR0dHR0dHR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dra2tra2tn5+tra2tn5+fnx0dHR0dHR0dHR0dHR0d + n5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dn58dHR0dHR0dHa2tra2trZ+fra2trZ+fn58dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fnx0dn5+fnx0dHR2tra2tra2trZ+fn5+fnx0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn58dHZ+fn58dHR0dra2tra2tra2fn5+fn58dHR0d + HR0dHR0dHR2fnx0dHR0dHZ+fHR0dHR0dHR0dHZ+fn5+fn5+fHR0dHR0dHR0dHa2tHR2fn62tn58dHZ+f + HR0dHR0dHR0dHR0dn58dHR0dHR2fnx0dHR0dHR0dHR2fn5+fn5+fnx0dHR0dHR0dHR2trR0dn5+trZ+f + HR2fnx0dHR0dHR0dHR0dHR0dHR0dHZ+fn58dHR0dHR0dHR0dn5+fn5+fn5+fn5+fHR0dHR0dra2fn5+f + HR2fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR0dHR0dHR0dHZ+fn5+fn5+fn5+fnx0dHR0dHa2t + n5+fnx0dn5+fnx0dHR0dHR0dHR0dHR0dHR0dHZ+fn58dHZ+fn58dHZ+fn5+fn5+fn5+fnx0dHR2fn62t + HR2fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR2fn5+fHR2fn5+fn5+fn5+fn58dHR0d + n5+trR0dn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dn58dHR0dn58dHR0dn58dHR0dn5+fn5+fn5+fnx0d + n58dHR0dHR2fn5+fn58dHZ+fn5+fnx0dHR0dHR0dHR0dHZ+fHR0dHZ+fHR0dHZ+fHR0dHZ+fn5+fn5+f + n58dHZ+fHR0dHR0dn5+fn5+fHR2fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fnx0dn5+fn5+f + ra2fn5+fHR2trZ+fn5+fn5+fn58dHZ+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn58dHZ+f + n5+fn62tn5+fnx0dra2fn5+fn5+fn5+fHR2fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+f + HR2fn5+fn5+trZ+fn5+fnx0dHR2fn5+fn58dHR0dHR2fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0d + n5+fnx0dn5+fn5+fra2fn5+fn58dHR0dn5+fn5+fHR0dHR0dn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0d + HR0dHZ+fHR2fn5+fn5+fn62tra2fn62tn58dHZ+fHR2fnx0dHR0dHR0dHR2fn5+fn58dHR0dHR0dHR0d + HR0dHR0dHR2fnx0dn5+fn5+fn5+tra2tn5+trZ+fHR2fnx0dn58dHR0dHR0dHR0dn5+fn5+fHR0dHR0d + n58dHR0dHR0dHR0dHR0dHZ+fHR2fn5+fn5+fn5+fn5+trZ+fn5+fn5+fHR0dHR0dHR0dHR0dHR2fnx0d + HR0dHZ+fHR0dHR0dHR0dHR0dHR2fnx0dn5+fn5+fn5+fn5+fra2fn5+fn5+fnx0dHR0dHR0dHR0dHR0d + n58dHR0dHR0dHZ+fHR0dHR0dHR0dHZ+fHR0dHZ+fn5+fn5+fn5+trZ+fn5+fn5+fHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dHR2fnx0dHR2fn5+fn5+fn5+fra2fn5+fn5+fnx0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fn5+fn5+fnx0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn58dHZ+fHR2fn5+fHR0dHR0dHR0dHZ+fn5+fnx0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fHR2fnx0dn5+fnx0dHR0dHR0dHR2fn5+f + n58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fnx0dHR2fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHR0dn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fnx0dHR0dHZ+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHR0dHR2fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHZ+fn58dHZ+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR2fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAIAAAAAAAQAAAQAYAAAAAAAAwAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAIAAAAAAAQAAAQAIAAAAAAAAQAAAAAAAAAAA + AAAAAQAAAAEAAAAA/wAA/wAA/wAAAAD//wD//wAA/wD/AMDAwAD/+PAA1+v6ANT/fwD/AAAA4iuKACoq + pQAAAAAABAQEAAgICAAMDAwAERERABYWFgAcHBwAIiIiACkpKQAzMzMAOTk5AEJCQgBNTU0AVVVVAGBg + YABmZmYAcHBwAICAgACMjIwAlJSUAJmZmQCkpKQArKysALa2tgDAwMAAzMzMANTU1ADa2toA4ODgAOzs + 7AD4+PgA+/v7AP///wAzAAAAZgAAAJkAAADMAAAA/wAAAAAzAAAzMwAAZjMAAJkzAADMMwAA/zMAAABm + AAAzZgAAZmYAAJlmAADMZgAA/2YAAACZAAAzmQAAZpkAAJmZAADMmQAA/5kAAADMAAAzzAAAZswAAJnM + AADMzAAA/8wAAAD/AAAz/wAAZv8AAJn/AADM/wAA//8AAAAAMwAzADMAZgAzAJkAMwDMADMA/wAzAAAz + MwBmMzMAmTMzAMwzMwD/MzMAAGYzADNmMwBmZjMAmWYzAMxmMwD/ZjMAAJkzADOZMwBmmTMAmZkzAMyZ + MwD/mTMAAMwzADPMMwBmzDMAmcwzAMzMMwD/zDMAAP8zADP/MwBm/zMAmf8zAMz/MwD//zMAAABmADMA + ZgBmAGYAmQBmAMwAZgD/AGYAADNmADMzZgBmM2YAmTNmAMwzZgD/M2YAAGZmADNmZgCZZmYAzGZmAP9m + ZgAAmWYAM5lmAGaZZgCZmWYAzJlmAP+ZZgAAzGYAM8xmAGbMZgCZzGYAzMxmAP/MZgAA/2YAM/9mAGb/ + ZgCZ/2YAzP9mAP//ZgAAAJkAMwCZAGYAmQCZAJkAzACZAP8AmQAAM5kAMzOZAGYzmQCZM5kAzDOZAP8z + mQAAZpkAM2aZAGZmmQCZZpkAzGaZAP9mmQAAmZkAM5mZAGaZmQDMmZkA/5mZAAHMmQAzzJkAZsyZAJnM + mQDMzJkA/8yZAAD/mQAz/5kAZv+ZAJn/mQDM/5kA//+ZAAAAzAAzAMwAZgDMAJkAzADMAMwA/wDMAAAz + zAAzM8wAZjPMAJkzzADMM8wA/zPMAABmzAAzZswAZmbMAJlmzADMZswA/2bMAACZzAAzmcwAZpnMAJmZ + zADMmcwA/5nMAADMzAAzzMwAZszMAJnMzAD/zMwAAP/MADP/zABm/8wAmf/MAMz/zAD//8wAAAD/ADMA + /wBmAP8AmQD/AMwA/wD/AP8AADP/ADMz/wBmM/8AmTP/AMwz/wD/M/8AAGb/ADNm/wBmZv8AmWb/AMxm + /wD/Zv8AAJn/ADOZ/wBmmf8AmZn/AMyZ/wD/mf8AAMz/ADPM/wBmzP8Amcz/AMzM/wD/zP8AAP//ADP/ + /wBm//8Amf//AMz//wCfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pra2trZ+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+tra2tn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD62tra2fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+f + n5+tra2tra2tra2tra2fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8P + Dw+fn5+fn5+fn62tra2tra2tra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+f + n58PDw8PDw8PD5+fn5+fn5+fra2tra2tra2tra2tn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8P + Dw+fn5+fDw8PDw8PDw+tra2tra2tra2tra2tra2tra2tra2tra2tra2tn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PD5+fn58PDw8PDw8PD62tra2tra2tra2tra2tra2tra2tra2tra2tra2fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8Pn5+fnw8PDw8PDw8Pra2tra2tra2tra2tra2tra2tra2tra2tra2trZ+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw+fn5+fDw8PDw8PDw+tra2tra2tra2tra2tra2tra2tra2t + ra2tra2tn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+fn58PDw8PDw8PD62tra2tra2tra2tra2t + ra2tra2tra2tra2tra2fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PD62t + ra2tra2tra2trZ+fn5+tra2tra2trZ+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8Pra2tra2tra2tra2tn5+fn62tra2tra2tn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PDw8PDw+tra2tra2tra2tra2fn5+fra2tra2tra2fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n58PDw8Pn5+fn5+fn58PDw8PDw8PD62tra2tra2tra2tra2tra2fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pra2tra2tra2tra2tra2trZ+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw+tra2tra2tra2tra2tra2tn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PD62tra2tra2tra2tra2t + ra2fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pra2tra2t + ra2tra2tra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw+tra2tDw8PD5+fn5+tra2tn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PD62tra0PDw8Pn5+fn62tra2fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pra2trQ8PDw+fn5+fra2trZ+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw+tra2tn5+fn5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PD62tra2fn5+fn5+fnw8PDw+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8Pra2trZ+fn5+fn5+fDw8PD5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw+tra2tn5+fn5+f + n58PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PD62t + ra2fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PD5+fn5+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8Pn5+fn62t + ra0PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw+fn5+fra2trQ8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PD5+fn5+tra2tDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PD5+fn58PDw8PDw8PD5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fDw8PD5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+fn58PDw8PDw8PD5+f + n58PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n58PDw8Pn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fnw8P + Dw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fnw8PDw+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fn5+fn62tra2fn5+fn5+fnw8PDw+tra2tn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fDw8PD62t + ra2fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+tra2tn5+fn5+f + n58PDw8Pra2trZ+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+fn5+fn5+fn5+fn62t + ra2fn5+fn5+fn5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+f + n5+fn5+fra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8P + Dw+fn5+fn5+fn5+fn5+tra2tn5+fn5+fn5+fn5+fDw8PDw8PDw+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PD5+fn5+fn5+fn5+fn62tra2fn5+fn5+fn5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn5+tra2tra2trZ+fn5+tra2tn5+fnw8P + Dw+fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn62tra2tra2tn5+fn62t + ra2fn5+fDw8PD5+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fra2tra2t + ra2fn5+fra2trZ+fn58PDw8Pn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+tra2tn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn62tra2fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+tra2tn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fra2trZ+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+tra2tn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn62tra2fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8Pn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n58PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + + + \ No newline at end of file diff --git a/Server.MirForms/Systems/GuildMembersForm.Designer.cs b/Server.MirForms/Systems/GuildMembersForm.Designer.cs new file mode 100644 index 0000000..53bda40 --- /dev/null +++ b/Server.MirForms/Systems/GuildMembersForm.Designer.cs @@ -0,0 +1,90 @@ +namespace Server.Systems +{ + partial class GuildMembersForm + { + /// + /// 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(GuildMembersForm)); + GuildMembersListView = new ListView(); + Members = new ColumnHeader(); + Rank = new ColumnHeader(); + DeleteMember = new Button(); + SuspendLayout(); + // + // GuildMembersListView + // + GuildMembersListView.Columns.AddRange(new ColumnHeader[] { Members, Rank }); + GuildMembersListView.Dock = DockStyle.Top; + GuildMembersListView.FullRowSelect = true; + GuildMembersListView.GridLines = true; + GuildMembersListView.Location = new Point(0, 0); + GuildMembersListView.Name = "GuildMembersListView"; + GuildMembersListView.Size = new Size(375, 423); + GuildMembersListView.TabIndex = 0; + GuildMembersListView.UseCompatibleStateImageBehavior = false; + GuildMembersListView.View = View.Details; + // + // Members + // + Members.Text = "Member Name"; + Members.Width = 180; + // + // Rank + // + Rank.Text = "Rank"; + Rank.Width = 190; + // + // DeleteMember + // + DeleteMember.Location = new Point(145, 429); + DeleteMember.Name = "DeleteMember"; + DeleteMember.Size = new Size(75, 32); + DeleteMember.TabIndex = 1; + DeleteMember.Text = "Delete"; + DeleteMember.UseVisualStyleBackColor = true; + DeleteMember.Click += DeleteMember_Click; + // + // GuildMembersForm + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(375, 467); + Controls.Add(DeleteMember); + Controls.Add(GuildMembersListView); + Icon = (Icon)resources.GetObject("$this.Icon"); + Name = "GuildMembersForm"; + Text = "GuildMembersForm"; + ResumeLayout(false); + } + + #endregion + private ColumnHeader Members; + private ColumnHeader Rank; + private Button DeleteMember; + public ListView GuildMembersListView; + } +} \ No newline at end of file diff --git a/Server.MirForms/Systems/GuildMembersForm.cs b/Server.MirForms/Systems/GuildMembersForm.cs new file mode 100644 index 0000000..3c36325 --- /dev/null +++ b/Server.MirForms/Systems/GuildMembersForm.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace Server.Systems +{ + public partial class GuildMembersForm : Form + { + public string GuildName; + public SMain main; + public GuildMembersForm() + { + InitializeComponent(); + } + + + + private void DeleteMember_Click(object sender, EventArgs e) + { + if (GuildMembersListView == null) return; + if (GuildMembersListView.SelectedItems == null) return; + + Server.MirObjects.GuildObject Guild = SMain.Envir.GetGuild(GuildName); + if (Guild == null) return; + + foreach (var m in GuildMembersListView.SelectedItems) + { + var lm = (ListViewItem)m; + + Guild.DeleteMember(lm.SubItems[0].Text); + GuildMembersListView.Items.Remove(lm); + main.ProcessGuildViewTab(true); + break; + } + } + } +} + diff --git a/Server.MirForms/Systems/GuildMembersForm.resx b/Server.MirForms/Systems/GuildMembersForm.resx new file mode 100644 index 0000000..1b01221 --- /dev/null +++ b/Server.MirForms/Systems/GuildMembersForm.resx @@ -0,0 +1,1763 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAgAICAQAAAABADoAgAAhgAAACAgAAAAABgAqAwAAG4DAAAgIAAAAAAIAKgIAAAWEAAAQEAAAAAA + GAAoMgAAvhgAAEBAEAAAAAQAaAoAAOZKAABAQAAAAAAIACgWAABOVQAAgIAAAAAAGAAoyAAAdmsAAICA + AAAAAAgAKEwAAJ4zAQAoAAAAIAAAAEAAAAABAAQAAAAAAAACAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAA + gAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////ABER + ERAAAAAAAAAAAAAAAAARERERAAAAAAAAAAAAAAAAERERERAAAAAAAAAAAAAAABERERERAAAAAQAAAAAA + AAARERAAAQAAAAEAAAAAAAAAEREREQAAAAABAAAAAAAAABERERERAAAAABAAAAAAAAAREREREQAAAAAQ + AAAQAAAAEREREREAAAAAAAABEAAAAAERERERAAAAAAAxERAAAAAQERERERAAAAABEQAAAAAAAAAREREQ + AAAAAQARERARAAAAEREREAAAAAEBEAERERAAAAAAAAAAAAAQEQARMzERAAAAEREAAAABEBADMzMzEQAA + AAEQAAAAAAEAADMxMxEAAAAAAAAAAAEQEQAzMxEQAAABAAEAAAEREAAAMBMQEAAAAAARAAABEREQADEQ + EQAAAAABEBEBEREQATAREREAAAAQAQAQARERAQABEQERAAAAAAAAEBETEQMRERAREQAAAAAAARARExEQ + AREAAREQAAAAAAEBERMxMQEBAAABEQABAAAAAQERERMREQAAAAEAABAAABABERExERAAAAAAAAAAAAAA + EREREREAAAAAAAAAABAQEQAAAREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABAAAAAAAAAAAA + AAAAEAARAAAAAAAAAAAAAAAAAAABEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABABgAAAAAAAAM + AAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA + AACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAAAA + AAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA + AACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACA + AACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAACAAACAAACAAACAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAA + AACAAACAAACAAACAAACAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAAAAAAAAAACAAACAAACAAACAAACA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACAAAAAAACAAACAAAAAAAAAAACAAACAAICAAICAAICAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAA + AACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAACAAAAAAAAAAICAAICAAICA + AICAAICAAICAAICAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAICAAICAAICAAACAAICAAICAAACAAACAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAACAAACA + AAAAAAAAAICAAICAAICAAICAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAACA + AAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAICAAAAAAACAAICAAACAAAAA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAACAAACAAACA + AACAAACAAACAAAAAAAAAAAAAAICAAACAAACAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAACAAACAAAAAAACAAACAAAAAAACAAACAAACAAACAAACAAACAAAAAAAAAAACAAICAAAAAAACAAACA + AACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAACA + AACAAACAAACAAACAAAAAAACAAAAAAAAAAAAAAACAAACAAACAAAAAAACAAACAAACAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAICAAACAAACAAAAAAICAAACAAACA + AACAAACAAACAAAAAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + AACAAAAAAACAAACAAACAAICAAACAAACAAACAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAACAAACAAACA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAACAAICAAICAAACA + AICAAACAAAAAAACAAAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAACAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAACAAACAAACAAICAAACAAACAAACAAACAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACA + AACAAACAAACAAACAAICAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAAAA + AACAAACAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAA + AACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAACAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE + AAAAAAAAAAAAAAABAAAAAQAAAAD/AAD/AAD/AAAAAP//AP//AAD/AP8AwMDAAP/48ADX6/oA1P9/AP8A + AADiK4oAKiqlAAAAAAAEBAQACAgIAAwMDAAREREAFhYWABwcHAAiIiIAKSkpADMzMwA5OTkAQkJCAE1N + TQBVVVUAYGBgAGZmZgBwcHAAgICAAIyMjACUlJQAmZmZAKSkpACsrKwAtra2AMDAwADMzMwA1NTUANra + 2gDg4OAA7OzsAPj4+AD7+/sA////ADMAAABmAAAAmQAAAMwAAAD/AAAAADMAADMzAABmMwAAmTMAAMwz + AAD/MwAAAGYAADNmAABmZgAAmWYAAMxmAAD/ZgAAAJkAADOZAABmmQAAmZkAAMyZAAD/mQAAAMwAADPM + AABmzAAAmcwAAMzMAAD/zAAAAP8AADP/AABm/wAAmf8AAMz/AAD//wAAAAAzADMAMwBmADMAmQAzAMwA + MwD/ADMAADMzAGYzMwCZMzMAzDMzAP8zMwAAZjMAM2YzAGZmMwCZZjMAzGYzAP9mMwAAmTMAM5kzAGaZ + MwCZmTMAzJkzAP+ZMwAAzDMAM8wzAGbMMwCZzDMAzMwzAP/MMwAA/zMAM/8zAGb/MwCZ/zMAzP8zAP// + MwAAAGYAMwBmAGYAZgCZAGYAzABmAP8AZgAAM2YAMzNmAGYzZgCZM2YAzDNmAP8zZgAAZmYAM2ZmAJlm + ZgDMZmYA/2ZmAACZZgAzmWYAZplmAJmZZgDMmWYA/5lmAADMZgAzzGYAZsxmAJnMZgDMzGYA/8xmAAD/ + ZgAz/2YAZv9mAJn/ZgDM/2YA//9mAAAAmQAzAJkAZgCZAJkAmQDMAJkA/wCZAAAzmQAzM5kAZjOZAJkz + mQDMM5kA/zOZAABmmQAzZpkAZmaZAJlmmQDMZpkA/2aZAACZmQAzmZkAZpmZAMyZmQD/mZkAAcyZADPM + mQBmzJkAmcyZAMzMmQD/zJkAAP+ZADP/mQBm/5kAmf+ZAMz/mQD//5kAAADMADMAzABmAMwAmQDMAMwA + zAD/AMwAADPMADMzzABmM8wAmTPMAMwzzAD/M8wAAGbMADNmzABmZswAmWbMAMxmzAD/ZswAAJnMADOZ + zABmmcwAmZnMAMyZzAD/mcwAAMzMADPMzABmzMwAmczMAP/MzAAA/8wAM//MAGb/zACZ/8wAzP/MAP// + zAAAAP8AMwD/AGYA/wCZAP8AzAD/AP8A/wAAM/8AMzP/AGYz/wCZM/8AzDP/AP8z/wAAZv8AM2b/AGZm + /wCZZv8AzGb/AP9m/wAAmf8AM5n/AGaZ/wCZmf8AzJn/AP+Z/wAAzP8AM8z/AGbM/wCZzP8AzMz/AP/M + /wAA//8AM///AGb//wCZ//8AzP//AJ+fn5+fn58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQn5+fn5+f + n58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBCfn5+fn5+fn58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEJ+f + n5+fn5+fn58QEBAQEBAQnxAQEBAQEBAQEBAQEBAQn5+fn58QEBAQnxAQEBAQEBCfEBAQEBAQEBAQEBAQ + EBCfn5+fn5+fnxAQEBAQEBAQEJ8QEBAQEBAQEBAQEBAQEJ+fn5+fn5+fn58QEBAQEBAQEJ8QEBAQEBAQ + EBAQEBAQn5+fn5+fn5+fnxAQEBAQEBAQnxAQEBAQnxAQEBAQEBCfn5+fn5+fn5+fEBAQEBAQEBAQEBAQ + EJ+fEBAQEBAQEBCfn5+fn5+fn58QEBAQEBAQEBAQrZ+fn58QEBAQEBAQnxCfn5+fn5+fn58QEBAQEBAQ + EJ+fnxAQEBAQEBAQEBAQEBAQn5+fn5+fnxAQEBAQEBAQnxAQn5+fn58Qn58QEBAQEBCfn5+fn5+fEBAQ + EBAQEBCfEJ+fEBCfn5+fn58QEBAQEBAQEBAQEBAQEBAQEBAQnxCfnxAQn5+tra2fn58QEBAQEBCfn5+f + EBAQEBAQEJ+fEJ8QEK2tra2tra2fnxAQEBAQEBCfnxAQEBAQEBAQEBCfEBAQEK2trZ+trZ+fEBAQEBAQ + EBAQEBAQEBAQEBCfnxCfnxAQra2trZ+fnxAQEBAQEJ8QEBCfEBAQEBCfn5+fEBAQEBCtEJ+tnxCfEBAQ + EBAQEBAQn58QEBAQEJ+fn5+fnxAQEK2fnxCfnxAQEBAQEBAQEJ+fEJ+fEJ+fn5+fnxAQn60Qn5+fn5+f + EBAQEBAQnxAQnxAQnxAQn5+fn58QnxAQEJ+fnxCfn58QEBAQEBAQEBAQEBCfEJ+fn62fnxCtn5+fn58Q + n5+fnxAQEBAQEBAQEBAQn58Qn5+frZ+fnxAQn5+fEBAQn5+fnxAQEBAQEBAQEBCfEJ+fn5+trZ+tnxCf + EJ8QEBAQEJ+fnxAQEJ8QEBAQEBAQnxCfn5+fn5+tn5+fnxAQEBAQEBCfEBAQEJ8QEBAQEJ8QEJ+fn5+f + rZ+fn58QEBAQEBAQEBAQEBAQEBAQEBAQEBCfn5+fn5+fn5+fEBAQEBAQEBAQEBAQEBAQEJ8QnxCfnxAQ + EBAQn5+fEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEJ8QEJ8QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBCfEBAQn58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEJ+fEJ8QEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAABAAAAAgAAAAAEAGAAAAAAAADAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAA + AAAAAIAAAIAAAAAAAAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAA + gIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAAIAA + AIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAgIAA + gIAAgIAAgIAAAIAAAIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAAAAAAAAAIAAAIAAgIAAgIAAAIAAAIAAAAAA + AAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAAAAAAAAAIAAAIAAgIAA + gIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAA + AIAAgIAAgIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAA + AAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAIAAAIAAgIAAgIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAgIAAgIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAgIAA + gIAAgIAAgIAAAIAAAIAAgIAAgIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAgIAAgIAAgIAAgIAAAIAAAIAAgIAAgIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAgIAA + gIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAAAA + AAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAABAAAAAgAAAAAEABAAAAAAAAAgAAAAA + AAAAAAAAEAAAABAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAwMDAAICAgAAAAP8AAP8AAAD/ + /wD/AAAA/wD/AP//AAD///8AEREREREREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARERERERERAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAABERERERERERAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAERERERER + EREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAREREREREREREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABER + EREREREREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEREREREREREREQAAAAAAAAARAAAAAAAAAAAAAAAA + AAARERERERERERERAAAAAAAAABEAAAAAAAAAAAAAAAAAABERERERAAAAABEAAAAAAAAAEQAAAAAAAAAA + AAAAAAAAEREREREAAAAAEQAAAAAAAAARAAAAAAAAAAAAAAAAAAAREREREREREQAAAAAAAAAAABEAAAAA + AAAAAAAAAAAAABERERERERERAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAEREREREREREREQAAAAAAAAAA + EQAAAAAAAAAAAAAAAAARERERERERERERAAAAAAAAAAARAAAAAAAAAAAAAAAAABEREREREREREREAAAAA + AAAAABEAAAAAABEAAAAAAAAAEREREREREREREQAAAAAAAAAAEQAAAAAAEQAAAAAAAAARERERERERERER + AAAAAAAAAAAAAAAAABERAAAAAAAAABEREREREREREREAAAAAAAAAAAAAAAAAEREAAAAAAAAAABERERER + EREREQAAAAAAAAAAAAAzEREREQAAAAAAAAAAERERERERERERAAAAAAAAAAAAADMRERERAAAAAAAAABEA + ERERERERERERAAAAAAAAAAAREREAAAAAAAAAAAAAEQAREREREREREREAAAAAAAAAABEREQAAAAAAAAAA + AAAAAAAAEREREREREQAAAAAAAAAAEQAAEREREREAEREAAAAAAAARERERERERAAAAAAAAAAARAAARERER + EQAREQAAAAAAABEREREREREAAAAAAAAAABEAEREAABEREREREQAAAAAAEREREREREQAAAAAAAAAAEQAR + EQAAERERERERAAAAAAAAAAAAAAAAAAAAAAAAABEAEREAABERMzMzERERAAAAAAAAAAAAAAAAAAAAAAAA + EQAREQAAEREzMzMREREAAAAAAAARERERAAAAAAAAABERABEAADMzMzMzMzMREQAAAAAAABEREREAAAAA + AAAAEREAEQAAMzMzMzMzMxERAAAAAAAAABERAAAAAAAAAAAAABEAAAAAMzMzETMzEREAAAAAAAAAEREA + AAAAAAAAAAAAEQAAAAAzMzMRMzMREQAAAAAAAAAAAAAAAAAAAAAAEREAEREAADMzMzMREREAAAAAAAAA + AAAAAAAAAAAAAAAREQAREQAAMzMzMxEREQAAAAAAABEAAAARAAAAAAARERERAAAAAAAzABEzEQARAAAA + AAAAEQAAABEAAAAAABEREREAAAAAADMAETMRABEAAAAAAAAAAAAREQAAAAAAERERERERAAAAMxERABER + AAAAAAAAAAAAABERAAAAAAAREREREREAAAAzEREAEREAAAAAAAAAAAAREQAREQAREREREREAABEzABER + EREREQAAAAAAAAAAABERABERABEREREREQAAETMAERERERERAAAAAAAAEQAAEQAAEQAAEREREREAEQAA + ABEREQAREREAAAAAAAARAAARAAARAAAREREREQARAAAAERERABEREQAAAAAAAAAAAAAAABEAERERMxER + ADMREREREQARERERAAAAAAAAAAAAAAAAEQAREREzEREAMxERERERABEREREAAAAAAAAAAAAAABERABER + ETMREREAABEREQAAABEREREAAAAAAAAAAAAAEREAERERMxEREQAAERERAAAAEREREQAAAAAAAAAAAAAR + ABEREREzMxEzEQARABEAAAAAABEREQAAAAAAAAAAABEAERERETMzETMRABEAEQAAAAAAERERAAAAEQAA + AAAAAAARABERERERETMRERERAAAAAAAAABEAAAARAAAAAAAAABEAERERERERMxEREREAAAAAAAAAEQAA + AAARAAAAAAARAAARERERETMRERERAAAAAAAAAAAAAAAAABEAAAAAABEAABERERERMxEREREAAAAAAAAA + AAAAAAAAAAAAAAAAAAARERERERERERERAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEREREREREREREAAAAA + AAAAAAAAAAAAAAAAEQARABERAAAAAAAREREAAAAAAAAAAAAAAAAAAAAAAAARABEAEREAAAAAABEREQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + EQAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAAAREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + EQAAABERAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAREQARAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAABERABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgA + AABAAAAAgAAAAAEACAAAAAAAABAAAAAAAAAAAAAAAAEAAAABAAAAAP8AAP8AAP8AAAAA//8A//8AAP8A + /wDAwMAA//jwANfr+gDU/38A/wAAAOIrigAqKqUAAAAAAAQEBAAICAgADAwMABEREQAWFhYAHBwcACIi + IgApKSkAMzMzADk5OQBCQkIATU1NAFVVVQBgYGAAZmZmAHBwcACAgIAAjIyMAJSUlACZmZkApKSkAKys + rAC2trYAwMDAAMzMzADU1NQA2traAODg4ADs7OwA+Pj4APv7+wD///8AMwAAAGYAAACZAAAAzAAAAP8A + AAAAMwAAMzMAAGYzAACZMwAAzDMAAP8zAAAAZgAAM2YAAGZmAACZZgAAzGYAAP9mAAAAmQAAM5kAAGaZ + AACZmQAAzJkAAP+ZAAAAzAAAM8wAAGbMAACZzAAAzMwAAP/MAAAA/wAAM/8AAGb/AACZ/wAAzP8AAP// + AAAAADMAMwAzAGYAMwCZADMAzAAzAP8AMwAAMzMAZjMzAJkzMwDMMzMA/zMzAABmMwAzZjMAZmYzAJlm + MwDMZjMA/2YzAACZMwAzmTMAZpkzAJmZMwDMmTMA/5kzAADMMwAzzDMAZswzAJnMMwDMzDMA/8wzAAD/ + MwAz/zMAZv8zAJn/MwDM/zMA//8zAAAAZgAzAGYAZgBmAJkAZgDMAGYA/wBmAAAzZgAzM2YAZjNmAJkz + ZgDMM2YA/zNmAABmZgAzZmYAmWZmAMxmZgD/ZmYAAJlmADOZZgBmmWYAmZlmAMyZZgD/mWYAAMxmADPM + ZgBmzGYAmcxmAMzMZgD/zGYAAP9mADP/ZgBm/2YAmf9mAMz/ZgD//2YAAACZADMAmQBmAJkAmQCZAMwA + mQD/AJkAADOZADMzmQBmM5kAmTOZAMwzmQD/M5kAAGaZADNmmQBmZpkAmWaZAMxmmQD/ZpkAAJmZADOZ + mQBmmZkAzJmZAP+ZmQABzJkAM8yZAGbMmQCZzJkAzMyZAP/MmQAA/5kAM/+ZAGb/mQCZ/5kAzP+ZAP// + mQAAAMwAMwDMAGYAzACZAMwAzADMAP8AzAAAM8wAMzPMAGYzzACZM8wAzDPMAP8zzAAAZswAM2bMAGZm + zACZZswAzGbMAP9mzAAAmcwAM5nMAGaZzACZmcwAzJnMAP+ZzAAAzMwAM8zMAGbMzACZzMwA/8zMAAD/ + zAAz/8wAZv/MAJn/zADM/8wA///MAAAA/wAzAP8AZgD/AJkA/wDMAP8A/wD/AAAz/wAzM/8AZjP/AJkz + /wDMM/8A/zP/AABm/wAzZv8AZmb/AJlm/wDMZv8A/2b/AACZ/wAzmf8AZpn/AJmZ/wDMmf8A/5n/AADM + /wAzzP8AZsz/AJnM/wDMzP8A/8z/AAD//wAz//8AZv//AJn//wDM//8An5+fn5+fn5+fn5+fn58dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+f + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+f + n5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+f + n5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+f + n5+fn5+fn5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fn5+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn5+fn5+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHZ+fHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fHR0dHR0dHR2fnx0dHR0dHR0dHR0dHR0dn58dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fnx0dHR0dHR0dn58dHR0dHR0dHR0dHR0dHZ+fHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR2fnx0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0d + n58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0d + HR0dHR0dn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0d + HR0dHR0dHR0dHZ+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fn5+fn5+fnx0d + HR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dHR2fnx0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn5+fn5+f + n58dHR0dHR0dHR0dHR0dHR0dn58dHR0dHR0dHR0dn58dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+f + n5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+f + n5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fnx0dHR0dHR0dHR0dHR0dHR2fn5+f + n5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHa2tn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0d + n5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR2trZ+fn5+fn5+fHR0dHR0dHR0dHR0d + HR2fnx0dn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHZ+fn5+fnx0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHZ+fn5+fn5+fn5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR2fn5+fn58dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dn58dHR0dn5+fn5+f + n5+fnx0dn5+fnx0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHZ+fHR0dHZ+f + n5+fn5+fn58dHZ+fn58dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR2fnx0d + n5+fnx0dHR2fn5+fn5+fn5+fn58dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0d + n58dHZ+fn58dHR0dn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fnx0dn5+fnx0dHR2fn5+fra2tra2tn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHZ+fn58dHR0dn5+fn62tra2trZ+fn5+fnx0dHR0dHR0dHR0dHZ+fn5+fn5+fHR0dHR0d + HR0dHR0dHR2fn5+fHR2fnx0dHR2tra2tra2tra2tra2trZ+fn58dHR0dHR0dHR0dHR2fn5+fn5+fnx0d + HR0dHR0dHR0dHR0dn5+fnx0dn58dHR0dra2tra2tra2tra2tra2fn5+fHR0dHR0dHR0dHR0dHR2fn5+f + HR0dHR0dHR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dra2tra2tn5+tra2tn5+fnx0dHR0dHR0dHR0dHR0d + n5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dn58dHR0dHR0dHa2tra2trZ+fra2trZ+fn58dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fnx0dn5+fnx0dHR2tra2tra2trZ+fn5+fnx0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn58dHZ+fn58dHR0dra2tra2tra2fn5+fn58dHR0d + HR0dHR0dHR2fnx0dHR0dHZ+fHR0dHR0dHR0dHZ+fn5+fn5+fHR0dHR0dHR0dHa2tHR2fn62tn58dHZ+f + HR0dHR0dHR0dHR0dn58dHR0dHR2fnx0dHR0dHR0dHR2fn5+fn5+fnx0dHR0dHR0dHR2trR0dn5+trZ+f + HR2fnx0dHR0dHR0dHR0dHR0dHR0dHZ+fn58dHR0dHR0dHR0dn5+fn5+fn5+fn5+fHR0dHR0dra2fn5+f + HR2fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR0dHR0dHR0dHZ+fn5+fn5+fn5+fnx0dHR0dHa2t + n5+fnx0dn5+fnx0dHR0dHR0dHR0dHR0dHR0dHZ+fn58dHZ+fn58dHZ+fn5+fn5+fn5+fnx0dHR2fn62t + HR2fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR2fn5+fHR2fn5+fn5+fn5+fn58dHR0d + n5+trR0dn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dn58dHR0dn58dHR0dn58dHR0dn5+fn5+fn5+fnx0d + n58dHR0dHR2fn5+fn58dHZ+fn5+fnx0dHR0dHR0dHR0dHZ+fHR0dHZ+fHR0dHZ+fHR0dHZ+fn5+fn5+f + n58dHZ+fHR0dHR0dn5+fn5+fHR2fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fnx0dn5+fn5+f + ra2fn5+fHR2trZ+fn5+fn5+fn58dHZ+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn58dHZ+f + n5+fn62tn5+fnx0dra2fn5+fn5+fn5+fHR2fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+f + HR2fn5+fn5+trZ+fn5+fnx0dHR2fn5+fn58dHR0dHR2fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0d + n5+fnx0dn5+fn5+fra2fn5+fn58dHR0dn5+fn5+fHR0dHR0dn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0d + HR0dHZ+fHR2fn5+fn5+fn62tra2fn62tn58dHZ+fHR2fnx0dHR0dHR0dHR2fn5+fn58dHR0dHR0dHR0d + HR0dHR0dHR2fnx0dn5+fn5+fn5+tra2tn5+trZ+fHR2fnx0dn58dHR0dHR0dHR0dn5+fn5+fHR0dHR0d + n58dHR0dHR0dHR0dHR0dHZ+fHR2fn5+fn5+fn5+fn5+trZ+fn5+fn5+fHR0dHR0dHR0dHR0dHR2fnx0d + HR0dHZ+fHR0dHR0dHR0dHR0dHR2fnx0dn5+fn5+fn5+fn5+fra2fn5+fn5+fnx0dHR0dHR0dHR0dHR0d + n58dHR0dHR0dHZ+fHR0dHR0dHR0dHZ+fHR0dHZ+fn5+fn5+fn5+trZ+fn5+fn5+fHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dHR2fnx0dHR2fn5+fn5+fn5+fra2fn5+fn5+fnx0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fn5+fn5+fnx0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn58dHZ+fHR2fn5+fHR0dHR0dHR0dHZ+fn5+fnx0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fHR2fnx0dn5+fnx0dHR0dHR0dHR2fn5+f + n58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fnx0dHR2fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHR0dn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fnx0dHR0dHZ+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHR0dHR2fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHZ+fn58dHZ+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR2fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAIAAAAAAAQAAAQAYAAAAAAAAwAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAIAAAAAAAQAAAQAIAAAAAAAAQAAAAAAAAAAA + AAAAAQAAAAEAAAAA/wAA/wAA/wAAAAD//wD//wAA/wD/AMDAwAD/+PAA1+v6ANT/fwD/AAAA4iuKACoq + pQAAAAAABAQEAAgICAAMDAwAERERABYWFgAcHBwAIiIiACkpKQAzMzMAOTk5AEJCQgBNTU0AVVVVAGBg + YABmZmYAcHBwAICAgACMjIwAlJSUAJmZmQCkpKQArKysALa2tgDAwMAAzMzMANTU1ADa2toA4ODgAOzs + 7AD4+PgA+/v7AP///wAzAAAAZgAAAJkAAADMAAAA/wAAAAAzAAAzMwAAZjMAAJkzAADMMwAA/zMAAABm + AAAzZgAAZmYAAJlmAADMZgAA/2YAAACZAAAzmQAAZpkAAJmZAADMmQAA/5kAAADMAAAzzAAAZswAAJnM + AADMzAAA/8wAAAD/AAAz/wAAZv8AAJn/AADM/wAA//8AAAAAMwAzADMAZgAzAJkAMwDMADMA/wAzAAAz + MwBmMzMAmTMzAMwzMwD/MzMAAGYzADNmMwBmZjMAmWYzAMxmMwD/ZjMAAJkzADOZMwBmmTMAmZkzAMyZ + MwD/mTMAAMwzADPMMwBmzDMAmcwzAMzMMwD/zDMAAP8zADP/MwBm/zMAmf8zAMz/MwD//zMAAABmADMA + ZgBmAGYAmQBmAMwAZgD/AGYAADNmADMzZgBmM2YAmTNmAMwzZgD/M2YAAGZmADNmZgCZZmYAzGZmAP9m + ZgAAmWYAM5lmAGaZZgCZmWYAzJlmAP+ZZgAAzGYAM8xmAGbMZgCZzGYAzMxmAP/MZgAA/2YAM/9mAGb/ + ZgCZ/2YAzP9mAP//ZgAAAJkAMwCZAGYAmQCZAJkAzACZAP8AmQAAM5kAMzOZAGYzmQCZM5kAzDOZAP8z + mQAAZpkAM2aZAGZmmQCZZpkAzGaZAP9mmQAAmZkAM5mZAGaZmQDMmZkA/5mZAAHMmQAzzJkAZsyZAJnM + mQDMzJkA/8yZAAD/mQAz/5kAZv+ZAJn/mQDM/5kA//+ZAAAAzAAzAMwAZgDMAJkAzADMAMwA/wDMAAAz + zAAzM8wAZjPMAJkzzADMM8wA/zPMAABmzAAzZswAZmbMAJlmzADMZswA/2bMAACZzAAzmcwAZpnMAJmZ + zADMmcwA/5nMAADMzAAzzMwAZszMAJnMzAD/zMwAAP/MADP/zABm/8wAmf/MAMz/zAD//8wAAAD/ADMA + /wBmAP8AmQD/AMwA/wD/AP8AADP/ADMz/wBmM/8AmTP/AMwz/wD/M/8AAGb/ADNm/wBmZv8AmWb/AMxm + /wD/Zv8AAJn/ADOZ/wBmmf8AmZn/AMyZ/wD/mf8AAMz/ADPM/wBmzP8Amcz/AMzM/wD/zP8AAP//ADP/ + /wBm//8Amf//AMz//wCfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pra2trZ+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+tra2tn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD62tra2fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+f + n5+tra2tra2tra2tra2fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8P + Dw+fn5+fn5+fn62tra2tra2tra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+f + n58PDw8PDw8PD5+fn5+fn5+fra2tra2tra2tra2tn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8P + Dw+fn5+fDw8PDw8PDw+tra2tra2tra2tra2tra2tra2tra2tra2tra2tn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PD5+fn58PDw8PDw8PD62tra2tra2tra2tra2tra2tra2tra2tra2tra2fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8Pn5+fnw8PDw8PDw8Pra2tra2tra2tra2tra2tra2tra2tra2tra2trZ+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw+fn5+fDw8PDw8PDw+tra2tra2tra2tra2tra2tra2tra2t + ra2tra2tn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+fn58PDw8PDw8PD62tra2tra2tra2tra2t + ra2tra2tra2tra2tra2fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PD62t + ra2tra2tra2trZ+fn5+tra2tra2trZ+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8Pra2tra2tra2tra2tn5+fn62tra2tra2tn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PDw8PDw+tra2tra2tra2tra2fn5+fra2tra2tra2fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n58PDw8Pn5+fn5+fn58PDw8PDw8PD62tra2tra2tra2tra2tra2fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pra2tra2tra2tra2tra2trZ+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw+tra2tra2tra2tra2tra2tn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PD62tra2tra2tra2tra2t + ra2fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pra2tra2t + ra2tra2tra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw+tra2tDw8PD5+fn5+tra2tn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PD62tra0PDw8Pn5+fn62tra2fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pra2trQ8PDw+fn5+fra2trZ+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw+tra2tn5+fn5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PD62tra2fn5+fn5+fnw8PDw+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8Pra2trZ+fn5+fn5+fDw8PD5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw+tra2tn5+fn5+f + n58PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PD62t + ra2fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PD5+fn5+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8Pn5+fn62t + ra0PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw+fn5+fra2trQ8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PD5+fn5+tra2tDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PD5+fn58PDw8PDw8PD5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fDw8PD5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+fn58PDw8PDw8PD5+f + n58PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n58PDw8Pn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fnw8P + Dw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fnw8PDw+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fn5+fn62tra2fn5+fn5+fnw8PDw+tra2tn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fDw8PD62t + ra2fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+tra2tn5+fn5+f + n58PDw8Pra2trZ+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+fn5+fn5+fn5+fn62t + ra2fn5+fn5+fn5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+f + n5+fn5+fra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8P + Dw+fn5+fn5+fn5+fn5+tra2tn5+fn5+fn5+fn5+fDw8PDw8PDw+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PD5+fn5+fn5+fn5+fn62tra2fn5+fn5+fn5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn5+tra2tra2trZ+fn5+tra2tn5+fnw8P + Dw+fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn62tra2tra2tn5+fn62t + ra2fn5+fDw8PD5+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fra2tra2t + ra2fn5+fra2trZ+fn58PDw8Pn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+tra2tn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn62tra2fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+tra2tn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fra2trZ+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+tra2tn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn62tra2fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8Pn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n58PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + + + \ No newline at end of file diff --git a/Server.MirForms/Systems/MonsterTunerForm.Designer.cs b/Server.MirForms/Systems/MonsterTunerForm.Designer.cs new file mode 100644 index 0000000..32a188b --- /dev/null +++ b/Server.MirForms/Systems/MonsterTunerForm.Designer.cs @@ -0,0 +1,546 @@ +namespace Server.MirForms.Systems +{ + partial class MonsterTunerForm + { + /// + /// 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.SelectMonsterComboBox = new System.Windows.Forms.ComboBox(); + this.updateButton = new System.Windows.Forms.Button(); + this.CoolEyeTextBox = new System.Windows.Forms.TextBox(); + this.label12 = new System.Windows.Forms.Label(); + this.ViewRangeTextBox = new System.Windows.Forms.TextBox(); + this.label33 = new System.Windows.Forms.Label(); + this.MSpeedTextBox = new System.Windows.Forms.TextBox(); + this.label6 = new System.Windows.Forms.Label(); + this.ASpeedTextBox = new System.Windows.Forms.TextBox(); + this.label5 = new System.Windows.Forms.Label(); + this.LevelTextBox = new System.Windows.Forms.TextBox(); + this.label4 = new System.Windows.Forms.Label(); + this.EffectTextBox = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.AgilityTextBox = new System.Windows.Forms.TextBox(); + this.label26 = new System.Windows.Forms.Label(); + this.AccuracyTextBox = new System.Windows.Forms.TextBox(); + this.label27 = new System.Windows.Forms.Label(); + this.HPTextBox = new System.Windows.Forms.TextBox(); + this.label25 = new System.Windows.Forms.Label(); + this.MaxSCTextBox = new System.Windows.Forms.TextBox(); + this.label22 = new System.Windows.Forms.Label(); + this.MinSCTextBox = new System.Windows.Forms.TextBox(); + this.label23 = new System.Windows.Forms.Label(); + this.MaxMCTextBox = new System.Windows.Forms.TextBox(); + this.label18 = new System.Windows.Forms.Label(); + this.MinMCTextBox = new System.Windows.Forms.TextBox(); + this.label19 = new System.Windows.Forms.Label(); + this.MaxDCTextBox = new System.Windows.Forms.TextBox(); + this.label20 = new System.Windows.Forms.Label(); + this.MinDCTextBox = new System.Windows.Forms.TextBox(); + this.label21 = new System.Windows.Forms.Label(); + this.MaxMACTextBox = new System.Windows.Forms.TextBox(); + this.label16 = new System.Windows.Forms.Label(); + this.MinMACTextBox = new System.Windows.Forms.TextBox(); + this.label17 = new System.Windows.Forms.Label(); + this.MaxACTextBox = new System.Windows.Forms.TextBox(); + this.label15 = new System.Windows.Forms.Label(); + this.MinACTextBox = new System.Windows.Forms.TextBox(); + this.label14 = new System.Windows.Forms.Label(); + this.MonsterNameTextBox = new System.Windows.Forms.TextBox(); + this.label3 = new System.Windows.Forms.Label(); + this.SaveButton = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // SelectMonsterComboBox + // + this.SelectMonsterComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.SelectMonsterComboBox.FormattingEnabled = true; + this.SelectMonsterComboBox.Location = new System.Drawing.Point(3, 3); + this.SelectMonsterComboBox.Name = "SelectMonsterComboBox"; + this.SelectMonsterComboBox.Size = new System.Drawing.Size(196, 21); + this.SelectMonsterComboBox.TabIndex = 0; + this.SelectMonsterComboBox.SelectedIndexChanged += new System.EventHandler(this.SelectMonsterComboBox_SelectedIndexChanged); + // + // updateButton + // + this.updateButton.Location = new System.Drawing.Point(3, 216); + this.updateButton.Name = "updateButton"; + this.updateButton.Size = new System.Drawing.Size(75, 23); + this.updateButton.TabIndex = 59; + this.updateButton.Text = "Update"; + this.updateButton.UseVisualStyleBackColor = true; + this.updateButton.Click += new System.EventHandler(this.updateButton_Click); + // + // CoolEyeTextBox + // + this.CoolEyeTextBox.Location = new System.Drawing.Point(508, 83); + this.CoolEyeTextBox.MaxLength = 3; + this.CoolEyeTextBox.Name = "CoolEyeTextBox"; + this.CoolEyeTextBox.Size = new System.Drawing.Size(30, 20); + this.CoolEyeTextBox.TabIndex = 123; + // + // label12 + // + this.label12.AutoSize = true; + this.label12.Location = new System.Drawing.Point(450, 86); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(52, 13); + this.label12.TabIndex = 124; + this.label12.Text = "Cool Eye:"; + // + // ViewRangeTextBox + // + this.ViewRangeTextBox.Location = new System.Drawing.Point(436, 57); + this.ViewRangeTextBox.MaxLength = 3; + this.ViewRangeTextBox.Name = "ViewRangeTextBox"; + this.ViewRangeTextBox.Size = new System.Drawing.Size(30, 20); + this.ViewRangeTextBox.TabIndex = 121; + // + // label33 + // + this.label33.AutoSize = true; + this.label33.Location = new System.Drawing.Point(362, 60); + this.label33.Name = "label33"; + this.label33.Size = new System.Drawing.Size(68, 13); + this.label33.TabIndex = 122; + this.label33.Text = "View Range:"; + // + // MSpeedTextBox + // + this.MSpeedTextBox.Location = new System.Drawing.Point(216, 186); + this.MSpeedTextBox.MaxLength = 5; + this.MSpeedTextBox.Name = "MSpeedTextBox"; + this.MSpeedTextBox.Size = new System.Drawing.Size(40, 20); + this.MSpeedTextBox.TabIndex = 104; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(139, 189); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(71, 13); + this.label6.TabIndex = 120; + this.label6.Text = "Move Speed:"; + // + // ASpeedTextBox + // + this.ASpeedTextBox.Location = new System.Drawing.Point(93, 186); + this.ASpeedTextBox.MaxLength = 5; + this.ASpeedTextBox.Name = "ASpeedTextBox"; + this.ASpeedTextBox.Size = new System.Drawing.Size(40, 20); + this.ASpeedTextBox.TabIndex = 103; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(12, 189); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(75, 13); + this.label5.TabIndex = 119; + this.label5.Text = "Attack Speed:"; + // + // LevelTextBox + // + this.LevelTextBox.Location = new System.Drawing.Point(251, 56); + this.LevelTextBox.MaxLength = 3; + this.LevelTextBox.Name = "LevelTextBox"; + this.LevelTextBox.Size = new System.Drawing.Size(30, 20); + this.LevelTextBox.TabIndex = 87; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(209, 60); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(36, 13); + this.label4.TabIndex = 118; + this.label4.Text = "Level:"; + // + // EffectTextBox + // + this.EffectTextBox.Location = new System.Drawing.Point(173, 56); + this.EffectTextBox.MaxLength = 3; + this.EffectTextBox.Name = "EffectTextBox"; + this.EffectTextBox.Size = new System.Drawing.Size(30, 20); + this.EffectTextBox.TabIndex = 86; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(129, 60); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(38, 13); + this.label2.TabIndex = 117; + this.label2.Text = "Effect:"; + // + // AgilityTextBox + // + this.AgilityTextBox.Location = new System.Drawing.Point(182, 160); + this.AgilityTextBox.MaxLength = 3; + this.AgilityTextBox.Name = "AgilityTextBox"; + this.AgilityTextBox.Size = new System.Drawing.Size(30, 20); + this.AgilityTextBox.TabIndex = 102; + // + // label26 + // + this.label26.AutoSize = true; + this.label26.Location = new System.Drawing.Point(139, 163); + this.label26.Name = "label26"; + this.label26.Size = new System.Drawing.Size(37, 13); + this.label26.TabIndex = 116; + this.label26.Text = "Agility:"; + // + // AccuracyTextBox + // + this.AccuracyTextBox.Location = new System.Drawing.Point(93, 160); + this.AccuracyTextBox.MaxLength = 3; + this.AccuracyTextBox.Name = "AccuracyTextBox"; + this.AccuracyTextBox.Size = new System.Drawing.Size(30, 20); + this.AccuracyTextBox.TabIndex = 101; + // + // label27 + // + this.label27.AutoSize = true; + this.label27.Location = new System.Drawing.Point(32, 163); + this.label27.Name = "label27"; + this.label27.Size = new System.Drawing.Size(55, 13); + this.label27.TabIndex = 115; + this.label27.Text = "Accuracy:"; + // + // HPTextBox + // + this.HPTextBox.Location = new System.Drawing.Point(93, 82); + this.HPTextBox.MaxLength = 10; + this.HPTextBox.Name = "HPTextBox"; + this.HPTextBox.Size = new System.Drawing.Size(72, 20); + this.HPTextBox.TabIndex = 88; + // + // label25 + // + this.label25.AutoSize = true; + this.label25.Location = new System.Drawing.Point(62, 85); + this.label25.Name = "label25"; + this.label25.Size = new System.Drawing.Size(25, 13); + this.label25.TabIndex = 114; + this.label25.Text = "HP:"; + // + // MaxSCTextBox + // + this.MaxSCTextBox.Location = new System.Drawing.Point(554, 134); + this.MaxSCTextBox.MaxLength = 3; + this.MaxSCTextBox.Name = "MaxSCTextBox"; + this.MaxSCTextBox.Size = new System.Drawing.Size(30, 20); + this.MaxSCTextBox.TabIndex = 100; + // + // label22 + // + this.label22.AutoSize = true; + this.label22.Location = new System.Drawing.Point(499, 137); + this.label22.Name = "label22"; + this.label22.Size = new System.Drawing.Size(47, 13); + this.label22.TabIndex = 113; + this.label22.Text = "Max SC:"; + // + // MinSCTextBox + // + this.MinSCTextBox.Location = new System.Drawing.Point(463, 134); + this.MinSCTextBox.MaxLength = 3; + this.MinSCTextBox.Name = "MinSCTextBox"; + this.MinSCTextBox.Size = new System.Drawing.Size(30, 20); + this.MinSCTextBox.TabIndex = 99; + // + // label23 + // + this.label23.AutoSize = true; + this.label23.Location = new System.Drawing.Point(411, 137); + this.label23.Name = "label23"; + this.label23.Size = new System.Drawing.Size(44, 13); + this.label23.TabIndex = 112; + this.label23.Text = "Min SC:"; + // + // MaxMCTextBox + // + this.MaxMCTextBox.Location = new System.Drawing.Point(375, 134); + this.MaxMCTextBox.MaxLength = 3; + this.MaxMCTextBox.Name = "MaxMCTextBox"; + this.MaxMCTextBox.Size = new System.Drawing.Size(30, 20); + this.MaxMCTextBox.TabIndex = 98; + // + // label18 + // + this.label18.AutoSize = true; + this.label18.Location = new System.Drawing.Point(320, 137); + this.label18.Name = "label18"; + this.label18.Size = new System.Drawing.Size(49, 13); + this.label18.TabIndex = 111; + this.label18.Text = "Max MC:"; + // + // MinMCTextBox + // + this.MinMCTextBox.Location = new System.Drawing.Point(277, 134); + this.MinMCTextBox.MaxLength = 3; + this.MinMCTextBox.Name = "MinMCTextBox"; + this.MinMCTextBox.Size = new System.Drawing.Size(30, 20); + this.MinMCTextBox.TabIndex = 97; + // + // label19 + // + this.label19.AutoSize = true; + this.label19.Location = new System.Drawing.Point(225, 137); + this.label19.Name = "label19"; + this.label19.Size = new System.Drawing.Size(46, 13); + this.label19.TabIndex = 110; + this.label19.Text = "Min MC:"; + // + // MaxDCTextBox + // + this.MaxDCTextBox.Location = new System.Drawing.Point(182, 134); + this.MaxDCTextBox.MaxLength = 3; + this.MaxDCTextBox.Name = "MaxDCTextBox"; + this.MaxDCTextBox.Size = new System.Drawing.Size(30, 20); + this.MaxDCTextBox.TabIndex = 95; + // + // label20 + // + this.label20.AutoSize = true; + this.label20.Location = new System.Drawing.Point(129, 137); + this.label20.Name = "label20"; + this.label20.Size = new System.Drawing.Size(48, 13); + this.label20.TabIndex = 109; + this.label20.Text = "Max DC:"; + // + // MinDCTextBox + // + this.MinDCTextBox.Location = new System.Drawing.Point(93, 134); + this.MinDCTextBox.MaxLength = 3; + this.MinDCTextBox.Name = "MinDCTextBox"; + this.MinDCTextBox.Size = new System.Drawing.Size(30, 20); + this.MinDCTextBox.TabIndex = 94; + // + // label21 + // + this.label21.AutoSize = true; + this.label21.Location = new System.Drawing.Point(42, 141); + this.label21.Name = "label21"; + this.label21.Size = new System.Drawing.Size(45, 13); + this.label21.TabIndex = 108; + this.label21.Text = "Min DC:"; + // + // MaxMACTextBox + // + this.MaxMACTextBox.Location = new System.Drawing.Point(375, 108); + this.MaxMACTextBox.MaxLength = 3; + this.MaxMACTextBox.Name = "MaxMACTextBox"; + this.MaxMACTextBox.Size = new System.Drawing.Size(30, 20); + this.MaxMACTextBox.TabIndex = 93; + // + // label16 + // + this.label16.AutoSize = true; + this.label16.Location = new System.Drawing.Point(313, 111); + this.label16.Name = "label16"; + this.label16.Size = new System.Drawing.Size(56, 13); + this.label16.TabIndex = 107; + this.label16.Text = "Max MAC:"; + // + // MinMACTextBox + // + this.MinMACTextBox.Location = new System.Drawing.Point(277, 108); + this.MinMACTextBox.MaxLength = 3; + this.MinMACTextBox.Name = "MinMACTextBox"; + this.MinMACTextBox.Size = new System.Drawing.Size(30, 20); + this.MinMACTextBox.TabIndex = 92; + // + // label17 + // + this.label17.AutoSize = true; + this.label17.Location = new System.Drawing.Point(218, 111); + this.label17.Name = "label17"; + this.label17.Size = new System.Drawing.Size(53, 13); + this.label17.TabIndex = 96; + this.label17.Text = "Min MAC:"; + // + // MaxACTextBox + // + this.MaxACTextBox.Location = new System.Drawing.Point(182, 108); + this.MaxACTextBox.MaxLength = 3; + this.MaxACTextBox.Name = "MaxACTextBox"; + this.MaxACTextBox.Size = new System.Drawing.Size(30, 20); + this.MaxACTextBox.TabIndex = 91; + // + // label15 + // + this.label15.AutoSize = true; + this.label15.Location = new System.Drawing.Point(129, 111); + this.label15.Name = "label15"; + this.label15.Size = new System.Drawing.Size(47, 13); + this.label15.TabIndex = 106; + this.label15.Text = "Max AC:"; + // + // MinACTextBox + // + this.MinACTextBox.Location = new System.Drawing.Point(93, 108); + this.MinACTextBox.MaxLength = 3; + this.MinACTextBox.Name = "MinACTextBox"; + this.MinACTextBox.Size = new System.Drawing.Size(30, 20); + this.MinACTextBox.TabIndex = 90; + // + // label14 + // + this.label14.AutoSize = true; + this.label14.Location = new System.Drawing.Point(43, 111); + this.label14.Name = "label14"; + this.label14.Size = new System.Drawing.Size(44, 13); + this.label14.TabIndex = 105; + this.label14.Text = "Min AC:"; + // + // MonsterNameTextBox + // + this.MonsterNameTextBox.Location = new System.Drawing.Point(93, 30); + this.MonsterNameTextBox.Name = "MonsterNameTextBox"; + this.MonsterNameTextBox.Size = new System.Drawing.Size(115, 20); + this.MonsterNameTextBox.TabIndex = 85; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(8, 34); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(79, 13); + this.label3.TabIndex = 89; + this.label3.Text = "Monster Name:"; + // + // SaveButton + // + this.SaveButton.Location = new System.Drawing.Point(84, 216); + this.SaveButton.Name = "SaveButton"; + this.SaveButton.Size = new System.Drawing.Size(75, 23); + this.SaveButton.TabIndex = 125; + this.SaveButton.Text = "Save To DB"; + this.SaveButton.UseVisualStyleBackColor = true; + this.SaveButton.Click += new System.EventHandler(this.SaveButton_Click); + // + // MonsterTunerForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(591, 246); + this.Controls.Add(this.SaveButton); + this.Controls.Add(this.CoolEyeTextBox); + this.Controls.Add(this.label12); + this.Controls.Add(this.ViewRangeTextBox); + this.Controls.Add(this.label33); + this.Controls.Add(this.MSpeedTextBox); + this.Controls.Add(this.label6); + this.Controls.Add(this.ASpeedTextBox); + this.Controls.Add(this.label5); + this.Controls.Add(this.LevelTextBox); + this.Controls.Add(this.label4); + this.Controls.Add(this.EffectTextBox); + this.Controls.Add(this.label2); + this.Controls.Add(this.AgilityTextBox); + this.Controls.Add(this.label26); + this.Controls.Add(this.AccuracyTextBox); + this.Controls.Add(this.label27); + this.Controls.Add(this.HPTextBox); + this.Controls.Add(this.label25); + this.Controls.Add(this.MaxSCTextBox); + this.Controls.Add(this.label22); + this.Controls.Add(this.MinSCTextBox); + this.Controls.Add(this.label23); + this.Controls.Add(this.MaxMCTextBox); + this.Controls.Add(this.label18); + this.Controls.Add(this.MinMCTextBox); + this.Controls.Add(this.label19); + this.Controls.Add(this.MaxDCTextBox); + this.Controls.Add(this.label20); + this.Controls.Add(this.MinDCTextBox); + this.Controls.Add(this.label21); + this.Controls.Add(this.MaxMACTextBox); + this.Controls.Add(this.label16); + this.Controls.Add(this.MinMACTextBox); + this.Controls.Add(this.label17); + this.Controls.Add(this.MaxACTextBox); + this.Controls.Add(this.label15); + this.Controls.Add(this.MinACTextBox); + this.Controls.Add(this.label14); + this.Controls.Add(this.MonsterNameTextBox); + this.Controls.Add(this.label3); + this.Controls.Add(this.updateButton); + this.Controls.Add(this.SelectMonsterComboBox); + this.Name = "MonsterTunerForm"; + this.Text = "Monster Tuner"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ComboBox SelectMonsterComboBox; + private System.Windows.Forms.Button updateButton; + private System.Windows.Forms.TextBox CoolEyeTextBox; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.TextBox ViewRangeTextBox; + private System.Windows.Forms.Label label33; + private System.Windows.Forms.TextBox MSpeedTextBox; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.TextBox ASpeedTextBox; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.TextBox LevelTextBox; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.TextBox EffectTextBox; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox AgilityTextBox; + private System.Windows.Forms.Label label26; + private System.Windows.Forms.TextBox AccuracyTextBox; + private System.Windows.Forms.Label label27; + private System.Windows.Forms.TextBox HPTextBox; + private System.Windows.Forms.Label label25; + private System.Windows.Forms.TextBox MaxSCTextBox; + private System.Windows.Forms.Label label22; + private System.Windows.Forms.TextBox MinSCTextBox; + private System.Windows.Forms.Label label23; + private System.Windows.Forms.TextBox MaxMCTextBox; + private System.Windows.Forms.Label label18; + private System.Windows.Forms.TextBox MinMCTextBox; + private System.Windows.Forms.Label label19; + private System.Windows.Forms.TextBox MaxDCTextBox; + private System.Windows.Forms.Label label20; + private System.Windows.Forms.TextBox MinDCTextBox; + private System.Windows.Forms.Label label21; + private System.Windows.Forms.TextBox MaxMACTextBox; + private System.Windows.Forms.Label label16; + private System.Windows.Forms.TextBox MinMACTextBox; + private System.Windows.Forms.Label label17; + private System.Windows.Forms.TextBox MaxACTextBox; + private System.Windows.Forms.Label label15; + private System.Windows.Forms.TextBox MinACTextBox; + private System.Windows.Forms.Label label14; + private System.Windows.Forms.TextBox MonsterNameTextBox; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Button SaveButton; + } +} \ No newline at end of file diff --git a/Server.MirForms/Systems/MonsterTunerForm.cs b/Server.MirForms/Systems/MonsterTunerForm.cs new file mode 100644 index 0000000..6ffdc7f --- /dev/null +++ b/Server.MirForms/Systems/MonsterTunerForm.cs @@ -0,0 +1,112 @@ +using Server.MirDatabase; +using Server.MirEnvir; +using Server.MirObjects; + +namespace Server.MirForms.Systems +{ + public partial class MonsterTunerForm : Form + { + public Envir Envir => SMain.Envir; + + public MonsterTunerForm() + { + InitializeComponent(); + + for (int i = 0; i < Envir.MonsterInfoList.Count; i++) + { + SelectMonsterComboBox.Items.Add(Envir.MonsterInfoList[i]); + } + } + + private void SelectMonsterComboBox_SelectedIndexChanged(object sender, EventArgs e) + { + ComboBox comboBox = (ComboBox)sender; + + MonsterInfo monster = (MonsterInfo)comboBox.SelectedItem; + + if (monster == null) return; + + MonsterNameTextBox.Text = monster.Name; + HPTextBox.Text = monster.Stats[Stat.HP].ToString(); + EffectTextBox.Text = monster.Effect.ToString(); + LevelTextBox.Text = monster.Level.ToString(); + ViewRangeTextBox.Text = monster.ViewRange.ToString(); + CoolEyeTextBox.Text = monster.CoolEye.ToString(); + MinACTextBox.Text = monster.Stats[Stat.MinAC].ToString(); + MaxACTextBox.Text = monster.Stats[Stat.MaxAC].ToString(); + MinMACTextBox.Text = monster.Stats[Stat.MinMAC].ToString(); + MaxMACTextBox.Text = monster.Stats[Stat.MaxMAC].ToString(); + MinDCTextBox.Text = monster.Stats[Stat.MinDC].ToString(); + MaxDCTextBox.Text = monster.Stats[Stat.MaxDC].ToString(); + MinMCTextBox.Text = monster.Stats[Stat.MinMC].ToString(); + MaxMCTextBox.Text = monster.Stats[Stat.MaxMC].ToString(); + MinSCTextBox.Text = monster.Stats[Stat.MinSC].ToString(); + MaxSCTextBox.Text = monster.Stats[Stat.MaxSC].ToString(); + AccuracyTextBox.Text = monster.Stats[Stat.Accuracy].ToString(); + AgilityTextBox.Text = monster.Stats[Stat.Agility].ToString(); + ASpeedTextBox.Text = monster.AttackSpeed.ToString(); + MSpeedTextBox.Text = monster.MoveSpeed.ToString(); + } + + private void updateButton_Click(object sender, EventArgs e) + { + MonsterInfo monster = (MonsterInfo)SelectMonsterComboBox.SelectedItem; + + if (monster == null) return; + + try + { + monster.Stats[Stat.HP] = int.Parse(HPTextBox.Text); + monster.Effect = byte.Parse(EffectTextBox.Text); + monster.Level = ushort.Parse(LevelTextBox.Text); + monster.ViewRange = byte.Parse(ViewRangeTextBox.Text); + monster.CoolEye = byte.Parse(CoolEyeTextBox.Text); + monster.Stats[Stat.MinAC] = ushort.Parse(MinACTextBox.Text); + monster.Stats[Stat.MaxAC] = ushort.Parse(MaxACTextBox.Text); + monster.Stats[Stat.MinMAC] = ushort.Parse(MinMACTextBox.Text); + monster.Stats[Stat.MaxMAC] = ushort.Parse(MaxMACTextBox.Text); + monster.Stats[Stat.MinDC] = ushort.Parse(MinDCTextBox.Text); + monster.Stats[Stat.MaxDC] = ushort.Parse(MaxDCTextBox.Text); + monster.Stats[Stat.MinMC] = ushort.Parse(MinMCTextBox.Text); + monster.Stats[Stat.MaxMC] = ushort.Parse(MaxMCTextBox.Text); + monster.Stats[Stat.MinSC] = ushort.Parse(MinSCTextBox.Text); + monster.Stats[Stat.MaxSC] = ushort.Parse(MaxSCTextBox.Text); + monster.Stats[Stat.Accuracy] = byte.Parse(AccuracyTextBox.Text); + monster.Stats[Stat.Agility] = byte.Parse(AgilityTextBox.Text); + monster.AttackSpeed = ushort.Parse(ASpeedTextBox.Text); + monster.MoveSpeed = ushort.Parse(MSpeedTextBox.Text); + } + catch + { + MessageBox.Show("Value validation failed. Please correct before updating", "Notice", + MessageBoxButtons.OK, MessageBoxIcon.Asterisk); + return; + } + + foreach (var item in Envir.Objects) + { + if (item.Race != ObjectType.Monster) continue; + + MonsterObject mob = (MonsterObject)item; + + mob.RefreshAll(); + } + } + + private void SaveButton_Click(object sender, EventArgs e) + { + for (int i = 0; i < SelectMonsterComboBox.Items.Count; i++) + { + MonsterInfo mob = (MonsterInfo)SelectMonsterComboBox.Items[i]; + + if (mob == null) continue; + + if (Envir.MonsterInfoList[i].Index != mob.Index) break; + + Envir.MonsterInfoList[i] = mob; + } + + Envir.SaveDB(); + } + } +} diff --git a/Server.MirForms/Systems/MonsterTunerForm.resx b/Server.MirForms/Systems/MonsterTunerForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/Server.MirForms/Systems/MonsterTunerForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Server.MirForms/Systems/SystemInfoForm.Designer.cs b/Server.MirForms/Systems/SystemInfoForm.Designer.cs new file mode 100644 index 0000000..800a88e --- /dev/null +++ b/Server.MirForms/Systems/SystemInfoForm.Designer.cs @@ -0,0 +1,904 @@ +namespace Server +{ + partial class SystemInfoForm + { + /// + /// 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() + { + components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SystemInfoForm)); + tabControl1 = new TabControl(); + tabPage2 = new TabPage(); + label8 = new Label(); + label7 = new Label(); + MailInsurancePercentageTextBox = new TextBox(); + MailCostPer1kTextBox = new TextBox(); + MailFreeWithStampCheckbox = new CheckBox(); + groupBox2 = new GroupBox(); + MailAutoSendItemsCheckbox = new CheckBox(); + MailAutoSendGoldCheckbox = new CheckBox(); + tabPage3 = new TabPage(); + GoodsBuyBackMaxStoredTextBox = new TextBox(); + label11 = new Label(); + GoodsBuyBackTimeTextBox = new TextBox(); + label10 = new Label(); + GoodsMaxStoredTextBox = new TextBox(); + label9 = new Label(); + GoodsOnCheckBox = new CheckBox(); + tabPage4 = new TabPage(); + OreName_textbox = new TextBox(); + label23 = new Label(); + RefineCost_textbox = new TextBox(); + label22 = new Label(); + ItemDimReturn_textbox = new TextBox(); + label21 = new Label(); + WepDimReturn_textbox = new TextBox(); + label20 = new Label(); + CritMultiplier_textbox = new TextBox(); + label19 = new Label(); + CritChance_textbox = new TextBox(); + label18 = new Label(); + NormalStat_textbox = new TextBox(); + label17 = new Label(); + RefineTime_textbox = new TextBox(); + label16 = new Label(); + BaseChance_textbox = new TextBox(); + label15 = new Label(); + WeaponOnly_checkbox = new CheckBox(); + tabPage5 = new TabPage(); + label24 = new Label(); + ReplaceRingCost_textbox = new TextBox(); + label14 = new Label(); + RequiredLevel_textbox = new TextBox(); + LoverBonusEXP_textbox = new TextBox(); + label12 = new Label(); + label13 = new Label(); + MarriageCooldown_textbox = new TextBox(); + LoverRecall_checkbox = new CheckBox(); + tabPage7 = new TabPage(); + GemStatCheckBox = new CheckBox(); + tabPage8 = new TabPage(); + panel1 = new Panel(); + lbltickmins = new Label(); + txtSpawnTickDefault = new TextBox(); + label32 = new Label(); + pnlSpawnTickConfig = new Panel(); + txtSpawnTickSpeed = new TextBox(); + txtSpawnTickUsers = new TextBox(); + label31 = new Label(); + label30 = new Label(); + lbSpawnTickList = new ListBox(); + btnSpawnTickRemove = new Button(); + btnSpawnTickAdd = new Button(); + toolTip1 = new ToolTip(components); + tabControl1.SuspendLayout(); + tabPage2.SuspendLayout(); + groupBox2.SuspendLayout(); + tabPage3.SuspendLayout(); + tabPage4.SuspendLayout(); + tabPage5.SuspendLayout(); + tabPage7.SuspendLayout(); + tabPage8.SuspendLayout(); + panel1.SuspendLayout(); + pnlSpawnTickConfig.SuspendLayout(); + SuspendLayout(); + // + // tabControl1 + // + tabControl1.Controls.Add(tabPage2); + tabControl1.Controls.Add(tabPage3); + tabControl1.Controls.Add(tabPage4); + tabControl1.Controls.Add(tabPage5); + tabControl1.Controls.Add(tabPage7); + tabControl1.Controls.Add(tabPage8); + tabControl1.Location = new Point(14, 14); + tabControl1.Margin = new Padding(4, 3, 4, 3); + tabControl1.Name = "tabControl1"; + tabControl1.SelectedIndex = 0; + tabControl1.Size = new Size(475, 294); + tabControl1.TabIndex = 0; + // + // tabPage2 + // + tabPage2.Controls.Add(label8); + tabPage2.Controls.Add(label7); + tabPage2.Controls.Add(MailInsurancePercentageTextBox); + tabPage2.Controls.Add(MailCostPer1kTextBox); + tabPage2.Controls.Add(MailFreeWithStampCheckbox); + tabPage2.Controls.Add(groupBox2); + tabPage2.Location = new Point(4, 24); + tabPage2.Margin = new Padding(4, 3, 4, 3); + tabPage2.Name = "tabPage2"; + tabPage2.Padding = new Padding(4, 3, 4, 3); + tabPage2.Size = new Size(467, 266); + tabPage2.TabIndex = 1; + tabPage2.Text = "Mail"; + tabPage2.UseVisualStyleBackColor = true; + // + // label8 + // + label8.AutoSize = true; + label8.Location = new Point(136, 68); + label8.Margin = new Padding(4, 0, 4, 0); + label8.Name = "label8"; + label8.Size = new Size(118, 15); + label8.TabIndex = 5; + label8.Text = "Insurance % Per Item"; + // + // label7 + // + label7.AutoSize = true; + label7.Location = new Point(136, 38); + label7.Margin = new Padding(4, 0, 4, 0); + label7.Name = "label7"; + label7.Size = new Size(66, 15); + label7.TabIndex = 4; + label7.Text = "Cost Per 1k"; + // + // MailInsurancePercentageTextBox + // + MailInsurancePercentageTextBox.Location = new Point(274, 65); + MailInsurancePercentageTextBox.Margin = new Padding(4, 3, 4, 3); + MailInsurancePercentageTextBox.Name = "MailInsurancePercentageTextBox"; + MailInsurancePercentageTextBox.Size = new Size(116, 23); + MailInsurancePercentageTextBox.TabIndex = 3; + MailInsurancePercentageTextBox.TextChanged += MailInsurancePercentageTextBox_TextChanged; + // + // MailCostPer1kTextBox + // + MailCostPer1kTextBox.Location = new Point(274, 35); + MailCostPer1kTextBox.Margin = new Padding(4, 3, 4, 3); + MailCostPer1kTextBox.Name = "MailCostPer1kTextBox"; + MailCostPer1kTextBox.Size = new Size(116, 23); + MailCostPer1kTextBox.TabIndex = 2; + MailCostPer1kTextBox.TextChanged += MailCostPer1kTextBox_TextChanged; + // + // MailFreeWithStampCheckbox + // + MailFreeWithStampCheckbox.AutoSize = true; + MailFreeWithStampCheckbox.Location = new Point(140, 8); + MailFreeWithStampCheckbox.Margin = new Padding(4, 3, 4, 3); + MailFreeWithStampCheckbox.Name = "MailFreeWithStampCheckbox"; + MailFreeWithStampCheckbox.Size = new Size(165, 19); + MailFreeWithStampCheckbox.TabIndex = 1; + MailFreeWithStampCheckbox.Text = "Send Mail Free with stamp"; + MailFreeWithStampCheckbox.UseVisualStyleBackColor = true; + MailFreeWithStampCheckbox.CheckedChanged += MailFreeWithStampCheckbox_CheckedChanged; + // + // groupBox2 + // + groupBox2.Controls.Add(MailAutoSendItemsCheckbox); + groupBox2.Controls.Add(MailAutoSendGoldCheckbox); + groupBox2.Location = new Point(8, 8); + groupBox2.Margin = new Padding(4, 3, 4, 3); + groupBox2.Name = "groupBox2"; + groupBox2.Padding = new Padding(4, 3, 4, 3); + groupBox2.Size = new Size(105, 80); + groupBox2.TabIndex = 0; + groupBox2.TabStop = false; + groupBox2.Text = "Auto Send"; + // + // MailAutoSendItemsCheckbox + // + MailAutoSendItemsCheckbox.AutoSize = true; + MailAutoSendItemsCheckbox.Location = new Point(8, 51); + MailAutoSendItemsCheckbox.Margin = new Padding(4, 3, 4, 3); + MailAutoSendItemsCheckbox.Name = "MailAutoSendItemsCheckbox"; + MailAutoSendItemsCheckbox.Size = new Size(55, 19); + MailAutoSendItemsCheckbox.TabIndex = 1; + MailAutoSendItemsCheckbox.Text = "Items"; + MailAutoSendItemsCheckbox.UseVisualStyleBackColor = true; + MailAutoSendItemsCheckbox.CheckedChanged += MailAutoSendItemsCheckbox_CheckedChanged; + // + // MailAutoSendGoldCheckbox + // + MailAutoSendGoldCheckbox.AutoSize = true; + MailAutoSendGoldCheckbox.Location = new Point(8, 23); + MailAutoSendGoldCheckbox.Margin = new Padding(4, 3, 4, 3); + MailAutoSendGoldCheckbox.Name = "MailAutoSendGoldCheckbox"; + MailAutoSendGoldCheckbox.Size = new Size(51, 19); + MailAutoSendGoldCheckbox.TabIndex = 0; + MailAutoSendGoldCheckbox.Text = "Gold"; + MailAutoSendGoldCheckbox.UseVisualStyleBackColor = true; + MailAutoSendGoldCheckbox.CheckedChanged += MailAutoSendGoldCheckbox_CheckedChanged; + // + // tabPage3 + // + tabPage3.Controls.Add(GoodsBuyBackMaxStoredTextBox); + tabPage3.Controls.Add(label11); + tabPage3.Controls.Add(GoodsBuyBackTimeTextBox); + tabPage3.Controls.Add(label10); + tabPage3.Controls.Add(GoodsMaxStoredTextBox); + tabPage3.Controls.Add(label9); + tabPage3.Controls.Add(GoodsOnCheckBox); + tabPage3.Location = new Point(4, 24); + tabPage3.Margin = new Padding(4, 3, 4, 3); + tabPage3.Name = "tabPage3"; + tabPage3.Size = new Size(467, 266); + tabPage3.TabIndex = 2; + tabPage3.Text = "Goods"; + tabPage3.UseVisualStyleBackColor = true; + // + // GoodsBuyBackMaxStoredTextBox + // + GoodsBuyBackMaxStoredTextBox.Location = new Point(172, 106); + GoodsBuyBackMaxStoredTextBox.Margin = new Padding(4, 3, 4, 3); + GoodsBuyBackMaxStoredTextBox.Name = "GoodsBuyBackMaxStoredTextBox"; + GoodsBuyBackMaxStoredTextBox.Size = new Size(116, 23); + GoodsBuyBackMaxStoredTextBox.TabIndex = 6; + GoodsBuyBackMaxStoredTextBox.TextChanged += GoodsBuyBackMaxStoredTextBox_TextChanged; + // + // label11 + // + label11.AutoSize = true; + label11.Location = new Point(12, 110); + label11.Margin = new Padding(4, 0, 4, 0); + label11.Name = "label11"; + label11.Size = new Size(118, 15); + label11.TabIndex = 5; + label11.Text = "Max Buy Back Stored"; + // + // GoodsBuyBackTimeTextBox + // + GoodsBuyBackTimeTextBox.Location = new Point(172, 76); + GoodsBuyBackTimeTextBox.Margin = new Padding(4, 3, 4, 3); + GoodsBuyBackTimeTextBox.Name = "GoodsBuyBackTimeTextBox"; + GoodsBuyBackTimeTextBox.Size = new Size(116, 23); + GoodsBuyBackTimeTextBox.TabIndex = 4; + GoodsBuyBackTimeTextBox.TextChanged += GoodsBuyBackTimeTextBox_TextChanged; + // + // label10 + // + label10.AutoSize = true; + label10.Location = new Point(12, 80); + label10.Margin = new Padding(4, 0, 4, 0); + label10.Name = "label10"; + label10.Size = new Size(121, 15); + label10.TabIndex = 3; + label10.Text = "Buy Back Time / Mins"; + // + // GoodsMaxStoredTextBox + // + GoodsMaxStoredTextBox.Location = new Point(172, 46); + GoodsMaxStoredTextBox.Margin = new Padding(4, 3, 4, 3); + GoodsMaxStoredTextBox.Name = "GoodsMaxStoredTextBox"; + GoodsMaxStoredTextBox.Size = new Size(116, 23); + GoodsMaxStoredTextBox.TabIndex = 2; + GoodsMaxStoredTextBox.TextChanged += GoodsMaxStoredTextBox_TextChanged; + // + // label9 + // + label9.AutoSize = true; + label9.Location = new Point(12, 50); + label9.Margin = new Padding(4, 0, 4, 0); + label9.Name = "label9"; + label9.Size = new Size(104, 15); + label9.TabIndex = 1; + label9.Text = "Max Goods Stored"; + // + // GoodsOnCheckBox + // + GoodsOnCheckBox.AutoSize = true; + GoodsOnCheckBox.Location = new Point(15, 15); + GoodsOnCheckBox.Margin = new Padding(4, 3, 4, 3); + GoodsOnCheckBox.Name = "GoodsOnCheckBox"; + GoodsOnCheckBox.Size = new Size(98, 19); + GoodsOnCheckBox.TabIndex = 0; + GoodsOnCheckBox.Text = "Goods Resold"; + GoodsOnCheckBox.UseVisualStyleBackColor = true; + GoodsOnCheckBox.CheckedChanged += GoodsOnCheckBox_CheckedChanged; + // + // tabPage4 + // + tabPage4.Controls.Add(OreName_textbox); + tabPage4.Controls.Add(label23); + tabPage4.Controls.Add(RefineCost_textbox); + tabPage4.Controls.Add(label22); + tabPage4.Controls.Add(ItemDimReturn_textbox); + tabPage4.Controls.Add(label21); + tabPage4.Controls.Add(WepDimReturn_textbox); + tabPage4.Controls.Add(label20); + tabPage4.Controls.Add(CritMultiplier_textbox); + tabPage4.Controls.Add(label19); + tabPage4.Controls.Add(CritChance_textbox); + tabPage4.Controls.Add(label18); + tabPage4.Controls.Add(NormalStat_textbox); + tabPage4.Controls.Add(label17); + tabPage4.Controls.Add(RefineTime_textbox); + tabPage4.Controls.Add(label16); + tabPage4.Controls.Add(BaseChance_textbox); + tabPage4.Controls.Add(label15); + tabPage4.Controls.Add(WeaponOnly_checkbox); + tabPage4.Location = new Point(4, 24); + tabPage4.Margin = new Padding(4, 3, 4, 3); + tabPage4.Name = "tabPage4"; + tabPage4.Size = new Size(467, 266); + tabPage4.TabIndex = 3; + tabPage4.Text = "Refining"; + tabPage4.UseVisualStyleBackColor = true; + // + // OreName_textbox + // + OreName_textbox.Location = new Point(258, 87); + OreName_textbox.Margin = new Padding(4, 3, 4, 3); + OreName_textbox.Name = "OreName_textbox"; + OreName_textbox.Size = new Size(151, 23); + OreName_textbox.TabIndex = 20; + OreName_textbox.TextChanged += OreName_textbox_TextChanged; + // + // label23 + // + label23.AutoSize = true; + label23.Location = new Point(254, 68); + label23.Margin = new Padding(4, 0, 4, 0); + label23.Name = "label23"; + label23.Size = new Size(61, 15); + label23.TabIndex = 19; + label23.Text = "Ore Name"; + // + // RefineCost_textbox + // + RefineCost_textbox.Location = new Point(334, 37); + RefineCost_textbox.Margin = new Padding(4, 3, 4, 3); + RefineCost_textbox.Name = "RefineCost_textbox"; + RefineCost_textbox.Size = new Size(75, 23); + RefineCost_textbox.TabIndex = 18; + RefineCost_textbox.TextChanged += RefineCost_textbox_TextChanged; + // + // label22 + // + label22.AutoSize = true; + label22.Location = new Point(254, 40); + label22.Margin = new Padding(4, 0, 4, 0); + label22.Name = "label22"; + label22.Size = new Size(67, 15); + label22.TabIndex = 17; + label22.Text = "Refine Cost"; + // + // ItemDimReturn_textbox + // + ItemDimReturn_textbox.Location = new Point(180, 212); + ItemDimReturn_textbox.Margin = new Padding(4, 3, 4, 3); + ItemDimReturn_textbox.Name = "ItemDimReturn_textbox"; + ItemDimReturn_textbox.Size = new Size(59, 23); + ItemDimReturn_textbox.TabIndex = 16; + ItemDimReturn_textbox.TextChanged += ItemDimReturn_textbox_TextChanged; + // + // label21 + // + label21.AutoSize = true; + label21.Location = new Point(27, 216); + label21.Margin = new Padding(4, 0, 4, 0); + label21.Name = "label21"; + label21.Size = new Size(141, 15); + label21.TabIndex = 15; + label21.Text = "Item Diminishing Returns"; + // + // WepDimReturn_textbox + // + WepDimReturn_textbox.Location = new Point(180, 182); + WepDimReturn_textbox.Margin = new Padding(4, 3, 4, 3); + WepDimReturn_textbox.Name = "WepDimReturn_textbox"; + WepDimReturn_textbox.Size = new Size(59, 23); + WepDimReturn_textbox.TabIndex = 14; + WepDimReturn_textbox.TextChanged += WepDimReturn_textbox_TextChanged; + // + // label20 + // + label20.AutoSize = true; + label20.Location = new Point(4, 186); + label20.Margin = new Padding(4, 0, 4, 0); + label20.Name = "label20"; + label20.Size = new Size(161, 15); + label20.TabIndex = 13; + label20.Text = "Weapon Diminishing Returns"; + // + // CritMultiplier_textbox + // + CritMultiplier_textbox.Location = new Point(180, 152); + CritMultiplier_textbox.Margin = new Padding(4, 3, 4, 3); + CritMultiplier_textbox.Name = "CritMultiplier_textbox"; + CritMultiplier_textbox.Size = new Size(59, 23); + CritMultiplier_textbox.TabIndex = 12; + CritMultiplier_textbox.TextChanged += CritMultiplier_textbox_TextChanged; + // + // label19 + // + label19.AutoSize = true; + label19.Location = new Point(44, 156); + label19.Margin = new Padding(4, 0, 4, 0); + label19.Name = "label19"; + label19.Size = new Size(126, 15); + label19.TabIndex = 11; + label19.Text = "Crit Increase Multiplier"; + // + // CritChance_textbox + // + CritChance_textbox.Location = new Point(180, 122); + CritChance_textbox.Margin = new Padding(4, 3, 4, 3); + CritChance_textbox.Name = "CritChance_textbox"; + CritChance_textbox.Size = new Size(59, 23); + CritChance_textbox.TabIndex = 10; + CritChance_textbox.TextChanged += CritChance_textbox_TextChanged; + // + // label18 + // + label18.AutoSize = true; + label18.Location = new Point(62, 126); + label18.Margin = new Padding(4, 0, 4, 0); + label18.Name = "label18"; + label18.Size = new Size(108, 15); + label18.TabIndex = 9; + label18.Text = "Critical Chance (%)"; + // + // NormalStat_textbox + // + NormalStat_textbox.Location = new Point(180, 93); + NormalStat_textbox.Margin = new Padding(4, 3, 4, 3); + NormalStat_textbox.Name = "NormalStat_textbox"; + NormalStat_textbox.Size = new Size(59, 23); + NormalStat_textbox.TabIndex = 8; + NormalStat_textbox.TextChanged += NormalStat_textbox_TextChanged; + // + // label17 + // + label17.AutoSize = true; + label17.Location = new Point(47, 97); + label17.Margin = new Padding(4, 0, 4, 0); + label17.Name = "label17"; + label17.Size = new Size(116, 15); + label17.TabIndex = 7; + label17.Text = "Normal Stat Increase"; + // + // RefineTime_textbox + // + RefineTime_textbox.Location = new Point(180, 65); + RefineTime_textbox.Margin = new Padding(4, 3, 4, 3); + RefineTime_textbox.Name = "RefineTime_textbox"; + RefineTime_textbox.Size = new Size(59, 23); + RefineTime_textbox.TabIndex = 6; + RefineTime_textbox.TextChanged += RefineTime_textbox_TextChanged; + // + // label16 + // + label16.AutoSize = true; + label16.Location = new Point(44, 68); + label16.Margin = new Padding(4, 0, 4, 0); + label16.Name = "label16"; + label16.Size = new Size(123, 15); + label16.TabIndex = 5; + label16.Text = "Refine Time (Minutes)"; + // + // BaseChance_textbox + // + BaseChance_textbox.Location = new Point(180, 37); + BaseChance_textbox.Margin = new Padding(4, 3, 4, 3); + BaseChance_textbox.Name = "BaseChance_textbox"; + BaseChance_textbox.Size = new Size(59, 23); + BaseChance_textbox.TabIndex = 4; + BaseChance_textbox.TextChanged += BaseChance_textbox_TextChanged; + // + // label15 + // + label15.AutoSize = true; + label15.Location = new Point(19, 40); + label15.Margin = new Padding(4, 0, 4, 0); + label15.Name = "label15"; + label15.Size = new Size(139, 15); + label15.TabIndex = 3; + label15.Text = "Base Success Chance (%)"; + // + // WeaponOnly_checkbox + // + WeaponOnly_checkbox.AutoSize = true; + WeaponOnly_checkbox.Location = new Point(40, 10); + WeaponOnly_checkbox.Margin = new Padding(4, 3, 4, 3); + WeaponOnly_checkbox.Name = "WeaponOnly_checkbox"; + WeaponOnly_checkbox.RightToLeft = RightToLeft.Yes; + WeaponOnly_checkbox.Size = new Size(145, 19); + WeaponOnly_checkbox.TabIndex = 2; + WeaponOnly_checkbox.Text = "Only Weapon Refining"; + WeaponOnly_checkbox.UseVisualStyleBackColor = true; + WeaponOnly_checkbox.CheckedChanged += WeaponOnly_checkbox_CheckedChanged; + // + // tabPage5 + // + tabPage5.Controls.Add(label24); + tabPage5.Controls.Add(ReplaceRingCost_textbox); + tabPage5.Controls.Add(label14); + tabPage5.Controls.Add(RequiredLevel_textbox); + tabPage5.Controls.Add(LoverBonusEXP_textbox); + tabPage5.Controls.Add(label12); + tabPage5.Controls.Add(label13); + tabPage5.Controls.Add(MarriageCooldown_textbox); + tabPage5.Controls.Add(LoverRecall_checkbox); + tabPage5.Location = new Point(4, 24); + tabPage5.Margin = new Padding(4, 3, 4, 3); + tabPage5.Name = "tabPage5"; + tabPage5.Size = new Size(467, 266); + tabPage5.TabIndex = 4; + tabPage5.Text = "Relationship"; + tabPage5.UseVisualStyleBackColor = true; + // + // label24 + // + label24.AutoSize = true; + label24.Location = new Point(76, 165); + label24.Margin = new Padding(4, 0, 4, 0); + label24.Name = "label24"; + label24.Size = new Size(102, 15); + label24.TabIndex = 14; + label24.Text = "Replace Ring Cost"; + // + // ReplaceRingCost_textbox + // + ReplaceRingCost_textbox.Location = new Point(195, 162); + ReplaceRingCost_textbox.Margin = new Padding(4, 3, 4, 3); + ReplaceRingCost_textbox.Name = "ReplaceRingCost_textbox"; + ReplaceRingCost_textbox.Size = new Size(74, 23); + ReplaceRingCost_textbox.TabIndex = 13; + ReplaceRingCost_textbox.TextChanged += ReplaceRingCost_textbox_TextChanged; + // + // label14 + // + label14.AutoSize = true; + label14.Location = new Point(43, 135); + label14.Margin = new Padding(4, 0, 4, 0); + label14.Name = "label14"; + label14.Size = new Size(134, 15); + label14.TabIndex = 12; + label14.Text = "Marriage Required Level"; + // + // RequiredLevel_textbox + // + RequiredLevel_textbox.Location = new Point(195, 132); + RequiredLevel_textbox.Margin = new Padding(4, 3, 4, 3); + RequiredLevel_textbox.Name = "RequiredLevel_textbox"; + RequiredLevel_textbox.Size = new Size(74, 23); + RequiredLevel_textbox.TabIndex = 11; + RequiredLevel_textbox.TextChanged += RequiredLevel_textbox_TextChanged; + // + // LoverBonusEXP_textbox + // + LoverBonusEXP_textbox.Location = new Point(195, 63); + LoverBonusEXP_textbox.Margin = new Padding(4, 3, 4, 3); + LoverBonusEXP_textbox.Name = "LoverBonusEXP_textbox"; + LoverBonusEXP_textbox.Size = new Size(74, 23); + LoverBonusEXP_textbox.TabIndex = 10; + LoverBonusEXP_textbox.TextChanged += LoverBonusEXP_textbox_TextChanged; + // + // label12 + // + label12.AutoSize = true; + label12.Location = new Point(35, 102); + label12.Margin = new Padding(4, 0, 4, 0); + label12.Name = "label12"; + label12.Size = new Size(148, 15); + label12.TabIndex = 9; + label12.Text = "Marriage Cooldown (Days)"; + // + // label13 + // + label13.AutoSize = true; + label13.Location = new Point(16, 63); + label13.Margin = new Padding(4, 0, 4, 0); + label13.Name = "label13"; + label13.Size = new Size(162, 15); + label13.TabIndex = 8; + label13.Text = "Bonus % Experience in Group"; + // + // MarriageCooldown_textbox + // + MarriageCooldown_textbox.Location = new Point(195, 98); + MarriageCooldown_textbox.Margin = new Padding(4, 3, 4, 3); + MarriageCooldown_textbox.Name = "MarriageCooldown_textbox"; + MarriageCooldown_textbox.Size = new Size(74, 23); + MarriageCooldown_textbox.TabIndex = 7; + MarriageCooldown_textbox.TextChanged += MarriageCooldown_textbox_TextChanged; + // + // LoverRecall_checkbox + // + LoverRecall_checkbox.AutoSize = true; + LoverRecall_checkbox.Location = new Point(37, 27); + LoverRecall_checkbox.Margin = new Padding(4, 3, 4, 3); + LoverRecall_checkbox.Name = "LoverRecall_checkbox"; + LoverRecall_checkbox.RightToLeft = RightToLeft.Yes; + LoverRecall_checkbox.Size = new Size(161, 19); + LoverRecall_checkbox.TabIndex = 1; + LoverRecall_checkbox.Text = "Recall with Wedding Ring"; + LoverRecall_checkbox.UseVisualStyleBackColor = true; + LoverRecall_checkbox.CheckedChanged += LoverRecall_checkbox_CheckedChanged; + // + // tabPage7 + // + tabPage7.Controls.Add(GemStatCheckBox); + tabPage7.Location = new Point(4, 24); + tabPage7.Margin = new Padding(4, 3, 4, 3); + tabPage7.Name = "tabPage7"; + tabPage7.Padding = new Padding(4, 3, 4, 3); + tabPage7.Size = new Size(467, 266); + tabPage7.TabIndex = 6; + tabPage7.Text = "Gem"; + tabPage7.UseVisualStyleBackColor = true; + // + // GemStatCheckBox + // + GemStatCheckBox.AutoSize = true; + GemStatCheckBox.Location = new Point(35, 17); + GemStatCheckBox.Margin = new Padding(4, 3, 4, 3); + GemStatCheckBox.Name = "GemStatCheckBox"; + GemStatCheckBox.RightToLeft = RightToLeft.Yes; + GemStatCheckBox.Size = new Size(144, 19); + GemStatCheckBox.TabIndex = 16; + GemStatCheckBox.Text = "Gem Stat Independent"; + GemStatCheckBox.UseVisualStyleBackColor = true; + GemStatCheckBox.CheckedChanged += GemStatCheckBox_CheckedChanged; + // + // tabPage8 + // + tabPage8.Controls.Add(panel1); + tabPage8.Controls.Add(pnlSpawnTickConfig); + tabPage8.Controls.Add(lbSpawnTickList); + tabPage8.Controls.Add(btnSpawnTickRemove); + tabPage8.Controls.Add(btnSpawnTickAdd); + tabPage8.Location = new Point(4, 24); + tabPage8.Margin = new Padding(4, 3, 4, 3); + tabPage8.Name = "tabPage8"; + tabPage8.Padding = new Padding(4, 3, 4, 3); + tabPage8.Size = new Size(467, 266); + tabPage8.TabIndex = 7; + tabPage8.Text = "SpawnTick"; + tabPage8.UseVisualStyleBackColor = true; + // + // panel1 + // + panel1.Controls.Add(lbltickmins); + panel1.Controls.Add(txtSpawnTickDefault); + panel1.Controls.Add(label32); + panel1.Location = new Point(177, 7); + panel1.Margin = new Padding(4, 3, 4, 3); + panel1.Name = "panel1"; + panel1.Size = new Size(281, 115); + panel1.TabIndex = 4; + // + // lbltickmins + // + lbltickmins.AutoSize = true; + lbltickmins.Location = new Point(204, 7); + lbltickmins.Margin = new Padding(4, 0, 4, 0); + lbltickmins.Name = "lbltickmins"; + lbltickmins.Size = new Size(63, 15); + lbltickmins.TabIndex = 2; + lbltickmins.Text = "in minutes"; + // + // txtSpawnTickDefault + // + txtSpawnTickDefault.Location = new Point(135, 2); + txtSpawnTickDefault.Margin = new Padding(4, 3, 4, 3); + txtSpawnTickDefault.Name = "txtSpawnTickDefault"; + txtSpawnTickDefault.Size = new Size(63, 23); + txtSpawnTickDefault.TabIndex = 1; + toolTip1.SetToolTip(txtSpawnTickDefault, "how long is 1 tick with no users onilne?\r\n(default suggested value = 20)\r\ntime in minutes!"); + txtSpawnTickDefault.TextChanged += txtSpawnTickDefault_TextChanged; + // + // label32 + // + label32.AutoSize = true; + label32.Location = new Point(4, 7); + label32.Margin = new Padding(4, 0, 4, 0); + label32.Name = "label32"; + label32.Size = new Size(101, 15); + label32.TabIndex = 0; + label32.Text = "Default tickspeed:"; + // + // pnlSpawnTickConfig + // + pnlSpawnTickConfig.Controls.Add(txtSpawnTickSpeed); + pnlSpawnTickConfig.Controls.Add(txtSpawnTickUsers); + pnlSpawnTickConfig.Controls.Add(label31); + pnlSpawnTickConfig.Controls.Add(label30); + pnlSpawnTickConfig.Location = new Point(177, 185); + pnlSpawnTickConfig.Margin = new Padding(4, 3, 4, 3); + pnlSpawnTickConfig.Name = "pnlSpawnTickConfig"; + pnlSpawnTickConfig.Size = new Size(281, 70); + pnlSpawnTickConfig.TabIndex = 3; + // + // txtSpawnTickSpeed + // + txtSpawnTickSpeed.Location = new Point(135, 39); + txtSpawnTickSpeed.Margin = new Padding(4, 3, 4, 3); + txtSpawnTickSpeed.Name = "txtSpawnTickSpeed"; + txtSpawnTickSpeed.Size = new Size(116, 23); + txtSpawnTickSpeed.TabIndex = 3; + toolTip1.SetToolTip(txtSpawnTickSpeed, "1.0 = normal speed\r\nlower value = ticks go faster (= faster respawn)\r\nfor example:\r\n0.9 with a 20 minute default tick = now it's 18minutes/tick"); + txtSpawnTickSpeed.TextChanged += txtSpawnTickSpeed_TextChanged; + // + // txtSpawnTickUsers + // + txtSpawnTickUsers.Location = new Point(135, 9); + txtSpawnTickUsers.Margin = new Padding(4, 3, 4, 3); + txtSpawnTickUsers.Name = "txtSpawnTickUsers"; + txtSpawnTickUsers.Size = new Size(116, 23); + txtSpawnTickUsers.TabIndex = 2; + toolTip1.SetToolTip(txtSpawnTickUsers, "At least how many users should bere be online to be using this rate?"); + txtSpawnTickUsers.TextChanged += txtSpawnTickUsers_TextChanged; + // + // label31 + // + label31.AutoSize = true; + label31.Location = new Point(4, 43); + label31.Margin = new Padding(4, 0, 4, 0); + label31.Name = "label31"; + label31.Size = new Size(98, 15); + label31.TabIndex = 1; + label31.Text = "Spawntick speed:"; + // + // label30 + // + label30.AutoSize = true; + label30.Location = new Point(4, 13); + label30.Margin = new Padding(4, 0, 4, 0); + label30.Name = "label30"; + label30.Size = new Size(74, 15); + label30.TabIndex = 0; + label30.Text = "Users online:"; + // + // lbSpawnTickList + // + lbSpawnTickList.FormattingEnabled = true; + lbSpawnTickList.ItemHeight = 15; + lbSpawnTickList.Location = new Point(7, 40); + lbSpawnTickList.Margin = new Padding(4, 3, 4, 3); + lbSpawnTickList.Name = "lbSpawnTickList"; + lbSpawnTickList.Size = new Size(163, 214); + lbSpawnTickList.TabIndex = 2; + lbSpawnTickList.SelectedIndexChanged += lbSpawnTickList_SelectedIndexChanged; + // + // btnSpawnTickRemove + // + btnSpawnTickRemove.Location = new Point(92, 7); + btnSpawnTickRemove.Margin = new Padding(4, 3, 4, 3); + btnSpawnTickRemove.Name = "btnSpawnTickRemove"; + btnSpawnTickRemove.Size = new Size(78, 27); + btnSpawnTickRemove.TabIndex = 1; + btnSpawnTickRemove.Text = "Remove"; + btnSpawnTickRemove.UseVisualStyleBackColor = true; + btnSpawnTickRemove.Click += btnSpawnTickRemove_Click; + // + // btnSpawnTickAdd + // + btnSpawnTickAdd.Location = new Point(7, 7); + btnSpawnTickAdd.Margin = new Padding(4, 3, 4, 3); + btnSpawnTickAdd.Name = "btnSpawnTickAdd"; + btnSpawnTickAdd.Size = new Size(78, 27); + btnSpawnTickAdd.TabIndex = 0; + btnSpawnTickAdd.Text = "Add"; + btnSpawnTickAdd.UseVisualStyleBackColor = true; + btnSpawnTickAdd.Click += btnSpawnTickAdd_Click; + // + // SystemInfoForm + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(503, 328); + Controls.Add(tabControl1); + FormBorderStyle = FormBorderStyle.FixedSingle; + Icon = (Icon)resources.GetObject("$this.Icon"); + Margin = new Padding(4, 3, 4, 3); + MaximizeBox = false; + MinimizeBox = false; + Name = "SystemInfoForm"; + Text = "SystemInfoForm"; + FormClosed += SystemInfoForm_FormClosed; + Load += SystemInfoForm_Load; + tabControl1.ResumeLayout(false); + tabPage2.ResumeLayout(false); + tabPage2.PerformLayout(); + groupBox2.ResumeLayout(false); + groupBox2.PerformLayout(); + tabPage3.ResumeLayout(false); + tabPage3.PerformLayout(); + tabPage4.ResumeLayout(false); + tabPage4.PerformLayout(); + tabPage5.ResumeLayout(false); + tabPage5.PerformLayout(); + tabPage7.ResumeLayout(false); + tabPage7.PerformLayout(); + tabPage8.ResumeLayout(false); + panel1.ResumeLayout(false); + panel1.PerformLayout(); + pnlSpawnTickConfig.ResumeLayout(false); + pnlSpawnTickConfig.PerformLayout(); + ResumeLayout(false); + } + + #endregion + private System.Windows.Forms.TabControl tabControl1; + private System.Windows.Forms.TabPage tabPage2; + private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.CheckBox MailAutoSendItemsCheckbox; + private System.Windows.Forms.CheckBox MailAutoSendGoldCheckbox; + private System.Windows.Forms.CheckBox MailFreeWithStampCheckbox; + private System.Windows.Forms.TextBox MailCostPer1kTextBox; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.TextBox MailInsurancePercentageTextBox; + private System.Windows.Forms.TabPage tabPage3; + private System.Windows.Forms.CheckBox GoodsOnCheckBox; + private System.Windows.Forms.TextBox GoodsMaxStoredTextBox; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.TextBox GoodsBuyBackTimeTextBox; + private System.Windows.Forms.TextBox GoodsBuyBackMaxStoredTextBox; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.TabPage tabPage4; + private System.Windows.Forms.TabPage tabPage5; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.TextBox MarriageCooldown_textbox; + private System.Windows.Forms.CheckBox LoverRecall_checkbox; + private System.Windows.Forms.TextBox LoverBonusEXP_textbox; + private System.Windows.Forms.Label label14; + private System.Windows.Forms.TextBox RequiredLevel_textbox; + private System.Windows.Forms.CheckBox WeaponOnly_checkbox; + private System.Windows.Forms.TextBox BaseChance_textbox; + private System.Windows.Forms.Label label15; + private System.Windows.Forms.TextBox RefineTime_textbox; + private System.Windows.Forms.Label label16; + private System.Windows.Forms.TextBox NormalStat_textbox; + private System.Windows.Forms.Label label17; + private System.Windows.Forms.TextBox WepDimReturn_textbox; + private System.Windows.Forms.Label label20; + private System.Windows.Forms.TextBox CritMultiplier_textbox; + private System.Windows.Forms.Label label19; + private System.Windows.Forms.TextBox CritChance_textbox; + private System.Windows.Forms.Label label18; + private System.Windows.Forms.TextBox ItemDimReturn_textbox; + private System.Windows.Forms.Label label21; + private System.Windows.Forms.TextBox RefineCost_textbox; + private System.Windows.Forms.Label label22; + private System.Windows.Forms.TextBox OreName_textbox; + private System.Windows.Forms.Label label23; + private System.Windows.Forms.Label label24; + private System.Windows.Forms.TextBox ReplaceRingCost_textbox; + private System.Windows.Forms.TabPage tabPage7; + private System.Windows.Forms.CheckBox GemStatCheckBox; + private System.Windows.Forms.TabPage tabPage8; + private System.Windows.Forms.Button btnSpawnTickRemove; + private System.Windows.Forms.Button btnSpawnTickAdd; + private System.Windows.Forms.ListBox lbSpawnTickList; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.TextBox txtSpawnTickDefault; + private System.Windows.Forms.ToolTip toolTip1; + private System.Windows.Forms.Label label32; + private System.Windows.Forms.Panel pnlSpawnTickConfig; + private System.Windows.Forms.TextBox txtSpawnTickSpeed; + private System.Windows.Forms.TextBox txtSpawnTickUsers; + private System.Windows.Forms.Label label31; + private System.Windows.Forms.Label label30; + private System.Windows.Forms.Label lbltickmins; + } +} \ No newline at end of file diff --git a/Server.MirForms/Systems/SystemInfoForm.cs b/Server.MirForms/Systems/SystemInfoForm.cs new file mode 100644 index 0000000..5e3d9f0 --- /dev/null +++ b/Server.MirForms/Systems/SystemInfoForm.cs @@ -0,0 +1,612 @@ +using Server.MirEnvir; + + +namespace Server +{ + public partial class SystemInfoForm : Form + { + public Envir Envir => SMain.EditEnvir; + + public bool MailChanged = false, GoodsChanged = false, RefineChanged = false, MarriageChanged = false, GemChanged = false, SpawnChanged = false; + + public SystemInfoForm() + { + InitializeComponent(); + } + + public SystemInfoForm(int selectedTab = 0) + { + InitializeComponent(); + + if (selectedTab > this.tabControl1.TabCount - 1) selectedTab = 0; + + this.tabControl1.SelectedIndex = selectedTab; + + UpdateMail(); + UpdateGoods(); + UpdateRefine(); + UpdateMarriage(); + UpdateGem(); + UpdateSpawnTick(); + } + + #region Update + + private void UpdateMail() + { + MailAutoSendGoldCheckbox.Checked = Settings.MailAutoSendGold; + MailAutoSendItemsCheckbox.Checked = Settings.MailAutoSendItems; + MailFreeWithStampCheckbox.Checked = Settings.MailFreeWithStamp; + MailCostPer1kTextBox.Text = Settings.MailCostPer1KGold.ToString(); + MailInsurancePercentageTextBox.Text = Settings.MailItemInsurancePercentage.ToString(); + } + + private void UpdateGoods() + { + GoodsOnCheckBox.Checked = Settings.GoodsOn; + GoodsMaxStoredTextBox.Text = Settings.GoodsMaxStored.ToString(); + GoodsBuyBackTimeTextBox.Text = Settings.GoodsBuyBackTime.ToString(); + GoodsBuyBackMaxStoredTextBox.Text = Settings.GoodsBuyBackMaxStored.ToString(); + } + + private void UpdateMarriage() + { + LoverRecall_checkbox.Checked = Settings.WeddingRingRecall; + LoverBonusEXP_textbox.Text = Settings.LoverEXPBonus.ToString(); + MarriageCooldown_textbox.Text = Settings.MarriageCooldown.ToString(); + RequiredLevel_textbox.Text = Settings.MarriageLevelRequired.ToString(); + ReplaceRingCost_textbox.Text = Settings.ReplaceWedRingCost.ToString(); + + } + + private void UpdateRefine() + { + WeaponOnly_checkbox.Checked = Settings.OnlyRefineWeapon; + BaseChance_textbox.Text = Settings.RefineBaseChance.ToString(); + RefineTime_textbox.Text = Settings.RefineTime.ToString(); + NormalStat_textbox.Text = Settings.RefineIncrease.ToString(); + CritChance_textbox.Text = Settings.RefineCritChance.ToString(); + CritMultiplier_textbox.Text = Settings.RefineCritIncrease.ToString(); + WepDimReturn_textbox.Text = Settings.RefineWepStatReduce.ToString(); + ItemDimReturn_textbox.Text = Settings.RefineItemStatReduce.ToString(); + RefineCost_textbox.Text = Settings.RefineCost.ToString(); + OreName_textbox.Text = Settings.RefineOreName.ToString(); + } + private void UpdateGem() + { + GemStatCheckBox.Checked = Settings.GemStatIndependent; + } + + private void UpdateSpawnTick() + { + txtSpawnTickDefault.Text = Envir.RespawnTick.BaseSpawnRate.ToString(); + if (lbSpawnTickList.Items.Count != Envir.RespawnTick.Respawn.Count) + { + lbSpawnTickList.ClearSelected(); + lbSpawnTickList.Items.Clear(); + foreach (RespawnTickOption Option in Envir.RespawnTick.Respawn) + lbSpawnTickList.Items.Add(Option); + pnlSpawnTickConfig.Enabled = false; + txtSpawnTickSpeed.Text = string.Empty; + txtSpawnTickUsers.Text = string.Empty; + } + else + { + if (lbSpawnTickList.SelectedIndex == -1) + { + pnlSpawnTickConfig.Enabled = false; + txtSpawnTickSpeed.Text = string.Empty; + txtSpawnTickUsers.Text = string.Empty; + } + else + { + pnlSpawnTickConfig.Enabled = true; + RespawnTickOption Option = (RespawnTickOption)lbSpawnTickList.SelectedItem; + txtSpawnTickSpeed.Text = $"{Option.DelayLoss:0.0}"; + txtSpawnTickUsers.Text = Option.UserCount.ToString(); + } + } + } + #endregion + + private void SystemInfoForm_FormClosed(object sender, FormClosedEventArgs e) + { + if (MailChanged) + Settings.SaveMail(); + + if (GoodsChanged) + Settings.SaveGoods(); + + if (RefineChanged) + Settings.SaveRefine(); + + if (MarriageChanged) + Settings.SaveMarriage(); + + if (GemChanged) + Settings.SaveGem(); + if (SpawnChanged) + Envir.SaveDB(); + } + + #region Fishing + + private void FishingAttemptsTextBox_TextChanged(object sender, EventArgs e) + { + } + + private void FishingSuccessRateStartTextBox_TextChanged(object sender, EventArgs e) + { + } + + private void FishingDelayTextBox_TextChanged(object sender, EventArgs e) + { + } + + private void MonsterSpawnChanceTextBox_TextChanged(object sender, EventArgs e) + { + } + + private void FishingSuccessRateMultiplierTextBox_TextChanged(object sender, EventArgs e) + { + } + + private void FishingMobIndexComboBox_SelectedIndexChanged(object sender, EventArgs e) + { + } + + #endregion + + #region Mail + + private void MailAutoSendGoldCheckbox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + Settings.MailAutoSendGold = MailAutoSendGoldCheckbox.Checked; + MailChanged = true; + } + + private void MailAutoSendItemsCheckbox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + Settings.MailAutoSendItems = MailAutoSendItemsCheckbox.Checked; + MailChanged = true; + } + + private void MailFreeWithStampCheckbox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + Settings.MailFreeWithStamp = MailFreeWithStampCheckbox.Checked; + MailChanged = true; + } + + private void MailCostPer1kTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + uint temp; + + if (!uint.TryParse(ActiveControl.Text, out temp) || temp > 1000) + { + ActiveControl.BackColor = Color.Red; + return; + } + + ActiveControl.BackColor = SystemColors.Window; + Settings.MailCostPer1KGold = temp; + MailChanged = true; + } + + private void MailInsurancePercentageTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + uint temp; + + if (!uint.TryParse(ActiveControl.Text, out temp) || temp > 100 || temp < 0) + { + ActiveControl.BackColor = Color.Red; + return; + } + + ActiveControl.BackColor = SystemColors.Window; + Settings.MailItemInsurancePercentage = temp; + MailChanged = true; + } + + private void LoverRecall_checkbox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + Settings.WeddingRingRecall = LoverRecall_checkbox.Checked; + MarriageChanged = true; + } + + private void LoverBonusEXP_textbox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + int temp; + + if (!int.TryParse(ActiveControl.Text, out temp) || temp > 500 || temp < 0) + { + ActiveControl.BackColor = Color.Red; + return; + } + + ActiveControl.BackColor = SystemColors.Window; + Settings.LoverEXPBonus = temp; + MarriageChanged = true; + } + + private void MarriageCooldown_textbox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + int temp; + + if (!int.TryParse(ActiveControl.Text, out temp) || temp > 365 || temp < 0) + { + ActiveControl.BackColor = Color.Red; + return; + } + + ActiveControl.BackColor = SystemColors.Window; + Settings.MarriageCooldown = temp; + MarriageChanged = true; + } + + private void RequiredLevel_textbox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + int temp; + + if (!int.TryParse(ActiveControl.Text, out temp) || temp > 255 || temp < 0) + { + ActiveControl.BackColor = Color.Red; + return; + } + + ActiveControl.BackColor = SystemColors.Window; + Settings.MarriageLevelRequired = temp; + MarriageChanged = true; + } + + private void SystemInfoForm_Load(object sender, EventArgs e) + { + + } + + private void WeaponOnly_checkbox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + Settings.OnlyRefineWeapon = WeaponOnly_checkbox.Checked; + RefineChanged = true; + } + + private void BaseChance_textbox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp) || temp > 100 || temp < 0) + { + ActiveControl.BackColor = Color.Red; + return; + } + + ActiveControl.BackColor = SystemColors.Window; + Settings.RefineBaseChance = temp; + RefineChanged = true; + } + + private void RefineTime_textbox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + int temp; + + if (!int.TryParse(ActiveControl.Text, out temp) || temp > 1000 || temp < 0) + { + ActiveControl.BackColor = Color.Red; + return; + } + + ActiveControl.BackColor = SystemColors.Window; + Settings.RefineTime = temp; + RefineChanged = true; + } + + private void NormalStat_textbox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp) || temp > 255 || temp < 0) + { + ActiveControl.BackColor = Color.Red; + return; + } + + ActiveControl.BackColor = SystemColors.Window; + Settings.RefineIncrease = temp; + RefineChanged = true; + } + + private void CritChance_textbox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp) || temp > 100 || temp < 0) + { + ActiveControl.BackColor = Color.Red; + return; + } + + ActiveControl.BackColor = SystemColors.Window; + Settings.RefineCritChance = temp; + RefineChanged = true; + } + + private void CritMultiplier_textbox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp) || temp > 255 || temp < 0) + { + ActiveControl.BackColor = Color.Red; + return; + } + + ActiveControl.BackColor = SystemColors.Window; + Settings.RefineCritIncrease = temp; + RefineChanged = true; + } + + private void WepDimReturn_textbox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp) || temp > 100 || temp < 0) + { + ActiveControl.BackColor = Color.Red; + return; + } + + ActiveControl.BackColor = SystemColors.Window; + Settings.RefineWepStatReduce = temp; + RefineChanged = true; + } + + private void ItemDimReturn_textbox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp) || temp > 100 || temp < 0) + { + ActiveControl.BackColor = Color.Red; + return; + } + + ActiveControl.BackColor = SystemColors.Window; + Settings.RefineItemStatReduce = temp; + RefineChanged = true; + } + + private void RefineCost_textbox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + int temp; + + if (!int.TryParse(ActiveControl.Text, out temp) || temp > 2000 || temp < 0) + { + ActiveControl.BackColor = Color.Red; + return; + } + + ActiveControl.BackColor = SystemColors.Window; + Settings.RefineCost = temp; + RefineChanged = true; + } + + private void OreName_textbox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + Settings.RefineOreName = ActiveControl.Text; + RefineChanged = true; + } + + private void ReplaceRingCost_textbox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + int temp; + + if (!int.TryParse(ActiveControl.Text, out temp) || temp > 2000 || temp < 0) + { + ActiveControl.BackColor = Color.Red; + return; + } + + ActiveControl.BackColor = SystemColors.Window; + Settings.ReplaceWedRingCost = temp; + MarriageChanged = true; + } + + private void MentorLevelGap_textbox_TextChanged(object sender, EventArgs e) + { + } + + private void MentorLength_textbox_TextChanged(object sender, EventArgs e) + { + } + + private void MentorDamageBoost_textbox_TextChanged(object sender, EventArgs e) + { + } + + private void MenteeExpBoost_textbox_TextChanged(object sender, EventArgs e) + { + } + + private void MenteeExpBank_textbox_TextChanged(object sender, EventArgs e) + { + } + + private void MenteeSkillBoost_checkbox_CheckedChanged(object sender, EventArgs e) + { + } + + #endregion + + #region Goods + + private void GoodsOnCheckBox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + Settings.GoodsOn = GoodsOnCheckBox.Checked; + GoodsChanged = true; + } + + private void GoodsMaxStoredTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + uint temp; + + if (!uint.TryParse(ActiveControl.Text, out temp) || temp > 500 || temp < 0) + { + ActiveControl.BackColor = Color.Red; + return; + } + + ActiveControl.BackColor = SystemColors.Window; + Settings.GoodsMaxStored = temp; + GoodsChanged = true; + } + + private void GoodsBuyBackTimeTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + uint temp; + + if (!uint.TryParse(ActiveControl.Text, out temp) || temp > 1440 || temp < 0) + { + ActiveControl.BackColor = Color.Red; + return; + } + + ActiveControl.BackColor = SystemColors.Window; + Settings.GoodsBuyBackTime = temp; + GoodsChanged = true; + } + + private void GoodsBuyBackMaxStoredTextBox_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + uint temp; + + if (!uint.TryParse(ActiveControl.Text, out temp) || temp > 500 || temp < 0) + { + ActiveControl.BackColor = Color.Red; + return; + } + + ActiveControl.BackColor = SystemColors.Window; + Settings.GoodsBuyBackMaxStored = temp; + GoodsChanged = true; + } + + #endregion + #region Gem + private void GemStatCheckBox_CheckedChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + + Settings.GemStatIndependent = GemStatCheckBox.Checked; + GemChanged = true; + } + #endregion + + private void txtSpawnTickDefault_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + byte temp; + + if (!byte.TryParse(ActiveControl.Text, out temp) || temp > 255 || temp < 0) + { + ActiveControl.BackColor = Color.Red; + return; + } + + ActiveControl.BackColor = SystemColors.Window; + Envir.RespawnTick.BaseSpawnRate = temp; + SpawnChanged = true; + } + + private void btnSpawnTickAdd_Click(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + RespawnTickOption Option = new RespawnTickOption(); + Envir.RespawnTick.Respawn.Add(Option); + lbSpawnTickList.Items.Add(Option); + lbSpawnTickList.SelectedIndex = Envir.RespawnTick.Respawn.Count - 1; + UpdateSpawnTick(); + SpawnChanged = true; + } + + private void btnSpawnTickRemove_Click(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (lbSpawnTickList.SelectedIndex == -1) return; + if (MessageBox.Show("Are you sure you want to delete the index?", "Delete?", MessageBoxButtons.YesNo) != DialogResult.Yes) return; + Envir.RespawnTick.Respawn.RemoveAt(lbSpawnTickList.SelectedIndex); + //lbSpawnTickList.Items.RemoveAt(lbSpawnTickList.SelectedIndex); + + UpdateSpawnTick(); + SpawnChanged = true; + } + + private void lbSpawnTickList_SelectedIndexChanged(object sender, EventArgs e) + { + UpdateSpawnTick(); + } + + private void txtSpawnTickUsers_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (lbSpawnTickList.SelectedIndex == -1) return; + int temp; + + if (!int.TryParse(ActiveControl.Text, out temp) || (temp < 0)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + Envir.RespawnTick.Respawn[lbSpawnTickList.SelectedIndex].UserCount = temp; + lbSpawnTickList.Items[lbSpawnTickList.SelectedIndex] = lbSpawnTickList.SelectedItem;//need this to update the string displayed + //lbSpawnTickList.Refresh(); + txtSpawnTickUsers.Focus(); + txtSpawnTickUsers.SelectionStart = txtSpawnTickUsers.Text.Length; + SpawnChanged = true; + } + + private void txtSpawnTickSpeed_TextChanged(object sender, EventArgs e) + { + if (ActiveControl != sender) return; + if (lbSpawnTickList.SelectedIndex == -1) return; + double temp; + + if (!double.TryParse(ActiveControl.Text, out temp) || (temp <= 0) || (temp > 1.0)) + { + ActiveControl.BackColor = Color.Red; + return; + } + ActiveControl.BackColor = SystemColors.Window; + Envir.RespawnTick.Respawn[lbSpawnTickList.SelectedIndex].DelayLoss = temp; + SpawnChanged = true; + } + } +} \ No newline at end of file diff --git a/Server.MirForms/Systems/SystemInfoForm.resx b/Server.MirForms/Systems/SystemInfoForm.resx new file mode 100644 index 0000000..d2fb654 --- /dev/null +++ b/Server.MirForms/Systems/SystemInfoForm.resx @@ -0,0 +1,1766 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + AAABAAgAICAQAAAABADoAgAAhgAAACAgAAAAABgAqAwAAG4DAAAgIAAAAAAIAKgIAAAWEAAAQEAAAAAA + GAAoMgAAvhgAAEBAEAAAAAQAaAoAAOZKAABAQAAAAAAIACgWAABOVQAAgIAAAAAAGAAoyAAAdmsAAICA + AAAAAAgAKEwAAJ4zAQAoAAAAIAAAAEAAAAABAAQAAAAAAAACAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAA + gAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////ABER + ERAAAAAAAAAAAAAAAAARERERAAAAAAAAAAAAAAAAERERERAAAAAAAAAAAAAAABERERERAAAAAQAAAAAA + AAARERAAAQAAAAEAAAAAAAAAEREREQAAAAABAAAAAAAAABERERERAAAAABAAAAAAAAAREREREQAAAAAQ + AAAQAAAAEREREREAAAAAAAABEAAAAAERERERAAAAAAAxERAAAAAQERERERAAAAABEQAAAAAAAAAREREQ + AAAAAQARERARAAAAEREREAAAAAEBEAERERAAAAAAAAAAAAAQEQARMzERAAAAEREAAAABEBADMzMzEQAA + AAEQAAAAAAEAADMxMxEAAAAAAAAAAAEQEQAzMxEQAAABAAEAAAEREAAAMBMQEAAAAAARAAABEREQADEQ + EQAAAAABEBEBEREQATAREREAAAAQAQAQARERAQABEQERAAAAAAAAEBETEQMRERAREQAAAAAAARARExEQ + AREAAREQAAAAAAEBERMxMQEBAAABEQABAAAAAQERERMREQAAAAEAABAAABABERExERAAAAAAAAAAAAAA + EREREREAAAAAAAAAABAQEQAAAREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABAAAAAAAAAAAA + AAAAEAARAAAAAAAAAAAAAAAAAAABEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABABgAAAAAAAAM + AAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA + AACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAAAA + AAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA + AACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACA + AACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAACAAACAAACAAACAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAA + AACAAACAAACAAACAAACAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAAAAAAAAAACAAACAAACAAACAAACA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACAAAAAAACAAACAAAAAAAAAAACAAACAAICAAICAAICAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAA + AACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAACAAAAAAAAAAICAAICAAICA + AICAAICAAICAAICAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAICAAICAAICAAACAAICAAICAAACAAACAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAACAAACA + AAAAAAAAAICAAICAAICAAICAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAACA + AAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAICAAAAAAACAAICAAACAAAAA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAACAAACAAACA + AACAAACAAACAAAAAAAAAAAAAAICAAACAAACAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAACAAACAAAAAAACAAACAAAAAAACAAACAAACAAACAAACAAACAAAAAAAAAAACAAICAAAAAAACAAACA + AACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAACA + AACAAACAAACAAACAAAAAAACAAAAAAAAAAAAAAACAAACAAACAAAAAAACAAACAAACAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAICAAACAAACAAAAAAICAAACAAACA + AACAAACAAACAAAAAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + AACAAAAAAACAAACAAACAAICAAACAAACAAACAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAACAAACAAACA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAACAAICAAICAAACA + AICAAACAAAAAAACAAAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAACAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAACAAACAAACAAICAAACAAACAAACAAACAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACA + AACAAACAAACAAACAAICAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAAAA + AACAAACAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAA + AACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAACAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE + AAAAAAAAAAAAAAABAAAAAQAAAAD/AAD/AAD/AAAAAP//AP//AAD/AP8AwMDAAP/48ADX6/oA1P9/AP8A + AADiK4oAKiqlAAAAAAAEBAQACAgIAAwMDAAREREAFhYWABwcHAAiIiIAKSkpADMzMwA5OTkAQkJCAE1N + TQBVVVUAYGBgAGZmZgBwcHAAgICAAIyMjACUlJQAmZmZAKSkpACsrKwAtra2AMDAwADMzMwA1NTUANra + 2gDg4OAA7OzsAPj4+AD7+/sA////ADMAAABmAAAAmQAAAMwAAAD/AAAAADMAADMzAABmMwAAmTMAAMwz + AAD/MwAAAGYAADNmAABmZgAAmWYAAMxmAAD/ZgAAAJkAADOZAABmmQAAmZkAAMyZAAD/mQAAAMwAADPM + AABmzAAAmcwAAMzMAAD/zAAAAP8AADP/AABm/wAAmf8AAMz/AAD//wAAAAAzADMAMwBmADMAmQAzAMwA + MwD/ADMAADMzAGYzMwCZMzMAzDMzAP8zMwAAZjMAM2YzAGZmMwCZZjMAzGYzAP9mMwAAmTMAM5kzAGaZ + MwCZmTMAzJkzAP+ZMwAAzDMAM8wzAGbMMwCZzDMAzMwzAP/MMwAA/zMAM/8zAGb/MwCZ/zMAzP8zAP// + MwAAAGYAMwBmAGYAZgCZAGYAzABmAP8AZgAAM2YAMzNmAGYzZgCZM2YAzDNmAP8zZgAAZmYAM2ZmAJlm + ZgDMZmYA/2ZmAACZZgAzmWYAZplmAJmZZgDMmWYA/5lmAADMZgAzzGYAZsxmAJnMZgDMzGYA/8xmAAD/ + ZgAz/2YAZv9mAJn/ZgDM/2YA//9mAAAAmQAzAJkAZgCZAJkAmQDMAJkA/wCZAAAzmQAzM5kAZjOZAJkz + mQDMM5kA/zOZAABmmQAzZpkAZmaZAJlmmQDMZpkA/2aZAACZmQAzmZkAZpmZAMyZmQD/mZkAAcyZADPM + mQBmzJkAmcyZAMzMmQD/zJkAAP+ZADP/mQBm/5kAmf+ZAMz/mQD//5kAAADMADMAzABmAMwAmQDMAMwA + zAD/AMwAADPMADMzzABmM8wAmTPMAMwzzAD/M8wAAGbMADNmzABmZswAmWbMAMxmzAD/ZswAAJnMADOZ + zABmmcwAmZnMAMyZzAD/mcwAAMzMADPMzABmzMwAmczMAP/MzAAA/8wAM//MAGb/zACZ/8wAzP/MAP// + zAAAAP8AMwD/AGYA/wCZAP8AzAD/AP8A/wAAM/8AMzP/AGYz/wCZM/8AzDP/AP8z/wAAZv8AM2b/AGZm + /wCZZv8AzGb/AP9m/wAAmf8AM5n/AGaZ/wCZmf8AzJn/AP+Z/wAAzP8AM8z/AGbM/wCZzP8AzMz/AP/M + /wAA//8AM///AGb//wCZ//8AzP//AJ+fn5+fn58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQn5+fn5+f + n58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBCfn5+fn5+fn58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEJ+f + n5+fn5+fn58QEBAQEBAQnxAQEBAQEBAQEBAQEBAQn5+fn58QEBAQnxAQEBAQEBCfEBAQEBAQEBAQEBAQ + EBCfn5+fn5+fnxAQEBAQEBAQEJ8QEBAQEBAQEBAQEBAQEJ+fn5+fn5+fn58QEBAQEBAQEJ8QEBAQEBAQ + EBAQEBAQn5+fn5+fn5+fnxAQEBAQEBAQnxAQEBAQnxAQEBAQEBCfn5+fn5+fn5+fEBAQEBAQEBAQEBAQ + EJ+fEBAQEBAQEBCfn5+fn5+fn58QEBAQEBAQEBAQrZ+fn58QEBAQEBAQnxCfn5+fn5+fn58QEBAQEBAQ + EJ+fnxAQEBAQEBAQEBAQEBAQn5+fn5+fnxAQEBAQEBAQnxAQn5+fn58Qn58QEBAQEBCfn5+fn5+fEBAQ + EBAQEBCfEJ+fEBCfn5+fn58QEBAQEBAQEBAQEBAQEBAQEBAQnxCfnxAQn5+tra2fn58QEBAQEBCfn5+f + EBAQEBAQEJ+fEJ8QEK2tra2tra2fnxAQEBAQEBCfnxAQEBAQEBAQEBCfEBAQEK2trZ+trZ+fEBAQEBAQ + EBAQEBAQEBAQEBCfnxCfnxAQra2trZ+fnxAQEBAQEJ8QEBCfEBAQEBCfn5+fEBAQEBCtEJ+tnxCfEBAQ + EBAQEBAQn58QEBAQEJ+fn5+fnxAQEK2fnxCfnxAQEBAQEBAQEJ+fEJ+fEJ+fn5+fnxAQn60Qn5+fn5+f + EBAQEBAQnxAQnxAQnxAQn5+fn58QnxAQEJ+fnxCfn58QEBAQEBAQEBAQEBCfEJ+fn62fnxCtn5+fn58Q + n5+fnxAQEBAQEBAQEBAQn58Qn5+frZ+fnxAQn5+fEBAQn5+fnxAQEBAQEBAQEBCfEJ+fn5+trZ+tnxCf + EJ8QEBAQEJ+fnxAQEJ8QEBAQEBAQnxCfn5+fn5+tn5+fnxAQEBAQEBCfEBAQEJ8QEBAQEJ8QEJ+fn5+f + rZ+fn58QEBAQEBAQEBAQEBAQEBAQEBAQEBCfn5+fn5+fn5+fEBAQEBAQEBAQEBAQEBAQEJ8QnxCfnxAQ + EBAQn5+fEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEJ8QEJ8QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBCfEBAQn58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEJ+fEJ8QEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAABAAAAAgAAAAAEAGAAAAAAAADAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAA + AAAAAIAAAIAAAAAAAAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAA + gIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAAIAA + AIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAgIAA + gIAAgIAAgIAAAIAAAIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAAAAAAAAAIAAAIAAgIAAgIAAAIAAAIAAAAAA + AAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAAAAAAAAAIAAAIAAgIAA + gIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAA + AIAAgIAAgIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAA + AAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAIAAAIAAgIAAgIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAgIAAgIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAgIAA + gIAAgIAAgIAAAIAAAIAAgIAAgIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAgIAAgIAAgIAAgIAAAIAAAIAAgIAAgIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAgIAA + gIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAAAA + AAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAABAAAAAgAAAAAEABAAAAAAAAAgAAAAA + AAAAAAAAEAAAABAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAwMDAAICAgAAAAP8AAP8AAAD/ + /wD/AAAA/wD/AP//AAD///8AEREREREREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARERERERERAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAABERERERERERAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAERERERER + EREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAREREREREREREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABER + EREREREREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEREREREREREREQAAAAAAAAARAAAAAAAAAAAAAAAA + AAARERERERERERERAAAAAAAAABEAAAAAAAAAAAAAAAAAABERERERAAAAABEAAAAAAAAAEQAAAAAAAAAA + AAAAAAAAEREREREAAAAAEQAAAAAAAAARAAAAAAAAAAAAAAAAAAAREREREREREQAAAAAAAAAAABEAAAAA + AAAAAAAAAAAAABERERERERERAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAEREREREREREREQAAAAAAAAAA + EQAAAAAAAAAAAAAAAAARERERERERERERAAAAAAAAAAARAAAAAAAAAAAAAAAAABEREREREREREREAAAAA + AAAAABEAAAAAABEAAAAAAAAAEREREREREREREQAAAAAAAAAAEQAAAAAAEQAAAAAAAAARERERERERERER + AAAAAAAAAAAAAAAAABERAAAAAAAAABEREREREREREREAAAAAAAAAAAAAAAAAEREAAAAAAAAAABERERER + EREREQAAAAAAAAAAAAAzEREREQAAAAAAAAAAERERERERERERAAAAAAAAAAAAADMRERERAAAAAAAAABEA + ERERERERERERAAAAAAAAAAAREREAAAAAAAAAAAAAEQAREREREREREREAAAAAAAAAABEREQAAAAAAAAAA + AAAAAAAAEREREREREQAAAAAAAAAAEQAAEREREREAEREAAAAAAAARERERERERAAAAAAAAAAARAAARERER + EQAREQAAAAAAABEREREREREAAAAAAAAAABEAEREAABEREREREQAAAAAAEREREREREQAAAAAAAAAAEQAR + EQAAERERERERAAAAAAAAAAAAAAAAAAAAAAAAABEAEREAABERMzMzERERAAAAAAAAAAAAAAAAAAAAAAAA + EQAREQAAEREzMzMREREAAAAAAAARERERAAAAAAAAABERABEAADMzMzMzMzMREQAAAAAAABEREREAAAAA + AAAAEREAEQAAMzMzMzMzMxERAAAAAAAAABERAAAAAAAAAAAAABEAAAAAMzMzETMzEREAAAAAAAAAEREA + AAAAAAAAAAAAEQAAAAAzMzMRMzMREQAAAAAAAAAAAAAAAAAAAAAAEREAEREAADMzMzMREREAAAAAAAAA + AAAAAAAAAAAAAAAREQAREQAAMzMzMxEREQAAAAAAABEAAAARAAAAAAARERERAAAAAAAzABEzEQARAAAA + AAAAEQAAABEAAAAAABEREREAAAAAADMAETMRABEAAAAAAAAAAAAREQAAAAAAERERERERAAAAMxERABER + AAAAAAAAAAAAABERAAAAAAAREREREREAAAAzEREAEREAAAAAAAAAAAAREQAREQAREREREREAABEzABER + EREREQAAAAAAAAAAABERABERABEREREREQAAETMAERERERERAAAAAAAAEQAAEQAAEQAAEREREREAEQAA + ABEREQAREREAAAAAAAARAAARAAARAAAREREREQARAAAAERERABEREQAAAAAAAAAAAAAAABEAERERMxER + ADMREREREQARERERAAAAAAAAAAAAAAAAEQAREREzEREAMxERERERABEREREAAAAAAAAAAAAAABERABER + ETMREREAABEREQAAABEREREAAAAAAAAAAAAAEREAERERMxEREQAAERERAAAAEREREQAAAAAAAAAAAAAR + ABEREREzMxEzEQARABEAAAAAABEREQAAAAAAAAAAABEAERERETMzETMRABEAEQAAAAAAERERAAAAEQAA + AAAAAAARABERERERETMRERERAAAAAAAAABEAAAARAAAAAAAAABEAERERERERMxEREREAAAAAAAAAEQAA + AAARAAAAAAARAAARERERETMRERERAAAAAAAAAAAAAAAAABEAAAAAABEAABERERERMxEREREAAAAAAAAA + AAAAAAAAAAAAAAAAAAARERERERERERERAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEREREREREREREAAAAA + AAAAAAAAAAAAAAAAEQARABERAAAAAAAREREAAAAAAAAAAAAAAAAAAAAAAAARABEAEREAAAAAABEREQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + EQAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAAAREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + EQAAABERAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAREQARAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAABERABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgA + AABAAAAAgAAAAAEACAAAAAAAABAAAAAAAAAAAAAAAAEAAAABAAAAAP8AAP8AAP8AAAAA//8A//8AAP8A + /wDAwMAA//jwANfr+gDU/38A/wAAAOIrigAqKqUAAAAAAAQEBAAICAgADAwMABEREQAWFhYAHBwcACIi + IgApKSkAMzMzADk5OQBCQkIATU1NAFVVVQBgYGAAZmZmAHBwcACAgIAAjIyMAJSUlACZmZkApKSkAKys + rAC2trYAwMDAAMzMzADU1NQA2traAODg4ADs7OwA+Pj4APv7+wD///8AMwAAAGYAAACZAAAAzAAAAP8A + AAAAMwAAMzMAAGYzAACZMwAAzDMAAP8zAAAAZgAAM2YAAGZmAACZZgAAzGYAAP9mAAAAmQAAM5kAAGaZ + AACZmQAAzJkAAP+ZAAAAzAAAM8wAAGbMAACZzAAAzMwAAP/MAAAA/wAAM/8AAGb/AACZ/wAAzP8AAP// + AAAAADMAMwAzAGYAMwCZADMAzAAzAP8AMwAAMzMAZjMzAJkzMwDMMzMA/zMzAABmMwAzZjMAZmYzAJlm + MwDMZjMA/2YzAACZMwAzmTMAZpkzAJmZMwDMmTMA/5kzAADMMwAzzDMAZswzAJnMMwDMzDMA/8wzAAD/ + MwAz/zMAZv8zAJn/MwDM/zMA//8zAAAAZgAzAGYAZgBmAJkAZgDMAGYA/wBmAAAzZgAzM2YAZjNmAJkz + ZgDMM2YA/zNmAABmZgAzZmYAmWZmAMxmZgD/ZmYAAJlmADOZZgBmmWYAmZlmAMyZZgD/mWYAAMxmADPM + ZgBmzGYAmcxmAMzMZgD/zGYAAP9mADP/ZgBm/2YAmf9mAMz/ZgD//2YAAACZADMAmQBmAJkAmQCZAMwA + mQD/AJkAADOZADMzmQBmM5kAmTOZAMwzmQD/M5kAAGaZADNmmQBmZpkAmWaZAMxmmQD/ZpkAAJmZADOZ + mQBmmZkAzJmZAP+ZmQABzJkAM8yZAGbMmQCZzJkAzMyZAP/MmQAA/5kAM/+ZAGb/mQCZ/5kAzP+ZAP// + mQAAAMwAMwDMAGYAzACZAMwAzADMAP8AzAAAM8wAMzPMAGYzzACZM8wAzDPMAP8zzAAAZswAM2bMAGZm + zACZZswAzGbMAP9mzAAAmcwAM5nMAGaZzACZmcwAzJnMAP+ZzAAAzMwAM8zMAGbMzACZzMwA/8zMAAD/ + zAAz/8wAZv/MAJn/zADM/8wA///MAAAA/wAzAP8AZgD/AJkA/wDMAP8A/wD/AAAz/wAzM/8AZjP/AJkz + /wDMM/8A/zP/AABm/wAzZv8AZmb/AJlm/wDMZv8A/2b/AACZ/wAzmf8AZpn/AJmZ/wDMmf8A/5n/AADM + /wAzzP8AZsz/AJnM/wDMzP8A/8z/AAD//wAz//8AZv//AJn//wDM//8An5+fn5+fn5+fn5+fn58dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+f + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+f + n5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+f + n5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+f + n5+fn5+fn5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fn5+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn5+fn5+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHZ+fHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fHR0dHR0dHR2fnx0dHR0dHR0dHR0dHR0dn58dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fnx0dHR0dHR0dn58dHR0dHR0dHR0dHR0dHZ+fHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR2fnx0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0d + n58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0d + HR0dHR0dn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0d + HR0dHR0dHR0dHZ+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fn5+fn5+fnx0d + HR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dHR2fnx0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn5+fn5+f + n58dHR0dHR0dHR0dHR0dHR0dn58dHR0dHR0dHR0dn58dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+f + n5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+f + n5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fnx0dHR0dHR0dHR0dHR0dHR2fn5+f + n5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHa2tn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0d + n5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR2trZ+fn5+fn5+fHR0dHR0dHR0dHR0d + HR2fnx0dn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHZ+fn5+fnx0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHZ+fn5+fn5+fn5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR2fn5+fn58dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dn58dHR0dn5+fn5+f + n5+fnx0dn5+fnx0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHZ+fHR0dHZ+f + n5+fn5+fn58dHZ+fn58dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR2fnx0d + n5+fnx0dHR2fn5+fn5+fn5+fn58dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0d + n58dHZ+fn58dHR0dn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fnx0dn5+fnx0dHR2fn5+fra2tra2tn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHZ+fn58dHR0dn5+fn62tra2trZ+fn5+fnx0dHR0dHR0dHR0dHZ+fn5+fn5+fHR0dHR0d + HR0dHR0dHR2fn5+fHR2fnx0dHR2tra2tra2tra2tra2trZ+fn58dHR0dHR0dHR0dHR2fn5+fn5+fnx0d + HR0dHR0dHR0dHR0dn5+fnx0dn58dHR0dra2tra2tra2tra2tra2fn5+fHR0dHR0dHR0dHR0dHR2fn5+f + HR0dHR0dHR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dra2tra2tn5+tra2tn5+fnx0dHR0dHR0dHR0dHR0d + n5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dn58dHR0dHR0dHa2tra2trZ+fra2trZ+fn58dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fnx0dn5+fnx0dHR2tra2tra2trZ+fn5+fnx0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn58dHZ+fn58dHR0dra2tra2tra2fn5+fn58dHR0d + HR0dHR0dHR2fnx0dHR0dHZ+fHR0dHR0dHR0dHZ+fn5+fn5+fHR0dHR0dHR0dHa2tHR2fn62tn58dHZ+f + HR0dHR0dHR0dHR0dn58dHR0dHR2fnx0dHR0dHR0dHR2fn5+fn5+fnx0dHR0dHR0dHR2trR0dn5+trZ+f + HR2fnx0dHR0dHR0dHR0dHR0dHR0dHZ+fn58dHR0dHR0dHR0dn5+fn5+fn5+fn5+fHR0dHR0dra2fn5+f + HR2fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR0dHR0dHR0dHZ+fn5+fn5+fn5+fnx0dHR0dHa2t + n5+fnx0dn5+fnx0dHR0dHR0dHR0dHR0dHR0dHZ+fn58dHZ+fn58dHZ+fn5+fn5+fn5+fnx0dHR2fn62t + HR2fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR2fn5+fHR2fn5+fn5+fn5+fn58dHR0d + n5+trR0dn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dn58dHR0dn58dHR0dn58dHR0dn5+fn5+fn5+fnx0d + n58dHR0dHR2fn5+fn58dHZ+fn5+fnx0dHR0dHR0dHR0dHZ+fHR0dHZ+fHR0dHZ+fHR0dHZ+fn5+fn5+f + n58dHZ+fHR0dHR0dn5+fn5+fHR2fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fnx0dn5+fn5+f + ra2fn5+fHR2trZ+fn5+fn5+fn58dHZ+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn58dHZ+f + n5+fn62tn5+fnx0dra2fn5+fn5+fn5+fHR2fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+f + HR2fn5+fn5+trZ+fn5+fnx0dHR2fn5+fn58dHR0dHR2fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0d + n5+fnx0dn5+fn5+fra2fn5+fn58dHR0dn5+fn5+fHR0dHR0dn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0d + HR0dHZ+fHR2fn5+fn5+fn62tra2fn62tn58dHZ+fHR2fnx0dHR0dHR0dHR2fn5+fn58dHR0dHR0dHR0d + HR0dHR0dHR2fnx0dn5+fn5+fn5+tra2tn5+trZ+fHR2fnx0dn58dHR0dHR0dHR0dn5+fn5+fHR0dHR0d + n58dHR0dHR0dHR0dHR0dHZ+fHR2fn5+fn5+fn5+fn5+trZ+fn5+fn5+fHR0dHR0dHR0dHR0dHR2fnx0d + HR0dHZ+fHR0dHR0dHR0dHR0dHR2fnx0dn5+fn5+fn5+fn5+fra2fn5+fn5+fnx0dHR0dHR0dHR0dHR0d + n58dHR0dHR0dHZ+fHR0dHR0dHR0dHZ+fHR0dHZ+fn5+fn5+fn5+trZ+fn5+fn5+fHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dHR2fnx0dHR2fn5+fn5+fn5+fra2fn5+fn5+fnx0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fn5+fn5+fnx0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn58dHZ+fHR2fn5+fHR0dHR0dHR0dHZ+fn5+fnx0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fHR2fnx0dn5+fnx0dHR0dHR0dHR2fn5+f + n58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fnx0dHR2fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHR0dn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fnx0dHR0dHZ+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHR0dHR2fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHZ+fn58dHZ+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR2fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAIAAAAAAAQAAAQAYAAAAAAAAwAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAIAAAAAAAQAAAQAIAAAAAAAAQAAAAAAAAAAA + AAAAAQAAAAEAAAAA/wAA/wAA/wAAAAD//wD//wAA/wD/AMDAwAD/+PAA1+v6ANT/fwD/AAAA4iuKACoq + pQAAAAAABAQEAAgICAAMDAwAERERABYWFgAcHBwAIiIiACkpKQAzMzMAOTk5AEJCQgBNTU0AVVVVAGBg + YABmZmYAcHBwAICAgACMjIwAlJSUAJmZmQCkpKQArKysALa2tgDAwMAAzMzMANTU1ADa2toA4ODgAOzs + 7AD4+PgA+/v7AP///wAzAAAAZgAAAJkAAADMAAAA/wAAAAAzAAAzMwAAZjMAAJkzAADMMwAA/zMAAABm + AAAzZgAAZmYAAJlmAADMZgAA/2YAAACZAAAzmQAAZpkAAJmZAADMmQAA/5kAAADMAAAzzAAAZswAAJnM + AADMzAAA/8wAAAD/AAAz/wAAZv8AAJn/AADM/wAA//8AAAAAMwAzADMAZgAzAJkAMwDMADMA/wAzAAAz + MwBmMzMAmTMzAMwzMwD/MzMAAGYzADNmMwBmZjMAmWYzAMxmMwD/ZjMAAJkzADOZMwBmmTMAmZkzAMyZ + MwD/mTMAAMwzADPMMwBmzDMAmcwzAMzMMwD/zDMAAP8zADP/MwBm/zMAmf8zAMz/MwD//zMAAABmADMA + ZgBmAGYAmQBmAMwAZgD/AGYAADNmADMzZgBmM2YAmTNmAMwzZgD/M2YAAGZmADNmZgCZZmYAzGZmAP9m + ZgAAmWYAM5lmAGaZZgCZmWYAzJlmAP+ZZgAAzGYAM8xmAGbMZgCZzGYAzMxmAP/MZgAA/2YAM/9mAGb/ + ZgCZ/2YAzP9mAP//ZgAAAJkAMwCZAGYAmQCZAJkAzACZAP8AmQAAM5kAMzOZAGYzmQCZM5kAzDOZAP8z + mQAAZpkAM2aZAGZmmQCZZpkAzGaZAP9mmQAAmZkAM5mZAGaZmQDMmZkA/5mZAAHMmQAzzJkAZsyZAJnM + mQDMzJkA/8yZAAD/mQAz/5kAZv+ZAJn/mQDM/5kA//+ZAAAAzAAzAMwAZgDMAJkAzADMAMwA/wDMAAAz + zAAzM8wAZjPMAJkzzADMM8wA/zPMAABmzAAzZswAZmbMAJlmzADMZswA/2bMAACZzAAzmcwAZpnMAJmZ + zADMmcwA/5nMAADMzAAzzMwAZszMAJnMzAD/zMwAAP/MADP/zABm/8wAmf/MAMz/zAD//8wAAAD/ADMA + /wBmAP8AmQD/AMwA/wD/AP8AADP/ADMz/wBmM/8AmTP/AMwz/wD/M/8AAGb/ADNm/wBmZv8AmWb/AMxm + /wD/Zv8AAJn/ADOZ/wBmmf8AmZn/AMyZ/wD/mf8AAMz/ADPM/wBmzP8Amcz/AMzM/wD/zP8AAP//ADP/ + /wBm//8Amf//AMz//wCfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pra2trZ+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+tra2tn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD62tra2fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+f + n5+tra2tra2tra2tra2fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8P + Dw+fn5+fn5+fn62tra2tra2tra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+f + n58PDw8PDw8PD5+fn5+fn5+fra2tra2tra2tra2tn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8P + Dw+fn5+fDw8PDw8PDw+tra2tra2tra2tra2tra2tra2tra2tra2tra2tn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PD5+fn58PDw8PDw8PD62tra2tra2tra2tra2tra2tra2tra2tra2tra2fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8Pn5+fnw8PDw8PDw8Pra2tra2tra2tra2tra2tra2tra2tra2tra2trZ+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw+fn5+fDw8PDw8PDw+tra2tra2tra2tra2tra2tra2tra2t + ra2tra2tn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+fn58PDw8PDw8PD62tra2tra2tra2tra2t + ra2tra2tra2tra2tra2fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PD62t + ra2tra2tra2trZ+fn5+tra2tra2trZ+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8Pra2tra2tra2tra2tn5+fn62tra2tra2tn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PDw8PDw+tra2tra2tra2tra2fn5+fra2tra2tra2fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n58PDw8Pn5+fn5+fn58PDw8PDw8PD62tra2tra2tra2tra2tra2fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pra2tra2tra2tra2tra2trZ+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw+tra2tra2tra2tra2tra2tn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PD62tra2tra2tra2tra2t + ra2fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pra2tra2t + ra2tra2tra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw+tra2tDw8PD5+fn5+tra2tn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PD62tra0PDw8Pn5+fn62tra2fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pra2trQ8PDw+fn5+fra2trZ+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw+tra2tn5+fn5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PD62tra2fn5+fn5+fnw8PDw+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8Pra2trZ+fn5+fn5+fDw8PD5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw+tra2tn5+fn5+f + n58PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PD62t + ra2fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PD5+fn5+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8Pn5+fn62t + ra0PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw+fn5+fra2trQ8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PD5+fn5+tra2tDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PD5+fn58PDw8PDw8PD5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fDw8PD5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+fn58PDw8PDw8PD5+f + n58PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n58PDw8Pn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fnw8P + Dw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fnw8PDw+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fn5+fn62tra2fn5+fn5+fnw8PDw+tra2tn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fDw8PD62t + ra2fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+tra2tn5+fn5+f + n58PDw8Pra2trZ+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+fn5+fn5+fn5+fn62t + ra2fn5+fn5+fn5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+f + n5+fn5+fra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8P + Dw+fn5+fn5+fn5+fn5+tra2tn5+fn5+fn5+fn5+fDw8PDw8PDw+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PD5+fn5+fn5+fn5+fn62tra2fn5+fn5+fn5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn5+tra2tra2trZ+fn5+tra2tn5+fnw8P + Dw+fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn62tra2tra2tn5+fn62t + ra2fn5+fDw8PD5+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fra2tra2t + ra2fn5+fra2trZ+fn58PDw8Pn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+tra2tn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn62tra2fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+tra2tn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fra2trZ+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+tra2tn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn62tra2fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8Pn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n58PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + + + \ No newline at end of file diff --git a/Server.MirForms/VisualMapInfo/Class/LockBitmap.cs b/Server.MirForms/VisualMapInfo/Class/LockBitmap.cs new file mode 100644 index 0000000..263e354 --- /dev/null +++ b/Server.MirForms/VisualMapInfo/Class/LockBitmap.cs @@ -0,0 +1,128 @@ +using System.Drawing.Imaging; +using System.Runtime.InteropServices; + +namespace Server.MirForms.VisualMapInfo.Class +{ + public class LockBitmap + { + Bitmap source = null; + IntPtr Iptr = IntPtr.Zero; + BitmapData bitmapData = null; + + public byte[] Pixels { get; set; } + public int Depth { get; private set; } + public int Width { get; private set; } + public int Height { get; private set; } + + public LockBitmap(Bitmap source) + { + this.source = source; + } + + public void LockBits() + { + try + { + Width = source.Width; + Height = source.Height; + + int PixelCount = Width * Height; + + Rectangle rect = new Rectangle(0, 0, Width, Height); + + Depth = System.Drawing.Bitmap.GetPixelFormatSize(source.PixelFormat); + + if (Depth != 8 && Depth != 24 && Depth != 32) + { + throw new ArgumentException("Only 8, 24 and 32 bpp images are supported."); + } + + bitmapData = source.LockBits(rect, ImageLockMode.ReadWrite, + source.PixelFormat); + + int step = Depth / 8; + Pixels = new byte[PixelCount * step]; + Iptr = bitmapData.Scan0; + + Marshal.Copy(Iptr, Pixels, 0, Pixels.Length); + } + catch + { + throw; + } + } + + public void UnlockBits() + { + try + { + Marshal.Copy(Pixels, 0, Iptr, Pixels.Length); + + source.UnlockBits(bitmapData); + } + catch + { + throw; + } + } + + public Color GetPixel(int x, int y) + { + Color clr = Color.Empty; + + int cCount = Depth / 8; + + int i = ((y * Width) + x) * cCount; + + if (i > Pixels.Length - cCount) + throw new IndexOutOfRangeException(); + + if (Depth == 32) + { + byte b = Pixels[i]; + byte g = Pixels[i + 1]; + byte r = Pixels[i + 2]; + byte a = Pixels[i + 3]; // a + clr = Color.FromArgb(a, r, g, b); + } + if (Depth == 24) + { + byte b = Pixels[i]; + byte g = Pixels[i + 1]; + byte r = Pixels[i + 2]; + clr = Color.FromArgb(r, g, b); + } + if (Depth == 8) + { + byte c = Pixels[i]; + clr = Color.FromArgb(c, c, c); + } + return clr; + } + + public void SetPixel(int x, int y, Color color) + { + int cCount = Depth / 8; + + int i = ((y * Width) + x) * cCount; + + if (Depth == 32) + { + Pixels[i] = color.B; + Pixels[i + 1] = color.G; + Pixels[i + 2] = color.R; + Pixels[i + 3] = color.A; + } + if (Depth == 24) + { + Pixels[i] = color.B; + Pixels[i + 1] = color.G; + Pixels[i + 2] = color.R; + } + if (Depth == 8) + { + Pixels[i] = color.B; + } + } + } +} diff --git a/Server.MirForms/VisualMapInfo/Class/ReadMap.cs b/Server.MirForms/VisualMapInfo/Class/ReadMap.cs new file mode 100644 index 0000000..f632d47 --- /dev/null +++ b/Server.MirForms/VisualMapInfo/Class/ReadMap.cs @@ -0,0 +1,69 @@ +namespace Server.MirForms.VisualMapInfo.Class +{ + public class ReadMap + { + public int Width, Height, MonsterCount; + public Cell[,] Cells; + public long LightningTime, FireTime; + public Bitmap clippingZone; + public string mapFile; + + private void LoadMapCells(byte[] fileBytes) + { + int offSet = 0; + Width = BitConverter.ToInt16(fileBytes, offSet); + offSet += 2; + Height = BitConverter.ToInt16(fileBytes, offSet); + Cells = new Cell[Width, Height]; + + offSet = 56; + + clippingZone = new Bitmap(Width, Height); + + for (int x = 0; x < Width; x++) + for (int y = 0; y < Height; y++) + { + clippingZone.SetPixel(x, y, Color.WhiteSmoke); + + if ((BitConverter.ToInt16(fileBytes, offSet) & 0x8000) != 0) + clippingZone.SetPixel(x, y, Color.Black); + offSet += 2; + if ((BitConverter.ToInt16(fileBytes, offSet) & 0x8000) != 0) + clippingZone.SetPixel(x, y, Color.Black); + offSet += 2; + } + } + + public void Load() + { + try + { + if (File.Exists(Path.Combine("Maps", mapFile + ".map"))) + { + byte[] fileBytes = File.ReadAllBytes(Path.Combine("Maps", mapFile + ".map")); + LoadMapCells(fileBytes); + } + } + + catch (Exception) { } + + VisualizerGlobal.ClippingMap = clippingZone; + } + + public Cell GetCell(Point location) + { + return Cells[location.X, location.Y]; + } + + public Cell GetCell(int x, int y) + { + return Cells[x, y]; + } + } + + public class Cell + { + public static readonly Cell HighWall; + public static readonly Cell LowWall; + } +} diff --git a/Server.MirForms/VisualMapInfo/Class/VisualizerGlobal.cs b/Server.MirForms/VisualMapInfo/Class/VisualizerGlobal.cs new file mode 100644 index 0000000..84d184f --- /dev/null +++ b/Server.MirForms/VisualMapInfo/Class/VisualizerGlobal.cs @@ -0,0 +1,69 @@ +using Server.MirDatabase; + +namespace Server.MirForms.VisualMapInfo.Class +{ + public static class VisualizerGlobal + { + public static event EventHandler FocusModeActivated; + + public static Cursor + Cursor = Cursors.Arrow; + + public static void ActivateFocusMode(object o, EventArgs s) + { + if (FocusModeActivated != null) + FocusModeActivated(null, null); + } + + public static Server.MirDatabase.MapInfo + MapInfo; + + public static int + ZoomLevel = 1; // 1 - 6 + + public static bool FocusMode = false; + public static bool FocusModeActive + { + get => FocusMode; + set + { + FocusMode = value; + if (FocusMode == true) + ActivateFocusMode(null, null); + } + } + + public static MapInfo + ActiveMap; + + public static Bitmap + ClippingMap = null; + + public static Tool + SelectedTool = Tool.Select; + + public static FocusType + SelectedFocusType; + + public static Server.MirForms.VisualMapInfo.Control.RespawnEntry + FocusRespawnEntry; + + public enum Tool + { + Select, + Add, + Move, + Resize, + Focus + } + + public enum FocusType + { + None, + Respawn, + NPC, + SafeZone, + Guard + } + } +} diff --git a/Server.MirForms/VisualMapInfo/Control/Forms/RespawnsDetailForm.Designer.cs b/Server.MirForms/VisualMapInfo/Control/Forms/RespawnsDetailForm.Designer.cs new file mode 100644 index 0000000..81cfe04 --- /dev/null +++ b/Server.MirForms/VisualMapInfo/Control/Forms/RespawnsDetailForm.Designer.cs @@ -0,0 +1,269 @@ +namespace Server.MirForms.VisualMapInfo.Control.Forms +{ + partial class RespawnsDetailForm + { + /// + /// 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.Spread = new System.Windows.Forms.TextBox(); + this.label3 = new System.Windows.Forms.Label(); + this.Y = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.DoneButton = new System.Windows.Forms.Button(); + this.X = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.Delay = new System.Windows.Forms.TextBox(); + this.label4 = new System.Windows.Forms.Label(); + this.Count = new System.Windows.Forms.TextBox(); + this.label5 = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); + this.RoutePath = new System.Windows.Forms.TextBox(); + this.label7 = new System.Windows.Forms.Label(); + this.Direction = new System.Windows.Forms.TextBox(); + this.label8 = new System.Windows.Forms.Label(); + this.RDelay = new System.Windows.Forms.TextBox(); + this.label9 = new System.Windows.Forms.Label(); + this.label10 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // Spread + // + this.Spread.Location = new System.Drawing.Point(71, 64); + this.Spread.Name = "Spread"; + this.Spread.Size = new System.Drawing.Size(53, 20); + this.Spread.TabIndex = 13; + this.Spread.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.Chk); + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(16, 67); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(44, 13); + this.label3.TabIndex = 12; + this.label3.Text = "Spread:"; + // + // Y + // + this.Y.Location = new System.Drawing.Point(71, 38); + this.Y.Name = "Y"; + this.Y.Size = new System.Drawing.Size(53, 20); + this.Y.TabIndex = 11; + this.Y.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.Chk); + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(41, 41); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(17, 13); + this.label2.TabIndex = 10; + this.label2.Text = "Y:"; + // + // DoneButton + // + this.DoneButton.Location = new System.Drawing.Point(179, 130); + this.DoneButton.Name = "DoneButton"; + this.DoneButton.Size = new System.Drawing.Size(105, 24); + this.DoneButton.TabIndex = 9; + this.DoneButton.Text = "Done"; + this.DoneButton.UseVisualStyleBackColor = true; + this.DoneButton.Click += new System.EventHandler(this.DoneButton_Click); + // + // X + // + this.X.Location = new System.Drawing.Point(71, 12); + this.X.Name = "X"; + this.X.Size = new System.Drawing.Size(53, 20); + this.X.TabIndex = 8; + this.X.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.Chk); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(41, 15); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(17, 13); + this.label1.TabIndex = 7; + this.label1.Text = "X:"; + // + // Delay + // + this.Delay.Location = new System.Drawing.Point(184, 38); + this.Delay.Name = "Delay"; + this.Delay.Size = new System.Drawing.Size(53, 20); + this.Delay.TabIndex = 17; + this.Delay.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.Chk); + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(141, 41); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(37, 13); + this.label4.TabIndex = 16; + this.label4.Text = "Delay:"; + // + // Count + // + this.Count.Location = new System.Drawing.Point(184, 12); + this.Count.Name = "Count"; + this.Count.Size = new System.Drawing.Size(53, 20); + this.Count.TabIndex = 15; + this.Count.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.Chk); + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(140, 15); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(38, 13); + this.label5.TabIndex = 14; + this.label5.Text = "Count:"; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(243, 41); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(34, 13); + this.label6.TabIndex = 18; + this.label6.Text = "(mins)"; + // + // RoutePath + // + this.RoutePath.Location = new System.Drawing.Point(184, 90); + this.RoutePath.Name = "RoutePath"; + this.RoutePath.Size = new System.Drawing.Size(100, 20); + this.RoutePath.TabIndex = 19; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(141, 93); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(39, 13); + this.label7.TabIndex = 20; + this.label7.Text = "Route:"; + // + // Direction + // + this.Direction.Location = new System.Drawing.Point(71, 90); + this.Direction.Name = "Direction"; + this.Direction.Size = new System.Drawing.Size(53, 20); + this.Direction.TabIndex = 21; + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(35, 93); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(23, 13); + this.label8.TabIndex = 22; + this.label8.Text = "Dir:"; + // + // RDelay + // + this.RDelay.Location = new System.Drawing.Point(184, 64); + this.RDelay.Name = "RDelay"; + this.RDelay.Size = new System.Drawing.Size(53, 20); + this.RDelay.TabIndex = 23; + // + // label9 + // + this.label9.AutoSize = true; + this.label9.Location = new System.Drawing.Point(133, 67); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(45, 13); + this.label9.TabIndex = 24; + this.label9.Text = "RDelay:"; + // + // label10 + // + this.label10.AutoSize = true; + this.label10.Location = new System.Drawing.Point(243, 67); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(34, 13); + this.label10.TabIndex = 25; + this.label10.Text = "(mins)"; + // + // RespawnsDetailForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(304, 166); + this.Controls.Add(this.label10); + this.Controls.Add(this.label9); + this.Controls.Add(this.RDelay); + this.Controls.Add(this.label8); + this.Controls.Add(this.Direction); + this.Controls.Add(this.label7); + this.Controls.Add(this.RoutePath); + this.Controls.Add(this.label6); + this.Controls.Add(this.Delay); + this.Controls.Add(this.label4); + this.Controls.Add(this.Count); + this.Controls.Add(this.label5); + this.Controls.Add(this.Spread); + this.Controls.Add(this.label3); + this.Controls.Add(this.Y); + this.Controls.Add(this.label2); + this.Controls.Add(this.DoneButton); + this.Controls.Add(this.X); + this.Controls.Add(this.label1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; + this.MaximizeBox = false; + this.Name = "RespawnsDetailForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Respawns"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + public System.Windows.Forms.TextBox Spread; + private System.Windows.Forms.Label label3; + public System.Windows.Forms.TextBox Y; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Button DoneButton; + public System.Windows.Forms.TextBox X; + private System.Windows.Forms.Label label1; + public System.Windows.Forms.TextBox Delay; + private System.Windows.Forms.Label label4; + public System.Windows.Forms.TextBox Count; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label label6; + public System.Windows.Forms.TextBox RoutePath; + private System.Windows.Forms.Label label7; + public System.Windows.Forms.TextBox Direction; + private System.Windows.Forms.Label label8; + public System.Windows.Forms.TextBox RDelay; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.Label label10; + } +} \ No newline at end of file diff --git a/Server.MirForms/VisualMapInfo/Control/Forms/RespawnsDetailForm.cs b/Server.MirForms/VisualMapInfo/Control/Forms/RespawnsDetailForm.cs new file mode 100644 index 0000000..f6f9ab4 --- /dev/null +++ b/Server.MirForms/VisualMapInfo/Control/Forms/RespawnsDetailForm.cs @@ -0,0 +1,29 @@ +namespace Server.MirForms.VisualMapInfo.Control.Forms +{ + public partial class RespawnsDetailForm : Form + { + public RespawnsDetailForm() + { + InitializeComponent(); + } + + private void Chk(object sender, KeyPressEventArgs e) + { + e.Handled = (!char.IsDigit(e.KeyChar)) && (!char.IsControl(e.KeyChar)); + } + + private void DoneButton_Click(object sender, EventArgs e) + { + if (X.Text == string.Empty) X.Text = "0"; + if (Y.Text == string.Empty) Y.Text = "0"; + if (Spread.Text == string.Empty) Spread.Text = "0"; + if (Count.Text == string.Empty) Count.Text = "0"; + if (Delay.Text == string.Empty) Delay.Text = "0"; + if (RoutePath.Text == string.Empty) RoutePath.Text = ""; + if (Direction.Text == string.Empty) Direction.Text = "0"; + if (RDelay.Text == string.Empty) RDelay.Text = "0"; + + this.Close(); + } + } +} diff --git a/Server.MirForms/VisualMapInfo/Control/Forms/RespawnsDetailForm.resx b/Server.MirForms/VisualMapInfo/Control/Forms/RespawnsDetailForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/Server.MirForms/VisualMapInfo/Control/Forms/RespawnsDetailForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Server.MirForms/VisualMapInfo/Control/MapContainer.cs b/Server.MirForms/VisualMapInfo/Control/MapContainer.cs new file mode 100644 index 0000000..4990ea7 --- /dev/null +++ b/Server.MirForms/VisualMapInfo/Control/MapContainer.cs @@ -0,0 +1,10 @@ +namespace Server.MirForms.Control +{ + public class MapContainer : System.Windows.Forms.Panel + { + protected override System.Drawing.Point ScrollToControl(System.Windows.Forms.Control activeControl) + { + return this.DisplayRectangle.Location; + } + } +} diff --git a/Server.MirForms/VisualMapInfo/Control/RespawnEntry.Designer.cs b/Server.MirForms/VisualMapInfo/Control/RespawnEntry.Designer.cs new file mode 100644 index 0000000..85946ad --- /dev/null +++ b/Server.MirForms/VisualMapInfo/Control/RespawnEntry.Designer.cs @@ -0,0 +1,123 @@ +namespace Server.MirForms.VisualMapInfo.Control +{ + partial class RespawnEntry + { + /// + /// 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.MonsterComboBox = new System.Windows.Forms.ComboBox(); + this.Details = new System.Windows.Forms.Label(); + this.Selected = new System.Windows.Forms.CheckBox(); + this.Count = new System.Windows.Forms.TextBox(); + this.Delay = new System.Windows.Forms.TextBox(); + this.SuspendLayout(); + // + // MonsterComboBox + // + this.MonsterComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.MonsterComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.MonsterComboBox.FormattingEnabled = true; + this.MonsterComboBox.Location = new System.Drawing.Point(24, 3); + this.MonsterComboBox.Name = "MonsterComboBox"; + this.MonsterComboBox.Size = new System.Drawing.Size(222, 21); + this.MonsterComboBox.TabIndex = 2; + this.MonsterComboBox.SelectedIndexChanged += new System.EventHandler(this.MonsterComboBox_SelectedIndexChanged); + this.MonsterComboBox.MouseEnter += new System.EventHandler(this.Region_MouseEnter); + this.MonsterComboBox.MouseLeave += new System.EventHandler(this.Region_MouseLeave); + // + // Details + // + this.Details.AutoSize = true; + this.Details.Location = new System.Drawing.Point(3, 30); + this.Details.Name = "Details"; + this.Details.Size = new System.Drawing.Size(103, 13); + this.Details.TabIndex = 3; + this.Details.Text = "C D "; + this.Details.DoubleClick += new System.EventHandler(this.Details_DoubleClick); + this.Details.MouseEnter += new System.EventHandler(this.Region_MouseEnter); + this.Details.MouseLeave += new System.EventHandler(this.Region_MouseLeave); + // + // Selected + // + this.Selected.AutoSize = true; + this.Selected.Location = new System.Drawing.Point(3, 7); + this.Selected.Name = "Selected"; + this.Selected.Size = new System.Drawing.Size(15, 14); + this.Selected.TabIndex = 4; + this.Selected.UseVisualStyleBackColor = true; + this.Selected.MouseEnter += new System.EventHandler(this.Region_MouseEnter); + this.Selected.MouseLeave += new System.EventHandler(this.Region_MouseLeave); + // + // Count + // + this.Count.Location = new System.Drawing.Point(19, 27); + this.Count.Name = "Count"; + this.Count.Size = new System.Drawing.Size(28, 20); + this.Count.TabIndex = 5; + this.Count.Text = "0"; + this.Count.MouseEnter += new System.EventHandler(this.Region_MouseEnter); + this.Count.MouseLeave += new System.EventHandler(this.Region_MouseLeave); + // + // Delay + // + this.Delay.Location = new System.Drawing.Point(70, 27); + this.Delay.Name = "Delay"; + this.Delay.Size = new System.Drawing.Size(28, 20); + this.Delay.TabIndex = 6; + this.Delay.Text = "0"; + this.Delay.MouseEnter += new System.EventHandler(this.Region_MouseEnter); + this.Delay.MouseLeave += new System.EventHandler(this.Region_MouseLeave); + // + // RespawnEntry + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.White; + this.Controls.Add(this.Delay); + this.Controls.Add(this.Count); + this.Controls.Add(this.Selected); + this.Controls.Add(this.Details); + this.Controls.Add(this.MonsterComboBox); + this.Name = "RespawnEntry"; + this.Size = new System.Drawing.Size(249, 50); + this.Load += new System.EventHandler(this.RespawnEntry_Load); + this.MouseEnter += new System.EventHandler(this.Region_MouseEnter); + this.MouseLeave += new System.EventHandler(this.Region_MouseLeave); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ComboBox MonsterComboBox; + private System.Windows.Forms.Label Details; + public System.Windows.Forms.CheckBox Selected; + public System.Windows.Forms.TextBox Count; + public System.Windows.Forms.TextBox Delay; + } +} diff --git a/Server.MirForms/VisualMapInfo/Control/RespawnEntry.cs b/Server.MirForms/VisualMapInfo/Control/RespawnEntry.cs new file mode 100644 index 0000000..70b54f1 --- /dev/null +++ b/Server.MirForms/VisualMapInfo/Control/RespawnEntry.cs @@ -0,0 +1,237 @@ +using Microsoft.VisualBasic.PowerPacks; +using Server.MirForms.VisualMapInfo.Class; +using Server.MirEnvir; +using Server.MirDatabase; + +namespace Server.MirForms.VisualMapInfo.Control +{ + public partial class RespawnEntry : UserControl + { + public List IndexList = new List(); + + public Envir Envir => SMain.EditEnvir; + + public RectangleShape RegionHighlight = new RectangleShape(); + + public int MonsterIndex; + + public bool RegionHidden = false; + + Point MouseDownLocation; + + public int X, Y; + + public byte Direction; + + public ushort RandomDelay; + + public ushort tempRange; + public ushort Range + { + get => (ushort)(tempRange); + set + { + tempRange = 0; + + if (value > 0) + tempRange = (ushort)(value); + + RegionHighlight.Size = new Size( + (tempRange * 2) * VisualizerGlobal.ZoomLevel, + (tempRange * 2) * VisualizerGlobal.ZoomLevel); + + RegionHighlight.Left = (X - value) * VisualizerGlobal.ZoomLevel; + RegionHighlight.Top = (Y - value) * VisualizerGlobal.ZoomLevel; + + + Details.Text = + $"C D X: {X.ToString()} | Y: {Y.ToString()} | Range: {Range.ToString()}"; + } + } + + public string RoutePath = string.Empty; + + public RespawnEntry() + { + InitializeComponent(); + InitializeRegionHighlight(); + } + + private void InitializeRegionHighlight() + { + RegionHighlight.Visible = false; + RegionHighlight.BorderColor = Color.Lime; + RegionHighlight.FillColor = Color.FromArgb(30, 200, 0, 200); + + RegionHighlight.BorderWidth = 2; + RegionHighlight.MouseMove += new System.Windows.Forms.MouseEventHandler(this.Region_MouseMove); + RegionHighlight.MouseDown += new System.Windows.Forms.MouseEventHandler(this.Region_MouseDown); + RegionHighlight.MouseEnter += new System.EventHandler(this.Region_MouseEnter); + RegionHighlight.MouseLeave += new System.EventHandler(this.Region_MouseLeave); + RegionHighlight.MouseClick += new System.Windows.Forms.MouseEventHandler(RegionHighlight_MouseClick); + RegionHighlight.MouseHover += RegionHighlight_MouseHover; + } + + #region "Start RegionHighlight Methods" + + private void Region_MouseLeave(object sender, EventArgs e) + { + if (RegionHighlight.Visible) + this.BackColor = Color.White; + else + this.BackColor = Color.Silver; + + RegionHighlight.BorderColor = Color.Lime; + RegionHighlight.FillStyle = FillStyle.Transparent; + } + + private void Region_MouseEnter(object sender, EventArgs e) + { + if (!RegionHighlight.Visible) return; + + this.BackColor = Color.MediumOrchid; + + RegionHighlight.BorderColor = Color.MediumOrchid; + RegionHighlight.FillStyle = FillStyle.Solid; + RegionHighlight.Cursor = VisualizerGlobal.Cursor; + } + + private void Region_MouseDown(object sender, MouseEventArgs e) + { + RegionHighlight.BringToFront(); + + this.BackColor = Color.Orange; + RegionHighlight.BorderColor = Color.Orange; + + if (VisualizerGlobal.SelectedTool == VisualizerGlobal.Tool.Select) return; + + MouseDownLocation = e.Location; + } + + private void Region_MouseMove(object sender, MouseEventArgs e) + { + if (VisualizerGlobal.SelectedTool == VisualizerGlobal.Tool.Select) return; + if (VisualizerGlobal.SelectedTool == VisualizerGlobal.Tool.Add) return; + + if (e.Button == System.Windows.Forms.MouseButtons.Left) + if (VisualizerGlobal.SelectedTool == VisualizerGlobal.Tool.Move) + { + RegionHighlight.Left = e.X + RegionHighlight.Left - MouseDownLocation.X; + RegionHighlight.Top = e.Y + RegionHighlight.Top - MouseDownLocation.Y; + + X = (RegionHighlight.Left + Range) / VisualizerGlobal.ZoomLevel; + Y = (RegionHighlight.Top + Range) / VisualizerGlobal.ZoomLevel; + + Range = tempRange; + } + else if (VisualizerGlobal.SelectedTool == VisualizerGlobal.Tool.Resize) + Range += (ushort)((MouseDownLocation.X - e.Location.X) / VisualizerGlobal.ZoomLevel); + + if (e.Button == System.Windows.Forms.MouseButtons.Right) + if (VisualizerGlobal.SelectedTool == VisualizerGlobal.Tool.Move) + Range += (ushort)((MouseDownLocation.X - e.Location.X) / VisualizerGlobal.ZoomLevel); + else + return; + } + + private void RegionHighlight_MouseClick(object sender, MouseEventArgs e) + { + if (VisualizerGlobal.SelectedTool == VisualizerGlobal.Tool.Focus) + { + VisualizerGlobal.SelectedFocusType = VisualizerGlobal.FocusType.Respawn; + VisualizerGlobal.FocusRespawnEntry = this; + VisualizerGlobal.FocusModeActive = true; + } + + MonsterComboBox.Focus(); + } + + private void RegionHighlight_MouseHover(object sender, EventArgs e) + { + RegionHighlight.Cursor = VisualizerGlobal.Cursor; + } + + #endregion "End RegionHighlight Methods" + + public void UpdateForFocus() + { + RegionHighlight.Left = X * VisualizerGlobal.ZoomLevel; + RegionHighlight.Top = Y * VisualizerGlobal.ZoomLevel; + Range = tempRange; + } + + public void RemoveEntry() + { + RegionHighlight.Dispose(); + this.Dispose(); + } + + public void HideControl() + { + RegionHighlight.Visible = false; + } + + public void ShowControl() + { + RegionHighlight.Visible = true; + } + + public void HideRegion() + { + RegionHighlight.Visible = false; + this.BackColor = Color.Silver; + RegionHidden = true; + } + + public void ShowRegion() + { + RegionHighlight.Visible = true; + this.BackColor = Color.White; + RegionHidden = false; + } + + private void RespawnEntry_Load(object sender, EventArgs e) + { + for (int i = 0; i < Envir.MonsterInfoList.Count; i++) MonsterComboBox.Items.Add(Envir.MonsterInfoList[i]); + + MonsterComboBox.SelectedItem = Envir.MonsterInfoList.FirstOrDefault(x => x.Index == MonsterIndex); + + Details.Text = + $"C D X: {X.ToString()} | Y: {Y.ToString()} | Range: {Range.ToString()}"; + } + + private void MonsterComboBox_SelectedIndexChanged(object sender, EventArgs e) + { + MonsterInfo info = MonsterComboBox.SelectedItem as MonsterInfo; + if (info == null) return; + MonsterIndex = info.Index; + } + + private void Details_DoubleClick(object sender, EventArgs e) + { + Forms.RespawnsDetailForm RespawnDetail = new Forms.RespawnsDetailForm(); + + RespawnDetail.X.Text = X.ToString(); + RespawnDetail.Y.Text = Y.ToString(); + RespawnDetail.Spread.Text = Range.ToString(); + RespawnDetail.Count.Text = Count.Text; + RespawnDetail.Delay.Text = Delay.Text; + RespawnDetail.RoutePath.Text = RoutePath; + RespawnDetail.Direction.Text = Direction.ToString(); + RespawnDetail.RDelay.Text = RandomDelay.ToString(); + + RespawnDetail.ShowDialog(); + + X = Convert.ToInt16(RespawnDetail.X.Text); + Y = Convert.ToInt16(RespawnDetail.Y.Text); + Range = Convert.ToUInt16(RespawnDetail.Spread.Text); + Count.Text = RespawnDetail.Count.Text; + Delay.Text = RespawnDetail.Delay.Text; + RoutePath = RespawnDetail.RoutePath.Text; + Direction = byte.Parse(RespawnDetail.Direction.Text); + RandomDelay = ushort.Parse(RespawnDetail.RDelay.Text); + + RespawnDetail.Dispose(); + } + } +} \ No newline at end of file diff --git a/Server.MirForms/VisualMapInfo/Control/RespawnEntry.resx b/Server.MirForms/VisualMapInfo/Control/RespawnEntry.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/Server.MirForms/VisualMapInfo/Control/RespawnEntry.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Server.MirForms/VisualMapInfo/VForm.Designer.cs b/Server.MirForms/VisualMapInfo/VForm.Designer.cs new file mode 100644 index 0000000..889a2a7 --- /dev/null +++ b/Server.MirForms/VisualMapInfo/VForm.Designer.cs @@ -0,0 +1,592 @@ +namespace Server.MirForms.VisualMapInfo +{ + partial class VForm + { + /// + /// 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(VForm)); + Tool = new ToolStrip(); + toolStripLabel1 = new ToolStripLabel(); + EndFocus = new ToolStripButton(); + FocusBreak = new ToolStripSeparator(); + SelectButton = new ToolStripButton(); + AddButton = new ToolStripButton(); + MoveButton = new ToolStripButton(); + ResizeButton = new ToolStripButton(); + splitter1 = new Splitter(); + tabPage2 = new TabPage(); + RespawnPanel = new Panel(); + toolStrip3 = new ToolStrip(); + RespawnsRemoveSelected = new ToolStripButton(); + ResapwnsHideRegion = new ToolStripButton(); + ResapwnsShowRegion = new ToolStripButton(); + toolStripSeparator2 = new ToolStripSeparator(); + ResapwnsFocusRegion = new ToolStripButton(); + RespawnsFilter = new ComboBox(); + RespawnTools = new ToolStrip(); + RespawnsSelectAll = new ToolStripButton(); + RespawnsSelectNone = new ToolStripButton(); + RespawnsInvertSelection = new ToolStripButton(); + RegionTabs = new TabControl(); + statusStrip1 = new StatusStrip(); + MapDetailsLabel = new ToolStripStatusLabel(); + mapContainer1 = new MirForms.Control.MapContainer(); + MapImage = new PictureBox(); + tabPage1 = new TabPage(); + MiningPanel = new Panel(); + MiningFilter = new ComboBox(); + MiningTools = new ToolStrip(); + MiningSelectAll = new ToolStripButton(); + MiningSelectNone = new ToolStripButton(); + MiningInvertSelection = new ToolStripButton(); + MiningRemoveSelected = new ToolStripButton(); + toolStrip2 = new ToolStrip(); + MiningHideRegion = new ToolStripButton(); + MiningShowRegion = new ToolStripButton(); + toolStripSeparator1 = new ToolStripSeparator(); + MiningFocusRegion = new ToolStripButton(); + Tool.SuspendLayout(); + tabPage2.SuspendLayout(); + toolStrip3.SuspendLayout(); + RespawnTools.SuspendLayout(); + RegionTabs.SuspendLayout(); + statusStrip1.SuspendLayout(); + mapContainer1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)MapImage).BeginInit(); + tabPage1.SuspendLayout(); + MiningTools.SuspendLayout(); + toolStrip2.SuspendLayout(); + SuspendLayout(); + // + // Tool + // + Tool.AutoSize = false; + Tool.Dock = DockStyle.Left; + Tool.GripStyle = ToolStripGripStyle.Hidden; + Tool.ImageScalingSize = new Size(28, 28); + Tool.Items.AddRange(new ToolStripItem[] { toolStripLabel1, EndFocus, FocusBreak, SelectButton, AddButton, MoveButton, ResizeButton }); + Tool.Location = new Point(0, 0); + Tool.Name = "Tool"; + Tool.Size = new Size(52, 545); + Tool.TabIndex = 1; + Tool.Text = "toolStrip1"; + // + // toolStripLabel1 + // + toolStripLabel1.Name = "toolStripLabel1"; + toolStripLabel1.Size = new Size(50, 15); + toolStripLabel1.Text = " "; + // + // EndFocus + // + EndFocus.AutoSize = false; + EndFocus.DisplayStyle = ToolStripItemDisplayStyle.Image; + EndFocus.Image = (Image)resources.GetObject("EndFocus.Image"); + EndFocus.ImageScaling = ToolStripItemImageScaling.None; + EndFocus.ImageTransparentColor = Color.Magenta; + EndFocus.Name = "EndFocus"; + EndFocus.Size = new Size(28, 28); + EndFocus.Text = "End Focus"; + EndFocus.Visible = false; + EndFocus.Click += EndFocus_Click; + // + // FocusBreak + // + FocusBreak.Name = "FocusBreak"; + FocusBreak.Size = new Size(50, 6); + FocusBreak.Visible = false; + // + // SelectButton + // + SelectButton.AutoSize = false; + SelectButton.Checked = true; + SelectButton.CheckOnClick = true; + SelectButton.CheckState = CheckState.Checked; + SelectButton.DisplayStyle = ToolStripItemDisplayStyle.Image; + SelectButton.Image = (Image)resources.GetObject("SelectButton.Image"); + SelectButton.ImageAlign = ContentAlignment.MiddleLeft; + SelectButton.ImageScaling = ToolStripItemImageScaling.None; + SelectButton.ImageTransparentColor = Color.Magenta; + SelectButton.Name = "SelectButton"; + SelectButton.Size = new Size(28, 28); + SelectButton.Text = "Select Region"; + SelectButton.Click += ToolSelectedChanged; + // + // AddButton + // + AddButton.AutoSize = false; + AddButton.CheckOnClick = true; + AddButton.DisplayStyle = ToolStripItemDisplayStyle.Image; + AddButton.Image = (Image)resources.GetObject("AddButton.Image"); + AddButton.ImageAlign = ContentAlignment.MiddleLeft; + AddButton.ImageScaling = ToolStripItemImageScaling.None; + AddButton.ImageTransparentColor = Color.Magenta; + AddButton.Name = "AddButton"; + AddButton.Size = new Size(28, 28); + AddButton.Text = "Add Region"; + AddButton.Click += ToolSelectedChanged; + // + // MoveButton + // + MoveButton.AutoSize = false; + MoveButton.CheckOnClick = true; + MoveButton.DisplayStyle = ToolStripItemDisplayStyle.Image; + MoveButton.Image = (Image)resources.GetObject("MoveButton.Image"); + MoveButton.ImageScaling = ToolStripItemImageScaling.None; + MoveButton.ImageTransparentColor = Color.Magenta; + MoveButton.Name = "MoveButton"; + MoveButton.Size = new Size(28, 28); + MoveButton.Text = "Move Region"; + MoveButton.Click += ToolSelectedChanged; + // + // ResizeButton + // + ResizeButton.AutoSize = false; + ResizeButton.CheckOnClick = true; + ResizeButton.DisplayStyle = ToolStripItemDisplayStyle.Image; + ResizeButton.Image = (Image)resources.GetObject("ResizeButton.Image"); + ResizeButton.ImageScaling = ToolStripItemImageScaling.None; + ResizeButton.ImageTransparentColor = Color.Magenta; + ResizeButton.Name = "ResizeButton"; + ResizeButton.Size = new Size(28, 28); + ResizeButton.Text = "Resize Region"; + ResizeButton.Click += ToolSelectedChanged; + // + // splitter1 + // + splitter1.BackColor = SystemColors.ActiveCaption; + splitter1.Dock = DockStyle.Right; + splitter1.Location = new Point(803, 0); + splitter1.Margin = new Padding(4, 3, 4, 3); + splitter1.Name = "splitter1"; + splitter1.Size = new Size(6, 545); + splitter1.TabIndex = 3; + splitter1.TabStop = false; + // + // tabPage2 + // + tabPage2.Controls.Add(RespawnPanel); + tabPage2.Controls.Add(toolStrip3); + tabPage2.Controls.Add(RespawnsFilter); + tabPage2.Controls.Add(RespawnTools); + tabPage2.Location = new Point(4, 24); + tabPage2.Margin = new Padding(4, 3, 4, 3); + tabPage2.Name = "tabPage2"; + tabPage2.Size = new Size(284, 517); + tabPage2.TabIndex = 1; + tabPage2.Text = "Respawns"; + tabPage2.UseVisualStyleBackColor = true; + // + // RespawnPanel + // + RespawnPanel.AutoScroll = true; + RespawnPanel.Dock = DockStyle.Fill; + RespawnPanel.Location = new Point(0, 48); + RespawnPanel.Margin = new Padding(4, 3, 4, 3); + RespawnPanel.Name = "RespawnPanel"; + RespawnPanel.Size = new Size(284, 444); + RespawnPanel.TabIndex = 3; + // + // toolStrip3 + // + toolStrip3.Dock = DockStyle.Bottom; + toolStrip3.GripStyle = ToolStripGripStyle.Hidden; + toolStrip3.Items.AddRange(new ToolStripItem[] { RespawnsRemoveSelected, ResapwnsHideRegion, ResapwnsShowRegion, toolStripSeparator2, ResapwnsFocusRegion }); + toolStrip3.Location = new Point(0, 492); + toolStrip3.Name = "toolStrip3"; + toolStrip3.RenderMode = ToolStripRenderMode.Professional; + toolStrip3.Size = new Size(284, 25); + toolStrip3.TabIndex = 7; + toolStrip3.Text = "toolStrip3"; + // + // RespawnsRemoveSelected + // + RespawnsRemoveSelected.Alignment = ToolStripItemAlignment.Right; + RespawnsRemoveSelected.DisplayStyle = ToolStripItemDisplayStyle.Image; + RespawnsRemoveSelected.Image = (Image)resources.GetObject("RespawnsRemoveSelected.Image"); + RespawnsRemoveSelected.ImageTransparentColor = Color.Magenta; + RespawnsRemoveSelected.Name = "RespawnsRemoveSelected"; + RespawnsRemoveSelected.Size = new Size(23, 22); + RespawnsRemoveSelected.Text = "Remove Selected"; + RespawnsRemoveSelected.Click += RespawnsRemoveSelected_Click; + // + // ResapwnsHideRegion + // + ResapwnsHideRegion.DisplayStyle = ToolStripItemDisplayStyle.Image; + ResapwnsHideRegion.Image = (Image)resources.GetObject("ResapwnsHideRegion.Image"); + ResapwnsHideRegion.ImageTransparentColor = Color.Magenta; + ResapwnsHideRegion.Name = "ResapwnsHideRegion"; + ResapwnsHideRegion.Size = new Size(23, 22); + ResapwnsHideRegion.Text = "Hide Region"; + ResapwnsHideRegion.Click += ResapwnsHideRegion_Click; + // + // ResapwnsShowRegion + // + ResapwnsShowRegion.DisplayStyle = ToolStripItemDisplayStyle.Image; + ResapwnsShowRegion.Image = (Image)resources.GetObject("ResapwnsShowRegion.Image"); + ResapwnsShowRegion.ImageTransparentColor = Color.Magenta; + ResapwnsShowRegion.Name = "ResapwnsShowRegion"; + ResapwnsShowRegion.Size = new Size(23, 22); + ResapwnsShowRegion.Text = "Show Region"; + ResapwnsShowRegion.Click += ResapwnsShowRegion_Click; + // + // toolStripSeparator2 + // + toolStripSeparator2.Name = "toolStripSeparator2"; + toolStripSeparator2.Size = new Size(6, 25); + // + // ResapwnsFocusRegion + // + ResapwnsFocusRegion.DisplayStyle = ToolStripItemDisplayStyle.Image; + ResapwnsFocusRegion.Image = (Image)resources.GetObject("ResapwnsFocusRegion.Image"); + ResapwnsFocusRegion.ImageTransparentColor = Color.Magenta; + ResapwnsFocusRegion.Name = "ResapwnsFocusRegion"; + ResapwnsFocusRegion.Size = new Size(23, 22); + ResapwnsFocusRegion.Text = "Focus Region"; + ResapwnsFocusRegion.Click += ResapwnsFocusRegion_Click; + // + // RespawnsFilter + // + RespawnsFilter.Dock = DockStyle.Top; + RespawnsFilter.DropDownStyle = ComboBoxStyle.DropDownList; + RespawnsFilter.FormattingEnabled = true; + RespawnsFilter.Location = new Point(0, 25); + RespawnsFilter.Margin = new Padding(4, 3, 4, 3); + RespawnsFilter.Name = "RespawnsFilter"; + RespawnsFilter.Size = new Size(284, 23); + RespawnsFilter.TabIndex = 6; + RespawnsFilter.SelectedIndexChanged += RespawnsFilter_SelectedIndexChanged; + // + // RespawnTools + // + RespawnTools.GripStyle = ToolStripGripStyle.Hidden; + RespawnTools.Items.AddRange(new ToolStripItem[] { RespawnsSelectAll, RespawnsSelectNone, RespawnsInvertSelection }); + RespawnTools.Location = new Point(0, 0); + RespawnTools.Name = "RespawnTools"; + RespawnTools.RenderMode = ToolStripRenderMode.Professional; + RespawnTools.Size = new Size(284, 25); + RespawnTools.TabIndex = 2; + RespawnTools.Text = "toolStrip1"; + // + // RespawnsSelectAll + // + RespawnsSelectAll.DisplayStyle = ToolStripItemDisplayStyle.Image; + RespawnsSelectAll.Image = (Image)resources.GetObject("RespawnsSelectAll.Image"); + RespawnsSelectAll.ImageTransparentColor = Color.Magenta; + RespawnsSelectAll.Name = "RespawnsSelectAll"; + RespawnsSelectAll.Size = new Size(23, 22); + RespawnsSelectAll.Text = "Select All"; + RespawnsSelectAll.Click += RespawnsSelectAll_Click; + // + // RespawnsSelectNone + // + RespawnsSelectNone.DisplayStyle = ToolStripItemDisplayStyle.Image; + RespawnsSelectNone.Image = (Image)resources.GetObject("RespawnsSelectNone.Image"); + RespawnsSelectNone.ImageTransparentColor = Color.Magenta; + RespawnsSelectNone.Name = "RespawnsSelectNone"; + RespawnsSelectNone.Size = new Size(23, 22); + RespawnsSelectNone.Text = "Select None"; + RespawnsSelectNone.Click += RespawnsSelectNone_Click; + // + // RespawnsInvertSelection + // + RespawnsInvertSelection.DisplayStyle = ToolStripItemDisplayStyle.Image; + RespawnsInvertSelection.Image = (Image)resources.GetObject("RespawnsInvertSelection.Image"); + RespawnsInvertSelection.ImageTransparentColor = Color.Magenta; + RespawnsInvertSelection.Name = "RespawnsInvertSelection"; + RespawnsInvertSelection.Size = new Size(23, 22); + RespawnsInvertSelection.Text = "Invert Selection"; + RespawnsInvertSelection.Click += RespawnsInvertSelection_Click; + // + // RegionTabs + // + RegionTabs.Controls.Add(tabPage2); + RegionTabs.Controls.Add(tabPage1); + RegionTabs.Dock = DockStyle.Right; + RegionTabs.Location = new Point(809, 0); + RegionTabs.Margin = new Padding(4, 3, 4, 3); + RegionTabs.Multiline = true; + RegionTabs.Name = "RegionTabs"; + RegionTabs.SelectedIndex = 0; + RegionTabs.Size = new Size(292, 545); + RegionTabs.SizeMode = TabSizeMode.FillToRight; + RegionTabs.TabIndex = 3; + RegionTabs.SelectedIndexChanged += RegionTabs_SelectedIndexChanged; + RegionTabs.Selecting += RegionTabs_Selecting; + // + // statusStrip1 + // + statusStrip1.Items.AddRange(new ToolStripItem[] { MapDetailsLabel }); + statusStrip1.Location = new Point(0, 545); + statusStrip1.Name = "statusStrip1"; + statusStrip1.Padding = new Padding(1, 0, 16, 0); + statusStrip1.Size = new Size(1101, 24); + statusStrip1.TabIndex = 4; + statusStrip1.Text = "statusStrip1"; + // + // MapDetailsLabel + // + MapDetailsLabel.BorderSides = ToolStripStatusLabelBorderSides.Right; + MapDetailsLabel.BorderStyle = Border3DStyle.Sunken; + MapDetailsLabel.Name = "MapDetailsLabel"; + MapDetailsLabel.Size = new Size(216, 19); + MapDetailsLabel.Text = "Map Name: {0} Width: {1} Height: {2}"; + // + // mapContainer1 + // + mapContainer1.AutoScroll = true; + mapContainer1.Controls.Add(MapImage); + mapContainer1.Dock = DockStyle.Fill; + mapContainer1.Location = new Point(52, 0); + mapContainer1.Margin = new Padding(4, 3, 4, 3); + mapContainer1.Name = "mapContainer1"; + mapContainer1.Size = new Size(751, 545); + mapContainer1.TabIndex = 2; + // + // MapImage + // + MapImage.Location = new Point(0, 0); + MapImage.Margin = new Padding(4, 3, 4, 3); + MapImage.Name = "MapImage"; + MapImage.Size = new Size(0, 0); + MapImage.SizeMode = PictureBoxSizeMode.AutoSize; + MapImage.TabIndex = 0; + MapImage.TabStop = false; + MapImage.Click += MapImage_Click; + MapImage.MouseDown += MapImage_MouseDown; + // + // tabPage1 + // + tabPage1.Controls.Add(MiningPanel); + tabPage1.Controls.Add(MiningFilter); + tabPage1.Controls.Add(MiningTools); + tabPage1.Controls.Add(toolStrip2); + tabPage1.Location = new Point(4, 24); + tabPage1.Name = "tabPage1"; + tabPage1.Size = new Size(284, 517); + tabPage1.TabIndex = 2; + tabPage1.Text = "Mining"; + tabPage1.UseVisualStyleBackColor = true; + // + // MiningPanel + // + MiningPanel.AutoScroll = true; + MiningPanel.Dock = DockStyle.Fill; + MiningPanel.Location = new Point(0, 48); + MiningPanel.Margin = new Padding(4, 3, 4, 3); + MiningPanel.Name = "MiningPanel"; + MiningPanel.Size = new Size(284, 444); + MiningPanel.TabIndex = 9; + // + // MiningFilter + // + MiningFilter.Dock = DockStyle.Top; + MiningFilter.DropDownStyle = ComboBoxStyle.DropDownList; + MiningFilter.FormattingEnabled = true; + MiningFilter.Location = new Point(0, 25); + MiningFilter.Margin = new Padding(4, 3, 4, 3); + MiningFilter.Name = "MiningFilter"; + MiningFilter.Size = new Size(284, 23); + MiningFilter.TabIndex = 10; + // + // MiningTools + // + MiningTools.GripStyle = ToolStripGripStyle.Hidden; + MiningTools.Items.AddRange(new ToolStripItem[] { MiningSelectAll, MiningSelectNone, MiningInvertSelection }); + MiningTools.Location = new Point(0, 0); + MiningTools.Name = "MiningTools"; + MiningTools.RenderMode = ToolStripRenderMode.Professional; + MiningTools.Size = new Size(284, 25); + MiningTools.TabIndex = 8; + MiningTools.Text = "toolStrip1"; + // + // MiningSelectAll + // + MiningSelectAll.DisplayStyle = ToolStripItemDisplayStyle.Image; + MiningSelectAll.Image = (Image)resources.GetObject("MiningSelectAll.Image"); + MiningSelectAll.ImageTransparentColor = Color.Magenta; + MiningSelectAll.Name = "MiningSelectAll"; + MiningSelectAll.Size = new Size(23, 22); + MiningSelectAll.Text = "Select All"; + // + // MiningSelectNone + // + MiningSelectNone.DisplayStyle = ToolStripItemDisplayStyle.Image; + MiningSelectNone.Image = (Image)resources.GetObject("MiningSelectNone.Image"); + MiningSelectNone.ImageTransparentColor = Color.Magenta; + MiningSelectNone.Name = "MiningSelectNone"; + MiningSelectNone.Size = new Size(23, 22); + MiningSelectNone.Text = "Select None"; + // + // MiningInvertSelection + // + MiningInvertSelection.DisplayStyle = ToolStripItemDisplayStyle.Image; + MiningInvertSelection.Image = (Image)resources.GetObject("MiningInvertSelection.Image"); + MiningInvertSelection.ImageTransparentColor = Color.Magenta; + MiningInvertSelection.Name = "MiningInvertSelection"; + MiningInvertSelection.Size = new Size(23, 22); + MiningInvertSelection.Text = "Invert Selection"; + // + // MiningRemoveSelected + // + MiningRemoveSelected.Alignment = ToolStripItemAlignment.Right; + MiningRemoveSelected.DisplayStyle = ToolStripItemDisplayStyle.Image; + MiningRemoveSelected.Image = (Image)resources.GetObject("MiningRemoveSelected.Image"); + MiningRemoveSelected.ImageTransparentColor = Color.Magenta; + MiningRemoveSelected.Name = "MiningRemoveSelected"; + MiningRemoveSelected.Size = new Size(23, 22); + MiningRemoveSelected.Text = "Remove Selected"; + // + // toolStrip2 + // + toolStrip2.Dock = DockStyle.Bottom; + toolStrip2.GripStyle = ToolStripGripStyle.Hidden; + toolStrip2.Items.AddRange(new ToolStripItem[] { MiningRemoveSelected, MiningHideRegion, MiningShowRegion, toolStripSeparator1, MiningFocusRegion }); + toolStrip2.Location = new Point(0, 492); + toolStrip2.Name = "toolStrip2"; + toolStrip2.RenderMode = ToolStripRenderMode.Professional; + toolStrip2.Size = new Size(284, 25); + toolStrip2.TabIndex = 11; + toolStrip2.Text = "toolStrip2"; + // + // MiningHideRegion + // + MiningHideRegion.DisplayStyle = ToolStripItemDisplayStyle.Image; + MiningHideRegion.Image = (Image)resources.GetObject("MiningHideRegion.Image"); + MiningHideRegion.ImageTransparentColor = Color.Magenta; + MiningHideRegion.Name = "MiningHideRegion"; + MiningHideRegion.Size = new Size(23, 22); + MiningHideRegion.Text = "Hide Region"; + // + // MiningShowRegion + // + MiningShowRegion.DisplayStyle = ToolStripItemDisplayStyle.Image; + MiningShowRegion.Image = (Image)resources.GetObject("MiningShowRegion.Image"); + MiningShowRegion.ImageTransparentColor = Color.Magenta; + MiningShowRegion.Name = "MiningShowRegion"; + MiningShowRegion.Size = new Size(23, 22); + MiningShowRegion.Text = "Show Region"; + // + // toolStripSeparator1 + // + toolStripSeparator1.Name = "toolStripSeparator1"; + toolStripSeparator1.Size = new Size(6, 25); + // + // MiningFocusRegion + // + MiningFocusRegion.DisplayStyle = ToolStripItemDisplayStyle.Image; + MiningFocusRegion.Image = (Image)resources.GetObject("MiningFocusRegion.Image"); + MiningFocusRegion.ImageTransparentColor = Color.Magenta; + MiningFocusRegion.Name = "MiningFocusRegion"; + MiningFocusRegion.Size = new Size(23, 22); + MiningFocusRegion.Text = "Focus Region"; + // + // VForm + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(1101, 569); + Controls.Add(mapContainer1); + Controls.Add(splitter1); + Controls.Add(RegionTabs); + Controls.Add(Tool); + Controls.Add(statusStrip1); + DoubleBuffered = true; + Icon = (Icon)resources.GetObject("$this.Icon"); + Margin = new Padding(4, 3, 4, 3); + Name = "VForm"; + Text = "Visualizer"; + FormClosing += VForm_FormClosing; + Load += VForm_Load; + Tool.ResumeLayout(false); + Tool.PerformLayout(); + tabPage2.ResumeLayout(false); + tabPage2.PerformLayout(); + toolStrip3.ResumeLayout(false); + toolStrip3.PerformLayout(); + RespawnTools.ResumeLayout(false); + RespawnTools.PerformLayout(); + RegionTabs.ResumeLayout(false); + statusStrip1.ResumeLayout(false); + statusStrip1.PerformLayout(); + mapContainer1.ResumeLayout(false); + mapContainer1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)MapImage).EndInit(); + tabPage1.ResumeLayout(false); + tabPage1.PerformLayout(); + MiningTools.ResumeLayout(false); + MiningTools.PerformLayout(); + toolStrip2.ResumeLayout(false); + toolStrip2.PerformLayout(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private System.Windows.Forms.ToolStrip Tool; + private System.Windows.Forms.ToolStripButton SelectButton; + private System.Windows.Forms.ToolStripButton AddButton; + private System.Windows.Forms.ToolStripButton MoveButton; + private System.Windows.Forms.ToolStripButton ResizeButton; + private Server.MirForms.Control.MapContainer mapContainer1; + private System.Windows.Forms.PictureBox MapImage; + private System.Windows.Forms.Splitter splitter1; + private System.Windows.Forms.ToolStripLabel toolStripLabel1; + private System.Windows.Forms.TabPage tabPage2; + private System.Windows.Forms.Panel RespawnPanel; + private System.Windows.Forms.ToolStrip RespawnTools; + private System.Windows.Forms.TabControl RegionTabs; + private System.Windows.Forms.ToolStripButton EndFocus; + private System.Windows.Forms.ToolStripSeparator FocusBreak; + private System.Windows.Forms.StatusStrip statusStrip1; + private System.Windows.Forms.ToolStripStatusLabel MapDetailsLabel; + private System.Windows.Forms.ToolStrip toolStrip3; + private System.Windows.Forms.ToolStripButton RespawnsRemoveSelected; + private System.Windows.Forms.ToolStripButton ResapwnsHideRegion; + private System.Windows.Forms.ToolStripButton ResapwnsShowRegion; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; + private System.Windows.Forms.ToolStripButton ResapwnsFocusRegion; + private System.Windows.Forms.ComboBox RespawnsFilter; + private System.Windows.Forms.ToolStripButton RespawnsInvertSelection; + private System.Windows.Forms.ToolStripButton RespawnsSelectAll; + private System.Windows.Forms.ToolStripButton RespawnsSelectNone; + private TabPage tabPage1; + private Panel MiningPanel; + private ComboBox MiningFilter; + private ToolStrip MiningTools; + private ToolStripButton MiningSelectAll; + private ToolStripButton MiningSelectNone; + private ToolStripButton MiningInvertSelection; + private ToolStrip toolStrip2; + private ToolStripButton MiningRemoveSelected; + private ToolStripButton MiningHideRegion; + private ToolStripButton MiningShowRegion; + private ToolStripSeparator toolStripSeparator1; + private ToolStripButton MiningFocusRegion; + } +} \ No newline at end of file diff --git a/Server.MirForms/VisualMapInfo/VForm.cs b/Server.MirForms/VisualMapInfo/VForm.cs new file mode 100644 index 0000000..f8caa50 --- /dev/null +++ b/Server.MirForms/VisualMapInfo/VForm.cs @@ -0,0 +1,543 @@ +using Server.MirForms.VisualMapInfo.Class; +using Server.MirForms.VisualMapInfo.Control; +using Microsoft.VisualBasic.PowerPacks; +using Server.MirEnvir; +using Server.MirDatabase; + +namespace Server.MirForms.VisualMapInfo +{ + public partial class VForm : Form + { + ShapeContainer Canvas = new ShapeContainer(); + + public Envir Envir => SMain.EditEnvir; + + public Point MouseDownLocation; + + public VForm() + { + InitializeComponent(); + } + + private void VForm_Load(object sender, EventArgs e) + { + InitializeMap(); + InitializeMineInfo(); + InitializeRespawnInfo(); + VisualizerGlobal.FocusModeActivated += FocusModeActivated; + } + + private void VForm_FormClosing(object sender, FormClosingEventArgs e) + { + VisualizerGlobal.ZoomLevel = 1; + VisualizerGlobal.MapInfo.Respawns.Clear(); + + for (int i = 0; i < RespawnPanel.Controls.Count; i++) + { + try + { + RespawnEntry RespawnControl = (RespawnEntry)RespawnPanel.Controls[i]; + MirDatabase.RespawnInfo NewRespawnZone = new MirDatabase.RespawnInfo(); + + NewRespawnZone.Location = new Point(RespawnControl.X, RespawnControl.Y); + NewRespawnZone.MonsterIndex = RespawnControl.MonsterIndex; + NewRespawnZone.Spread = RespawnControl.Range; + NewRespawnZone.Count = Convert.ToUInt16(RespawnControl.Count.Text); + NewRespawnZone.Delay = Convert.ToUInt16(RespawnControl.Delay.Text); + NewRespawnZone.RoutePath = RespawnControl.RoutePath; + NewRespawnZone.Direction = RespawnControl.Direction; + NewRespawnZone.RandomDelay = RespawnControl.RandomDelay; + + VisualizerGlobal.MapInfo.Respawns.Add(NewRespawnZone); + } + catch (Exception) { continue; } + } + } + + private void InitializeMap() + { + ReadMap readMap = new ReadMap(); + + readMap.mapFile = VisualizerGlobal.MapInfo.FileName; + readMap.Load(); + + MapImage.Image = VisualizerGlobal.ClippingMap; + + Canvas.Parent = MapImage; + Canvas.BringToFront(); + + MapDetailsLabel.Text = + $"Map Name: {VisualizerGlobal.MapInfo.Title} Width: {VisualizerGlobal.ClippingMap.Width} Height: {VisualizerGlobal.ClippingMap.Height}"; + } + + private void InitializeMineInfo() + { + } + + private void InitializeRespawnInfo() + { + for (int i = 0; i < Envir.MonsterInfoList.Count; i++) + RespawnsFilter.Items.Add(Envir.MonsterInfoList[i]); + + RespawnsFilter.Items.Add("No Filter"); + RespawnsFilter.Text = "No Filter"; + + for (int i = 0; i < VisualizerGlobal.MapInfo.Respawns.Count; i++) + { + RespawnEntry RespawnRegion = new RespawnEntry(); + RespawnRegion.Dock = DockStyle.Top; + RespawnRegion.MonsterIndex = VisualizerGlobal.MapInfo.Respawns[i].MonsterIndex; + RespawnRegion.X = VisualizerGlobal.MapInfo.Respawns[i].Location.X; + RespawnRegion.Y = VisualizerGlobal.MapInfo.Respawns[i].Location.Y; + RespawnRegion.Range = VisualizerGlobal.MapInfo.Respawns[i].Spread; + RespawnRegion.Count.Text = VisualizerGlobal.MapInfo.Respawns[i].Count.ToString(); + RespawnRegion.Delay.Text = VisualizerGlobal.MapInfo.Respawns[i].Delay.ToString(); + RespawnRegion.RoutePath = VisualizerGlobal.MapInfo.Respawns[i].RoutePath; + RespawnRegion.Direction = VisualizerGlobal.MapInfo.Respawns[i].Direction; + RespawnRegion.RandomDelay = VisualizerGlobal.MapInfo.Respawns[i].RandomDelay; + RespawnRegion.HideControl(); + + RespawnPanel.Controls.Add(RespawnRegion); + + RespawnRegion.RegionHighlight.Parent = Canvas; + } + } + private void RedrawMap() + { + Bitmap Map = new Bitmap( + VisualizerGlobal.ClippingMap.Width * VisualizerGlobal.ZoomLevel, + VisualizerGlobal.ClippingMap.Height * VisualizerGlobal.ZoomLevel); + + using (Graphics g = Graphics.FromImage(Map)) + { + g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; + g.DrawImage(VisualizerGlobal.ClippingMap, 0, 0, Map.Width, Map.Height); + } + + MapImage.Image = Map; + + if (VisualizerGlobal.SelectedFocusType == VisualizerGlobal.FocusType.Respawn) + VisualizerGlobal.FocusRespawnEntry.UpdateForFocus(); + } + + private void FocusModeActivated(object sender, EventArgs e) + { + for (int i = RespawnPanel.Controls.Count - 1; i > -1; i--) + try + { + RespawnEntry RespawnControl = (RespawnEntry)RespawnPanel.Controls[i]; + + RespawnControl.Visible = false; + RespawnControl.RegionHighlight.Visible = false; + } + catch (Exception) + { + continue; + } + if (VisualizerGlobal.SelectedFocusType == VisualizerGlobal.FocusType.Respawn) + { + VisualizerGlobal.FocusRespawnEntry.Visible = true; + VisualizerGlobal.FocusRespawnEntry.RegionHighlight.Visible = true; + VisualizerGlobal.FocusRespawnEntry.UpdateForFocus(); + } + + EndFocus.Visible = true; + FocusBreak.Visible = true; + + ToolSelectedChanged(MoveButton, null); + } + + private void ToolSelectedChanged(object sender, EventArgs e) + { + MapImage.Cursor = Cursors.Arrow; + + ToolStripButton[] ToolButtons = new ToolStripButton[] { SelectButton, AddButton, MoveButton, ResizeButton }; + + foreach (var Tool in ToolButtons) + Tool.Checked = false; + + ToolStripButton ToolSender = (ToolStripButton)sender; + ToolSender.Checked = true; + + switch (ToolSender.Text) + { + case "Select Region": + VisualizerGlobal.SelectedTool = VisualizerGlobal.Tool.Select; + VisualizerGlobal.Cursor = Cursors.Arrow; + break; + case "Add Region": + VisualizerGlobal.SelectedTool = VisualizerGlobal.Tool.Add; + VisualizerGlobal.Cursor = Cursors.UpArrow; + break; + case "Move Region": + VisualizerGlobal.SelectedTool = VisualizerGlobal.Tool.Move; + VisualizerGlobal.Cursor = Cursors.SizeAll; + break; + case "Resize Region": + VisualizerGlobal.SelectedTool = VisualizerGlobal.Tool.Resize; + VisualizerGlobal.Cursor = Cursors.SizeWE; + break; + default: + break; + } + } + + private void EndFocus_Click(object sender, EventArgs e) + { + EndFocus.Visible = false; + FocusBreak.Visible = false; + + RespawnsFilter.Enabled = true; + RespawnsRemoveSelected.Enabled = true; + + VisualizerGlobal.ZoomLevel = 1; + RedrawMap(); + + if (VisualizerGlobal.SelectedFocusType == VisualizerGlobal.FocusType.Respawn) + RespawnsFilter_SelectedIndexChanged(RespawnsFilter, null); + + VisualizerGlobal.FocusRespawnEntry = null; + VisualizerGlobal.SelectedFocusType = VisualizerGlobal.FocusType.None; + } + + private void MapImage_Click(object sender, EventArgs e) + { + if (RegionTabs.SelectedTab.Text == "Respawns") + if (VisualizerGlobal.SelectedTool == VisualizerGlobal.Tool.Add) + { + RespawnEntry RespawnControl = new RespawnEntry() + { + Dock = DockStyle.Top, + X = MouseDownLocation.X, + Y = MouseDownLocation.Y, + Range = 50 + }; + + RespawnControl.ShowControl(); + RespawnControl.RegionHighlight.Parent = Canvas; + + RespawnPanel.Controls.Add(RespawnControl); + + ToolSelectedChanged(MoveButton, e); + } + } + + private void RegionTabs_SelectedIndexChanged(object sender, EventArgs e) + { + } + + private void MapImage_MouseDown(object sender, MouseEventArgs e) + { + if (VisualizerGlobal.SelectedTool == VisualizerGlobal.Tool.Select) return; + + MouseDownLocation = e.Location; + } + + protected override CreateParams CreateParams + { + get + { + CreateParams cp = base.CreateParams; + cp.ExStyle |= 0x02000000; // Turn on WS_EX_COMPOSITED + return cp; + } + } + + // Quick Keys + protected override bool ProcessCmdKey(ref Message msg, Keys keyData) + { + if (keyData == Keys.M) + { + ToolSelectedChanged(MoveButton, new EventArgs()); + + return true; + } + + if (keyData == Keys.S) + { + ToolSelectedChanged(SelectButton, new EventArgs()); + + return true; + } + + if (keyData == Keys.R) + { + ToolSelectedChanged(ResizeButton, new EventArgs()); + + return true; + } + + if (keyData == Keys.A) + { + ToolSelectedChanged(AddButton, new EventArgs()); + + return true; + } + + if (keyData == Keys.Add && VisualizerGlobal.FocusModeActive == true) + { + if (VisualizerGlobal.ZoomLevel != 6) + VisualizerGlobal.ZoomLevel++; + + RedrawMap(); + + return true; + } + + if (keyData == Keys.Subtract && VisualizerGlobal.FocusModeActive == true) + { + if (VisualizerGlobal.ZoomLevel != 1) + VisualizerGlobal.ZoomLevel--; + + RedrawMap(); + + return true; + } + + if (keyData == Keys.Left && VisualizerGlobal.FocusModeActive == true) + { + if (VisualizerGlobal.SelectedFocusType == VisualizerGlobal.FocusType.Respawn) + { + VisualizerGlobal.FocusRespawnEntry.X--; + VisualizerGlobal.FocusRespawnEntry.Range = VisualizerGlobal.FocusRespawnEntry.tempRange; + } + + return true; + } + + if (keyData == Keys.Right && VisualizerGlobal.FocusModeActive == true) + { + if (VisualizerGlobal.SelectedFocusType == VisualizerGlobal.FocusType.Respawn) + { + VisualizerGlobal.FocusRespawnEntry.X++; + VisualizerGlobal.FocusRespawnEntry.Range = VisualizerGlobal.FocusRespawnEntry.tempRange; + } + + return true; + } + + if (keyData == Keys.Up && VisualizerGlobal.FocusModeActive == true) + { + if (VisualizerGlobal.SelectedFocusType == VisualizerGlobal.FocusType.Respawn) + { + VisualizerGlobal.FocusRespawnEntry.Y--; + VisualizerGlobal.FocusRespawnEntry.Range = VisualizerGlobal.FocusRespawnEntry.tempRange; + } + + return true; + } + + if (keyData == Keys.Down && VisualizerGlobal.FocusModeActive == true) + { + if (VisualizerGlobal.SelectedFocusType == VisualizerGlobal.FocusType.Respawn) + { + VisualizerGlobal.FocusRespawnEntry.Y++; + VisualizerGlobal.FocusRespawnEntry.Range = VisualizerGlobal.FocusRespawnEntry.tempRange; + } + + return true; + } + + if (keyData == Keys.Escape && VisualizerGlobal.FocusModeActive == true) + { + EndFocus_Click(EndFocus, null); + + return true; + } + + return base.ProcessCmdKey(ref msg, keyData); + } + + #region "START Mining Tool Bar" + + private void MiningSelectAll_Click(object sender, EventArgs e) + { + } + + private void MiningSelectNone_Click(object sender, EventArgs e) + { + } + + private void MiningInvertSelection_Click(object sender, EventArgs e) + { + } + + private void MiningRemoveSelected_Click(object sender, EventArgs e) + { + } + + private void MiningHideRegion_Click(object sender, EventArgs e) + { + } + + private void MiningShowRegion_Click(object sender, EventArgs e) + { + } + + private void MiningFocusRegion_Click(object sender, EventArgs e) + { + } + + private void MiningFilter_SelectedIndexChanged(object sender, EventArgs e) + { + } + + #endregion "END Mining Tool Bar" + + #region "START Respawn Tool Bar + + private void RespawnsSelectAll_Click(object sender, EventArgs e) + { + for (int i = RespawnPanel.Controls.Count - 1; i > -1; i--) + { + RespawnEntry RespawnControl = (RespawnEntry)RespawnPanel.Controls[i]; + RespawnControl.Selected.Checked = true; + } + } + + private void RespawnsSelectNone_Click(object sender, EventArgs e) + { + for (int i = RespawnPanel.Controls.Count - 1; i > -1; i--) + { + RespawnEntry RespawnControl = (RespawnEntry)RespawnPanel.Controls[i]; + RespawnControl.Selected.Checked = false; + } + } + + private void RespawnsRemoveSelected_Click(object sender, EventArgs e) + { + if (RespawnPanel.Controls.Count == 0) return; + + DialogResult result = MessageBox.Show("Remove selected records?", "", MessageBoxButtons.YesNoCancel); + if (result != DialogResult.Yes) return; + + for (int i = RespawnPanel.Controls.Count; i > -1; --i) + { + try + { + RespawnEntry RespawnControl = (RespawnEntry)RespawnPanel.Controls[i]; + if (RespawnControl.Selected.Checked == true) + { + RespawnControl.RemoveEntry(); + } + } + catch (Exception) + { + continue; + } + } + } + + private void ResapwnsHideRegion_Click(object sender, EventArgs e) + { + for (int i = RespawnPanel.Controls.Count - 1; i > -1; i--) + { + try + { + RespawnEntry RespawnControl = (RespawnEntry)RespawnPanel.Controls[i]; + if (RespawnControl.Selected.Checked == true) + RespawnControl.HideRegion(); + } + catch (Exception) + { + continue; + } + } + } + + private void ResapwnsShowRegion_Click(object sender, EventArgs e) + { + for (int i = RespawnPanel.Controls.Count - 1; i > -1; i--) + { + try + { + RespawnEntry RespawnControl = (RespawnEntry)RespawnPanel.Controls[i]; + if (RespawnControl.Selected.Checked == true) + RespawnControl.ShowRegion(); + } + catch (Exception) + { + continue; + } + } + } + + private void ResapwnsFocusRegion_Click(object sender, EventArgs e) + { + VisualizerGlobal.SelectedTool = VisualizerGlobal.Tool.Focus; + VisualizerGlobal.Cursor = Cursors.Hand; + + RespawnsFilter.Enabled = false; + RespawnsRemoveSelected.Enabled = false; + } + + private void RespawnsInvertSelection_Click(object sender, EventArgs e) + { + for (int i = RespawnPanel.Controls.Count - 1; i > -1; i--) + { + RespawnEntry RespawnControl = (RespawnEntry)RespawnPanel.Controls[i]; + RespawnControl.Selected.Checked = !RespawnControl.Selected.Checked; + } + } + + private void RespawnsFilter_SelectedIndexChanged(object sender, EventArgs e) + { + MonsterInfo info = RespawnsFilter.SelectedItem as MonsterInfo; + + VisualizerGlobal.ZoomLevel = 1; + + if (RespawnsFilter.Text == "No Filter") + for (int i = RespawnPanel.Controls.Count - 1; i > -1; i--) + try + { + RespawnEntry RespawnControl = (RespawnEntry)RespawnPanel.Controls[i]; + + RespawnControl.Visible = true; + if (!RespawnControl.RegionHidden) + RespawnControl.RegionHighlight.Visible = true; + } + catch (Exception) + { + continue; + } + else + for (int i = RespawnPanel.Controls.Count - 1; i > -1; i--) + try + { + RespawnEntry RespawnControl = (RespawnEntry)RespawnPanel.Controls[i]; + + if (RespawnControl.MonsterIndex == info.Index) + { + RespawnControl.Visible = true; + + if (!RespawnControl.RegionHidden) + RespawnControl.RegionHighlight.Visible = true; + } + else + { + RespawnControl.RegionHighlight.Visible = false; + RespawnControl.Visible = false; + } + } + catch (Exception) + { + continue; + } + } + + #endregion "END Respawn Tool Bar + + private void RegionTabs_Selecting(object sender, TabControlCancelEventArgs e) + { + if (VisualizerGlobal.SelectedFocusType != VisualizerGlobal.FocusType.None) + e.Cancel = true; + } + + + + + + + + } +} \ No newline at end of file diff --git a/Server.MirForms/VisualMapInfo/VForm.resx b/Server.MirForms/VisualMapInfo/VForm.resx new file mode 100644 index 0000000..6643dc1 --- /dev/null +++ b/Server.MirForms/VisualMapInfo/VForm.resx @@ -0,0 +1,2067 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 133, 17 + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAALvSURBVEhL7VTNSxRxGP71sem2We6H7ZLrrrO/2V0dndmP + WVwU2lPYuVMQCZHhIfBQHiIMJKOsND+wVjelL0llOwiGKIUkeemQ1aFgIQ8d+hOkgnSm95mmg+ka6iWo + B16Gnd87z/P+nvd9l/3H34mh6mp3J+cdHYFA56AocvP1GuiM7ejh/Og1QRjsFMXGrCTtMY/yI6Oqlh5R + nBpNJLTRmhptuKJiMR0MBszjVbjBecOzSGQJufOStNzF+RnzKD/Ssmwfr6r61B+JaH2Koo0mk4bIgChK + ZopROd2w4b7f//1eLGbkPVZV7bogZMyU/GhjbCdVll5IJPTZSERPk9BYXZ32oLIyBxHDlmDw1ItodOm1 + qho5wyQyI0lf+skuk2ZjTKrq3p5AYHIhmdSH6OP5WEwfT6W0R3ST9vLytpex2NJYba3x/lU8rs+RPegB + xE2KPwMivaKYNaqPx7WHFNn6eg3EEMNveI/KQW5+tjmMiOL+vmAw+zaV0mEHbENP8IQQyLs5b9pU5b/D + sEsQ3oD4NvVjMBrV0FhU3y4IV7ZFbkwLXX+aPKZx1CdlWe+SZe0pPWHb3XB41XRtCiCnuW6aIhtoYvQp + In1OIiCGGEYTfchwnuvbishVQWgEeYYsmVEUHSIksHKT83eYHNgFoRGa/zuh0GJ3nmVcF5cE4SSRL2MH + eqlS+D6hKF9bvN6zLW637bLf/wTVQwTn6AlEWn0+waTIj9NOZ9FAKPQeCwSvsdEjsvztmMt1TmHMRinW + EsY8zaWlE9iDabod+gKRCz7fLSzqT6Z1oDJmsTJ2iFb+AywxG7tyxOFopWMPhYPCiShgLNDs9c4ir5sE + YOVxl2uAzuzgoefa6aJO4d/QKdlsJ+i/JkeL9vFwcfFFeuejcFHso8AtiigOUnJlg8czNhQOfz5fVjbn + sliImzlNgfUBESqxyGG1ltoLC30HGCv2ki10tIsCVf2K3W4SIyVnSUEBJ1U3vtuQfBvY+rL962DsB39n + L1kxYoCuAAAAAElFTkSuQmCC + + + + + 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 + TkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABcAAAAXCAYAAADgKtSgAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHKSURBVEhLrZWxagJBFEVdE0GCpkogpkuRkCISiTZpU4V8 + hWDrH/gFNoKVn2JhlS6f4EcIikUSsNjcs+xbZmd3cXFz4bIzb2fvnXlvntZKIhDrDpn/C4L1en13OBw+ + V6vVg+ZN8Zw4L6sgEt7tdt/L5TLcbrc/i8XiWfGW2BA5xUlIhCeTSRgEQcgTg/l83tf7tniSQUbYaAbT + 6XSgdWZQOkUsbOQJ+wZa1xFLGyQ7Dj0g6gOD2Wz2ou+OGqRSARTrij3GJq75q9hnbCc4VoNMjmOhnvjE + 2ImR667FzKCoBrnF81EUcw3iE3BNkz6o0yDcY1t8Cvl+v99/Se9KpNGi9NTpPJyr7Hyz2fyOx+M36d2I + F+JZJC426TzXAChO8QYmlBcz4eFw+KH4vZjaObkhRy1yZgaxEDlMihfHkoJ6wo8i9z6Vc8CAKrepOgaR + kgMTd4HwaDR613cI34qXsU4ibEgMxI5fA5e2Y62jD0gFOzbhwt8aXkQGdF6egQnHO0aYAhY2kI/kBG4N + XGEvx6WFDZkacI89YXKc6ciySJ2ABonvcekcH4PVgOvF/SW/1/G8krCBE3BvaQw6z/5DKwsbMECMluZZ + Ise12h+i0wrG7aRA3AAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABkAAAASCAYAAACuLnWgAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJsSURBVEhLlZVPbxJBGMZZWAH521Bb0jaUkFS0tTZae1DT + i6a92JM3LwbihQvfgVJs7WIkwUCiIT1482aCJ4UDxi/BwYMnTiRwUhIO4/NMdiht2QXf5MnMzjP7/nZe + ZgaHTWidTieO1gU5+czBsZjmTw2t3W4n+v3+H/SvQ26IicbDSb/Vat1E3wvp0MygEUAg8HwDCkDjSdjq + 9Hu93t9arbaFZ865Bl3+mCsxAhhvPzMHIatQBOJqxiFu+h/PmhJUKpW2MRaEbEEjwInxSSyvvlSQJLQA + sSSq9mw99Hf3DFH98FWCDMPYwbglaAQ4KpRFaG5bRBb3FOQOtAzxZYI8Zhukf3cnKxLJ58Io1iaB1MrP + AYf5otDdEeH2LAh/aENCpkV87UCEI0nh8y+JwuuSBJXL5QfIe+F3dA6Hw1/fvv9A8qjQNKfQnLrw+uLo + azPJ7QnLlqBm86cYDAa/kXe8xA5Xo9FI8gtyh6fC5fILXQ8LXyBpfqt9xBL7IhCKSdBRoSi63e4gm80+ + Rd4lyMf8hJDkrVQq9wjK59/JUs3N78ok8B5B96FNaANaN9tN+utbryTo5LQqAel0+hk8np0LK2HNWLsA + a0nQ8ZszEY29UBBuzTVoBYpCi2a7Qv/xk2PxvvpFAlKp1AHGb0NcxeWzJTvcDUHuDrlLzs+J7e7iORlb + AQGcG4Imb2OIRkiBTIjVOfHS57xMJrOP51uQLUAFDbkiVTr0LU88/Vwu9xD9BMQSETDpnrsSChQw7yTL + u6ter7M89Oehme8uFZzIpCyR5S0McZw+53H+zAAVqvaW/yeQnf9fMe3lKb7D8Q+ZrpBu3HOQvAAAAABJ + RU5ErkJggg== + + + + 873, 17 + + + 313, 17 + + + 873, 17 + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJbSURBVDhPtZLdT1JhHMfdal5A60aIWq2t5hXrKuecV6z5 + N/AfFJWitJzTNEUizXh/caAzi2AcfNmOAr6AvCgIgkaMlqIZaEuLpm602a379shOGrNZN322387Zs9/3 + 8zzn95yS/4bVar3W96LPo9erPSaT5jqzfDo0TZf1D/S3UJQ96HK5vmezGaTeJWF+bc7rDRp/R+fjJqPR + WMa0F2O2mC9HIpHc7t4ONjYzWEkvw9CrQ4+iC7OhAFwTNHxBD7QmbU4qlV5hYsd0yNqEu3u72P+xjz3y + 3P6yhZXVZSwlYgjNB+H1T2ImMAWnm4bkoVjIxI5RKrurpj2TeJtcwtb2ZyLZQe7bV2Q3PiKZSiAQnIHd + YYVKrUBjo6SKiRWj1ihhtVlIs6/wGYd1OIMZvxeDrwYg75JBdPc2mPaTOIbsGB51YIiUxfoSsqdSPCMz + qJfUobW9BY/amlErvneKYJjCuItGODqH1Q8rmPK6yfssFOoeaA1qdD5pR139/dNP4HSPIbIQ/k0wB6Xm + OXT/JqDgnBhDND5/JIjEwlBpFdAZNX8XjIwOkfseR2wxirX1dEEQf7MAtU55JGh4IP6zQCgUltopG9yT + zoJgPbNWECSSi9DoVTCa9JB3y9Dc2oSKigoWEyviglwu3/T6puENTON9OoVIPEROEAU1bIPFNohesx4i + 0Z1PpPcqqTOF1C/4fH4pm82+UVNzSyeVS5N2hy1P5nHgGLEfkF863yCpTVZXVxlZLNZNHo/HZmInEQgE + Z4nsXGVlZRmXy73I4XAulZeXc0mdP9yEaWMoKfkJdCyTYl98DUQAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGKSURBVDhP3ZJNSwJRGIXv+MFEQr8k3Ig4iRs/kAGjNq5C + x82EIIS0LbAiF/6AFsWAiNGE0CaJFoFthKFFSLvc5iLRRUwbRYTe7rmNUAZugw48zMt5z7kzXIb9P61w + NjgnnFvOgwNmeNgh80sSZ1OW5ZtUKtVtNBpvhUJhEovFCGCGhx0yyDodoSXObiAQsNrttj2dTsk0TTIM + g0IhRaAoivCwQwZZdETX7XariUTifjAYTEajEYFWq0WQYVQpEolSMrlOmUxG7ACy6KCLA2qlUunJtm2a + EY/Hqdm8I78/KMjldoT3PYMOujggqqrqda/XGw+HQwK6rlOxeET5/J4AM7zZHll00MUdyC6XayscDl9Y + lvXa7/epXq9TNqtTuVwVYIaHHTLIooMuDoAkj8ez5vP5DtPp9BW/sG6lUnnXNO0DYIaHHTKrPIvOV/Wn + lvlBQa/Xu82f+/wTK6AoSR3+E7zUGHs+Z6xzydgjMBk7c3qLdcrDY02jeeA7kcU65m864OF54DuRPxNj + n9zNDEMHyL8JAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAG8SURBVDhP3ZDPK8NhHMe/++Ur8/tAXPwB5LIwi8N+pNVE + aS6auXyRRXJwoZZfhx04Ia0v0spq5YDkoOZgtRy+yc3KQXawNsVcJlY+nvfju/LjIFfvevV8en/e76en + R/h/Kmf0MNYYx4xzFczwsEPmhzSMXlEUj1wuVyISiTz4fL4Xm81GADM87JBBVu1wFTOmTCZTPBaLZfP5 + PIXDYZJlmdrazByz2cw97JBBFh3e1el0TofDcZpOp19yuRyBaDRKkCxvU0eHlbq6usnj8fAdQBYddHHB + jt/vv8xms1TAbrfT4eEJNTe3cIaGJrj3OYMOurjA6nQ6D5LJ5HMmkyEgSRJNTs7T6OgMBzO8wh5ZdNDF + H4harXbAYrHsxuPxu1QqRaFQiAYHJVpa2uZg5t7ZGNXtt77WLDRco4MuLoA0er2+3Wg0zrnd7j32YYlA + IPDk9XrfAGZ44kbto/QwTUKwMoHOR/WrSthFLQaDYZids+yJAaDxlV0Iy6W3wnrFVf/9CAlbVQpnszqo + 9n7RaqViTfXRd+CriV+0UhZkL1BAU7KTCjP3/6TFUqX+ppFwqs4fNV4UFMYMCj+5BOEdvEoXV+jjkasA + AAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAFaSURBVDhP7ZA9S0JRGMd95UZCX0akm1t6hUuCQTnF1ZYb + gVtLSyAFDvcDNCVECAlSQ0G02SJc2oomhyaHRAe5LYYIPZ3fUaHoG0QP/DgP/5fD4YT+3qwoCopTxb3i + cQ47Gh6ZXxNWbBqGcZfP57utVmtUqVQmmUxGgB0NjwzZeUfPkuIgmUz6nU4nmE6n0mw2pV6vy+qqqTFN + U2t4ZMjS0d1oNGpblvUwGAwm4/FYoN1uCxM0GvJi5WQ3tyGO42gPyNKhywUX1Wr1OQgCWZDNZuXp6kZG + lqU523a09j1Dhy4XrNu2fdvr9T6Gw6GA67pysn8or4UtDTvawidLhy5/YEQikZ10On3p+/5bv9+Xhnp6 + qeRKrXauYUfDI0OWDl0uYMKxWGwtkUgcF4vFa/VhXc/z3svl8iewo+GRIUtnVv05y8pMxePxPXUeqSd6 + wD7XUmRm0f+ZTSj0BQoq7hKHIEm9AAAAAElFTkSuQmCC + + + + 313, 17 + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAD7SURBVDhP3ZExaoRgEIU9hDaWW+QOnsDaMsEq4LLRJI2k + EEQvYO+drAQhYGUhgiIIWigiMtknw5IwmwvsB4/5x/fBj6o8GHEcn6Ioer7O871wd2JdEgTBS9d1Bf0D + OjisS3zfv+z7Ttu2idR1TejgsC5xXfdtXVdaluVP+r6nNE0JHRzWJY7juPM8U5Ik1DQNTdN0TOwIOjis + S2zbfh/HkcIwPJLn+e1cVRWhg8O6xLKsj2EYqCxL8jzvFuxt2xI6OKxLTNP8xPvigxVFgduOiR1BB4d1 + iWEYr1mWfV9/13Hj7+AZOjisS3Rdf1JV9axp2te9oIPD+mOgKD+PfhFtj0vEBQAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADLSURBVDhP3ZExCoNAEEU9hDaWFrmDJ7C2TLAKKMmSpJEU + Nno/20AuYKOIghaKiEz8MN1MLuCDz8K+B1usdTCKovDyPD/vZ6KNnce5JMuyS9M0H/oDHBrOJWma3rZt + o3Vd1cGh4VxijLkvy0LzPKuDQ8O5JI5jM00TjeOoDg4N55Ioih7DMFDXderg0HAuCcPw2fc91XWtDg4N + 55IgCF5t21JVVerg0HAu8X3/Wpbld/8u8Tru4NBwLnFd92TbduI4zlsbHBrOj4Fl/QBr0SNeThH2IgAA + AABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAKlSURBVDhPdVLfS1pxFPfu3qnX6ZyZU7J0CmPD5RSmNl+m + DHyI9eBSmgXroUQn9ovhi1BjjoEUpLPIYiKDTRIipOFe9rh/YLG3rf0Di0UjGURRfPc5QlGtDny433Pu + +X0+knOEA3jgMiA7AdIvAfT/CP8Jv7CwcHd1dTVXq9W+4ru9vLy8vbi4uD4xMVHo6uq6B58rHo/nvkql + 0uJ9KolQrVYT9Xp9s1gssvHxcTY4OLgXjUb3JicnWS6XY6lU6lcymXzr9Xp/qNVqC2KOE/CVSuXZ2tra + QTweZ52dnXWTyRTWarW3gNtmszkSCoU+ZjIZNjU1xRwOx65MJruBuGYCLpvN2lF9C9WY1Wp9DZsCEACa + mSDv6el5OjIywkZHR5nT6WRIcNyBUCqV3szMzDCbzfYJOgWfXZBoMBieo5u51tbWeZ1Ol4FNBTT9ZEtL + S9+GhoaY0WgMQ6fKZ4UcpYAIXAsEAo/b2tqe4E3XkYhIsIPqBxqN5g50avki4eBnisViDYvFsgVdQ0Zx + bGxs02637ygUCgM5kfEC4TG/2+fzHXZ0dPyFriOj0N7eHsTWH+GtBOQAtXteJzK/3z/c19fH0O0GdOJC + s6KiUCi8KJfLc4lEYh4/U2SjnyeEEurC4fAXEIpJpdL30GmREm5gYMC8srLCcEoWiUSYXq8fhp26IUoT + aFnXu7u7i8FgkImiuMPz/EPYiN4SDlu1zM7O7k5PT7N8Ps/Ah8/9/f1Rl8vlBmk8aDtOlSkY5zxE8EvE + XaXYZgKc7ybY9hO7+NDb2/s7nU4TbRmWuw8C7dPMbrebyPOH47hXiGkBjnfEKZVKnVwuf4B3C74+EOYd + tvwdaODeDfB+QxCECioH4EOVaaxTQtmOQHPR/LRhPUCnpXNRIF3nxJklkn91VMB7krthrAAAAABJRU5E + rkJggg== + + + + 757, 17 + + + 313, 17 + + + 873, 17 + + + 313, 17 + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAD7SURBVDhP3ZExaoRgEIU9hDaWW+QOnsDaMsEq4LLRJI2k + EEQvYO+drAQhYGUhgiIIWigiMtknw5IwmwvsB4/5x/fBj6o8GHEcn6Ioer7O871wd2JdEgTBS9d1Bf0D + OjisS3zfv+z7Ttu2idR1TejgsC5xXfdtXVdaluVP+r6nNE0JHRzWJY7juPM8U5Ik1DQNTdN0TOwIOjis + S2zbfh/HkcIwPJLn+e1cVRWhg8O6xLKsj2EYqCxL8jzvFuxt2xI6OKxLTNP8xPvigxVFgduOiR1BB4d1 + iWEYr1mWfV9/13Hj7+AZOjisS3Rdf1JV9axp2te9oIPD+mOgKD+PfhFtj0vEBQAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADLSURBVDhP3ZExCoNAEEU9hDaWFrmDJ7C2TLAKKMmSpJEU + Nno/20AuYKOIghaKiEz8MN1MLuCDz8K+B1usdTCKovDyPD/vZ6KNnce5JMuyS9M0H/oDHBrOJWma3rZt + o3Vd1cGh4VxijLkvy0LzPKuDQ8O5JI5jM00TjeOoDg4N55Ioih7DMFDXderg0HAuCcPw2fc91XWtDg4N + 55IgCF5t21JVVerg0HAu8X3/Wpbld/8u8Tru4NBwLnFd92TbduI4zlsbHBrOj4Fl/QBr0SNeThH2IgAA + AABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAKlSURBVDhPdVLfS1pxFPfu3qnX6ZyZU7J0CmPD5RSmNl+m + DHyI9eBSmgXroUQn9ovhi1BjjoEUpLPIYiKDTRIipOFe9rh/YLG3rf0Di0UjGURRfPc5QlGtDny433Pu + +X0+knOEA3jgMiA7AdIvAfT/CP8Jv7CwcHd1dTVXq9W+4ru9vLy8vbi4uD4xMVHo6uq6B58rHo/nvkql + 0uJ9KolQrVYT9Xp9s1gssvHxcTY4OLgXjUb3JicnWS6XY6lU6lcymXzr9Xp/qNVqC2KOE/CVSuXZ2tra + QTweZ52dnXWTyRTWarW3gNtmszkSCoU+ZjIZNjU1xRwOx65MJruBuGYCLpvN2lF9C9WY1Wp9DZsCEACa + mSDv6el5OjIywkZHR5nT6WRIcNyBUCqV3szMzDCbzfYJOgWfXZBoMBieo5u51tbWeZ1Ol4FNBTT9ZEtL + S9+GhoaY0WgMQ6fKZ4UcpYAIXAsEAo/b2tqe4E3XkYhIsIPqBxqN5g50avki4eBnisViDYvFsgVdQ0Zx + bGxs02637ygUCgM5kfEC4TG/2+fzHXZ0dPyFriOj0N7eHsTWH+GtBOQAtXteJzK/3z/c19fH0O0GdOJC + s6KiUCi8KJfLc4lEYh4/U2SjnyeEEurC4fAXEIpJpdL30GmREm5gYMC8srLCcEoWiUSYXq8fhp26IUoT + aFnXu7u7i8FgkImiuMPz/EPYiN4SDlu1zM7O7k5PT7N8Ps/Ah8/9/f1Rl8vlBmk8aDtOlSkY5zxE8EvE + XaXYZgKc7ybY9hO7+NDb2/s7nU4TbRmWuw8C7dPMbrebyPOH47hXiGkBjnfEKZVKnVwuf4B3C74+EOYd + tvwdaODeDfB+QxCECioH4EOVaaxTQtmOQHPR/LRhPUCnpXNRIF3nxJklkn91VMB7krthrAAAAABJRU5E + rkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJbSURBVDhPtZLdT1JhHMfdal5A60aIWq2t5hXrKuecV6z5 + N/AfFJWitJzTNEUizXh/caAzi2AcfNmOAr6AvCgIgkaMlqIZaEuLpm602a379shOGrNZN322387Zs9/3 + 8zzn95yS/4bVar3W96LPo9erPSaT5jqzfDo0TZf1D/S3UJQ96HK5vmezGaTeJWF+bc7rDRp/R+fjJqPR + WMa0F2O2mC9HIpHc7t4ONjYzWEkvw9CrQ4+iC7OhAFwTNHxBD7QmbU4qlV5hYsd0yNqEu3u72P+xjz3y + 3P6yhZXVZSwlYgjNB+H1T2ImMAWnm4bkoVjIxI5RKrurpj2TeJtcwtb2ZyLZQe7bV2Q3PiKZSiAQnIHd + YYVKrUBjo6SKiRWj1ihhtVlIs6/wGYd1OIMZvxeDrwYg75JBdPc2mPaTOIbsGB51YIiUxfoSsqdSPCMz + qJfUobW9BY/amlErvneKYJjCuItGODqH1Q8rmPK6yfssFOoeaA1qdD5pR139/dNP4HSPIbIQ/k0wB6Xm + OXT/JqDgnBhDND5/JIjEwlBpFdAZNX8XjIwOkfseR2wxirX1dEEQf7MAtU55JGh4IP6zQCgUltopG9yT + zoJgPbNWECSSi9DoVTCa9JB3y9Dc2oSKigoWEyviglwu3/T6puENTON9OoVIPEROEAU1bIPFNohesx4i + 0Z1PpPcqqTOF1C/4fH4pm82+UVNzSyeVS5N2hy1P5nHgGLEfkF863yCpTVZXVxlZLNZNHo/HZmInEQgE + Z4nsXGVlZRmXy73I4XAulZeXc0mdP9yEaWMoKfkJdCyTYl98DUQAAAAASUVORK5CYII= + + + + 873, 17 + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGKSURBVDhP3ZJNSwJRGIXv+MFEQr8k3Ig4iRs/kAGjNq5C + x82EIIS0LbAiF/6AFsWAiNGE0CaJFoFthKFFSLvc5iLRRUwbRYTe7rmNUAZugw48zMt5z7kzXIb9P61w + NjgnnFvOgwNmeNgh80sSZ1OW5ZtUKtVtNBpvhUJhEovFCGCGhx0yyDodoSXObiAQsNrttj2dTsk0TTIM + g0IhRaAoivCwQwZZdETX7XariUTifjAYTEajEYFWq0WQYVQpEolSMrlOmUxG7ACy6KCLA2qlUunJtm2a + EY/Hqdm8I78/KMjldoT3PYMOujggqqrqda/XGw+HQwK6rlOxeET5/J4AM7zZHll00MUdyC6XayscDl9Y + lvXa7/epXq9TNqtTuVwVYIaHHTLIooMuDoAkj8ez5vP5DtPp9BW/sG6lUnnXNO0DYIaHHTKrPIvOV/Wn + lvlBQa/Xu82f+/wTK6AoSR3+E7zUGHs+Z6xzydgjMBk7c3qLdcrDY02jeeA7kcU65m864OF54DuRPxNj + n9zNDEMHyL8JAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAG8SURBVDhP3ZDPK8NhHMe/++Ur8/tAXPwB5LIwi8N+pNVE + aS6auXyRRXJwoZZfhx04Ia0v0spq5YDkoOZgtRy+yc3KQXawNsVcJlY+nvfju/LjIFfvevV8en/e76en + R/h/Kmf0MNYYx4xzFczwsEPmhzSMXlEUj1wuVyISiTz4fL4Xm81GADM87JBBVu1wFTOmTCZTPBaLZfP5 + PIXDYZJlmdrazByz2cw97JBBFh3e1el0TofDcZpOp19yuRyBaDRKkCxvU0eHlbq6usnj8fAdQBYddHHB + jt/vv8xms1TAbrfT4eEJNTe3cIaGJrj3OYMOurjA6nQ6D5LJ5HMmkyEgSRJNTs7T6OgMBzO8wh5ZdNDF + H4harXbAYrHsxuPxu1QqRaFQiAYHJVpa2uZg5t7ZGNXtt77WLDRco4MuLoA0er2+3Wg0zrnd7j32YYlA + IPDk9XrfAGZ44kbto/QwTUKwMoHOR/WrSthFLQaDYZids+yJAaDxlV0Iy6W3wnrFVf/9CAlbVQpnszqo + 9n7RaqViTfXRd+CriV+0UhZkL1BAU7KTCjP3/6TFUqX+ppFwqs4fNV4UFMYMCj+5BOEdvEoXV+jjkasA + AAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAFaSURBVDhP7ZA9S0JRGMd95UZCX0akm1t6hUuCQTnF1ZYb + gVtLSyAFDvcDNCVECAlSQ0G02SJc2oomhyaHRAe5LYYIPZ3fUaHoG0QP/DgP/5fD4YT+3qwoCopTxb3i + cQ47Gh6ZXxNWbBqGcZfP57utVmtUqVQmmUxGgB0NjwzZeUfPkuIgmUz6nU4nmE6n0mw2pV6vy+qqqTFN + U2t4ZMjS0d1oNGpblvUwGAwm4/FYoN1uCxM0GvJi5WQ3tyGO42gPyNKhywUX1Wr1OQgCWZDNZuXp6kZG + lqU523a09j1Dhy4XrNu2fdvr9T6Gw6GA67pysn8or4UtDTvawidLhy5/YEQikZ10On3p+/5bv9+Xhnp6 + qeRKrXauYUfDI0OWDl0uYMKxWGwtkUgcF4vFa/VhXc/z3svl8iewo+GRIUtnVv05y8pMxePxPXUeqSd6 + wD7XUmRm0f+ZTSj0BQoq7hKHIEm9AAAAAElFTkSuQmCC + + + + + AAABAAgAICAQAAAABADoAgAAhgAAACAgAAAAABgAqAwAAG4DAAAgIAAAAAAIAKgIAAAWEAAAQEAAAAAA + GAAoMgAAvhgAAEBAEAAAAAQAaAoAAOZKAABAQAAAAAAIACgWAABOVQAAgIAAAAAAGAAoyAAAdmsAAICA + AAAAAAgAKEwAAJ4zAQAoAAAAIAAAAEAAAAABAAQAAAAAAAACAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAA + gAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////ABER + ERAAAAAAAAAAAAAAAAARERERAAAAAAAAAAAAAAAAERERERAAAAAAAAAAAAAAABERERERAAAAAQAAAAAA + AAARERAAAQAAAAEAAAAAAAAAEREREQAAAAABAAAAAAAAABERERERAAAAABAAAAAAAAAREREREQAAAAAQ + AAAQAAAAEREREREAAAAAAAABEAAAAAERERERAAAAAAAxERAAAAAQERERERAAAAABEQAAAAAAAAAREREQ + AAAAAQARERARAAAAEREREAAAAAEBEAERERAAAAAAAAAAAAAQEQARMzERAAAAEREAAAABEBADMzMzEQAA + AAEQAAAAAAEAADMxMxEAAAAAAAAAAAEQEQAzMxEQAAABAAEAAAEREAAAMBMQEAAAAAARAAABEREQADEQ + EQAAAAABEBEBEREQATAREREAAAAQAQAQARERAQABEQERAAAAAAAAEBETEQMRERAREQAAAAAAARARExEQ + AREAAREQAAAAAAEBERMxMQEBAAABEQABAAAAAQERERMREQAAAAEAABAAABABERExERAAAAAAAAAAAAAA + EREREREAAAAAAAAAABAQEQAAAREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABAAAAAAAAAAAA + AAAAEAARAAAAAAAAAAAAAAAAAAABEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABABgAAAAAAAAM + AAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA + AACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAAAA + AAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA + AACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACA + AACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAACAAACAAACAAACAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAACAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAA + AACAAACAAACAAACAAACAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAAAAAAAAAACAAACAAACAAACAAACA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACAAAAAAACAAACAAAAAAAAAAACAAACAAICAAICAAICAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAA + AACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAACAAAAAAAAAAICAAICAAICA + AICAAICAAICAAICAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAICAAICAAICAAACAAICAAICAAACAAACAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAACAAACA + AAAAAAAAAICAAICAAICAAICAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAACA + AAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAICAAAAAAACAAICAAACAAAAA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAACAAACAAACA + AACAAACAAACAAAAAAAAAAAAAAICAAACAAACAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAACAAACAAAAAAACAAACAAAAAAACAAACAAACAAACAAACAAACAAAAAAAAAAACAAICAAAAAAACAAACA + AACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAACA + AACAAACAAACAAACAAAAAAACAAAAAAAAAAAAAAACAAACAAACAAAAAAACAAACAAACAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAICAAACAAACAAAAAAICAAACAAACA + AACAAACAAACAAAAAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + AACAAAAAAACAAACAAACAAICAAACAAACAAACAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAACAAACAAACA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAACAAICAAICAAACA + AICAAACAAAAAAACAAAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAACAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAACAAACAAACAAACAAACAAICAAACAAACAAACAAACAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACA + AACAAACAAACAAACAAICAAACAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAACAAACAAACAAACAAACAAACAAACA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAAAA + AACAAACAAAAAAAAAAAAAAAAAAAAAAACAAACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAA + AACAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAACAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE + AAAAAAAAAAAAAAABAAAAAQAAAAD/AAD/AAD/AAAAAP//AP//AAD/AP8AwMDAAP/48ADX6/oA1P9/AP8A + AADiK4oAKiqlAAAAAAAEBAQACAgIAAwMDAAREREAFhYWABwcHAAiIiIAKSkpADMzMwA5OTkAQkJCAE1N + TQBVVVUAYGBgAGZmZgBwcHAAgICAAIyMjACUlJQAmZmZAKSkpACsrKwAtra2AMDAwADMzMwA1NTUANra + 2gDg4OAA7OzsAPj4+AD7+/sA////ADMAAABmAAAAmQAAAMwAAAD/AAAAADMAADMzAABmMwAAmTMAAMwz + AAD/MwAAAGYAADNmAABmZgAAmWYAAMxmAAD/ZgAAAJkAADOZAABmmQAAmZkAAMyZAAD/mQAAAMwAADPM + AABmzAAAmcwAAMzMAAD/zAAAAP8AADP/AABm/wAAmf8AAMz/AAD//wAAAAAzADMAMwBmADMAmQAzAMwA + MwD/ADMAADMzAGYzMwCZMzMAzDMzAP8zMwAAZjMAM2YzAGZmMwCZZjMAzGYzAP9mMwAAmTMAM5kzAGaZ + MwCZmTMAzJkzAP+ZMwAAzDMAM8wzAGbMMwCZzDMAzMwzAP/MMwAA/zMAM/8zAGb/MwCZ/zMAzP8zAP// + MwAAAGYAMwBmAGYAZgCZAGYAzABmAP8AZgAAM2YAMzNmAGYzZgCZM2YAzDNmAP8zZgAAZmYAM2ZmAJlm + ZgDMZmYA/2ZmAACZZgAzmWYAZplmAJmZZgDMmWYA/5lmAADMZgAzzGYAZsxmAJnMZgDMzGYA/8xmAAD/ + ZgAz/2YAZv9mAJn/ZgDM/2YA//9mAAAAmQAzAJkAZgCZAJkAmQDMAJkA/wCZAAAzmQAzM5kAZjOZAJkz + mQDMM5kA/zOZAABmmQAzZpkAZmaZAJlmmQDMZpkA/2aZAACZmQAzmZkAZpmZAMyZmQD/mZkAAcyZADPM + mQBmzJkAmcyZAMzMmQD/zJkAAP+ZADP/mQBm/5kAmf+ZAMz/mQD//5kAAADMADMAzABmAMwAmQDMAMwA + zAD/AMwAADPMADMzzABmM8wAmTPMAMwzzAD/M8wAAGbMADNmzABmZswAmWbMAMxmzAD/ZswAAJnMADOZ + zABmmcwAmZnMAMyZzAD/mcwAAMzMADPMzABmzMwAmczMAP/MzAAA/8wAM//MAGb/zACZ/8wAzP/MAP// + zAAAAP8AMwD/AGYA/wCZAP8AzAD/AP8A/wAAM/8AMzP/AGYz/wCZM/8AzDP/AP8z/wAAZv8AM2b/AGZm + /wCZZv8AzGb/AP9m/wAAmf8AM5n/AGaZ/wCZmf8AzJn/AP+Z/wAAzP8AM8z/AGbM/wCZzP8AzMz/AP/M + /wAA//8AM///AGb//wCZ//8AzP//AJ+fn5+fn58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQn5+fn5+f + n58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBCfn5+fn5+fn58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEJ+f + n5+fn5+fn58QEBAQEBAQnxAQEBAQEBAQEBAQEBAQn5+fn58QEBAQnxAQEBAQEBCfEBAQEBAQEBAQEBAQ + EBCfn5+fn5+fnxAQEBAQEBAQEJ8QEBAQEBAQEBAQEBAQEJ+fn5+fn5+fn58QEBAQEBAQEJ8QEBAQEBAQ + EBAQEBAQn5+fn5+fn5+fnxAQEBAQEBAQnxAQEBAQnxAQEBAQEBCfn5+fn5+fn5+fEBAQEBAQEBAQEBAQ + EJ+fEBAQEBAQEBCfn5+fn5+fn58QEBAQEBAQEBAQrZ+fn58QEBAQEBAQnxCfn5+fn5+fn58QEBAQEBAQ + EJ+fnxAQEBAQEBAQEBAQEBAQn5+fn5+fnxAQEBAQEBAQnxAQn5+fn58Qn58QEBAQEBCfn5+fn5+fEBAQ + EBAQEBCfEJ+fEBCfn5+fn58QEBAQEBAQEBAQEBAQEBAQEBAQnxCfnxAQn5+tra2fn58QEBAQEBCfn5+f + EBAQEBAQEJ+fEJ8QEK2tra2tra2fnxAQEBAQEBCfnxAQEBAQEBAQEBCfEBAQEK2trZ+trZ+fEBAQEBAQ + EBAQEBAQEBAQEBCfnxCfnxAQra2trZ+fnxAQEBAQEJ8QEBCfEBAQEBCfn5+fEBAQEBCtEJ+tnxCfEBAQ + EBAQEBAQn58QEBAQEJ+fn5+fnxAQEK2fnxCfnxAQEBAQEBAQEJ+fEJ+fEJ+fn5+fnxAQn60Qn5+fn5+f + EBAQEBAQnxAQnxAQnxAQn5+fn58QnxAQEJ+fnxCfn58QEBAQEBAQEBAQEBCfEJ+fn62fnxCtn5+fn58Q + n5+fnxAQEBAQEBAQEBAQn58Qn5+frZ+fnxAQn5+fEBAQn5+fnxAQEBAQEBAQEBCfEJ+fn5+trZ+tnxCf + EJ8QEBAQEJ+fnxAQEJ8QEBAQEBAQnxCfn5+fn5+tn5+fnxAQEBAQEBCfEBAQEJ8QEBAQEJ8QEJ+fn5+f + rZ+fn58QEBAQEBAQEBAQEBAQEBAQEBAQEBCfn5+fn5+fn5+fEBAQEBAQEBAQEBAQEBAQEJ8QnxCfnxAQ + EBAQn5+fEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEJ8QEJ8QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBCfEBAQn58QEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEJ+fEJ8QEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAABAAAAAgAAAAAEAGAAAAAAAADAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAA + AAAAAIAAAIAAAAAAAAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAA + gIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAAIAA + AIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAgIAA + gIAAgIAAgIAAAIAAAIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAAAAAAAAAIAAAIAAgIAAgIAAAIAAAIAAAAAA + AAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAAAAAAAAAIAAAIAAgIAA + gIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAgIAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAA + AIAAgIAAgIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAA + AAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAIAAAIAAgIAAgIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAAAAAAAAgIAAgIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAA + AIAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAgIAA + gIAAgIAAgIAAAIAAAIAAgIAAgIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAgIAAgIAAgIAAgIAAAIAAAIAAgIAAgIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAgIAA + gIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAgIAAgIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAIAAAIAAAAAA + AAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAA + AAAAAIAAAIAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAIAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA + AIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIAAAIAAAIAAAIAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAABAAAAAgAAAAAEABAAAAAAAAAgAAAAA + AAAAAAAAEAAAABAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAwMDAAICAgAAAAP8AAP8AAAD/ + /wD/AAAA/wD/AP//AAD///8AEREREREREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARERERERERAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAABERERERERERAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAERERERER + EREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAREREREREREREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABER + EREREREREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEREREREREREREQAAAAAAAAARAAAAAAAAAAAAAAAA + AAARERERERERERERAAAAAAAAABEAAAAAAAAAAAAAAAAAABERERERAAAAABEAAAAAAAAAEQAAAAAAAAAA + AAAAAAAAEREREREAAAAAEQAAAAAAAAARAAAAAAAAAAAAAAAAAAAREREREREREQAAAAAAAAAAABEAAAAA + AAAAAAAAAAAAABERERERERERAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAEREREREREREREQAAAAAAAAAA + EQAAAAAAAAAAAAAAAAARERERERERERERAAAAAAAAAAARAAAAAAAAAAAAAAAAABEREREREREREREAAAAA + AAAAABEAAAAAABEAAAAAAAAAEREREREREREREQAAAAAAAAAAEQAAAAAAEQAAAAAAAAARERERERERERER + AAAAAAAAAAAAAAAAABERAAAAAAAAABEREREREREREREAAAAAAAAAAAAAAAAAEREAAAAAAAAAABERERER + EREREQAAAAAAAAAAAAAzEREREQAAAAAAAAAAERERERERERERAAAAAAAAAAAAADMRERERAAAAAAAAABEA + ERERERERERERAAAAAAAAAAAREREAAAAAAAAAAAAAEQAREREREREREREAAAAAAAAAABEREQAAAAAAAAAA + AAAAAAAAEREREREREQAAAAAAAAAAEQAAEREREREAEREAAAAAAAARERERERERAAAAAAAAAAARAAARERER + EQAREQAAAAAAABEREREREREAAAAAAAAAABEAEREAABEREREREQAAAAAAEREREREREQAAAAAAAAAAEQAR + EQAAERERERERAAAAAAAAAAAAAAAAAAAAAAAAABEAEREAABERMzMzERERAAAAAAAAAAAAAAAAAAAAAAAA + EQAREQAAEREzMzMREREAAAAAAAARERERAAAAAAAAABERABEAADMzMzMzMzMREQAAAAAAABEREREAAAAA + AAAAEREAEQAAMzMzMzMzMxERAAAAAAAAABERAAAAAAAAAAAAABEAAAAAMzMzETMzEREAAAAAAAAAEREA + AAAAAAAAAAAAEQAAAAAzMzMRMzMREQAAAAAAAAAAAAAAAAAAAAAAEREAEREAADMzMzMREREAAAAAAAAA + AAAAAAAAAAAAAAAREQAREQAAMzMzMxEREQAAAAAAABEAAAARAAAAAAARERERAAAAAAAzABEzEQARAAAA + AAAAEQAAABEAAAAAABEREREAAAAAADMAETMRABEAAAAAAAAAAAAREQAAAAAAERERERERAAAAMxERABER + AAAAAAAAAAAAABERAAAAAAAREREREREAAAAzEREAEREAAAAAAAAAAAAREQAREQAREREREREAABEzABER + EREREQAAAAAAAAAAABERABERABEREREREQAAETMAERERERERAAAAAAAAEQAAEQAAEQAAEREREREAEQAA + ABEREQAREREAAAAAAAARAAARAAARAAAREREREQARAAAAERERABEREQAAAAAAAAAAAAAAABEAERERMxER + ADMREREREQARERERAAAAAAAAAAAAAAAAEQAREREzEREAMxERERERABEREREAAAAAAAAAAAAAABERABER + ETMREREAABEREQAAABEREREAAAAAAAAAAAAAEREAERERMxEREQAAERERAAAAEREREQAAAAAAAAAAAAAR + ABEREREzMxEzEQARABEAAAAAABEREQAAAAAAAAAAABEAERERETMzETMRABEAEQAAAAAAERERAAAAEQAA + AAAAAAARABERERERETMRERERAAAAAAAAABEAAAARAAAAAAAAABEAERERERERMxEREREAAAAAAAAAEQAA + AAARAAAAAAARAAARERERETMRERERAAAAAAAAAAAAAAAAABEAAAAAABEAABERERERMxEREREAAAAAAAAA + AAAAAAAAAAAAAAAAAAARERERERERERERAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEREREREREREREAAAAA + AAAAAAAAAAAAAAAAEQARABERAAAAAAAREREAAAAAAAAAAAAAAAAAAAAAAAARABEAEREAAAAAABEREQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + EQAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAAAREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + EQAAABERAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAREQARAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAABERABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgA + AABAAAAAgAAAAAEACAAAAAAAABAAAAAAAAAAAAAAAAEAAAABAAAAAP8AAP8AAP8AAAAA//8A//8AAP8A + /wDAwMAA//jwANfr+gDU/38A/wAAAOIrigAqKqUAAAAAAAQEBAAICAgADAwMABEREQAWFhYAHBwcACIi + IgApKSkAMzMzADk5OQBCQkIATU1NAFVVVQBgYGAAZmZmAHBwcACAgIAAjIyMAJSUlACZmZkApKSkAKys + rAC2trYAwMDAAMzMzADU1NQA2traAODg4ADs7OwA+Pj4APv7+wD///8AMwAAAGYAAACZAAAAzAAAAP8A + AAAAMwAAMzMAAGYzAACZMwAAzDMAAP8zAAAAZgAAM2YAAGZmAACZZgAAzGYAAP9mAAAAmQAAM5kAAGaZ + AACZmQAAzJkAAP+ZAAAAzAAAM8wAAGbMAACZzAAAzMwAAP/MAAAA/wAAM/8AAGb/AACZ/wAAzP8AAP// + AAAAADMAMwAzAGYAMwCZADMAzAAzAP8AMwAAMzMAZjMzAJkzMwDMMzMA/zMzAABmMwAzZjMAZmYzAJlm + MwDMZjMA/2YzAACZMwAzmTMAZpkzAJmZMwDMmTMA/5kzAADMMwAzzDMAZswzAJnMMwDMzDMA/8wzAAD/ + MwAz/zMAZv8zAJn/MwDM/zMA//8zAAAAZgAzAGYAZgBmAJkAZgDMAGYA/wBmAAAzZgAzM2YAZjNmAJkz + ZgDMM2YA/zNmAABmZgAzZmYAmWZmAMxmZgD/ZmYAAJlmADOZZgBmmWYAmZlmAMyZZgD/mWYAAMxmADPM + ZgBmzGYAmcxmAMzMZgD/zGYAAP9mADP/ZgBm/2YAmf9mAMz/ZgD//2YAAACZADMAmQBmAJkAmQCZAMwA + mQD/AJkAADOZADMzmQBmM5kAmTOZAMwzmQD/M5kAAGaZADNmmQBmZpkAmWaZAMxmmQD/ZpkAAJmZADOZ + mQBmmZkAzJmZAP+ZmQABzJkAM8yZAGbMmQCZzJkAzMyZAP/MmQAA/5kAM/+ZAGb/mQCZ/5kAzP+ZAP// + mQAAAMwAMwDMAGYAzACZAMwAzADMAP8AzAAAM8wAMzPMAGYzzACZM8wAzDPMAP8zzAAAZswAM2bMAGZm + zACZZswAzGbMAP9mzAAAmcwAM5nMAGaZzACZmcwAzJnMAP+ZzAAAzMwAM8zMAGbMzACZzMwA/8zMAAD/ + zAAz/8wAZv/MAJn/zADM/8wA///MAAAA/wAzAP8AZgD/AJkA/wDMAP8A/wD/AAAz/wAzM/8AZjP/AJkz + /wDMM/8A/zP/AABm/wAzZv8AZmb/AJlm/wDMZv8A/2b/AACZ/wAzmf8AZpn/AJmZ/wDMmf8A/5n/AADM + /wAzzP8AZsz/AJnM/wDMzP8A/8z/AAD//wAz//8AZv//AJn//wDM//8An5+fn5+fn5+fn5+fn58dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+f + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+f + n5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+f + n5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+f + n5+fn5+fn5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fn5+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn5+fn5+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHZ+fHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fHR0dHR0dHR2fnx0dHR0dHR0dHR0dHR0dn58dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fnx0dHR0dHR0dn58dHR0dHR0dHR0dHR0dHZ+fHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR2fnx0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0d + n58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0d + HR0dHR0dn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0d + HR0dHR0dHR0dHZ+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fn5+fn5+fnx0d + HR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dHR2fnx0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn5+fn5+f + n58dHR0dHR0dHR0dHR0dHR0dn58dHR0dHR0dHR0dn58dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+f + n5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+f + n5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fnx0dHR0dHR0dHR0dHR0dHR2fn5+f + n5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHa2tn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0d + n5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR2trZ+fn5+fn5+fHR0dHR0dHR0dHR0d + HR2fnx0dn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHZ+fn5+fnx0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHZ+fn5+fn5+fn5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR2fn5+fn58dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dn58dHR0dn5+fn5+f + n5+fnx0dn5+fnx0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHZ+fHR0dHZ+f + n5+fn5+fn58dHZ+fn58dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR2fnx0d + n5+fnx0dHR2fn5+fn5+fn5+fn58dHR0dHR0dHR0dn5+fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0d + n58dHZ+fn58dHR0dn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fnx0dn5+fnx0dHR2fn5+fra2tra2tn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHZ+fn58dHR0dn5+fn62tra2trZ+fn5+fnx0dHR0dHR0dHR0dHZ+fn5+fn5+fHR0dHR0d + HR0dHR0dHR2fn5+fHR2fnx0dHR2tra2tra2tra2tra2trZ+fn58dHR0dHR0dHR0dHR2fn5+fn5+fnx0d + HR0dHR0dHR0dHR0dn5+fnx0dn58dHR0dra2tra2tra2tra2tra2fn5+fHR0dHR0dHR0dHR0dHR2fn5+f + HR0dHR0dHR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dra2tra2tn5+tra2tn5+fnx0dHR0dHR0dHR0dHR0d + n5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dn58dHR0dHR0dHa2tra2trZ+fra2trZ+fn58dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn5+fnx0dn5+fnx0dHR2tra2tra2trZ+fn5+fnx0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn58dHZ+fn58dHR0dra2tra2tra2fn5+fn58dHR0d + HR0dHR0dHR2fnx0dHR0dHZ+fHR0dHR0dHR0dHZ+fn5+fn5+fHR0dHR0dHR0dHa2tHR2fn62tn58dHZ+f + HR0dHR0dHR0dHR0dn58dHR0dHR2fnx0dHR0dHR0dHR2fn5+fn5+fnx0dHR0dHR0dHR2trR0dn5+trZ+f + HR2fnx0dHR0dHR0dHR0dHR0dHR0dHZ+fn58dHR0dHR0dHR0dn5+fn5+fn5+fn5+fHR0dHR0dra2fn5+f + HR2fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR0dHR0dHR0dHZ+fn5+fn5+fn5+fnx0dHR0dHa2t + n5+fnx0dn5+fnx0dHR0dHR0dHR0dHR0dHR0dHZ+fn58dHZ+fn58dHZ+fn5+fn5+fn5+fnx0dHR2fn62t + HR2fn5+fn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR2fn5+fHR2fn5+fn5+fn5+fn58dHR0d + n5+trR0dn5+fn5+fn5+fn5+fHR0dHR0dHR0dHR0dn58dHR0dn58dHR0dn58dHR0dn5+fn5+fn5+fnx0d + n58dHR0dHR2fn5+fn58dHZ+fn5+fnx0dHR0dHR0dHR0dHZ+fHR0dHZ+fHR0dHZ+fHR0dHZ+fn5+fn5+f + n58dHZ+fHR0dHR0dn5+fn5+fHR2fn5+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fnx0dn5+fn5+f + ra2fn5+fHR2trZ+fn5+fn5+fn58dHZ+fn5+fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn58dHZ+f + n5+fn62tn5+fnx0dra2fn5+fn5+fn5+fHR2fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+f + HR2fn5+fn5+trZ+fn5+fnx0dHR2fn5+fn58dHR0dHR2fn5+fn5+fnx0dHR0dHR0dHR0dHR0dHR0dHR0d + n5+fnx0dn5+fn5+fra2fn5+fn58dHR0dn5+fn5+fHR0dHR0dn5+fn5+fn58dHR0dHR0dHR0dHR0dHR0d + HR0dHZ+fHR2fn5+fn5+fn62tra2fn62tn58dHZ+fHR2fnx0dHR0dHR0dHR2fn5+fn58dHR0dHR0dHR0d + HR0dHR0dHR2fnx0dn5+fn5+fn5+tra2tn5+trZ+fHR2fnx0dn58dHR0dHR0dHR0dn5+fn5+fHR0dHR0d + n58dHR0dHR0dHR0dHR0dHZ+fHR2fn5+fn5+fn5+fn5+trZ+fn5+fn5+fHR0dHR0dHR0dHR0dHR2fnx0d + HR0dHZ+fHR0dHR0dHR0dHR0dHR2fnx0dn5+fn5+fn5+fn5+fra2fn5+fn5+fnx0dHR0dHR0dHR0dHR0d + n58dHR0dHR0dHZ+fHR0dHR0dHR0dHZ+fHR0dHZ+fn5+fn5+fn5+trZ+fn5+fn5+fHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR2fnx0dHR0dHR0dHR2fnx0dHR2fn5+fn5+fn5+fra2fn5+fn5+fnx0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fn5+fn5+fn5+fn5+fn5+fnx0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dn58dHZ+fHR2fn5+fHR0dHR0dHR0dHZ+fn5+fnx0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHZ+fHR2fnx0dn5+fnx0dHR0dHR0dHR2fn5+f + n58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fnx0dHR2fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHR0dn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR2fnx0dHR0dHZ+fn58dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dn58dHR0dHR2fn5+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHZ+fn58dHZ+fHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0d + HR0dHR0dHR0dHR0dHR0dHR0dHR2fn5+fHR2fnx0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAIAAAAAAAQAAAQAYAAAAAAAAwAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgACA + gACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACAgACAgACAgACAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgACA + gACAgACAgACAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + gAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAAgAAA + AAAAAAAAAAAAAAAAgAAAgAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAIAAAAAAAQAAAQAIAAAAAAAAQAAAAAAAAAAA + AAAAAQAAAAEAAAAA/wAA/wAA/wAAAAD//wD//wAA/wD/AMDAwAD/+PAA1+v6ANT/fwD/AAAA4iuKACoq + pQAAAAAABAQEAAgICAAMDAwAERERABYWFgAcHBwAIiIiACkpKQAzMzMAOTk5AEJCQgBNTU0AVVVVAGBg + YABmZmYAcHBwAICAgACMjIwAlJSUAJmZmQCkpKQArKysALa2tgDAwMAAzMzMANTU1ADa2toA4ODgAOzs + 7AD4+PgA+/v7AP///wAzAAAAZgAAAJkAAADMAAAA/wAAAAAzAAAzMwAAZjMAAJkzAADMMwAA/zMAAABm + AAAzZgAAZmYAAJlmAADMZgAA/2YAAACZAAAzmQAAZpkAAJmZAADMmQAA/5kAAADMAAAzzAAAZswAAJnM + AADMzAAA/8wAAAD/AAAz/wAAZv8AAJn/AADM/wAA//8AAAAAMwAzADMAZgAzAJkAMwDMADMA/wAzAAAz + MwBmMzMAmTMzAMwzMwD/MzMAAGYzADNmMwBmZjMAmWYzAMxmMwD/ZjMAAJkzADOZMwBmmTMAmZkzAMyZ + MwD/mTMAAMwzADPMMwBmzDMAmcwzAMzMMwD/zDMAAP8zADP/MwBm/zMAmf8zAMz/MwD//zMAAABmADMA + ZgBmAGYAmQBmAMwAZgD/AGYAADNmADMzZgBmM2YAmTNmAMwzZgD/M2YAAGZmADNmZgCZZmYAzGZmAP9m + ZgAAmWYAM5lmAGaZZgCZmWYAzJlmAP+ZZgAAzGYAM8xmAGbMZgCZzGYAzMxmAP/MZgAA/2YAM/9mAGb/ + ZgCZ/2YAzP9mAP//ZgAAAJkAMwCZAGYAmQCZAJkAzACZAP8AmQAAM5kAMzOZAGYzmQCZM5kAzDOZAP8z + mQAAZpkAM2aZAGZmmQCZZpkAzGaZAP9mmQAAmZkAM5mZAGaZmQDMmZkA/5mZAAHMmQAzzJkAZsyZAJnM + mQDMzJkA/8yZAAD/mQAz/5kAZv+ZAJn/mQDM/5kA//+ZAAAAzAAzAMwAZgDMAJkAzADMAMwA/wDMAAAz + zAAzM8wAZjPMAJkzzADMM8wA/zPMAABmzAAzZswAZmbMAJlmzADMZswA/2bMAACZzAAzmcwAZpnMAJmZ + zADMmcwA/5nMAADMzAAzzMwAZszMAJnMzAD/zMwAAP/MADP/zABm/8wAmf/MAMz/zAD//8wAAAD/ADMA + /wBmAP8AmQD/AMwA/wD/AP8AADP/ADMz/wBmM/8AmTP/AMwz/wD/M/8AAGb/ADNm/wBmZv8AmWb/AMxm + /wD/Zv8AAJn/ADOZ/wBmmf8AmZn/AMyZ/wD/mf8AAMz/ADPM/wBmzP8Amcz/AMzM/wD/zP8AAP//ADP/ + /wBm//8Amf//AMz//wCfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pra2trZ+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+tra2tn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD62tra2fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+f + n5+tra2tra2tra2tra2fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8P + Dw+fn5+fn5+fn62tra2tra2tra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+f + n58PDw8PDw8PD5+fn5+fn5+fra2tra2tra2tra2tn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8P + Dw+fn5+fDw8PDw8PDw+tra2tra2tra2tra2tra2tra2tra2tra2tra2tn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PD5+fn58PDw8PDw8PD62tra2tra2tra2tra2tra2tra2tra2tra2tra2fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8Pn5+fnw8PDw8PDw8Pra2tra2tra2tra2tra2tra2tra2tra2tra2trZ+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw+fn5+fDw8PDw8PDw+tra2tra2tra2tra2tra2tra2tra2t + ra2tra2tn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+fn58PDw8PDw8PD62tra2tra2tra2tra2t + ra2tra2tra2tra2tra2fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PD62t + ra2tra2tra2trZ+fn5+tra2tra2trZ+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8Pra2tra2tra2tra2tn5+fn62tra2tra2tn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PDw8PDw+tra2tra2tra2tra2fn5+fra2tra2tra2fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n58PDw8Pn5+fn5+fn58PDw8PDw8PD62tra2tra2tra2tra2tra2fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pra2tra2tra2tra2tra2trZ+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw+tra2tra2tra2tra2tra2tn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PD62tra2tra2tra2tra2t + ra2fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8Pra2tra2t + ra2tra2tra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw+tra2tDw8PD5+fn5+tra2tn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PD62tra0PDw8Pn5+fn62tra2fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pra2trQ8PDw+fn5+fra2trZ+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw+tra2tn5+fn5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PD62tra2fn5+fn5+fnw8PDw+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8Pra2trZ+fn5+fn5+fDw8PD5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw+tra2tn5+fn5+f + n58PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PD62t + ra2fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PD5+fn5+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8Pn5+fn62t + ra0PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw+fn5+fra2trQ8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw+fn5+fn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PD5+fn5+tra2tDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PD5+fn58PDw8PDw8PD5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fDw8PD5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+fn58PDw8PDw8PD5+f + n58PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n58PDw8Pn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fnw8P + Dw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PD5+f + n5+fn5+fn5+fnw8PDw+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fn5+fn62tra2fn5+fn5+fnw8PDw+tra2tn5+fn5+f + n5+fn5+fn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fDw8PD62t + ra2fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+tra2tn5+fn5+f + n58PDw8Pra2trZ+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+fn5+fn5+fn5+fn62t + ra2fn5+fn5+fn5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+f + n5+fn5+fra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fnw8P + Dw+fn5+fn5+fn5+fn5+tra2tn5+fn5+fn5+fn5+fDw8PDw8PDw+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+f + n5+fn5+fDw8PD5+fn5+fn5+fn5+fn62tra2fn5+fn5+fn5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fn5+fn58PDw8Pn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fn5+fnw8PDw8PDw8Pn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn5+tra2tra2trZ+fn5+tra2tn5+fnw8P + Dw+fn5+fDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn62tra2tra2tn5+fn62t + ra2fn5+fDw8PD5+fn58PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fra2tra2t + ra2fn5+fra2trZ+fn58PDw8Pn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+tra2tn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn62tra2fn5+fn5+fn5+fn5+fn5+fDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fra2trZ+fn5+fn5+fn5+fn5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+tra2tn5+fn5+f + n5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fra2trZ+f + n5+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+f + n5+tra2tn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw+fn5+fn5+fn5+f + n5+fn5+fn5+fn62tra2fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8Pn5+fnw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw+fn5+fDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PD5+fn58PDw8Pn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn5+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn58PDw8PDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8P + Dw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PD5+fn58PDw8PDw8PDw8PDw+fn5+fn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8Pn5+fnw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw+fn5+fDw8PDw8PDw8PDw8Pn5+fn5+fn58PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD5+fn5+fn5+fDw8PD5+f + n58PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8Pn5+fn5+f + n58PDw8Pn5+fnw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw+fn5+fn5+fnw8PDw+fn5+fDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P + Dw8PDw8PDw8PDw8PDw8PDw8PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + + + \ No newline at end of file diff --git a/Server/Logger.cs b/Server/Logger.cs new file mode 100644 index 0000000..3e82285 --- /dev/null +++ b/Server/Logger.cs @@ -0,0 +1,22 @@ +using log4net; +using System.Reflection; + +namespace Server +{ + public enum LogType + { + Server, + Chat, + Debug, + Player, + Spawn + } + + public class Logger + { + public static ILog GetLogger(LogType type = LogType.Server) + { + return LogManager.GetLogger(Assembly.GetEntryAssembly(), type.ToString()); + } + } +} diff --git a/Server/MessageQueue.cs b/Server/MessageQueue.cs new file mode 100644 index 0000000..765a239 --- /dev/null +++ b/Server/MessageQueue.cs @@ -0,0 +1,52 @@ +using System.Collections.Concurrent; + +namespace Server +{ + public class MessageQueue + { + private static readonly MessageQueue instance = new MessageQueue(); + + public static MessageQueue Instance + { + get { return instance; } + } + + public readonly ConcurrentQueue MessageLog = new ConcurrentQueue(); + public readonly ConcurrentQueue DebugLog = new ConcurrentQueue(); + public readonly ConcurrentQueue ChatLog = new ConcurrentQueue(); + + public MessageQueue() { } + + public void Enqueue(string msg) + { + if (MessageLog.Count < 100) + MessageLog.Enqueue(String.Format("[{0}]: {1}" + Environment.NewLine, DateTime.Now, msg)); + + Logger.GetLogger(LogType.Server).Info(msg); + } + + public void Enqueue(Exception ex) + { + if (MessageLog.Count < 100) + MessageLog.Enqueue(String.Format("[{0}]: {1} - {2}" + Environment.NewLine, DateTime.Now, ex.TargetSite, ex)); + + Logger.GetLogger(LogType.Server).Error(ex); + } + + public void EnqueueDebugging(string msg) + { + if (DebugLog.Count < 100) + DebugLog.Enqueue(String.Format("[{0}]: {1}" + Environment.NewLine, DateTime.Now, msg)); + + Logger.GetLogger(LogType.Debug).Debug(msg); + } + + public void EnqueueChat(string msg) + { + if (ChatLog.Count < 100) + ChatLog.Enqueue(String.Format("[{0}]: {1}" + Environment.NewLine, DateTime.Now, msg)); + + Logger.GetLogger(LogType.Chat).Info(msg); + } + } +} diff --git a/Server/MirDatabase/AccountInfo.cs b/Server/MirDatabase/AccountInfo.cs new file mode 100644 index 0000000..d631a2a --- /dev/null +++ b/Server/MirDatabase/AccountInfo.cs @@ -0,0 +1,222 @@ +using Server.MirNetwork; +using Server.MirEnvir; +using Server.Utils; +using C = ClientPackets; + +namespace Server.MirDatabase +{ + public class AccountInfo + { + protected static Envir Envir + { + get { return Envir.Main; } + } + protected static MessageQueue MessageQueue => MessageQueue.Instance; + + public int Index; + + public string AccountID = string.Empty; + + private string password = string.Empty; + public string Password + { + get { return password; } + set + { + Salt = Crypto.GenerateSalt(); + password = Crypto.HashPassword(value, Salt); + + } + } + + public byte[] Salt = new byte[24]; + public string CreationIP = string.Empty; + public DateTime CreationDate; + + public bool Banned; + public bool RequirePasswordChange; + public string BanReason = string.Empty; + public DateTime ExpiryDate; + public int WrongPasswordCount; + + public string LastIP = string.Empty; + public DateTime LastDate; + + public List Characters = new List(); + + public UserItem[] Storage = new UserItem[30]; + public bool HasExpandedStorage; + public DateTime ExpandedStorageExpiryDate; + public uint Gold; + public uint Credit; + + public MirConnection Connection; + + public LinkedList Auctions = new LinkedList(); + public bool AdminAccount; + + public AccountInfo() + { + + } + + public AccountInfo(C.NewAccount p) + { + AccountID = p.AccountID; + + Password = p.Password; + CreationDate = Envir.Now; + } + public AccountInfo(BinaryReader reader) + { + Index = reader.ReadInt32(); + + AccountID = reader.ReadString(); + if (Envir.LoadVersion < 94) + Password = reader.ReadString(); + else + password = reader.ReadString(); + + if (Envir.LoadVersion > 93) + Salt = reader.ReadBytes(reader.ReadInt32()); + + if (Envir.LoadVersion > 97) + RequirePasswordChange = reader.ReadBoolean(); + + CreationIP = reader.ReadString(); + CreationDate = DateTime.FromBinary(reader.ReadInt64()); + + Banned = reader.ReadBoolean(); + BanReason = reader.ReadString(); + ExpiryDate = DateTime.FromBinary(reader.ReadInt64()); + + LastIP = reader.ReadString(); + LastDate = DateTime.FromBinary(reader.ReadInt64()); + + int count = reader.ReadInt32(); + + for (int i = 0; i < count; i++) + { + var info = new CharacterInfo(reader, Envir.LoadVersion, Envir.LoadCustomVersion) { AccountInfo = this }; + + if (info.Deleted && info.DeleteDate.AddMonths(Settings.ArchiveDeletedCharacterAfterMonths) <= Envir.Now) + { + MessageQueue.Enqueue($"Player {info.Name} has been archived due to {Settings.ArchiveDeletedCharacterAfterMonths} month deletion."); + Envir.SaveArchivedCharacter(info); + continue; + } + + if (info.LastLoginDate == DateTime.MinValue && info.CreationDate.AddMonths(Settings.ArchiveInactiveCharacterAfterMonths) <= Envir.Now) + { + MessageQueue.Enqueue($"Player {info.Name} has been archived due to no login after {Settings.ArchiveInactiveCharacterAfterMonths} months."); + Envir.SaveArchivedCharacter(info); + continue; + } + + if (info.LastLoginDate > DateTime.MinValue && info.LastLoginDate.AddMonths(Settings.ArchiveInactiveCharacterAfterMonths) <= Envir.Now) + { + MessageQueue.Enqueue($"Player {info.Name} has been archived due to {Settings.ArchiveInactiveCharacterAfterMonths} months inactivity."); + Envir.SaveArchivedCharacter(info); + continue; + } + + Characters.Add(info); + } + + if (Envir.LoadVersion > 75) + { + HasExpandedStorage = reader.ReadBoolean(); + ExpandedStorageExpiryDate = DateTime.FromBinary(reader.ReadInt64()); + } + + Gold = reader.ReadUInt32(); + if (Envir.LoadVersion >= 63) Credit = reader.ReadUInt32(); + + count = reader.ReadInt32(); + + Array.Resize(ref Storage, count); + + for (int i = 0; i < count; i++) + { + if (!reader.ReadBoolean()) continue; + UserItem item = new UserItem(reader, Envir.LoadVersion, Envir.LoadCustomVersion); + if (Envir.BindItem(item) && i < Storage.Length) + Storage[i] = item; + } + + if (Envir.LoadVersion >= 10) AdminAccount = reader.ReadBoolean(); + if (!AdminAccount) + { + for (int i = 0; i < Characters.Count; i++) + { + if (Characters[i] == null) continue; + if (Characters[i].Deleted) continue; + if ((Envir.Now - Characters[i].LastLogoutDate).TotalDays > 13) continue; + Envir.CheckRankUpdate(Characters[i]); + } + } + } + + public void Save(BinaryWriter writer) + { + writer.Write(Index); + writer.Write(AccountID); + writer.Write(Password); + writer.Write(Salt.Length); + writer.Write(Salt); + writer.Write(RequirePasswordChange); + + writer.Write(CreationIP); + writer.Write(CreationDate.ToBinary()); + + writer.Write(Banned); + writer.Write(BanReason); + writer.Write(ExpiryDate.ToBinary()); + + writer.Write(LastIP); + writer.Write(LastDate.ToBinary()); + + writer.Write(Characters.Count); + for (int i = 0; i < Characters.Count; i++) + { + Characters[i].Save(writer); + } + + writer.Write(HasExpandedStorage); + writer.Write(ExpandedStorageExpiryDate.ToBinary()); + writer.Write(Gold); + writer.Write(Credit); + writer.Write(Storage.Length); + for (int i = 0; i < Storage.Length; i++) + { + writer.Write(Storage[i] != null); + if (Storage[i] == null) continue; + + Storage[i].Save(writer); + } + writer.Write(AdminAccount); + } + + public List GetSelectInfo() + { + List list = new List(); + + for (int i = 0; i < Characters.Count; i++) + { + if (Characters[i].Deleted) continue; + list.Add(Characters[i].ToSelectInfo()); + if (list.Count >= Globals.MaxCharacterCount) break; + } + + return list; + } + + public int ExpandStorage() + { + if (Storage.Length == 80) + Array.Resize(ref Storage, Storage.Length + 80); + + return Storage.Length; + } + } +} diff --git a/Server/MirDatabase/AuctionInfo.cs b/Server/MirDatabase/AuctionInfo.cs new file mode 100644 index 0000000..e7f8f6f --- /dev/null +++ b/Server/MirDatabase/AuctionInfo.cs @@ -0,0 +1,117 @@ +using Server.MirEnvir; + +namespace Server.MirDatabase +{ + public class AuctionInfo + { + protected static Envir Envir + { + get { return Envir.Main; } + } + + public ulong AuctionID; + + public UserItem Item; + public DateTime ConsignmentDate; + public uint Price, CurrentBid; + + public int SellerIndex, CurrentBuyerIndex; + public CharacterInfo SellerInfo, CurrentBuyerInfo; + + public bool Expired, Sold; + + public MarketItemType ItemType; + + public AuctionInfo() + { + + } + + + public AuctionInfo(CharacterInfo info, UserItem item, uint price, MarketItemType itemType) + { + AuctionID = ++Envir.NextAuctionID; + SellerIndex = info.Index; + SellerInfo = info; + ConsignmentDate = Envir.Now; + Item = item; + Price = price; + ItemType = itemType; + + if (itemType == MarketItemType.Auction) + { + CurrentBid = Price; + } + } + + public AuctionInfo(BinaryReader reader, int version, int customversion) + { + AuctionID = reader.ReadUInt64(); + + Item = new UserItem(reader, version, customversion); + ConsignmentDate = DateTime.FromBinary(reader.ReadInt64()); + Price = reader.ReadUInt32(); + SellerIndex = reader.ReadInt32(); + Expired = reader.ReadBoolean(); + Sold = reader.ReadBoolean(); + + if (version > 79) + { + ItemType = (MarketItemType)reader.ReadByte(); + + CurrentBid = reader.ReadUInt32(); + + if (CurrentBid < Price) + CurrentBid = Price; + + CurrentBuyerIndex = reader.ReadInt32(); + } + } + + public void Save(BinaryWriter writer) + { + writer.Write(AuctionID); + + Item.Save(writer); + writer.Write(ConsignmentDate.ToBinary()); + writer.Write(Price); + + writer.Write(SellerIndex); + + writer.Write(Expired); + writer.Write(Sold); + + writer.Write((byte)ItemType); + writer.Write(CurrentBid); + writer.Write(CurrentBuyerIndex); + } + + private string GetSellerLabel(bool userMatch) + { + switch (ItemType) + { + case MarketItemType.GameShop: + return ""; + case MarketItemType.Consign: + return userMatch ? (Sold ? "Sold" : (Expired ? "Expired" : "For Sale")) : SellerInfo.Name; + case MarketItemType.Auction: + return userMatch ? (Sold ? "Sold" : (Expired ? "Expired" : CurrentBid > Price ? "Bid Met" : "No Bid")) : SellerInfo.Name; + } + + return ""; + } + + public ClientAuction CreateClientAuction(bool userMatch) + { + return new ClientAuction + { + AuctionID = AuctionID, + Item = Item, + Seller = GetSellerLabel(userMatch), + Price = ItemType == MarketItemType.Auction ? CurrentBid : Price, + ConsignmentDate = ConsignmentDate, + ItemType = ItemType + }; + } + } +} diff --git a/Server/MirDatabase/BuffInfo.cs b/Server/MirDatabase/BuffInfo.cs new file mode 100644 index 0000000..345a1d0 --- /dev/null +++ b/Server/MirDatabase/BuffInfo.cs @@ -0,0 +1,238 @@ +using Server.MirEnvir; +using Server.MirObjects; + +namespace Server.MirDatabase +{ + public class BuffInfo + { + public BuffType Type { get; set; } + public BuffStackType StackType { get; set; } + public BuffProperty Properties { get; set; } + public int Icon { get; set; } + public bool Visible { get; set; } + + public static List Load() + { + List info = new List + { + //Magics + new BuffInfo { Type = BuffType.Hiding, Properties = BuffProperty.None, StackType = BuffStackType.ResetDuration }, + new BuffInfo { Type = BuffType.SoulShield, Properties = BuffProperty.None, StackType = BuffStackType.ResetDuration }, + new BuffInfo { Type = BuffType.BlessedArmour, Properties = BuffProperty.None, StackType = BuffStackType.ResetDuration }, + new BuffInfo { Type = BuffType.UltimateEnhancer, Properties = BuffProperty.None, StackType = BuffStackType.ResetStatAndDuration }, + new BuffInfo { Type = BuffType.MagicShield, Properties = BuffProperty.None, StackType = BuffStackType.ResetDuration }, + + //Special + new BuffInfo { Type = BuffType.GameMaster, Properties = BuffProperty.None, StackType = BuffStackType.Infinite, Visible = Settings.GameMasterEffect }, + new BuffInfo { Type = BuffType.Guild, Properties = BuffProperty.None, StackType = BuffStackType.Infinite }, + new BuffInfo { Type = BuffType.Skill, Properties = BuffProperty.None, StackType = BuffStackType.Infinite }, + new BuffInfo { Type = BuffType.ClearRing, Properties = BuffProperty.None, StackType = BuffStackType.Infinite }, + new BuffInfo { Type = BuffType.Lover, Properties = BuffProperty.RemoveOnExit, StackType = BuffStackType.Infinite }, + new BuffInfo { Type = BuffType.Rested, Properties = BuffProperty.None, StackType = BuffStackType.ResetDuration }, + new BuffInfo { Type = BuffType.Prison, Properties = BuffProperty.None, StackType = BuffStackType.None }, //??? + new BuffInfo { Type = BuffType.General, Properties = BuffProperty.None, StackType = BuffStackType.None }, //??? + + //Stats + new BuffInfo { Type = BuffType.Exp, Properties = BuffProperty.PauseInSafeZone, StackType = BuffStackType.StackDuration }, + new BuffInfo { Type = BuffType.Drop, Properties = BuffProperty.PauseInSafeZone, StackType = BuffStackType.StackDuration }, + new BuffInfo { Type = BuffType.Gold, Properties = BuffProperty.PauseInSafeZone, StackType = BuffStackType.StackDuration }, + new BuffInfo { Type = BuffType.BagWeight, Properties = BuffProperty.None, StackType = BuffStackType.StackDuration }, + new BuffInfo { Type = BuffType.Impact, Properties = BuffProperty.None, StackType = BuffStackType.StackDuration }, + new BuffInfo { Type = BuffType.Magic, Properties = BuffProperty.None, StackType = BuffStackType.StackDuration }, + new BuffInfo { Type = BuffType.Taoist, Properties = BuffProperty.None, StackType = BuffStackType.StackDuration }, + new BuffInfo { Type = BuffType.Storm, Properties = BuffProperty.None, StackType = BuffStackType.StackDuration }, + new BuffInfo { Type = BuffType.HealthAid, Properties = BuffProperty.None, StackType = BuffStackType.StackDuration }, + new BuffInfo { Type = BuffType.ManaAid, Properties = BuffProperty.None, StackType = BuffStackType.StackDuration }, + new BuffInfo { Type = BuffType.Defence, Properties = BuffProperty.None, StackType = BuffStackType.StackDuration }, + new BuffInfo { Type = BuffType.MagicDefence, Properties = BuffProperty.None, StackType = BuffStackType.StackDuration }, + new BuffInfo { Type = BuffType.WonderDrug, Properties = BuffProperty.None, StackType = BuffStackType.StackDuration }, + new BuffInfo { Type = BuffType.Knapsack, Properties = BuffProperty.None, StackType = BuffStackType.StackDuration } + }; + + return info; + } + } + + public class Buff + { + protected static Envir Envir + { + get { return Envir.Main; } + } + + private Dictionary Data { get; set; } = new Dictionary(); + + public BuffInfo Info; + public MapObject Caster; + public uint ObjectID; + public long ExpireTime; + + public long LastTime, NextTime; + + public Stats Stats; + + public int[] Values; + + public bool FlagForRemoval; + public bool Paused; + + public BuffType Type + { + get { return Info.Type; } + } + + public BuffStackType StackType + { + get { return Info.StackType; } + } + + public BuffProperty Properties + { + get { return Info.Properties; } + } + + public Buff(BuffType type) + { + Info = Envir.GetBuffInfo(type); + Stats = new Stats(); + Data = new Dictionary(); + } + + public Buff(BinaryReader reader, int version, int customVersion) + { + var type = (BuffType)reader.ReadByte(); + + Info = Envir.GetBuffInfo(type); + + Caster = null; + + if (version < 88) + { + var visible = reader.ReadBoolean(); + } + + ObjectID = reader.ReadUInt32(); + ExpireTime = reader.ReadInt64(); + + if (version <= 84) + { + Values = new int[reader.ReadInt32()]; + + for (int i = 0; i < Values.Length; i++) + { + Values[i] = reader.ReadInt32(); + } + + if (version < 88) + { + var infinite = reader.ReadBoolean(); + } + + Stats = new Stats(); + Data = new Dictionary(); + } + else + { + if (version < 88) + { + var stackable = reader.ReadBoolean(); + } + + Values = new int[0]; + Stats = new Stats(reader, version, customVersion); + Data = new Dictionary(); + + int count = reader.ReadInt32(); + + for (int i = 0; i < count; i++) + { + var key = reader.ReadString(); + var length = reader.ReadInt32(); + + var array = new byte[length]; + + for (int j = 0; j < array.Length; j++) + { + array[j] = reader.ReadByte(); + } + + Data[key] = Functions.DeserializeFromBytes(array); + } + + if (version > 86) + { + count = reader.ReadInt32(); + + Values = new int[count]; + + for (int i = 0; i < count; i++) + { + Values[i] = reader.ReadInt32(); + } + } + } + } + + public void Save(BinaryWriter writer) + { + writer.Write((byte)Type); + writer.Write(ObjectID); + writer.Write(ExpireTime); + + Stats.Save(writer); + + writer.Write(Data.Count); + + foreach (KeyValuePair pair in Data) + { + var bytes = Functions.SerializeToBytes(pair.Value); + + writer.Write(pair.Key); + writer.Write(bytes.Length); + + for (int i = 0; i < bytes.Length; i++) + { + writer.Write(bytes[i]); + } + } + + writer.Write(Values.Length); + + for (int i = 0; i < Values.Length; i++) + { + writer.Write(Values[i]); + } + } + + public T Get(string key) + { + if (!Data.TryGetValue(key, out object result)) + { + return default; + } + + return (T)result; + } + + public void Set(string key, object val) + { + Data[key] = val; + } + + public ClientBuff ToClientBuff() + { + return new ClientBuff + { + Type = Type, + Caster = Caster?.Name ?? "", + ObjectID = ObjectID, + Visible = Info.Visible, + Infinite = StackType == BuffStackType.Infinite, + Paused = Paused, + ExpireTime = ExpireTime, + Stats = new Stats(Stats), + Values = Values + }; + } + } +} diff --git a/Server/MirDatabase/CharacterInfo.cs b/Server/MirDatabase/CharacterInfo.cs new file mode 100644 index 0000000..f364a9b --- /dev/null +++ b/Server/MirDatabase/CharacterInfo.cs @@ -0,0 +1,602 @@ +using Server.MirEnvir; +using Server.MirNetwork; +using Server.MirObjects; + +namespace Server.MirDatabase +{ + public class CharacterInfo + { + protected static Envir Envir + { + get { return Envir.Main; } + } + + public int Index; + public string Name; + public ushort Level; + public MirClass Class; + public MirGender Gender; + public byte Hair; + public int GuildIndex = -1; + + public string CreationIP; + public DateTime CreationDate; + + public bool Banned; + public string BanReason = string.Empty; + public DateTime ExpiryDate; + + public bool ChatBanned; + public DateTime ChatBanExpiryDate; + + public string LastIP = string.Empty; + public DateTime LastLogoutDate; + public DateTime LastLoginDate; + + public bool Deleted; + public DateTime DeleteDate; + + //Marriage + public int Married = 0; + public DateTime MarriedDate; + + //Location + public int CurrentMapIndex; + public Point CurrentLocation; + public MirDirection Direction; + public int BindMapIndex; + public Point BindLocation; + + public int HP, MP; + public long Experience; + + public AttackMode AMode; + public PetMode PMode; + public bool AllowGroup; + public bool AllowTrade; + public bool AllowObserve; + + public int PKPoints; + + public bool NewDay; + + public bool Thrusting, HalfMoon, CrossHalfMoon; + public bool DoubleSlash; + public byte MentalState; + public byte MentalStateLvl; + + public UserItem[] Inventory = new UserItem[36], Equipment = new UserItem[8], Trade = new UserItem[10], QuestInventory = new UserItem[30], Refine = new UserItem[16]; + public UserItem CurrentRefine = null; + public long CollectTime = 0; + public List Magics = new List(); + public List Pets = new List(); + public List Buffs = new List(); + public List Poisons = new List(); + public List Mail = new List(); + public List Friends = new List(); + + public List CurrentQuests = new List(); + public List CompletedQuests = new List(); + + public bool[] Flags = new bool[Globals.FlagIndexCount]; + + public AccountInfo AccountInfo; + public PlayerObject Player; + + public Dictionary GSpurchases = new Dictionary(); + public int[] Rank = new int[2];//dont save this in db!(and dont send it to clients :p) + + public CharacterInfo() { } + + public CharacterInfo(ClientPackets.NewCharacter p, MirConnection c) + { + Name = p.Name; + Class = p.Class; + Gender = p.Gender; + Hair = Math.Clamp(p.Hair, (byte)1, (byte)21); + + CreationIP = c.IPAddress; + CreationDate = Envir.Now; + } + + public CharacterInfo(BinaryReader reader, int version, int customVersion) + { + Load(reader, version, customVersion); + } + + public virtual void Load(BinaryReader reader, int version, int customVersion) + { + Index = reader.ReadInt32(); + Name = reader.ReadString(); + + if (version < 62) + { + Level = (ushort)reader.ReadByte(); + } + else + { + Level = reader.ReadUInt16(); + } + + Class = (MirClass)reader.ReadByte(); + Gender = (MirGender)reader.ReadByte(); + Hair = reader.ReadByte(); + + CreationIP = reader.ReadString(); + CreationDate = DateTime.FromBinary(reader.ReadInt64()); + + Banned = reader.ReadBoolean(); + BanReason = reader.ReadString(); + ExpiryDate = DateTime.FromBinary(reader.ReadInt64()); + + LastIP = reader.ReadString(); + LastLogoutDate = DateTime.FromBinary(reader.ReadInt64()); + + if (version > 81) + { + LastLoginDate = DateTime.FromBinary(reader.ReadInt64()); + } + + Deleted = reader.ReadBoolean(); + DeleteDate = DateTime.FromBinary(reader.ReadInt64()); + + CurrentMapIndex = reader.ReadInt32(); + CurrentLocation = new Point(reader.ReadInt32(), reader.ReadInt32()); + Direction = (MirDirection)reader.ReadByte(); + BindMapIndex = reader.ReadInt32(); + BindLocation = new Point(reader.ReadInt32(), reader.ReadInt32()); + + if (version <= 84) + { + HP = reader.ReadUInt16(); + MP = reader.ReadUInt16(); + } + else + { + HP = reader.ReadInt32(); + MP = reader.ReadInt32(); + } + + Experience = reader.ReadInt64(); + + AMode = (AttackMode)reader.ReadByte(); + PMode = (PetMode)reader.ReadByte(); + + if (version > 34) + { + PKPoints = reader.ReadInt32(); + } + + int count = reader.ReadInt32(); + + Array.Resize(ref Inventory, count); + + for (int i = 0; i < count; i++) + { + if (!reader.ReadBoolean()) continue; + UserItem item = new UserItem(reader, version, customVersion); + if (Envir.BindItem(item) && i < Inventory.Length) + { + Inventory[i] = item; + } + } + + count = reader.ReadInt32(); + for (int i = 0; i < count; i++) + { + if (!reader.ReadBoolean()) continue; + UserItem item = new UserItem(reader, version, customVersion); + if (Envir.BindItem(item) && i < Equipment.Length) + { + Equipment[i] = item; + } + } + + count = reader.ReadInt32(); + for (int i = 0; i < count; i++) + { + if (!reader.ReadBoolean()) continue; + UserItem item = new UserItem(reader, version, customVersion); + if (Envir.BindItem(item) && i < QuestInventory.Length) + { + QuestInventory[i] = item; + } + } + + count = reader.ReadInt32(); + for (int i = 0; i < count; i++) + { + UserMagic magic = new UserMagic(reader, version, customVersion); + if (magic.Info == null) continue; + + magic.CastTime = int.MinValue; + Magics.Add(magic); + } + + Thrusting = reader.ReadBoolean(); + HalfMoon = reader.ReadBoolean(); + CrossHalfMoon = reader.ReadBoolean(); + DoubleSlash = reader.ReadBoolean(); + + MentalState = reader.ReadByte(); + + count = reader.ReadInt32(); + for (int i = 0; i < count; i++) + { + Pets.Add(new PetInfo(reader, version, customVersion)); + } + + AllowGroup = reader.ReadBoolean(); + + for (int i = 0; i < Globals.FlagIndexCount; i++) + { + Flags[i] = reader.ReadBoolean(); + } + + GuildIndex = reader.ReadInt32(); + + AllowTrade = reader.ReadBoolean(); + if (version > 104) + AllowObserve = reader.ReadBoolean(); + + count = reader.ReadInt32(); + + for (int i = 0; i < count; i++) + { + QuestProgressInfo quest = new QuestProgressInfo(reader, version, customVersion); + if (Envir.BindQuest(quest)) + { + CurrentQuests.Add(quest); + } + } + + count = reader.ReadInt32(); + for (int i = 0; i < count; i++) + { + Buff buff = new Buff(reader, version, customVersion); + + Buffs.Add(buff); + } + + count = reader.ReadInt32(); + for (int i = 0; i < count; i++) + { + Mail.Add(new MailInfo(reader, version, customVersion)); + } + + count = reader.ReadInt32(); + for (int i = 0; i < count; i++) + { + CompletedQuests.Add(reader.ReadInt32()); + } + + if (reader.ReadBoolean()) + { + CurrentRefine = new UserItem(reader, version, customVersion); + } + + if (CurrentRefine != null) + { + Envir.BindItem(CurrentRefine); + } + + CollectTime = reader.ReadInt64(); + CollectTime += Envir.Time; + + count = reader.ReadInt32(); + for (int i = 0; i < count; i++) + { + Friends.Add(new FriendInfo(reader, version, customVersion)); + } + + Married = reader.ReadInt32(); + MarriedDate = DateTime.FromBinary(reader.ReadInt64()); + + if (version >= 63) + { + int logCount = reader.ReadInt32(); + + for (int i = 0; i < logCount; i++) + { + GSpurchases.Add(reader.ReadInt32(), reader.ReadInt32()); + } + } + } + + public virtual void Save(BinaryWriter writer) + { + writer.Write(Index); + writer.Write(Name); + writer.Write(Level); + writer.Write((byte) Class); + writer.Write((byte) Gender); + writer.Write(Hair); + + writer.Write(CreationIP); + writer.Write(CreationDate.ToBinary()); + + writer.Write(Banned); + writer.Write(BanReason); + writer.Write(ExpiryDate.ToBinary()); + + writer.Write(LastIP); + writer.Write(LastLogoutDate.ToBinary()); + writer.Write(LastLoginDate.ToBinary()); + + writer.Write(Deleted); + writer.Write(DeleteDate.ToBinary()); + + writer.Write(CurrentMapIndex); + writer.Write(CurrentLocation.X); + writer.Write(CurrentLocation.Y); + writer.Write((byte)Direction); + writer.Write(BindMapIndex); + writer.Write(BindLocation.X); + writer.Write(BindLocation.Y); + + writer.Write(HP); + writer.Write(MP); + writer.Write(Experience); + + writer.Write((byte) AMode); + writer.Write((byte) PMode); + + writer.Write(PKPoints); + + writer.Write(Inventory.Length); + for (int i = 0; i < Inventory.Length; i++) + { + writer.Write(Inventory[i] != null); + if (Inventory[i] == null) continue; + + Inventory[i].Save(writer); + } + + writer.Write(Equipment.Length); + for (int i = 0; i < Equipment.Length; i++) + { + writer.Write(Equipment[i] != null); + if (Equipment[i] == null) continue; + + Equipment[i].Save(writer); + } + + writer.Write(QuestInventory.Length); + for (int i = 0; i < QuestInventory.Length; i++) + { + writer.Write(QuestInventory[i] != null); + if (QuestInventory[i] == null) continue; + + QuestInventory[i].Save(writer); + } + + writer.Write(Magics.Count); + for (int i = 0; i < Magics.Count; i++) + { + Magics[i].Save(writer); + } + + writer.Write(Thrusting); + writer.Write(HalfMoon); + writer.Write(CrossHalfMoon); + writer.Write(DoubleSlash); + writer.Write(MentalState); + + writer.Write(Pets.Count); + for (int i = 0; i < Pets.Count; i++) + { + Pets[i].Save(writer); + } + + writer.Write(AllowGroup); + + for (int i = 0; i < Flags.Length; i++) + { + writer.Write(Flags[i]); + } + + writer.Write(GuildIndex); + + writer.Write(AllowTrade); + writer.Write(AllowObserve); + + writer.Write(CurrentQuests.Count); + for (int i = 0; i < CurrentQuests.Count; i++) + { + CurrentQuests[i].Save(writer); + } + + writer.Write(Buffs.Count); + for (int i = 0; i < Buffs.Count; i++) + { + Buffs[i].Save(writer); + } + + writer.Write(Mail.Count); + for (int i = 0; i < Mail.Count; i++) + { + Mail[i].Save(writer); + } + + writer.Write(CompletedQuests.Count); + for (int i = 0; i < CompletedQuests.Count; i++) + { + writer.Write(CompletedQuests[i]); + } + + + writer.Write(CurrentRefine != null); + if (CurrentRefine != null) + { + CurrentRefine.Save(writer); + } + + if ((CollectTime - Envir.Time) < 0) + { + CollectTime = 0; + } + else + { + CollectTime -= Envir.Time; + } + + writer.Write(CollectTime); + + writer.Write(Friends.Count); + for (int i = 0; i < Friends.Count; i++) + { + if (Friends[i].Info == null) continue; + Friends[i].Save(writer); + } + + writer.Write(Married); + writer.Write(MarriedDate.ToBinary()); + + writer.Write(GSpurchases.Count); + + foreach (var item in GSpurchases) + { + writer.Write(item.Key); + writer.Write(item.Value); + } + } + + public SelectInfo ToSelectInfo() + { + return new SelectInfo + { + Index = Index, + Name = Name, + Level = Level, + Class = Class, + Gender = Gender, + Hair = Hair, + Body = Equipment[(int)EquipmentSlot.Armour]?.Info?.Shape ?? 0, + Weapon = Equipment[(int)EquipmentSlot.Weapon]?.Info?.Shape ?? 0, + LastAccess = LastLogoutDate + }; + } + public virtual int ResizeInventory() + { + if (Inventory.Length >= 86) return Inventory.Length; + + if (Inventory.Length == 46) + { + Array.Resize(ref Inventory, Inventory.Length + 8); + } + else + { + Array.Resize(ref Inventory, Inventory.Length + 4); + } + + return Inventory.Length; + } + } + + public class PetInfo + { + public int MonsterIndex; + public int HP; + public uint Experience; + public byte Level, MaxPetLevel; + + public long TameTime; + + public PetInfo(MonsterObject ob) + { + MonsterIndex = ob.Info.Index; + HP = ob.HP; + Experience = ob.PetExperience; + Level = ob.PetLevel; + MaxPetLevel = ob.MaxPetLevel; + } + + public PetInfo(BinaryReader reader, int version, int customVersion) + { + MonsterIndex = reader.ReadInt32(); + if (MonsterIndex == 271) MonsterIndex = 275; + + if (version <= 84) + { + HP = (int)reader.ReadUInt32(); + } + else + { + HP = reader.ReadInt32(); + } + + Experience = reader.ReadUInt32(); + Level = reader.ReadByte(); + MaxPetLevel = reader.ReadByte(); + } + + public void Save(BinaryWriter writer) + { + writer.Write(MonsterIndex); + writer.Write(HP); + writer.Write(Experience); + writer.Write(Level); + writer.Write(MaxPetLevel); + } + } + + public class FriendInfo + { + protected static Envir Envir + { + get { return Envir.Main; } + } + + public int Index; + + private CharacterInfo _Info; + public CharacterInfo Info + { + get + { + if (_Info == null) + { + _Info = Envir.GetCharacterInfo(Index); + } + + return _Info; + } + } + + public bool Blocked; + public string Memo; + + public FriendInfo(CharacterInfo info, bool blocked) + { + Index = info.Index; + Blocked = blocked; + Memo = ""; + } + + public FriendInfo(BinaryReader reader, int version, int customVersion) + { + Index = reader.ReadInt32(); + Blocked = reader.ReadBoolean(); + Memo = reader.ReadString(); + } + + public void Save(BinaryWriter writer) + { + writer.Write(Index); + writer.Write(Blocked); + writer.Write(Memo); + } + + public ClientFriend CreateClientFriend() + { + return new ClientFriend() + { + Index = Index, + Name = Info.Name, + Blocked = Blocked, + Memo = Memo, + Online = Info.Player != null && Info.Player.Node != null + }; + } + } +} diff --git a/Server/MirDatabase/GuildInfo.cs b/Server/MirDatabase/GuildInfo.cs new file mode 100644 index 0000000..5739193 --- /dev/null +++ b/Server/MirDatabase/GuildInfo.cs @@ -0,0 +1,231 @@ +using Server.MirEnvir; +using Server.MirObjects; + +namespace Server.MirDatabase +{ + public class GuildInfo + { + public int GuildIndex = 0; + public string Name = ""; + public byte Level = 0; + public byte SparePoints = 0; + public long Experience = 0; + public uint Gold = 0; + + public Int32 Votes = 0; + public DateTime LastVoteAttempt; + public bool Voting = false; + + public int Membercount = 0; + public List Ranks = new List(); + public GuildStorageItem[] StoredItems = new GuildStorageItem[112]; + public List BuffList = new List(); + public List Notice = new List(); + + public long MaxExperience = 0; + public int MemberCap = 0; + + public ushort FlagImage = 1000; + public Color FlagColour = Color.White; + + public bool NeedSave = false; + + protected static Envir Envir + { + get { return Envir.Main; } + } + + public GuildInfo(PlayerObject owner, string name) + { + Name = name; + + var ownerRank = new GuildRank { Name = "Leader", Options = (GuildRankOptions)255, Index = 0 }; + var leader = new GuildMember { Name = owner.Info.Name, Player = owner, Id = owner.Info.Index, LastLogin = Envir.Now, Online = true }; + + ownerRank.Members.Add(leader); + Ranks.Add(ownerRank); + + Membercount++; + NeedSave = true; + + if (Level < Settings.Guild_ExperienceList.Count) + { + MaxExperience = Settings.Guild_ExperienceList[Level]; + } + + if (Name == Settings.PalaceGuild) + { + MemberCap = Settings.PalaceGuildMaxSize; + Level = 1; + } + else if(Level < Settings.Guild_MembercapList.Count) + { + MemberCap = Settings.Guild_MembercapList[Level]; + } + + FlagColour = Color.FromArgb(255, Envir.Random.Next(255), Envir.Random.Next(255), Envir.Random.Next(255)); + } + + public GuildInfo(BinaryReader reader) + { + int customversion = Envir.LoadCustomVersion; + int version = reader.ReadInt32(); + GuildIndex = version; + + if (version == int.MaxValue) + { + version = reader.ReadInt32(); + customversion = reader.ReadInt32(); + GuildIndex = reader.ReadInt32(); + } + else + { + version = Envir.LoadVersion; + NeedSave = true; + } + + Name = reader.ReadString(); + Level = reader.ReadByte(); + SparePoints = reader.ReadByte(); + Experience = reader.ReadInt64(); + Gold = reader.ReadUInt32(); + Votes = reader.ReadInt32(); + LastVoteAttempt = DateTime.FromBinary(reader.ReadInt64()); + Voting = reader.ReadBoolean(); + + int rankCount = reader.ReadInt32(); + Membercount = 0; + + for (int i = 0; i < rankCount; i++) + { + int index = i; + Ranks.Add(new GuildRank(reader, true) { Index = index }); + Membercount += Ranks[i].Members.Count; + } + + int itemCount = reader.ReadInt32(); + for (int j = 0; j < itemCount; j++) + { + if (!reader.ReadBoolean()) continue; + + GuildStorageItem Guilditem = new GuildStorageItem() + { + Item = new UserItem(reader, version, customversion), + UserId = reader.ReadInt64() + }; + + if (Envir.BindItem(Guilditem.Item) && j < StoredItems.Length) + StoredItems[j] = Guilditem; + } + + int buffCount = reader.ReadInt32(); + if (version < 61) + { + for (int j = 0; j < buffCount; j++) + new GuildBuffOld(reader); + } + else + { + for (int j = 0; j < buffCount; j++) + { + //new GuildBuff(reader); + BuffList.Add(new GuildBuff(reader)); + } + } + + for (int j = 0; j < BuffList.Count; j++) + { + BuffList[j].Info = Envir.FindGuildBuffInfo(BuffList[j].Id); + } + + int noticeCount = reader.ReadInt32(); + for (int j = 0; j < noticeCount; j++) + { + Notice.Add(reader.ReadString()); + } + + if (Level < Settings.Guild_ExperienceList.Count) + { + MaxExperience = Settings.Guild_ExperienceList[Level]; + } + + if (Name == Settings.PalaceGuild) + { + MemberCap = Settings.PalaceGuildMaxSize; + } + else if (Level < Settings.Guild_MembercapList.Count) + { + MemberCap = Settings.Guild_MembercapList[Level]; + } + + if (version > 72) + { + FlagImage = reader.ReadUInt16(); + FlagColour = Color.FromArgb(reader.ReadInt32()); + } + } + + public void Save(BinaryWriter writer) + { + int temp = int.MaxValue; + writer.Write(temp); + writer.Write(Envir.Version); + writer.Write(Envir.CustomVersion); + + int rankCount = 0; + for (int i = Ranks.Count - 1; i >= 0; i--) + { + if (Ranks[i].Members.Count > 0) + { + rankCount++; + } + } + + writer.Write(GuildIndex); + writer.Write(Name); + writer.Write(Level); + writer.Write(SparePoints); + writer.Write(Experience); + writer.Write(Gold); + writer.Write(Votes); + writer.Write(LastVoteAttempt.ToBinary()); + writer.Write(Voting); + + writer.Write(rankCount); + for (int i = 0; i < Ranks.Count; i++) + { + if (Ranks[i].Members.Count > 0) + { + Ranks[i].Save(writer, true); + } + } + + writer.Write(StoredItems.Length); + for (int i = 0; i < StoredItems.Length; i++) + { + writer.Write(StoredItems[i] != null); + if (StoredItems[i] != null) + { + StoredItems[i].Item.Save(writer); + writer.Write(StoredItems[i].UserId); + } + } + + writer.Write(BuffList.Count); + for (int i = 0; i < BuffList.Count; i++) + { + BuffList[i].Save(writer); + } + + writer.Write(Notice.Count); + for (int i = 0; i < Notice.Count; i++) + { + writer.Write(Notice[i]); + } + + writer.Write(FlagImage); + writer.Write(FlagColour.ToArgb()); + } + + } +} diff --git a/Server/MirDatabase/MagicInfo.cs b/Server/MirDatabase/MagicInfo.cs new file mode 100644 index 0000000..cb8cf68 --- /dev/null +++ b/Server/MirDatabase/MagicInfo.cs @@ -0,0 +1,223 @@ +using Server.MirEnvir; +using S = ServerPackets; + +namespace Server.MirDatabase +{ + public class MagicInfo + { + protected static Envir Envir + { + get { return Envir.Main; } + } + + public string Name; + public Spell Spell; + public byte BaseCost, LevelCost, Icon; + public byte Level1, Level2, Level3; + public ushort Need1, Need2, Need3; + public uint DelayBase = 1800, DelayReduction; + public ushort PowerBase, PowerBonus; + public ushort MPowerBase, MPowerBonus; + public float MultiplierBase = 1.0f, MultiplierBonus; + public byte Range = 9; + + public override string ToString() + { + return Name; + } + + public MagicInfo() + { + + } + + public MagicInfo (BinaryReader reader, int version = int.MaxValue, int Customversion = int.MaxValue) + { + Name = reader.ReadString(); + Spell = (Spell)reader.ReadByte(); + BaseCost = reader.ReadByte(); + LevelCost = reader.ReadByte(); + Icon = reader.ReadByte(); + Level1 = reader.ReadByte(); + Level2 = reader.ReadByte(); + Level3 = reader.ReadByte(); + Need1 = reader.ReadUInt16(); + Need2 = reader.ReadUInt16(); + Need3 = reader.ReadUInt16(); + DelayBase = reader.ReadUInt32(); + DelayReduction = reader.ReadUInt32(); + PowerBase = reader.ReadUInt16(); + PowerBonus = reader.ReadUInt16(); + MPowerBase = reader.ReadUInt16(); + MPowerBonus = reader.ReadUInt16(); + + if (version > 66) + Range = reader.ReadByte(); + if (version > 70) + { + MultiplierBase = reader.ReadSingle(); + MultiplierBonus = reader.ReadSingle(); + } + } + + public void Save(BinaryWriter writer) + { + writer.Write(Name); + writer.Write((byte)Spell); + writer.Write(BaseCost); + writer.Write(LevelCost); + writer.Write(Icon); + writer.Write(Level1); + writer.Write(Level2); + writer.Write(Level3); + writer.Write(Need1); + writer.Write(Need2); + writer.Write(Need3); + writer.Write(DelayBase); + writer.Write(DelayReduction); + writer.Write(PowerBase); + writer.Write(PowerBonus); + writer.Write(MPowerBase); + writer.Write(MPowerBonus); + writer.Write(Range); + writer.Write(MultiplierBase); + writer.Write(MultiplierBonus); + } + } + + public class UserMagic + { + protected static Envir Envir + { + get { return Envir.Main; } + } + + public Spell Spell; + public MagicInfo Info; + + public byte Level, Key; + public ushort Experience; + public bool IsTempSpell; + public long CastTime; + + private MagicInfo GetMagicInfo(Spell spell) + { + for (int i = 0; i < Envir.MagicInfoList.Count; i++) + { + MagicInfo info = Envir.MagicInfoList[i]; + if (info.Spell != spell) continue; + return info; + } + return null; + } + + public UserMagic(Spell spell) + { + Spell = spell; + + Info = GetMagicInfo(Spell); + } + public UserMagic(BinaryReader reader, int version, int customVersion) + { + Spell = (Spell) reader.ReadByte(); + Info = GetMagicInfo(Spell); + + Level = reader.ReadByte(); + Key = reader.ReadByte(); + Experience = reader.ReadUInt16(); + + if (version < 15) return; + IsTempSpell = reader.ReadBoolean(); + + if (version < 65) return; + CastTime = reader.ReadInt64(); + } + public void Save(BinaryWriter writer) + { + writer.Write((byte) Spell); + + writer.Write(Level); + writer.Write(Key); + writer.Write(Experience); + writer.Write(IsTempSpell); + writer.Write(CastTime); + } + + public Packet GetInfo() + { + return new S.NewMagic + { + Magic = CreateClientMagic() + }; + } + + public ClientMagic CreateClientMagic() + { + return new ClientMagic + { + Name = Info.Name, + Spell = Spell, + BaseCost = Info.BaseCost, + LevelCost = Info.LevelCost, + Icon = Info.Icon, + Level1 = Info.Level1, + Level2 = Info.Level2, + Level3 = Info.Level3, + Need1 = Info.Need1, + Need2 = Info.Need2, + Need3 = Info.Need3, + Level = Level, + Key = Key, + Experience = Experience, + IsTempSpell = IsTempSpell, + Delay = GetDelay(), + Range = Info.Range, + CastTime = CastTime - Envir.Time + }; + } + + public int GetDamage(int DamageBase) + { + return (int)((DamageBase + GetPower()) * GetMultiplier()); + } + + public float GetMultiplier() + { + return (Info.MultiplierBase + (Level * Info.MultiplierBonus)); + } + + public int GetPower() + { + return (int)Math.Round((MPower() / 4F) * (Level + 1) + DefPower()); + } + + public int MPower() + { + if (Info.MPowerBonus > 0) + { + return Envir.Random.Next(Info.MPowerBase, Info.MPowerBonus + Info.MPowerBase); + } + else + return Info.MPowerBase; + } + public int DefPower() + { + if (Info.PowerBonus > 0) + { + return Envir.Random.Next(Info.PowerBase, Info.PowerBonus + Info.PowerBase); + } + else + return Info.PowerBase; + } + + public int GetPower(int power) + { + return (int)Math.Round(power / 4F * (Level + 1) + DefPower()); + } + + public long GetDelay() + { + return Info.DelayBase - (Level * Info.DelayReduction); + } + } +} diff --git a/Server/MirDatabase/MailInfo.cs b/Server/MirDatabase/MailInfo.cs new file mode 100644 index 0000000..050a548 --- /dev/null +++ b/Server/MirDatabase/MailInfo.cs @@ -0,0 +1,167 @@ +using Server.MirDatabase; + +namespace Server.MirEnvir +{ + public class MailInfo + { + protected static Envir Envir + { + get { return Envir.Main; } + } + + public ulong MailID; + + public string Sender; + + public int RecipientIndex; + public CharacterInfo RecipientInfo; + + public string Message = string.Empty; + public uint Gold = 0; + public List Items = new List(); + + public DateTime DateSent, DateOpened; + + public bool Sent + { + get { return DateSent > DateTime.MinValue; } + } + + public bool Opened + { + get { return DateOpened > DateTime.MinValue; } + } + + public bool Locked; + + public bool Collected; + + public bool Parcel //parcel if item contains gold or items. + { + get { return Gold > 0 || Items.Count > 0; } + } + + public bool CanReply; + + public MailInfo(int recipientIndex, bool canReply = false) + { + MailID = ++Envir.NextMailID; + RecipientIndex = recipientIndex; + + CanReply = canReply; + } + + public MailInfo(BinaryReader reader, int version, int customversion) + { + MailID = reader.ReadUInt64(); + Sender = reader.ReadString(); + RecipientIndex = reader.ReadInt32(); + Message = reader.ReadString(); + Gold = reader.ReadUInt32(); + + int count = reader.ReadInt32(); + + for (int i = 0; i < count; i++) + { + UserItem item = new UserItem(reader, version, customversion); + if (Envir.BindItem(item)) + Items.Add(item); + } + + DateSent = DateTime.FromBinary(reader.ReadInt64()); + DateOpened = DateTime.FromBinary(reader.ReadInt64()); + + Locked = reader.ReadBoolean(); + Collected = reader.ReadBoolean(); + CanReply = reader.ReadBoolean(); + } + + public void Save(BinaryWriter writer) + { + writer.Write(MailID); + writer.Write(Sender); + writer.Write(RecipientIndex); + writer.Write(Message); + writer.Write(Gold); + + writer.Write(Items.Count); + for (int i = 0; i < Items.Count; i++) + Items[i].Save(writer); + + writer.Write(DateSent.ToBinary()); + writer.Write(DateOpened.ToBinary()); + + writer.Write(Locked); + writer.Write(Collected); + writer.Write(CanReply); + } + + public void Send() + { + if (Sent) return; + + Collected = true; + + if (Parcel) + { + if(Items.Count > 0 && Gold > 0) + { + if(!Settings.MailAutoSendGold || !Settings.MailAutoSendItems) + { + Collected = false; + } + } + if(Items.Count > 0) + { + if (!Settings.MailAutoSendItems) + { + Collected = false; + } + } + else + { + if (!Settings.MailAutoSendGold) + { + Collected = false; + } + } + } + + if (RecipientInfo == null) + { + RecipientInfo = Envir.GetCharacterInfo(RecipientIndex); + } + + RecipientInfo.Mail.Add(this); //add to players inbox + + if (RecipientInfo.Player != null) + { + RecipientInfo.Player.NewMail = true; //notify player of new mail --check in player process + } + + DateSent = Envir.Now; + } + + public ClientMail CreateClientMail() + { + return new ClientMail + { + MailID = MailID, + SenderName = Sender, + Message = Message, + Locked = Locked, + CanReply = CanReply, + Gold = Gold, + Items = Items, + Opened = Opened, + Collected = Collected, + DateSent = DateSent + }; + } + } + + // player bool NewMail (process in envir loop) - send all mail on login + + // Send mail from player (auto from player) + // Send mail from Envir (mir administrator) +} diff --git a/Server/MirDatabase/MapInfo.cs b/Server/MirDatabase/MapInfo.cs new file mode 100644 index 0000000..afaae2f --- /dev/null +++ b/Server/MirDatabase/MapInfo.cs @@ -0,0 +1,290 @@ +using Server.MirEnvir; + +namespace Server.MirDatabase +{ + public class MapInfo + { + protected static Envir Envir + { + get { return Envir.Main; } + } + + protected static Envir EditEnvir + { + get { return Envir.Edit; } + } + + public int Index; + public string FileName = string.Empty, Title = string.Empty; + public ushort MiniMap, BigMap, Music; + public LightSetting Light; + public byte MapDarkLight = 0; + + public bool NoTeleport, NoReconnect, NoRandom, NoEscape, NoRecall, NoDrug, NoPosition, NoFight, + NoThrowItem, NoDropPlayer, NoDropMonster, NoNames, Fight, Fire, Lightning, + NoTownTeleport, NoReincarnation; + + public string NoReconnectMap = string.Empty; + public int FireDamage, LightningDamage; + + public List SafeZones = new List(); + public List Movements = new List(); + public List Respawns = new List(); + public List NPCs = new List(); + public List ActiveCoords = new List(); + + public MapInfo() + { + + } + + public MapInfo(BinaryReader reader) + { + Index = reader.ReadInt32(); + FileName = reader.ReadString(); + Title = reader.ReadString(); + MiniMap = reader.ReadUInt16(); + Light = (LightSetting) reader.ReadByte(); + + BigMap = reader.ReadUInt16(); + + int count = reader.ReadInt32(); + for (int i = 0; i < count; i++) + SafeZones.Add(new SafeZoneInfo(reader) { Info = this }); + + count = reader.ReadInt32(); + for (int i = 0; i < count; i++) + Respawns.Add(new RespawnInfo(reader, Envir.LoadVersion, Envir.LoadCustomVersion)); + + count = reader.ReadInt32(); + for (int i = 0; i < count; i++) + Movements.Add(new MovementInfo(reader)); + + NoTeleport = reader.ReadBoolean(); + NoReconnect = reader.ReadBoolean(); + NoReconnectMap = reader.ReadString(); + + NoRandom = reader.ReadBoolean(); + NoEscape = reader.ReadBoolean(); + NoRecall = reader.ReadBoolean(); + NoDrug = reader.ReadBoolean(); + NoPosition = reader.ReadBoolean(); + NoThrowItem = reader.ReadBoolean(); + NoDropPlayer = reader.ReadBoolean(); + NoDropMonster = reader.ReadBoolean(); + NoNames = reader.ReadBoolean(); + Fight = reader.ReadBoolean(); + Fire = reader.ReadBoolean(); + FireDamage = reader.ReadInt32(); + Lightning = reader.ReadBoolean(); + LightningDamage = reader.ReadInt32(); + MapDarkLight = reader.ReadByte(); + NoFight = reader.ReadBoolean(); + Music = reader.ReadUInt16(); + + if (Envir.LoadVersion < 78) return; + NoTownTeleport = reader.ReadBoolean(); + if (Envir.LoadVersion < 79) return; + NoReincarnation = reader.ReadBoolean(); + } + + public void Save(BinaryWriter writer) + { + writer.Write(Index); + writer.Write(FileName); + writer.Write(Title); + writer.Write(MiniMap); + writer.Write((byte)Light); + writer.Write(BigMap); + writer.Write(SafeZones.Count); + + for (int i = 0; i < SafeZones.Count; i++) + SafeZones[i].Save(writer); + + writer.Write(Respawns.Count); + for (int i = 0; i < Respawns.Count; i++) + Respawns[i].Save(writer); + + writer.Write(Movements.Count); + for (int i = 0; i < Movements.Count; i++) + Movements[i].Save(writer); + + writer.Write(NoTeleport); + writer.Write(NoReconnect); + writer.Write(NoReconnectMap); + writer.Write(NoRandom); + writer.Write(NoEscape); + writer.Write(NoRecall); + writer.Write(NoDrug); + writer.Write(NoPosition); + writer.Write(NoThrowItem); + writer.Write(NoDropPlayer); + writer.Write(NoDropMonster); + writer.Write(NoNames); + writer.Write(Fight); + writer.Write(Fire); + writer.Write(FireDamage); + writer.Write(Lightning); + writer.Write(LightningDamage); + writer.Write(MapDarkLight); + + writer.Write(NoFight); + + writer.Write(Music); + writer.Write(NoTownTeleport); + writer.Write(NoReincarnation); + + } + + + public void CreateMap() + { + for (int j = 0; j < Envir.NPCInfoList.Count; j++) + { + if (Envir.NPCInfoList[j].MapIndex != Index) continue; + + NPCs.Add(Envir.NPCInfoList[j]); + } + + Map map = new Map(this); + + if (!map.Load()) return; + + Envir.MapList.Add(map); + + for (int i = 0; i < SafeZones.Count; i++) + if (SafeZones[i].StartPoint) + Envir.StartPoints.Add(SafeZones[i]); + } + + public void CreateSafeZone() + { + SafeZones.Add(new SafeZoneInfo { Info = this }); + } + + public void CreateRespawnInfo() + { + Respawns.Add(new RespawnInfo { RespawnIndex = ++EditEnvir.RespawnIndex }); + } + + public override string ToString() + { + return string.Format("{0}: {1}", Index, Title); + } + + public void CreateNPCInfo() + { + NPCs.Add(new NPCInfo()); + } + + public void CreateMovementInfo() + { + Movements.Add(new MovementInfo()); + } + + public static void FromText(string text) + { + string[] data = text.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries); + + if (data.Length < 8) return; + + MapInfo info = new MapInfo {FileName = data[0], Title = data[1]}; + + + if (!ushort.TryParse(data[2], out info.MiniMap)) return; + + if (!Enum.TryParse(data[3], out info.Light)) return; + int sziCount, miCount, riCount, npcCount; + + if (!int.TryParse(data[4], out sziCount)) return; + if (!int.TryParse(data[5], out miCount)) return; + if (!int.TryParse(data[6], out riCount)) return; + if (!int.TryParse(data[7], out npcCount)) return; + + + int start = 8; + + for (int i = 0; i < sziCount; i++) + { + SafeZoneInfo temp = new SafeZoneInfo { Info = info }; + int x, y; + + if (!int.TryParse(data[start + (i * 4)], out x)) return; + if (!int.TryParse(data[start + 1 + (i * 4)], out y)) return; + if (!ushort.TryParse(data[start + 2 + (i * 4)], out temp.Size)) return; + if (!bool.TryParse(data[start + 3 + (i * 4)], out temp.StartPoint)) return; + + temp.Location = new Point(x, y); + info.SafeZones.Add(temp); + } + start += sziCount * 4; + + + + for (int i = 0; i < miCount; i++) + { + MovementInfo temp = new MovementInfo(); + int x, y; + + if (!int.TryParse(data[start + (i * 5)], out x)) return; + if (!int.TryParse(data[start + 1 + (i * 5)], out y)) return; + temp.Source = new Point(x, y); + + if (!int.TryParse(data[start + 2 + (i * 5)], out temp.MapIndex)) return; + + if (!int.TryParse(data[start + 3 + (i * 5)], out x)) return; + if (!int.TryParse(data[start + 4 + (i * 5)], out y)) return; + temp.Destination = new Point(x, y); + + info.Movements.Add(temp); + } + start += miCount * 5; + + + for (int i = 0; i < riCount; i++) + { + RespawnInfo temp = new RespawnInfo(); + int x, y; + + if (!int.TryParse(data[start + (i * 7)], out temp.MonsterIndex)) return; + if (!int.TryParse(data[start + 1 + (i * 7)], out x)) return; + if (!int.TryParse(data[start + 2 + (i * 7)], out y)) return; + + temp.Location = new Point(x, y); + + if (!ushort.TryParse(data[start + 3 + (i * 7)], out temp.Count)) return; + if (!ushort.TryParse(data[start + 4 + (i * 7)], out temp.Spread)) return; + if (!ushort.TryParse(data[start + 5 + (i * 7)], out temp.Delay)) return; + if (!byte.TryParse(data[start + 6 + (i * 7)], out temp.Direction)) return; + if (!int.TryParse(data[start + 7 + (i * 7)], out temp.RespawnIndex)) return; + if (!bool.TryParse(data[start + 8 + (i * 7)], out temp.SaveRespawnTime)) return; + if (!ushort.TryParse(data[start + 9 + (i * 7)], out temp.RespawnTicks)) return; + + info.Respawns.Add(temp); + } + start += riCount * 7; + + + for (int i = 0; i < npcCount; i++) + { + NPCInfo temp = new NPCInfo { FileName = data[start + (i * 6)], Name = data[start + 1 + (i * 6)] }; + int x, y; + + if (!int.TryParse(data[start + 2 + (i * 6)], out x)) return; + if (!int.TryParse(data[start + 3 + (i * 6)], out y)) return; + + temp.Location = new Point(x, y); + + if (!ushort.TryParse(data[start + 4 + (i * 6)], out temp.Rate)) return; + if (!ushort.TryParse(data[start + 5 + (i * 6)], out temp.Image)) return; + + info.NPCs.Add(temp); + } + + + + info.Index = ++EditEnvir.MapIndex; + EditEnvir.MapInfoList.Add(info); + } + } +} diff --git a/Server/MirDatabase/MonsterInfo.cs b/Server/MirDatabase/MonsterInfo.cs new file mode 100644 index 0000000..d58166e --- /dev/null +++ b/Server/MirDatabase/MonsterInfo.cs @@ -0,0 +1,530 @@ +using System.Text.RegularExpressions; +using Server.MirEnvir; + +namespace Server.MirDatabase +{ + public class MonsterInfo + { + protected static Envir Envir + { + get { return Envir.Main; } + } + + protected static Envir EditEnvir + { + get { return Envir.Edit; } + } + + protected static MessageQueue MessageQueue + { + get { return MessageQueue.Instance; } + } + + public int Index; + public string Name = string.Empty; + + public Monster Image; + public byte AI, Effect, ViewRange = 7, CoolEye; + public ushort Level; + + public byte Light; + + public ushort AttackSpeed = 2500, MoveSpeed = 1800; + public uint Experience; + + public string DropPath = ""; + + public List Drops = new List(); + + public bool CanTame = true, CanPush = true, AutoRev = true, Undead = false; + + public bool HasSpawnScript; + public bool HasDieScript; + + public Stats Stats; + + public MonsterInfo() + { + Stats = new Stats(); + } + + public MonsterInfo(BinaryReader reader) + { + Index = reader.ReadInt32(); + Name = reader.ReadString(); + + Image = (Monster) reader.ReadUInt16(); + AI = reader.ReadByte(); + Effect = reader.ReadByte(); + + if (Envir.LoadVersion < 62) + { + Level = (ushort)reader.ReadByte(); + } + else + { + Level = reader.ReadUInt16(); + } + + ViewRange = reader.ReadByte(); + CoolEye = reader.ReadByte(); + + if (Envir.LoadVersion > 84) + { + Stats = new Stats(reader); + } + + if (Envir.LoadVersion <= 84) + { + Stats = new Stats(); + Stats[Stat.HP] = (int)reader.ReadUInt32(); //Monster form prevented greater than ushort, so this should never overflow. + } + + if (Envir.LoadVersion < 62) + { + Stats[Stat.MinAC] = reader.ReadByte(); + Stats[Stat.MaxAC] = reader.ReadByte(); + Stats[Stat.MinMAC] = reader.ReadByte(); + Stats[Stat.MaxMAC] = reader.ReadByte(); + Stats[Stat.MinDC] = reader.ReadByte(); + Stats[Stat.MaxDC] = reader.ReadByte(); + Stats[Stat.MinMC] = reader.ReadByte(); + Stats[Stat.MaxMC] = reader.ReadByte(); + Stats[Stat.MinSC] = reader.ReadByte(); + Stats[Stat.MaxSC] = reader.ReadByte(); + } + else + { + if (Envir.LoadVersion <= 84) + { + Stats[Stat.MinAC] = reader.ReadUInt16(); + Stats[Stat.MaxAC] = reader.ReadUInt16(); + Stats[Stat.MinMAC] = reader.ReadUInt16(); + Stats[Stat.MaxMAC] = reader.ReadUInt16(); + Stats[Stat.MinDC] = reader.ReadUInt16(); + Stats[Stat.MaxDC] = reader.ReadUInt16(); + Stats[Stat.MinMC] = reader.ReadUInt16(); + Stats[Stat.MaxMC] = reader.ReadUInt16(); + Stats[Stat.MinSC] = reader.ReadUInt16(); + Stats[Stat.MaxSC] = reader.ReadUInt16(); + } + } + + if (Envir.LoadVersion <= 84) + { + Stats[Stat.Accuracy] = reader.ReadByte(); + Stats[Stat.Agility] = reader.ReadByte(); + } + + Light = reader.ReadByte(); + + AttackSpeed = reader.ReadUInt16(); + MoveSpeed = reader.ReadUInt16(); + + Experience = reader.ReadUInt32(); + + CanPush = reader.ReadBoolean(); + CanTame = reader.ReadBoolean(); + + if (Envir.LoadVersion < 18) return; + AutoRev = reader.ReadBoolean(); + Undead = reader.ReadBoolean(); + + if (Envir.LoadVersion < 89) return; + + DropPath = reader.ReadString(); + } + + public string GameName + { + get { return Regex.Replace(Name, @"[\d-]", string.Empty); } + } + + public void Save(BinaryWriter writer) + { + writer.Write(Index); + writer.Write(Name); + + writer.Write((ushort) Image); + writer.Write(AI); + writer.Write(Effect); + writer.Write(Level); + writer.Write(ViewRange); + writer.Write(CoolEye); + + Stats.Save(writer); + + + writer.Write(Light); + + writer.Write(AttackSpeed); + writer.Write(MoveSpeed); + + writer.Write(Experience); + + writer.Write(CanPush); + writer.Write(CanTame); + writer.Write(AutoRev); + writer.Write(Undead); + + writer.Write(DropPath); + } + + public static void FromText(string text) + { + string[] data = text.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries); + + if (data.Length < 28) return; //28 + + MonsterInfo info = new MonsterInfo {Name = data[0]}; + ushort image; + if (!ushort.TryParse(data[1], out image)) return; + info.Image = (Monster) image; + + if (!byte.TryParse(data[2], out info.AI)) return; + if (!byte.TryParse(data[3], out info.Effect)) return; + if (!ushort.TryParse(data[4], out info.Level)) return; + if (!byte.TryParse(data[5], out info.ViewRange)) return; + + //if (!int.TryParse(data[6], out info.HP)) return; + + //if (!ushort.TryParse(data[7], out info.MinAC)) return; + //if (!ushort.TryParse(data[8], out info.MaxAC)) return; + //if (!ushort.TryParse(data[9], out info.MinMAC)) return; + //if (!ushort.TryParse(data[10], out info.MaxMAC)) return; + //if (!ushort.TryParse(data[11], out info.MinDC)) return; + //if (!ushort.TryParse(data[12], out info.MaxDC)) return; + //if (!ushort.TryParse(data[13], out info.MinMC)) return; + //if (!ushort.TryParse(data[14], out info.MaxMC)) return; + //if (!ushort.TryParse(data[15], out info.MinSC)) return; + //if (!ushort.TryParse(data[16], out info.MaxSC)) return; + //if (!byte.TryParse(data[17], out info.Accuracy)) return; + //if (!byte.TryParse(data[18], out info.Agility)) return; + if (!byte.TryParse(data[19], out info.Light)) return; + + if (!ushort.TryParse(data[20], out info.AttackSpeed)) return; + if (!ushort.TryParse(data[21], out info.MoveSpeed)) return; + + if (!uint.TryParse(data[22], out info.Experience)) return; + + if (!bool.TryParse(data[23], out info.CanTame)) return; + if (!bool.TryParse(data[24], out info.CanPush)) return; + + if (!bool.TryParse(data[25], out info.AutoRev)) return; + if (!bool.TryParse(data[26], out info.Undead)) return; + if (!byte.TryParse(data[27], out info.CoolEye)) return; + + //int count; + + //if (!int.TryParse(data[27], out count)) return; + + //if (28 + count * 3 > data.Length) return; + + info.Index = ++EditEnvir.MonsterIndex; + EditEnvir.MonsterInfoList.Add(info); + } + public string ToText() + { + return "";// string.Format("{0},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10},{11},{12},{13},{14},{15},{16},{17},{18},{19},{20},{21},{22},{23},{24},{25},{26},{27}", Name, (ushort)Image, AI, Effect, Level, ViewRange, + // HP, + //MinAC, MaxAC, MinMAC, MaxMAC, MinDC, MaxDC, MinMC, MaxMC, MinSC, MaxSC, + // Accuracy, Agility, Light, AttackSpeed, MoveSpeed, Experience, CanTame, CanPush, AutoRev, Undead, CoolEye); + } + + public override string ToString() + { + return string.Format("{0}: {1}", Index, Name); + //return string.Format("{0}", Name); + } + } + + public class DropRewardInfo + { + public List Items; + public uint Gold; + } + + public class GroupDropInfo : List + { + public bool Random; + public bool First; + } + + public class DropInfo + { + protected static Envir Envir + { + get { return Envir.Main; } + } + + protected static MessageQueue MessageQueue + { + get { return MessageQueue.Instance; } + } + + public int Chance; + public ItemInfo Item; + public uint Gold; + public GroupDropInfo GroupedDrop; + + public byte Type; + public bool QuestRequired; + + public static DropInfo FromLine(string s) + { + string[] parts = s.Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries); + + if (parts.Length < 2) + { + return null; + } + + DropInfo info = new DropInfo(); + + if (!int.TryParse(parts[0].Substring(2), out info.Chance)) return null; + + if (string.Compare(parts[1], "Gold", StringComparison.OrdinalIgnoreCase) == 0) + { + if (parts.Length < 3) return null; + if (!uint.TryParse(parts[2], out info.Gold) || info.Gold == 0) return null; + } + else if (parts[1].ToUpper().StartsWith("GROUP")) + { + info.GroupedDrop = new GroupDropInfo + { + Random = parts[1].EndsWith("*"), + First = parts[1].EndsWith("^") + }; + } + else + { + info.Item = Envir.GetItemInfo(parts[1]); + if (info.Item == null) return null; + + if (parts.Length > 2) + { + string dropRequirement = parts[2]; + if (dropRequirement.ToUpper() == "Q") + { + info.QuestRequired = true; + } + } + } + + return info; + } + + public static void Load(List list, string name, string path, byte type = 0, bool createIfNotExists = true) + { + if (!File.Exists(path)) + { + if (createIfNotExists) + { + string[] contents = new[] + { + ";Pots + Other", string.Empty, string.Empty, + ";Weapons", string.Empty, string.Empty, + ";Armour", string.Empty, string.Empty, + ";Helmets", string.Empty, string.Empty, + ";Necklace", string.Empty, string.Empty, + ";Bracelets", string.Empty, string.Empty, + ";Rings", string.Empty, string.Empty, + }; + + File.WriteAllLines(path, contents); + } + + return; + } + + var lines = File.ReadAllLines(path).ToList(); + + lines = ParseInsert(lines); + + for (int i = 0; i < lines.Count; i++) + { + if (lines[i].StartsWith(";") || string.IsNullOrWhiteSpace(lines[i])) continue; + + DropInfo drop = DropInfo.FromLine(lines[i]); + + if (drop == null) + { + MessageQueue.Enqueue(string.Format("Could not load Drop: {0}, Line {1}", name, lines[i])); + continue; + } + + if (drop.GroupedDrop != null) + { + ParseGroup(drop, name, lines, i + 1); + } + + drop.Type = type; + + list.Add(drop); + } + + list.Sort((drop1, drop2) => + { + if (drop1.Gold > 0 && drop2.Gold == 0) + return 1; + if (drop1.Gold == 0 && drop2.Gold > 0) + return -1; + + if (drop1.Item == null || drop2.Item == null) return 0; + + return drop1.Item.Type.CompareTo(drop2.Item.Type); + }); + } + + private static void ParseGroup(DropInfo parentDrop, string name, List lines, int startLine) + { + bool start = false, finish = false; + + var drops = new List(); + + for (int j = startLine; j < lines.Count; j++) + { + var line = lines[j].Trim(); + lines[j] = ""; + + if (line.Trim() == ("{")) + { + start = true; + continue; + } + + if (line.Trim() == ("}")) + { + finish = true; + break; + } + + if (line.StartsWith(";") || string.IsNullOrWhiteSpace(line)) continue; + + var drop = DropInfo.FromLine(line); + + if (drop == null) + { + MessageQueue.Enqueue(string.Format("Could not load Drop: {0}, Line {1}", name, line)); + continue; + } + + if (drop.GroupedDrop != null) + { + ParseGroup(drop, name, lines, j + 1); + } + + drops.Add(drop); + } + + if (start && finish) + { + parentDrop.GroupedDrop.AddRange(drops); + } + } + + private static List ParseInsert(List lines) + { + Regex regex = new Regex($"#INSERT \\[(.*?)\\]", RegexOptions.IgnoreCase); + + List newLines = new List(); + + for (int i = 0; i < lines.Count; i++) + { + var match = regex.Match(lines[i]); + + if (!match.Success) continue; + + var subPath = match.Groups[1].Value; + + string path = Path.Combine(Settings.DropPath, subPath); + + newLines = File.ReadAllLines(path).ToList(); + + lines.AddRange(newLines); + } + + lines.RemoveAll(str => str.ToUpper().StartsWith("#INSERT")); + + return lines; + } + + public DropRewardInfo AttemptDrop(int itemDropRatePercentOffset = 0, int goldDropRatePercentOffset = 0) + { + int rate = (int)(Chance / (Settings.DropRate)); + + if (itemDropRatePercentOffset > 0) + { + rate -= (rate * itemDropRatePercentOffset) / 100; + } + + if (rate < 1) rate = 1; + + if (Envir.Random.Next(rate) != 0) + { + return null; + } + + uint gold = 0; + var items = new List(); + + if (Gold > 0) + { + int lowerGoldRange = (int)(Gold / 2); + int upperGoldRange = (int)(Gold + Gold / 2); + + if (goldDropRatePercentOffset > 0) + { + lowerGoldRange += (lowerGoldRange * goldDropRatePercentOffset) / 100; + } + + if (lowerGoldRange > upperGoldRange) lowerGoldRange = upperGoldRange; + + gold = (uint)Envir.Random.Next(lowerGoldRange, upperGoldRange); + } + else if (Item != null) + { + items.Add(Item); + } + else if (GroupedDrop != null) + { + var tempItems = new List(); + + foreach (var item in GroupedDrop) + { + var reward = item.AttemptDrop(itemDropRatePercentOffset, goldDropRatePercentOffset); + + if (reward != null) + { + gold += reward.Gold; + + tempItems.AddRange(reward.Items); + + if (GroupedDrop.First) + { + break; + } + } + } + + if (GroupedDrop.Random) + { + if (tempItems.Count > 0) + { + items.Add(tempItems[Envir.Random.Next(tempItems.Count)]); + } + } + else + { + items.AddRange(tempItems); + } + } + + return new DropRewardInfo + { + Gold = gold, + Items = items + }; + } + } +} diff --git a/Server/MirDatabase/MovementInfo.cs b/Server/MirDatabase/MovementInfo.cs new file mode 100644 index 0000000..9780a4b --- /dev/null +++ b/Server/MirDatabase/MovementInfo.cs @@ -0,0 +1,47 @@ +using Server.MirEnvir; + +namespace Server.MirDatabase +{ + public class MovementInfo + { + public int MapIndex; + public Point Source, Destination; + public bool NeedMove, ShowOnBigMap; + public int Icon; + + public MovementInfo() + { + + } + + public MovementInfo(BinaryReader reader) + { + MapIndex = reader.ReadInt32(); + Source = new Point(reader.ReadInt32(), reader.ReadInt32()); + Destination = new Point(reader.ReadInt32(), reader.ReadInt32()); + + NeedMove = reader.ReadBoolean(); + + if (Envir.LoadVersion < 95) return; + ShowOnBigMap = reader.ReadBoolean(); + Icon = reader.ReadInt32(); + } + public void Save(BinaryWriter writer) + { + writer.Write(MapIndex); + writer.Write(Source.X); + writer.Write(Source.Y); + writer.Write(Destination.X); + writer.Write(Destination.Y); + writer.Write(NeedMove); + writer.Write(ShowOnBigMap); + writer.Write(Icon); + } + + + public override string ToString() + { + return string.Format("{0} -> Map :{1} - {2}", Source, MapIndex, Destination); + } + } +} diff --git a/Server/MirDatabase/NPCInfo.cs b/Server/MirDatabase/NPCInfo.cs new file mode 100644 index 0000000..efd85af --- /dev/null +++ b/Server/MirDatabase/NPCInfo.cs @@ -0,0 +1,211 @@ +using Server.MirEnvir; + +namespace Server.MirDatabase +{ + public class NPCInfo + { + protected static Envir EditEnvir + { + get { return Envir.Edit; } + } + + public int Index; + + public string FileName = string.Empty, Name = string.Empty; + + public int MapIndex; + public Point Location; + public ushort Rate = 100; + public ushort Image; + public MirGender Gender; + public byte Hair; + public Color Colour; + + public bool TimeVisible = false; + public byte HourStart = 0; + public byte MinuteStart = 0; + public byte HourEnd = 0; + public byte MinuteEnd = 1; + public short MinLev = 0; + public short MaxLev = 0; + public string DayofWeek = ""; + public string ClassRequired = ""; + public bool Sabuk = false; + public int FlagNeeded = 0; + public int Conquest; + public bool ShowOnBigMap; + public int BigMapIcon; + public bool CanTeleportTo; + public bool ConquestVisible = true; + + public List CollectQuestIndexes = new List(); + public List FinishQuestIndexes = new List(); + + public NPCInfo() { } + public NPCInfo(BinaryReader reader) + { + Index = reader.ReadInt32(); + MapIndex = reader.ReadInt32(); + + int count = reader.ReadInt32(); + for (int i = 0; i < count; i++) + CollectQuestIndexes.Add(reader.ReadInt32()); + + count = reader.ReadInt32(); + for (int i = 0; i < count; i++) + FinishQuestIndexes.Add(reader.ReadInt32()); + + FileName = reader.ReadString(); + Name = reader.ReadString(); + + Location = new Point(reader.ReadInt32(), reader.ReadInt32()); + + if (Envir.LoadVersion >= 72) + { + Image = reader.ReadUInt16(); + } + else + { + Image = reader.ReadByte(); + } + + Rate = reader.ReadUInt16(); + + if (Envir.LoadVersion >= 64) + { + TimeVisible = reader.ReadBoolean(); + HourStart = reader.ReadByte(); + MinuteStart = reader.ReadByte(); + HourEnd = reader.ReadByte(); + MinuteEnd = reader.ReadByte(); + MinLev = reader.ReadInt16(); + MaxLev = reader.ReadInt16(); + DayofWeek = reader.ReadString(); + ClassRequired = reader.ReadString(); + if (Envir.LoadVersion >= 66) + Conquest = reader.ReadInt32(); + else + Sabuk = reader.ReadBoolean(); + FlagNeeded = reader.ReadInt32(); + } + + if (Envir.LoadVersion > 95) + { + ShowOnBigMap = reader.ReadBoolean(); + BigMapIcon = reader.ReadInt32(); + } + if (Envir.LoadVersion > 96) + CanTeleportTo = reader.ReadBoolean(); + + if (Envir.LoadVersion >= 107) + { + ConquestVisible = reader.ReadBoolean(); + } + + if (Envir.LoadVersion > 107) + { + Gender = (MirGender)reader.ReadByte(); + Hair = reader.ReadByte(); + } + } + public void Save(BinaryWriter writer) + { + writer.Write(Index); + writer.Write(MapIndex); + + writer.Write(CollectQuestIndexes.Count()); + for (int i = 0; i < CollectQuestIndexes.Count; i++) + writer.Write(CollectQuestIndexes[i]); + + writer.Write(FinishQuestIndexes.Count()); + for (int i = 0; i < FinishQuestIndexes.Count; i++) + writer.Write(FinishQuestIndexes[i]); + + writer.Write(FileName); + writer.Write(Name); + + writer.Write(Location.X); + writer.Write(Location.Y); + writer.Write(Image); + writer.Write(Rate); + + writer.Write(TimeVisible); + writer.Write(HourStart); + writer.Write(MinuteStart); + writer.Write(HourEnd); + writer.Write(MinuteEnd); + writer.Write(MinLev); + writer.Write(MaxLev); + writer.Write(DayofWeek); + writer.Write(ClassRequired); + writer.Write(Conquest); + writer.Write(FlagNeeded); + + writer.Write(ShowOnBigMap); + writer.Write(BigMapIcon); + writer.Write(CanTeleportTo); + writer.Write(ConquestVisible); + writer.Write((byte)Gender); + writer.Write(Hair); + } + + public static void FromText(string text) + { + string[] data = text.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries); + + if (data.Length < 6) return; + + NPCInfo info = new NPCInfo { Name = data[0] }; + + int x, y; + + info.FileName = data[0]; + info.MapIndex = EditEnvir.MapInfoList.Where(d => d.FileName == data[1]).FirstOrDefault().Index; + + if (!int.TryParse(data[2], out x)) return; + if (!int.TryParse(data[3], out y)) return; + + info.Location = new Point(x, y); + + info.Name = data[4]; + + if (!ushort.TryParse(data[5], out info.Image)) return; + if (!ushort.TryParse(data[6], out info.Rate)) return; + + if (!bool.TryParse(data[7], out info.ShowOnBigMap)) return; + if (!int.TryParse(data[8], out info.BigMapIcon)) return; + if (!bool.TryParse(data[9], out info.CanTeleportTo)) return; + if (!bool.TryParse(data[10], out info.ConquestVisible)) return; + if (!byte.TryParse(data[11], out byte tempGender)) return; + info.Gender = (MirGender)tempGender; + if (!byte.TryParse(data[12], out info.Hair)) return; + + info.Index = ++EditEnvir.NPCIndex; + EditEnvir.NPCInfoList.Add(info); + } + public string ToText() + { + return string.Format("{0},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10},{11}", + FileName, EditEnvir.MapInfoList.Where(d => d.Index == MapIndex).FirstOrDefault().FileName, Location.X, Location.Y, Name, Image, Rate, ShowOnBigMap, BigMapIcon, CanTeleportTo, ConquestVisible, (byte)Gender,Hair); + } + + public override string ToString() + { + return string.Format("{0}: {1}", FileName, Functions.PointToString(Location)); + } + + public string GameName + { + get + { + string s = Name; + if (s.Contains("_")) + { + string[] splitName = s.Split('_'); + s = splitName[splitName.Length - 1]; + } + return s; + } + } + } +} diff --git a/Server/MirDatabase/QuestInfo.cs b/Server/MirDatabase/QuestInfo.cs new file mode 100644 index 0000000..fa98114 --- /dev/null +++ b/Server/MirDatabase/QuestInfo.cs @@ -0,0 +1,470 @@ +using Server.MirObjects; +using System.Text.RegularExpressions; +using Server.MirEnvir; + +namespace Server.MirDatabase +{ + public class QuestInfo + { + protected static Envir Envir + { + get { return Envir.Main; } + } + + protected static Envir EditEnvir + { + get { return Envir.Edit; } + } + + protected static MessageQueue MessageQueue + { + get { return MessageQueue.Instance; } + } + + public int Index; + + public uint NpcIndex; + public NPCInfo NpcInfo; + + private uint _finishNpcIndex; + + public uint FinishNpcIndex + { + get { return _finishNpcIndex == 0 ? NpcIndex : _finishNpcIndex; } + set { _finishNpcIndex = value; } + } + + public NPCObject FinishNPC + { + get + { + return Envir.NPCs.Single(x => x.ObjectID == FinishNpcIndex); + } + } + + public string + Name = string.Empty, + Group = string.Empty, + FileName = string.Empty, + GotoMessage = string.Empty, + KillMessage = string.Empty, + ItemMessage = string.Empty, + FlagMessage = string.Empty; + + public List Description = new List(); + public List TaskDescription = new List(); + public List ReturnDescription = new List(); + public List CompletionDescription = new List(); + + public int RequiredMinLevel, RequiredMaxLevel, RequiredQuest; + public RequiredClass RequiredClass = RequiredClass.None; + + public QuestType Type; + + public int TimeLimitInSeconds = 0; + + public List CarryItems = new List(); + + public List KillTasks = new List(); + public List ItemTasks = new List(); + public List FlagTasks = new List(); + //TODO: ZoneTasks + //TODO: EscortTasks + + public uint GoldReward; + public uint ExpReward; + public uint CreditReward; + public List FixedRewards = new List(); + public List SelectRewards = new List(); + + private Regex _regexMessage = new Regex("\"([^\"]*)\""); + + + public QuestInfo() { } + + public QuestInfo(BinaryReader reader) + { + Index = reader.ReadInt32(); + Name = reader.ReadString(); + Group = reader.ReadString(); + FileName = reader.ReadString(); + RequiredMinLevel = reader.ReadInt32(); + + RequiredMaxLevel = reader.ReadInt32(); + if (RequiredMaxLevel == 0) RequiredMaxLevel = ushort.MaxValue; + + RequiredQuest = reader.ReadInt32(); + RequiredClass = (RequiredClass)reader.ReadByte(); + Type = (QuestType)reader.ReadByte(); + GotoMessage = reader.ReadString(); + KillMessage = reader.ReadString(); + ItemMessage = reader.ReadString(); + FlagMessage = reader.ReadString(); + + if (Envir.LoadVersion > 90) + { + TimeLimitInSeconds = reader.ReadInt32(); + } + + LoadInfo(); + } + + public void Save(BinaryWriter writer) + { + writer.Write(Index); + writer.Write(Name); + writer.Write(Group); + writer.Write(FileName); + writer.Write(RequiredMinLevel); + writer.Write(RequiredMaxLevel); + writer.Write(RequiredQuest); + writer.Write((byte)RequiredClass); + writer.Write((byte)Type); + writer.Write(GotoMessage); + writer.Write(KillMessage); + writer.Write(ItemMessage); + writer.Write(FlagMessage); + writer.Write(TimeLimitInSeconds); + } + + public void LoadInfo(bool clear = false) + { + if (clear) ClearInfo(); + + if (!Directory.Exists(Settings.QuestPath)) return; + + string fileName = Path.Combine(Settings.QuestPath, FileName + ".txt"); + + if (File.Exists(fileName)) + { + List lines = File.ReadAllLines(fileName).ToList(); + + ParseFile(lines); + } + else + MessageQueue.Enqueue(string.Format("File Not Found: {0}, Quest: {1}", fileName, Name)); + } + + public void ClearInfo() + { + Description.Clear(); + KillTasks = new List(); + ItemTasks = new List(); + FlagTasks = new List(); + FixedRewards = new List(); + SelectRewards = new List(); + ExpReward = 0; + GoldReward = 0; + CreditReward = 0; + } + + public void ParseFile(List lines) + { + const string + descriptionCollectKey = "[@DESCRIPTION]", + descriptionTaskKey = "[@TASKDESCRIPTION]", + descriptionReturnKey = "[@RETURNDESCRIPTION]", + descriptionCompletionKey = "[@COMPLETION]", + carryItemsKey = "[@CARRYITEMS]", + killTasksKey = "[@KILLTASKS]", + itemTasksKey = "[@ITEMTASKS]", + flagTasksKey = "[@FLAGTASKS]", + fixedRewardsKey = "[@FIXEDREWARDS]", + selectRewardsKey = "[@SELECTREWARDS]", + expRewardKey = "[@EXPREWARD]", + goldRewardKey = "[@GOLDREWARD]", + creditRewardKey = "[@CREDITREWARD]"; + + List headers = new List + { + descriptionCollectKey, descriptionTaskKey, descriptionCompletionKey, + carryItemsKey, killTasksKey, itemTasksKey, flagTasksKey, + fixedRewardsKey, selectRewardsKey, expRewardKey, goldRewardKey, creditRewardKey, descriptionReturnKey + }; + + int currentHeader = 0; + + while (currentHeader < headers.Count) + { + for (int i = 0; i < lines.Count; i++) + { + string line = lines[i].ToUpper(); + + if (line != headers[currentHeader].ToUpper()) continue; + + for (int j = i + 1; j < lines.Count; j++) + { + string innerLine = lines[j]; + + if (innerLine.StartsWith("[")) break; + if (string.IsNullOrEmpty(lines[j])) continue; + + switch (line) + { + case descriptionCollectKey: + Description.Add(innerLine); + break; + case descriptionTaskKey: + TaskDescription.Add(innerLine); + break; + case descriptionReturnKey: + ReturnDescription.Add(innerLine); + break; + case descriptionCompletionKey: + CompletionDescription.Add(innerLine); + break; + case carryItemsKey: + QuestItemTask t = ParseItem(innerLine); + if (t != null) CarryItems.Add(t); + break; + case killTasksKey: + QuestKillTask t1 = ParseKill(innerLine); + if(t1 != null) KillTasks.Add(t1); + break; + case itemTasksKey: + QuestItemTask t2 = ParseItem(innerLine); + if (t2 != null) ItemTasks.Add(t2); + break; + case flagTasksKey: + QuestFlagTask t3 = ParseFlag(innerLine); + if (t3 != null) FlagTasks.Add(t3); + break; + case fixedRewardsKey: + { + ParseReward(FixedRewards, innerLine); + break; + } + case selectRewardsKey: + { + ParseReward(SelectRewards, innerLine); + break; + } + case expRewardKey: + uint.TryParse(innerLine, out ExpReward); + break; + case goldRewardKey: + uint.TryParse(innerLine, out GoldReward); + break; + case creditRewardKey: + uint.TryParse(innerLine, out CreditReward); + break; + } + } + } + + currentHeader++; + } + } + + public void ParseReward(List list, string line) + { + if (line.Length < 1) return; + + string[] split = line.Split(' '); + ushort count = 1; + + if (split.Length > 1) ushort.TryParse(split[1], out count); + + ItemInfo mInfo = Envir.GetItemInfo(split[0]); + + if (mInfo == null) + { + mInfo = Envir.GetItemInfo(split[0] + "(M)"); + if (mInfo != null) list.Add(new QuestItemReward() { Item = mInfo, Count = count }); + + mInfo = Envir.GetItemInfo(split[0] + "(F)"); + if (mInfo != null) list.Add(new QuestItemReward() { Item = mInfo, Count = count }); + } + else + { + list.Add(new QuestItemReward() { Item = mInfo, Count = count }); + } + } + + public QuestKillTask ParseKill(string line) + { + if (line.Length < 1) return null; + + string[] split = line.Split(' '); + int count = 1; + string message = ""; + + MonsterInfo mInfo = Envir.GetMonsterInfo(split[0]); + if (split.Length > 1) int.TryParse(split[1], out count); + + var match = _regexMessage.Match(line); + if (match.Success) + { + message = match.Groups[1].Captures[0].Value; + } + + return mInfo == null ? null : new QuestKillTask() { Monster = mInfo, Count = count, Message = message }; + } + + public QuestItemTask ParseItem(string line) + { + if (line.Length < 1) return null; + + string[] split = line.Split(' '); + ushort count = 1; + string message = ""; + + ItemInfo mInfo = Envir.GetItemInfo(split[0]); + if (split.Length > 1) ushort.TryParse(split[1], out count); + + var match = _regexMessage.Match(line); + if (match.Success) + { + message = match.Groups[1].Captures[0].Value; + } + //if (mInfo.StackSize <= 1) + //{ + // //recursively add item if cant stack??? + //} + + return mInfo == null ? null : new QuestItemTask { Item = mInfo, Count = count, Message = message }; + } + + public QuestFlagTask ParseFlag(string line) + { + if (line.Length < 1) return null; + + string[] split = line.Split(' '); + + int number = -1; + string message = ""; + + int.TryParse(split[0], out number); + + if (number < 0 || number > Globals.FlagIndexCount - 1000) return null; + + var match = _regexMessage.Match(line); + if (match.Success) + { + message = match.Groups[1].Captures[0].Value; + } + + return new QuestFlagTask { Number = number, Message = message }; + } + + public bool CanAccept(PlayerObject player) + { + if (RequiredMinLevel > player.Level || RequiredMaxLevel < player.Level) + return false; + + if (RequiredQuest > 0 && !player.CompletedQuests.Contains(RequiredQuest)) + return false; + + switch (player.Class) + { + case MirClass.Warrior: + if (!RequiredClass.HasFlag(RequiredClass.Warrior)) + return false; + break; + case MirClass.Wizard: + if (!RequiredClass.HasFlag(RequiredClass.Wizard)) + return false; + break; + case MirClass.Taoist: + if (!RequiredClass.HasFlag(RequiredClass.Taoist)) + return false; + break; + } + + return true; + } + + public ClientQuestInfo CreateClientQuestInfo() + { + return new ClientQuestInfo + { + Index = Index, + NPCIndex = NpcIndex, + FinishNPCIndex = FinishNpcIndex, + Name = Name, + Group = Group, + Description = Description, + TaskDescription = TaskDescription, + ReturnDescription = ReturnDescription, + CompletionDescription = CompletionDescription, + MinLevelNeeded = RequiredMinLevel, + MaxLevelNeeded = RequiredMaxLevel, + ClassNeeded = RequiredClass, + QuestNeeded = RequiredQuest, + Type = Type, + TimeLimitInSeconds = TimeLimitInSeconds, + RewardGold = GoldReward, + RewardExp = ExpReward, + RewardCredit = CreditReward, + RewardsFixedItem = FixedRewards, + RewardsSelectItem = SelectRewards + }; + } + + public static void FromText(string text) + { + string[] data = text.Split(new[] { ',' }); + + if (data.Length < 10) return; + + QuestInfo info = new QuestInfo(); + + info.Name = data[0]; + info.Group = data[1]; + + byte temp; + + byte.TryParse(data[2], out temp); + + info.Type = (QuestType)temp; + + info.FileName = data[3]; + info.GotoMessage = data[4]; + info.KillMessage = data[5]; + info.ItemMessage = data[6]; + info.FlagMessage = data[7]; + + int.TryParse(data[8], out info.RequiredMinLevel); + int.TryParse(data[9], out info.RequiredMaxLevel); + int.TryParse(data[10], out info.RequiredQuest); + + byte.TryParse(data[11], out temp); + + info.RequiredClass = (RequiredClass)temp; + + info.Index = ++EditEnvir.QuestIndex; + EditEnvir.QuestInfoList.Add(info); + } + + public string ToText() + { + return string.Format("{0},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10},{11}", + Name, Group, (byte)Type, FileName, GotoMessage, KillMessage, ItemMessage, FlagMessage, RequiredMinLevel, RequiredMaxLevel, RequiredQuest, (byte)RequiredClass); + } + + public override string ToString() + { + return string.Format("{0}: {1}", Index, Name); + } + } + + public class QuestKillTask + { + public MonsterInfo Monster; + public int Count; + public string Message; + } + + public class QuestItemTask + { + public ItemInfo Item; + public ushort Count; + public string Message; + } + + public class QuestFlagTask + { + public int Number; + public string Message; + } +} diff --git a/Server/MirDatabase/QuestProgressInfo.cs b/Server/MirDatabase/QuestProgressInfo.cs new file mode 100644 index 0000000..7486751 --- /dev/null +++ b/Server/MirDatabase/QuestProgressInfo.cs @@ -0,0 +1,564 @@ +using Server.MirObjects; +using Server.MirEnvir; + +namespace Server.MirDatabase +{ + public class QuestProgressInfo + { + protected static Envir Envir + { + get { return Envir.Main; } + } + + public PlayerObject Owner; + + public int Index; + + public QuestInfo Info; + + public DateTime StartDateTime = DateTime.MinValue; + public DateTime EndDateTime = DateTime.MaxValue; + + public List KillTaskCount = new List(); + public List ItemTaskCount = new List(); + public List FlagTaskSet = new List(); + + public List TaskList = new List(); + + public bool Taken + { + get { return StartDateTime > DateTime.MinValue; } + } + + public bool Completed + { + get { return EndDateTime < DateTime.MaxValue; } + } + + public bool New + { + get { return StartDateTime > Envir.Now.AddDays(-1); } + } + + public QuestProgressInfo(int index) + { + Index = index; + + Info = Envir.QuestInfoList.FirstOrDefault(e => e.Index == index); + + foreach (var kill in Info.KillTasks) + { + KillTaskCount.Add(new QuestKillTaskProgress + { + MonsterID = kill.Monster.Index, + Info = kill + }); + } + + foreach (var item in Info.ItemTasks) + { + ItemTaskCount.Add(new QuestItemTaskProgress + { + ItemID = item.Item.Index, + Info = item + }); + } + + foreach (var flag in Info.FlagTasks) + { + FlagTaskSet.Add(new QuestFlagTaskProgress + { + Number = flag.Number, + Info = flag + }); + } + } + + public QuestProgressInfo(BinaryReader reader, int version, int customVersion) + { + Index = reader.ReadInt32(); + Info = Envir.QuestInfoList.FirstOrDefault(e => e.Index == Index); + + StartDateTime = DateTime.FromBinary(reader.ReadInt64()); + EndDateTime = DateTime.FromBinary(reader.ReadInt64()); + + if (version < 90) + { + int count = reader.ReadInt32(); + for (int i = 0; i < count; i++) + { + var killCount = reader.ReadInt32(); + + if (Info.KillTasks.Count >= i) + { + var progress = new QuestKillTaskProgress + { + MonsterID = Info.KillTasks[i].Monster.Index, + Count = killCount, + Info = Info.KillTasks[i] + }; + KillTaskCount.Add(progress); + } + } + + count = reader.ReadInt32(); + for (int i = 0; i < count; i++) + { + var itemCount = reader.ReadInt32(); + if (Info.ItemTasks.Count >= i) + { + var progress = new QuestItemTaskProgress + { + ItemID = Info.ItemTasks[i].Item.Index, + Count = itemCount, + Info = Info.ItemTasks[i] + }; + ItemTaskCount.Add(progress); + } + } + + count = reader.ReadInt32(); + for (int i = 0; i < count; i++) + { + var flagState = reader.ReadBoolean(); + if (Info.FlagTasks.Count >= i) + { + var progress = new QuestFlagTaskProgress + { + Number = Info.FlagTasks[i].Number, + State = flagState, + Info = Info.FlagTasks[i] + }; + FlagTaskSet.Add(progress); + } + } + } + else + { + int count = reader.ReadInt32(); + for (int i = 0; i < count; i++) + { + var progress = new QuestKillTaskProgress + { + MonsterID = reader.ReadInt32(), + Count = reader.ReadInt32() + }; + + foreach (var task in Info.KillTasks) + { + if (task.Monster.Index != progress.MonsterID) continue; + + progress.Info = task; + KillTaskCount.Add(progress); + break; + } + } + + count = reader.ReadInt32(); + for (int i = 0; i < count; i++) + { + var progress = new QuestItemTaskProgress + { + ItemID = reader.ReadInt32(), + Count = reader.ReadInt32() + }; + + foreach (var task in Info.ItemTasks) + { + if (task.Item.Index != progress.ItemID) continue; + + progress.Info = task; + ItemTaskCount.Add(progress); + break; + } + } + + count = reader.ReadInt32(); + for (int i = 0; i < count; i++) + { + var progress = new QuestFlagTaskProgress + { + Number = reader.ReadInt32(), + State = reader.ReadBoolean() + }; + + foreach (var task in Info.FlagTasks) + { + if (task.Number != progress.Number) continue; + + progress.Info = task; + FlagTaskSet.Add(progress); + break; + } + } + + //Add any new tasks which may have been added + foreach (var kill in Info.KillTasks) + { + if (KillTaskCount.Any(x => x.MonsterID == kill.Monster.Index)) continue; + + KillTaskCount.Add(new QuestKillTaskProgress + { + MonsterID = kill.Monster.Index, + Info = kill + }); + } + + foreach (var item in Info.ItemTasks) + { + if (ItemTaskCount.Any(x => x.ItemID == item.Item.Index)) continue; + + ItemTaskCount.Add(new QuestItemTaskProgress + { + ItemID = item.Item.Index, + Info = item + }); + } + + foreach (var flag in Info.FlagTasks) + { + if (FlagTaskSet.Any(x => x.Number == flag.Number)) continue; + + FlagTaskSet.Add(new QuestFlagTaskProgress + { + Number = flag.Number, + Info = flag + }); + } + } + } + + public void Init(PlayerObject player) + { + Owner = player; + + if (StartDateTime == DateTime.MinValue) + { + StartDateTime = Envir.Now; + } + } + + public void Save(BinaryWriter writer) + { + writer.Write(Index); + + writer.Write(StartDateTime.ToBinary()); + writer.Write(EndDateTime.ToBinary()); + + writer.Write(KillTaskCount.Count); + for (int i = 0; i < KillTaskCount.Count; i++) + { + writer.Write(KillTaskCount[i].MonsterID); + writer.Write(KillTaskCount[i].Count); + } + + writer.Write(ItemTaskCount.Count); + for (int i = 0; i < ItemTaskCount.Count; i++) + { + writer.Write(ItemTaskCount[i].ItemID); + writer.Write(ItemTaskCount[i].Count); + } + + writer.Write(FlagTaskSet.Count); + for (int i = 0; i < FlagTaskSet.Count; i++) + { + writer.Write(FlagTaskSet[i].Number); + writer.Write(FlagTaskSet[i].State); + } + } + + + public bool CheckCompleted() + { + UpdateTasks(); + + bool canComplete = true; + + for (int j = 0; j < KillTaskCount.Count; j++) + { + if (KillTaskCount[j].Complete) continue; + + canComplete = false; + } + + for (int j = 0; j < ItemTaskCount.Count; j++) + { + if (ItemTaskCount[j].Complete) continue; + + canComplete = false; + } + + for (int j = 0; j < FlagTaskSet.Count; j++) + { + if (FlagTaskSet[j].Complete) continue; + + canComplete = false; + } + + if (!canComplete) return false; + + if (!Completed) + { + EndDateTime = Envir.Now; + + if (Info.TimeLimitInSeconds > 0) + { + Owner.ExpireTimer($"Quest-{Index}"); + } + } + + return true; + } + + #region Need Requirement + + public bool NeedItem(ItemInfo iInfo) + { + return ItemTaskCount.Where((task, i) => task.Info.Item == iInfo && !task.Complete).Any(); + } + + public bool NeedKill(MonsterInfo mInfo) + { + return KillTaskCount.Where((task, i) => mInfo.Name.StartsWith(task.Info.Monster.Name, StringComparison.OrdinalIgnoreCase) && !task.Complete).Any(); + } + + public bool NeedFlag(int flagNumber) + { + return FlagTaskSet.Where((task, i) => task.Number == flagNumber && !task.Complete).Any(); + } + + #endregion + + #region Process Quest Task + + public void ProcessKill(MonsterInfo mInfo) + { + if (Info.KillTasks.Count < 1) return; + + for (int i = 0; i < KillTaskCount.Count; i++) + { + if (!mInfo.Name.StartsWith(KillTaskCount[i].Info.Monster.Name, StringComparison.OrdinalIgnoreCase)) continue; + KillTaskCount[i].Count++; + + return; + } + } + + public void ProcessItem(UserItem[] inventory) + { + for (int i = 0; i < ItemTaskCount.Count; i++) + { + var count = inventory.Where(item => item != null). + Where(item => item.Info == ItemTaskCount[i].Info.Item). + Aggregate(0, (current, item) => current + item.Count); + + ItemTaskCount[i].Count = count; + } + } + + public void ProcessFlag(bool[] Flags) + { + for (int i = 0; i < FlagTaskSet.Count; i++) + { + for (int j = 0; j < Flags.Length - 1000; j++) + { + if (FlagTaskSet[i].Number != j || !Flags[j]) continue; + + FlagTaskSet[i].State = Flags[j]; + break; + } + } + } + + #endregion + + #region Update Task Messages + + public void UpdateTasks() + { + TaskList = new List(); + + UpdateKillTasks(); + UpdateItemTasks(); + UpdateFlagTasks(); + UpdateGotoTask(); + } + + public void UpdateKillTasks() + { + if(Info.KillMessage.Length > 0 && Info.KillTasks.Count > 0) + { + bool allComplete = true; + for (int i = 0; i < KillTaskCount.Count; i++) + { + if (KillTaskCount[i].Complete) continue; + + allComplete = false; + } + + TaskList.Add(string.Format("{0} {1}", Info.KillMessage, allComplete ? "(Completed)" : "")); + return; + } + + for (int i = 0; i < KillTaskCount.Count; i++) + { + if (string.IsNullOrEmpty(Info.KillTasks[i].Message)) + { + TaskList.Add(string.Format("Kill {0}: {1}/{2} {3}", KillTaskCount[i].Info.Monster.GameName, KillTaskCount[i].Count, + KillTaskCount[i].Info.Count, KillTaskCount[i].Complete ? "(Completed)" : "")); + } + else + { + TaskList.Add(string.Format("{0} {1}", Info.KillTasks[i].Message, KillTaskCount[i].Complete ? "(Completed)" : "")); + } + } + } + + public void UpdateItemTasks() + { + if (Info.ItemMessage.Length > 0 && Info.ItemTasks.Count > 0) + { + bool allComplete = true; + for (int i = 0; i < ItemTaskCount.Count; i++) + { + if (ItemTaskCount[i].Complete) continue; + + allComplete = false; + } + + TaskList.Add(string.Format("{0} {1}", Info.ItemMessage, allComplete ? "(Completed)" : "")); + return; + } + + for (int i = 0; i < ItemTaskCount.Count; i++) + { + if (string.IsNullOrEmpty(Info.ItemTasks[i].Message)) + { + TaskList.Add(string.Format("Collect {0}: {1}/{2} {3}", Info.ItemTasks[i].Item.FriendlyName, ItemTaskCount[i].Count, + Info.ItemTasks[i].Count, ItemTaskCount[i].Complete ? "(Completed)" : "")); + } + else + { + TaskList.Add(string.Format("{0} {1}", Info.ItemTasks[i].Message, ItemTaskCount[i].Complete ? "(Completed)" : "")); + } + } + } + + public void UpdateFlagTasks() + { + if (Info.FlagMessage.Length > 0) + { + bool allComplete = true; + for (int i = 0; i < FlagTaskSet.Count; i++) + { + if (FlagTaskSet[i].State) continue; + + allComplete = false; + } + + TaskList.Add(string.Format("{0} {1}", Info.FlagMessage, allComplete ? "(Completed)" : "")); + return; + } + + for (int i = 0; i < FlagTaskSet.Count; i++) + { + if (string.IsNullOrEmpty(Info.FlagTasks[i].Message)) + { + TaskList.Add(string.Format("Activate Flag {0} {1}", Info.FlagTasks[i].Number, FlagTaskSet[i].Complete ? "(Completed)" : "")); + } + else + { + TaskList.Add(string.Format("{0} {1}", Info.FlagTasks[i].Message, FlagTaskSet[i].Complete ? "(Completed)" : "")); + } + } + } + + public void UpdateGotoTask() + { + if (Info.GotoMessage.Length <= 0 || !Completed) return; + + TaskList.Add(Info.GotoMessage); + } + + #endregion + + #region Optional Functions + + public void SetTimer() + { + if (Owner == null) + { + return; + } + + if (Info.TimeLimitInSeconds > 0) + { + var secondsSinceStarted = (int)(Envir.Now - StartDateTime).TotalSeconds; + + var remainingSeconds = Info.TimeLimitInSeconds - secondsSinceStarted; + + if (remainingSeconds > 0) + { + Owner.SetTimer($"Quest-{Index}", remainingSeconds, 1); + } + + DelayedAction action = new DelayedAction(DelayedType.Quest, Envir.Time + (remainingSeconds * 1000), this, QuestAction.TimeExpired, true); + Owner.ActionList.Add(action); + } + } + + public void RemoveTimer() + { + if (Owner == null) + { + return; + } + + if (Info.TimeLimitInSeconds > 0) + { + Owner.ExpireTimer($"Quest-{Index}"); + } + } + + #endregion + + public ClientQuestProgress CreateClientQuestProgress() + { + return new ClientQuestProgress + { + Id = Index, + TaskList = TaskList, + Taken = Taken, + Completed = Completed, + New = New + }; + } + } + + public class QuestKillTaskProgress + { + public int MonsterID { get; set; } + public int Count { get; set; } + public QuestKillTask Info { get; set; } + + public bool Complete { get { return Info != null && Count >= Info.Count; } } + } + + public class QuestItemTaskProgress + { + public int ItemID { get; set; } + public int Count { get; set; } + public QuestItemTask Info { get; set; } + + public bool Complete { get { return Info != null && Count >= Info.Count; } } + } + + public class QuestFlagTaskProgress + { + public int Number { get; set; } + public bool State { get; set; } + public QuestFlagTask Info { get; set; } + + public bool Complete { get { return Info != null && State == true; } } + } +} diff --git a/Server/MirDatabase/RespawnInfo.cs b/Server/MirDatabase/RespawnInfo.cs new file mode 100644 index 0000000..626ef24 --- /dev/null +++ b/Server/MirDatabase/RespawnInfo.cs @@ -0,0 +1,132 @@ +using Server.MirEnvir; + +namespace Server.MirDatabase +{ + public class RespawnInfo + { + protected static Envir Envir + { + get { return Envir.Main; } + } + + public int MonsterIndex; + public Point Location; + public ushort Count, Spread, Delay, RandomDelay; + public byte Direction; + + public string RoutePath = string.Empty; + public int RespawnIndex; + public bool SaveRespawnTime = false; + public ushort RespawnTicks; //leave 0 if not using this system! + + public RespawnInfo() + { + + } + public RespawnInfo(BinaryReader reader, int Version, int Customversion) + { + MonsterIndex = reader.ReadInt32(); + + Location = new Point(reader.ReadInt32(), reader.ReadInt32()); + + Count = reader.ReadUInt16(); + Spread = reader.ReadUInt16(); + + Delay = reader.ReadUInt16(); + Direction = reader.ReadByte(); + + RoutePath = reader.ReadString(); + + if (Version > 67) + { + RandomDelay = reader.ReadUInt16(); + RespawnIndex = reader.ReadInt32(); + SaveRespawnTime = reader.ReadBoolean(); + RespawnTicks = reader.ReadUInt16(); + } + else + { + RespawnIndex = ++Envir.RespawnIndex; + } + } + + public static RespawnInfo FromText(string text) + { + string[] data = text.Split(new[] {','}, StringSplitOptions.RemoveEmptyEntries); + + if (data.Length < 7) return null; + + RespawnInfo info = new RespawnInfo(); + + int x,y ; + + if (!int.TryParse(data[0], out info.MonsterIndex)) return null; + if (!int.TryParse(data[1], out x)) return null; + if (!int.TryParse(data[2], out y)) return null; + + info.Location = new Point(x, y); + + if (!ushort.TryParse(data[3], out info.Count)) return null; + if (!ushort.TryParse(data[4], out info.Spread)) return null; + if (!ushort.TryParse(data[5], out info.Delay)) return null; + if (!byte.TryParse(data[6], out info.Direction)) return null; + if (!ushort.TryParse(data[7], out info.RandomDelay)) return null; + if (!int.TryParse(data[8], out info.RespawnIndex)) return null; + if (!bool.TryParse(data[9], out info.SaveRespawnTime)) return null; + if (!ushort.TryParse(data[10], out info.RespawnTicks)) return null; + + return info; + } + + public void Save(BinaryWriter writer) + { + writer.Write(MonsterIndex); + + writer.Write(Location.X); + writer.Write(Location.Y); + writer.Write(Count); + writer.Write(Spread); + + writer.Write(Delay); + writer.Write(Direction); + + writer.Write(RoutePath); + + writer.Write(RandomDelay); + writer.Write(RespawnIndex); + writer.Write(SaveRespawnTime); + writer.Write(RespawnTicks); + } + + public override string ToString() + { + return string.Format("Monster: {0} - {1} - {2} - {3} - {4} - {5} - {6} - {7} - {8} - {9}", MonsterIndex, Functions.PointToString(Location), Count, Spread, Delay, Direction, RandomDelay, RespawnIndex, SaveRespawnTime, RespawnTicks); + } + } + + public class RouteInfo + { + public Point Location; + public int Delay; + + public static RouteInfo FromText(string text) + { + string[] data = text.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries); + + if (data.Length < 2) return null; + + RouteInfo info = new RouteInfo(); + + int x, y; + + if (!int.TryParse(data[0], out x)) return null; + if (!int.TryParse(data[1], out y)) return null; + + info.Location = new Point(x, y); + + if (data.Length <= 2) return info; + + return !int.TryParse(data[2], out info.Delay) ? info : info; + } + } +} diff --git a/Server/MirDatabase/SafeZoneInfo.cs b/Server/MirDatabase/SafeZoneInfo.cs new file mode 100644 index 0000000..c5883ca --- /dev/null +++ b/Server/MirDatabase/SafeZoneInfo.cs @@ -0,0 +1,33 @@ +namespace Server.MirDatabase +{ + public class SafeZoneInfo + { + public Point Location; + public ushort Size; + public bool StartPoint; + + public MapInfo Info; + + public SafeZoneInfo() { } + + public SafeZoneInfo(BinaryReader reader) + { + Location = new Point(reader.ReadInt32(), reader.ReadInt32()); + Size = reader.ReadUInt16(); + StartPoint = reader.ReadBoolean(); + } + + public void Save(BinaryWriter writer) + { + writer.Write(Location.X); + writer.Write(Location.Y); + writer.Write(Size); + writer.Write(StartPoint); + } + + public override string ToString() + { + return string.Format("Map: {0}- {1}", Functions.PointToString(Location), StartPoint); + } + } +} diff --git a/Server/MirEnvir/Envir.cs b/Server/MirEnvir/Envir.cs new file mode 100644 index 0000000..bf237de --- /dev/null +++ b/Server/MirEnvir/Envir.cs @@ -0,0 +1,3001 @@ +using Server.Library.Utils; +using Server.MirDatabase; +using Server.MirNetwork; +using Server.MirObjects; +using Server.MirObjects.Monsters; +using System.Collections.Concurrent; +using System.Diagnostics; +using System.Net; +using System.Net.Sockets; +using System.Numerics; +using System.Security.Principal; +using System.Text; +using System.Text.RegularExpressions; +using S = ServerPackets; + +namespace Server.MirEnvir +{ + public class MobThread + { + public int Id = 0; + public long LastRunTime = 0; + public long StartTime = 0; + public long EndTime = 0; + public LinkedList ObjectsList = new LinkedList(); + public LinkedListNode _current = null; + public bool Stop = false; + } + + public class RandomProvider + { + private static int seed = Environment.TickCount; + private static readonly ThreadLocal RandomWrapper = new ThreadLocal(() => new Random(Interlocked.Increment(ref seed))); + + public static Random GetThreadRandom() => + RandomWrapper.Value; + + public int Next() => + RandomWrapper.Value.Next(); + public int Next(int maxValue) => + RandomWrapper.Value.Next(maxValue); + public int Next(int minValue, int maxValue) => + RandomWrapper.Value.Next(minValue, maxValue); + } + + public class Envir + { + public static Envir Main { get; } = new Envir(); + + public static Envir Edit { get; } = new Envir(); + + protected static MessageQueue MessageQueue => MessageQueue.Instance; + + public static object AccountLock = new object(); + public static object LoadLock = new object(); + + public const int MinVersion = 60; + public const int Version = 108; + public const int CustomVersion = 0; + public static readonly string DatabasePath = Path.Combine(".", "Server.MirDB"); + public static readonly string AccountPath = Path.Combine(".", "Server.MirADB"); + public static readonly string BackUpPath = Path.Combine(".", "Back Up"); + public static readonly string AccountsBackUpPath = Path.Combine(".", "Back Up", "Accounts"); + public static readonly string ArchivePath = Path.Combine(".", "Archive"); + public bool ResetGS = false; + public bool GuildRefreshNeeded; + + private static readonly Regex AccountIDReg, PasswordReg, EMailReg, CharacterReg; + + public static int LoadVersion; + public static int LoadCustomVersion; + + private readonly DateTime _startTime = DateTime.UtcNow; + public readonly Stopwatch Stopwatch = Stopwatch.StartNew(); + + public long Time { get; private set; } + public RespawnTimer RespawnTick = new RespawnTimer(); + + private static List DisabledCharNames = new List(); + private static List LineMessages = new List(); + + public static ConcurrentDictionary IPBlocks = new ConcurrentDictionary(); + + public DateTime Now => + _startTime.AddMilliseconds(Time); + + public bool Running { get; private set; } + + + private static uint _objectID; + public uint ObjectID => ++_objectID; + + public static int _playerCount; + public int PlayerCount => Players.Count; + + public int[] OnlineRankingCount = new int[6]; + + public RandomProvider Random = new RandomProvider(); + + private Thread _thread; + private TcpListener _listener; + private bool StatusPortEnabled = true; + public List StatusConnections = new List(); + private TcpListener _StatusPort; + private int _sessionID; + public List Connections = new List(); + + //Server DB + public int MapIndex, ItemIndex, MonsterIndex, NPCIndex, QuestIndex, GameshopIndex, ConquestIndex, RespawnIndex, ScriptIndex; + public List MapInfoList = new List(); + public List ItemInfoList = new List(); + public List MonsterInfoList = new List(); + public List MagicInfoList = new List(); + public List NPCInfoList = new List(); + public List QuestInfoList = new List(); + public List GameShopList = new List(); + public List BuffInfoList = new List(); + + //User DB + public int NextAccountID, NextCharacterID, NextGuildID; + public ulong NextUserItemID, NextAuctionID, NextMailID; + public List AccountList = new List(); + public List CharacterList = new List(); + public List GuildList = new List(); + public LinkedList Auctions = new LinkedList(); + public Dictionary GameshopLog = new Dictionary(); + + public int GuildCount; //This shouldn't be needed?? -> remove in the future + + //Live Info + public bool Saving = false; + public List MapList = new List(); + public List StartPoints = new List(); + public List StartItems = new List(); + + public List Players = new List(); + public List Spells = new List(); + public List NPCs = new List(); + public List Guilds = new List(); + public List BanIPList = new List(); + + public LightSetting Lights; + public LinkedList Objects = new LinkedList(); + public Dictionary Scripts = new Dictionary(); + public Dictionary Timers = new Dictionary(); + + //multithread vars + readonly object _locker = new object(); + public MobThread[] MobThreads = new MobThread[Settings.ThreadLimit]; + private readonly Thread[] MobThreading = new Thread[Settings.ThreadLimit]; + public int SpawnMultiplier = 1;//set this to 2 if you want double spawns (warning this can easily lag your server far beyond what you imagine) + + public List CustomCommands = new List(); + public NPCScript DefaultNPC, MonsterNPC, RobotNPC; + + public List GuildsAtWar = new List(); + public List SavedSpawns = new List(); + + public List RankTop = new List(); + public List[] RankClass = new List[5]; + + static HttpServer http; + + static Envir() + { + AccountIDReg = new Regex(@"^[A-Za-z0-9]{" + Globals.MinAccountIDLength + "," + Globals.MaxAccountIDLength + "}$"); + PasswordReg = new Regex(@"^[A-Za-z0-9]{" + Globals.MinPasswordLength + "," + Globals.MaxPasswordLength + "}$"); + EMailReg = new Regex(@"\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"); + CharacterReg = new Regex(@"^[\u4e00-\u9fa5_A-Za-z0-9]{" + Globals.MinCharacterNameLength + "," + Globals.MaxCharacterNameLength + "}$"); + } + + public static int LastCount = 0, LastRealCount = 0; + public static long LastRunTime = 0; + public int MonsterCount; + + private long warTime, guildTime, auctionTime, spawnTime, robotTime, timerTime; + private int dailyTime = DateTime.UtcNow.Day; + + private bool MagicExists(Spell spell) + { + for (var i = 0; i < MagicInfoList.Count; i++) + { + if (MagicInfoList[i].Spell == spell) return true; + } + return false; + } + + private void UpdateMagicInfo() + { + for (var i = 0; i < MagicInfoList.Count; i++) + { + switch (MagicInfoList[i].Spell) + { + //warrior + case Spell.Thrusting: + MagicInfoList[i].MultiplierBase = 0.25f; + MagicInfoList[i].MultiplierBonus = 0.25f; + break; + case Spell.HalfMoon: + MagicInfoList[i].MultiplierBase = 0.3f; + MagicInfoList[i].MultiplierBonus = 0.1f; + break; + case Spell.ShoulderDash: + MagicInfoList[i].MPowerBase = 4; + break; + case Spell.FlamingSword: + MagicInfoList[i].MultiplierBase = 1.4f; + MagicInfoList[i].MultiplierBonus = 0.4f; + break; + //wiz + case Spell.Repulsion: + MagicInfoList[i].MPowerBase = 4; + break; + //tao + case Spell.Poisoning: + MagicInfoList[i].MPowerBase = 0; + break; + } + } + } + + private void FillMagicInfoList() + { + //Warrior + if (!MagicExists(Spell.Fencing)) MagicInfoList.Add(new MagicInfo { Name = "Fencing", Spell = Spell.Fencing, Icon = 2, Level1 = 7, Level2 = 9, Level3 = 12, Need1 = 270, Need2 = 600, Need3 = 1300, Range = 0 }); + if (!MagicExists(Spell.Slaying)) MagicInfoList.Add(new MagicInfo { Name = "Slaying", Spell = Spell.Slaying, Icon = 6, Level1 = 15, Level2 = 17, Level3 = 20, Need1 = 500, Need2 = 1100, Need3 = 1800, Range = 0 }); + if (!MagicExists(Spell.Thrusting)) MagicInfoList.Add(new MagicInfo { Name = "Thrusting", Spell = Spell.Thrusting, Icon = 11, Level1 = 22, Level2 = 24, Level3 = 27, Need1 = 2000, Need2 = 3500, Need3 = 6000, Range = 0, MultiplierBase = 0.25f, MultiplierBonus = 0.25f }); + if (!MagicExists(Spell.HalfMoon)) MagicInfoList.Add(new MagicInfo { Name = "HalfMoon", Spell = Spell.HalfMoon, Icon = 24, Level1 = 26, Level2 = 28, Level3 = 31, Need1 = 5000, Need2 = 8000, Need3 = 14000, BaseCost = 3, Range = 0, MultiplierBase = 0.3f, MultiplierBonus = 0.1f }); + if (!MagicExists(Spell.ShoulderDash)) MagicInfoList.Add(new MagicInfo { Name = "ShoulderDash", Spell = Spell.ShoulderDash, Icon = 26, Level1 = 30, Level2 = 32, Level3 = 34, Need1 = 3000, Need2 = 4000, Need3 = 6000, BaseCost = 4, LevelCost = 4, DelayBase = 2500, Range = 0, MPowerBase = 4 }); + if (!MagicExists(Spell.FlamingSword)) MagicInfoList.Add(new MagicInfo { Name = "FlamingSword", Spell = Spell.FlamingSword, Icon = 25, Level1 = 35, Level2 = 37, Level3 = 40, Need1 = 2000, Need2 = 4000, Need3 = 6000, BaseCost = 7, Range = 0, MultiplierBase = 1.4f, MultiplierBonus = 0.4f }); + + //Wizard + if (!MagicExists(Spell.FireBall)) MagicInfoList.Add(new MagicInfo { Name = "FireBall", Spell = Spell.FireBall, Icon = 0, Level1 = 7, Level2 = 9, Level3 = 11, Need1 = 200, Need2 = 350, Need3 = 700, BaseCost = 3, LevelCost = 2, MPowerBase = 8, PowerBase = 2, Range = 9 }); + if (!MagicExists(Spell.Repulsion)) MagicInfoList.Add(new MagicInfo { Name = "Repulsion", Spell = Spell.Repulsion, Icon = 7, Level1 = 12, Level2 = 15, Level3 = 19, Need1 = 500, Need2 = 1300, Need3 = 2200, BaseCost = 2, LevelCost = 2, Range = 0, MPowerBase = 4 }); + if (!MagicExists(Spell.ElectricShock)) MagicInfoList.Add(new MagicInfo { Name = "ElectricShock", Spell = Spell.ElectricShock, Icon = 19, Level1 = 13, Level2 = 18, Level3 = 24, Need1 = 530, Need2 = 1100, Need3 = 2200, BaseCost = 3, LevelCost = 1, Range = 9 }); + if (!MagicExists(Spell.GreatFireBall)) MagicInfoList.Add(new MagicInfo { Name = "GreatFireBall", Spell = Spell.GreatFireBall, Icon = 4, Level1 = 15, Level2 = 18, Level3 = 21, Need1 = 2000, Need2 = 2700, Need3 = 3500, BaseCost = 5, LevelCost = 1, MPowerBase = 6, PowerBase = 10, Range = 9 }); + if (!MagicExists(Spell.HellFire)) MagicInfoList.Add(new MagicInfo { Name = "HellFire", Spell = Spell.HellFire, Icon = 8, Level1 = 16, Level2 = 20, Level3 = 24, Need1 = 700, Need2 = 2700, Need3 = 3500, BaseCost = 10, LevelCost = 3, MPowerBase = 14, PowerBase = 6, Range = 0 }); + if (!MagicExists(Spell.ThunderBolt)) MagicInfoList.Add(new MagicInfo { Name = "ThunderBolt", Spell = Spell.ThunderBolt, Icon = 10, Level1 = 17, Level2 = 20, Level3 = 23, Need1 = 500, Need2 = 2000, Need3 = 3500, BaseCost = 9, LevelCost = 2, MPowerBase = 8, MPowerBonus = 20, PowerBase = 9, Range = 9 }); + if (!MagicExists(Spell.Teleport)) MagicInfoList.Add(new MagicInfo { Name = "Teleport", Spell = Spell.Teleport, Icon = 20, Level1 = 19, Level2 = 22, Level3 = 25, Need1 = 350, Need2 = 1000, Need3 = 2000, BaseCost = 10, LevelCost = 3, Range = 0 }); + if (!MagicExists(Spell.FireBang)) MagicInfoList.Add(new MagicInfo { Name = "FireBang", Spell = Spell.FireBang, Icon = 22, Level1 = 22, Level2 = 25, Level3 = 28, Need1 = 3000, Need2 = 5000, Need3 = 10000, BaseCost = 14, LevelCost = 4, MPowerBase = 8, PowerBase = 8, Range = 9 }); + if (!MagicExists(Spell.FireWall)) MagicInfoList.Add(new MagicInfo { Name = "FireWall", Spell = Spell.FireWall, Icon = 21, Level1 = 24, Level2 = 28, Level3 = 33, Need1 = 4000, Need2 = 10000, Need3 = 20000, BaseCost = 30, LevelCost = 5, MPowerBase = 3, PowerBase = 3, Range = 9 }); + if (!MagicExists(Spell.Lightning)) MagicInfoList.Add(new MagicInfo { Name = "Lightning", Spell = Spell.Lightning, Icon = 9, Level1 = 26, Level2 = 29, Level3 = 32, Need1 = 3000, Need2 = 6000, Need3 = 12000, BaseCost = 38, LevelCost = 7, MPowerBase = 12, PowerBase = 12, Range = 0 }); + if (!MagicExists(Spell.FrostCrunch)) MagicInfoList.Add(new MagicInfo { Name = "FrostCrunch", Spell = Spell.FrostCrunch, Icon = 38, Level1 = 28, Level2 = 30, Level3 = 33, Need1 = 3000, Need2 = 5000, Need3 = 8000, BaseCost = 15, LevelCost = 3, MPowerBase = 12, PowerBase = 12, Range = 9 }); + if (!MagicExists(Spell.ThunderStorm)) MagicInfoList.Add(new MagicInfo { Name = "ThunderStorm", Spell = Spell.ThunderStorm, Icon = 23, Level1 = 30, Level2 = 32, Level3 = 34, Need1 = 4000, Need2 = 8000, Need3 = 12000, BaseCost = 29, LevelCost = 9, MPowerBase = 10, MPowerBonus = 20, PowerBase = 10, PowerBonus = 20, Range = 0 }); + if (!MagicExists(Spell.MagicShield)) MagicInfoList.Add(new MagicInfo { Name = "MagicShield", Spell = Spell.MagicShield, Icon = 30, Level1 = 31, Level2 = 34, Level3 = 38, Need1 = 3000, Need2 = 7000, Need3 = 10000, BaseCost = 35, LevelCost = 5, Range = 0 }); + + + //Taoist + if (!MagicExists(Spell.Healing)) MagicInfoList.Add(new MagicInfo { Name = "Healing", Spell = Spell.Healing, Icon = 1, Level1 = 7, Level2 = 11, Level3 = 14, Need1 = 150, Need2 = 350, Need3 = 700, BaseCost = 3, LevelCost = 2, MPowerBase = 14, Range = 9 }); + if (!MagicExists(Spell.SpiritSword)) MagicInfoList.Add(new MagicInfo { Name = "SpiritSword", Spell = Spell.SpiritSword, Icon = 3, Level1 = 9, Level2 = 12, Level3 = 15, Need1 = 350, Need2 = 1300, Need3 = 2700, Range = 0 }); + if (!MagicExists(Spell.Poisoning)) MagicInfoList.Add(new MagicInfo { Name = "Poisoning", Spell = Spell.Poisoning, Icon = 5, Level1 = 14, Level2 = 17, Level3 = 20, Need1 = 700, Need2 = 1300, Need3 = 2700, BaseCost = 2, LevelCost = 1, Range = 9 }); + if (!MagicExists(Spell.SoulFireBall)) MagicInfoList.Add(new MagicInfo { Name = "SoulFireBall", Spell = Spell.SoulFireBall, Icon = 12, Level1 = 18, Level2 = 21, Level3 = 24, Need1 = 1300, Need2 = 2700, Need3 = 4000, BaseCost = 3, LevelCost = 1, MPowerBase = 8, PowerBase = 3, Range = 9 }); + if (!MagicExists(Spell.SummonSkeleton)) MagicInfoList.Add(new MagicInfo { Name = "SummonSkeleton", Spell = Spell.SummonSkeleton, Icon = 16, Level1 = 19, Level2 = 22, Level3 = 26, Need1 = 1000, Need2 = 2000, Need3 = 3500, BaseCost = 12, LevelCost = 4, Range = 0 }); + if (!MagicExists(Spell.Hiding)) MagicInfoList.Add(new MagicInfo { Name = "Hiding", Spell = Spell.Hiding, Icon = 17, Level1 = 20, Level2 = 23, Level3 = 26, Need1 = 1300, Need2 = 2700, Need3 = 5300, BaseCost = 1, LevelCost = 1, Range = 0 }); + if (!MagicExists(Spell.MassHiding)) MagicInfoList.Add(new MagicInfo { Name = "MassHiding", Spell = Spell.MassHiding, Icon = 18, Level1 = 21, Level2 = 25, Level3 = 29, Need1 = 1300, Need2 = 2700, Need3 = 5300, BaseCost = 2, LevelCost = 2, Range = 9 }); + if (!MagicExists(Spell.SoulShield)) MagicInfoList.Add(new MagicInfo { Name = "SoulShield", Spell = Spell.SoulShield, Icon = 13, Level1 = 22, Level2 = 24, Level3 = 26, Need1 = 2000, Need2 = 3500, Need3 = 7000, BaseCost = 2, LevelCost = 2, Range = 9 }); + if (!MagicExists(Spell.Revelation)) MagicInfoList.Add(new MagicInfo { Name = "Revelation", Spell = Spell.Revelation, Icon = 27, Level1 = 23, Level2 = 25, Level3 = 28, Need1 = 1500, Need2 = 2500, Need3 = 4000, BaseCost = 4, LevelCost = 4, Range = 9 }); + if (!MagicExists(Spell.BlessedArmour)) MagicInfoList.Add(new MagicInfo { Name = "BlessedArmour", Spell = Spell.BlessedArmour, Icon = 14, Level1 = 25, Level2 = 27, Level3 = 29, Need1 = 4000, Need2 = 6000, Need3 = 10000, BaseCost = 2, LevelCost = 2, Range = 9 }); + if (!MagicExists(Spell.EnergyRepulsor)) MagicInfoList.Add(new MagicInfo { Name = "EnergyRepulsor", Spell = Spell.EnergyRepulsor, Icon = 36, Level1 = 27, Level2 = 29, Level3 = 31, Need1 = 1800, Need2 = 2400, Need3 = 3200, BaseCost = 2, LevelCost = 2, Range = 0, MPowerBase = 4 }); + if (!MagicExists(Spell.TrapHexagon)) MagicInfoList.Add(new MagicInfo { Name = "TrapHexagon", Spell = Spell.TrapHexagon, Icon = 15, Level1 = 28, Level2 = 30, Level3 = 32, Need1 = 2500, Need2 = 5000, Need3 = 10000, BaseCost = 7, LevelCost = 3, Range = 9 }); + if (!MagicExists(Spell.Purification)) MagicInfoList.Add(new MagicInfo { Name = "Purification", Spell = Spell.Purification, Icon = 39, Level1 = 30, Level2 = 32, Level3 = 35, Need1 = 3000, Need2 = 5000, Need3 = 8000, BaseCost = 14, LevelCost = 2, Range = 9 }); + if (!MagicExists(Spell.MassHealing)) MagicInfoList.Add(new MagicInfo { Name = "MassHealing", Spell = Spell.MassHealing, Icon = 28, Level1 = 31, Level2 = 33, Level3 = 36, Need1 = 2000, Need2 = 4000, Need3 = 8000, BaseCost = 28, LevelCost = 3, MPowerBase = 10, PowerBase = 4, Range = 9 }); + if (!MagicExists(Spell.Hallucination)) MagicInfoList.Add(new MagicInfo { Name = "Hallucination", Spell = Spell.Hallucination, Icon = 48, Level1 = 31, Level2 = 34, Level3 = 36, Need1 = 4000, Need2 = 6000, Need3 = 9000, BaseCost = 22, LevelCost = 10, Range = 9 }); + if (!MagicExists(Spell.UltimateEnhancer)) MagicInfoList.Add(new MagicInfo { Name = "UltimateEnchancer", Spell = Spell.UltimateEnhancer, Icon = 35, Level1 = 33, Level2 = 35, Level3 = 38, Need1 = 5000, Need2 = 7000, Need3 = 10000, BaseCost = 28, LevelCost = 4, Range = 9 }); + } + + private string CanStartEnvir() + { + if (StartPoints.Count == 0) return "Cannot start server without atleast 1 Map and StartPoint."; + + if (Settings.EnforceDBChecks) + { + if (GetMonsterInfo(Settings.SkeletonName, true) == null) return "Cannot start server without mob: " + Settings.SkeletonName; + if (GetMonsterInfo(Settings.ShinsuName, true) == null) return "Cannot start server without mob: " + Settings.ShinsuName; + if (GetMonsterInfo(Settings.BugBatName, true) == null) return "Cannot start server without mob: " + Settings.BugBatName; + if (GetMonsterInfo(Settings.Zuma1, true) == null) return "Cannot start server without mob: " + Settings.Zuma1; + if (GetMonsterInfo(Settings.Zuma2, true) == null) return "Cannot start server without mob: " + Settings.Zuma2; + if (GetMonsterInfo(Settings.Zuma3, true) == null) return "Cannot start server without mob: " + Settings.Zuma3; + if (GetMonsterInfo(Settings.Zuma4, true) == null) return "Cannot start server without mob: " + Settings.Zuma4; + if (GetMonsterInfo(Settings.Zuma5, true) == null) return "Cannot start server without mob: " + Settings.Zuma5; + if (GetMonsterInfo(Settings.Zuma6, true) == null) return "Cannot start server without mob: " + Settings.Zuma6; + if (GetMonsterInfo(Settings.Zuma7, true) == null) return "Cannot start server without mob: " + Settings.Zuma7; + if (GetMonsterInfo(Settings.Turtle1, true) == null) return "Cannot start server without mob: " + Settings.Turtle1; + if (GetMonsterInfo(Settings.Turtle2, true) == null) return "Cannot start server without mob: " + Settings.Turtle2; + if (GetMonsterInfo(Settings.Turtle3, true) == null) return "Cannot start server without mob: " + Settings.Turtle3; + if (GetMonsterInfo(Settings.Turtle4, true) == null) return "Cannot start server without mob: " + Settings.Turtle4; + if (GetMonsterInfo(Settings.Turtle5, true) == null) return "Cannot start server without mob: " + Settings.Turtle5; + if (GetMonsterInfo(Settings.BoneMonster1, true) == null) return "Cannot start server without mob: " + Settings.BoneMonster1; + if (GetMonsterInfo(Settings.BoneMonster2, true) == null) return "Cannot start server without mob: " + Settings.BoneMonster2; + if (GetMonsterInfo(Settings.BoneMonster3, true) == null) return "Cannot start server without mob: " + Settings.BoneMonster3; + if (GetMonsterInfo(Settings.BoneMonster4, true) == null) return "Cannot start server without mob: " + Settings.BoneMonster4; + if (GetMonsterInfo(Settings.BehemothMonster1, true) == null) return "Cannot start server without mob: " + Settings.BehemothMonster1; + if (GetMonsterInfo(Settings.BehemothMonster2, true) == null) return "Cannot start server without mob: " + Settings.BehemothMonster2; + if (GetMonsterInfo(Settings.BehemothMonster3, true) == null) return "Cannot start server without mob: " + Settings.BehemothMonster3; + if (GetMonsterInfo(Settings.HellKnight1, true) == null) return "Cannot start server without mob: " + Settings.HellKnight1; + if (GetMonsterInfo(Settings.HellKnight2, true) == null) return "Cannot start server without mob: " + Settings.HellKnight2; + if (GetMonsterInfo(Settings.HellKnight3, true) == null) return "Cannot start server without mob: " + Settings.HellKnight3; + if (GetMonsterInfo(Settings.HellKnight4, true) == null) return "Cannot start server without mob: " + Settings.HellKnight4; + if (GetMonsterInfo(Settings.HellBomb1, true) == null) return "Cannot start server without mob: " + Settings.HellBomb1; + if (GetMonsterInfo(Settings.HellBomb2, true) == null) return "Cannot start server without mob: " + Settings.HellBomb2; + if (GetMonsterInfo(Settings.HellBomb3, true) == null) return "Cannot start server without mob: " + Settings.HellBomb3; + if (GetMonsterInfo(Settings.WhiteSnake, true) == null) return "Cannot start server without mob: " + Settings.WhiteSnake; + if (GetMonsterInfo(Settings.AngelName, true) == null) return "Cannot start server without mob: " + Settings.AngelName; + if (GetMonsterInfo(Settings.BombSpiderName, true) == null) return "Cannot start server without mob: " + Settings.BombSpiderName; + if (GetMonsterInfo(Settings.CloneName, true) == null) return "Cannot start server without mob: " + Settings.CloneName; + if (GetMonsterInfo(Settings.GeneralMeowMeowMob1, true) == null) return "Cannot start server without mob: " + Settings.GeneralMeowMeowMob1; + if (GetMonsterInfo(Settings.GeneralMeowMeowMob2, true) == null) return "Cannot start server without mob: " + Settings.GeneralMeowMeowMob2; + if (GetMonsterInfo(Settings.GeneralMeowMeowMob3, true) == null) return "Cannot start server without mob: " + Settings.GeneralMeowMeowMob3; + if (GetMonsterInfo(Settings.GeneralMeowMeowMob4, true) == null) return "Cannot start server without mob: " + Settings.GeneralMeowMeowMob4; + if (GetMonsterInfo(Settings.KingHydraxMob, true) == null) return "Cannot start server without mob: " + Settings.KingHydraxMob; + if (GetMonsterInfo(Settings.HornedCommanderMob, true) == null) return "Cannot start server without mob: " + Settings.HornedCommanderMob; + if (GetMonsterInfo(Settings.HornedCommanderBombMob, true) == null) return "Cannot start server without mob: " + Settings.HornedCommanderBombMob; + if (GetMonsterInfo(Settings.SnowWolfKingMob, true) == null) return "Cannot start server without mob: " + Settings.SnowWolfKingMob; + if (GetMonsterInfo(Settings.ScrollMob1, true) == null) return "Cannot start server without mob: " + Settings.ScrollMob1; + if (GetMonsterInfo(Settings.ScrollMob2, true) == null) return "Cannot start server without mob: " + Settings.ScrollMob2; + if (GetMonsterInfo(Settings.ScrollMob3, true) == null) return "Cannot start server without mob: " + Settings.ScrollMob3; + if (GetMonsterInfo(Settings.ScrollMob4, true) == null) return "Cannot start server without mob: " + Settings.ScrollMob4; + + if (GetItemInfo(Settings.RefineOreName) == null) return "Cannot start server without item: " + Settings.RefineOreName; + } + + WorldMapIcon wmi = ValidateWorldMap(); + if (wmi != null) + return $"Invalid worldmap index: {wmi.MapIndex} ({wmi.Title})"; + + + //add intelligent creature checks? + + return "true"; + } + + private void WorkLoop() + { + try + { + Time = Stopwatch.ElapsedMilliseconds; + + var conTime = Time; + var saveTime = Time + Settings.SaveDelay * Settings.Minute; + var userTime = Time + Settings.Minute * 5; + var lineMessageTime = Time + Settings.Minute * Settings.LineMessageTimer; + var processTime = Time + 1000; + var startTime = Time; + + var processCount = 0; + var processRealCount = 0; + + LinkedListNode current = null; + + if (Settings.Multithreaded) + { + for (var j = 0; j < MobThreads.Length; j++) + { + MobThreads[j] = new MobThread(); + MobThreads[j].Id = j; + } + } + + StartEnvir(); + var canstartserver = CanStartEnvir(); + if (canstartserver != "true") + { + MessageQueue.Enqueue(canstartserver); + StopEnvir(); + _thread = null; + Stop(); + return; + } + + if (Settings.Multithreaded) + { + for (var j = 0; j < MobThreads.Length; j++) + { + var Info = MobThreads[j]; + if (j <= 0) continue; + MobThreading[j] = new Thread(() => ThreadLoop(Info)) { IsBackground = true }; + MobThreading[j].Start(); + } + } + + StartNetwork(); + if (Settings.StartHTTPService) + { + http = new HttpServer(); + http.Start(); + } + try + { + while (Running) + { + Time = Stopwatch.ElapsedMilliseconds; + + if (Time >= processTime) + { + LastCount = processCount; + LastRealCount = processRealCount; + processCount = 0; + processRealCount = 0; + processTime = Time + 1000; + } + + if (conTime != Time) + { + conTime = Time; + + AdjustLights(); + + lock (Connections) + { + for (var i = Connections.Count - 1; i >= 0; i--) + { + Connections[i].Process(); + } + } + + lock (StatusConnections) + { + for (var i = StatusConnections.Count - 1; i >= 0; i--) + { + StatusConnections[i].Process(); + } + } + } + + + if (current == null) + current = Objects.First; + + if (current == Objects.First) + { + LastRunTime = Time - startTime; + startTime = Time; + } + + if (Settings.Multithreaded) + { + for (var j = 1; j < MobThreads.Length; j++) + { + var Info = MobThreads[j]; + + if (!Info.Stop) continue; + Info.EndTime = Time + 10; + Info.Stop = false; + } + lock (_locker) + { + Monitor.PulseAll(_locker); //changing a blocking condition. (this makes the threads wake up!) + } + //run the first loop in the main thread so the main thread automaticaly 'halts' until the other threads are finished + ThreadLoop(MobThreads[0]); + } + + var TheEnd = false; + var Start = Stopwatch.ElapsedMilliseconds; + while (!TheEnd && Stopwatch.ElapsedMilliseconds - Start < 20) + { + if (current == null) + { + TheEnd = true; + break; + } + + var next = current.Next; + if (!Settings.Multithreaded || current.Value.Race != ObjectType.Monster || current.Value.Master != null) + { + if (Time > current.Value.OperateTime) + { + current.Value.Process(); + current.Value.SetOperateTime(); + } + processCount++; + } + current = next; + } + + for (var i = 0; i < MapList.Count; i++) + MapList[i].Process(); + + Process(); + + if (Time >= saveTime) + { + saveTime = Time + Settings.SaveDelay * Settings.Minute; + BeginSaveAccounts(); + SaveGuilds(); + SaveGoods(); + SaveBanIP(); + } + + if (Time >= userTime) + { + userTime = Time + Settings.Minute * 5; + Broadcast(new S.Chat + { + Message = string.Format(GameLanguage.OnlinePlayers, Players.Count), + Type = ChatType.Hint + }); + } + + if (LineMessages.Count > 0 && Time >= lineMessageTime) + { + lineMessageTime = Time + Settings.Minute * Settings.LineMessageTimer; + Broadcast(new S.Chat + { + Message = LineMessages[Random.Next(LineMessages.Count)], + Type = ChatType.LineMessage + }); + } + + // if (Players.Count == 0) Thread.Sleep(1); + // GC.Collect(); + } + } + catch (Exception ex) + { + lock (Connections) + { + for (var i = Connections.Count - 1; i >= 0; i--) + Connections[i].SendDisconnect(3); + } + + // Get stack trace for the exception with source file information + var st = new StackTrace(ex, true); + // Get the top stack frame + var frame = st.GetFrame(0); + // Get the line number from the stack frame + var line = frame.GetFileLineNumber(); + + MessageQueue.Enqueue($"[inner workloop error. Line {line}]" + ex); + } + + StopNetwork(); + StopEnvir(); + SaveAccounts(); + SaveGuilds(true); + } + catch (Exception ex) + { + // Get stack trace for the exception with source file information + var st = new StackTrace(ex, true); + // Get the top stack frame + var frame = st.GetFrame(0); + // Get the line number from the stack frame + var line = frame.GetFileLineNumber(); + + MessageQueue.Enqueue($"[outer workloop error. Line {line}]" + ex); + } + + _thread = null; + } + + private void ThreadLoop(MobThread Info) + { + Info.Stop = false; + + try + { + + var stopping = false; + if (Info._current == null) + Info._current = Info.ObjectsList.First; + stopping = Info._current == null; + + while (Running) + { + if (Info._current == null) + Info._current = Info.ObjectsList.First; + else + { + var next = Info._current.Next; + + //if we reach the end of our list > go back to the top (since we are running threaded, we dont want the system to sit there for xxms doing nothing) + if (Info._current == Info.ObjectsList.Last) + { + next = Info.ObjectsList.First; + Info.LastRunTime = (Info.LastRunTime + (Time - Info.StartTime)) / 2; + //Info.LastRunTime = (Time - Info.StartTime) /*> 0 ? (Time - Info.StartTime) : Info.LastRunTime */; + Info.StartTime = Time; + } + if (Time > Info._current.Value.OperateTime) + { + if (Info._current.Value.Master == null) //since we are running multithreaded, dont allow pets to be processed (unless you constantly move pets into their map appropriate thead) + { + Info._current.Value.Process(); + Info._current.Value.SetOperateTime(); + } + } + Info._current = next; + } + + //if it's the main thread > make it loop till the subthreads are done, else make it stop after 'endtime' + if (Info.Id == 0) + { + stopping = true; + for (var x = 1; x < MobThreads.Length; x++) + { + if (MobThreads[x].Stop == false) + { + stopping = false; + } + } + if (!stopping) continue; + Info.Stop = stopping; + return; + } + + if (Stopwatch.ElapsedMilliseconds <= Info.EndTime || !Running) continue; + Info.Stop = true; + lock (_locker) + { + while (Info.Stop) Monitor.Wait(_locker); + } + } + } + catch (Exception ex) + { + if (ex is ThreadInterruptedException) return; + + MessageQueue.Enqueue($"[threadloop error]" + ex); + } + } + + private void AdjustLights() + { + var oldLights = Lights; + + var hours = Now.Hour * 2 % 24; + if (hours == 6 || hours == 7) + Lights = LightSetting.Dawn; + else if (hours >= 8 && hours <= 15) + Lights = LightSetting.Day; + else if (hours == 16 || hours == 17) + Lights = LightSetting.Evening; + else + Lights = LightSetting.Night; + + if (oldLights == Lights) return; + + Broadcast(new S.TimeOfDay { Lights = Lights }); + } + + public void Process() + { + if (Now.Day != dailyTime) + { + dailyTime = Now.Day; + ProcessNewDay(); + } + + if (Time >= warTime) + { + warTime = Time + Settings.Minute; + for (var i = GuildsAtWar.Count - 1; i >= 0; i--) + { + GuildsAtWar[i].TimeRemaining -= Settings.Minute; + + if (GuildsAtWar[i].TimeRemaining >= 0) continue; + GuildsAtWar[i].EndWar(); + GuildsAtWar.RemoveAt(i); + } + } + + if (Time >= guildTime) + { + guildTime = Time + Settings.Minute; + for (var i = 0; i < Guilds.Count; i++) + { + Guilds[i].Process(); + } + } + + if (Time >= auctionTime) + { + auctionTime = Time + Settings.Minute * 10; + ProcessAuction(); + } + + if (Time >= spawnTime) + { + spawnTime = Time + Settings.Second * 10; + Main.RespawnTick.Process(); + } + + if (Time >= robotTime) + { + robotTime = Time + Settings.Minute; + Robot.Process(RobotNPC); + } + + if (Time >= timerTime) + { + timerTime = Time + Settings.Second; + + string[] keys = Timers.Keys.ToArray(); + + foreach (var key in keys) + { + if (Timers[key].RelativeTime <= Time) + { + Timers.Remove(key); + } + } + } + } + + private void ProcessAuction() + { + LinkedListNode current = Auctions.First; + + while (current != null) + { + AuctionInfo info = current.Value; + + if (!info.Expired && !info.Sold && Now >= info.ConsignmentDate.AddDays(Globals.ConsignmentLength)) + { + if (info.ItemType == MarketItemType.Auction && info.CurrentBid > info.Price) + { + string message = string.Format("You won {0} for {1:#,##0} Gold.", info.Item.FriendlyName, info.CurrentBid); + + info.Sold = true; + MailCharacter(info.CurrentBuyerInfo, item: info.Item, customMessage: message); + + MessageAccount(info.CurrentBuyerInfo.AccountInfo, string.Format("You bought {0} for {1:#,##0} Gold", info.Item.FriendlyName, info.CurrentBid), ChatType.Hint); + MessageAccount(info.SellerInfo.AccountInfo, string.Format("You sold {0} for {1:#,##0} Gold", info.Item.FriendlyName, info.CurrentBid), ChatType.Hint); + } + else + { + info.Expired = true; + } + } + + current = current.Next; + } + } + + public void Broadcast(Packet p) + { + for (var i = 0; i < Players.Count; i++) Players[i].Enqueue(p); + } + + public void RequiresBaseStatUpdate() + { + for (var i = 0; i < Players.Count; i++) Players[i].HasUpdatedBaseStats = false; + } + + public void SaveDB() + { + using (var stream = File.Create(DatabasePath)) + using (var writer = new BinaryWriter(stream)) + { + writer.Write(Version); + writer.Write(CustomVersion); + writer.Write(MapIndex); + writer.Write(ItemIndex); + writer.Write(MonsterIndex); + writer.Write(NPCIndex); + writer.Write(QuestIndex); + writer.Write(GameshopIndex); + writer.Write(ConquestIndex); + writer.Write(RespawnIndex); + + writer.Write(MapInfoList.Count); + for (var i = 0; i < MapInfoList.Count; i++) + MapInfoList[i].Save(writer); + + writer.Write(ItemInfoList.Count); + for (var i = 0; i < ItemInfoList.Count; i++) + ItemInfoList[i].Save(writer); + + writer.Write(MonsterInfoList.Count); + for (var i = 0; i < MonsterInfoList.Count; i++) + MonsterInfoList[i].Save(writer); + + writer.Write(NPCInfoList.Count); + for (var i = 0; i < NPCInfoList.Count; i++) + NPCInfoList[i].Save(writer); + + writer.Write(QuestInfoList.Count); + for (var i = 0; i < QuestInfoList.Count; i++) + QuestInfoList[i].Save(writer); + + writer.Write(MagicInfoList.Count); + for (var i = 0; i < MagicInfoList.Count; i++) + MagicInfoList[i].Save(writer); + + writer.Write(GameShopList.Count); + for (var i = 0; i < GameShopList.Count; i++) + GameShopList[i].Save(writer); + + RespawnTick.Save(writer); + } + } + + + public CharacterInfo GetArchivedCharacter(string name) + { + DirectoryInfo dir = new DirectoryInfo(ArchivePath); + FileInfo[] files = dir.GetFiles($"{name}*.MirCA"); + + if (files.Length != 1) + { + return null; + } + + var fileInfo = files[0]; + + CharacterInfo info = null; + + using (var stream = fileInfo.OpenRead()) + { + using var reader = new BinaryReader(stream); + + var version = reader.ReadInt32(); + var customVersion = reader.ReadInt32(); + + info = new CharacterInfo(reader, version, customVersion); + } + + return info; + } + + public void SaveArchivedCharacter(CharacterInfo info) + { + if (!Directory.Exists(ArchivePath)) Directory.CreateDirectory(ArchivePath); + + using var stream = File.Create(Path.Combine(ArchivePath, @$"{info.Name}{Now:_MMddyyyy_HHmmss}.MirCA")); + using var writer = new BinaryWriter(stream); + + writer.Write(Version); + writer.Write(CustomVersion); + + info.Save(writer); + } + + public void SaveAccounts() + { + while (Saving) + Thread.Sleep(1); + + try + { + using (var stream = File.Create(AccountPath + "n")) + SaveAccounts(stream); + if (File.Exists(AccountPath)) + File.Move(AccountPath, AccountPath + "o"); + File.Move(AccountPath + "n", AccountPath); + if (File.Exists(AccountPath + "o")) + File.Delete(AccountPath + "o"); + } + catch (Exception ex) + { + MessageQueue.Enqueue(ex); + } + } + + private void SaveAccounts(Stream stream) + { + using (var writer = new BinaryWriter(stream)) + { + writer.Write(Version); + writer.Write(CustomVersion); + writer.Write(NextAccountID); + writer.Write(NextCharacterID); + writer.Write(NextUserItemID); + + writer.Write(GuildList.Count); + writer.Write(NextGuildID); + writer.Write(AccountList.Count); + for (var i = 0; i < AccountList.Count; i++) + AccountList[i].Save(writer); + + writer.Write(NextAuctionID); + writer.Write(Auctions.Count); + foreach (var auction in Auctions) + auction.Save(writer); + + writer.Write(NextMailID); + + writer.Write(GameshopLog.Count); + foreach (var item in GameshopLog) + { + writer.Write(item.Key); + writer.Write(item.Value); + } + + writer.Write(SavedSpawns.Count); + foreach (var Spawn in SavedSpawns) + { + var Save = new RespawnSave { RespawnIndex = Spawn.Info.RespawnIndex, NextSpawnTick = Spawn.NextSpawnTick, Spawned = Spawn.Count >= Spawn.Info.Count * SpawnMultiplier }; + Save.Save(writer); + } + } + } + + private void SaveGuilds(bool forced = false) + { + if (!Directory.Exists(Settings.GuildPath)) Directory.CreateDirectory(Settings.GuildPath); + + if (GuildRefreshNeeded == true) //deletes guild files and resaves with new indexing if a guild is deleted. + { + foreach (var guildfile in Directory.GetFiles(Settings.GuildPath, "*.mgd")) + { + File.Delete(guildfile); + } + + GuildRefreshNeeded = false; + forced = true; //triggers a full resave of all guilds + } + + for (var i = 0; i < GuildList.Count; i++) + { + if (GuildList[i].NeedSave || forced) + { + GuildList[i].NeedSave = false; + var mStream = new MemoryStream(); + var writer = new BinaryWriter(mStream); + GuildList[i].Save(writer); + var fStream = new FileStream(Path.Combine(Settings.GuildPath, i + ".mgdn"), FileMode.Create); + var data = mStream.ToArray(); + fStream.BeginWrite(data, 0, data.Length, EndSaveGuildsAsync, fStream); + } + } + } + private void EndSaveGuildsAsync(IAsyncResult result) + { + var fStream = result.AsyncState as FileStream; + try + { + if (fStream == null) return; + var oldfilename = fStream.Name.Substring(0, fStream.Name.Length - 1); + var newfilename = fStream.Name; + fStream.EndWrite(result); + fStream.Dispose(); + if (File.Exists(oldfilename)) + File.Move(oldfilename, oldfilename + "o"); + File.Move(newfilename, oldfilename); + if (File.Exists(oldfilename + "o")) + File.Delete(oldfilename + "o"); + } + catch (Exception) + { + } + } + + private void SaveGoods(bool forced = false) + { + if (!Directory.Exists(Settings.GoodsPath)) Directory.CreateDirectory(Settings.GoodsPath); + + for (var i = 0; i < MapList.Count; i++) + { + var map = MapList[i]; + + if (map.NPCs.Count == 0) continue; + + for (var j = 0; j < map.NPCs.Count; j++) + { + var npc = map.NPCs[j]; + + if (forced) + { + npc.ProcessGoods(forced); + } + + if (!npc.NeedSave) continue; + + var path = Path.Combine(Settings.GoodsPath, npc.Info.Index + ".msdn"); + + var mStream = new MemoryStream(); + var writer = new BinaryWriter(mStream); + var Temp = 9999; + writer.Write(Temp); + writer.Write(Version); + writer.Write(CustomVersion); + writer.Write(npc.UsedGoods.Count); + + for (var k = 0; k < npc.UsedGoods.Count; k++) + { + npc.UsedGoods[k].Save(writer); + } + + var fStream = new FileStream(path, FileMode.Create); + var data = mStream.ToArray(); + fStream.BeginWrite(data, 0, data.Length, EndSaveGoodsAsync, fStream); + } + } + } + private void EndSaveGoodsAsync(IAsyncResult result) + { + try + { + var fStream = result.AsyncState as FileStream; + if (fStream == null) return; + var oldfilename = fStream.Name.Substring(0, fStream.Name.Length - 1); + var newfilename = fStream.Name; + fStream.EndWrite(result); + fStream.Dispose(); + if (File.Exists(oldfilename)) + File.Move(oldfilename, oldfilename + "o"); + File.Move(newfilename, oldfilename); + if (File.Exists(oldfilename + "o")) + File.Delete(oldfilename + "o"); + } + catch (Exception) + { + } + } + + public void BeginSaveAccounts() + { + if (Saving) return; + + Saving = true; + + + using (var mStream = new MemoryStream()) + { + if (File.Exists(AccountPath)) + { + if (!Directory.Exists(AccountsBackUpPath)) Directory.CreateDirectory(AccountsBackUpPath); + var fileName = + $"Accounts {Now.Year:0000}-{Now.Month:00}-{Now.Day:00} {Now.Hour:00}-{Now.Minute:00}-{Now.Second:00}.bak"; + if (File.Exists(Path.Combine(AccountsBackUpPath, fileName))) File.Delete(Path.Combine(AccountsBackUpPath, fileName)); + File.Move(AccountPath, Path.Combine(AccountsBackUpPath, fileName)); + } + + SaveAccounts(mStream); + var fStream = new FileStream(AccountPath + "n", FileMode.Create); + + var data = mStream.ToArray(); + fStream.BeginWrite(data, 0, data.Length, EndSaveAccounts, fStream); + } + + } + private void EndSaveAccounts(IAsyncResult result) + { + var fStream = result.AsyncState as FileStream; + try + { + if (fStream != null) + { + var oldfilename = fStream.Name.Substring(0, fStream.Name.Length - 1); + var newfilename = fStream.Name; + fStream.EndWrite(result); + fStream.Dispose(); + if (File.Exists(oldfilename)) + File.Move(oldfilename, oldfilename + "o"); + File.Move(newfilename, oldfilename); + if (File.Exists(oldfilename + "o")) + File.Delete(oldfilename + "o"); + } + } + catch (Exception) + { + } + + Saving = false; + } + public bool LoadDB() + { + lock (LoadLock) + { + if (!File.Exists(DatabasePath)) + { + SaveDB(); + } + + using (var stream = File.OpenRead(DatabasePath)) + using (var reader = new BinaryReader(stream)) + { + LoadVersion = reader.ReadInt32(); + LoadCustomVersion = reader.ReadInt32(); + + if (LoadVersion < MinVersion) + { + MessageQueue.Enqueue($"Cannot load a database version {LoadVersion}. Mininum supported is {MinVersion}."); + return false; + } + else if (LoadVersion > Version) + { + MessageQueue.Enqueue($"Cannot load a database version {LoadVersion}. Maximum supported is {Version}."); + return false; + + } + + MapIndex = reader.ReadInt32(); + ItemIndex = reader.ReadInt32(); + MonsterIndex = reader.ReadInt32(); + + NPCIndex = reader.ReadInt32(); + QuestIndex = reader.ReadInt32(); + + if (LoadVersion >= 63) + { + GameshopIndex = reader.ReadInt32(); + } + + if (LoadVersion >= 66) + { + ConquestIndex = reader.ReadInt32(); + } + + if (LoadVersion >= 68) + RespawnIndex = reader.ReadInt32(); + + + var count = reader.ReadInt32(); + MapInfoList.Clear(); + for (var i = 0; i < count; i++) + MapInfoList.Add(new MapInfo(reader)); + + count = reader.ReadInt32(); + ItemInfoList.Clear(); + for (var i = 0; i < count; i++) + { + ItemInfoList.Add(new ItemInfo(reader, LoadVersion, LoadCustomVersion)); + if (ItemInfoList[i] != null && ItemInfoList[i].RandomStatsId < Settings.RandomItemStatsList.Count) + { + ItemInfoList[i].RandomStats = Settings.RandomItemStatsList[ItemInfoList[i].RandomStatsId]; + } + } + count = reader.ReadInt32(); + MonsterInfoList.Clear(); + for (var i = 0; i < count; i++) + MonsterInfoList.Add(new MonsterInfo(reader)); + + count = reader.ReadInt32(); + NPCInfoList.Clear(); + for (var i = 0; i < count; i++) + NPCInfoList.Add(new NPCInfo(reader)); + + count = reader.ReadInt32(); + QuestInfoList.Clear(); + for (var i = 0; i < count; i++) + QuestInfoList.Add(new QuestInfo(reader)); + + count = reader.ReadInt32(); + for (var i = 0; i < count; i++) + { + var m = new MagicInfo(reader, LoadVersion, LoadCustomVersion); + if (!MagicExists(m.Spell)) + MagicInfoList.Add(m); + } + + FillMagicInfoList(); + if (LoadVersion <= 70) + UpdateMagicInfo(); + + if (LoadVersion >= 63) + { + count = reader.ReadInt32(); + GameShopList.Clear(); + for (var i = 0; i < count; i++) + { + var item = new GameShopItem(reader, LoadVersion, LoadCustomVersion); + if (Main.BindGameShop(item)) + { + GameShopList.Add(item); + } + } + } + + if (LoadVersion > 67) + RespawnTick = new RespawnTimer(reader); + + } + + Settings.LinkGuildCreationItems(ItemInfoList); + } + + return true; + } + + public void LoadAccounts() + { + //reset ranking + for (var i = 0; i < RankClass.Count(); i++) + { + if (RankClass[i] != null) + { + RankClass[i].Clear(); + } + else + { + RankClass[i] = new List(); + } + } + + RankTop.Clear(); + + lock (LoadLock) + { + if (!File.Exists(AccountPath)) + { + SaveAccounts(); + } + + using (var stream = File.OpenRead(AccountPath)) + using (var reader = new BinaryReader(stream)) + { + LoadVersion = reader.ReadInt32(); + LoadCustomVersion = reader.ReadInt32(); + NextAccountID = reader.ReadInt32(); + NextCharacterID = reader.ReadInt32(); + NextUserItemID = reader.ReadUInt64(); + + GuildCount = reader.ReadInt32(); + NextGuildID = reader.ReadInt32(); + + int count = reader.ReadInt32(); + AccountList.Clear(); + CharacterList.Clear(); + + for (var i = 0; i < count; i++) + { + AccountList.Add(new AccountInfo(reader)); + CharacterList.AddRange(AccountList[i].Characters); + } + + foreach (var auction in Auctions) + { + auction.SellerInfo.AccountInfo.Auctions.Remove(auction); + } + + Auctions.Clear(); + + NextAuctionID = reader.ReadUInt64(); + + count = reader.ReadInt32(); + for (var i = 0; i < count; i++) + { + var auction = new AuctionInfo(reader, LoadVersion, LoadCustomVersion); + + if (!BindItem(auction.Item) || !BindCharacter(auction)) continue; + + Auctions.AddLast(auction); + auction.SellerInfo.AccountInfo.Auctions.AddLast(auction); + } + + NextMailID = reader.ReadUInt64(); + + if (LoadVersion <= 80) + { + count = reader.ReadInt32(); + for (var i = 0; i < count; i++) + { + var mail = new MailInfo(reader, LoadVersion, LoadCustomVersion); + + mail.RecipientInfo = GetCharacterInfo(mail.RecipientIndex); + + if (mail.RecipientInfo != null) + { + mail.RecipientInfo.Mail.Add(mail); //add to players inbox + } + } + } + + if (LoadVersion >= 63) + { + var logCount = reader.ReadInt32(); + for (var i = 0; i < logCount; i++) + { + GameshopLog.Add(reader.ReadInt32(), reader.ReadInt32()); + } + + if (ResetGS) ClearGameshopLog(); + } + + if (LoadVersion >= 68) + { + var saveCount = reader.ReadInt32(); + for (var i = 0; i < saveCount; i++) + { + var saved = new RespawnSave(reader); + foreach (var respawn in SavedSpawns) + { + if (respawn.Info.RespawnIndex != saved.RespawnIndex) continue; + + respawn.NextSpawnTick = saved.NextSpawnTick; + + if (!saved.Spawned || respawn.Info.Count * SpawnMultiplier <= respawn.Count) + { + continue; + } + + var mobcount = respawn.Info.Count * SpawnMultiplier - respawn.Count; + for (var j = 0; j < mobcount; j++) + { + respawn.Spawn(); + } + } + } + } + } + } + } + + public void LoadGuilds() + { + lock (LoadLock) + { + var count = 0; + + GuildList.Clear(); + + for (var i = 0; i < GuildCount; i++) + { + GuildInfo guildInfo; + if (!File.Exists(Path.Combine(Settings.GuildPath, i + ".mgd"))) continue; + + using (var stream = File.OpenRead(Path.Combine(Settings.GuildPath, i + ".mgd"))) + { + using var reader = new BinaryReader(stream); + guildInfo = new GuildInfo(reader); + } + + GuildList.Add(guildInfo); + + new GuildObject(guildInfo); + + count++; + } + + if (count != GuildCount) GuildCount = count; + } + } + + public void LoadDisabledChars() + { + DisabledCharNames.Clear(); + + var path = Path.Combine(Settings.EnvirPath, "DisabledChars.txt"); + + if (!File.Exists(path)) + { + File.WriteAllText(path, ""); + } + else + { + var lines = File.ReadAllLines(path); + + for (var i = 0; i < lines.Length; i++) + { + if (lines[i].StartsWith(";") || string.IsNullOrWhiteSpace(lines[i])) continue; + DisabledCharNames.Add(lines[i].ToUpper()); + } + } + } + + public void LoadBanIP() + { + BanIPList.Clear(); + + var path = Path.Combine(Settings.EnvirPath, "BannedIPs.txt"); + + if (!File.Exists(path)) + { + FileStream newfile = File.Create(path); + newfile.Close(); + } + + string[] lines = File.ReadAllLines(path); + + for (int i = 0; i < lines.Length; i++) + { + BanIPList.Add(lines[i]); + } + } + + public void SaveBanIP() + { + string path = Path.Combine(Settings.EnvirPath, "BannedIPs.txt"); + + if (!File.Exists(path)) + { + FileStream newfile = File.Create(path); + newfile.Close(); + } + + File.WriteAllLines(path, BanIPList); + } + + public void LoadLineMessages() + { + LineMessages.Clear(); + + var path = Path.Combine(Settings.EnvirPath, "LineMessage.txt"); + + if (!File.Exists(path)) + { + File.WriteAllText(path, ""); + } + else + { + var lines = File.ReadAllLines(path); + + for (var i = 0; i < lines.Length; i++) + { + if (lines[i].StartsWith(";") || string.IsNullOrWhiteSpace(lines[i])) continue; + LineMessages.Add(lines[i]); + } + } + } + + private bool BindCharacter(AuctionInfo auction) + { + bool bound = false; + + for (int i = 0; i < CharacterList.Count; i++) + { + if (CharacterList[i].Index == auction.SellerIndex) + { + auction.SellerInfo = CharacterList[i]; + bound = true; + } + + else if (CharacterList[i].Index == auction.CurrentBuyerIndex) + { + auction.CurrentBuyerInfo = CharacterList[i]; + bound = true; + } + } + + return bound; + } + + public void Start() + { + if (Running || _thread != null) return; + + Running = true; + + _thread = new Thread(WorkLoop) { IsBackground = true }; + _thread.Start(); + + } + public void Stop() + { + Running = false; + + lock (_locker) + { + // changing a blocking condition. (this makes the threads wake up!) + Monitor.PulseAll(_locker); + } + + //simply intterupt all the mob threads if they are running (will give an invisible error on them but fastest way of getting rid of them on shutdowns) + for (var i = 1; i < MobThreading.Length; i++) + { + if (MobThreads[i] != null) + { + MobThreads[i].EndTime = Time + 9999; + } + if (MobThreading[i] != null && + MobThreading[i].ThreadState != System.Threading.ThreadState.Stopped && MobThreading[i].ThreadState != System.Threading.ThreadState.Unstarted) + { + MobThreading[i].Interrupt(); + } + } + + http?.Stop(); + + while (_thread != null) + Thread.Sleep(1); + } + + public void Reboot() + { + new Thread(() => + { + MessageQueue.Enqueue("Server rebooting..."); + Stop(); + Start(); + }).Start(); + } + + public void UpdateIPBlock(string ipAddress, TimeSpan value) + { + IPBlocks[ipAddress] = Now.Add(value); + } + + private void StartEnvir() + { + Players.Clear(); + StartPoints.Clear(); + StartItems.Clear(); + MapList.Clear(); + GameshopLog.Clear(); + CustomCommands.Clear(); + MonsterCount = 0; + + LoadDB(); + + BuffInfoList.Clear(); + foreach (var buff in BuffInfo.Load()) + { + BuffInfoList.Add(buff); + } + + MessageQueue.Enqueue($"{BuffInfoList.Count} Buffs Loaded."); + + for (var i = 0; i < MapInfoList.Count; i++) + { + MapInfoList[i].CreateMap(); + } + MessageQueue.Enqueue($"{MapInfoList.Count} Maps Loaded."); + + for (var i = 0; i < ItemInfoList.Count; i++) + { + if (ItemInfoList[i].StartItem) + { + StartItems.Add(ItemInfoList[i]); + } + } + + ReloadDrops(); + + LoadDisabledChars(); + LoadLineMessages(); + LoadBanIP(); + + DefaultNPC = NPCScript.GetOrAdd((uint)Random.Next(1000000, 1999999), Settings.DefaultNPCFilename, NPCScriptType.AutoPlayer); + MonsterNPC = NPCScript.GetOrAdd((uint)Random.Next(2000000, 2999999), Settings.MonsterNPCFilename, NPCScriptType.AutoMonster); + RobotNPC = NPCScript.GetOrAdd((uint)Random.Next(3000000, 3999999), Settings.RobotNPCFilename, NPCScriptType.Robot); + + MessageQueue.Enqueue("Envir Started."); + } + private void StartNetwork() + { + Connections.Clear(); + + LoadAccounts(); + LoadGuilds(); + + _listener = new TcpListener(IPAddress.Parse(Settings.IPAddress), Settings.Port); + _listener.Start(); + _listener.BeginAcceptTcpClient(Connection, null); + + if (StatusPortEnabled) + { + _StatusPort = new TcpListener(IPAddress.Parse(Settings.IPAddress), 3000); + _StatusPort.Start(); + _StatusPort.BeginAcceptTcpClient(StatusConnection, null); + } + + MessageQueue.Enqueue("Network Started."); + } + + private void StopEnvir() + { + SaveGoods(true); + + MapList.Clear(); + StartPoints.Clear(); + StartItems.Clear(); + Objects.Clear(); + Players.Clear(); + + CleanUp(); + + GC.Collect(); + + MessageQueue.Enqueue("Envir Stopped."); + } + private void StopNetwork() + { + _listener.Stop(); + lock (Connections) + { + for (var i = Connections.Count - 1; i >= 0; i--) + Connections[i].SendDisconnect(0); + } + + if (StatusPortEnabled) + { + _StatusPort.Stop(); + for (var i = StatusConnections.Count - 1; i >= 0; i--) + StatusConnections[i].SendDisconnect(); + } + + var expire = Time + 5000; + + while (Connections.Count != 0 && Stopwatch.ElapsedMilliseconds < expire) + { + Time = Stopwatch.ElapsedMilliseconds; + + for (var i = Connections.Count - 1; i >= 0; i--) + Connections[i].Process(); + + Thread.Sleep(1); + } + + + Connections.Clear(); + + expire = Time + 10000; + while (StatusConnections.Count != 0 && Stopwatch.ElapsedMilliseconds < expire) + { + Time = Stopwatch.ElapsedMilliseconds; + + for (var i = StatusConnections.Count - 1; i >= 0; i--) + StatusConnections[i].Process(); + + Thread.Sleep(1); + } + + + StatusConnections.Clear(); + MessageQueue.Enqueue("Network Stopped."); + } + + private void CleanUp() + { + for (var i = 0; i < CharacterList.Count; i++) + { + var info = CharacterList[i]; + + if (info.Deleted) + { + #region Marriage Cleanup + if (info.Married > 0) + { + var Lover = GetCharacterInfo(info.Married); + + info.Married = 0; + info.MarriedDate = Now; + + Lover.Married = 0; + Lover.MarriedDate = Now; + if (Lover.Equipment[(int)EquipmentSlot.RingL] != null) + Lover.Equipment[(int)EquipmentSlot.RingL].WeddingRing = -1; + } + #endregion + } + + if (info.Mail.Count > Settings.MailCapacity) + { + for (var j = info.Mail.Count - 1 - (int)Settings.MailCapacity; j >= 0; j--) + { + if (info.Mail[j].DateOpened > Now && info.Mail[j].Collected && info.Mail[j].Items.Count == 0 && info.Mail[j].Gold == 0) + { + info.Mail.Remove(info.Mail[j]); + } + } + } + } + } + + private void Connection(IAsyncResult result) + { + try + { + if (!Running || !_listener.Server.IsBound) return; + } + catch (Exception e) + { + MessageQueue.Enqueue(e.ToString()); + } + + try + { + var tempTcpClient = _listener.EndAcceptTcpClient(result); + + bool connected = false; + var ipAddress = tempTcpClient.Client.RemoteEndPoint.ToString().Split(':')[0]; + + if (!IPBlocks.TryGetValue(ipAddress, out DateTime banDate) || banDate < Now) + { + int count = 0; + + for (int i = 0; i < Connections.Count; i++) + { + var connection = Connections[i]; + + if (!connection.Connected || connection.IPAddress != ipAddress) + continue; + + count++; + } + + if (count >= Settings.MaxIP) + { + UpdateIPBlock(ipAddress, TimeSpan.FromSeconds(Settings.IPBlockSeconds)); + + MessageQueue.Enqueue(ipAddress + " Disconnected, Too many connections."); + } + else + { + var tempConnection = new MirConnection(++_sessionID, tempTcpClient); + if (tempConnection.Connected) + { + connected = true; + lock (Connections) + Connections.Add(tempConnection); + } + } + } + + if (!connected) + tempTcpClient.Close(); + } + catch (Exception ex) + { + MessageQueue.Enqueue(ex); + } + finally + { + while (Connections.Count >= Settings.MaxUser) + Thread.Sleep(1); + + if (Running && _listener.Server.IsBound) + _listener.BeginAcceptTcpClient(Connection, null); + } + } + + private void StatusConnection(IAsyncResult result) + { + if (!Running || !_StatusPort.Server.IsBound) return; + + try + { + var tempTcpClient = _StatusPort.EndAcceptTcpClient(result); + lock (StatusConnections) + StatusConnections.Add(new MirStatusConnection(tempTcpClient)); + } + catch (Exception ex) + { + MessageQueue.Enqueue(ex); + } + finally + { + while (StatusConnections.Count >= 5) //dont allow to many status port connections it's just an abuse thing + Thread.Sleep(1); + + if (Running && _StatusPort.Server.IsBound) + _StatusPort.BeginAcceptTcpClient(StatusConnection, null); + } + } + + public void NewAccount(ClientPackets.NewAccount p, MirConnection c) + { + if (!Settings.AllowNewAccount) + { + c.Enqueue(new ServerPackets.NewAccount { Result = 0 }); + return; + } + + if (!AccountIDReg.IsMatch(p.AccountID)) + { + c.Enqueue(new ServerPackets.NewAccount { Result = 1 }); + return; + } + + if (!PasswordReg.IsMatch(p.Password)) + { + c.Enqueue(new ServerPackets.NewAccount { Result = 2 }); + return; + } + + lock (AccountLock) + { + if (AccountExists(p.AccountID)) + { + c.Enqueue(new ServerPackets.NewAccount { Result = 7 }); + return; + } + + AccountList.Add(new AccountInfo(p) { Index = ++NextAccountID, CreationIP = c.IPAddress }); + + + c.Enqueue(new ServerPackets.NewAccount { Result = 8 }); + } + } + + public int HTTPNewAccount(ClientPackets.NewAccount p, string ip) + { + return 0; + if (!Settings.AllowNewAccount) + { + return 0; + } + + if (!AccountIDReg.IsMatch(p.AccountID)) + { + return 1; + } + + if (!PasswordReg.IsMatch(p.Password)) + { + return 2; + } + + lock (AccountLock) + { + if (AccountExists(p.AccountID)) + { + return 7; + } + + AccountList.Add(new AccountInfo(p) { Index = ++NextAccountID, CreationIP = ip }); + return 8; + } + } + + public void ChangePassword(ClientPackets.ChangePassword p, MirConnection c) + { + if (!Settings.AllowChangePassword) + { + c.Enqueue(new ServerPackets.ChangePassword { Result = 0 }); + return; + } + + if (!AccountIDReg.IsMatch(p.AccountID)) + { + c.Enqueue(new ServerPackets.ChangePassword { Result = 1 }); + return; + } + + if (!PasswordReg.IsMatch(p.CurrentPassword)) + { + c.Enqueue(new ServerPackets.ChangePassword { Result = 2 }); + return; + } + + if (!PasswordReg.IsMatch(p.NewPassword)) + { + c.Enqueue(new ServerPackets.ChangePassword { Result = 3 }); + return; + } + + var account = GetAccount(p.AccountID); + + if (account == null) + { + c.Enqueue(new ServerPackets.ChangePassword { Result = 4 }); + return; + } + + if (account.Banned) + { + if (account.ExpiryDate > Now) + { + c.Enqueue(new ServerPackets.ChangePasswordBanned { Reason = account.BanReason, ExpiryDate = account.ExpiryDate }); + return; + } + account.Banned = false; + } + account.BanReason = string.Empty; + account.ExpiryDate = DateTime.MinValue; + + p.CurrentPassword = Utils.Crypto.HashPassword(p.CurrentPassword, account.Salt); + if (string.CompareOrdinal(account.Password, p.CurrentPassword) != 0) + { + c.Enqueue(new ServerPackets.ChangePassword { Result = 5 }); + return; + } + + account.Password = p.NewPassword; + account.RequirePasswordChange = false; + c.Enqueue(new ServerPackets.ChangePassword { Result = 6 }); + } + public void Login(ClientPackets.Login p, MirConnection c) + { + if (!Settings.AllowLogin) + { + c.Enqueue(new ServerPackets.Login { Result = 0 }); + return; + } + + if (!AccountIDReg.IsMatch(p.AccountID)) + { + c.Enqueue(new ServerPackets.Login { Result = 1 }); + return; + } + + if (!PasswordReg.IsMatch(p.Password)) + { + c.Enqueue(new ServerPackets.Login { Result = 2 }); + return; + } + var account = GetAccount(p.AccountID); + + if (account == null) + { + c.Enqueue(new ServerPackets.Login { Result = 3 }); + return; + } + + if (account.Banned) + { + if (account.ExpiryDate > Now) + { + c.Enqueue(new ServerPackets.LoginBanned + { + Reason = account.BanReason, + ExpiryDate = account.ExpiryDate + }); + return; + } + account.Banned = false; + } + account.BanReason = string.Empty; + account.ExpiryDate = DateTime.MinValue; + + p.Password = Utils.Crypto.HashPassword(p.Password, account.Salt); + + if (string.CompareOrdinal(account.Password, p.Password) != 0) + { + if (account.WrongPasswordCount++ >= 5) + { + account.Banned = true; + account.BanReason = "Too many Wrong Login Attempts."; + account.ExpiryDate = Now.AddMinutes(2); + + c.Enqueue(new ServerPackets.LoginBanned + { + Reason = account.BanReason, + ExpiryDate = account.ExpiryDate + }); + return; + } + + c.Enqueue(new ServerPackets.Login { Result = 4 }); + return; + } + account.WrongPasswordCount = 0; + + if (account.RequirePasswordChange) + { + c.Enqueue(new ServerPackets.Login { Result = 5 }); + return; + } + + int connectIPCount = 0; + foreach (MirConnection con in Connections) + { + if (c.IPAddress == con.IPAddress) + connectIPCount++; + + if (connectIPCount > Settings.MaxIP) + { + c.Enqueue(new ServerPackets.Login { Result = 5 }); + return; + } + } + + foreach (string banip in BanIPList) + { + if (c.IPAddress == banip) + { + c.Enqueue(new ServerPackets.Login { Result = 6 }); + return; + } + } + lock (AccountLock) + { + account.Connection?.SendDisconnect(1); + + account.Connection = c; + } + + c.Account = account; + c.Stage = GameStage.Select; + + account.LastDate = Now; + account.LastIP = c.IPAddress; + + MessageQueue.Enqueue(account.Connection.SessionID + ", " + account.Connection.IPAddress + ", User logged in."); + c.Enqueue(new ServerPackets.LoginSuccess { Characters = account.GetSelectInfo() }); + } + + public void NewCharacter(ClientPackets.NewCharacter p, MirConnection c, bool IsGm) + { + if (!Settings.AllowNewCharacter) + { + c.Enqueue(new ServerPackets.NewCharacter { Result = 0 }); + return; + } + + if (!CharacterReg.IsMatch(p.Name)) + { + c.Enqueue(new ServerPackets.NewCharacter { Result = 1 }); + return; + } + + if (!IsGm && DisabledCharNames.Contains(p.Name.ToUpper())) + { + c.Enqueue(new ServerPackets.NewCharacter { Result = 1 }); + return; + } + + if (p.Gender != MirGender.Male && p.Gender != MirGender.Female) + { + c.Enqueue(new ServerPackets.NewCharacter { Result = 2 }); + return; + } + + if (p.Class != MirClass.Warrior && p.Class != MirClass.Wizard && p.Class != MirClass.Taoist) + { + c.Enqueue(new ServerPackets.NewCharacter { Result = 3 }); + return; + } + + var count = 0; + + for (var i = 0; i < c.Account.Characters.Count; i++) + { + if (c.Account.Characters[i].Deleted) continue; + + if (++count >= Globals.MaxCharacterCount) + { + c.Enqueue(new ServerPackets.NewCharacter { Result = 4 }); + return; + } + } + + lock (AccountLock) + { + if (CharacterExists(p.Name)) + { + c.Enqueue(new ServerPackets.NewCharacter { Result = 5 }); + return; + } + + var info = new CharacterInfo(p, c) { Index = ++NextCharacterID, AccountInfo = c.Account }; + + c.Account.Characters.Add(info); + CharacterList.Add(info); + + c.Enqueue(new ServerPackets.NewCharacterSuccess { CharInfo = info.ToSelectInfo() }); + } + } + + public int HTTPLogin(string AccountID, string Password) + { + if (!Settings.AllowLogin) + { + return 0; + } + + if (!AccountIDReg.IsMatch(AccountID)) + { + return 1; + } + + if (!PasswordReg.IsMatch(Password)) + { + return 2; + } + + var account = GetAccount(AccountID); + + if (account == null) + { + return 3; + } + + if (account.Banned) + { + if (account.ExpiryDate > Now) + { + return 4; + } + account.Banned = false; + } + account.BanReason = string.Empty; + account.ExpiryDate = DateTime.MinValue; + if (string.CompareOrdinal(account.Password, Password) != 0) + { + if (account.WrongPasswordCount++ >= 5) + { + account.Banned = true; + account.BanReason = "Too many Wrong Login Attempts."; + account.ExpiryDate = Now.AddMinutes(2); + return 5; + } + return 6; + } + account.WrongPasswordCount = 0; + return 7; + } + + public bool AccountExists(string accountID) + { + for (var i = 0; i < AccountList.Count; i++) + if (string.Compare(AccountList[i].AccountID, accountID, StringComparison.OrdinalIgnoreCase) == 0) + return true; + + return false; + } + public bool CharacterExists(string name) + { + for (var i = 0; i < CharacterList.Count; i++) + if (string.Compare(CharacterList[i].Name, name, StringComparison.OrdinalIgnoreCase) == 0) + return true; + + return false; + } + + public AccountInfo GetAccount(string accountID) + { + for (var i = 0; i < AccountList.Count; i++) + if (string.Compare(AccountList[i].AccountID, accountID, StringComparison.OrdinalIgnoreCase) == 0) + return AccountList[i]; + + return null; + } + public AccountInfo GetAccountByCharacter(string name) + { + for (var i = 0; i < AccountList.Count; i++) + { + for (int j = 0; j < AccountList[i].Characters.Count; j++) + { + if (string.Compare(AccountList[i].Characters[j].Name, name, StringComparison.OrdinalIgnoreCase) == 0) + return AccountList[i]; + } + } + + return null; + } + + public List MatchAccounts(string accountID, bool match = false) + { + if (string.IsNullOrEmpty(accountID)) return new List(AccountList); + + var list = new List(); + + for (var i = 0; i < AccountList.Count; i++) + { + if (match) + { + if (AccountList[i].AccountID.Equals(accountID, StringComparison.OrdinalIgnoreCase)) + list.Add(AccountList[i]); + } + else + { + if (AccountList[i].AccountID.IndexOf(accountID, StringComparison.OrdinalIgnoreCase) >= 0) + list.Add(AccountList[i]); + } + } + + return list; + } + + public List MatchAccountsByPlayer(string playerName, bool match = false) + { + if (string.IsNullOrEmpty(playerName)) return new List(AccountList); + + var list = new List(); + + for (var i = 0; i < AccountList.Count; i++) + { + for (var j = 0; j < AccountList[i].Characters.Count; j++) + { + if (match) + { + if (AccountList[i].Characters[j].Name.Equals(playerName, StringComparison.OrdinalIgnoreCase)) + list.Add(AccountList[i]); + } + else + { + if (AccountList[i].Characters[j].Name.IndexOf(playerName, StringComparison.OrdinalIgnoreCase) >= 0) + list.Add(AccountList[i]); + } + } + } + + return list; + } + + public void CreateAccountInfo() + { + AccountList.Add(new AccountInfo { Index = ++NextAccountID }); + } + public void CreateMapInfo() + { + MapInfoList.Add(new MapInfo {Index = ++MapIndex}); + } + public void CreateItemInfo(ItemType type = ItemType.Nothing) + { + ItemInfoList.Add(new ItemInfo { Index = ++ItemIndex, Type = type, RandomStatsId = 255}); + } + public void CreateMonsterInfo() + { + MonsterInfoList.Add(new MonsterInfo {Index = ++MonsterIndex}); + } + public void CreateNPCInfo() + { + NPCInfoList.Add(new NPCInfo { Index = ++NPCIndex }); + } + public void CreateQuestInfo() + { + QuestInfoList.Add(new QuestInfo { Index = ++QuestIndex }); + } + + public void AddToGameShop(ItemInfo Info) + { + GameShopList.Add(new GameShopItem { GIndex = ++GameshopIndex, GoldPrice = (uint)(1000 * Settings.CredxGold), CreditPrice = 1000, ItemIndex = Info.Index, Info = Info, Date = Now, Class = "All", Category = Info.Type.ToString() }); + } + + public void Remove(MapInfo info) + { + MapInfoList.Remove(info); + //Desync all objects\ + } + public void Remove(ItemInfo info) + { + ItemInfoList.Remove(info); + } + public void Remove(MonsterInfo info) + { + MonsterInfoList.Remove(info); + //Desync all objects\ + } + public void Remove(NPCInfo info) + { + NPCInfoList.Remove(info); + //Desync all objects\ + } + public void Remove(QuestInfo info) + { + QuestInfoList.Remove(info); + //Desync all objects\ + } + + public void Remove(GameShopItem info) + { + GameShopList.Remove(info); + + if (GameShopList.Count == 0) + { + GameshopIndex = 0; + } + + //Desync all objects\ + } + + public UserItem CreateFreshItem(ItemInfo info) + { + var item = new UserItem(info) + { + UniqueID = ++NextUserItemID, + CurrentDura = info.Durability, + MaxDura = info.Durability + }; + + UpdateItemExpiry(item); + + return item; + } + public UserItem CreateDropItem(int index) + { + return CreateDropItem(GetItemInfo(index)); + } + public UserItem CreateDropItem(ItemInfo info) + { + if (info == null) return null; + + var item = new UserItem(info) + { + UniqueID = ++NextUserItemID, + MaxDura = info.Durability, + CurrentDura = (ushort) Math.Min(info.Durability, Random.Next(info.Durability) + 1000) + }; + + UpgradeItem(item); + + UpdateItemExpiry(item); + + if (!info.NeedIdentify) item.Identified = true; + return item; + } + + public UserItem CreateShopItem(ItemInfo info, ulong id) + { + if (info == null) return null; + + var item = new UserItem(info) + { + UniqueID = id, + CurrentDura = info.Durability, + MaxDura = info.Durability, + IsShopItem = true, + }; + + return item; + } + + public void UpdateItemExpiry(UserItem item) + { + var expiryInfo = new ExpireInfo(); + + var r = new Regex(@"\[(.*?)\]"); + var expiryMatch = r.Match(item.Info.Name); + + if (expiryMatch.Success) + { + var parameter = expiryMatch.Groups[1].Captures[0].Value; + + var numAlpha = new Regex("(?[0-9]*)(?[a-zA-Z]*)"); + var match = numAlpha.Match(parameter); + + var alpha = match.Groups["Alpha"].Value; + var num = 0; + + int.TryParse(match.Groups["Numeric"].Value, out num); + + switch (alpha) + { + case "m": + expiryInfo.ExpiryDate = Now.AddMinutes(num); + break; + case "h": + expiryInfo.ExpiryDate = Now.AddHours(num); + break; + case "d": + expiryInfo.ExpiryDate = Now.AddDays(num); + break; + case "M": + expiryInfo.ExpiryDate = Now.AddMonths(num); + break; + case "y": + expiryInfo.ExpiryDate = Now.AddYears(num); + break; + default: + expiryInfo.ExpiryDate = DateTime.MaxValue; + break; + } + + item.ExpireInfo = expiryInfo; + } + } + + public void UpgradeItem(UserItem item) + { + if (item.Info.RandomStats == null) return; + var stat = item.Info.RandomStats; + if (stat.MaxDuraChance > 0 && Random.Next(stat.MaxDuraChance) == 0) + { + var dura = RandomomRange(stat.MaxDuraMaxStat, stat.MaxDuraStatChance); + item.MaxDura = (ushort)Math.Min(ushort.MaxValue, item.MaxDura + dura * 1000); + item.CurrentDura = (ushort)Math.Min(ushort.MaxValue, item.CurrentDura + dura * 1000); + } + + if (stat.MaxAcChance > 0 && Random.Next(stat.MaxAcChance) == 0) item.AddedStats[Stat.MaxAC] = (byte)(RandomomRange(stat.MaxAcMaxStat-1, stat.MaxAcStatChance)+1); + if (stat.MaxMacChance > 0 && Random.Next(stat.MaxMacChance) == 0) item.AddedStats[Stat.MaxMAC] = (byte)(RandomomRange(stat.MaxMacMaxStat-1, stat.MaxMacStatChance)+1); + if (stat.MaxDcChance > 0 && Random.Next(stat.MaxDcChance) == 0) item.AddedStats[Stat.MaxDC] = (byte)(RandomomRange(stat.MaxDcMaxStat-1, stat.MaxDcStatChance)+1); + if (stat.MaxMcChance > 0 && Random.Next(stat.MaxMcChance) == 0) item.AddedStats[Stat.MaxMC] = (byte)(RandomomRange(stat.MaxMcMaxStat-1, stat.MaxMcStatChance)+1); + if (stat.MaxScChance > 0 && Random.Next(stat.MaxScChance) == 0) item.AddedStats[Stat.MaxSC] = (byte)(RandomomRange(stat.MaxScMaxStat-1, stat.MaxScStatChance)+1); + if (stat.AccuracyChance > 0 && Random.Next(stat.AccuracyChance) == 0) item.AddedStats[Stat.Accuracy] = (byte)(RandomomRange(stat.AccuracyMaxStat-1, stat.AccuracyStatChance)+1); + if (stat.AgilityChance > 0 && Random.Next(stat.AgilityChance) == 0) item.AddedStats[Stat.Agility] = (byte)(RandomomRange(stat.AgilityMaxStat-1, stat.AgilityStatChance)+1); + if (stat.HpChance > 0 && Random.Next(stat.HpChance) == 0) item.AddedStats[Stat.HP] = (byte)(RandomomRange(stat.HpMaxStat-1, stat.HpStatChance)+1); + if (stat.MpChance > 0 && Random.Next(stat.MpChance) == 0) item.AddedStats[Stat.MP] = (byte)(RandomomRange(stat.MpMaxStat-1, stat.MpStatChance)+1); + if (stat.StrongChance > 0 && Random.Next(stat.StrongChance) == 0) item.AddedStats[Stat.Strong] = (byte)(RandomomRange(stat.StrongMaxStat-1, stat.StrongStatChance)+1); + if (stat.MagicResistChance > 0 && Random.Next(stat.MagicResistChance) == 0) item.AddedStats[Stat.MagicResist] = (byte)(RandomomRange(stat.MagicResistMaxStat-1, stat.MagicResistStatChance)+1); + if (stat.PoisonResistChance > 0 && Random.Next(stat.PoisonResistChance) == 0) item.AddedStats[Stat.PoisonResist] = (byte)(RandomomRange(stat.PoisonResistMaxStat-1, stat.PoisonResistStatChance)+1); + if (stat.HpRecovChance > 0 && Random.Next(stat.HpRecovChance) == 0) item.AddedStats[Stat.HealthRecovery] = (byte)(RandomomRange(stat.HpRecovMaxStat-1, stat.HpRecovStatChance)+1); + if (stat.MpRecovChance > 0 && Random.Next(stat.MpRecovChance) == 0) item.AddedStats[Stat.SpellRecovery] = (byte)(RandomomRange(stat.MpRecovMaxStat-1, stat.MpRecovStatChance)+1); + if (stat.PoisonRecovChance > 0 && Random.Next(stat.PoisonRecovChance) == 0) item.AddedStats[Stat.PoisonRecovery] = (byte)(RandomomRange(stat.PoisonRecovMaxStat-1, stat.PoisonRecovStatChance)+1); + if (stat.CriticalRateChance > 0 && Random.Next(stat.CriticalRateChance) == 0) item.AddedStats[Stat.CriticalRate] = (byte)(RandomomRange(stat.CriticalRateMaxStat-1, stat.CriticalRateStatChance)+1); + if (stat.CriticalDamageChance > 0 && Random.Next(stat.CriticalDamageChance) == 0) item.AddedStats[Stat.CriticalDamage] = (byte)(RandomomRange(stat.CriticalDamageMaxStat-1, stat.CriticalDamageStatChance)+1); + if (stat.FreezeChance > 0 && Random.Next(stat.FreezeChance) == 0) item.AddedStats[Stat.Freezing] = (byte)(RandomomRange(stat.FreezeMaxStat-1, stat.FreezeStatChance)+1); + if (stat.PoisonAttackChance > 0 && Random.Next(stat.PoisonAttackChance) == 0) item.AddedStats[Stat.PoisonAttack] = (byte)(RandomomRange(stat.PoisonAttackMaxStat-1, stat.PoisonAttackStatChance)+1); + if (stat.AttackSpeedChance > 0 && Random.Next(stat.AttackSpeedChance) == 0) item.AddedStats[Stat.AttackSpeed] = (sbyte)(RandomomRange(stat.AttackSpeedMaxStat-1, stat.AttackSpeedStatChance)+1); + if (stat.LuckChance > 0 && Random.Next(stat.LuckChance) == 0) item.AddedStats[Stat.Luck] = (sbyte)(RandomomRange(stat.LuckMaxStat-1, stat.LuckStatChance)+1); + if (stat.CurseChance > 0 && Random.Next(100) <= stat.CurseChance) item.Cursed = true; + } + + public int RandomomRange(int count, int rate) + { + var x = 0; + for (var i = 0; i < count; i++) if (Random.Next(rate) == 0) x++; + return x; + } + public bool BindItem(UserItem item) + { + for (var i = 0; i < ItemInfoList.Count; i++) + { + var info = ItemInfoList[i]; + if (info.Index != item.ItemIndex) continue; + item.Info = info; + + return true; + } + return false; + } + + public bool BindGameShop(GameShopItem item, bool editEnvir = true) + { + for (var i = 0; i < Edit.ItemInfoList.Count; i++) + { + var info = Edit.ItemInfoList[i]; + if (info.Index != item.ItemIndex) continue; + item.Info = info; + + return true; + } + return false; + } + + public bool BindQuest(QuestProgressInfo quest) + { + for (var i = 0; i < QuestInfoList.Count; i++) + { + var info = QuestInfoList[i]; + if (info.Index != quest.Index) continue; + quest.Info = info; + return true; + } + return false; + } + + public Map GetMap(int index) + { + return MapList.FirstOrDefault(t => t.Info.Index == index); + } + + public Map GetMap(string name, bool strict = true) + { + return MapList.FirstOrDefault(t => strict ? string.Equals(t.Info.Title, name, StringComparison.CurrentCultureIgnoreCase) : t.Info.Title.StartsWith(name, StringComparison.CurrentCultureIgnoreCase)); + } + + public Map GetWorldMap(string name) + { + return MapList.FirstOrDefault(t => t.Info.Title.StartsWith(name, StringComparison.CurrentCultureIgnoreCase) && t.Info.BigMap > 0); + } + + public MapInfo GetMapInfo(int index) + { + return MapInfoList.FirstOrDefault(t => t.Index == index); + } + + public Map GetMapByNameAndInstance(string name, int instanceValue = 0) + { + if (instanceValue < 0) instanceValue = 0; + if (instanceValue > 0) instanceValue--; + + var instanceMapList = MapList.Where(t => string.Equals(t.Info.FileName, name, StringComparison.CurrentCultureIgnoreCase)).ToList(); + return instanceValue < instanceMapList.Count() ? instanceMapList[instanceValue] : null; + } + + public MonsterInfo GetMonsterInfo(int index) + { + for (var i = 0; i < MonsterInfoList.Count; i++) + if (MonsterInfoList[i].Index == index) return MonsterInfoList[i]; + + return null; + } + + public MonsterInfo GetMonsterInfo(int ai, int effect = -1) + { + for (var i = 0; i < MonsterInfoList.Count; i++) + if (MonsterInfoList[i].AI == ai && (MonsterInfoList[i].Effect == effect || effect < 0)) return MonsterInfoList[i]; + + return null; + } + + public NPCObject GetNPC(string name) + { + return MapList.SelectMany(t1 => t1.NPCs.Where(t => t.Info.Name == name)).FirstOrDefault(); + } + + public NPCObject GetWorldMapNPC(string name) + { + return MapList.SelectMany(t1 => t1.NPCs.Where(t => t.Info.GameName.StartsWith(name, StringComparison.CurrentCultureIgnoreCase) && t.Info.ShowOnBigMap)).FirstOrDefault(); + } + + public MonsterInfo GetMonsterInfo(int id, bool strict = false) + { + String monsterName = MonsterInfoList.FirstOrDefault(x => x.Index == id)?.Name; + + if (monsterName == null) + { + return null; + } + else + { + return (GetMonsterInfo(monsterName, strict)); + } + } + + public MonsterInfo GetMonsterInfo(string name, bool Strict = false) + { + for (var i = 0; i < MonsterInfoList.Count; i++) + { + var info = MonsterInfoList[i]; + if (Strict) + { + if (info.Name != name) continue; + return info; + } + else + { + if (string.Compare(info.Name, name, StringComparison.OrdinalIgnoreCase) != 0 && string.Compare(info.Name.Replace(" ", ""), name.Replace(" ", ""), StringComparison.OrdinalIgnoreCase) != 0) continue; + return info; + } + } + return null; + } + public PlayerObject GetPlayer(string name) + { + for (var i = 0; i < Players.Count; i++) + if (string.Compare(Players[i].Name, name, StringComparison.OrdinalIgnoreCase) == 0) + return Players[i]; + + return null; + } + public PlayerObject GetPlayer(uint PlayerId) + { + for (var i = 0; i < Players.Count; i++) + if (Players[i].Info.Index == PlayerId) + return Players[i]; + + return null; + } + public CharacterInfo GetCharacterInfo(string name) + { + for (var i = 0; i < CharacterList.Count; i++) + if (string.Compare(CharacterList[i].Name, name, StringComparison.OrdinalIgnoreCase) == 0) + return CharacterList[i]; + + return null; + } + + public CharacterInfo GetCharacterInfo(int index) + { + for (var i = 0; i < CharacterList.Count; i++) + if (CharacterList[i].Index == index) + return CharacterList[i]; + + return null; + } + + public ItemInfo GetItemInfo(int index) + { + for (var i = 0; i < ItemInfoList.Count; i++) + { + var info = ItemInfoList[i]; + if (info.Index != index) continue; + return info; + } + return null; + } + + public ItemInfo GetItemInfo(string name) + { + for (var i = 0; i < ItemInfoList.Count; i++) + { + var info = ItemInfoList[i]; + if (string.Compare(info.Name.Replace(" ", ""), name, StringComparison.OrdinalIgnoreCase) != 0) continue; + return info; + } + return null; + } + + public QuestInfo GetQuestInfo(int index) + { + return QuestInfoList.FirstOrDefault(info => info.Index == index); + } + + public ItemInfo GetBook(short Skill) + { + for (var i = 0; i < ItemInfoList.Count; i++) + { + var info = ItemInfoList[i]; + if (info.Type != ItemType.Book || info.Shape != Skill) continue; + return info; + } + return null; + } + + public BuffInfo GetBuffInfo(BuffType type) + { + for (int i = 0; i < BuffInfoList.Count; i++) + { + var info = BuffInfoList[i]; + if (info.Type != type) continue; + + return info; + } + + throw new NotImplementedException($"{type} has not been implemented."); + } + + public void MessageAccount(AccountInfo account, string message, ChatType type) + { + if (account?.Characters == null) return; + + for (var i = 0; i < account.Characters.Count; i++) + { + if (account.Characters[i].Player == null) continue; + account.Characters[i].Player.ReceiveChat(message, type); + return; + } + } + + + public void MailCharacter(CharacterInfo info, UserItem item = null, uint gold = 0, int reason = 0, string customMessage = null) + { + string sender = "Bichon Administrator"; + + string message = "You have been mailed due to the following reason:\r\n\r\n"; + + switch (reason) + { + case 1: + message += "Could not return item to bag after trade."; + break; + case 99: + message += "Code didn't correctly handle checking inventory space."; + break; + default: + message += customMessage ?? "No reason provided."; + break; + } + + MailInfo mail = new MailInfo(info.Index) + { + Sender = sender, + Message = message, + Gold = gold + }; + + if (item != null) + { + mail.Items.Add(item); + } + + mail.Send(); + } + + public GuildObject GetGuild(string name) + { + for (var i = 0; i < Guilds.Count; i++) + { + if (string.Compare(Guilds[i].Name.Replace(" ", ""), name, StringComparison.OrdinalIgnoreCase) != 0) continue; + + return Guilds[i]; + } + + return null; + } + public GuildObject GetGuild(int index) + { + for (var i = 0; i < Guilds.Count; i++) + { + if (Guilds[i].Guildindex == index) + { + return Guilds[i]; + } + } + + return null; + } + + public void ProcessNewDay() + { + foreach (var c in CharacterList) + { + ClearDailyQuests(c); + + c.NewDay = true; + + c.Player?.CallDefaultNPC(DefaultNPCType.Daily); + } + } + + private void ClearDailyQuests(CharacterInfo info) + { + foreach (var quest in QuestInfoList) + { + if (quest.Type != QuestType.Daily) continue; + + for (var i = 0; i < info.CompletedQuests.Count; i++) + { + if (info.CompletedQuests[i] != quest.Index) continue; + + info.CompletedQuests.RemoveAt(i); + } + } + + info.Player?.GetCompletedQuests(); + } + + public GuildBuffInfo FindGuildBuffInfo(int Id) + { + for (var i = 0; i < Settings.Guild_BuffList.Count; i++) + { + if (Settings.Guild_BuffList[i].Id == Id) + { + return Settings.Guild_BuffList[i]; + } + } + + return null; + } + + public void ClearGameshopLog() + { + Main.GameshopLog.Clear(); + + for (var i = 0; i < AccountList.Count; i++) + { + for (var f = 0; f < AccountList[i].Characters.Count; f++) + { + AccountList[i].Characters[f].GSpurchases.Clear(); + } + } + + ResetGS = false; + MessageQueue.Enqueue("Gameshop Purchase Logs Cleared."); + } + + public void Observe(MirConnection con, string Name) + { + var player = GetPlayer(Name); + + if (player == null) return; + if (!player.AllowObserve || !Settings.AllowObserve) return; + + player.AddObserver(con); + } + + public void GetRanking(MirConnection con, byte RankType, int RankIndex, bool OnlineOnly) + { + if (RankType > 6) return; + List listings = RankType == 0 ? RankTop : RankClass[RankType - 1]; + + if (RankIndex >= listings.Count || RankIndex < 0) return; + + S.Rankings p = new S.Rankings + { + RankType = RankType, + Count = OnlineOnly ? OnlineRankingCount[RankType] : listings.Count + }; + + if (con.Player != null) + { + if (RankType == 0) + p.MyRank = con.Player.Info.Rank[0]; + else + p.MyRank = (byte)con.Player.Class == (RankType - 1) ? con.Player.Info.Rank[1] : 0; + } + + int c = 0; + for (int i = RankIndex; i < listings.Count; i++) + { + if (OnlineOnly && GetPlayer(listings[i].Name) == null) continue; + + if (!CheckListing(con, listings[i])) + p.ListingDetails.Add(listings[i]); + p.Listings.Add(listings[i].PlayerId); + c++; + + if (c > 19 || c >= p.Count) break; + } + + con.Enqueue(p); + } + + private bool CheckListing(MirConnection con, RankCharacterInfo listing) + { + if (!con.SentRankings.ContainsKey(listing.PlayerId)) + { + con.SentRankings.Add(listing.PlayerId, listing.LastUpdated); + return false; + } + + DateTime lastUpdated = con.SentRankings[listing.PlayerId]; + if (lastUpdated != listing.LastUpdated) + { + con.SentRankings[listing.PlayerId] = lastUpdated; + return false; + } + + return true; + } + + public int InsertRank(List Ranking, RankCharacterInfo NewRank) + { + if (Ranking.Count == 0) + { + Ranking.Add(NewRank); + return Ranking.Count; + } + + for (var i = 0; i < Ranking.Count; i++) + { + //if level is lower + if (Ranking[i].level < NewRank.level) + { + Ranking.Insert(i, NewRank); + return i + 1; + } + + //if exp is lower but level = same + if (Ranking[i].level == NewRank.level && Ranking[i].Experience < NewRank.Experience) + { + Ranking.Insert(i, NewRank); + return i + 1; + } + } + + Ranking.Add(NewRank); + return Ranking.Count; + } + + public bool TryAddRank(List Ranking, CharacterInfo info, byte type) + { + var NewRank = new RankCharacterInfo() { Name = info.Name, Class = info.Class, Experience = info.Experience, level = info.Level, PlayerId = info.Index, info = info, LastUpdated = Now }; + var NewRankIndex = InsertRank(Ranking, NewRank); + if (NewRankIndex == 0) return false; + for (var i = NewRankIndex; i < Ranking.Count; i++ ) + { + SetNewRank(Ranking[i], i + 1, type); + } + info.Rank[type] = NewRankIndex; + return true; + } + + public int FindRank(List Ranking, CharacterInfo info, byte type) + { + var startindex = info.Rank[type]; + if (startindex > 0) //if there's a previously known rank then the user can only have gone down in the ranking (or stayed the same) + { + for (var i = startindex-1; i < Ranking.Count; i++) + { + if (Ranking[i].Name == info.Name) + return i; + } + info.Rank[type] = 0;//set the rank to 0 to tell future searches it's not there anymore + } + return -1;//index can be 0 + } + + public bool UpdateRank(List Ranking, CharacterInfo info, byte type) + { + var CurrentRank = FindRank(Ranking, info, type); + if (CurrentRank == -1) return false;//not in ranking list atm + + var NewRank = CurrentRank; + //next find our updated rank + for (var i = CurrentRank-1; i >= 0; i-- ) + { + if (Ranking[i].level > info.Level || Ranking[i].level == info.Level && Ranking[i].Experience > info.Experience) break; + NewRank =i; + } + + Ranking[CurrentRank].level = info.Level; + Ranking[CurrentRank].Experience = info.Experience; + Ranking[CurrentRank].LastUpdated = Now; + + if (NewRank < CurrentRank) + {//if we gained any ranks + Ranking.Insert(NewRank, Ranking[CurrentRank]); + Ranking.RemoveAt(CurrentRank + 1); + for (var i = NewRank + 1; i < Math.Min(Ranking.Count, CurrentRank +1); i++) + { + SetNewRank(Ranking[i], i + 1, type); + } + } + info.Rank[type] = NewRank+1; + + return true; + } + + public void SetNewRank(RankCharacterInfo Rank, int Index, byte type) + { + Rank.LastUpdated = Now; + if (!(Rank.info is CharacterInfo Player)) return; + Player.Rank[type] = Index; + } + + public void RemoveRank(CharacterInfo info) + { + List Ranking; + var Rankindex = -1; + //first check overall top + Ranking = RankTop; + Rankindex = FindRank(Ranking, info, 0); + if (Rankindex >= 0) + { + Ranking.RemoveAt(Rankindex); + for (var i = Rankindex; i < Ranking.Count(); i++) + { + SetNewRank(Ranking[i], i, 0); + } + } + + //next class based top + Ranking = RankTop; + Rankindex = FindRank(Ranking, info, 1); + if (Rankindex >= 0) + { + Ranking.RemoveAt(Rankindex); + for (var i = Rankindex; i < Ranking.Count(); i++) + { + SetNewRank(Ranking[i], i, 1); + } + } + + } + + public void CheckRankUpdate(CharacterInfo info) + { + List Ranking; + + //first check overall top + + Ranking = RankTop; + if (!UpdateRank(Ranking, info, 0)) + { + TryAddRank(Ranking, info, 0); + } + + //now check class top + + Ranking = RankClass[(byte)info.Class]; + if (!UpdateRank(Ranking, info, 1)) + { + TryAddRank(Ranking, info, 1); + } + } + + + public void ReloadNPCs() + { + SaveGoods(true); + + Robot.Clear(); + + var keys = Scripts.Keys; + + foreach (var key in keys) + { + Scripts[key].Load(); + } + + MessageQueue.Enqueue("NPC Scripts reloaded."); + } + + public void ReloadDrops() + { + for (var i = 0; i < MonsterInfoList.Count; i++) + { + string path = Path.Combine(Settings.DropPath, MonsterInfoList[i].Name + ".txt"); + + if (!string.IsNullOrEmpty(MonsterInfoList[i].DropPath)) + { + path = Path.Combine(Settings.DropPath, MonsterInfoList[i].DropPath + ".txt"); + } + + MonsterInfoList[i].Drops.Clear(); + + DropInfo.Load(MonsterInfoList[i].Drops, MonsterInfoList[i].Name, path, 0, true); + } + + MessageQueue.Enqueue("Drops reloaded."); + } + public void ReloadLineMessages() + { + LineMessages.Clear(); + + var path = Path.Combine(Settings.EnvirPath, "LineMessage.txt"); + + if (!File.Exists(path)) + { + File.WriteAllText(path, ""); + } + else + { + var lines = File.ReadAllLines(path); + + for (var i = 0; i < lines.Length; i++) + { + if (lines[i].StartsWith(";") || string.IsNullOrWhiteSpace(lines[i])) continue; + LineMessages.Add(lines[i]); + } + MessageQueue.Enqueue("LineMessages reloaded."); + } + } + private WorldMapIcon ValidateWorldMap() + { + foreach (WorldMapIcon wmi in Settings.WorldMapSetup.Icons) + { + MapInfo info = GetMapInfo(wmi.MapIndex); + + if (info == null) + return wmi; + } + return null; + } + + public void DeleteGuild(GuildObject guild) + { + Guilds.Remove(guild); + GuildList.Remove(guild.Info); + + GuildRefreshNeeded = true; + MessageQueue.Enqueue(guild.Info.Name + " guild will be deleted from the server."); + } + } +} diff --git a/Server/MirEnvir/Map.cs b/Server/MirEnvir/Map.cs new file mode 100644 index 0000000..beb6afb --- /dev/null +++ b/Server/MirEnvir/Map.cs @@ -0,0 +1,1059 @@ +using Server.MirDatabase; +using Server.MirObjects; +using S = ServerPackets; + +namespace Server.MirEnvir +{ + public class Map + { + private static Envir Envir + { + get { return Envir.Main; } + } + + protected static MessageQueue MessageQueue + { + get { return MessageQueue.Instance; } + } + + public MapInfo Info; + + public int Thread = 0; + + public int Width, Height; + public Cell[,] Cells; + public List WalkableCells; + public long LightningTime, FireTime; + public int MonsterCount; + + public List NPCs = new List(); + public List Spells = new List(); + public List Players = new List(); + public List Respawns = new List(); + public List ActionList = new List(); + + public Map(MapInfo info) + { + Info = info; + Thread = Envir.Random.Next(Settings.ThreadLimit); + } + + private void LoadMapCells(byte[] fileBytes) + { + int offSet = 0; + Width = BitConverter.ToInt16(fileBytes, offSet); + offSet += 2; + Height = BitConverter.ToInt16(fileBytes, offSet); + Cells = new Cell[Width, Height]; + + offSet = 56; + + for (int x = 0; x < Width; x++) + for (int y = 0; y < Height; y++) + { + if ((BitConverter.ToInt16(fileBytes, offSet) & 0x8000) != 0) + Cells[x, y] = Cell.LowWall; + offSet += 2; + if ((BitConverter.ToInt16(fileBytes, offSet) & 0x8000) != 0) + Cells[x, y] = Cell.HighWall; + offSet += 2; + if (Cells[x, y] == null) Cells[x, y] = new Cell { Attribute = CellAttribute.Walk }; + } + } + + public bool Load() + { + try + { + string fileName = Path.Combine(Settings.MapPath, Info.FileName + ".map"); + if (File.Exists(fileName)) + { + byte[] fileBytes = File.ReadAllBytes(fileName); + LoadMapCells(fileBytes); + + GetWalkableCells(); + + for (int i = 0; i < Info.Respawns.Count; i++) + { + MapRespawn info = new MapRespawn(Info.Respawns[i]); + if (info.Monster == null) continue; + info.Map = this; + info.WalkableCells = WalkableCells.Where(x => + x.X <= info.Info.Location.X + info.Info.Spread && + x.X >= info.Info.Location.X - info.Info.Spread && + x.Y <= info.Info.Location.Y + info.Info.Spread && + x.Y >= info.Info.Location.Y - info.Info.Spread).ToList(); + + Respawns.Add(info); + + if ((info.Info.SaveRespawnTime) && (info.Info.RespawnTicks != 0)) + Envir.SavedSpawns.Add(info); + } + + for (int i = 0; i < Info.NPCs.Count; i++) + { + NPCInfo info = Info.NPCs[i]; + if (!ValidPoint(info.Location)) continue; + + AddObject(new NPCObject(info) { CurrentMap = this }); + } + + for (int i = 0; i < Info.SafeZones.Count; i++) + CreateSafeZone(Info.SafeZones[i]); + + return true; + } + } + catch (Exception ex) + { + MessageQueue.Enqueue(ex); + } + + MessageQueue.Enqueue("Failed to Load Map: " + Info.Title); + MessageQueue.Enqueue("Filename: " + Info.FileName); + return false; + } + + public void GetWalkableCells() + { + if (WalkableCells == null) + { + WalkableCells = new List(); + + for (int x = 0; x < Width; x++) + for (int y = 0; y < Height; y++) + if (Cells[x, y].Attribute == CellAttribute.Walk) + WalkableCells.Add(new Point(x, y)); + } + } + + private void CreateSafeZone(SafeZoneInfo info) + { + if (Settings.SafeZoneBorder) + { + for (int y = info.Location.Y - info.Size; y <= info.Location.Y + info.Size; y++) + { + if (y < 0) continue; + if (y >= Height) break; + for (int x = info.Location.X - info.Size; x <= info.Location.X + info.Size; x += Math.Abs(y - info.Location.Y) == info.Size ? 1 : info.Size * 2) + { + if (x < 0) continue; + if (x >= Width) break; + if (!Cells[x, y].Valid) continue; + + SpellObject spell = new SpellObject + { + ExpireTime = long.MaxValue, + Spell = Spell.TrapHexagon, + TickSpeed = int.MaxValue, + CurrentLocation = new Point(x, y), + CurrentMap = this, + Decoration = true + }; + + Cells[x, y].Add(spell); + + spell.Spawned(); + } + } + } + + if (Settings.SafeZoneHealing) + { + for (int y = info.Location.Y - info.Size; y <= info.Location.Y + info.Size; y++) + { + if (y < 0) continue; + if (y >= Height) break; + for (int x = info.Location.X - info.Size; x <= info.Location.X + info.Size; x++) + { + if (x < 0) continue; + if (x >= Width) break; + if (!Cells[x, y].Valid) continue; + + SpellObject spell = new SpellObject + { + ExpireTime = long.MaxValue, + Value = 25, + TickSpeed = 2000, + Spell = Spell.Healing, + CurrentLocation = new Point(x, y), + CurrentMap = this + }; + + Cells[x, y].Add(spell); + + spell.Spawned(); + } + } + } + + + } + + public Cell GetCell(Point location) + { + return Cells[location.X, location.Y]; + } + + public Cell GetCell(int x, int y) + { + return Cells[x, y]; + } + + public bool ValidPoint(Point location) + { + return location.X >= 0 && location.X < Width && location.Y >= 0 && location.Y < Height && GetCell(location).Valid; + } + public bool ValidPoint(int x, int y) + { + return x >= 0 && x < Width && y >= 0 && y < Height && GetCell(x, y).Valid; + } + + public void Process() + { + ProcessRespawns(); + + if ((Info.Lightning) && Envir.Time > LightningTime) + { + LightningTime = Envir.Time + Envir.Random.Next(3000, 15000); + for (int i = Players.Count - 1; i >= 0; i--) + { + PlayerObject player = Players[i]; + Point location; + if (Envir.Random.Next(4) == 0) + { + location = player.CurrentLocation; + } + else + location = new Point(player.CurrentLocation.X - 10 + Envir.Random.Next(20), player.CurrentLocation.Y - 10 + Envir.Random.Next(20)); + + if (!ValidPoint(location)) continue; + } + } + + if ((Info.Fire) && Envir.Time > FireTime) + { + FireTime = Envir.Time + Envir.Random.Next(3000, 15000); + for (int i = Players.Count - 1; i >= 0; i--) + { + PlayerObject player = Players[i]; + Point location; + if (Envir.Random.Next(4) == 0) + { + location = player.CurrentLocation; + + } + else + location = new Point(player.CurrentLocation.X - 10 + Envir.Random.Next(20), player.CurrentLocation.Y - 10 + Envir.Random.Next(20)); + + if (!ValidPoint(location)) continue; + } + } + + for (int i = 0; i < ActionList.Count; i++) + { + if (Envir.Time < ActionList[i].Time) continue; + Process(ActionList[i]); + ActionList.RemoveAt(i); + } + } + + private void ProcessRespawns() + { + bool Success = true; + for (int i = 0; i < Respawns.Count; i++) + { + MapRespawn respawn = Respawns[i]; + if ((respawn.Info.RespawnTicks != 0) && (Envir.RespawnTick.CurrentTickcounter < respawn.NextSpawnTick)) continue; + if ((respawn.Info.RespawnTicks == 0) && (Envir.Time < respawn.RespawnTime)) continue; + + if (respawn.Count < (respawn.Info.Count * Envir.SpawnMultiplier)) + { + int count = (respawn.Info.Count * Envir.SpawnMultiplier) - respawn.Count; + + for (int c = 0; c < count; c++) + Success = respawn.Spawn(); + } + if (Success) + { + respawn.ErrorCount = 0; + long delay = Math.Max(1, respawn.Info.Delay - respawn.Info.RandomDelay + Envir.Random.Next(respawn.Info.RandomDelay * 2)); + respawn.RespawnTime = Envir.Time + (delay * Settings.Minute); + if (respawn.Info.RespawnTicks != 0) + { + respawn.NextSpawnTick = Envir.RespawnTick.CurrentTickcounter + (ulong)respawn.Info.RespawnTicks; + if (respawn.NextSpawnTick > long.MaxValue)//since nextspawntick is ulong this simple thing allows an easy way of preventing the counter from overflowing + respawn.NextSpawnTick -= long.MaxValue; + } + } + else + { + respawn.RespawnTime = Envir.Time + 1 * Settings.Minute; // each time it fails to spawn, give it a 1 minute cooldown + if (respawn.ErrorCount < 5) + respawn.ErrorCount++; + else + { + if (respawn.ErrorCount == 5) + { + respawn.ErrorCount++; + + Logger.GetLogger(LogType.Spawn).Info($"Failed to spawn: " + + $"mapindex: {respawn.Map.Info.Index}, " + + $"mob info: index: {respawn.Info.MonsterIndex}, " + + $"spawncoords ({respawn.Info.Location.X}:{respawn.Info.Location.Y}), " + + $"range {respawn.Info.Spread}"); + } + + } + } + } + } + + public void Process(DelayedAction action) + { + switch (action.Type) + { + case DelayedType.Magic: + CompleteMagic(action.Params); + break; + case DelayedType.Spawn: + MapObject obj = (MapObject)action.Params[0]; + + switch(obj.Race) + { + case ObjectType.Monster: + { + MonsterObject mob = (MonsterObject)action.Params[0]; + mob.Spawn(this, (Point)action.Params[1]); + if (action.Params.Length > 2) ((MonsterObject)action.Params[2]).SlaveList.Add(mob); + } + break; + case ObjectType.Spell: + { + SpellObject spell = (SpellObject)action.Params[0]; + AddObject(spell); + spell.Spawned(); + } + break; + } + break; + } + } + + /** + * return the coordinates of effect coordinates within an n x n square (n should be odd number. i.e. 3x3, 5x5, 7x7) + * then use GetCell() in Map.cs to retrive real objects + * default 3x3 + */ + public static List GetPointsInEffectiveSquare(Point location, int mapWidth, int mapHeight, int squareEdgeLength = 3) + { + var pointsWithinTheMap = new List(); + int fallBackSpread = 1; + int spread; + if (squareEdgeLength > 1) + { + spread = (int)((squareEdgeLength - 1) / 2); + } else + { + spread = fallBackSpread; // 3x3 + } + + for (int y = location.Y - spread; y <= location.Y + spread; y++) + { + if (y < 0) continue; + if (y >= mapHeight) break; + + for (int x = location.X - spread; x <= location.X + spread; x++) + { + if (x < 0) continue; + if (x >= mapWidth) break; + pointsWithinTheMap.Add(new Point(x, y)); + } + } + return pointsWithinTheMap; + } + + private void CompleteMagic(IList data) + { + bool train = false; + HumanObject player = (HumanObject)data[0]; + UserMagic magic = (UserMagic)data[1]; + + if (player == null || player.Info == null || player.Node == null) return; + + int value, value2; + Point location; + Cell cell; + MirDirection dir; + MonsterObject monster; + Point front; + switch (magic.Spell) + { + + #region HellFire + + case Spell.HellFire: + value = (int)data[2]; + dir = (MirDirection)data[4]; + location = Functions.PointMove((Point)data[3], dir, 1); + int count = (int)data[5] - 1; + + if (!ValidPoint(location)) return; + + if (count > 0) + { + DelayedAction action = new DelayedAction(DelayedType.Magic, Envir.Time + 100, player, magic, value, location, dir, count); + ActionList.Add(action); + } + + cell = GetCell(location); + + if (cell.Objects == null) return; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject target = cell.Objects[i]; + switch (target.Race) + { + case ObjectType.Monster: + case ObjectType.Player: + //Only targets + if (target.IsAttackTarget(player)) + { + if (target.Attacked(player, value, DefenceType.MAC, false) > 0) + train = true; + break; + } + break; + } + } + break; + + #endregion + + #region SummonSkeleton, SummonShinsu, SummonHolyDeva, ArcherSummons + + case Spell.SummonSkeleton: + monster = (MonsterObject)data[2]; + front = (Point)data[3]; + + if (monster.Master.Dead) return; + + if (ValidPoint(front)) + monster.Spawn(this, front); + else + monster.Spawn(player.CurrentMap, player.CurrentLocation); + + monster.Master.Pets.Add(monster); + break; + #endregion + + #region FireBang, IceStorm + + case Spell.FireBang: + value = (int)data[2]; + location = (Point)data[3]; + + for (int y = location.Y - 1; y <= location.Y + 1; y++) + { + if (y < 0) continue; + if (y >= Height) break; + + for (int x = location.X - 1; x <= location.X + 1; x++) + { + if (x < 0) continue; + if (x >= Width) break; + + cell = GetCell(x, y); + + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject target = cell.Objects[i]; + switch (target.Race) + { + case ObjectType.Monster: + case ObjectType.Player: + //Only targets + if (target.IsAttackTarget(player)) + { + if (target.Attacked(player, value, DefenceType.MAC, false) > 0) + train = true; + } + break; + } + } + + } + + } + + break; + + #endregion + + #region MassHiding + + case Spell.MassHiding: + value = (int)data[2]; + location = (Point)data[3]; + + for (int y = location.Y - 1; y <= location.Y + 1; y++) + { + if (y < 0) continue; + if (y >= Height) break; + + for (int x = location.X - 1; x <= location.X + 1; x++) + { + if (x < 0) continue; + if (x >= Width) break; + + cell = GetCell(x, y); + + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject target = cell.Objects[i]; + + if (target.Node == null) continue; + + switch (target.Race) + { + case ObjectType.Monster: + case ObjectType.Player: + //Only targets + if (target.IsFriendlyTarget(player)) + { + target.AddBuff(BuffType.Hiding, player, (Settings.Second * value), new Stats()); + target.OperateTime = 0; + train = true; + } + break; + } + } + + } + + } + + break; + + #endregion + + #region SoulShield, BlessedArmour + + case Spell.SoulShield: + case Spell.BlessedArmour: + value = (int)data[2]; + location = (Point)data[3]; + BuffType type = magic.Spell == Spell.SoulShield ? BuffType.SoulShield : BuffType.BlessedArmour; + + for (int y = location.Y - 3; y <= location.Y + 3; y++) + { + if (y < 0) continue; + if (y >= Height) break; + + for (int x = location.X - 3; x <= location.X + 3; x++) + { + if (x < 0) continue; + if (x >= Width) break; + + cell = GetCell(x, y); + + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject target = cell.Objects[i]; + + if (target.Node == null) continue; + + switch (target.Race) + { + case ObjectType.Monster: + case ObjectType.Player: + //Only targets + if (target.IsFriendlyTarget(player)) + { + var stats = new Stats + { + [type == BuffType.SoulShield ? Stat.MaxMAC : Stat.MaxAC] = target.Level / 7 + 4 + }; + + target.AddBuff(type, player, Settings.Second * value, stats); + target.OperateTime = 0; + train = true; + } + break; + } + } + + } + + } + + break; + + #endregion + + #region FireWall + + case Spell.FireWall: + value = (int)data[2]; + location = (Point)data[3]; + + player.LevelMagic(magic); + + if (ValidPoint(location)) + { + cell = GetCell(location); + + bool cast = true; + if (cell.Objects != null) + for (int o = 0; o < cell.Objects.Count; o++) + { + MapObject target = cell.Objects[o]; + if (target.Race != ObjectType.Spell || ((SpellObject)target).Spell != Spell.FireWall) continue; + + cast = false; + break; + } + + if (cast) + { + SpellObject ob = new SpellObject + { + Spell = Spell.FireWall, + Value = value, + ExpireTime = Envir.Time + (10 + value / 2) * 1000, + TickSpeed = 2000, + Caster = player, + CurrentLocation = location, + CurrentMap = this, + }; + AddObject(ob); + ob.Spawned(); + } + } + + dir = MirDirection.Up; + for (int i = 0; i < 4; i++) + { + location = Functions.PointMove((Point)data[3], dir, 1); + dir += 2; + + if (!ValidPoint(location)) continue; + + cell = GetCell(location); + bool cast = true; + + if (cell.Objects != null) + for (int o = 0; o < cell.Objects.Count; o++) + { + MapObject target = cell.Objects[o]; + if (target.Race != ObjectType.Spell || ((SpellObject)target).Spell != Spell.FireWall) continue; + + cast = false; + break; + } + + if (!cast) continue; + + SpellObject ob = new SpellObject + { + Spell = Spell.FireWall, + Value = value, + ExpireTime = Envir.Time + (10 + value / 2) * 1000, + TickSpeed = 2000, + Caster = player, + CurrentLocation = location, + CurrentMap = this, + }; + AddObject(ob); + ob.Spawned(); + } + + break; + + #endregion + + #region Lightning + + case Spell.Lightning: + value = (int)data[2]; + location = (Point)data[3]; + dir = (MirDirection)data[4]; + + for (int i = 0; i < 6; i++) + { + location = Functions.PointMove(location, dir, 1); + + if (!ValidPoint(location)) continue; + + cell = GetCell(location); + + if (cell.Objects == null) continue; + + for (int o = 0; o < cell.Objects.Count; o++) + { + MapObject target = cell.Objects[o]; + if (target.Race != ObjectType.Player && target.Race != ObjectType.Monster) continue; + + if (!target.IsAttackTarget(player)) continue; + if (target.Attacked(player, value, DefenceType.MAC, false) > 0) + train = true; + break; + } + } + + break; + + #endregion + + #region MassHealing + + case Spell.MassHealing: + value = (int)data[2]; + location = (Point)data[3]; + + for (int y = location.Y - 1; y <= location.Y + 1; y++) + { + if (y < 0) continue; + if (y >= Height) break; + + for (int x = location.X - 1; x <= location.X + 1; x++) + { + if (x < 0) continue; + if (x >= Width) break; + + cell = GetCell(x, y); + + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject target = cell.Objects[i]; + switch (target.Race) + { + case ObjectType.Monster: + case ObjectType.Player: + //Only targets + if (target.IsFriendlyTarget(player)) + { + if (target.Health >= target.MaxHealth) continue; + target.HealAmount = (ushort)Math.Min(ushort.MaxValue, target.HealAmount + value); + target.OperateTime = 0; + train = true; + } + break; + } + } + + } + + } + + break; + + #endregion + + #region ThunderStorm + + case Spell.ThunderStorm: + value = (int)data[2]; + location = (Point)data[3]; + for (int y = location.Y - 2; y <= location.Y + 2; y++) + { + if (y < 0) continue; + if (y >= Height) break; + + for (int x = location.X - 2; x <= location.X + 2; x++) + { + if (x < 0) continue; + if (x >= Width) break; + + cell = GetCell(x, y); + + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject target = cell.Objects[i]; + switch (target.Race) + { + case ObjectType.Monster: + case ObjectType.Player: + //Only targets + if (!target.IsAttackTarget(player)) break; + target.Attacked(player, magic.Spell == Spell.ThunderStorm && !target.Undead ? value / 10 : value, DefenceType.MAC, false); + train = true; + break; + } + } + + } + } + + break; + + #endregion + + #region TrapHexagon + + case Spell.TrapHexagon: + value = (int)data[2]; + location = (Point)data[3]; + + MonsterObject centerTarget = null; + + for (int y = location.Y - 1; y <= location.Y + 1; y++) + { + if (y < 0) continue; + if (y >= Height) break; + + for (int x = location.X - 1; x <= location.X + 1; x++) + { + if (x < 0) continue; + if (x >= Width) break; + + cell = GetCell(x, y); + + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject target = cell.Objects[i]; + + if (y == location.Y && x == location.X && target.Race == ObjectType.Monster) + { + centerTarget = (MonsterObject)target; + } + + switch (target.Race) + { + case ObjectType.Monster: + if (target == null || !target.IsAttackTarget(player) || target.Node == null || target.Level > player.Level + 2) continue; + + MonsterObject mobTarget = (MonsterObject)target; + + if (centerTarget == null) centerTarget = mobTarget; + + mobTarget.ShockTime = Envir.Time + value; + mobTarget.Target = null; + break; + } + } + + } + } + + if (centerTarget == null) return; + + for (byte i = 0; i < 8; i += 2) + { + Point startpoint = Functions.PointMove(location, (MirDirection)i, 2); + for (byte j = 0; j <= 4; j += 4) + { + MirDirection spawndirection = i == 0 || i == 4 ? MirDirection.Right : MirDirection.Up; + Point spawnpoint = Functions.PointMove(startpoint, spawndirection + j, 1); + if (spawnpoint.X <= 0 || spawnpoint.X > centerTarget.CurrentMap.Width) continue; + if (spawnpoint.Y <= 0 || spawnpoint.Y > centerTarget.CurrentMap.Height) continue; + SpellObject ob = new SpellObject + { + Spell = Spell.TrapHexagon, + ExpireTime = Envir.Time + value, + TickSpeed = 100, + Caster = player, + CurrentLocation = spawnpoint, + CastLocation = location, + CurrentMap = centerTarget.CurrentMap, + Target = centerTarget, + }; + + centerTarget.CurrentMap.AddObject(ob); + ob.Spawned(); + } + } + + train = true; + + break; + + #endregion + } + + if (train) + player.LevelMagic(magic); + + } + + public void AddObject(MapObject ob) + { + if (ob.Race == ObjectType.Player) + { + Players.Add((PlayerObject)ob); + } + + if (ob.Race == ObjectType.Merchant) NPCs.Add((NPCObject)ob); + if (ob.Race == ObjectType.Spell) Spells.Add((SpellObject)ob); + + GetCell(ob.CurrentLocation).Add(ob); + } + + public void RemoveObject(MapObject ob) + { + if (ob.Race == ObjectType.Player) Players.Remove((PlayerObject)ob); + if (ob.Race == ObjectType.Merchant) NPCs.Remove((NPCObject)ob); + if (ob.Race == ObjectType.Spell) Spells.Remove((SpellObject)ob); + + GetCell(ob.CurrentLocation).Remove(ob); + } + + + public SafeZoneInfo GetSafeZone(Point location) + { + for (int i = 0; i < Info.SafeZones.Count; i++) + { + SafeZoneInfo szi = Info.SafeZones[i]; + if (Functions.InRange(szi.Location, location, szi.Size)) + return szi; + } + return null; + } + + public List GetSpellObjects(Spell spell ,MapObject caster) + { + List spellObjects = new List(); + + for (int i = 0; i < Spells.Count; i++) + { + if (spell != Spells[i].Spell) continue; + if (caster != null && Spells[i].Caster != caster) continue; + + spellObjects.Add(Spells[i]); + } + + return spellObjects; + } + + public void Broadcast(Packet p, Point location) + { + if (p == null) return; + + for (int i = Players.Count - 1; i >= 0; i--) + { + PlayerObject player = Players[i]; + + if (Functions.InRange(location, player.CurrentLocation, Globals.DataRange)) + player.Enqueue(p); + } + } + + public void BroadcastNPC(Packet p, Point location) + { + if (p == null) return; + + for (int i = Players.Count - 1; i >= 0; i--) + { + PlayerObject player = Players[i]; + + if (Functions.InRange(location, player.CurrentLocation, Globals.DataRange)) + player.Enqueue(p); + + } + } + + + public void Broadcast(Packet p, Point location, PlayerObject Player) + { + if (p == null) return; + + if (Functions.InRange(location, Player.CurrentLocation, Globals.DataRange)) + { + Player.Enqueue(p); + } + } + } + public class Cell + { + public static Cell LowWall { get { return new Cell { Attribute = CellAttribute.LowWall }; } } + public static Cell HighWall { get { return new Cell { Attribute = CellAttribute.HighWall }; } } + + public bool Valid + { + get { return Attribute == CellAttribute.Walk; } + } + + public List Objects; + public CellAttribute Attribute; + public sbyte FishingAttribute = -1; + + public void Add(MapObject mapObject) + { + if (Objects == null) Objects = new List(); + + Objects.Add(mapObject); + } + public void Remove(MapObject mapObject) + { + Objects.Remove(mapObject); + if (Objects.Count == 0) Objects = null; + } + } + public class MapRespawn + { + protected static Envir Envir + { + get { return Envir.Main; } + } + + public RespawnInfo Info; + public MonsterInfo Monster; + public Map Map; + public int Count; + public long RespawnTime; + public ulong NextSpawnTick; + public byte ErrorCount = 0; + + public List Route; + public List WalkableCells; + + public MapRespawn(RespawnInfo info) + { + Info = info; + Monster = Envir.GetMonsterInfo(info.MonsterIndex); + + LoadRoutes(); + } + public bool Spawn() + { + MonsterObject ob = MonsterObject.GetMonster(Monster); + if (ob == null) return true; + return ob.Spawn(this); + } + + public void LoadRoutes() + { + Route = new List(); + + if (string.IsNullOrEmpty(Info.RoutePath)) return; + + string fileName = Path.Combine(Settings.RoutePath, Info.RoutePath + ".txt"); + + if (!File.Exists(fileName)) return; + + List lines = File.ReadAllLines(fileName).ToList(); + + foreach (string line in lines) + { + RouteInfo info = RouteInfo.FromText(line); + + if (info == null) continue; + + Route.Add(info); + } + } + } +} diff --git a/Server/MirEnvir/RespawnTimer.cs b/Server/MirEnvir/RespawnTimer.cs new file mode 100644 index 0000000..324abce --- /dev/null +++ b/Server/MirEnvir/RespawnTimer.cs @@ -0,0 +1,125 @@ +namespace Server.MirEnvir +{ + public class RespawnSave + { + public bool Spawned = false; + public ulong NextSpawnTick = 0; + public int RespawnIndex = 0; + + public RespawnSave() { } + + public RespawnSave(BinaryReader reader) + { + Spawned = reader.ReadBoolean(); + NextSpawnTick = reader.ReadUInt64(); + RespawnIndex = reader.ReadInt32(); + } + + public void Save(BinaryWriter writer) + { + writer.Write(Spawned); + writer.Write(NextSpawnTick); + writer.Write(RespawnIndex); + } + } + + public class RespawnTickOption + { + public int UserCount = 1; + public double DelayLoss = 1.0; + + public RespawnTickOption() { } + + public RespawnTickOption(BinaryReader reader) + { + UserCount = reader.ReadInt32(); + DelayLoss = reader.ReadDouble(); + } + + public void Save(BinaryWriter writer) + { + writer.Write(UserCount); + writer.Write(DelayLoss); + } + + public override string ToString() + { + return string.Format("+{0} users", UserCount); + } + } + + public class RespawnTimer + { + protected static Envir Envir + { + get { return Envir.Main; } + } + + public byte BaseSpawnRate = 20;//amount of minutes between respawnticks (with no bonus) + public ulong CurrentTickcounter = 0; //counter used to respawn everything + public long LastTick = 0; //what 'time' was the last tick? + public int LastUsercount = 0; //stops it from having to check delay each time + public long CurrentDelay = 0; + public List Respawn = new List(); + + public RespawnTimer() + { + RespawnTickOption Option = new RespawnTickOption { UserCount = 0, DelayLoss = 1.0 }; + Respawn.Add(Option); + //LastTick = Envir.Time; + } + + public RespawnTimer(BinaryReader reader) + { + BaseSpawnRate = reader.ReadByte(); + CurrentTickcounter = reader.ReadUInt64(); + LastTick = Envir.Time; + Respawn.Clear(); + int Optioncount = reader.ReadInt32(); + for (int i = 0; i < Optioncount; i++) + { + RespawnTickOption Option = new RespawnTickOption(reader); + Respawn.Add(Option); + } + CurrentDelay = (long)Math.Round((double)BaseSpawnRate * (double)60000); + } + public void Save(BinaryWriter writer) + { + writer.Write(BaseSpawnRate); + writer.Write(CurrentTickcounter); + writer.Write(Respawn.Count); + foreach (RespawnTickOption Option in Respawn) + Option.Save(writer); + } + + + public void Process() + { + //by always rechecking tickspeed we reduce the chance of having respawns get silly on situations where usercount goes up or down fast (like say after a server reboot) + GetTickSpeed(); + + if (Envir.Time >= (LastTick + CurrentDelay)) + { + CurrentTickcounter++; + if (CurrentTickcounter == long.MaxValue) //by using long instead of ulong here you basicaly have a huge safe zone on the respawn ticks of mobs + { + CurrentTickcounter = 0; + } + LastTick = Envir.Time; + } + } + + public void GetTickSpeed() + { + if (LastUsercount == Envir.PlayerCount) return; + LastUsercount = Envir.PlayerCount; + double bonus = 1.0; + foreach (RespawnTickOption Option in Respawn) + { + if (Option.UserCount <= LastUsercount) + bonus = Math.Min(bonus, Option.DelayLoss); + } + CurrentDelay = (long)Math.Round((BaseSpawnRate * 60000) * bonus); + } + } +} diff --git a/Server/MirEnvir/Robot.cs b/Server/MirEnvir/Robot.cs new file mode 100644 index 0000000..07d00bd --- /dev/null +++ b/Server/MirEnvir/Robot.cs @@ -0,0 +1,114 @@ +using Server.MirObjects; +using System.Text.RegularExpressions; + +namespace Server.MirEnvir +{ + public class Robot + { + protected static Envir Envir + { + get { return Envir.Main; } + } + + public int? Month; + public int? Day; + public int? Hour; + public int? Minute; + public DayOfWeek? DayOfWeek; + private string Page; + + private static bool CheckHour; + private static bool CheckMinute; + private static DateTime NextCheck; + private static readonly List Robots = new List(); + + private static void SetNextCheck() + { + var next = Envir.Now; + next = next.AddSeconds(-next.Second); + next = next.AddMinutes(1); + + if (!CheckMinute) + { + next = next.AddMinutes(-next.Minute); + next = next.AddHours(1); + + if (!CheckHour) + { + next = next.AddHours(-next.Hour); + next = next.AddDays(1); + } + } + + NextCheck = next; + } + + public static void Clear() + { + Robots.Clear(); + } + + private bool IsMatch(DateTime date) + { + if (Month != null && date.Month != Month) return false; + if (Day != null && date.Day != Day) return false; + if (Hour != null && date.Hour != Hour) return false; + if (Minute != null && date.Minute != Minute) return false; + if (DayOfWeek != null && date.DayOfWeek != DayOfWeek) return false; + + return true; + } + + public static void Process(NPCScript script) + { + if (NextCheck > Envir.Now) + { + return; + } + + var matches = Robots.Where(x => x.IsMatch(Envir.Now)); + + foreach (var match in matches) + { + script.Call(match.Page); + } + + SetNextCheck(); + } + + public static void AddRobot(string page) + { + Regex regex = new Regex(@"\(([0-9#]{1,2}),([0-9#]{1,2}),([0-9#]{1,2}),([0-9#]{1,2}),([^\s]+)\)"); + Match match = regex.Match(page); + + if (!match.Success) return; + + var robot = new Robot { Page = page }; + + if (int.TryParse(match.Groups[1].Value, out int val)) + { + robot.Month = val; + } + if (int.TryParse(match.Groups[2].Value, out val)) + { + robot.Day = val; + } + if (int.TryParse(match.Groups[3].Value, out val)) + { + CheckHour = true; + robot.Hour = val; + } + if (int.TryParse(match.Groups[4].Value, out val)) + { + CheckMinute = true; + robot.Minute = val; + } + if (Enum.TryParse(match.Groups[5].Value, true, out DayOfWeek enumVal)) + { + robot.DayOfWeek = enumVal; + } + + Robots.Add(robot); + } + } +} diff --git a/Server/MirEnvir/Timer.cs b/Server/MirEnvir/Timer.cs new file mode 100644 index 0000000..20c69ae --- /dev/null +++ b/Server/MirEnvir/Timer.cs @@ -0,0 +1,25 @@ +namespace Server.MirEnvir +{ + public class Timer + { + private static Envir Envir + { + get { return Envir.Main; } + } + + public string Key; + public byte Type; + public int Seconds; + + public long RelativeTime; + + public Timer(string key, int seconds, byte type) + { + Key = key; + Seconds = seconds; + Type = type; + + RelativeTime = Envir.Time + (seconds * Settings.Second); + } + } +} diff --git a/Server/MirNetwork/MirConnection.cs b/Server/MirNetwork/MirConnection.cs new file mode 100644 index 0000000..aebd829 --- /dev/null +++ b/Server/MirNetwork/MirConnection.cs @@ -0,0 +1,1559 @@ +using System.Collections.Concurrent; +using System.Net.Sockets; +using Server.MirDatabase; +using Server.MirEnvir; +using Server.MirObjects; +using C = ClientPackets; +using S = ServerPackets; +using System.Text.RegularExpressions; +using Server.Utils; + +namespace Server.MirNetwork +{ + public enum GameStage { None, Login, Select, Game, Observer, Disconnected } + + public class MirConnection + { + protected static Envir Envir + { + get { return Envir.Main; } + } + + protected static MessageQueue MessageQueue + { + get { return MessageQueue.Instance; } + } + + public readonly int SessionID; + public readonly string IPAddress; + + public GameStage Stage; + + private TcpClient _client; + private ConcurrentQueue _receiveList; + private ConcurrentQueue _sendList; + private Queue _retryList; + + private bool _disconnecting; + public bool Connected; + public bool Disconnecting + { + get { return _disconnecting; } + set + { + if (_disconnecting == value) return; + _disconnecting = value; + TimeOutTime = Envir.Time + 500; + } + } + public readonly long TimeConnected; + public long TimeDisconnected, TimeOutTime; + + byte[] _rawData = new byte[0]; + byte[] _rawBytes = new byte[8 * 1024]; + + public AccountInfo Account; + public PlayerObject Player; + + public List Observers = new List(); + public MirConnection Observing; + + public List SentItemInfo = new List(); + public List SentQuestInfo = new List(); + public List SentChatItem = new List(); //TODO - Add Expiry time + public List SentMapInfo = new List(); + public bool WorldMapSetupSent; + public bool StorageSent; + public Dictionary SentRankings = new Dictionary(); + + private DateTime _dataCounterReset; + private int _dataCounter; + private FixedSizedQueue _lastPackets; + + public MirConnection(int sessionID, TcpClient client) + { + SessionID = sessionID; + IPAddress = client.Client.RemoteEndPoint.ToString().Split(':')[0]; + + Envir.UpdateIPBlock(IPAddress, TimeSpan.FromSeconds(Settings.IPBlockSeconds)); + + MessageQueue.Enqueue(IPAddress + ", Connected."); + + _client = client; + _client.NoDelay = true; + + TimeConnected = Envir.Time; + TimeOutTime = TimeConnected + Settings.TimeOut; + + _lastPackets = new FixedSizedQueue(10); + + _receiveList = new ConcurrentQueue(); + _sendList = new ConcurrentQueue(); + _sendList.Enqueue(new S.Connected()); + _retryList = new Queue(); + + Connected = true; + BeginReceive(); + } + + public void AddObserver(MirConnection c) + { + Observers.Add(c); + + if (c.Observing != null) + c.Observing.Observers.Remove(c); + c.Observing = this; + + c.Stage = GameStage.Observer; + } + + private void BeginReceive() + { + if (!Connected) return; + + try + { + _client.Client.BeginReceive(_rawBytes, 0, _rawBytes.Length, SocketFlags.None, ReceiveData, _rawBytes); + } + catch + { + Disconnecting = true; + } + } + + private void ReceiveData(IAsyncResult result) + { + if (!Connected) return; + + int dataRead; + + try + { + dataRead = _client.Client.EndReceive(result); + } + catch + { + Disconnecting = true; + return; + } + + if (dataRead == 0) + { + Disconnecting = true; + return; + } + + if (_dataCounterReset < Envir.Now) + { + _dataCounterReset = Envir.Now.AddSeconds(5); + _dataCounter = 0; + } + + _dataCounter++; + + try + { + byte[] rawBytes = result.AsyncState as byte[]; + + byte[] temp = _rawData; + _rawData = new byte[dataRead + temp.Length]; + Buffer.BlockCopy(temp, 0, _rawData, 0, temp.Length); + Buffer.BlockCopy(rawBytes, 0, _rawData, temp.Length, dataRead); + + Packet p; + + while ((p = Packet.ReceivePacket(_rawData, out _rawData)) != null) + _receiveList.Enqueue(p); + } + catch + { + Envir.UpdateIPBlock(IPAddress, TimeSpan.FromHours(24)); + + MessageQueue.Enqueue($"{IPAddress} Disconnected, Invalid packet."); + + Disconnecting = true; + return; + } + + if (_dataCounter > Settings.MaxPacket) + { + Envir.UpdateIPBlock(IPAddress, TimeSpan.FromHours(24)); + + List packetList = new List(); + + while (_lastPackets.Count > 0) + { + _lastPackets.TryDequeue(out Packet pkt); + + Enum.TryParse((pkt?.Index ?? 0).ToString(), out ClientPacketIds cPacket); + + packetList.Add(cPacket.ToString()); + } + + MessageQueue.Enqueue($"{IPAddress} Disconnected, Large amount of Packets. LastPackets: {String.Join(",", packetList.Distinct())}."); + + Disconnecting = true; + return; + } + + BeginReceive(); + } + private void BeginSend(List data) + { + if (!Connected || data.Count == 0) return; + + //Interlocked.Add(ref Network.Sent, data.Count); + + try + { + _client.Client.BeginSend(data.ToArray(), 0, data.Count, SocketFlags.None, SendData, Disconnecting); + } + catch + { + Disconnecting = true; + } + } + private void SendData(IAsyncResult result) + { + try + { + _client.Client.EndSend(result); + } + catch + { } + } + + public void Enqueue(Packet p) + { + if (p == null) return; + if (_sendList != null && p != null) + _sendList.Enqueue(p); + + if (!p.Observable) return; + foreach (MirConnection c in Observers) + c.Enqueue(p); + } + + public void Process() + { + if (_client == null || !_client.Connected) + { + Disconnect(20); + return; + } + + while (!_receiveList.IsEmpty && !Disconnecting) + { + Packet p; + if (!_receiveList.TryDequeue(out p)) continue; + + _lastPackets.Enqueue(p); + + TimeOutTime = Envir.Time + Settings.TimeOut; + ProcessPacket(p); + + if (_receiveList == null) + return; + } + + while (_retryList.Count > 0) + _receiveList.Enqueue(_retryList.Dequeue()); + + if (Envir.Time > TimeOutTime) + { + Disconnect(21); + return; + } + + if (_sendList == null || _sendList.Count <= 0) return; + + List data = new List(); + + while (!_sendList.IsEmpty) + { + Packet p; + if (!_sendList.TryDequeue(out p) || p == null) continue; + data.AddRange(p.GetPacketBytes()); + } + + BeginSend(data); + } + private void ProcessPacket(Packet p) + { + if (p == null || Disconnecting) return; + + switch (p.Index) + { + case (short)ClientPacketIds.ClientVersion: + ClientVersion((C.ClientVersion) p); + break; + case (short)ClientPacketIds.Disconnect: + Disconnect(22); + break; + case (short)ClientPacketIds.KeepAlive: // Keep Alive + ClientKeepAlive((C.KeepAlive)p); + break; + case (short)ClientPacketIds.NewAccount: + NewAccount((C.NewAccount) p); + break; + case (short)ClientPacketIds.ChangePassword: + ChangePassword((C.ChangePassword) p); + break; + case (short)ClientPacketIds.Login: + Login((C.Login) p); + break; + case (short)ClientPacketIds.NewCharacter: + NewCharacter((C.NewCharacter)p); + break; + case (short)ClientPacketIds.DeleteCharacter: + DeleteCharacter((C.DeleteCharacter)p); + break; + case (short)ClientPacketIds.StartGame: + StartGame((C.StartGame)p); + break; + case (short)ClientPacketIds.LogOut: + LogOut(); + break; + case (short)ClientPacketIds.Turn: + Turn((C.Turn) p); + break; + case (short)ClientPacketIds.Walk: + Walk((C.Walk) p); + break; + case (short)ClientPacketIds.Chat: + Chat((C.Chat) p); + break; + case (short)ClientPacketIds.MoveItem: + MoveItem((C.MoveItem) p); + break; + case (short)ClientPacketIds.StoreItem: + StoreItem((C.StoreItem) p); + break; + case (short)ClientPacketIds.DepositRefineItem: + DepositRefineItem((C.DepositRefineItem)p); + break; + case (short)ClientPacketIds.RetrieveRefineItem: + RetrieveRefineItem((C.RetrieveRefineItem)p); + break; + case (short)ClientPacketIds.RefineCancel: + RefineCancel((C.RefineCancel)p); + break; + case (short)ClientPacketIds.RefineItem: + RefineItem((C.RefineItem)p); + break; + case (short)ClientPacketIds.CheckRefine: + CheckRefine((C.CheckRefine)p); + break; + case (short)ClientPacketIds.ReplaceWedRing: + ReplaceWedRing((C.ReplaceWedRing)p); + break; + case (short)ClientPacketIds.DepositTradeItem: + DepositTradeItem((C.DepositTradeItem)p); + break; + case (short)ClientPacketIds.RetrieveTradeItem: + RetrieveTradeItem((C.RetrieveTradeItem)p); + break; + case (short)ClientPacketIds.TakeBackItem: + TakeBackItem((C.TakeBackItem) p); + break; + case (short)ClientPacketIds.MergeItem: + MergeItem((C.MergeItem) p); + break; + case (short)ClientPacketIds.EquipItem: + EquipItem((C.EquipItem) p); + break; + case (short)ClientPacketIds.RemoveItem: + RemoveItem((C.RemoveItem) p); + break; + case (short)ClientPacketIds.SplitItem: + SplitItem((C.SplitItem) p); + break; + case (short)ClientPacketIds.UseItem: + UseItem((C.UseItem) p); + break; + case (short)ClientPacketIds.DropItem: + DropItem((C.DropItem) p); + break; + case (short)ClientPacketIds.DropGold: + DropGold((C.DropGold) p); + break; + case (short)ClientPacketIds.PickUp: + PickUp(); + break; + case (short)ClientPacketIds.Observe: + Observe((C.Observe)p); + break; + case (short)ClientPacketIds.ChangeAMode: + ChangeAMode((C.ChangeAMode)p); + break; + case (short)ClientPacketIds.ChangePMode: + ChangePMode((C.ChangePMode)p); + break; + case (short)ClientPacketIds.ChangeTrade: + ChangeTrade((C.ChangeTrade)p); + break; + case (short)ClientPacketIds.Attack: + Attack((C.Attack)p); + break; + case (short)ClientPacketIds.RangeAttack: + RangeAttack((C.RangeAttack)p); + break; + case (short)ClientPacketIds.Harvest: + Harvest((C.Harvest)p); + break; + case (short)ClientPacketIds.CallNPC: + CallNPC((C.CallNPC)p); + break; + case (short)ClientPacketIds.BuyItem: + BuyItem((C.BuyItem)p); + break; + case (short)ClientPacketIds.SellItem: + SellItem((C.SellItem)p); + break; + case (short)ClientPacketIds.RepairItem: + RepairItem((C.RepairItem)p); + break; + case (short)ClientPacketIds.BuyItemBack: + BuyItemBack((C.BuyItemBack)p); + break; + case (short)ClientPacketIds.SRepairItem: + SRepairItem((C.SRepairItem)p); + break; + case (short)ClientPacketIds.MagicKey: + MagicKey((C.MagicKey)p); + break; + case (short)ClientPacketIds.Magic: + Magic((C.Magic)p); + break; + case (short)ClientPacketIds.SwitchGroup: + SwitchGroup((C.SwitchGroup)p); + return; + case (short)ClientPacketIds.AddMember: + AddMember((C.AddMember)p); + return; + case (short)ClientPacketIds.DellMember: + DelMember((C.DelMember)p); + return; + case (short)ClientPacketIds.GroupInvite: + GroupInvite((C.GroupInvite)p); + return; + case (short)ClientPacketIds.TownRevive: + TownRevive(); + return; + case (short)ClientPacketIds.SpellToggle: + SpellToggle((C.SpellToggle)p); + return; + case (short)ClientPacketIds.ConsignItem: + ConsignItem((C.ConsignItem)p); + return; + case (short)ClientPacketIds.MarketSearch: + MarketSearch((C.MarketSearch)p); + return; + case (short)ClientPacketIds.MarketRefresh: + MarketRefresh(); + return; + case (short)ClientPacketIds.MarketPage: + MarketPage((C.MarketPage) p); + return; + case (short)ClientPacketIds.MarketBuy: + MarketBuy((C.MarketBuy)p); + return; + case (short)ClientPacketIds.MarketGetBack: + MarketGetBack((C.MarketGetBack)p); + return; + case (short)ClientPacketIds.MarketSellNow: + MarketSellNow((C.MarketSellNow)p); + return; + case (short)ClientPacketIds.RequestUserName: + RequestUserName((C.RequestUserName)p); + return; + case (short)ClientPacketIds.RequestChatItem: + RequestChatItem((C.RequestChatItem)p); + return; + case (short)ClientPacketIds.EditGuildMember: + EditGuildMember((C.EditGuildMember)p); + return; + case (short)ClientPacketIds.EditGuildNotice: + EditGuildNotice((C.EditGuildNotice)p); + return; + case (short)ClientPacketIds.GuildInvite: + GuildInvite((C.GuildInvite)p); + return; + case (short)ClientPacketIds.RequestGuildInfo: + RequestGuildInfo((C.RequestGuildInfo)p); + return; + case (short)ClientPacketIds.GuildNameReturn: + GuildNameReturn((C.GuildNameReturn)p); + return; + case (short)ClientPacketIds.GuildStorageGoldChange: + GuildStorageGoldChange((C.GuildStorageGoldChange)p); + return; + case (short)ClientPacketIds.GuildStorageItemChange: + GuildStorageItemChange((C.GuildStorageItemChange)p); + return; + case (short)ClientPacketIds.GuildWarReturn: + GuildWarReturn((C.GuildWarReturn)p); + return; + case (short)ClientPacketIds.MarriageRequest: + MarriageRequest((C.MarriageRequest)p); + return; + case (short)ClientPacketIds.MarriageReply: + MarriageReply((C.MarriageReply)p); + return; + case (short)ClientPacketIds.ChangeMarriage: + ChangeMarriage((C.ChangeMarriage)p); + return; + case (short)ClientPacketIds.DivorceRequest: + DivorceRequest((C.DivorceRequest)p); + return; + case (short)ClientPacketIds.DivorceReply: + DivorceReply((C.DivorceReply)p); + return; + case (short)ClientPacketIds.TradeRequest: + TradeRequest((C.TradeRequest)p); + return; + case (short)ClientPacketIds.TradeGold: + TradeGold((C.TradeGold)p); + return; + case (short)ClientPacketIds.TradeReply: + TradeReply((C.TradeReply)p); + return; + case (short)ClientPacketIds.TradeConfirm: + TradeConfirm((C.TradeConfirm)p); + return; + case (short)ClientPacketIds.TradeCancel: + TradeCancel((C.TradeCancel)p); + return; + case (short)ClientPacketIds.AcceptQuest: + AcceptQuest((C.AcceptQuest)p); + break; + case (short)ClientPacketIds.FinishQuest: + FinishQuest((C.FinishQuest)p); + break; + case (short)ClientPacketIds.AbandonQuest: + AbandonQuest((C.AbandonQuest)p); + break; + case (short)ClientPacketIds.ShareQuest: + ShareQuest((C.ShareQuest)p); + break; + case (short)ClientPacketIds.CombineItem: + CombineItem((C.CombineItem)p); + break; + case (short)ClientPacketIds.SendMail: + SendMail((C.SendMail)p); + break; + case (short)ClientPacketIds.ReadMail: + ReadMail((C.ReadMail)p); + break; + case (short)ClientPacketIds.CollectParcel: + CollectParcel((C.CollectParcel)p); + break; + case (short)ClientPacketIds.DeleteMail: + DeleteMail((C.DeleteMail)p); + break; + case (short)ClientPacketIds.LockMail: + LockMail((C.LockMail)p); + break; + case (short)ClientPacketIds.MailLockedItem: + Enqueue(new S.MailLockedItem { UniqueID = ((C.MailLockedItem)p).UniqueID, Locked = ((C.MailLockedItem)p).Locked }); + break; + case (short)ClientPacketIds.MailCost: + MailCost((C.MailCost)p); + break; + case (short)ClientPacketIds.AddFriend: + AddFriend((C.AddFriend)p); + break; + case (short)ClientPacketIds.RemoveFriend: + RemoveFriend((C.RemoveFriend)p); + break; + case (short)ClientPacketIds.RefreshFriends: + { + if (Stage != GameStage.Game) return; + Player.GetFriends(); + break; + } + case (short)ClientPacketIds.AddMemo: + AddMemo((C.AddMemo)p); + break; + case (short)ClientPacketIds.GuildBuffUpdate: + GuildBuffUpdate((C.GuildBuffUpdate)p); + break; + case (short)ClientPacketIds.GameshopBuy: + GameshopBuy((C.GameshopBuy)p); + return; + case (short)ClientPacketIds.NPCConfirmInput: + NPCConfirmInput((C.NPCConfirmInput)p); + break; + case (short)ClientPacketIds.ReportIssue: + ReportIssue((C.ReportIssue)p); + break; + case (short)ClientPacketIds.GetRanking: + GetRanking((C.GetRanking)p); + break; + default: + MessageQueue.Enqueue(string.Format("Invalid packet received. Index : {0}", p.Index)); + break; + } + } + + public void SoftDisconnect(byte reason) + { + Stage = GameStage.Disconnected; + TimeDisconnected = Envir.Time; + + lock (Envir.AccountLock) + { + if (Player != null) + Player.StopGame(reason); + + if (Account != null && Account.Connection == this) + Account.Connection = null; + } + + Account = null; + } + public void Disconnect(byte reason) + { + if (!Connected) return; + + Connected = false; + Stage = GameStage.Disconnected; + TimeDisconnected = Envir.Time; + + lock (Envir.Connections) + Envir.Connections.Remove(this); + + lock (Envir.AccountLock) + { + if (Player != null) + Player.StopGame(reason); + + if (Account != null && Account.Connection == this) + Account.Connection = null; + } + + if (Observing != null) + Observing.Observers.Remove(this); + + Account = null; + + _sendList = null; + _receiveList = null; + _retryList = null; + _rawData = null; + + if (_client != null) _client.Client.Dispose(); + _client = null; + } + public void SendDisconnect(byte reason) + { + if (!Connected) + { + Disconnecting = true; + SoftDisconnect(reason); + return; + } + + Disconnecting = true; + + List data = new List(); + + data.AddRange(new S.Disconnect { Reason = reason }.GetPacketBytes()); + + BeginSend(data); + SoftDisconnect(reason); + } + public void CleanObservers() + { + foreach (MirConnection c in Observers) + { + //c.Stage = GameStage.Login; + //c.Enqueue(new S.ReturnToLogin()); + } + } + + private void ClientVersion(C.ClientVersion p) + { + if (Stage != GameStage.None) return; + + if (Settings.CheckVersion) + { + bool match = false; + + foreach (var hash in Settings.VersionHashes) + { + if (Functions.CompareBytes(hash, p.VersionHash)) + { + match = true; + break; + } + } + + if (!match) + { + Disconnecting = true; + + List data = new List(); + + data.AddRange(new S.ClientVersion { Result = 0 }.GetPacketBytes()); + + BeginSend(data); + SoftDisconnect(10); + MessageQueue.Enqueue(SessionID + ", Disconnnected - Wrong Client Version."); + return; + } + } + + MessageQueue.Enqueue(SessionID + ", " + IPAddress + ", Client version matched."); + Enqueue(new S.ClientVersion { Result = 1 }); + + Stage = GameStage.Login; + } + private void ClientKeepAlive(C.KeepAlive p) + { + Enqueue(new S.KeepAlive + { + Time = p.Time + }); + } + private void NewAccount(C.NewAccount p) + { + if (Stage != GameStage.Login) return; + + MessageQueue.Enqueue(SessionID + ", " + IPAddress + ", New account being created."); + Envir.NewAccount(p, this); + } + private void ChangePassword(C.ChangePassword p) + { + if (Stage != GameStage.Login) return; + + MessageQueue.Enqueue(SessionID + ", " + IPAddress + ", Password being changed."); + Envir.ChangePassword(p, this); + } + private void Login(C.Login p) + { + if (Stage != GameStage.Login) return; + + MessageQueue.Enqueue(SessionID + ", " + IPAddress + ", User logging in."); + Envir.Login(p, this); + } + + private void NewCharacter(C.NewCharacter p) + { + if (Stage != GameStage.Select) return; + + Envir.NewCharacter(p, this, Account.AdminAccount); + } + private void DeleteCharacter(C.DeleteCharacter p) + { + if (Stage != GameStage.Select) return; + + if (!Settings.AllowDeleteCharacter) + { + Enqueue(new S.DeleteCharacter { Result = 0 }); + return; + } + + CharacterInfo temp = null; + + + for (int i = 0; i < Account.Characters.Count; i++) + { + if (Account.Characters[i].Index != p.CharacterIndex) continue; + + temp = Account.Characters[i]; + break; + } + + if (temp == null) + { + Enqueue(new S.DeleteCharacter { Result = 1 }); + return; + } + + temp.Deleted = true; + temp.DeleteDate = Envir.Now; + Envir.RemoveRank(temp); + Enqueue(new S.DeleteCharacterSuccess { CharacterIndex = temp.Index }); + } + private void StartGame(C.StartGame p) + { + if (Stage != GameStage.Select) return; + + if (!Settings.AllowStartGame && (Account == null || (Account != null && !Account.AdminAccount))) + { + Enqueue(new S.StartGame { Result = 0 }); + return; + } + + if (Account == null) + { + Enqueue(new S.StartGame { Result = 1 }); + return; + } + + + CharacterInfo info = null; + + for (int i = 0; i < Account.Characters.Count; i++) + { + if (Account.Characters[i].Index != p.CharacterIndex) continue; + + info = Account.Characters[i]; + break; + } + if (info == null) + { + Enqueue(new S.StartGame { Result = 2 }); + return; + } + + if (info.Banned) + { + if (info.ExpiryDate > Envir.Now) + { + Enqueue(new S.StartGameBanned { Reason = info.BanReason, ExpiryDate = info.ExpiryDate }); + return; + } + info.Banned = false; + } + info.BanReason = string.Empty; + info.ExpiryDate = DateTime.MinValue; + + long delay = (long)(Envir.Now - info.LastLogoutDate).TotalMilliseconds; + + + //if (delay < Settings.RelogDelay) + //{ + // Enqueue(new S.StartGameDelay { Milliseconds = Settings.RelogDelay - delay }); + // return; + //} + + Player = new PlayerObject(info, this); + Player.StartGame(); + } + + public void LogOut() + { + if (Stage != GameStage.Game) return; + + if (Envir.Time < Player.LogTime) + { + Enqueue(new S.LogOutFailed()); + return; + } + + Player.StopGame(23); + + Stage = GameStage.Select; + Player = null; + + Enqueue(new S.LogOutSuccess { Characters = Account.GetSelectInfo() }); + } + + private void Turn(C.Turn p) + { + if (Stage != GameStage.Game) return; + + if (Player.ActionTime > Envir.Time) + _retryList.Enqueue(p); + else + Player.Turn(p.Direction); + } + private void Walk(C.Walk p) + { + if (Stage != GameStage.Game) return; + + if (Player.ActionTime > Envir.Time) + _retryList.Enqueue(p); + else + Player.Walk(p.Direction); + } + + private void Chat(C.Chat p) + { + if (p.Message.Length > Globals.MaxChatLength) + { + SendDisconnect(2); + return; + } + + if (Stage != GameStage.Game) return; + + Player.Chat(p.Message, p.LinkedItems); + } + + private void MoveItem(C.MoveItem p) + { + if (Stage != GameStage.Game) return; + + Player.MoveItem(p.Grid, p.From, p.To); + } + private void StoreItem(C.StoreItem p) + { + if (Stage != GameStage.Game) return; + + Player.StoreItem(p.From, p.To); + } + + private void DepositRefineItem(C.DepositRefineItem p) + { + if (Stage != GameStage.Game) return; + + Player.DepositRefineItem(p.From, p.To); + } + + private void RetrieveRefineItem(C.RetrieveRefineItem p) + { + if (Stage != GameStage.Game) return; + + Player.RetrieveRefineItem(p.From, p.To); + } + + private void RefineCancel(C.RefineCancel p) + { + if (Stage != GameStage.Game) return; + + Player.RefineCancel(); + } + + private void RefineItem(C.RefineItem p) + { + if (Stage != GameStage.Game) return; + + Player.RefineItem(p.UniqueID); + } + + private void CheckRefine(C.CheckRefine p) + { + if (Stage != GameStage.Game) return; + + Player.CheckRefine(p.UniqueID); + } + + private void ReplaceWedRing(C.ReplaceWedRing p) + { + if (Stage != GameStage.Game) return; + + Player.ReplaceWeddingRing(p.UniqueID); + } + + private void DepositTradeItem(C.DepositTradeItem p) + { + if (Stage != GameStage.Game) return; + + Player.DepositTradeItem(p.From, p.To); + } + + private void RetrieveTradeItem(C.RetrieveTradeItem p) + { + if (Stage != GameStage.Game) return; + + Player.RetrieveTradeItem(p.From, p.To); + } + private void TakeBackItem(C.TakeBackItem p) + { + if (Stage != GameStage.Game) return; + + Player.TakeBackItem(p.From, p.To); + } + private void MergeItem(C.MergeItem p) + { + if (Stage != GameStage.Game) return; + + Player.MergeItem(p.GridFrom, p.GridTo, p.IDFrom, p.IDTo); + } + private void EquipItem(C.EquipItem p) + { + if (Stage != GameStage.Game) return; + + Player.EquipItem(p.Grid, p.UniqueID, p.To); + } + private void RemoveItem(C.RemoveItem p) + { + if (Stage != GameStage.Game) return; + + Player.RemoveItem(p.Grid, p.UniqueID, p.To); + } + private void SplitItem(C.SplitItem p) + { + if (Stage != GameStage.Game) return; + + Player.SplitItem(p.Grid, p.UniqueID, p.Count); + } + private void UseItem(C.UseItem p) + { + if (Stage != GameStage.Game) return; + + switch (p.Grid) + { + case MirGridType.Inventory: + Player.UseItem(p.UniqueID); + break; + } + } + private void DropItem(C.DropItem p) + { + if (Stage != GameStage.Game) return; + + Player.DropItem(p.UniqueID, p.Count); + } + private void DropGold(C.DropGold p) + { + if (Stage != GameStage.Game) return; + + Player.DropGold(p.Amount); + } + private void PickUp() + { + if (Stage != GameStage.Game) return; + + Player.PickUp(); + } + private void Observe(C.Observe p) + { + if (Stage != GameStage.Game && Stage != GameStage.Observer) return; + + Envir.Observe(this, p.Name); + } + private void ChangeAMode(C.ChangeAMode p) + { + if (Stage != GameStage.Game) return; + + Player.AMode = p.Mode; + + Enqueue(new S.ChangeAMode {Mode = Player.AMode}); + } + private void ChangePMode(C.ChangePMode p) + { + if (Stage != GameStage.Game) return; + + Player.PMode = p.Mode; + + Enqueue(new S.ChangePMode { Mode = Player.PMode }); + } + private void ChangeTrade(C.ChangeTrade p) + { + if (Stage != GameStage.Game) return; + + Player.AllowTrade = p.AllowTrade; + } + private void Attack(C.Attack p) + { + if (Stage != GameStage.Game) return; + + if (!Player.Dead && (Player.ActionTime > Envir.Time || Player.AttackTime > Envir.Time)) + _retryList.Enqueue(p); + else + Player.Attack(p.Direction, p.Spell); + } + private void RangeAttack(C.RangeAttack p) + { + if (Stage != GameStage.Game) return; + + if (!Player.Dead && (Player.ActionTime > Envir.Time || Player.AttackTime > Envir.Time)) + _retryList.Enqueue(p); + else + Player.RangeAttack(p.Direction, p.TargetLocation, p.TargetID); + } + private void Harvest(C.Harvest p) + { + if (Stage != GameStage.Game) return; + + if (!Player.Dead && Player.ActionTime > Envir.Time) + _retryList.Enqueue(p); + else + Player.Harvest(p.Direction); + } + + private void CallNPC(C.CallNPC p) + { + if (Stage != GameStage.Game) return; + + if (p.Key.Length > 30) //No NPC Key should be that long. + { + SendDisconnect(2); + return; + } + + if (p.ObjectID == Envir.DefaultNPC.LoadedObjectID && Player.NPCObjectID == Envir.DefaultNPC.LoadedObjectID) + { + Player.CallDefaultNPC(p.Key); + return; + } + + if (p.ObjectID == uint.MaxValue) + { + Player.CallDefaultNPC(DefaultNPCType.Client, null); + return; + } + + Player.CallNPC(p.ObjectID, p.Key); + } + + private void BuyItem(C.BuyItem p) + { + if (Stage != GameStage.Game) return; + + Player.BuyItem(p.ItemIndex, p.Count, p.Type); + } + private void SellItem(C.SellItem p) + { + if (Stage != GameStage.Game) return; + + Player.SellItem(p.UniqueID, p.Count); + } + private void RepairItem(C.RepairItem p) + { + if (Stage != GameStage.Game) return; + + Player.RepairItem(p.UniqueID); + } + private void BuyItemBack(C.BuyItemBack p) + { + if (Stage != GameStage.Game) return; + + // Player.BuyItemBack(p.UniqueID, p.Count); + } + private void SRepairItem(C.SRepairItem p) + { + if (Stage != GameStage.Game) return; + + Player.RepairItem(p.UniqueID, true); + } + private void MagicKey(C.MagicKey p) + { + if (Stage != GameStage.Game) return; + + HumanObject actor = Player; + + for (int i = 0; i < actor.Info.Magics.Count; i++) + { + UserMagic magic = actor.Info.Magics[i]; + if (magic.Spell != p.Spell) + { + if (magic.Key == p.Key) + magic.Key = 0; + continue; + } + + magic.Key = p.Key; + } + } + private void Magic(C.Magic p) + { + if (Stage != GameStage.Game) return; + + HumanObject actor = Player; + + if (actor.Dead) return; + + if (!actor.Dead && (actor.ActionTime > Envir.Time || actor.SpellTime > Envir.Time)) + _retryList.Enqueue(p); + else + actor.BeginMagic(p.Spell, p.Direction, p.TargetID, p.Location, p.SpellTargetLock); + } + + private void SwitchGroup(C.SwitchGroup p) + { + if (Stage != GameStage.Game) return; + + Player.SwitchGroup(p.AllowGroup); + } + private void AddMember(C.AddMember p) + { + if (Stage != GameStage.Game) return; + + Player.AddMember(p.Name); + } + private void DelMember(C.DelMember p) + { + if (Stage != GameStage.Game) return; + + Player.DelMember(p.Name); + } + private void GroupInvite(C.GroupInvite p) + { + if (Stage != GameStage.Game) return; + + Player.GroupInvite(p.AcceptInvite); + } + + private void TownRevive() + { + if (Stage != GameStage.Game) return; + + Player.TownRevive(); + } + + private void SpellToggle(C.SpellToggle p) + { + if (Stage != GameStage.Game) return; + + if (p.canUse > SpellToggleState.None) + { + Player.SpellToggle(p.Spell, p.canUse); + return; + } + } + private void ConsignItem(C.ConsignItem p) + { + if (Stage != GameStage.Game) return; + + Player.ConsignItem(p.UniqueID, p.Price, p.Type); + } + private void MarketSearch(C.MarketSearch p) + { + if (Stage != GameStage.Game) return; + + Player.UserMatch = p.Usermode; + Player.MinShapes = p.MinShape; + Player.MaxShapes = p.MaxShape; + Player.MarketPanelType = p.MarketType; + + Player.MarketSearch(p.Match, p.Type); + } + private void MarketRefresh() + { + if (Stage != GameStage.Game) return; + + Player.MarketSearch(string.Empty, Player.MatchType); + } + + private void MarketPage(C.MarketPage p) + { + if (Stage != GameStage.Game) return; + + Player.MarketPage(p.Page); + } + private void MarketBuy(C.MarketBuy p) + { + if (Stage != GameStage.Game) return; + + Player.MarketBuy(p.AuctionID, p.BidPrice); + } + private void MarketSellNow(C.MarketSellNow p) + { + if (Stage != GameStage.Game) return; + + Player.MarketSellNow(p.AuctionID); + } + + private void MarketGetBack(C.MarketGetBack p) + { + if (Stage != GameStage.Game) return; + + Player.MarketGetBack(p.AuctionID); + } + private void RequestUserName(C.RequestUserName p) + { + if (Stage != GameStage.Game) return; + + Player.RequestUserName(p.UserID); + } + private void RequestChatItem(C.RequestChatItem p) + { + if (Stage != GameStage.Game) return; + + Player.RequestChatItem(p.ChatItemID); + } + private void EditGuildMember(C.EditGuildMember p) + { + if (Stage != GameStage.Game) return; + Player.EditGuildMember(p.Name,p.RankName,p.RankIndex,p.ChangeType); + } + private void EditGuildNotice(C.EditGuildNotice p) + { + if (Stage != GameStage.Game) return; + Player.EditGuildNotice(p.notice); + } + private void GuildInvite(C.GuildInvite p) + { + if (Stage != GameStage.Game) return; + + Player.GuildInvite(p.AcceptInvite); + } + private void RequestGuildInfo(C.RequestGuildInfo p) + { + if (Stage != GameStage.Game) return; + Player.RequestGuildInfo(p.Type); + } + private void GuildNameReturn(C.GuildNameReturn p) + { + if (Stage != GameStage.Game) return; + Player.GuildNameReturn(p.Name); + } + private void GuildStorageGoldChange(C.GuildStorageGoldChange p) + { + if (Stage != GameStage.Game) return; + Player.GuildStorageGoldChange(p.Type, p.Amount); + } + private void GuildStorageItemChange(C.GuildStorageItemChange p) + { + if (Stage != GameStage.Game) return; + Player.GuildStorageItemChange(p.Type, p.From, p.To); + } + private void GuildWarReturn(C.GuildWarReturn p) + { + if (Stage != GameStage.Game) return; + Player.GuildWarReturn(p.Name); + } + + + private void MarriageRequest(C.MarriageRequest p) + { + if (Stage != GameStage.Game) return; + + Player.MarriageRequest(); + } + + private void MarriageReply(C.MarriageReply p) + { + if (Stage != GameStage.Game) return; + + Player.MarriageReply(p.AcceptInvite); + } + + private void ChangeMarriage(C.ChangeMarriage p) + { + if (Stage != GameStage.Game) return; + + if (Player.Info.Married == 0) + { + Player.AllowMarriage = !Player.AllowMarriage; + if (Player.AllowMarriage) + Player.ReceiveChat("You're now allowing marriage requests.", ChatType.Hint); + else + Player.ReceiveChat("You're now blocking marriage requests.", ChatType.Hint); + } + else + { + Player.AllowLoverRecall = !Player.AllowLoverRecall; + if (Player.AllowLoverRecall) + Player.ReceiveChat("You're now allowing recall from lover.", ChatType.Hint); + else + Player.ReceiveChat("You're now blocking recall from lover.", ChatType.Hint); + } + } + + private void DivorceRequest(C.DivorceRequest p) + { + if (Stage != GameStage.Game) return; + + Player.DivorceRequest(); + } + + private void DivorceReply(C.DivorceReply p) + { + if (Stage != GameStage.Game) return; + + Player.DivorceReply(p.AcceptInvite); + } + + private void TradeRequest(C.TradeRequest p) + { + if (Stage != GameStage.Game) return; + + Player.TradeRequest(); + } + private void TradeGold(C.TradeGold p) + { + if (Stage != GameStage.Game) return; + + Player.TradeGold(p.Amount); + } + private void TradeReply(C.TradeReply p) + { + if (Stage != GameStage.Game) return; + + Player.TradeReply(p.AcceptInvite); + } + private void TradeConfirm(C.TradeConfirm p) + { + if (Stage != GameStage.Game) return; + + Player.TradeConfirm(p.Locked); + } + private void TradeCancel(C.TradeCancel p) + { + if (Stage != GameStage.Game) return; + + Player.TradeCancel(); + } + + private void AcceptQuest(C.AcceptQuest p) + { + if (Stage != GameStage.Game) return; + + Player.AcceptQuest(p.QuestIndex); //p.NPCIndex, + } + + private void FinishQuest(C.FinishQuest p) + { + if (Stage != GameStage.Game) return; + + Player.FinishQuest(p.QuestIndex, p.SelectedItemIndex); + } + + private void AbandonQuest(C.AbandonQuest p) + { + if (Stage != GameStage.Game) return; + + Player.AbandonQuest(p.QuestIndex); + } + + private void ShareQuest(C.ShareQuest p) + { + if (Stage != GameStage.Game) return; + + Player.ShareQuest(p.QuestIndex); + } + + private void CombineItem(C.CombineItem p) + { + if (Stage != GameStage.Game) return; + + Player.CombineItem(p.Grid, p.IDFrom, p.IDTo); + } + + public void SendMail(C.SendMail p) + { + if (Stage != GameStage.Game) return; + + if (p.Gold > 0 || p.ItemsIdx.Length > 0) + { + Player.SendMail(p.Name, p.Message, p.Gold, p.ItemsIdx, p.Stamped); + } + else + { + Player.SendMail(p.Name, p.Message); + } + } + + public void ReadMail(C.ReadMail p) + { + if (Stage != GameStage.Game) return; + + Player.ReadMail(p.MailID); + } + + public void CollectParcel(C.CollectParcel p) + { + if (Stage != GameStage.Game) return; + + Player.CollectMail(p.MailID); + } + + public void DeleteMail(C.DeleteMail p) + { + if (Stage != GameStage.Game) return; + + Player.DeleteMail(p.MailID); + } + + public void LockMail(C.LockMail p) + { + if (Stage != GameStage.Game) return; + + Player.LockMail(p.MailID, p.Lock); + } + + public void MailCost(C.MailCost p) + { + if (Stage != GameStage.Game) return; + + uint cost = Player.GetMailCost(p.ItemsIdx, p.Gold, p.Stamped); + + Enqueue(new S.MailCost { Cost = cost }); + } + + private void AddFriend(C.AddFriend p) + { + if (Stage != GameStage.Game) return; + + Player.AddFriend(p.Name, p.Blocked); + } + + private void RemoveFriend(C.RemoveFriend p) + { + if (Stage != GameStage.Game) return; + + Player.RemoveFriend(p.CharacterIndex); + } + + private void AddMemo(C.AddMemo p) + { + if (Stage != GameStage.Game) return; + + Player.AddMemo(p.CharacterIndex, p.Memo); + } + private void GuildBuffUpdate(C.GuildBuffUpdate p) + { + if (Stage != GameStage.Game) return; + Player.GuildBuffUpdate(p.Action,p.Id); + } + private void GameshopBuy(C.GameshopBuy p) + { + if (Stage != GameStage.Game) return; + Player.GameshopBuy(p.GIndex, p.Quantity); + } + + private void NPCConfirmInput(C.NPCConfirmInput p) + { + if (Stage != GameStage.Game) return; + + Player.NPCData["NPCInputStr"] = p.Value; + + if (p.NPCID == Envir.DefaultNPC.LoadedObjectID && Player.NPCObjectID == Envir.DefaultNPC.LoadedObjectID) + { + Player.CallDefaultNPC(p.PageName); + return; + } + + Player.CallNPC(Player.NPCObjectID, p.PageName); + } + + public List Image = new List(); + + private void ReportIssue(C.ReportIssue p) + { + if (Stage != GameStage.Game) return; + + return; + + // Image.Add(p.Image); + + // if (p.ImageChunk >= p.ImageSize) + // { + // System.Drawing.Image image = Functions.ByteArrayToImage(Functions.CombineArray(Image)); + // image.Save("Reported-" + Player.Name + "-" + DateTime.Now.ToString("yyMMddHHmmss") + ".jpg"); + // Image.Clear(); + // } + } + private void GetRanking(C.GetRanking p) + { + if (Stage != GameStage.Game && Stage != GameStage.Observer) return; + Envir.GetRanking(this, p.RankType, p.RankIndex, p.OnlineOnly); + } + + public void CheckItemInfo(ItemInfo info, bool dontLoop = false) + { + if ((dontLoop == false) && (info.ClassBased | info.LevelBased)) //send all potential data so client can display it + { + for (int i = 0; i < Envir.ItemInfoList.Count; i++) + { + if ((Envir.ItemInfoList[i] != info) && (Envir.ItemInfoList[i].Name.StartsWith(info.Name))) + CheckItemInfo(Envir.ItemInfoList[i], true); + } + } + + if (SentItemInfo.Contains(info)) return; + Enqueue(new S.NewItemInfo { Info = info }); + SentItemInfo.Add(info); + } + public void CheckItem(UserItem item) + { + CheckItemInfo(item.Info); + } + } +} diff --git a/Server/MirNetwork/MirStatusConnection.cs b/Server/MirNetwork/MirStatusConnection.cs new file mode 100644 index 0000000..299cfb0 --- /dev/null +++ b/Server/MirNetwork/MirStatusConnection.cs @@ -0,0 +1,137 @@ +using System.Reflection; +using System.Text; +using System.Net.Sockets; +using Server.MirEnvir; + +namespace Server.MirNetwork +{ + public class MirStatusConnection + { + protected static Envir Envir + { + get { return Envir.Main; } + } + protected static MessageQueue MessageQueue + { + get { return MessageQueue.Instance; } + } + + public readonly string IPAddress; + private TcpClient _client; + + private long NextSendTime; + + private bool _disconnecting; + public bool Connected; + public bool Disconnecting + { + get { return _disconnecting; } + set + { + if (_disconnecting == value) return; + _disconnecting = value; + TimeOutTime = Envir.Time + 500; + } + } + public readonly long TimeConnected; + public long TimeOutTime; + + + public MirStatusConnection(TcpClient client) + { + try + { + IPAddress = client.Client.RemoteEndPoint.ToString().Split(':')[0]; + + _client = client; + _client.NoDelay = true; + + TimeConnected = Envir.Time; + TimeOutTime = TimeConnected + Settings.TimeOut; + Connected = true; + } + catch (Exception ex) + { + MessageQueue.Enqueue(ex); + } + } + + private void BeginSend(byte[] data) + { + if (!Connected || data.Length == 0) return; + + try + { + _client.Client.BeginSend(data, 0, data.Length, SocketFlags.None, SendData, null); + } + catch + { + Disconnecting = true; + } + } + private void SendData(IAsyncResult result) + { + try + { + _client.Client.EndSend(result); + } + catch + { } + } + + public void Process() + { + try + { + if (_client == null || !_client.Connected) + { + Disconnect(); + return; + } + + if (Envir.Time > TimeOutTime || Disconnecting) + { + Disconnect(); + return; + } + + + if (Envir.Time > NextSendTime) + { + NextSendTime = Envir.Time + 10000; + string output = string.Format("c;/NoName/{0}/Carbon/{1}//;", Envir.PlayerCount, + Assembly.GetCallingAssembly().GetName().Version); + + BeginSend(Encoding.ASCII.GetBytes(output)); + } + } + catch (Exception ex) + { + MessageQueue.Enqueue(ex); + } + } + public void Disconnect() + { + try + { + if (!Connected) return; + + Connected = false; + + lock (Envir.StatusConnections) + Envir.StatusConnections.Remove(this); + + if (_client != null) _client.Client.Dispose(); + _client = null; + } + catch (Exception ex) + { + MessageQueue.Enqueue(ex); + } + } + public void SendDisconnect() + { + Disconnecting = true; + } + } +} diff --git a/Server/MirObjects/DelayedAction.cs b/Server/MirObjects/DelayedAction.cs new file mode 100644 index 0000000..19e28d3 --- /dev/null +++ b/Server/MirObjects/DelayedAction.cs @@ -0,0 +1,46 @@ +using Server.MirEnvir; + +namespace Server.MirObjects +{ + public enum DelayedType + { + Magic, + /// + /// Param0 MapObject (Target) | Param1 Damage | Param2 Defence | Param3 damageWeapon | Param4 UserMagic | Param5 FinalHit + /// + Damage, + RangeDamage, + Spawn, + Die, + Recall, + MapMovement, + NPC, + Poison, + DamageIndicator, + Quest, + SpellEffect, + } + + public class DelayedAction + { + protected static Envir Envir + { + get { return Envir.Main; } + } + + public DelayedType Type; + public long Time; + public long StartTime; + public object[] Params; + + public bool FlaggedToRemove; + + public DelayedAction(DelayedType type, long time, params object[] p) + { + StartTime = Envir.Time; + Type = type; + Time = time; + Params = p; + } + } +} diff --git a/Server/MirObjects/GuildObject.cs b/Server/MirObjects/GuildObject.cs new file mode 100644 index 0000000..b8f2249 --- /dev/null +++ b/Server/MirObjects/GuildObject.cs @@ -0,0 +1,889 @@ +using Server.MirEnvir; +using Server.MirDatabase; + +namespace Server.MirObjects +{ + public sealed class GuildObject + { + private static Envir Envir + { + get { return Envir.Main; } + } + + public GuildInfo Info; + + public int Guildindex + { + get { return Info.GuildIndex; } + set { Info.GuildIndex = value; } + } + + public string Name + { + get { return Info.Name; } + set { Info.Name = value; } + } + + public bool NeedSave + { + get { return Info.NeedSave; } + set { Info.NeedSave = value; } + } + + public List Ranks + { + get { return Info.Ranks; } + set { Info.Ranks = value; } + } + + public List BuffList + { + get { return Info.BuffList; } + set { Info.BuffList = value; } + } + + public GuildStorageItem[] StoredItems + { + get { return Info.StoredItems; } + set { Info.StoredItems = value; } + } + + public uint Gold + { + get { return Info.Gold; } + set { Info.Gold = value; } + } + + public long NextExpUpdate = 0; + public List WarringGuilds = new List(); + public List AllyGuilds = new List(); + public int AllyCount; + + public GuildObject(GuildInfo info) + { + Info = info; + + Envir.Guilds.Add(this); + } + + public void SendMessage(string message, ChatType Type = ChatType.Guild) + { + for (int i = 0; i < Ranks.Count; i++) + { + for (int j = 0; j < Ranks[i].Members.Count; j++) + { + PlayerObject player = (PlayerObject)Ranks[i].Members[j].Player; + if (player != null) + { + player.ReceiveChat(message, Type); + } + } + } + } + + public void SendOutputMessage(string message, OutputMessageType Type = OutputMessageType.Guild) + { + for (int i = 0; i < Ranks.Count; i++) + { + for (int j = 0; j < Ranks[i].Members.Count; j++) + { + PlayerObject player = (PlayerObject)Ranks[i].Members[j].Player; + if (player != null) + { + player.ReceiveOutputMessage(message, Type); + } + } + } + } + + public List GetOnlinePlayers() + { + List players = new List(); + + for (int i = 0; i < Ranks.Count; i++) + { + for (int j = 0; j < Ranks[i].Members.Count; j++) + { + PlayerObject player = (PlayerObject)Ranks[i].Members[j].Player; + if (player != null) + { + players.Add(player); + } + } + } + + return players; + } + + public void PlayerLogged(PlayerObject member, bool online, bool New = false) + { + for (int i = 0; i < Ranks.Count; i++) + { + for (int j = 0; j < Ranks[i].Members.Count; j++) + { + if (Ranks[i].Members[j].Id == member.Info.Index) + { + if (online) + { + Ranks[i].Members[j].Player = member; + Ranks[i].Members[j].Online = true; + } + else + { + Ranks[i].Members[j].LastLogin = Envir.Now; + Ranks[i].Members[j].Player = null; + Ranks[i].Members[j].Online = false; + NeedSave = true; + } + } + } + } + + SendServerPacket(new ServerPackets.GuildMemberChange() {Name = member.Name, Status = (byte)(New? 2: online? 1: 0)}); + + if (online && !New) + { + SendGuildStatus(member); + } + } + + public void SendGuildStatus(PlayerObject member) + { + string gName = Name; + + member.Enqueue(new ServerPackets.GuildStatus() + { + GuildName = gName, + GuildRankName = member.MyGuildRank != null? member.MyGuildRank.Name: "", + Experience = Info.Experience, + MaxExperience = Info.MaxExperience, + MemberCount = Info.Membercount, + MaxMembers = Info.MemberCap, + Gold = Info.Gold, + Level = Info.Level, + Voting = Info.Voting, + SparePoints = Info.SparePoints, + ItemCount = (byte)Info.StoredItems.Length, + BuffCount = (byte)0,//(byte)BuffList.Count, + MyOptions = member.MyGuildRank != null? member.MyGuildRank.Options: (GuildRankOptions)0, + MyRankId = member.MyGuildRank != null? member.MyGuildRank.Index: 256 + }); + } + + public void NewMember(PlayerObject newMember) + { + if (Ranks.Count < 2) + { + Ranks.Add(new GuildRank() { Name = "Members", Index = 1 }); + } + + GuildRank lowestRank = Ranks[Ranks.Count - 1]; + GuildMember member = new GuildMember() { Name = newMember.Info.Name, Player = newMember, Id = newMember.Info.Index, LastLogin = Envir.Now, Online = true }; + lowestRank.Members.Add(member); + + PlayerLogged(newMember, true, true); + Info.Membercount++; + NeedSave = true; + } + + public bool ChangeRank(PlayerObject self, string memberName, byte rankIndex, string rankName = "Members") + { + if ((self.MyGuild != this) || (self.MyGuildRank == null)) return false; + if (rankIndex >= Ranks.Count) return false; + GuildMember Member = null; + GuildRank MemberRank = null; + for (int i = 0; i < Ranks.Count; i++) + for (int j = 0; j < Ranks[i].Members.Count; j++) + if (Ranks[i].Members[j].Name == memberName) + { + Member = Ranks[i].Members[j]; + MemberRank = Ranks[i]; + goto Found; + } + + Found: + if (Member == null) return false; + + MirDatabase.CharacterInfo Character = Envir.GetCharacterInfo(memberName); + if (Character == null) return false; + if ((rankIndex == 0) && (Character.Level < Settings.Guild_RequiredLevel)) + { + self.ReceiveChat(String.Format("A guild leader needs to be at least level {0}", Settings.Guild_RequiredLevel), ChatType.System); + return false; + } + + if ((MemberRank.Index >= self.MyGuildRank.Index) && (self.MyGuildRank.Index != 0))return false; + if (MemberRank.Index == 0) + { + if (MemberRank.Members.Count <= 2) + { + self.ReceiveChat("A guild needs at least 2 leaders.", ChatType.System); + return false; + } + for (int i = 0; i < MemberRank.Members.Count; i++) + { + if ((MemberRank.Members[i].Player != null) && (MemberRank.Members[i] != Member)) + goto AllOk; + } + self.ReceiveChat("You need at least 1 leader online.", ChatType.System); + return false; + } + + AllOk: + Ranks[rankIndex].Members.Add(Member); + MemberRank.Members.Remove(Member); + + MemberRank = Ranks[rankIndex]; + + List NewRankList = new List + { + Ranks[rankIndex] + }; + NeedSave = true; + PlayerObject player = (PlayerObject)Member.Player; + if (player != null) + { + player.MyGuildRank = Ranks[rankIndex]; + player.Enqueue(new ServerPackets.GuildMemberChange() { Name = self.Info.Name, Status = (byte)8, Ranks = NewRankList }); + player.BroadcastInfo(); + } + + for (int i = 0; i < Ranks.Count; i++) + for (int j = 0; j < Ranks[i].Members.Count; j++) + if ((Ranks[i].Members[j].Player != null) && (Ranks[i].Members[j].Player != Member.Player)) + { + player = (PlayerObject)Ranks[i].Members[j].Player; + player.Enqueue(new ServerPackets.GuildMemberChange() { Name = Member.Name, Status = (byte)5, RankIndex = (byte)MemberRank.Index }); + player.GuildMembersChanged = true; + } + return true; + } + + public bool NewRank(PlayerObject Self) + { + if (Ranks.Count >= byte.MaxValue) + { + Self.ReceiveChat("You cannot have anymore ranks.", ChatType.System); + return false; + } + int NewIndex = Ranks.Count > 1? Ranks.Count -1: 1; + GuildRank NewRank = new GuildRank(){Index = NewIndex, Name = String.Format("Rank-{0}",NewIndex), Options = (GuildRankOptions)0}; + Ranks.Insert(NewIndex, NewRank); + Ranks[Ranks.Count - 1].Index = Ranks.Count - 1; + List NewRankList = new List + { + NewRank + }; + SendServerPacket(new ServerPackets.GuildMemberChange() { Name = Self.Name, Status = (byte)6, Ranks = NewRankList}); + NeedSave = true; + return true; + } + + public bool ChangeRankOption(PlayerObject Self, byte RankIndex, int Option, string Enabled) + { + if ((RankIndex >= Ranks.Count) || (Option > 7)) + { + Self.ReceiveChat("Rank not found!", ChatType.System); + return false; + } + if (Self.MyGuildRank.Index >= RankIndex) + { + Self.ReceiveChat("You cannot change the options of your own rank!", ChatType.System); + return false; + } + if ((Enabled != "true") && (Enabled != "false")) + { + return false; + } + Ranks[RankIndex].Options = Enabled == "true" ? Ranks[RankIndex].Options |= (GuildRankOptions)(1 << Option) : Ranks[RankIndex].Options ^= (GuildRankOptions)(1 << Option); + + List NewRankList = new List + { + Ranks[RankIndex] + }; + SendServerPacket(new ServerPackets.GuildMemberChange() { Name = Self.Name, Status = (byte)7, Ranks = NewRankList }); + NeedSave = true; + return true; + } + public bool ChangeRankName(PlayerObject Self, string RankName, byte RankIndex) + { + int SelfRankIndex = -1; + for (int i = 0; i < Ranks.Count; i++) + { + for (int j = 0; j < Ranks[i].Members.Count; j++) + { + if (Ranks[i].Members[j].Player == Self) + { + SelfRankIndex = i; + break; + } + } + } + + if (SelfRankIndex > RankIndex) + { + Self.ReceiveChat("Your rank is not adequate.", ChatType.System); + return false; + } + + if (RankIndex >= Ranks.Count) + { + return false; + } + + Ranks[RankIndex].Name = RankName; + List NewRankList = new List + { + Ranks[RankIndex] + }; + + for (int i = 0; i < Ranks.Count; i++) + { + for (int j = 0; j < Ranks[i].Members.Count; j++) + { + PlayerObject player = (PlayerObject)Ranks[i].Members[j].Player; + if (player != null) + { + player.Enqueue(new ServerPackets.GuildMemberChange() { Name = Self.Info.Name, Status = (byte)7, Ranks = NewRankList }); + player.GuildMembersChanged = true; + if (i == RankIndex) + { + player.BroadcastInfo(); + } + } + } + } + + NeedSave = true; + return true; + } + + public bool DeleteMember(PlayerObject Kicker, string membername) + { + //careful this can lead to guild with no ranks or members(or no leader) + + GuildMember Member = null; + GuildRank MemberRank = null; + + if ((Kicker.MyGuild != this) || (Kicker.MyGuildRank == null)) return false; + + for (int i = 0; i < Ranks.Count; i++) + { + for (int j = 0; j < Ranks[i].Members.Count; j++) + { + if (Ranks[i].Members[j].Name == membername) + { + Member = Ranks[i].Members[j]; + MemberRank = Ranks[i]; + goto Found; + } + } + } + + Found: + if (Member == null) return false; + if ((Kicker.MyGuildRank.Index >= MemberRank.Index) && (Kicker.MyGuildRank.Index != 0) && (Kicker.Info.Name != membername)) + { + Kicker.ReceiveChat("Your rank is not adequate.", ChatType.System); + return false; + } + + if (MemberRank.Index == 0) + { + if (MemberRank.Members.Count < 2 && Info.Membercount < 2) //Checks if last remaining member (and leader) + { + goto LeaderOk; + } + else + { + if (MemberRank.Members.Count > 1) //Allows other leaders to leave without another leader online. + goto AllOk; + } + Kicker.ReceiveChat("You need to be the last leading member of the guild to disband the guild.", ChatType.System); + return false; + } + + AllOk: + MemberDeleted(membername, (PlayerObject)Member.Player, Member.Name == Kicker.Info.Name); + + if (Member.Player != null) + { + PlayerObject LeavingMember = (PlayerObject)Member.Player; + LeavingMember.RefreshStats(); + } + + MemberRank.Members.Remove(Member); + + NeedSave = true; + Info.Membercount--; + + return true; + + LeaderOk: + MemberDeleted(membername, (PlayerObject)Member.Player, Member.Name == Kicker.Info.Name); + + if (Member.Player != null) + { + PlayerObject LeavingMember = (PlayerObject)Member.Player; + LeavingMember.RefreshStats(); + } + + MemberRank.Members.Remove(Member); + + Envir.DeleteGuild(this); + Kicker.ReceiveChat("You have disbanded the guild", ChatType.System); + + return true; + } + + public void DeleteMember(string name) + {//carefull this can lead to guild with no ranks or members(or no leader) + + GuildMember Member = null; + GuildRank MemberRank = null; + for (int i = 0; i < Ranks.Count; i++) + for (int j = 0; j < Ranks[i].Members.Count; j++) + { + + Member = Ranks[i].Members[j]; + MemberRank = Ranks[i]; + + if (Member.Name != name) continue; + + MemberDeleted(Member.Name, (PlayerObject)Member.Player, true); + if (Member.Player != null) + { + PlayerObject LeavingMember = (PlayerObject)Member.Player; + LeavingMember.RefreshStats(); + } + MemberRank.Members.Remove(Member); + NeedSave = true; + Info.Membercount--; + + break; + } + } + + public void MemberDeleted(string name, PlayerObject formerMember, bool kickSelf) + { + for (int i = 0; i < Ranks.Count; i++) + { + for (int j = 0; j < Ranks[i].Members.Count; j++) + { + if ((Ranks[i].Members[j].Player != null) && (Ranks[i].Members[j].Player != formerMember)) + { + PlayerObject player = (PlayerObject)Ranks[i].Members[j].Player; + player.Enqueue(new ServerPackets.GuildMemberChange() { Name = name, Status = (byte)(kickSelf ? 4 : 3) }); + player.GuildMembersChanged = true; + } + } + } + + if (formerMember != null) + { + formerMember.Info.GuildIndex = -1; + formerMember.MyGuild = null; + formerMember.MyGuildRank = null; + formerMember.ReceiveChat(kickSelf ? "You have left your guild." : "You have been removed from your guild.", ChatType.Guild); + formerMember.RefreshStats(); + formerMember.Enqueue(new ServerPackets.GuildStatus() { GuildName = "", GuildRankName = "", MyOptions = (GuildRankOptions)0 }); + formerMember.BroadcastInfo(); + } + } + + public GuildRank FindRank(string name) + { + for (int i = 0; i < Ranks.Count; i++) + { + for (int j = 0; j < Ranks[i].Members.Count; j++) + { + if (Ranks[i].Members[j].Name == name) + { + return Ranks[i]; + } + } + } + + return null; + } + + public void NewNotice(List notice) + { + Info.Notice = notice; + NeedSave = true; + + for (int i = 0; i < Ranks.Count; i++) + { + for (int j = 0; j < Ranks[i].Members.Count; j++) + { + if (Ranks[i].Members[j].Player != null) + { + PlayerObject player = (PlayerObject)Ranks[i].Members[j].Player; + player.GuildNoticeChanged = true; + } + } + } + + SendServerPacket(new ServerPackets.GuildNoticeChange() { update = -1 }); + } + + public void SendServerPacket(Packet p) + { + for (int i = 0; i < Ranks.Count; i++) + { + for (int j = 0; j < Ranks[i].Members.Count; j++) + { + PlayerObject player = (PlayerObject)Ranks[i].Members[j].Player; + if (player != null) + { + player.Enqueue(p); + } + } + } + } + + public void SendItemInfo(UserItem Item) + { + for (int i = 0; i < Ranks.Count; i++) + { + for (int j = 0; j < Ranks[i].Members.Count; j++) + { + PlayerObject player = (PlayerObject)Ranks[i].Members[j].Player; + if (player != null) + { + player.CheckItem(Item); + } + } + } + } + + public bool HasRoom() + { + if (Info.Level < Settings.Guild_MembercapList.Count) + { + if ((Settings.Guild_MembercapList[Info.Level] != 0) && (Info.Membercount >= Settings.Guild_MembercapList[Info.Level])) + { + return false; + } + } + + return true; + } + public void GainExp(uint amount) + { + bool Leveled = false; + if (Info.MaxExperience <= 0) return; + + uint expAmount = (uint)(amount * Settings.Guild_ExpRate); + if (expAmount == 0) return; + + Info.Experience += expAmount; + + var experience = Info.Experience; + + while (experience > Info.MaxExperience) + { + Leveled = true; + Info.Level++; + Info.SparePoints = (byte)Math.Min(byte.MaxValue, Info.SparePoints + Settings.Guild_PointPerLevel); + experience -= Info.MaxExperience; + + if (Info.Level < Settings.Guild_ExperienceList.Count) + { + Info.MaxExperience = Settings.Guild_ExperienceList[Info.Level]; + } + else + { + Info.MaxExperience = 0; + } + + if (Info.MaxExperience == 0) break; + if (Info.Level == byte.MaxValue) break; + } + + if (Leveled) + { + if (Info.Level < Settings.Guild_MembercapList.Count) + { + Info.MemberCap = Settings.Guild_MembercapList[Info.Level]; + } + + NextExpUpdate = Envir.Time + 10000; + + for (int i = 0; i < Ranks.Count; i++) + { + for (int j = 0; j < Ranks[i].Members.Count; j++) + { + if (Ranks[i].Members[j].Player != null) + { + SendGuildStatus((PlayerObject)Ranks[i].Members[j].Player); + } + } + } + } + else + { + if (NextExpUpdate < Envir.Time) + { + NextExpUpdate = Envir.Time + 10000; + SendServerPacket(new ServerPackets.GuildExpGain() { Amount = expAmount }); + } + } + } + + + #region Guild Wars + + public bool GoToWar(GuildObject enemyGuild) + { + if (enemyGuild == null) + { + return false; + } + + if (Envir.GuildsAtWar.Where(e => e.GuildA == this && e.GuildB == enemyGuild).Any() || Envir.GuildsAtWar.Where(e => e.GuildA == enemyGuild && e.GuildB == this).Any()) + { + return false; + } + + Envir.GuildsAtWar.Add(new GuildAtWar(this, enemyGuild)); + UpdatePlayersColours(); + enemyGuild.UpdatePlayersColours(); + return true; + } + + public void UpdatePlayersColours() + { + for (int i = 0; i < Ranks.Count; i++) + { + for (int j = 0; j < Ranks[i].Members.Count; j++) + { + //in a way this is a horrible spam situation, it should only broadcast to your own guild or enemy or allies guild but not sure i wanna code yet another broadcast for that + PlayerObject player = (PlayerObject)Ranks[i].Members[j].Player; + if (player != null) + { + //player.Enqueue(player.GetInfoEx(player)); + player.Enqueue(new ServerPackets.ColourChanged { NameColour = player.GetNameColour(player) }); + player.BroadcastInfo(); + } + } + } + } + + public bool IsAtWar() + { + if (WarringGuilds.Count == 0) return false; + return true; + } + + public string GetName() + { + return Name; + } + + public bool IsEnemy(GuildObject enemyGuild) + { + if (enemyGuild == null) return false; + if (enemyGuild.IsAtWar() != true) return false; + + for (int i = 0; i < WarringGuilds.Count; i++) + { + if (WarringGuilds[i] == enemyGuild) + { + return true; + } + } + + return false; + } + #endregion + + public void RefreshAllStats() + { + for (int i = 0; i < Ranks.Count; i++) + { + for (int j = 0; j < Ranks[i].Members.Count; j++) + { + PlayerObject player = (PlayerObject)Ranks[i].Members[j].Player; + if (player != null) + { + player.RefreshStats(); + } + } + } + } + + + public void Process() + { + //guild buffs + bool NeedUpdate = false; + List UpdatedBuffs = new List(); + for (int k = 0; k < BuffList.Count; k++) + { + if ((BuffList[k].Info == null) || (BuffList[k].Info.TimeLimit == 0)) continue; //dont bother if it's infinite buffs + if (BuffList[k].Active == false) continue;//dont bother if the buff isnt active + + BuffList[k].ActiveTimeRemaining -= 1; + + if (BuffList[k].ActiveTimeRemaining < 0) + { + NeedUpdate = true; + BuffList[k].Active = false; + UpdatedBuffs.Add(BuffList[k]); + //SendServerPacket(new ServerPackets.RemoveGuildBuff {ObjectID = (uint)BuffList[k].Id}); + } + } + + if (NeedUpdate) + { + if (UpdatedBuffs.Count > 0) + { + SendServerPacket(new ServerPackets.GuildBuffList { ActiveBuffs = UpdatedBuffs }); + } + + RefreshAllStats(); + } + } + + public GuildBuff GetBuff(int Id) + { + for (int i = 0; i < BuffList.Count; i++ ) + { + if (BuffList[i].Id == Id) + { + return BuffList[i]; + } + } + return null; + } + + public void NewBuff(int Id, bool charge = true) + { + GuildBuffInfo info = Envir.FindGuildBuffInfo(Id); + + if (info == null) + { + return; + } + + GuildBuff buff = new GuildBuff() + { + Id = Id, + Info = info, + Active = true, + }; + + buff.ActiveTimeRemaining = buff.Info.TimeLimit; + + if (charge) + { + ChargeForBuff(buff); + } + + BuffList.Add(buff); + List NewBuff = new List + { + buff + }; + + SendServerPacket(new ServerPackets.GuildBuffList { ActiveBuffs = NewBuff }); + + //now tell everyone our new sparepoints + for (int i = 0; i < Ranks.Count; i++) + { + for (int j = 0; j < Ranks[i].Members.Count; j++) + { + if (Ranks[i].Members[j].Player != null) + { + SendGuildStatus((PlayerObject)Ranks[i].Members[j].Player); + } + } + } + + NeedSave = true; + RefreshAllStats(); + } + + private void ChargeForBuff(GuildBuff buff) + { + if (buff == null) return; + + Info.SparePoints -= buff.Info.PointsRequirement; + } + + public void ActivateBuff(int Id) + { + GuildBuff buff = GetBuff(Id); + + if (buff == null) return; + if (buff.Active) return;//no point activating buffs if they have no time limit anyway + + if (Info.Gold < buff.Info.ActivationCost) return; + + buff.Active = true; + buff.ActiveTimeRemaining = buff.Info.TimeLimit; + + Info.Gold -= (uint)buff.Info.ActivationCost; + + List NewBuff = new List + { + buff + }; + + SendServerPacket(new ServerPackets.GuildBuffList { ActiveBuffs = NewBuff }); + SendServerPacket(new ServerPackets.GuildStorageGoldChange() { Type = 2, Name = "", Amount = (uint)buff.Info.ActivationCost }); + + NeedSave = true; + + RefreshAllStats(); + } + + public void RemoveAllBuffs() + { + //note this removes them all but doesnt reset the sparepoints!(should make some sort of 'refreshpoints' procedure for that + SendServerPacket(new ServerPackets.GuildBuffList {Remove = 1, ActiveBuffs = BuffList}); + + BuffList.Clear(); + RefreshAllStats(); + + NeedSave = true; + } + } + + public class GuildAtWar + { + public GuildObject GuildA; + public GuildObject GuildB; + public long TimeRemaining; + + public GuildAtWar(GuildObject a, GuildObject b) + { + GuildA = a; + GuildB = b; + + GuildA.WarringGuilds.Add(GuildB); + GuildB.WarringGuilds.Add(GuildA); + + TimeRemaining = Settings.Minute * Settings.Guild_WarTime; + } + + public void EndWar() + { + GuildA.WarringGuilds.Remove(GuildB); + GuildB.WarringGuilds.Remove(GuildA); + + GuildA.SendMessage(string.Format("War ended with {0}.", GuildB.Name), ChatType.Guild); + GuildB.SendMessage(string.Format("War ended with {0}.", GuildA.Name), ChatType.Guild); + GuildA.UpdatePlayersColours(); + GuildB.UpdatePlayersColours(); + } + } + + public class GuildItemVolume + { + public ItemInfo Item; + public string ItemName; + public uint Amount; + } +} diff --git a/Server/MirObjects/HumanObject.cs b/Server/MirObjects/HumanObject.cs new file mode 100644 index 0000000..a338e21 --- /dev/null +++ b/Server/MirObjects/HumanObject.cs @@ -0,0 +1,4676 @@ +using Server.MirDatabase; +using Server.MirEnvir; +using Server.MirNetwork; +using Server.MirObjects.Monsters; +using System.Numerics; +using S = ServerPackets; + +namespace Server.MirObjects +{ + public class HumanObject : MapObject + { + public override ObjectType Race + { + get { return ObjectType.Player; } + } + + public CharacterInfo Info; + + protected MirConnection connection; + public virtual MirConnection Connection + { + get { return connection; } + set { connection = value; } + } + public override string Name + { + get { return Info.Name; } + set { /*Check if Name exists.*/ } + } + public override int CurrentMapIndex + { + get { return Info.CurrentMapIndex; } + set { Info.CurrentMapIndex = value; } + } + public override Point CurrentLocation + { + get { return Info.CurrentLocation; } + set { Info.CurrentLocation = value; } + } + public override MirDirection Direction + { + get { return Info.Direction; } + set { Info.Direction = value; } + } + public override ushort Level + { + get { return Info.Level; } + set { Info.Level = value; } + } + public override int Health + { + get { return HP; } + } + public override int MaxHealth + { + get { return Stats[Stat.HP]; } + } + public int HP + { + get { return Info.HP; } + set { Info.HP = value; } + } + public int MP + { + get { return Info.MP; } + set { Info.MP = value; } + } + public override AttackMode AMode + { + get { return Info.AMode; } + set { Info.AMode = value; } + } + public override PetMode PMode + { + get { return Info.PMode; } + set { Info.PMode = value; } + } + public long Experience + { + set { Info.Experience = value; } + get { return Info.Experience; } + } + + public long MaxExperience; + public byte Hair + { + get { return Info.Hair; } + set { Info.Hair = value; } + } + public MirClass Class + { + get { return Info.Class; } + } + public MirGender Gender + { + get { return Info.Gender; } + } + public override List Buffs + { + get { return Info.Buffs; } + set { Info.Buffs = value; } + } + public override List PoisonList + { + get { return Info.Poisons; } + set { Info.Poisons = value; } + } + + public Reporting Report; + public virtual bool CanMove + { + get + { + return !Dead && Envir.Time >= ActionTime && !CurrentPoison.HasFlag(PoisonType.Paralysis) && !CurrentPoison.HasFlag(PoisonType.Frozen); + } + } + public virtual bool CanWalk + { + get + { + return !Dead && Envir.Time >= ActionTime && !CurrentPoison.HasFlag(PoisonType.Paralysis) && !CurrentPoison.HasFlag(PoisonType.Frozen); + } + } + public virtual bool CanAttack + { + get + { + return !Dead && Envir.Time >= ActionTime && Envir.Time >= AttackTime && !CurrentPoison.HasFlag(PoisonType.Paralysis) && !CurrentPoison.HasFlag(PoisonType.Frozen); + } + } + public bool CanRegen + { + get + { + return Envir.Time >= RegenTime; + } + } + protected virtual bool CanCast + { + get + { + return !Dead && Envir.Time >= ActionTime && Envir.Time >= SpellTime && !CurrentPoison.HasFlag(PoisonType.Stun) && + !CurrentPoison.HasFlag(PoisonType.Paralysis) && !CurrentPoison.HasFlag(PoisonType.Frozen); + } + } + + protected bool CheckCellTime = true; + + public short TransformType; + public short Looks_Armour = 0, Looks_Weapon = -1, Looks_WeaponEffect = 0; + public byte Looks_Wings = 0; + + public int CurrentHandWeight, + CurrentWearWeight, + CurrentBagWeight; + + public bool HasElemental; + public int ElementsLevel; + + public bool Stacking; + public bool IsGM, GMNeverDie, GMGameMaster; + public bool HasUpdatedBaseStats = true; + + public virtual int PotionBeltMinimum => 0; + public virtual int PotionBeltMaximum => 4; + public virtual int AmuletBeltMinimum => 4; + public virtual int AmuletBeltMaximum => 6; + public virtual int BeltSize => 6; + + public LevelEffects LevelEffects = LevelEffects.None; + + public const long LoyaltyDelay = 1000, ItemExpireDelay = 60000, DuraDelay = 10000, RegenDelay = 10000, PotDelay = 200, HealDelay = 600, VampDelay = 500, MoveDelay = 400; + public long StruckTime, ActionTime, AttackTime, RegenTime, SpellTime, StackingTime, IncreaseLoyaltyTime, ItemExpireTime, DuraTime, PotTime, HealTime, VampTime, LogTime, DecreaseLoyaltyTime, SearchTime; + + private GuildObject myGuild = null; + public virtual GuildObject MyGuild + { + get { return myGuild; } + set { myGuild = value; } + } + public GuildRank MyGuildRank = null; + + public SpecialItemMode SpecialMode; + + public List ItemSets = new List(); + public List MirSet = new List(); + + public bool Slaying, FlamingSword; + public long FlamingSwordTime; + + public long LastRevivalTime; + public float HpDrain = 0; + + public bool UnlockCurse = false; + public bool FastRun = false; + public bool CanGainExp = true; + public override bool Blocking + { + get + { + return !Dead && !Observer; + } + } + public HumanObject() { } + public HumanObject(CharacterInfo info, MirConnection connection) + { + Load(info, connection); + } + protected virtual void Load(CharacterInfo info, MirConnection connection) { } + protected virtual void NewCharacter() + { + Level = 1; + + for (int i = 0; i < Envir.StartItems.Count; i++) + { + ItemInfo info = Envir.StartItems[i]; + if (!CorrectStartItem(info)) continue; + + AddItem(Envir.CreateFreshItem(info)); + } + } + public long GetDelayTime(long original) + { + if (CurrentPoison.HasFlag(PoisonType.Slow)) + { + return original * 2; + } + return original; + } + public override void Process() + { + if ((Race == ObjectType.Player && Connection == null) || Node == null || Info == null) return; + + if (FlamingSword && Envir.Time >= FlamingSwordTime) + { + FlamingSword = false; + Enqueue(new S.SpellToggle { ObjectID = ObjectID, Spell = Spell.FlamingSword, CanUse = false }); + } + + if (Stacking && Envir.Time > StackingTime) + { + Stacking = false; + + for (int i = 0; i < 8; i++) + { + if (Pushed(this, (MirDirection)i, 1) == 1) break; + } + } + + if (Envir.Time > ItemExpireTime) + { + ItemExpireTime = Envir.Time + ItemExpireDelay; + + ProcessItems(); + } + + for (int i = Pets.Count() - 1; i >= 0; i--) + { + MonsterObject pet = Pets[i]; + if (pet.Dead) Pets.Remove(pet); + } + + ProcessBuffs(); + ProcessRegen(); + ProcessPoison(); + + UserItem item; + + if (Envir.Time > DuraTime) + { + DuraTime = Envir.Time + DuraDelay; + + for (int i = 0; i < Info.Equipment.Length; i++) + { + item = Info.Equipment[i]; + if (item == null || !item.DuraChanged) continue; // || item.Info.Type == ItemType.Mount + item.DuraChanged = false; + Enqueue(new S.DuraChanged { UniqueID = item.UniqueID, CurrentDura = item.CurrentDura }); + } + } + + base.Process(); + + RefreshNameColour(); + } + + public override void OnSafeZoneChanged() + { + base.OnSafeZoneChanged(); + + bool needsUpdate = false; + + for (int i = 0; i < Buffs.Count; i++) + { + if (Buffs[i].ObjectID == 0) continue; + if (!Buffs[i].Properties.HasFlag(BuffProperty.PauseInSafeZone)) continue; + + needsUpdate = true; + + if (InSafeZone) + { + PauseBuff(Buffs[i]); + } + else + { + UnpauseBuff(Buffs[i]); + } + } + + if (needsUpdate) + { + RefreshStats(); + } + } + + public override void SetOperateTime() + { + OperateTime = Envir.Time; + } + public override void Die() { } + protected virtual void ProcessBuffs() + { + bool refresh = false; + bool clearRing = false, skill = false, gm = false, mentor = false, lover = false; + + for (int i = Buffs.Count - 1; i >= 0; i--) + { + Buff buff = Buffs[i]; + + switch (buff.Type) + { + case BuffType.ClearRing: + clearRing = true; + if (!SpecialMode.HasFlag(SpecialItemMode.ClearRing)) buff.FlagForRemoval = true; + break; + case BuffType.Skill: + skill = true; + if (!SpecialMode.HasFlag(SpecialItemMode.Skill)) buff.FlagForRemoval = true; + break; + case BuffType.GameMaster: + gm = true; + if (!IsGM) buff.FlagForRemoval = true; + break; + case BuffType.Lover: + lover = true; + if (Info.Married == 0) buff.FlagForRemoval = true; + break; + } + + if (buff.NextTime > Envir.Time) continue; + + if (!buff.Paused && buff.StackType != BuffStackType.Infinite) + { + var change = Envir.Time - buff.LastTime; + buff.ExpireTime -= change; + } + + buff.LastTime = Envir.Time; + buff.NextTime = Envir.Time + 1000; + + if ((buff.ExpireTime > 0 || buff.StackType == BuffStackType.Infinite) && !buff.FlagForRemoval) continue; + + Buffs.RemoveAt(i); + Enqueue(new S.RemoveBuff { Type = buff.Type, ObjectID = ObjectID }); + + if (buff.Info.Visible) + { + Broadcast(new S.RemoveBuff { Type = buff.Type, ObjectID = ObjectID }); + } + + switch (buff.Type) + { + case BuffType.Hiding: + case BuffType.ClearRing: + if (!HasAnyBuffs(buff.Type, BuffType.ClearRing, BuffType.Hiding)) + { + Hidden = false; + } + break; + case BuffType.MagicShield: + CurrentMap.Broadcast(new S.ObjectEffect { ObjectID = ObjectID, Effect = SpellEffect.MagicShieldDown }, CurrentLocation); + break; + } + + refresh = true; + } + + if (IsGM && !gm) + { + UpdateGMBuff(); + } + + if (SpecialMode.HasFlag(SpecialItemMode.ClearRing) && !clearRing) + { + AddBuff(BuffType.ClearRing, this, 0, new Stats()); + } + + if (SpecialMode.HasFlag(SpecialItemMode.Skill) && !skill) + { + AddBuff(BuffType.Skill, this, 0, new Stats { [Stat.SkillGainMultiplier] = 3 }, false); + } + + if (Info.Married != 0 && !lover) + { + CharacterInfo loverC = Envir.GetCharacterInfo(Info.Married); + PlayerObject loverP = loverC != null ? Envir.GetPlayer(loverC.Name) : null; + + if (loverP != null) + { + AddBuff(BuffType.Lover, loverP, 0, new Stats { [Stat.LoverExpRatePercent] = Settings.LoverEXPBonus }); + } + } + + if (refresh) + { + RefreshStats(); + } + } + private void ProcessRegen() + { + if (Dead) return; + + int healthRegen = 0, manaRegen = 0; + + if (CanRegen) + { + RegenTime = Envir.Time + RegenDelay; + + if (HP < Stats[Stat.HP]) + { + healthRegen += (int)(Stats[Stat.HP] * 0.03F) + 1; + healthRegen += (int)(healthRegen * ((double)Stats[Stat.HealthRecovery] / Settings.HealthRegenWeight)); + } + + if (MP < Stats[Stat.MP]) + { + manaRegen += (int)(Stats[Stat.MP] * 0.03F) + 1; + manaRegen += (int)(manaRegen * ((double)Stats[Stat.SpellRecovery] / Settings.ManaRegenWeight)); + } + } + + if (Envir.Time > PotTime) + { + //PotTime = Envir.Time + Math.Max(50,Math.Min(PotDelay, 600 - (Level * 10))); + PotTime = Envir.Time + PotDelay; + int PerTickRegen = 5 + (Level / 10); + + if (PotHealthAmount > PerTickRegen) + { + healthRegen += PerTickRegen; + PotHealthAmount -= (ushort)PerTickRegen; + } + else + { + healthRegen += PotHealthAmount; + PotHealthAmount = 0; + } + + if (PotManaAmount > PerTickRegen) + { + manaRegen += PerTickRegen; + PotManaAmount -= (ushort)PerTickRegen; + } + else + { + manaRegen += PotManaAmount; + PotManaAmount = 0; + } + } + + if (Envir.Time > HealTime) + { + HealTime = Envir.Time + HealDelay; + + int incHeal = (Level / 10) + (HealAmount / 10); + if (HealAmount > (5 + incHeal)) + { + healthRegen += (5 + incHeal); + HealAmount -= (ushort)Math.Min(HealAmount, 5 + incHeal); + } + else + { + healthRegen += HealAmount; + HealAmount = 0; + } + } + + if (Envir.Time > VampTime) + { + VampTime = Envir.Time + VampDelay; + + if (VampAmount > 10) + { + healthRegen += 10; + VampAmount -= 10; + } + else + { + healthRegen += VampAmount; + VampAmount = 0; + } + } + + if (healthRegen > 0) + { + ChangeHP(healthRegen); + BroadcastDamageIndicator(DamageType.Hit, healthRegen); + } + + if (HP == Stats[Stat.HP]) + { + PotHealthAmount = 0; + HealAmount = 0; + } + + if (manaRegen > 0) ChangeMP(manaRegen); + if (MP == Stats[Stat.MP]) PotManaAmount = 0; + } + private void ProcessPoison() + { + PoisonType type = PoisonType.None; + ArmourRate = 1F; + DamageRate = 1F; + + for (int i = PoisonList.Count - 1; i >= 0; i--) + { + if (Dead) return; + + Poison poison = PoisonList[i]; + + if (poison.Owner != null && poison.Owner.Node == null) + { + PoisonList.RemoveAt(i); + continue; + } + + if (Envir.Time > poison.TickTime) + { + poison.Time++; + poison.TickTime = Envir.Time + poison.TickSpeed; + + if (poison.Time >= poison.Duration) + { + PoisonList.RemoveAt(i); + } + + if (poison.PType == PoisonType.Green) + { + LastHitter = poison.Owner; + LastHitTime = Envir.Time + 10000; + + PoisonDamage(-poison.Value, poison.Owner); + BroadcastDamageIndicator(DamageType.Hit, -poison.Value); + + if (Dead) break; + RegenTime = Envir.Time + RegenDelay; + } + } + + switch (poison.PType) + { + case PoisonType.Red: + ArmourRate -= 0.10F; + break; + case PoisonType.Stun: + DamageRate += 0.20F; + break; + } + + type |= poison.PType; + } + + if (type == CurrentPoison) return; + + Enqueue(new S.Poisoned { Poison = type }); + Broadcast(new S.ObjectPoisoned { ObjectID = ObjectID, Poison = type }); + + CurrentPoison = type; + } + private void ProcessItems() + { + for (var i = 0; i < Info.Inventory.Length; i++) + { + var item = Info.Inventory[i]; + + if (item?.ExpireInfo?.ExpiryDate <= Envir.Now) + { + ReceiveChat($"{item.Info.FriendlyName} has just expired from your inventory.", ChatType.Hint); + Enqueue(new S.DeleteItem { UniqueID = item.UniqueID, Count = item.Count }); + Info.Inventory[i] = null; + continue; + } + } + + for (var i = 0; i < Info.Equipment.Length; i++) + { + var item = Info.Equipment[i]; + + if (item?.ExpireInfo?.ExpiryDate <= Envir.Now) + { + ReceiveChat($"{item.Info.FriendlyName} has just expired from your equipment.", ChatType.Hint); + Enqueue(new S.DeleteItem { UniqueID = item.UniqueID, Count = item.Count }); + Info.Equipment[i] = null; + continue; + } + } + + if (Info.AccountInfo == null) return; + + for (int i = 0; i < Info.AccountInfo.Storage.Length; i++) + { + var item = Info.AccountInfo.Storage[i]; + if (item?.ExpireInfo?.ExpiryDate <= Envir.Now) + { + ReceiveChat($"{item.Info.FriendlyName} has just expired from your storage.", ChatType.Hint); + Enqueue(new S.DeleteItem { UniqueID = item.UniqueID, Count = item.Count }); + Info.AccountInfo.Storage[i] = null; + continue; + } + } + } + public override void Process(DelayedAction action) + { + } + protected void UpdateGMBuff() + { + if (!IsGM) return; + + GMOptions options = GMOptions.None; + + if (GMGameMaster) options |= GMOptions.GameMaster; + if (GMNeverDie) options |= GMOptions.Superman; + if (Observer) options |= GMOptions.Observer; + + AddBuff(BuffType.GameMaster, this, 0, null, false, values: (byte)options); + } + public virtual void LevelUp() + { + RefreshStats(); + SetHP(Stats[Stat.HP]); + SetMP(Stats[Stat.MP]); + + Broadcast(new S.ObjectLeveled { ObjectID = ObjectID }); + } + public virtual Color GetNameColour(HumanObject human) + { + return NameColour; + } + public virtual void RefreshNameColour() { } + protected void SetHP(int amount) + { + if (HP == amount) return; + + HP = amount <= Stats[Stat.HP] ? amount : Stats[Stat.HP]; + HP = GMNeverDie ? Stats[Stat.HP] : HP; + + if (!Dead && HP == 0) Die(); + + //HealthChanged = true; + SendHealthChanged(); + } + protected virtual void SendHealthChanged() + { + Enqueue(new S.HealthChanged { HP = HP, MP = MP }); + BroadcastHealthChange(); + } + protected void SetMP(int amount) + { + if (MP == amount) return; + //was info.MP + MP = amount <= Stats[Stat.MP] ? amount : Stats[Stat.MP]; + MP = GMNeverDie ? Stats[Stat.MP] : MP; + + // HealthChanged = true; + SendHealthChanged(); + } + public void ChangeHP(int amount) + { + if (SpecialMode.HasFlag(SpecialItemMode.Protection) && MP > 0 && amount < 0) + { + ChangeMP(amount); + return; + } + + if (HP + amount > Stats[Stat.HP]) + amount = Stats[Stat.HP] - HP; + + if (amount == 0) return; + + HP += amount; + HP = GMNeverDie ? Stats[Stat.HP] : HP; + + if (HP < 0) HP = 0; + + if (!Dead && HP == 0) Die(); + + // HealthChanged = true; + SendHealthChanged(); + } + public void PoisonDamage(int amount, MapObject Attacker) + { + ChangeHP(amount); + } + public void ChangeMP(int amount) + { + if (MP + amount > Stats[Stat.MP]) + amount = Stats[Stat.MP] - MP; + + if (amount == 0) return; + + MP += amount; + MP = GMNeverDie ? Stats[Stat.MP] : MP; + + if (MP < 0) MP = 0; + + // HealthChanged = true; + SendHealthChanged(); + } + + public virtual bool CheckGroupQuestItem(UserItem item, bool gainItem = true) + { + return false; + } + protected bool TryLuckWeapon() + { + var item = Info.Equipment[(int)EquipmentSlot.Weapon]; + + if (item == null || item.AddedStats[Stat.Luck] >= 7) + return false; + + if (item.Info.Bind.HasFlag(BindMode.DontUpgrade)) + return false; + + string message = String.Empty; + ChatType chatType; + + if (item.AddedStats[Stat.Luck] > (Settings.MaxLuck * -1) && Envir.Random.Next(20) == 0) + { + Stats[Stat.Luck]--; + item.AddedStats[Stat.Luck]--; + Enqueue(new S.RefreshItem { Item = item }); + + message = GameLanguage.WeaponCurse; + chatType = ChatType.System; + + } + else if (item.AddedStats[Stat.Luck] <= 0 || Envir.Random.Next(10 * item.GetTotal(Stat.Luck)) == 0) + { + Stats[Stat.Luck]++; + item.AddedStats[Stat.Luck]++; + Enqueue(new S.RefreshItem { Item = item }); + + message = GameLanguage.WeaponLuck; + chatType = ChatType.Hint; + } + else + { + message = GameLanguage.WeaponNoEffect; + chatType = ChatType.Hint; + } + + ReceiveChat(message, chatType); + + return true; + } + protected bool CanUseItem(UserItem item) + { + if (item == null) return false; + + switch (Gender) + { + case MirGender.Male: + if (!item.Info.RequiredGender.HasFlag(RequiredGender.Male)) + { + ReceiveChat(GameLanguage.NotFemale, ChatType.System); + return false; + } + break; + case MirGender.Female: + if (!item.Info.RequiredGender.HasFlag(RequiredGender.Female)) + { + ReceiveChat(GameLanguage.NotMale, ChatType.System); + return false; + } + break; + } + + switch (Class) + { + case MirClass.Warrior: + if (!item.Info.RequiredClass.HasFlag(RequiredClass.Warrior)) + { + ReceiveChat("Warriors cannot use this item.", ChatType.System); + return false; + } + break; + case MirClass.Wizard: + if (!item.Info.RequiredClass.HasFlag(RequiredClass.Wizard)) + { + ReceiveChat("Wizards cannot use this item.", ChatType.System); + return false; + } + break; + case MirClass.Taoist: + if (!item.Info.RequiredClass.HasFlag(RequiredClass.Taoist)) + { + ReceiveChat("Taoists cannot use this item.", ChatType.System); + return false; + } + break; + } + + switch (item.Info.RequiredType) + { + case RequiredType.Level: + if (Level < item.Info.RequiredAmount) + { + ReceiveChat(GameLanguage.LowLevel, ChatType.System); + return false; + } + break; + case RequiredType.MaxAC: + if (Stats[Stat.MaxAC] < item.Info.RequiredAmount) + { + ReceiveChat("You do not have enough AC.", ChatType.System); + return false; + } + break; + case RequiredType.MaxMAC: + if (Stats[Stat.MaxMAC] < item.Info.RequiredAmount) + { + ReceiveChat("You do not have enough MAC.", ChatType.System); + return false; + } + break; + case RequiredType.MaxDC: + if (Stats[Stat.MaxDC] < item.Info.RequiredAmount) + { + ReceiveChat(GameLanguage.LowDC, ChatType.System); + return false; + } + break; + case RequiredType.MaxMC: + if (Stats[Stat.MaxMC] < item.Info.RequiredAmount) + { + ReceiveChat(GameLanguage.LowMC, ChatType.System); + return false; + } + break; + case RequiredType.MaxSC: + if (Stats[Stat.MaxSC] < item.Info.RequiredAmount) + { + ReceiveChat(GameLanguage.LowSC, ChatType.System); + return false; + } + break; + case RequiredType.MaxLevel: + if (Level > item.Info.RequiredAmount) + { + ReceiveChat("You have exceeded the maximum level.", ChatType.System); + return false; + } + break; + case RequiredType.MinAC: + if (Stats[Stat.MinAC] < item.Info.RequiredAmount) + { + ReceiveChat("You do not have enough Base AC.", ChatType.System); + return false; + } + break; + case RequiredType.MinMAC: + if (Stats[Stat.MinMAC] < item.Info.RequiredAmount) + { + ReceiveChat("You do not have enough Base MAC.", ChatType.System); + return false; + } + break; + case RequiredType.MinDC: + if (Stats[Stat.MinDC] < item.Info.RequiredAmount) + { + ReceiveChat("You do not have enough Base DC.", ChatType.System); + return false; + } + break; + case RequiredType.MinMC: + if (Stats[Stat.MinMC] < item.Info.RequiredAmount) + { + ReceiveChat("You do not have enough Base MC.", ChatType.System); + return false; + } + break; + case RequiredType.MinSC: + if (Stats[Stat.MinSC] < item.Info.RequiredAmount) + { + ReceiveChat("You do not have enough Base SC.", ChatType.System); + return false; + } + break; + } + + switch (item.Info.Type) + { + case ItemType.Scroll: + switch (item.Info.Shape) + { + case 0: + if (CurrentMap.Info.NoEscape) + { + ReceiveChat(GameLanguage.CanNotDungeon, ChatType.System); + return false; + } + break; + case 1: + if (CurrentMap.Info.NoTownTeleport) + { + ReceiveChat(GameLanguage.NoTownTeleport, ChatType.System); + return false; + } + break; + case 2: + if (CurrentMap.Info.NoRandom) + { + ReceiveChat(GameLanguage.CanNotRandom, ChatType.System); + return false; + } + break; + case 6: + if (!Dead) + { + ReceiveChat(GameLanguage.CannotResurrection, ChatType.Hint); + return false; + } + break; + case 10: + { + int skillId = item.Info.Effect; + + if (MyGuild == null) + { + ReceiveChat("You must be in a guild to use this skill", ChatType.Hint); + return false; + } + if (MyGuildRank != MyGuild.Ranks[0]) + { + ReceiveChat("You must be the guild leader to use this skill", ChatType.Hint); + return false; + } + GuildBuffInfo buffInfo = Envir.FindGuildBuffInfo(skillId); + + if (buffInfo == null) return false; + + if (MyGuild.BuffList.Any(e => e.Info.Id == skillId)) + { + ReceiveChat("Your guild already has this skill", ChatType.Hint); + return false; + } + } + break; + } + break; + case ItemType.Potion: + if (CurrentMap.Info.NoDrug) + { + ReceiveChat("You cannot use Potions here", ChatType.System); + return false; + } + break; + + case ItemType.Book: + if (Info.Magics.Any(t => t.Spell == (Spell)item.Info.Shape)) + { + return false; + } + break; + } + + return true; + } + public virtual void UseItem(ulong id) { } + protected void ConsumeItem(UserItem item, byte cost) + { + item.Count -= cost; + Enqueue(new S.DeleteItem { UniqueID = item.UniqueID, Count = cost }); + + if (item.Count != 0) return; + + for (int i = 0; i < Info.Equipment.Length; i++) + { + if (Info.Equipment[i] != item) continue; + Info.Equipment[i] = null; + + return; + } + + for (int i = 0; i < Info.Inventory.Length; i++) + { + if (Info.Inventory[i] != item) continue; + Info.Inventory[i] = null; + return; + } + + //Item not found + } + protected bool DropItem(UserItem item, int range = 1, bool DeathDrop = false) + { + ItemObject ob = new ItemObject(this, item, DeathDrop); + + if (!ob.Drop(range)) return false; + + if (item.Info.Type == ItemType.Meat) + item.CurrentDura = (ushort)Math.Max(0, item.CurrentDura - 2000); + + return true; + } + protected void DeathDrop(MapObject killer) + { + var pkbodydrop = true; + + if (CurrentMap.Info.NoDropPlayer && Race == ObjectType.Player) + return; + + if ((killer == null) || ((pkbodydrop) || (killer.Race != ObjectType.Player))) + { + for (var i = 0; i < Info.Equipment.Length; i++) + { + var item = Info.Equipment[i]; + + if (item == null) + continue; + + if (item.Info.Bind.HasFlag(BindMode.DontDeathdrop)) + continue; + + // TODO: Check this. + if (item.WeddingRing != -1 && Info.Equipment[(int)EquipmentSlot.RingL].UniqueID == item.UniqueID) + continue; + + if (item.SealedInfo != null && item.SealedInfo.ExpiryDate > Envir.Now) + continue; + + if (((killer == null) || ((killer != null) && (killer.Race != ObjectType.Player)))) + { + if (item.Info.Bind.HasFlag(BindMode.BreakOnDeath)) + { + Info.Equipment[i] = null; + Enqueue(new S.DeleteItem { UniqueID = item.UniqueID, Count = item.Count }); + ReceiveChat($"Your {item.FriendlyName} shattered upon death.", ChatType.System2); + Report?.ItemChanged(item, item.Count, 1); + } + } + + if (item.Count > 1) + { + var percent = Envir.RandomomRange(10, 8); + var count = (ushort)Math.Ceiling(item.Count / 10F * percent); + + if (count > item.Count) + throw new ArgumentOutOfRangeException(); + + var temp2 = Envir.CreateFreshItem(item.Info); + temp2.Count = count; + + if (!DropItem(temp2, Settings.DropRange, true)) + continue; + + if (count == item.Count) + Info.Equipment[i] = null; + + Enqueue(new S.DeleteItem { UniqueID = item.UniqueID, Count = count }); + item.Count -= count; + + Report?.ItemChanged(item, count, 1); + } + else if (Envir.Random.Next(30) == 0) + { + if (!DropItem(item, Settings.DropRange, true)) + { + continue; + } + + if (item.Info.GlobalDropNotify) + { + foreach (var player in Envir.Players) + { + player.ReceiveChat($"{Name} has dropped {item.FriendlyName}.", ChatType.System2); + } + } + + Info.Equipment[i] = null; + Enqueue(new S.DeleteItem { UniqueID = item.UniqueID, Count = item.Count }); + + Report?.ItemChanged(item, item.Count, 1); + } + } + + } + + for (var i = 0; i < Info.Inventory.Length; i++) + { + var item = Info.Inventory[i]; + + if (item == null) + continue; + + if (item.Info.Bind.HasFlag(BindMode.DontDeathdrop)) + continue; + + if (item.WeddingRing != -1) + continue; + + if (item.SealedInfo != null && item.SealedInfo.ExpiryDate > Envir.Now) + continue; + + if (item.Count > 1) + { + var percent = Envir.RandomomRange(10, 8); + + if (percent == 0) + continue; + + var count = (ushort)Math.Ceiling(item.Count / 10F * percent); + + if (count > item.Count) + throw new ArgumentOutOfRangeException(); + + var temp2 = Envir.CreateFreshItem(item.Info); + temp2.Count = count; + + if (!DropItem(temp2, Settings.DropRange, true)) + continue; + + if (count == item.Count) + Info.Inventory[i] = null; + + Enqueue(new S.DeleteItem { UniqueID = item.UniqueID, Count = count }); + item.Count -= count; + + Report?.ItemChanged(item, count, 1); + } + else if (Envir.Random.Next(10) == 0) + { + if (!DropItem(item, Settings.DropRange, true)) + continue; + + if (item.Info.GlobalDropNotify) + foreach (var player in Envir.Players) + { + player.ReceiveChat($"{Name} has dropped {item.FriendlyName}.", ChatType.System2); + } + + Info.Inventory[i] = null; + Enqueue(new S.DeleteItem { UniqueID = item.UniqueID, Count = item.Count }); + + Report?.ItemChanged(item, item.Count, 1); + } + } + + RefreshStats(); + } + protected static int FreeSpace(IList array) + { + int count = 0; + + for (int i = 0; i < array.Count; i++) + if (array[i] == null) count++; + + return count; + } + protected void AddItem(UserItem item) + { + if (item.Info.StackSize > 1) //Stackable + { + for (int i = 0; i < Info.Inventory.Length; i++) + { + UserItem temp = Info.Inventory[i]; + if (temp == null || item.Info != temp.Info || temp.Count >= temp.Info.StackSize) continue; + + if (item.Count + temp.Count <= temp.Info.StackSize) + { + temp.Count += item.Count; + return; + } + item.Count -= (ushort)(temp.Info.StackSize - temp.Count); + temp.Count = temp.Info.StackSize; + } + } + + if (item.Info.Type == ItemType.Potion || item.Info.Type == ItemType.Scroll || (item.Info.Type == ItemType.Script && item.Info.Effect == 1)) + { + for (int i = PotionBeltMinimum; i < PotionBeltMaximum; i++) + { + if (Info.Inventory[i] != null) continue; + Info.Inventory[i] = item; + return; + } + } + else + { + for (int i = BeltSize; i < Info.Inventory.Length; i++) + { + if (Info.Inventory[i] != null) continue; + Info.Inventory[i] = item; + return; + } + } + + for (int i = 0; i < Info.Inventory.Length; i++) + { + if (Info.Inventory[i] != null) continue; + Info.Inventory[i] = item; + return; + } + } + protected bool CorrectStartItem(ItemInfo info) + { + switch (Class) + { + case MirClass.Warrior: + if (!info.RequiredClass.HasFlag(RequiredClass.Warrior)) return false; + break; + case MirClass.Wizard: + if (!info.RequiredClass.HasFlag(RequiredClass.Wizard)) return false; + break; + case MirClass.Taoist: + if (!info.RequiredClass.HasFlag(RequiredClass.Taoist)) return false; + break; + default: + return false; + } + + switch (Gender) + { + case MirGender.Male: + if (!info.RequiredGender.HasFlag(RequiredGender.Male)) return false; + break; + case MirGender.Female: + if (!info.RequiredGender.HasFlag(RequiredGender.Female)) return false; + break; + default: + return false; + } + + return true; + } + public void CheckItemInfo(ItemInfo info, bool dontLoop = false) + { + Connection.CheckItemInfo(info, dontLoop); + } + public void CheckItem(UserItem item) + { + Connection.CheckItem(item); + } + public void SetLevelEffects() + { + LevelEffects = LevelEffects.None; + + if (Info.Flags[990]) LevelEffects |= LevelEffects.Mist; + if (Info.Flags[991]) LevelEffects |= LevelEffects.RedDragon; + if (Info.Flags[992]) LevelEffects |= LevelEffects.BlueDragon; + if (Info.Flags[993]) LevelEffects |= LevelEffects.Rebirth1; + if (Info.Flags[994]) LevelEffects |= LevelEffects.Rebirth2; + if (Info.Flags[995]) LevelEffects |= LevelEffects.Rebirth3; + if (Info.Flags[996]) LevelEffects |= LevelEffects.NewBlue; + if (Info.Flags[997]) LevelEffects |= LevelEffects.YellowDragon; + if (Info.Flags[998]) LevelEffects |= LevelEffects.Phoenix; + } + public virtual void Revive(int hp, bool effect) + { + if (!Dead) return; + + Dead = false; + SetHP(hp); + + CurrentMap.RemoveObject(this); + Broadcast(new S.ObjectRemove { ObjectID = ObjectID }); + + CurrentMap = CurrentMap; + CurrentLocation = CurrentLocation; + + CurrentMap.AddObject(this); + + Enqueue(new S.MapChanged + { + MapIndex = CurrentMap.Info.Index, + FileName = CurrentMap.Info.FileName, + Title = CurrentMap.Info.Title, + MiniMap = CurrentMap.Info.MiniMap, + BigMap = CurrentMap.Info.BigMap, + Lights = CurrentMap.Info.Light, + Location = CurrentLocation, + Direction = Direction, + MapDarkLight = CurrentMap.Info.MapDarkLight, + Music = CurrentMap.Info.Music + }); + + Enqueue(new S.Revived()); + Broadcast(new S.ObjectRevived { ObjectID = ObjectID, Effect = effect }); + } + + protected virtual void SendBaseStats() + { + Enqueue(new S.BaseStatsInfo { Stats = Settings.ClassBaseStats[(byte)Class] }); + } + + #region Refresh Stats + public void RefreshStats() + { + if (HasUpdatedBaseStats == false) + { + SendBaseStats(); + HasUpdatedBaseStats = true; + } + + Stats.Clear(); + + RefreshLevelStats(); + RefreshBagWeight(); + RefreshEquipmentStats(); + RefreshItemSetStats(); + RefreshSkills(); + RefreshBuffs(); + RefreshGuildBuffs(); + + //Add any rate percent changes + + Stats[Stat.HP] += (Stats[Stat.HP] * Stats[Stat.HPRatePercent]) / 100; + Stats[Stat.MP] += (Stats[Stat.MP] * Stats[Stat.MPRatePercent]) / 100; + Stats[Stat.MaxAC] += (Stats[Stat.MaxAC] * Stats[Stat.MaxACRatePercent]) / 100; + Stats[Stat.MaxMAC] += (Stats[Stat.MaxMAC] * Stats[Stat.MaxMACRatePercent]) / 100; + + Stats[Stat.MaxDC] += (Stats[Stat.MaxDC] * Stats[Stat.MaxDCRatePercent]) / 100; + Stats[Stat.MaxMC] += (Stats[Stat.MaxMC] * Stats[Stat.MaxMCRatePercent]) / 100; + Stats[Stat.MaxSC] += (Stats[Stat.MaxSC] * Stats[Stat.MaxSCRatePercent]) / 100; + Stats[Stat.AttackSpeed] += (Stats[Stat.AttackSpeed] * Stats[Stat.AttackSpeedRatePercent]) / 100; + + RefreshStatCaps(); + + if (HP > Stats[Stat.HP]) SetHP(Stats[Stat.HP]); + if (MP > Stats[Stat.MP]) SetMP(Stats[Stat.MP]); + + AttackSpeed = 1400 - ((Stats[Stat.AttackSpeed] * 60) + Math.Min(370, (Level * 14))); + + if (AttackSpeed < 550) AttackSpeed = 550; + } + public virtual void RefreshGuildBuffs() { } + protected void RefreshLevelStats() + { + MaxExperience = Level < Settings.ExperienceList.Count ? Settings.ExperienceList[Level - 1] : 0; + + foreach (var stat in Settings.ClassBaseStats[(byte)Class].Stats) + { + Stats[stat.Type] = stat.Calculate(Class, Level); + } + } + public void RefreshBagWeight() + { + CurrentBagWeight = 0; + + for (int i = 0; i < Info.Inventory.Length; i++) + { + UserItem item = Info.Inventory[i]; + if (item != null) + { + CurrentBagWeight += item.Weight; + } + } + } + private void RefreshEquipmentStats() + { + short OldLooks_Weapon = Looks_Weapon; + short OldLooks_Armour = Looks_Armour; + byte OldLooks_Wings = Looks_Wings; + byte OldLight = Light; + + Looks_Armour = 0; + Looks_Weapon = -1; + Looks_WeaponEffect = 0; + Looks_Wings = 0; + Light = 0; + CurrentWearWeight = 0; + CurrentHandWeight = 0; + + SpecialMode = SpecialItemMode.None; + + Stats[Stat.SkillGainMultiplier] = 1; + + var skillsToAdd = new List(); + var skillsToRemove = new List { Settings.HealRing, Settings.FireRing, Settings.BlinkSkill }; + + ItemSets.Clear(); + MirSet.Clear(); + + for (int i = 0; i < Info.Equipment.Length; i++) + { + UserItem temp = Info.Equipment[i]; + if (temp == null) continue; + ItemInfo realItem = Functions.GetRealItem(temp.Info, Info.Level, Info.Class, Envir.ItemInfoList); + + if (realItem.Type == ItemType.Weapon) + CurrentHandWeight = (int)Math.Min(int.MaxValue, CurrentHandWeight + temp.Weight); + else + CurrentWearWeight = (int)Math.Min(int.MaxValue, CurrentWearWeight + temp.Weight); + + if (temp.CurrentDura == 0 && temp.Info.Durability > 0) continue; + + if (realItem.Type == ItemType.Armour) + { + Looks_Armour = realItem.Shape; + Looks_Wings = realItem.Effect; + } + + if (realItem.Type == ItemType.Weapon) + { + Looks_Weapon = realItem.Shape; + Looks_WeaponEffect = realItem.Effect; + } + + Stats.Add(realItem.Stats); + Stats.Add(temp.AddedStats); + + if (realItem.Light > Light) Light = realItem.Light; + if (realItem.Unique != SpecialItemMode.None) + { + SpecialMode |= realItem.Unique; + + if (realItem.Unique.HasFlag(SpecialItemMode.Flame)) skillsToAdd.Add(Settings.FireRing); + if (realItem.Unique.HasFlag(SpecialItemMode.Healing)) skillsToAdd.Add(Settings.HealRing); + if (realItem.Unique.HasFlag(SpecialItemMode.Blink)) skillsToAdd.Add(Settings.BlinkSkill); + } + + if (realItem.Set == ItemSet.None) continue; + + ItemSets itemSet = ItemSets.Where(set => set.Set == realItem.Set && !set.Type.Contains(realItem.Type) && !set.SetComplete).FirstOrDefault(); + + if (itemSet != null) + { + itemSet.Type.Add(realItem.Type); + itemSet.Count++; + } + else + { + ItemSets.Add(new ItemSets { Count = 1, Set = realItem.Set, Type = new List { realItem.Type } }); + } + } + + AddTempSkills(skillsToAdd); + RemoveTempSkills(skillsToRemove.Except(skillsToAdd)); + + if (SpecialMode.HasFlag(SpecialItemMode.Muscle)) + { + Stats[Stat.BagWeight] = Stats[Stat.BagWeight] * 2; + Stats[Stat.WearWeight] = Stats[Stat.WearWeight] * 2; + Stats[Stat.HandWeight] = Stats[Stat.HandWeight] * 2; + } + + if ((OldLooks_Armour != Looks_Armour) || (OldLooks_Weapon != Looks_Weapon) || (OldLooks_Wings != Looks_Wings) || (OldLight != Light)) + { + UpdateLooks(OldLooks_Weapon); + } + } + private void RefreshItemSetStats() + { + foreach (var s in ItemSets) + { + if (!s.SetComplete) continue; + } + } + public void RefreshStatCaps() + { + foreach (var cap in Settings.ClassBaseStats[(byte)Class].Caps.Values) + { + Stats[cap.Key] = Math.Min(cap.Value, Stats[cap.Key]); + } + + Stats[Stat.HP] = Math.Max(0, Stats[Stat.HP]); + Stats[Stat.MP] = Math.Max(0, Stats[Stat.MP]); + + Stats[Stat.MinAC] = Math.Max(0, Stats[Stat.MinAC]); + Stats[Stat.MaxAC] = Math.Max(0, Stats[Stat.MaxAC]); + Stats[Stat.MinMAC] = Math.Max(0, Stats[Stat.MinMAC]); + Stats[Stat.MaxMAC] = Math.Max(0, Stats[Stat.MaxMAC]); + Stats[Stat.MinDC] = Math.Max(0, Stats[Stat.MinDC]); + Stats[Stat.MaxDC] = Math.Max(0, Stats[Stat.MaxDC]); + Stats[Stat.MinMC] = Math.Max(0, Stats[Stat.MinMC]); + Stats[Stat.MaxMC] = Math.Max(0, Stats[Stat.MaxMC]); + Stats[Stat.MinSC] = Math.Max(0, Stats[Stat.MinSC]); + Stats[Stat.MaxSC] = Math.Max(0, Stats[Stat.MaxSC]); + + Stats[Stat.MinDC] = Math.Min(Stats[Stat.MinDC], Stats[Stat.MaxDC]); + Stats[Stat.MinMC] = Math.Min(Stats[Stat.MinMC], Stats[Stat.MaxMC]); + Stats[Stat.MinSC] = Math.Min(Stats[Stat.MinSC], Stats[Stat.MaxSC]); + } + #endregion + + private void AddTempSkills(IEnumerable skillsToAdd) + { + foreach (var skill in skillsToAdd) + { + Spell spelltype; + bool hasSkill = false; + + if (!Enum.TryParse(skill, out spelltype)) return; + + for (var i = Info.Magics.Count - 1; i >= 0; i--) + if (Info.Magics[i].Spell == spelltype) hasSkill = true; + + if (hasSkill) continue; + + var magic = new UserMagic(spelltype) { IsTempSpell = true }; + Info.Magics.Add(magic); + SendMagicInfo(magic); + } + } + public virtual void SendMagicInfo(UserMagic magic) + { + Enqueue(magic.GetInfo()); + } + private void RemoveTempSkills(IEnumerable skillsToRemove) + { + foreach (var skill in skillsToRemove) + { + if (!Enum.TryParse(skill, out Spell spelltype)) return; + + for (var i = Info.Magics.Count - 1; i >= 0; i--) + { + if (!Info.Magics[i].IsTempSpell || Info.Magics[i].Spell != spelltype) continue; + + Info.Magics.RemoveAt(i); + Enqueue(new S.RemoveMagic { PlaceId = i }); + } + } + } + private void RefreshSkills() + { + int[] spiritSwordLvPlus = { 0, 3, 5, 8 }; + int[] slayingLvPlus = { 5, 6, 7, 8 }; + for (int i = 0; i < Info.Magics.Count; i++) + { + UserMagic magic = Info.Magics[i]; + switch (magic.Spell) + { + case Spell.Fencing: + Stats[Stat.Accuracy] += magic.Level * 3; + // Stats[Stat.MaxAC] += (magic.Level + 1) * 3; + break; + // case Spell.FatalSword: + case Spell.Slaying: + Stats[Stat.Accuracy] += magic.Level; + Stats[Stat.MaxDC] += slayingLvPlus[magic.Level]; + break; + case Spell.SpiritSword: + Stats[Stat.Accuracy] += spiritSwordLvPlus[magic.Level]; + // Stats[Stat.Accuracy] += magic.Level; + // Stats[Stat.MaxDC] += (int)(Stats[Stat.MaxSC] * (magic.Level + 1) * 0.1F); + break; + } + } + } + private void RefreshBuffs() + { + for (int i = 0; i < Buffs.Count; i++) + { + Buff buff = Buffs[i]; + + if (buff.Paused) continue; + + Stats.Add(buff.Stats); + } + } + public void BroadcastColourChange() + { + if (CurrentMap == null) return; + + for (int i = CurrentMap.Players.Count - 1; i >= 0; i--) + { + PlayerObject player = CurrentMap.Players[i]; + if (player == this) continue; + + if (Functions.InRange(CurrentLocation, player.CurrentLocation, Globals.DataRange)) + player.Enqueue(new S.ObjectColourChanged { ObjectID = ObjectID, NameColour = player.GetNameColour(this) }); + } + } + public virtual void GainExp(uint amount) { } + public int ReduceExp(uint amount, uint targetLevel) + { + int expPoint; + + if (Level < targetLevel + 10 || !Settings.ExpMobLevelDifference) + { + expPoint = (int)amount; + } + else + { + expPoint = (int)amount - (int)Math.Round(Math.Max(amount / 15, 1) * ((double)Level - (targetLevel + 10))); + } + + if (expPoint <= 0) expPoint = 1; + + return expPoint; + } + public override void BroadcastInfo() + { + Packet p; + if (CurrentMap == null) return; + + for (int i = CurrentMap.Players.Count - 1; i >= 0; i--) + { + PlayerObject player = CurrentMap.Players[i]; + if (player == this) continue; + + if (Functions.InRange(CurrentLocation, player.CurrentLocation, Globals.DataRange)) + { + p = GetInfoEx(player); + if (p != null) + player.Enqueue(p); + } + } + } + public virtual bool CheckMovement(Point location) + { + return false; + } + public bool Walk(MirDirection dir) + { + if (!CanMove || !CanWalk) + { + Enqueue(new S.UserLocation { Direction = Direction, Location = CurrentLocation }); + return false; + } + + Point location = Functions.PointMove(CurrentLocation, dir, 1); + + if (!CurrentMap.ValidPoint(location)) + { + Enqueue(new S.UserLocation { Direction = Direction, Location = CurrentLocation }); + return false; + } + + Cell cell = CurrentMap.GetCell(location); + if (cell.Objects != null) + { + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + + if (ob.Race == ObjectType.Merchant && Race == ObjectType.Player) + { + NPCObject NPC = (NPCObject)ob; + if (!NPC.Visible || !NPC.VisibleLog[Info.Index]) continue; + } + else + if (!ob.Blocking || (CheckCellTime && ob.CellTime >= Envir.Time)) continue; + + Enqueue(new S.UserLocation { Direction = Direction, Location = CurrentLocation }); + return false; + } + } + + if (Hidden) + { + RemoveBuff(BuffType.Hiding); + } + + Direction = dir; + if (CheckMovement(location)) return false; + + CurrentMap.GetCell(CurrentLocation).Remove(this); + RemoveObjects(dir, 1); + + CurrentLocation = location; + CurrentMap.GetCell(CurrentLocation).Add(this); + AddObjects(dir, 1); + + SafeZoneInfo szi = CurrentMap.GetSafeZone(CurrentLocation); + + if (szi != null) + { + SetBindSafeZone(szi); + InSafeZone = true; + } + else + InSafeZone = false; + + Moved(); + + CellTime = Envir.Time + 500; + ActionTime = Envir.Time + GetDelayTime(MoveDelay); + + Enqueue(new S.UserLocation { Direction = Direction, Location = CurrentLocation }); + Broadcast(new S.ObjectWalk { ObjectID = ObjectID, Direction = Direction, Location = CurrentLocation }); + GetPlayerLocation(); + + cell = CurrentMap.GetCell(CurrentLocation); + + for (int i = 0; i < cell.Objects.Count; i++) + { + if (cell.Objects[i].Race != ObjectType.Spell) continue; + SpellObject ob = (SpellObject)cell.Objects[i]; + + ob.ProcessSpell(this); + //break; + } + + return true; + } + + protected virtual void Moved() + { + } + public override int Pushed(MapObject pusher, MirDirection dir, int distance) + { + int result = 0; + MirDirection reverse = Functions.ReverseDirection(dir); + Cell cell; + for (int i = 0; i < distance; i++) + { + Point location = Functions.PointMove(CurrentLocation, dir, 1); + + if (!CurrentMap.ValidPoint(location)) return result; + + cell = CurrentMap.GetCell(location); + + bool stop = false; + if (cell.Objects != null) + for (int c = 0; c < cell.Objects.Count; c++) + { + MapObject ob = cell.Objects[c]; + if (!ob.Blocking) continue; + stop = true; + } + if (stop) break; + + CurrentMap.GetCell(CurrentLocation).Remove(this); + + Direction = reverse; + RemoveObjects(dir, 1); + CurrentLocation = location; + CurrentMap.GetCell(CurrentLocation).Add(this); + AddObjects(dir, 1); + + Moved(); + + Enqueue(new S.Pushed { Direction = Direction, Location = CurrentLocation }); + Broadcast(new S.ObjectPushed { ObjectID = ObjectID, Direction = Direction, Location = CurrentLocation }); + GetPlayerLocation(); + result++; + } + + if (result > 0) + { + cell = CurrentMap.GetCell(CurrentLocation); + + for (int i = 0; i < cell.Objects.Count; i++) + { + if (cell.Objects[i].Race != ObjectType.Spell) continue; + SpellObject ob = (SpellObject)cell.Objects[i]; + + ob.ProcessSpell(this); + //break; + } + + SafeZoneInfo szi = CurrentMap.GetSafeZone(CurrentLocation); + + if (szi != null) + { + SetBindSafeZone(szi); + InSafeZone = true; + } + else + InSafeZone = false; + } + + ActionTime = Envir.Time + 500; + return result; + } + + public void GetPlayerLocation() + { + if (GroupMembers == null) return; + + for (int i = 0; i < GroupMembers.Count; i++) + { + PlayerObject member = GroupMembers[i]; + + if (member.CurrentMap.Info.BigMap <= 0) continue; + + member.Enqueue(new S.SendMemberLocation { MemberName = Name, MemberLocation = CurrentLocation }); + Enqueue(new S.SendMemberLocation { MemberName = member.Name, MemberLocation = member.CurrentLocation }); + } + Enqueue(new S.SendMemberLocation { MemberName = Name, MemberLocation = CurrentLocation }); + } + + + + public void RangeAttack(MirDirection dir, Point location, uint targetID) + { + LogTime = Envir.Time + Globals.LogDelay; + + if (Info.Equipment[(int)EquipmentSlot.Weapon] == null) return; + ItemInfo RealItem = Functions.GetRealItem(Info.Equipment[(int)EquipmentSlot.Weapon].Info, Info.Level, Info.Class, Envir.ItemInfoList); + + if ((RealItem.Shape / Globals.ClassWeaponCount) != 2) return; + if (Functions.InRange(CurrentLocation, location, Globals.MaxAttackRange) == false) return; + + MapObject target = null; + + if (targetID == ObjectID) + target = this; + else if (targetID > 0) + target = FindObject(targetID, 10); + + if (target != null && target.Dead) return; + + if (target != null && target.Race != ObjectType.Monster && target.Race != ObjectType.Player) return; + + if (target != null && !target.Dead && target.IsAttackTarget(this) && !target.IsFriendlyTarget(this)) + { + if (this is PlayerObject player && + player.PMode == PetMode.FocusMasterTarget) + { + foreach (MonsterObject pet in player.Pets) + pet.Target = target; + } + } + + Direction = dir; + + Enqueue(new S.UserLocation { Direction = Direction, Location = CurrentLocation }); + + UserMagic magic; + Spell spell = Spell.None; + bool focus = false; + + if (target != null && !CanFly(target.CurrentLocation) && (Info.MentalState != 1)) + { + target = null; + targetID = 0; + } + + if (target != null) + { + int distance = Functions.MaxDistance(CurrentLocation, target.CurrentLocation); + + int damage = GetRangeAttackPower(Stats[Stat.MinDC], Stats[Stat.MaxDC], distance); + + int chanceToHit = (100 + Settings.RangeAccuracyBonus - ((100 / Globals.MaxAttackRange) * distance)) * (focus ? 2 : 1); + + if (chanceToHit < 0) chanceToHit = 0; + + int delay = Functions.MaxDistance(CurrentLocation, target.CurrentLocation) * 50 + 500 + 50; //50 MS per Step + + if (Envir.Random.Next(100) < chanceToHit) + { + if (target.CurrentLocation != location) + location = target.CurrentLocation; + + DelayedAction action = new DelayedAction(DelayedType.Damage, Envir.Time + delay, target, damage, DefenceType.ACAgility, true); + ActionList.Add(action); + } + else + { + DelayedAction action = new DelayedAction(DelayedType.DamageIndicator, Envir.Time + delay, target, DamageType.Miss); + ActionList.Add(action); + } + } + else + targetID = 0; + + Enqueue(new S.RangeAttack { TargetID = targetID, Target = location, Spell = spell }); + Broadcast(new S.ObjectRangeAttack { ObjectID = ObjectID, Direction = Direction, Location = CurrentLocation, TargetID = targetID, Target = location, Spell = spell }); + + AttackTime = Envir.Time + AttackSpeed; + ActionTime = Envir.Time + 550; + RegenTime = Envir.Time + RegenDelay; + } + public void Attack(MirDirection dir, Spell spell) + { + LogTime = Envir.Time + Globals.LogDelay; + + if (!CanAttack) + { + switch (spell) + { + case Spell.Slaying: + Slaying = false; + break; + } + + Enqueue(new S.UserLocation { Direction = Direction, Location = CurrentLocation }); + return; + } + + byte level = 0; + UserMagic magic; + + switch (spell) + { + case Spell.Slaying: + if (!Slaying) + spell = Spell.None; + else + { + magic = GetMagic(Spell.Slaying); + level = magic.Level; + } + + Slaying = false; + break; + case Spell.Thrusting: + case Spell.FlamingSword: + magic = GetMagic(spell); + if ((magic == null) || (!FlamingSword && (spell == Spell.FlamingSword))) + { + spell = Spell.None; + break; + } + level = magic.Level; + break; + case Spell.HalfMoon: + magic = GetMagic(spell); + if (magic == null || magic.Info.BaseCost + (magic.Level * magic.Info.LevelCost) > MP) + { + spell = Spell.None; + break; + } + level = magic.Level; + ChangeMP(-(magic.Info.BaseCost + magic.Level * magic.Info.LevelCost)); + break; + default: + spell = Spell.None; + break; + } + + + if (!Slaying) + { + magic = GetMagic(Spell.Slaying); + + if (magic != null && Envir.Random.Next(12) <= magic.Level) + { + Slaying = true; + Enqueue(new S.SpellToggle { ObjectID = ObjectID, Spell = Spell.Slaying, CanUse = Slaying }); + } + } + + Direction = dir; + + Enqueue(new S.UserLocation { Direction = Direction, Location = CurrentLocation }); + Broadcast(new S.ObjectAttack { ObjectID = ObjectID, Direction = Direction, Location = CurrentLocation, Spell = spell, Level = level }); + + AttackTime = Envir.Time + AttackSpeed; + ActionTime = Envir.Time + 550; + RegenTime = Envir.Time + RegenDelay; + + Point target = Functions.PointMove(CurrentLocation, dir, 1); + + //damabeBase = the original damage from your gear (+ bonus from moonlight and darkbody) + int damageBase = GetAttackPower(Stats[Stat.MinDC], Stats[Stat.MaxDC]); + //damageFinal = the damage you're gonna do with skills added + int damageFinal; + + if (!CurrentMap.ValidPoint(target)) + { + switch (spell) + { + case Spell.Thrusting: + goto Thrusting; + case Spell.HalfMoon: + goto HalfMoon; + } + return; + } + + Cell cell = CurrentMap.GetCell(target); + + if (cell.Objects == null) + { + switch (spell) + { + case Spell.Thrusting: + goto Thrusting; + case Spell.HalfMoon: + goto HalfMoon; + } + return; + } + + damageFinal = damageBase;//incase we're not using skills + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + if (ob.Race != ObjectType.Player && ob.Race != ObjectType.Monster) continue; + if (!ob.IsAttackTarget(this)) continue; + + if (ob != null && !ob.Dead && ob.IsAttackTarget(this) && !ob.IsFriendlyTarget(this)) + { + if (this is PlayerObject player && + player.PMode == PetMode.FocusMasterTarget) + { + foreach (MonsterObject pet in player.Pets) + pet.Target = ob; + } + } + + //Only undead targets + if (ob.Undead) + { + damageBase = Math.Min(int.MaxValue, damageBase + Stats[Stat.Holy]); + damageFinal = damageBase;//incase we're not using skills + } + + var defence = DefenceType.ACAgility; + + DelayedAction action; + switch (spell) + { + case Spell.Slaying: + magic = GetMagic(Spell.Slaying); + damageFinal = magic.GetDamage(damageBase); + LevelMagic(magic); + break; + case Spell.Thrusting: + magic = GetMagic(Spell.Thrusting); + LevelMagic(magic); + break; + case Spell.HalfMoon: + magic = GetMagic(Spell.HalfMoon); + LevelMagic(magic); + break; + case Spell.FlamingSword: + magic = GetMagic(Spell.FlamingSword); + damageFinal = magic.GetDamage(damageBase); + FlamingSword = false; + defence = DefenceType.AC; + //action = new DelayedAction(DelayedType.Damage, Envir.Time + 400, ob, damage, DefenceType.Agility, true); + //ActionList.Add(action); + LevelMagic(magic); + break; + } + + //if (ob.Attacked(this, damage, defence) <= 0) break; + action = new DelayedAction(DelayedType.Damage, Envir.Time + 300, ob, damageFinal, defence, true); + ActionList.Add(action); + break; + } + + Thrusting: + if (spell == Spell.Thrusting) + { + target = Functions.PointMove(target, dir, 1); + + if (!CurrentMap.ValidPoint(target)) return; + + cell = CurrentMap.GetCell(target); + + if (cell.Objects == null) return; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + if (ob.Race != ObjectType.Player && ob.Race != ObjectType.Monster) continue; + if (!ob.IsAttackTarget(this)) continue; + + magic = GetMagic(spell); + damageFinal = magic.GetDamage(damageBase); + ob.Attacked(this, damageFinal, DefenceType.Agility, false); + break; + } + + + } + HalfMoon: + if (spell == Spell.HalfMoon) + { + dir = Functions.PreviousDir(dir); + + magic = GetMagic(spell); + damageFinal = magic.GetDamage(damageBase); + for (int i = 0; i < 4; i++) + { + target = Functions.PointMove(CurrentLocation, dir, 1); + dir = Functions.NextDir(dir); + if (target == Front) continue; + + if (!CurrentMap.ValidPoint(target)) continue; + + cell = CurrentMap.GetCell(target); + + if (cell.Objects == null) continue; + + for (int o = 0; o < cell.Objects.Count; o++) + { + MapObject ob = cell.Objects[o]; + if (ob.Race != ObjectType.Player && ob.Race != ObjectType.Monster) continue; + if (!ob.IsAttackTarget(this)) continue; + + ob.Attacked(this, damageFinal, DefenceType.Agility, false); + break; + } + } + } + } + public virtual bool TryMagic() + { + return !Dead && Envir.Time >= ActionTime || Envir.Time >= SpellTime; + } + public virtual void BeginMagic(Spell spell, MirDirection dir, uint targetID, Point location, Boolean spellTargetLock = false) + { + Magic(spell, dir, targetID, location, spellTargetLock); + } + + public int MagicCost(UserMagic magic) + { + int cost = magic.Info.BaseCost + magic.Info.LevelCost * magic.Level; + Spell spell = magic.Spell; + if (spell == Spell.Teleport) + { + if (Stats[Stat.TeleportManaPenaltyPercent] > 0) + { + cost += (cost * Stats[Stat.TeleportManaPenaltyPercent]) / 100; + } + } + + if (Stats[Stat.ManaPenaltyPercent] > 0) + { + cost += (cost * Stats[Stat.ManaPenaltyPercent]) / 100; + } + + return cost; + } + public virtual MapObject DefaultMagicTarget => this; + public void Magic(Spell spell, MirDirection dir, uint targetID, Point location, bool spellTargetLock = false) + { + if (!CanCast) + { + Enqueue(new S.UserLocation { Direction = Direction, Location = CurrentLocation }); + return; + } + + UserMagic magic = GetMagic(spell); + + if (magic == null) + { + Enqueue(new S.UserLocation { Direction = Direction, Location = CurrentLocation }); + return; + } + + if ((location.X != 0) && (location.Y != 0) && magic.Info.Range != 0 && Functions.InRange(CurrentLocation, location, magic.Info.Range) == false) return; + + AttackTime = Envir.Time + MoveDelay; + SpellTime = Envir.Time + 1800; //Spell Delay + + if (spell != Spell.ShoulderDash) + { + ActionTime = Envir.Time + MoveDelay; + } + + LogTime = Envir.Time + Globals.LogDelay; + + long delay = magic.GetDelay(); + + if (magic != null && Envir.Time < (magic.CastTime + delay)) + { + Enqueue(new S.UserLocation { Direction = Direction, Location = CurrentLocation }); + return; + } + + int cost = MagicCost(magic); + + if (cost > MP) + { + Enqueue(new S.UserLocation { Direction = Direction, Location = CurrentLocation }); + return; + } + + RegenTime = Envir.Time + RegenDelay; + ChangeMP(-cost); + + Direction = dir; + if (spell != Spell.ShoulderDash) + Enqueue(new S.UserLocation { Direction = Direction, Location = CurrentLocation }); + + MapObject target = null; + + if (targetID == ObjectID) + { + target = this; + } + else if (targetID > 0) + { + target = FindObject(targetID, 10); + } + + if (target != null && target.Race != ObjectType.Monster && target.Race != ObjectType.Player) + { + target = null; + } + + if (target != null && !target.Dead && target.IsAttackTarget(this) && !target.IsFriendlyTarget(this)) + { + if (this is PlayerObject player && player.PMode == PetMode.FocusMasterTarget) + { + foreach (MonsterObject pet in player.Pets) + pet.Target = target; + } + } + + bool cast = true; + byte level = magic.Level; + switch (spell) + { + case Spell.FireBall: + case Spell.GreatFireBall: + case Spell.FrostCrunch: + if (!Fireball(target, magic)) targetID = 0; + break; + case Spell.Healing: + if (target == null) + { + target = DefaultMagicTarget; + targetID = ObjectID; + } + Healing(target, magic); + break; + case Spell.Repulsion: + case Spell.EnergyRepulsor: + Repulsion(magic); + break; + case Spell.ElectricShock: + ActionList.Add(new DelayedAction(DelayedType.Magic, Envir.Time + 500, magic, target as MonsterObject)); + break; + case Spell.Poisoning: + if (!Poisoning(target, magic)) cast = false; + break; + case Spell.HellFire: + HellFire(magic); + break; + case Spell.ThunderBolt: + ThunderBolt(target, magic); + break; + case Spell.SoulFireBall: + if (!SoulFireball(target, magic, out cast)) targetID = 0; + break; + case Spell.SummonSkeleton: + SummonSkeleton(magic); + break; + case Spell.Teleport: + ActionList.Add(new DelayedAction(DelayedType.Magic, Envir.Time + 200, magic, location)); + break; + case Spell.Hiding: + Hiding(magic); + break; + case Spell.FireBang: + FireBang(magic, spellTargetLock ? (target != null ? target.CurrentLocation : location) : location); + break; + case Spell.MassHiding: + MassHiding(magic, spellTargetLock ? (target != null ? target.CurrentLocation : location) : location, out cast); + break; + case Spell.SoulShield: + case Spell.BlessedArmour: + SoulShield(magic, spellTargetLock ? (target != null ? target.CurrentLocation : location) : location, out cast); + break; + case Spell.FireWall: + FireWall(magic, spellTargetLock ? (target != null ? target.CurrentLocation : location) : location); + break; + case Spell.Lightning: + Lightning(magic); + break; + case Spell.MassHealing: + MassHealing(magic, spellTargetLock ? (target != null ? target.CurrentLocation : location) : location); + break; + case Spell.ShoulderDash: + ShoulderDash(magic); + return; + case Spell.ThunderStorm: + ThunderStorm(magic); + break; + case Spell.MagicShield: + ActionList.Add(new DelayedAction(DelayedType.Magic, Envir.Time + 500, magic, magic.GetPower(GetAttackPower(Stats[Stat.MinMC], Stats[Stat.MaxMC]) + 15))); + break; + case Spell.Purification: + if (target == null) + { + target = DefaultMagicTarget; + targetID = ObjectID; + } + Purification(target, magic); + break; + case Spell.Revelation: + Revelation(target, magic); + break; + case Spell.TrapHexagon: + TrapHexagon(magic, spellTargetLock ? (target != null ? target.CurrentLocation : location) : location, out cast); + break; + case Spell.UltimateEnhancer: + UltimateEnhancer(target, magic, out cast); + break; + default: + cast = false; + break; + } + + if (cast) + { + magic.CastTime = Envir.Time; + } + + Enqueue(new S.Magic { Spell = spell, TargetID = targetID, Target = location, Cast = cast, Level = level }); + Broadcast(new S.ObjectMagic { ObjectID = ObjectID, Direction = Direction, Location = CurrentLocation, Spell = spell, TargetID = targetID, Target = location, Cast = cast, Level = level }); + } + + #region Wizard Skills + private bool Fireball(MapObject target, UserMagic magic) + { + if (target == null || !target.IsAttackTarget(this) || !CanFly(target.CurrentLocation)) return false; + + int damage = magic.GetDamage(GetAttackPower(Stats[Stat.MinMC], Stats[Stat.MaxMC])); + + int delay = Functions.MaxDistance(CurrentLocation, target.CurrentLocation) * 50 + 500; //50 MS per Step + + DelayedAction action = new DelayedAction(DelayedType.Magic, Envir.Time + delay, magic, damage, target, target.CurrentLocation); + + ActionList.Add(action); + + return true; + } + private void Repulsion(UserMagic magic) + { + bool result = false; + for (int d = 0; d <= 1; d++) + { + for (int y = CurrentLocation.Y - d; y <= CurrentLocation.Y + d; y++) + { + if (y < 0) continue; + if (y >= CurrentMap.Height) break; + + for (int x = CurrentLocation.X - d; x <= CurrentLocation.X + d; x += Math.Abs(y - CurrentLocation.Y) == d ? 1 : d * 2) + { + if (x < 0) continue; + if (x >= CurrentMap.Width) break; + + Cell cell = CurrentMap.GetCell(x, y); + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; cell.Objects != null && i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + if (ob.Race != ObjectType.Monster && ob.Race != ObjectType.Player) continue; + + if (!ob.IsAttackTarget(this) || ob.Level >= Level) continue; + + if (Envir.Random.Next(20) >= 6 + magic.Level * 3 + Level - ob.Level) continue; + + int distance = 1 + Math.Max(0, magic.Level - 1) + Envir.Random.Next(2); + MirDirection dir = Functions.DirectionFromPoint(CurrentLocation, ob.CurrentLocation); + + if (ob.Pushed(this, dir, distance) == 0) continue; + + if (ob.Race == ObjectType.Player) + { + SafeZoneInfo szi = CurrentMap.GetSafeZone(ob.CurrentLocation); + + if (szi != null) + { + ((PlayerObject)ob).BindLocation = szi.Location; + ((PlayerObject)ob).BindMapIndex = CurrentMapIndex; + ob.InSafeZone = true; + } + else + ob.InSafeZone = false; + + ob.Attacked(this, magic.GetDamage(0), DefenceType.None, false); + } + result = true; + } + } + } + } + + if (result) LevelMagic(magic); + } + private void ElectricShock(MonsterObject target, UserMagic magic) + { + if (target == null || !target.IsAttackTarget(this)) return; + + if (Envir.Random.Next(4 - magic.Level) > 0) + { + if (Envir.Random.Next(2) == 0) LevelMagic(magic); + return; + } + + LevelMagic(magic); + + if (target.Master == this) + { + target.ShockTime = Envir.Time + (magic.Level * 5 + 10) * 1000; + target.Target = null; + return; + } + + if (Envir.Random.Next(2) > 0) + { + target.ShockTime = Envir.Time + (magic.Level * 5 + 10) * 1000; + target.Target = null; + return; + } + + if (target.Level > Level + 2 || !target.Info.CanTame) return; + + if (Envir.Random.Next(Level + 20 + magic.Level * 5) <= target.Level + 10) + { + if (Envir.Random.Next(5) > 0 && target.Master == null) + { + target.RageTime = Envir.Time + (Envir.Random.Next(20) + 10) * 1000; + target.Target = null; + } + return; + } + + var petBonus = Globals.MaxPets - 3; + + if (Pets.Count(t => !t.Dead) >= magic.Level + petBonus) return; + + int rate = (int)(target.Stats[Stat.HP] / 100); + if (rate <= 2) rate = 2; + else rate *= 2; + + if (Envir.Random.Next(rate) != 0) return; + //else if (Envir.Random.Next(20) == 0) target.Die(); + + if (target.Master != null) + { + target.SetHP(target.Stats[Stat.HP] / 10); + target.Master.Pets.Remove(target); + } + else if (target.Respawn != null) + { + target.Respawn.Count--; + Envir.MonsterCount--; + CurrentMap.MonsterCount--; + target.Respawn = null; + } + + target.Master = this; + //target.HealthChanged = true; + target.BroadcastHealthChange(); + Pets.Add(target); + target.Target = null; + target.RageTime = 0; + target.ShockTime = 0; + target.OperateTime = 0; + target.MaxPetLevel = (byte)(1 + magic.Level * 2); + + if (!Settings.PetSave) + { + target.TameTime = Envir.Time + (Settings.Minute * 60); + } + + target.Broadcast(new S.ObjectName { ObjectID = target.ObjectID, Name = target.Name }); + } + private void HellFire(UserMagic magic) + { + int damage = magic.GetDamage(GetAttackPower(Stats[Stat.MinMC], Stats[Stat.MaxMC])); + + DelayedAction action = new DelayedAction(DelayedType.Magic, Envir.Time + 500, this, magic, damage, CurrentLocation, Direction, 4); + CurrentMap.ActionList.Add(action); + + if (magic.Level != 3) return; + + MirDirection dir = (MirDirection)(((int)Direction + 1) % 8); + action = new DelayedAction(DelayedType.Magic, Envir.Time + 500, this, magic, damage, CurrentLocation, dir, 4); + CurrentMap.ActionList.Add(action); + + dir = (MirDirection)(((int)Direction - 1 + 8) % 8); + action = new DelayedAction(DelayedType.Magic, Envir.Time + 500, this, magic, damage, CurrentLocation, dir, 4); + CurrentMap.ActionList.Add(action); + } + private void ThunderBolt(MapObject target, UserMagic magic) + { + if (target == null || !target.IsAttackTarget(this)) return; + + int damage = magic.GetDamage(GetAttackPower(Stats[Stat.MinMC], Stats[Stat.MaxMC])); + + if (target.Undead) damage = (int)(damage * 1.5F); + + DelayedAction action = new DelayedAction(DelayedType.Magic, Envir.Time + 500, magic, damage, target, target.CurrentLocation); + + ActionList.Add(action); + } + private void FireBang(UserMagic magic, Point location) + { + int damage = magic.GetDamage(GetAttackPower(Stats[Stat.MinMC], Stats[Stat.MaxMC])); + + DelayedAction action = new DelayedAction(DelayedType.Magic, Envir.Time + 500, this, magic, damage, location); + CurrentMap.ActionList.Add(action); + } + private void FireWall(UserMagic magic, Point location) + { + int damage = magic.GetDamage(GetAttackPower(Stats[Stat.MinMC], Stats[Stat.MaxMC])); + + DelayedAction action = new DelayedAction(DelayedType.Magic, Envir.Time + 500, this, magic, damage, location); + CurrentMap.ActionList.Add(action); + } + private void Lightning(UserMagic magic) + { + int damage = magic.GetDamage(GetAttackPower(Stats[Stat.MinMC], Stats[Stat.MaxMC])); + + DelayedAction action = new DelayedAction(DelayedType.Magic, Envir.Time + 500, this, magic, damage, CurrentLocation, Direction); + CurrentMap.ActionList.Add(action); + } + private void ThunderStorm(UserMagic magic) + { + int damage = magic.GetDamage(GetAttackPower(Stats[Stat.MinMC], Stats[Stat.MaxMC])); + + DelayedAction action = new DelayedAction(DelayedType.Magic, Envir.Time + 500, this, magic, damage, CurrentLocation); + CurrentMap.ActionList.Add(action); + } + + #endregion + + #region Taoist Skills + private void Healing(MapObject target, UserMagic magic) + { + if (target == null || !target.IsFriendlyTarget(this)) return; + + int health = magic.GetDamage(GetAttackPower(Stats[Stat.MinSC], Stats[Stat.MaxSC]) * 2) + Level; + + DelayedAction action = new DelayedAction(DelayedType.Magic, Envir.Time + 500, magic, health, target); + + ActionList.Add(action); + } + private bool Poisoning(MapObject target, UserMagic magic) + { + if (target == null || !target.IsAttackTarget(this)) return false; + + UserItem item = GetPoison(1); + if (item == null) return false; + + int power = magic.GetDamage(GetAttackPower(Stats[Stat.MinSC], Stats[Stat.MaxSC])); + + DelayedAction action = new DelayedAction(DelayedType.Magic, Envir.Time + 500, magic, power, target, item); + ActionList.Add(action); + ConsumeItem(item, 1); + return true; + } + private bool SoulFireball(MapObject target, UserMagic magic, out bool cast) + { + cast = false; + UserItem item = null; + if (item == null) return false; + cast = true; + + if (target == null || !target.IsAttackTarget(this) || !CanFly(target.CurrentLocation)) return false; + + int damage = magic.GetDamage(GetAttackPower(Stats[Stat.MinSC], Stats[Stat.MaxSC])); + + int delay = Functions.MaxDistance(CurrentLocation, target.CurrentLocation) * 50 + 500; //50 MS per Step + + DelayedAction action = new DelayedAction(DelayedType.Magic, Envir.Time + delay, magic, damage, target, target.CurrentLocation); + + ActionList.Add(action); + ConsumeItem(item, 1); + + return true; + } + private void SummonSkeleton(UserMagic magic) + { + MonsterObject monster; + for (int i = 0; i < Pets.Count; i++) + { + monster = Pets[i]; + if ((monster.Info.Name != Settings.SkeletonName) || monster.Dead) continue; + if (monster.Node == null) continue; + monster.ActionList.Add(new DelayedAction(DelayedType.Recall, Envir.Time + 500)); + return; + } + + if (Pets.Count(x => x.Race == ObjectType.Monster) >= 2) return; + + UserItem item = null; + if (item == null) return; + + MonsterInfo info = Envir.GetMonsterInfo(Settings.SkeletonName); + if (info == null) return; + + LevelMagic(magic); + ConsumeItem(item, 1); + + monster = MonsterObject.GetMonster(info); + monster.PetLevel = magic.Level; + monster.Master = this; + monster.MaxPetLevel = (byte)(4 + magic.Level); + monster.ActionTime = Envir.Time + 1000; + monster.RefreshNameColour(false); + + //Pets.Add(monster); + + DelayedAction action = new DelayedAction(DelayedType.Magic, Envir.Time + 500, this, magic, monster, Front); + CurrentMap.ActionList.Add(action); + } + private void Purification(MapObject target, UserMagic magic) + { + if (target == null || !target.IsFriendlyTarget(this)) return; + + DelayedAction action = new DelayedAction(DelayedType.Magic, Envir.Time + 500, magic, target); + + ActionList.Add(action); + } + private void Hiding(UserMagic magic) + { + UserItem item = null; + if (item == null) return; + + ConsumeItem(item, 1); + + DelayedAction action = new DelayedAction(DelayedType.Magic, Envir.Time + 500, magic, GetAttackPower(Stats[Stat.MinSC], Stats[Stat.MaxSC]) + (magic.Level + 1) * 5); + ActionList.Add(action); + + } + private void MassHiding(UserMagic magic, Point location, out bool cast) + { + cast = false; + UserItem item = null; + if (item == null) return; + cast = true; + + int delay = Functions.MaxDistance(CurrentLocation, location) * 50 + 500; //50 MS per Step + + DelayedAction action = new DelayedAction(DelayedType.Magic, Envir.Time + delay, this, magic, GetAttackPower(Stats[Stat.MinSC], Stats[Stat.MaxSC]) / 2 + (magic.Level + 1) * 2, location); + CurrentMap.ActionList.Add(action); + } + private void SoulShield(UserMagic magic, Point location, out bool cast) + { + cast = false; + UserItem item = null; + if (item == null) return; + cast = true; + + int delay = Functions.MaxDistance(CurrentLocation, location) * 50 + 500; //50 MS per Step + + DelayedAction action = new DelayedAction(DelayedType.Magic, Envir.Time + delay, this, magic, GetAttackPower(Stats[Stat.MinSC], Stats[Stat.MaxSC]) * 4 + (magic.Level + 1) * 50, location); + CurrentMap.ActionList.Add(action); + + ConsumeItem(item, 1); + } + private void MassHealing(UserMagic magic, Point location) + { + int value = magic.GetDamage(GetAttackPower(Stats[Stat.MinSC], Stats[Stat.MaxSC])); + + DelayedAction action = new DelayedAction(DelayedType.Magic, Envir.Time + 500, this, magic, value, location); + CurrentMap.ActionList.Add(action); + } + private void Revelation(MapObject target, UserMagic magic) + { + if (target == null) return; + + int value = GetAttackPower(Stats[Stat.MinSC], Stats[Stat.MaxSC]) + magic.GetPower(); + + DelayedAction action = new DelayedAction(DelayedType.Magic, Envir.Time + 500, magic, value, target); + + ActionList.Add(action); + } + + private void TrapHexagon(UserMagic magic, Point location, out bool cast) + { + cast = false; + bool anyTargetsFound = false; + for (int x = location.X - 1; x <= location.X + 1; x++) + { + if (x < 0 || x >= CurrentMap.Width) continue; + for (int y = location.Y - 1; y < location.Y + 1; y++) + { + if (y < 0 || y >= CurrentMap.Height) continue; + if (!CurrentMap.ValidPoint(x, y)) continue; + var cell = CurrentMap.GetCell(x, y); + if (cell == null || + cell.Objects == null || + cell.Objects.Count <= 0) continue; + foreach (var target in cell.Objects) + { + switch (target.Race) + { + case ObjectType.Monster: + if (!target.IsAttackTarget(this)) continue; + if (target.Level > Level + 2) continue; + anyTargetsFound = true; + break; + } + } + } + } + if (!anyTargetsFound) + return; + + UserItem item = null; + //Point location = target.CurrentLocation; + + if (item == null) return; + + LevelMagic(magic); + uint duration = (uint)((magic.Level * 5 + 10) * 1000); + int value = (int)duration; + + DelayedAction action = new DelayedAction(DelayedType.Magic, Envir.Time + 500, this, magic, value, location); + CurrentMap.ActionList.Add(action); + + ConsumeItem(item, 1); + cast = true; + } + private void UltimateEnhancer(MapObject target, UserMagic magic, out bool cast) + { + cast = false; + + if (target == null || target.Node == null || !target.IsFriendlyTarget(this)) return; + UserItem item = null; + if (item == null) return; + + int expiretime = GetAttackPower(Stats[Stat.MinSC], Stats[Stat.MaxSC]) * 4 + (magic.Level + 1) * 50; + int value = Stats[Stat.MaxSC] >= 5 ? Math.Min(8, Stats[Stat.MaxSC] / 5) : 1; + + switch (target.Race) + { + case ObjectType.Monster: + case ObjectType.Player: + //Only targets + if (target.IsFriendlyTarget(this)) + { + var stats = new Stats(); + + if (target.Race == ObjectType.Monster || ((HumanObject)target).Class == MirClass.Warrior) + { + stats[Stat.MaxDC] = value; + } + else if (((HumanObject)target).Class == MirClass.Wizard) + { + stats[Stat.MaxMC] = value; + } + else if (((HumanObject)target).Class == MirClass.Taoist) + { + stats[Stat.MaxSC] = value; + } + + target.AddBuff(BuffType.UltimateEnhancer, this, Settings.Second * expiretime, stats); + target.OperateTime = 0; + LevelMagic(magic); + ConsumeItem(item, 1); + cast = true; + } + break; + } + } + + #endregion + + #region Warrior Skills + + private void ShoulderDash(UserMagic magic) + { + if (!CanWalk) + { + return; + } + + Point _nextLocation; + MapObject _target = null; + + bool _blocking = false; + bool _canDash = false; + + int _cellsTravelled = 0; + int dist = Envir.Random.Next(2) + magic.Level + 2; + + ActionTime = Envir.Time + MoveDelay; + + for (int i = 0; i < dist; i++) + { + if (_blocking) + { + break; + } + + _nextLocation = Functions.PointMove(CurrentLocation, Direction, 1); + + if (!CurrentMap.ValidPoint(_nextLocation) || CurrentMap.GetSafeZone(_nextLocation) != null) + { + break; + } + + // acquire target + if (i == 0) + { + Cell targetCell = CurrentMap.GetCell(_nextLocation); + + if (targetCell.Objects != null) + { + int cellCnt = targetCell.Objects.Count; + + for (int j = 0; j < cellCnt; j++) + { + MapObject ob = targetCell.Objects[j]; + + if ((ob.Race == ObjectType.Player || + ob.Race == ObjectType.Monster) && + ob.IsAttackTarget(this) && + ob.Level < Level) + { + _target = ob; + break; + } + + if(ob.Blocking) + { + _blocking = true; + break; + } + } + } + + if (_blocking) + { + break; + } + } + + // try to dash + Cell dashCell = CurrentMap.GetCell(_nextLocation); + _canDash = false; + + if (_target == null) + { + if (dashCell.Objects != null) + { + int cellCnt = dashCell.Objects.Count; + + for (int k = 0; k < cellCnt; k++) + { + MapObject ob = dashCell.Objects[k]; + + if (ob.Blocking) + { + _blocking = true; + break; + } + } + + if(!_blocking) + { + _canDash = true; + } + } + else + { + _canDash = true; + } + } + else + { + // try to push + if (_target.Pushed(this, Direction, 1) == 0) + { + _blocking = true; + } + else + { + _canDash = true; + } + } + + if (_canDash) + { + CurrentMap.GetCell(CurrentLocation).Remove(this); + RemoveObjects(Direction, 1); + + Enqueue(new S.UserDash { Direction = Direction, Location = _nextLocation }); + Broadcast(new S.ObjectDash { ObjectID = ObjectID, Direction = Direction, Location = _nextLocation }); + + CurrentMap.GetCell(_nextLocation).Add(this); + AddObjects(Direction, 1); + + // dash interrupt + Cell cell = CurrentMap.GetCell(_nextLocation); + for (int l = 0; l < cell.Objects.Count; l++) + { + if (cell.Objects[l].Race == ObjectType.Spell) + { + SpellObject ob = (SpellObject)cell.Objects[l]; + + if (IsAttackTarget(ob.Caster)) + { + switch(ob.Spell) + { + case Spell.FireWall: + Attacked((PlayerObject)ob.Caster, ob.Value, DefenceType.MAC, false); + _blocking = true; + break; + } + } + } + } + + CurrentLocation = _nextLocation; + _cellsTravelled++; + } + } + + if (_cellsTravelled == 0) + { + Enqueue(new S.UserDashFail { Direction = Direction, Location = CurrentLocation }); + Broadcast(new S.ObjectDashFail { ObjectID = ObjectID, Direction = Direction, Location = CurrentLocation }); + + if (InSafeZone) + { + ReceiveChat("No pushing in the safezone. tut tut.", ChatType.System); + } + else + { + ReceiveChat("Not enough pushing Power.", ChatType.System); + } + } + else + { + _target?.Attacked(this, magic.GetDamage(0), DefenceType.None, false); + LevelMagic(magic); + + Broadcast(new S.ObjectDash { ObjectID = ObjectID, Direction = Direction, Location = Front }); + } + + long now = Envir.Time; + + magic.CastTime = now; + Enqueue(new S.MagicCast { Spell = magic.Spell }); + + CellTime = now + 500; + } + #endregion + protected void CompleteMagic(IList data) + { + UserMagic magic = (UserMagic)data[0]; + int value; + MapObject target; + Point targetLocation; + Point location; + MonsterObject monster; + + switch (magic.Spell) + { + #region FireBall, GreatFireBall, ThunderBolt, SoulFireBall, FlameDisruptor + + case Spell.FireBall: + case Spell.GreatFireBall: + case Spell.ThunderBolt: + case Spell.SoulFireBall: + value = (int)data[1]; + target = (MapObject)data[2]; + targetLocation = (Point)data[3]; + + if (target == null || !target.IsAttackTarget(this) || target.CurrentMap != CurrentMap || target.Node == null || !Functions.InRange(target.CurrentLocation, targetLocation, 2)) return; + if (target.Attacked(this, value, DefenceType.MAC, false) > 0) LevelMagic(magic); + break; + + #endregion + + + #region FrostCrunch + case Spell.FrostCrunch: + value = (int)data[1]; + target = (MapObject)data[2]; + targetLocation = (Point)data[3]; + + if (target == null || !target.IsAttackTarget(this) || target.CurrentMap != CurrentMap || target.Node == null || !Functions.InRange(target.CurrentLocation, targetLocation, 2)) return; + if (target.Attacked(this, value, DefenceType.MAC, false) > 0) + { + if (Level + (target.Race == ObjectType.Player ? 2 : 10) >= target.Level && Envir.Random.Next(target.Race == ObjectType.Player ? 100 : 20) <= magic.Level) + { + target.ApplyPoison(new Poison + { + Owner = this, + Duration = target.Race == ObjectType.Player ? 4 : 5 + Envir.Random.Next(5), + PType = PoisonType.Slow, + TickSpeed = 1000, + }, this); + target.OperateTime = 0; + } + + if (Level + (target.Race == ObjectType.Player ? 2 : 10) >= target.Level && Envir.Random.Next(target.Race == ObjectType.Player ? 100 : 40) <= magic.Level) + { + target.ApplyPoison(new Poison + { + Owner = this, + Duration = target.Race == ObjectType.Player ? 2 : 5 + Envir.Random.Next(Stats[Stat.Freezing]), + PType = PoisonType.Frozen, + TickSpeed = 1000, + }, this); + target.OperateTime = 0; + } + + LevelMagic(magic); + } + break; + + #endregion + + #region Healing + + case Spell.Healing: + value = (int)data[1]; + target = (MapObject)data[2]; + + if (target == null || !target.IsFriendlyTarget(this) || target.CurrentMap != CurrentMap || target.Node == null) return; + if (target.Health >= target.MaxHealth) return; + target.HealAmount = (ushort)Math.Min(ushort.MaxValue, target.HealAmount + value); + target.OperateTime = 0; + LevelMagic(magic); + break; + + #endregion + + #region ElectricShock + + case Spell.ElectricShock: + monster = (MonsterObject)data[1]; + if (monster == null || !monster.IsAttackTarget(this) || monster.CurrentMap != CurrentMap || monster.Node == null) return; + ElectricShock(monster, magic); + break; + + #endregion + + #region Poisoning + + case Spell.Poisoning: + value = (int)data[1]; + target = (MapObject)data[2]; + UserItem item = (UserItem)data[3]; + + if (target == null || !target.IsAttackTarget(this) || target.CurrentMap != CurrentMap || target.Node == null) return; + + switch (item.Info.Shape) + { + case 1: + target.ApplyPoison(new Poison + { + Duration = (value * 2) + ((magic.Level + 1) * 7), + Owner = this, + PType = PoisonType.Green, + TickSpeed = 2000, + Value = value / 15 + magic.Level + 1 + Envir.Random.Next(Stats[Stat.PoisonAttack]) + }, this); + break; + case 2: + target.ApplyPoison(new Poison + { + Duration = (value * 2) + (magic.Level + 1) * 7, + Owner = this, + PType = PoisonType.Red, + TickSpeed = 2000, + }, this); + break; + } + target.OperateTime = 0; + + LevelMagic(magic); + break; + + #endregion + + #region Teleport + case Spell.Teleport: + if (CurrentMap.Info.NoTeleport) + { + ReceiveChat(("You cannot teleport on this map"), ChatType.System); + return; + } + + if (!MagicTeleport(magic)) + return; + + LevelMagic(magic); + + break; + #endregion + + #region Hiding + + case Spell.Hiding: + { + value = (int)data[1]; + + AddBuff(BuffType.Hiding, this, Settings.Second * value, new Stats()); + + LevelMagic(magic); + } + break; + + #endregion + + #region MagicShield + + case Spell.MagicShield: + { + if (HasBuff(BuffType.MagicShield, out _)) return; + + LevelMagic(magic); + AddBuff(BuffType.MagicShield, this, Settings.Second * (int)data[1], new Stats { [Stat.DamageReductionPercent] = (magic.Level + 2) * 10 }); + } + break; + + #endregion + + #region Purification + + case Spell.Purification: + target = (MapObject)data[1]; + + if (target == null || !target.IsFriendlyTarget(this) || target.CurrentMap != CurrentMap || target.Node == null) return; + if (Envir.Random.Next(4) > magic.Level) return; + + for (int i = 0; i < target.Buffs.Count; i++) + { + var buff = target.Buffs[i]; + + if (!buff.Properties.HasFlag(BuffProperty.Debuff)) continue; + + target.RemoveBuff(buff.Type); + } + + target.PoisonList.Clear(); + target.OperateTime = 0; + + LevelMagic(magic); + break; + + #endregion + + #region Revelation + + case Spell.Revelation: + value = (int)data[1]; + target = (MapObject)data[2]; + if (target == null || target.CurrentMap != CurrentMap || target.Node == null) return; + if (target.Race != ObjectType.Player && target.Race != ObjectType.Monster) return; + if (Envir.Random.Next(4) > magic.Level || Envir.Time < target.RevTime) return; + + target.RevTime = Envir.Time + value * 1000; + target.OperateTime = 0; + target.BroadcastHealthChange(); + + LevelMagic(magic); + break; + + #endregion + + #region Hallucination + + case Spell.Hallucination: + value = (int)data[1]; + target = (MapObject)data[2]; + + if (target == null || !target.IsAttackTarget(this) || target.CurrentMap != CurrentMap || target.Node == null || + Functions.MaxDistance(CurrentLocation, target.CurrentLocation) > 7 || Envir.Random.Next(Level + 20 + magic.Level * 5) <= target.Level + 10) return; + item = null; + if (item == null) return; + + ((MonsterObject)target).HallucinationTime = Envir.Time + (Envir.Random.Next(20) + 10) * 1000; + target.Target = null; + + ConsumeItem(item, 1); + + LevelMagic(magic); + break; + + #endregion + + } + } + protected void CompleteAttack(IList data) + { + MapObject target = (MapObject)data[0]; + int damage = (int)data[1]; + DefenceType defence = (DefenceType)data[2]; + bool damageWeapon = (bool)data[3]; + UserMagic userMagic = null; + bool finalHit = false; + if (data.Count >= 5) + userMagic = (UserMagic)data[4]; + if (data.Count >= 6) + finalHit = (bool)data[5]; + if (target == null || !target.IsAttackTarget(this) || target.CurrentMap != CurrentMap || target.Node == null) return; + + if (target.Attacked(this, damage, defence, damageWeapon) <= 0) return; + + //Level Fencing / SpiritSword + foreach (UserMagic magic in Info.Magics) + { + switch (magic.Spell) + { + case Spell.Fencing: + case Spell.SpiritSword: + LevelMagic(magic); + break; + } + } + } + protected void CompleteDamageIndicator(IList data) + { + MapObject target = (MapObject)data[0]; + DamageType type = (DamageType)data[1]; + + if (target == null || !target.IsAttackTarget(this) || target.CurrentMap != CurrentMap || target.Node == null) return; + + target.BroadcastDamageIndicator(type); + } + protected void CompleteSpellEffect(IList data) + { + MapObject target = (MapObject)data[0]; + SpellEffect effect = (SpellEffect)data[1]; + + if (target == null || !target.IsAttackTarget(this) || target.CurrentMap != CurrentMap || target.Node == null) return; + + S.ObjectEffect p = new S.ObjectEffect { ObjectID = target.ObjectID, Effect = effect }; + CurrentMap.Broadcast(p, target.CurrentLocation); + } + protected void CompletePoison(IList data) + { + MapObject target = (MapObject)data[0]; + PoisonType pt = (PoisonType)data[1]; + SpellEffect sp = (SpellEffect)data[2]; + int duration = (int)data[3]; + int tickSpeed = (int)data[4]; + + if (target == null) return; + + target.ApplyPoison(new Poison { PType = pt, Duration = duration, TickSpeed = tickSpeed }, this); + target.Broadcast(new S.ObjectEffect { ObjectID = target.ObjectID, Effect = sp }); + } + protected UserItem GetPoison(int count, byte shape = 0) + { + return null; + } + public UserMagic GetMagic(Spell spell) + { + for (int i = 0; i < Info.Magics.Count; i++) + { + UserMagic magic = Info.Magics[i]; + if (magic.Spell != spell) continue; + return magic; + } + + return null; + } + public void LevelMagic(UserMagic magic) + { + byte exp = (byte)(Envir.Random.Next(3) + 1); + + exp *= (byte)Math.Min(byte.MaxValue, Stats[Stat.SkillGainMultiplier]); + + if (Level == ushort.MaxValue) exp = byte.MaxValue; + + int oldLevel = magic.Level; + + switch (magic.Level) + { + case 0: + if (Level < magic.Info.Level1) + return; + + magic.Experience += exp; + if (magic.Experience >= magic.Info.Need1) + { + magic.Level++; + magic.Experience = (ushort)(magic.Experience - magic.Info.Need1); + RefreshStats(); + } + break; + case 1: + if (Level < magic.Info.Level2) + return; + + magic.Experience += exp; + if (magic.Experience >= magic.Info.Need2) + { + magic.Level++; + magic.Experience = (ushort)(magic.Experience - magic.Info.Need2); + RefreshStats(); + } + break; + case 2: + if (Level < magic.Info.Level3) + return; + + magic.Experience += exp; + if (magic.Experience >= magic.Info.Need3) + { + magic.Level++; + magic.Experience = 0; + RefreshStats(); + } + break; + default: + return; + } + + if (oldLevel != magic.Level) + { + long delay = magic.GetDelay(); + Enqueue(new S.MagicDelay { ObjectID = ObjectID, Spell = magic.Spell, Delay = delay }); + } + + Enqueue(new S.MagicLeveled { ObjectID = ObjectID, Spell = magic.Spell, Level = magic.Level, Experience = magic.Experience }); + + } + public virtual bool MagicTeleport(UserMagic magic) + { + return false; + } + public override bool Teleport(Map temp, Point location, bool effects = true, byte effectnumber = 0) + { + Map oldMap = CurrentMap; + Point oldLocation = CurrentLocation; + + bool mapChanged = temp != oldMap; + + if (!base.Teleport(temp, location, effects)) return false; + + Enqueue(new S.MapChanged + { + MapIndex = CurrentMap.Info.Index, + FileName = CurrentMap.Info.FileName, + Title = CurrentMap.Info.Title, + MiniMap = CurrentMap.Info.MiniMap, + BigMap = CurrentMap.Info.BigMap, + Lights = CurrentMap.Info.Light, + Location = CurrentLocation, + Direction = Direction, + MapDarkLight = CurrentMap.Info.MapDarkLight, + Music = CurrentMap.Info.Music + }); + + if (effects) Enqueue(new S.ObjectTeleportIn { ObjectID = ObjectID, Type = effectnumber }); + + if (CheckStacked()) + { + StackingTime = Envir.Time + 1000; + Stacking = true; + } + + SafeZoneInfo szi = CurrentMap.GetSafeZone(CurrentLocation); + + if (szi != null) + { + SetBindSafeZone(szi); + InSafeZone = true; + } + else + InSafeZone = false; + + return true; + } + protected virtual void SetBindSafeZone(SafeZoneInfo szi) { } + public virtual bool AtWar(HumanObject attacker) + { + return false; + } + protected Packet GetUpdateInfo() + { + return new S.PlayerUpdate + { + ObjectID = ObjectID, + Weapon = Looks_Weapon, + WeaponEffect = Looks_WeaponEffect, + Armour = Looks_Armour, + Light = Light, + WingEffect = Looks_Wings + }; + } + protected virtual void UpdateLooks(short OldLooks_Weapon) + { + Broadcast(GetUpdateInfo()); + } + public Packet GetInfoEx(HumanObject player) + { + var p = (S.ObjectPlayer)GetInfo(); + + if (p != null) + { + p.NameColour = player.GetNameColour(this); + } + + return p; + } + public override bool IsAttackTarget(HumanObject attacker) + { + return true; + } + public override bool IsAttackTarget(MonsterObject attacker) + { + return true; + } + + public override bool IsFriendlyTarget(HumanObject ally) + { + return true; + } + public override bool IsFriendlyTarget(MonsterObject ally) + { + return true; + } + public override void ReceiveChat(string text, ChatType type) { } + public override Packet GetInfo() { return null; } + public override int Attacked(HumanObject attacker, int damage, DefenceType type = DefenceType.ACAgility, bool damageWeapon = true) + { + var armour = GetArmour(type, attacker, out bool hit); + + if (!hit) + { + return 0; + } + + armour = (int)Math.Max(int.MinValue, (Math.Min(int.MaxValue, (decimal)(armour * ArmourRate)))); + damage = (int)Math.Max(int.MinValue, (Math.Min(int.MaxValue, (decimal)(damage * DamageRate)))); + + if (damageWeapon) + attacker.DamageWeapon(); + + damage += attacker.Stats[Stat.AttackBonus]; + + //MagicShield, ElementalBarrier + if (Stats[Stat.DamageReductionPercent] > 0) + { + damage -= (damage * Stats[Stat.DamageReductionPercent]) / 100; + } + + if (armour >= damage) + { + BroadcastDamageIndicator(DamageType.Miss); + return 0; + } + + //EnergyShield + if (Stats[Stat.EnergyShieldPercent] > 0) + { + if (Envir.Random.Next(100) < Stats[Stat.EnergyShieldPercent]) + { + if (HP + (Stats[Stat.EnergyShieldHPGain]) >= Stats[Stat.HP]) + SetHP(Stats[Stat.HP]); + else + ChangeHP(Stats[Stat.EnergyShieldHPGain]); + } + } + + if (HasBuff(BuffType.MagicShield, out Buff magicShield)) + { + var duration = (int)Math.Min(int.MaxValue, magicShield.ExpireTime - ((damage - armour) * 60)); + AddBuff(BuffType.MagicShield, this, duration, null); + } + + if (attacker.Stats[Stat.HPDrainRatePercent] > 0 && damageWeapon) + { + attacker.HpDrain += Math.Max(0, ((float)(damage - armour) / 100) * attacker.Stats[Stat.HPDrainRatePercent]); + if (attacker.HpDrain > 2) + { + int HpGain = (int)Math.Floor(attacker.HpDrain); + attacker.ChangeHP(HpGain); + attacker.HpDrain -= HpGain; + } + } + + LastHitter = attacker; + LastHitTime = Envir.Time + 10000; + RegenTime = Envir.Time + RegenDelay; + LogTime = Envir.Time + Globals.LogDelay; + + if (Envir.Time > BrownTime && PKPoints < 200 && !AtWar(attacker)) + attacker.BrownTime = Envir.Time + Settings.Minute; + + ushort LevelOffset = (byte)(Level > attacker.Level ? 0 : Math.Min(10, attacker.Level - Level)); + + ApplyNegativeEffects(attacker, type, LevelOffset); + + DamageDura(); + Enqueue(new S.Struck { AttackerID = attacker.ObjectID }); + Broadcast(new S.ObjectStruck { ObjectID = ObjectID, AttackerID = attacker.ObjectID, Direction = Direction, Location = CurrentLocation }); + + BroadcastDamageIndicator(DamageType.Hit, armour - damage); + + ChangeHP(armour - damage); + return damage - armour; + } + public override int Attacked(MonsterObject attacker, int damage, DefenceType type = DefenceType.ACAgility) + { + var armour = GetArmour(type, attacker, out bool hit); + + if (!hit) + { + return 0; + } + + armour = (int)Math.Max(int.MinValue, (Math.Min(int.MaxValue, (decimal)(armour * ArmourRate)))); + damage = (int)Math.Max(int.MinValue, (Math.Min(int.MaxValue, (decimal)(damage * DamageRate)))); + + //MagicShield, ElementalBarrier + if (Stats[Stat.DamageReductionPercent] != 0) + { + damage -= (damage * Stats[Stat.DamageReductionPercent]) / 100; + } + + if (armour >= damage) + { + BroadcastDamageIndicator(DamageType.Miss); + return 0; + } + + if (Stats[Stat.EnergyShieldPercent] > 0) + { + if (Envir.Random.Next(100) < Stats[Stat.EnergyShieldPercent]) + { + if (HP + (Stats[Stat.EnergyShieldHPGain]) >= Stats[Stat.HP]) + SetHP(Stats[Stat.HP]); + else + ChangeHP(Stats[Stat.EnergyShieldHPGain]); + } + } + + if (HasBuff(BuffType.MagicShield, out Buff magicShield)) + { + var duration = (int)Math.Min(int.MaxValue, magicShield.ExpireTime - ((damage - armour) * 60)); + AddBuff(BuffType.MagicShield, this, duration, null); + } + + LastHitter = attacker.Master ?? attacker; + LastHitTime = Envir.Time + 10000; + RegenTime = Envir.Time + RegenDelay; + LogTime = Envir.Time + Globals.LogDelay; + + DamageDura(); + + if (StruckTime < Envir.Time) + { + Enqueue(new S.Struck { AttackerID = attacker.ObjectID }); + Broadcast(new S.ObjectStruck { ObjectID = ObjectID, AttackerID = attacker.ObjectID, Direction = Direction, Location = CurrentLocation }); + StruckTime = Envir.Time + 500; + } + + BroadcastDamageIndicator(DamageType.Hit, armour - damage); + + ChangeHP(armour - damage); + return damage - armour; + } + public override int Struck(int damage, DefenceType type = DefenceType.ACAgility) + { + int armour = 0; + + switch (type) + { + case DefenceType.ACAgility: + armour = GetAttackPower(Stats[Stat.MinAC], Stats[Stat.MaxAC]); + break; + case DefenceType.AC: + armour = GetAttackPower(Stats[Stat.MinAC], Stats[Stat.MaxAC]); + break; + case DefenceType.MACAgility: + armour = GetAttackPower(Stats[Stat.MinMAC], Stats[Stat.MaxMAC]); + break; + case DefenceType.MAC: + armour = GetAttackPower(Stats[Stat.MinMAC], Stats[Stat.MaxMAC]); + break; + case DefenceType.Agility: + break; + } + + armour = (int)Math.Max(int.MinValue, (Math.Min(int.MaxValue, (decimal)(armour * ArmourRate)))); + damage = (int)Math.Max(int.MinValue, (Math.Min(int.MaxValue, (decimal)(damage * DamageRate)))); + + //MagicShield, ElementalBarrier + if (Stats[Stat.DamageReductionPercent] != 0) + { + damage -= (damage * Stats[Stat.DamageReductionPercent]) / 100; + } + + if (armour >= damage) return 0; + + if (HasBuff(BuffType.MagicShield, out Buff magicShield)) + { + var duration = (int)Math.Min(int.MaxValue, magicShield.ExpireTime - ((damage - armour) * 60)); + AddBuff(BuffType.MagicShield, this, duration, null); + } + + RegenTime = Envir.Time + RegenDelay; + LogTime = Envir.Time + Globals.LogDelay; + + DamageDura(); + Enqueue(new S.Struck { AttackerID = 0 }); + Broadcast(new S.ObjectStruck { ObjectID = ObjectID, AttackerID = 0, Direction = Direction, Location = CurrentLocation }); + + ChangeHP(armour - damage); + return damage - armour; + } + + public override void ApplyPoison(Poison p, MapObject Caster = null, bool NoResist = false, bool ignoreDefence = true) + { + if (Caster != null && !NoResist) + { + if (((Caster.Race != ObjectType.Player) || Settings.PvpCanResistPoison) && (Envir.Random.Next(Settings.PoisonResistWeight) < Stats[Stat.PoisonResist])) + { + return; + } + } + + if (!ignoreDefence && (p.PType == PoisonType.Green)) + { + int armour = GetAttackPower(Stats[Stat.MinMAC], Stats[Stat.MaxMAC]); + + if (p.Value < armour) + p.PType = PoisonType.None; + else + p.Value -= armour; + } + + if (p.Owner != null && p.Owner is PlayerObject player && Envir.Time > BrownTime && PKPoints < 200) + { + bool ownerBrowns = true; + if (player.MyGuild != null && MyGuild != null && MyGuild.IsAtWar() && MyGuild.IsEnemy(player.MyGuild)) + ownerBrowns = false; + + if (ownerBrowns && !player.WarZone) + p.Owner.BrownTime = Envir.Time + Settings.Minute; + } + + if ((p.PType == PoisonType.Green) || (p.PType == PoisonType.Red)) p.Duration = Math.Max(0, p.Duration - Stats[Stat.PoisonRecovery]); + if (p.Duration == 0) return; + if (p.PType == PoisonType.None) return; + + for (int i = 0; i < PoisonList.Count; i++) + { + if (PoisonList[i].PType != p.PType) continue; + if ((PoisonList[i].PType == PoisonType.Green) && (PoisonList[i].Value > p.Value)) return;//cant cast weak poison to cancel out strong poison + if ((PoisonList[i].PType != PoisonType.Green) && ((PoisonList[i].Duration - PoisonList[i].Time) > p.Duration)) return;//cant cast 1 second poison to make a 1minute poison go away! + if ((PoisonList[i].PType == PoisonType.Frozen) || (PoisonList[i].PType == PoisonType.Slow) || (PoisonList[i].PType == PoisonType.Paralysis)) return;//prevents mobs from being perma frozen/slowed + + ReceiveChat(GameLanguage.BeenPoisoned, ChatType.System2); + PoisonList[i] = p; + return; + } + + switch (p.PType) + { + default: + { + ReceiveChat(GameLanguage.BeenPoisoned, ChatType.System2); + } + break; + } + + PoisonList.Add(p); + } + + public override Buff AddBuff(BuffType type, MapObject owner, int duration, Stats stats, bool refreshStats = true, bool updateOnly = false, params int[] values) + { + Buff b = base.AddBuff(type, owner, duration, stats, refreshStats, updateOnly, values); + + switch (b.Type) + { + case BuffType.MagicShield: + CurrentMap.Broadcast(new S.ObjectEffect { ObjectID = ObjectID, Effect = SpellEffect.MagicShieldUp }, CurrentLocation); + break; + } + + var packet = new S.AddBuff { Buff = b.ToClientBuff() }; + + Enqueue(packet); + + if (b.Info.Visible) + { + Broadcast(packet); + } + + if (refreshStats) + { + RefreshStats(); + } + + return b; + } + + public override void PauseBuff(Buff b) + { + if (b.Paused) return; + + base.PauseBuff(b); + + Enqueue(new S.PauseBuff { Type = b.Type, ObjectID = ObjectID, Paused = true }); + } + + public override void UnpauseBuff(Buff b) + { + if (!b.Paused) return; + + base.UnpauseBuff(b); + + Enqueue(new S.PauseBuff { Type = b.Type, ObjectID = ObjectID, Paused = false }); + } + protected int GetCurrentStatCount(UserItem gem, UserItem item) + { + if (gem.GetTotal(Stat.MaxDC) > 0) + return item.AddedStats[Stat.MaxDC]; + + else if (gem.GetTotal(Stat.MaxMC) > 0) + return item.AddedStats[Stat.MaxMC]; + + else if (gem.GetTotal(Stat.MaxSC) > 0) + return item.AddedStats[Stat.MaxSC]; + + else if (gem.GetTotal(Stat.MaxAC) > 0) + return item.AddedStats[Stat.MaxAC]; + + else if (gem.GetTotal(Stat.MaxMAC) > 0) + return item.AddedStats[Stat.MaxMAC]; + + else if ((gem.Info.Durability) > 0) + return item.Info.Durability > item.MaxDura ? 0 : ((item.MaxDura - item.Info.Durability) / 1000); + + else if (gem.GetTotal(Stat.AttackSpeed) > 0) + return item.AddedStats[Stat.AttackSpeed]; + + else if (gem.GetTotal(Stat.Agility) > 0) + return item.AddedStats[Stat.Agility]; + + else if (gem.GetTotal(Stat.Accuracy) > 0) + return item.AddedStats[Stat.Accuracy]; + + else if (gem.GetTotal(Stat.PoisonAttack) > 0) + return item.AddedStats[Stat.PoisonAttack]; + + else if (gem.GetTotal(Stat.Freezing) > 0) + return item.AddedStats[Stat.Freezing]; + + else if (gem.GetTotal(Stat.MagicResist) > 0) + return item.AddedStats[Stat.MagicResist]; + + else if (gem.GetTotal(Stat.PoisonResist) > 0) + return item.AddedStats[Stat.PoisonResist]; + + else if (gem.GetTotal(Stat.Luck) > 0) + return item.AddedStats[Stat.Luck]; + + else if (gem.GetTotal(Stat.PoisonRecovery) > 0) + return item.AddedStats[Stat.PoisonRecovery]; + + else if (gem.GetTotal(Stat.HP) > 0) + return item.AddedStats[Stat.HP]; + + else if (gem.GetTotal(Stat.MP) > 0) + return item.AddedStats[Stat.MP]; + + else if (gem.GetTotal(Stat.HealthRecovery) > 0) + return item.AddedStats[Stat.HealthRecovery]; + + // Definitions are missing for these. + /* + else if ((gem.Info.HPrate) > 0) + return item.h + + else if ((gem.Info.MPrate) > 0) + return + + else if ((gem.Info.SpellRecovery) > 0) + return + + else if ((gem.Info.Holy) > 0) + return + + else if ((gem.Info.Strong + gem.Strong) > 0) + return + + else if (gem.Info.HPrate > 0) + return + */ + return 0; + } + public bool CanGainItem(UserItem item) + { + if (FreeSpace(Info.Inventory) > 0) + { + return true; + } + + if (item.Info.StackSize > 1) + { + ushort count = item.Count; + + for (int i = 0; i < Info.Inventory.Length; i++) + { + UserItem bagItem = Info.Inventory[i]; + + if (bagItem.Info != item.Info) continue; + + if (bagItem.Count + count <= bagItem.Info.StackSize) return true; + + count -= (ushort)(bagItem.Info.StackSize - bagItem.Count); + } + } + + return false; + } + public bool CanGainItems(UserItem[] items) + { + int itemCount = items.Count(e => e != null); + ushort stackOffset = 0; + + if (itemCount < 1) return true; + + for (int i = 0; i < items.Length; i++) + { + if (items[i] == null) continue; + + if (items[i].Info.StackSize > 1) + { + ushort count = items[i].Count; + + for (int u = 0; u < Info.Inventory.Length; u++) + { + UserItem bagItem = Info.Inventory[u]; + + if (bagItem == null || bagItem.Info != items[i].Info) continue; + + if (bagItem.Count + count > bagItem.Info.StackSize) stackOffset++; + + break; + } + } + } + + if (FreeSpace(Info.Inventory) < itemCount + stackOffset) return false; + + return true; + } + public bool CanEquipItem(UserItem item, int slot) + { + switch ((EquipmentSlot)slot) + { + case EquipmentSlot.Weapon: + if (item.Info.Type != ItemType.Weapon) + return false; + break; + case EquipmentSlot.Armour: + if (item.Info.Type != ItemType.Armour) + return false; + break; + case EquipmentSlot.Helmet: + if (item.Info.Type != ItemType.Helmet) + return false; + break; + case EquipmentSlot.Necklace: + if (item.Info.Type != ItemType.Necklace) + return false; + break; + case EquipmentSlot.BraceletL: + if (item.Info.Type != ItemType.Bracelet) + return false; + break; + case EquipmentSlot.BraceletR: + if (item.Info.Type != ItemType.Bracelet) + return false; + break; + case EquipmentSlot.RingL: + case EquipmentSlot.RingR: + if (item.Info.Type != ItemType.Ring) + return false; + break; + default: + return false; + } + + + switch (Gender) + { + case MirGender.Male: + if (!item.Info.RequiredGender.HasFlag(RequiredGender.Male)) + return false; + break; + case MirGender.Female: + if (!item.Info.RequiredGender.HasFlag(RequiredGender.Female)) + return false; + break; + } + + + switch (Class) + { + case MirClass.Warrior: + if (!item.Info.RequiredClass.HasFlag(RequiredClass.Warrior)) + return false; + break; + case MirClass.Wizard: + if (!item.Info.RequiredClass.HasFlag(RequiredClass.Wizard)) + return false; + break; + case MirClass.Taoist: + if (!item.Info.RequiredClass.HasFlag(RequiredClass.Taoist)) + return false; + break; + } + + switch (item.Info.RequiredType) + { + case RequiredType.Level: + if (Level < item.Info.RequiredAmount) + return false; + break; + case RequiredType.MaxAC: + if (Stats[Stat.MaxAC] < item.Info.RequiredAmount) + return false; + break; + case RequiredType.MaxMAC: + if (Stats[Stat.MaxMAC] < item.Info.RequiredAmount) + return false; + break; + case RequiredType.MaxDC: + if (Stats[Stat.MaxDC] < item.Info.RequiredAmount) + return false; + break; + case RequiredType.MaxMC: + if (Stats[Stat.MaxMC] < item.Info.RequiredAmount) + return false; + break; + case RequiredType.MaxSC: + if (Stats[Stat.MaxSC] < item.Info.RequiredAmount) + return false; + break; + case RequiredType.MaxLevel: + if (Level > item.Info.RequiredAmount) + return false; + break; + case RequiredType.MinAC: + if (Stats[Stat.MinAC] < item.Info.RequiredAmount) + return false; + break; + case RequiredType.MinMAC: + if (Stats[Stat.MinMAC] < item.Info.RequiredAmount) + return false; + break; + case RequiredType.MinDC: + if (Stats[Stat.MinDC] < item.Info.RequiredAmount) + return false; + break; + case RequiredType.MinMC: + if (Stats[Stat.MinMC] < item.Info.RequiredAmount) + return false; + break; + case RequiredType.MinSC: + if (Stats[Stat.MinSC] < item.Info.RequiredAmount) + return false; + break; + } + + if (item.Info.Type == ItemType.Weapon) + { + if (item.Weight - (Info.Equipment[slot] != null ? Info.Equipment[slot].Weight : 0) + CurrentHandWeight > Stats[Stat.HandWeight]) + return false; + } + else + if (item.Weight - (Info.Equipment[slot] != null ? Info.Equipment[slot].Weight : 0) + CurrentWearWeight > Stats[Stat.WearWeight]) + return false; + + return true; + } + public void GainItem(UserItem item) + { + //CheckItemInfo(item.Info); + CheckItem(item); + + UserItem clonedItem = item.Clone(); + + Enqueue(new S.GainedItem { Item = clonedItem }); //Cloned because we are probably going to change the amount. + + AddItem(item); + RefreshBagWeight(); + } + + private void DamageDura() + { + if (!SpecialMode.HasFlag(SpecialItemMode.NoDuraLoss)) + for (int i = 0; i < Info.Equipment.Length; i++) + if (i != (int)EquipmentSlot.Weapon) + DamageItem(Info.Equipment[i], Envir.Random.Next(1) + 1); + } + public void DamageWeapon() + { + if (!SpecialMode.HasFlag(SpecialItemMode.NoDuraLoss)) + DamageItem(Info.Equipment[(int)EquipmentSlot.Weapon], Envir.Random.Next(4) + 1); + } + public void DamageItem(UserItem item, int amount, bool isChanged = false) + { + if (item == null || item.CurrentDura == 0) return; + if ((item.WeddingRing == Info.Married) && (Info.Equipment[(int)EquipmentSlot.RingL].UniqueID == item.UniqueID)) return; + if (item.GetTotal(Stat.Strong) > 0) amount = Math.Max(1, amount - item.GetTotal(Stat.Strong)); + item.CurrentDura = (ushort)Math.Max(ushort.MinValue, item.CurrentDura - amount); + item.DuraChanged = true; + + if (item.CurrentDura > 0 && isChanged != true) return; + Enqueue(new S.DuraChanged { UniqueID = item.UniqueID, CurrentDura = item.CurrentDura }); + + item.DuraChanged = false; + RefreshStats(); + } + + public void RemoveObjects(MirDirection dir, int count) + { + switch (dir) + { + case MirDirection.Up: + //Bottom Block + for (int a = 0; a < count; a++) + { + int y = CurrentLocation.Y + Globals.DataRange - a; + if (y < 0 || y >= CurrentMap.Height) continue; + + for (int b = -Globals.DataRange; b <= Globals.DataRange; b++) + { + int x = CurrentLocation.X + b; + if (x < 0 || x >= CurrentMap.Width) continue; + + Cell cell = CurrentMap.GetCell(x, y); + + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + ob.Remove(this); + } + } + } + break; + case MirDirection.UpRight: + //Bottom Block + for (int a = 0; a < count; a++) + { + int y = CurrentLocation.Y + Globals.DataRange - a; + if (y < 0 || y >= CurrentMap.Height) continue; + + for (int b = -Globals.DataRange; b <= Globals.DataRange; b++) + { + int x = CurrentLocation.X + b; + if (x < 0 || x >= CurrentMap.Width) continue; + + Cell cell = CurrentMap.GetCell(x, y); + + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + ob.Remove(this); + } + } + } + + //Left Block + for (int a = -Globals.DataRange; a <= Globals.DataRange - count; a++) + { + int y = CurrentLocation.Y + a; + if (y < 0 || y >= CurrentMap.Height) continue; + + for (int b = 0; b < count; b++) + { + int x = CurrentLocation.X - Globals.DataRange + b; + if (x < 0 || x >= CurrentMap.Width) continue; + + Cell cell = CurrentMap.GetCell(x, y); + + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + ob.Remove(this); + } + } + } + break; + case MirDirection.Right: + //Left Block + for (int a = -Globals.DataRange; a <= Globals.DataRange; a++) + { + int y = CurrentLocation.Y + a; + if (y < 0 || y >= CurrentMap.Height) continue; + + for (int b = 0; b < count; b++) + { + int x = CurrentLocation.X - Globals.DataRange + b; + if (x < 0 || x >= CurrentMap.Width) continue; + + Cell cell = CurrentMap.GetCell(x, y); + + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + ob.Remove(this); + } + } + } + break; + case MirDirection.DownRight: + //Top Block + for (int a = 0; a < count; a++) + { + int y = CurrentLocation.Y - Globals.DataRange + a; + if (y < 0 || y >= CurrentMap.Height) continue; + + for (int b = -Globals.DataRange; b <= Globals.DataRange; b++) + { + int x = CurrentLocation.X + b; + if (x < 0 || x >= CurrentMap.Width) continue; + + Cell cell = CurrentMap.GetCell(x, y); + + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + ob.Remove(this); + } + } + } + + //Left Block + for (int a = -Globals.DataRange + count; a <= Globals.DataRange; a++) + { + int y = CurrentLocation.Y + a; + if (y < 0 || y >= CurrentMap.Height) continue; + + for (int b = 0; b < count; b++) + { + int x = CurrentLocation.X - Globals.DataRange + b; + if (x < 0 || x >= CurrentMap.Width) continue; + + Cell cell = CurrentMap.GetCell(x, y); + + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + ob.Remove(this); + } + } + } + break; + case MirDirection.Down: + for (int a = 0; a < count; a++) + { + int y = CurrentLocation.Y - Globals.DataRange + a; + if (y < 0 || y >= CurrentMap.Height) continue; + + for (int b = -Globals.DataRange; b <= Globals.DataRange; b++) + { + int x = CurrentLocation.X + b; + if (x < 0 || x >= CurrentMap.Width) continue; + + Cell cell = CurrentMap.GetCell(x, y); + + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + ob.Remove(this); + } + } + } + break; + case MirDirection.DownLeft: + //Top Block + for (int a = 0; a < count; a++) + { + int y = CurrentLocation.Y - Globals.DataRange + a; + if (y < 0 || y >= CurrentMap.Height) continue; + + for (int b = -Globals.DataRange; b <= Globals.DataRange; b++) + { + int x = CurrentLocation.X + b; + if (x < 0 || x >= CurrentMap.Width) continue; + + Cell cell = CurrentMap.GetCell(x, y); + + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + ob.Remove(this); + } + } + } + + //Right Block + for (int a = -Globals.DataRange + count; a <= Globals.DataRange; a++) + { + int y = CurrentLocation.Y + a; + if (y < 0 || y >= CurrentMap.Height) continue; + + for (int b = 0; b < count; b++) + { + int x = CurrentLocation.X + Globals.DataRange - b; + if (x < 0 || x >= CurrentMap.Width) continue; + + Cell cell = CurrentMap.GetCell(x, y); + + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + ob.Remove(this); + } + } + } + break; + case MirDirection.Left: + for (int a = -Globals.DataRange; a <= Globals.DataRange; a++) + { + int y = CurrentLocation.Y + a; + if (y < 0 || y >= CurrentMap.Height) continue; + + for (int b = 0; b < count; b++) + { + int x = CurrentLocation.X + Globals.DataRange - b; + if (x < 0 || x >= CurrentMap.Width) continue; + + Cell cell = CurrentMap.GetCell(x, y); + + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + ob.Remove(this); + } + } + } + break; + case MirDirection.UpLeft: + //Bottom Block + for (int a = 0; a < count; a++) + { + int y = CurrentLocation.Y + Globals.DataRange - a; + if (y < 0 || y >= CurrentMap.Height) continue; + + for (int b = -Globals.DataRange; b <= Globals.DataRange; b++) + { + int x = CurrentLocation.X + b; + if (x < 0 || x >= CurrentMap.Width) continue; + + Cell cell = CurrentMap.GetCell(x, y); + + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + ob.Remove(this); + } + } + } + + //Right Block + for (int a = -Globals.DataRange; a <= Globals.DataRange - count; a++) + { + int y = CurrentLocation.Y + a; + if (y < 0 || y >= CurrentMap.Height) continue; + + for (int b = 0; b < count; b++) + { + int x = CurrentLocation.X + Globals.DataRange - b; + if (x < 0 || x >= CurrentMap.Width) continue; + + Cell cell = CurrentMap.GetCell(x, y); + + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + ob.Remove(this); + } + } + } + break; + } + } + public void AddObjects(MirDirection dir, int count) + { + switch (dir) + { + case MirDirection.Up: + for (int a = 0; a < count; a++) + { + int y = CurrentLocation.Y - Globals.DataRange + a; + if (y < 0 || y >= CurrentMap.Height) continue; + + for (int b = -Globals.DataRange; b <= Globals.DataRange; b++) + { + int x = CurrentLocation.X + b; + if (x < 0 || x >= CurrentMap.Width) continue; + + Cell cell = CurrentMap.GetCell(x, y); + + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + ob.Add(this); + } + } + } + break; + case MirDirection.UpRight: + //Top Block + for (int a = 0; a < count; a++) + { + int y = CurrentLocation.Y - Globals.DataRange + a; + if (y < 0 || y >= CurrentMap.Height) continue; + + for (int b = -Globals.DataRange; b <= Globals.DataRange; b++) + { + int x = CurrentLocation.X + b; + if (x < 0 || x >= CurrentMap.Width) continue; + + Cell cell = CurrentMap.GetCell(x, y); + + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + ob.Add(this); + } + } + } + + //Right Block + for (int a = -Globals.DataRange + count; a <= Globals.DataRange; a++) + { + int y = CurrentLocation.Y + a; + if (y < 0 || y >= CurrentMap.Height) continue; + + for (int b = 0; b < count; b++) + { + int x = CurrentLocation.X + Globals.DataRange - b; + if (x < 0 || x >= CurrentMap.Width) continue; + + Cell cell = CurrentMap.GetCell(x, y); + + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + ob.Add(this); + } + } + } + break; + case MirDirection.Right: + for (int a = -Globals.DataRange; a <= Globals.DataRange; a++) + { + int y = CurrentLocation.Y + a; + if (y < 0 || y >= CurrentMap.Height) continue; + + for (int b = 0; b < count; b++) + { + int x = CurrentLocation.X + Globals.DataRange - b; + if (x < 0 || x >= CurrentMap.Width) continue; + + Cell cell = CurrentMap.GetCell(x, y); + + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + ob.Add(this); + } + } + } + break; + case MirDirection.DownRight: + //Bottom Block + for (int a = 0; a < count; a++) + { + int y = CurrentLocation.Y + Globals.DataRange - a; + if (y < 0 || y >= CurrentMap.Height) continue; + + for (int b = -Globals.DataRange; b <= Globals.DataRange; b++) + { + int x = CurrentLocation.X + b; + if (x < 0 || x >= CurrentMap.Width) continue; + + Cell cell = CurrentMap.GetCell(x, y); + + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + ob.Add(this); + } + } + } + + //Right Block + for (int a = -Globals.DataRange; a <= Globals.DataRange - count; a++) + { + int y = CurrentLocation.Y + a; + if (y < 0 || y >= CurrentMap.Height) continue; + + for (int b = 0; b < count; b++) + { + int x = CurrentLocation.X + Globals.DataRange - b; + if (x < 0 || x >= CurrentMap.Width) continue; + + Cell cell = CurrentMap.GetCell(x, y); + + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + ob.Add(this); + } + } + } + break; + case MirDirection.Down: + //Bottom Block + for (int a = 0; a < count; a++) + { + int y = CurrentLocation.Y + Globals.DataRange - a; + if (y < 0 || y >= CurrentMap.Height) continue; + + for (int b = -Globals.DataRange; b <= Globals.DataRange; b++) + { + int x = CurrentLocation.X + b; + if (x < 0 || x >= CurrentMap.Width) continue; + + Cell cell = CurrentMap.GetCell(x, y); + + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + ob.Add(this); + } + } + } + break; + case MirDirection.DownLeft: + //Bottom Block + for (int a = 0; a < count; a++) + { + int y = CurrentLocation.Y + Globals.DataRange - a; + if (y < 0 || y >= CurrentMap.Height) continue; + + for (int b = -Globals.DataRange; b <= Globals.DataRange; b++) + { + int x = CurrentLocation.X + b; + if (x < 0 || x >= CurrentMap.Width) continue; + + Cell cell = CurrentMap.GetCell(x, y); + + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + ob.Add(this); + } + } + } + + //Left Block + for (int a = -Globals.DataRange; a <= Globals.DataRange - count; a++) + { + int y = CurrentLocation.Y + a; + if (y < 0 || y >= CurrentMap.Height) continue; + + for (int b = 0; b < count; b++) + { + int x = CurrentLocation.X - Globals.DataRange + b; + if (x < 0 || x >= CurrentMap.Width) continue; + + Cell cell = CurrentMap.GetCell(x, y); + + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + ob.Add(this); + } + } + } + break; + case MirDirection.Left: + //Left Block + for (int a = -Globals.DataRange; a <= Globals.DataRange; a++) + { + int y = CurrentLocation.Y + a; + if (y < 0 || y >= CurrentMap.Height) continue; + + for (int b = 0; b < count; b++) + { + int x = CurrentLocation.X - Globals.DataRange + b; + if (x < 0 || x >= CurrentMap.Width) continue; + + Cell cell = CurrentMap.GetCell(x, y); + + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + ob.Add(this); + } + } + } + break; + case MirDirection.UpLeft: + //Top Block + for (int a = 0; a < count; a++) + { + int y = CurrentLocation.Y - Globals.DataRange + a; + if (y < 0 || y >= CurrentMap.Height) continue; + + for (int b = -Globals.DataRange; b <= Globals.DataRange; b++) + { + int x = CurrentLocation.X + b; + if (x < 0 || x >= CurrentMap.Width) continue; + + Cell cell = CurrentMap.GetCell(x, y); + + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + ob.Add(this); + } + } + } + + //Left Block + for (int a = -Globals.DataRange + count; a <= Globals.DataRange; a++) + { + int y = CurrentLocation.Y + a; + if (y < 0 || y >= CurrentMap.Height) continue; + + for (int b = 0; b < count; b++) + { + int x = CurrentLocation.X - Globals.DataRange + b; + if (x < 0 || x >= CurrentMap.Width) continue; + + Cell cell = CurrentMap.GetCell(x, y); + + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + ob.Add(this); + } + } + } + break; + } + } + public override void Remove(HumanObject player) + { + if (player == this) return; + + base.Remove(player); + Enqueue(new S.ObjectRemove { ObjectID = player.ObjectID }); + } + public override void Add(HumanObject player) + { + if (player == this) return; + + //base.Add(player); + Enqueue(player.GetInfoEx(this)); + player.Enqueue(GetInfoEx(player)); + + player.SendHealth(this); + SendHealth(player); + } + public override void Remove(MonsterObject monster) + { + Enqueue(new S.ObjectRemove { ObjectID = monster.ObjectID }); + } + public override void Add(MonsterObject monster) + { + Enqueue(monster.GetInfo()); + + monster.SendHealth(this); + } + public override void SendHealth(HumanObject player) + { + if (!player.IsMember(this) && Envir.Time > RevTime) return; + byte time = Math.Min(byte.MaxValue, (byte)Math.Max(5, (RevTime - Envir.Time) / 1000)); + player.Enqueue(new S.ObjectHealth { ObjectID = ObjectID, Percent = PercentHealth, Expire = time }); + } + protected virtual void CleanUp() + { + Connection.Player = null; + Info.Player = null; + Connection.CleanObservers(); + Connection = null; + Info = null; + } + public virtual void Enqueue(Packet p) + { + if (Connection == null) return; + Connection.Enqueue(p); + + //MessageQueue.EnqueueDebugging(((ServerPacketIds)p.Index).ToString()); + } + public virtual void Enqueue(Packet p, MirConnection c) + { + if (c == null) + { + Enqueue(p); + return; + } + + c.Enqueue(p); + } + + public void SpellToggle(Spell spell, SpellToggleState state) + { + if (Dead) return; + + UserMagic magic; + bool use = Convert.ToBoolean(state); + + magic = GetMagic(spell); + if (magic == null) return; + + int cost; + switch (spell) + { + case Spell.Thrusting: + Info.Thrusting = state == SpellToggleState.None ? !Info.Thrusting : use; + break; + case Spell.HalfMoon: + Info.HalfMoon = state == SpellToggleState.None ? !Info.HalfMoon : use; + break; + case Spell.FlamingSword: + if (FlamingSword || Envir.Time < FlamingSwordTime) return; + magic = GetMagic(spell); + if (magic == null) return; + cost = magic.Info.BaseCost + magic.Level * magic.Info.LevelCost; + if (cost >= MP) return; + + FlamingSword = true; + FlamingSwordTime = Envir.Time + 10000; + Enqueue(new S.SpellToggle { ObjectID = ObjectID, Spell = Spell.FlamingSword, CanUse = true }); + ChangeMP(-cost); + break; + } + } + } +} diff --git a/Server/MirObjects/ItemObject.cs b/Server/MirObjects/ItemObject.cs new file mode 100644 index 0000000..dcc3429 --- /dev/null +++ b/Server/MirObjects/ItemObject.cs @@ -0,0 +1,459 @@ +using Server.MirDatabase; +using Server.MirEnvir; +using S = ServerPackets; + +namespace Server.MirObjects +{ + public sealed class ItemObject : MapObject + { + public override ObjectType Race + { + get { return ObjectType.Item; } + } + + public override string Name + { + get { return Item == null ? string.Empty : Item.Info.FriendlyName; } + set { throw new NotSupportedException(); } + } + + public override int CurrentMapIndex { get; set; } + public override Point CurrentLocation { get; set; } + public override MirDirection Direction + { + get { throw new NotSupportedException(); } + set { throw new NotSupportedException(); } + } + public override ushort Level + { + get { throw new NotSupportedException(); } + set { throw new NotSupportedException(); } + } + + public override bool Blocking + { + get { return false; } + } + + public uint Gold; + public UserItem Item; + + + public override int Health + { + get { throw new NotSupportedException(); } + } + + public override int MaxHealth + { + get { throw new NotSupportedException(); } + } + + public ItemObject(MapObject dropper, UserItem item, bool deathDrop = false) + { + if (deathDrop)//player dropped it when he died: allow for time to run back and pickup his drops + ExpireTime = Envir.Time + Settings.PlayerDiedItemTimeOut * Settings.Minute; + else + ExpireTime = Envir.Time + Settings.ItemTimeOut * Settings.Minute; + + Item = item; + + if (Item.IsAdded) + NameColour = Color.Cyan; + else + { + if (item.Info.Grade == ItemGrade.None) + NameColour = Color.White; + if (item.Info.Grade == ItemGrade.Common) + NameColour = Color.White; + if (item.Info.Grade == ItemGrade.YangWarrior) + NameColour = Color.DeepSkyBlue; + if (item.Info.Grade == ItemGrade.NegativeWarrior) + NameColour = Color.DarkOrange; + if (item.Info.Grade == ItemGrade.FireWizard) + NameColour = Color.Plum; + if (item.Info.Grade == ItemGrade.CelestialWizard) + NameColour = Color.Red; + if (item.Info.Grade == ItemGrade.MonkTaoist) + NameColour = Color.Red; + if (item.Info.Grade == ItemGrade.InstructorTaoist) + NameColour = Color.Red; + } + + CurrentMap = dropper.CurrentMap; + CurrentLocation = dropper.CurrentLocation; + } + public ItemObject(MapObject dropper, UserItem item, Point manualpoint) + { + ExpireTime = Envir.Time + Settings.ItemTimeOut * Settings.Minute; + + Item = item; + + if (Item.IsAdded) + NameColour = Color.Cyan; + else + { + if (item.Info.Grade == ItemGrade.None) + NameColour = Color.White; + if (item.Info.Grade == ItemGrade.Common) + NameColour = Color.White; + if (item.Info.Grade == ItemGrade.YangWarrior) + NameColour = Color.DeepSkyBlue; + if (item.Info.Grade == ItemGrade.NegativeWarrior) + NameColour = Color.DarkOrange; + if (item.Info.Grade == ItemGrade.FireWizard) + NameColour = Color.Plum; + if (item.Info.Grade == ItemGrade.CelestialWizard) + NameColour = Color.Red; + if (item.Info.Grade == ItemGrade.MonkTaoist) + NameColour = Color.Red; + if (item.Info.Grade == ItemGrade.InstructorTaoist) + NameColour = Color.Red; + } + + CurrentMap = dropper.CurrentMap; + CurrentLocation = manualpoint; + } + public ItemObject(MapObject dropper, uint gold) + { + ExpireTime = Envir.Time + Settings.ItemTimeOut * Settings.Minute; + + Gold = gold; + + CurrentMap = dropper.CurrentMap; + CurrentLocation = dropper.CurrentLocation; + } + public ItemObject(MapObject dropper, uint gold, Point manualLocation) + { + ExpireTime = Envir.Time + Settings.ItemTimeOut * Settings.Minute; + + Gold = gold; + + CurrentMap = dropper.CurrentMap; + CurrentLocation = manualLocation; + } + + public override void Process() + { + if (Envir.Time > ExpireTime) + { + CurrentMap.RemoveObject(this); + Despawn(); + return; + } + + if (Owner != null && Envir.Time > OwnerTime) + Owner = null; + + base.Process(); + } + + public override void SetOperateTime() + { + long time = Envir.Time + 2000; + + if (OwnerTime < time && OwnerTime > Envir.Time) + time = OwnerTime; + + if (ExpireTime < time && ExpireTime > Envir.Time) + time = ExpireTime; + + if (PKPointTime < time && PKPointTime > Envir.Time) + time = PKPointTime; + + if (LastHitTime < time && LastHitTime > Envir.Time) + time = LastHitTime; + + if (EXPOwnerTime < time && EXPOwnerTime > Envir.Time) + time = EXPOwnerTime; + + if (BrownTime < time && BrownTime > Envir.Time) + time = BrownTime; + + for (int i = 0; i < ActionList.Count; i++) + { + if (ActionList[i].Time >= time && ActionList[i].Time > Envir.Time) continue; + time = ActionList[i].Time; + } + + for (int i = 0; i < PoisonList.Count; i++) + { + if (PoisonList[i].TickTime >= time && PoisonList[i].TickTime > Envir.Time) continue; + time = PoisonList[i].TickTime; + } + + for (int i = 0; i < Buffs.Count; i++) + { + if (Buffs[i].NextTime >= time && Buffs[i].NextTime > Envir.Time) continue; + time = Buffs[i].NextTime; + } + + + if (OperateTime <= Envir.Time || time < OperateTime) + OperateTime = time; + } + + + public bool Drop(int distance) + { + if (CurrentMap == null) return false; + + Cell best = null; + int bestCount = 0; + Point bestLocation = Point.Empty; + + for (int d = 0; d <= distance; d++) + { + for (int y = CurrentLocation.Y - d; y <= CurrentLocation.Y + d; y++) + { + if (y < 0) continue; + if (y >= CurrentMap.Height) break; + + for (int x = CurrentLocation.X - d; x <= CurrentLocation.X + d; x += Math.Abs(y - CurrentLocation.Y) == d ? 1 : d*2) + { + if (x < 0) continue; + if (x >= CurrentMap.Width) break; + if (!CurrentMap.ValidPoint(x, y)) continue; + + bool movement = false; + for (int i = 0; i < CurrentMap.Info.Movements.Count; i++) + { + MovementInfo info = CurrentMap.Info.Movements[i]; + if (info.Source != new Point(x,y)) continue; + movement = true; + break; + } + + if (movement) continue; + + Cell cell = CurrentMap.GetCell(x, y); + + if (cell.Objects == null) + { + CurrentLocation = new Point(x, y); + CurrentMap.AddObject(this); + Spawned(); + return true; + } + + int count = 0; + bool blocking = false; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + if (ob.Blocking) + { + blocking = true; + break; + } + if (ob.Race == ObjectType.Item) + count++; + } + + if (blocking || count >= Settings.DropStackSize) continue; + + if (count == 0) + { + CurrentLocation = new Point(x, y); + CurrentMap.AddObject(this); + Spawned(); + return true; + } + + if (best == null || count < bestCount) + { + best = cell; + bestCount = count; + bestLocation = new Point(x, y); + } + } + } + } + + if (best == null) + + return false; + + CurrentLocation = bestLocation; + CurrentMap.AddObject(this); + Spawned(); + return true; + } + + public bool DragonDrop(int distance) + { + if (CurrentMap == null) return false; + + Cell best = null; + int bestCount = 0; + Point bestLocation = Point.Empty; + + for (int d = 0; d <= distance; d++) + { + for (int y = CurrentLocation.Y + 3; y <= CurrentLocation.Y + (d * 2); y++) + { + if (y < 0) continue; + if (y >= CurrentMap.Height) break; + + for (int x = CurrentLocation.X - d; x <= CurrentLocation.X + d; x += Math.Abs(y - CurrentLocation.Y) == d ? 1 : d * 2) + { + if (x < 0) continue; + if (x >= CurrentMap.Width) break; + if (!CurrentMap.ValidPoint(x, y)) continue; + + bool movement = false; + for (int i = 0; i < CurrentMap.Info.Movements.Count; i++) + { + MovementInfo info = CurrentMap.Info.Movements[i]; + if (info.Source != new Point(x, y)) continue; + movement = true; + break; + } + + if (movement) continue; + + Cell cell = CurrentMap.GetCell(x, y); + + if (cell.Objects == null) + { + CurrentLocation = new Point(x, y); + CurrentMap.AddObject(this); + Spawned(); + return true; + } + + int count = 0; + bool blocking = false; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + if (ob.Blocking) + { + blocking = true; + break; + } + if (ob.Race == ObjectType.Item) + count++; + } + + if (blocking || count >= Settings.DropStackSize) continue; + + if (count == 0) + { + CurrentLocation = new Point(x, y); + CurrentMap.AddObject(this); + Spawned(); + return true; + } + + if (best == null || count < bestCount) + { + best = cell; + bestCount = count; + bestLocation = new Point(x, y); + } + } + } + } + + if (best == null) + + return false; + + CurrentLocation = bestLocation; + CurrentMap.AddObject(this); + Spawned(); + return true; + } + + + public override Packet GetInfo() + { + if (Item != null) + return new S.ObjectItem + { + ObjectID = ObjectID, + Name = Item.Count > 1 ? string.Format("{0} ({1})", Name, Item.Count) : Name, + NameColour = NameColour, + Location = CurrentLocation, + Image = Item.Image + }; + + return new S.ObjectGold + { + ObjectID = ObjectID, + Gold = Gold, + Location = CurrentLocation, + }; + } + + + + public override void Process(DelayedAction action) + { + throw new NotSupportedException(); + } + public override bool IsAttackTarget(HumanObject attacker) + { + throw new NotSupportedException(); + } + public override bool IsAttackTarget(MonsterObject attacker) + { + throw new NotSupportedException(); + } + public override int Attacked(HumanObject attacker, int damage, DefenceType type = DefenceType.ACAgility, bool damageWeapon = true) + { + throw new NotSupportedException(); + } + public override int Attacked(MonsterObject attacker, int damage, DefenceType type = DefenceType.ACAgility) + { + throw new NotSupportedException(); + } + public override int Struck(int damage, DefenceType type = DefenceType.ACAgility) + { + throw new NotSupportedException(); + } + + public override void ApplyPoison(Poison p, MapObject Caster = null, bool NoResist = false, bool ignoreDefence = true) + { + throw new NotSupportedException(); + } + + public override Buff AddBuff(BuffType type, MapObject owner, int duration, Stats stats, bool refreshStats = true, bool updateOnly = false, params int[] values) + { + throw new NotSupportedException(); + } + + public override bool IsFriendlyTarget(HumanObject ally) + { + throw new NotSupportedException(); + } + + public override bool IsFriendlyTarget(MonsterObject ally) + { + throw new NotSupportedException(); + } + + public override void Die() + { + throw new NotSupportedException(); + } + + public override void SendHealth(HumanObject player) + { + throw new NotSupportedException(); + } + + public override int Pushed(MapObject pusher, MirDirection dir, int distance) + { + throw new NotSupportedException(); + } + + public override void ReceiveChat(string text, ChatType type) + { + throw new NotSupportedException(); + } + } +} diff --git a/Server/MirObjects/MapObject.cs b/Server/MirObjects/MapObject.cs new file mode 100644 index 0000000..407ca4b --- /dev/null +++ b/Server/MirObjects/MapObject.cs @@ -0,0 +1,924 @@ +using Server.MirDatabase; +using Server.MirEnvir; +using Server.MirObjects.Monsters; +using S = ServerPackets; + +namespace Server.MirObjects +{ + public abstract class MapObject + { + protected static MessageQueue MessageQueue + { + get { return MessageQueue.Instance; } + } + + protected static Envir Envir + { + get { return Envir.Main; } + } + + public readonly uint ObjectID = Envir.ObjectID; + + public abstract ObjectType Race { get; } + + public abstract string Name { get; set; } + + public long ExplosionInflictedTime; + public int ExplosionInflictedStage; + + private int SpawnThread; + + private Map _currentMap; + public Map CurrentMap + { + set + { + _currentMap = value; + CurrentMapIndex = _currentMap != null ? _currentMap.Info.Index : 0; + } + get { return _currentMap; } + } + + public abstract int CurrentMapIndex { get; set; } + public abstract Point CurrentLocation { get; set; } + public abstract MirDirection Direction { get; set; } + + public abstract ushort Level { get; set; } + + public abstract int Health { get; } + public abstract int MaxHealth { get; } + public byte PercentHealth + { + get { return (byte)(Health / (float)MaxHealth * 100); } + } + + public byte Light; + public int AttackSpeed; + + protected long brownTime; + public virtual long BrownTime + { + get { return brownTime; } + set { brownTime = value; } + } + + public long CellTime, PKPointTime, LastHitTime, EXPOwnerTime; + public Color NameColour = Color.White; + + public bool Dead, Undead, Harvested, AutoRev; + + public List> NPCVar = new List>(); + + public virtual int PKPoints { get; set; } + + public ushort PotHealthAmount, PotManaAmount, HealAmount, VampAmount; + + public bool CoolEye; + private bool _hidden; + + public bool Hidden + { + get + { + return _hidden; + } + set + { + if (_hidden == value) return; + _hidden = value; + CurrentMap.Broadcast(new S.ObjectHidden { ObjectID = ObjectID, Hidden = value }, CurrentLocation); + } + } + + private bool _observer; + public bool Observer + { + get + { + return _observer; + } + set + { + if (_observer == value) return; + _observer = value; + if (!_observer) + BroadcastInfo(); + else + Broadcast(new S.ObjectRemove { ObjectID = ObjectID }); + } + } + + public MapObject _target; + public virtual MapObject Target + { + get { return _target; } + set + { + if (_target == value) return; + _target = value; + } + + } + + protected MapObject master; + public virtual MapObject Master + { + get { return master; } + set { master = value; } + } + + public MapObject LastHitter, EXPOwner, Owner; + public long ExpireTime, OwnerTime, OperateTime; + public int OperateDelay = 100; + + public Stats Stats; + + public List Pets = new List(); + public virtual List Buffs { get; set; } = new List(); + + public List GroupMembers; + + public virtual AttackMode AMode { get; set; } + public virtual PetMode PMode { get; set; } + + private bool _inSafeZone; + public bool InSafeZone { + get { return _inSafeZone; } + set + { + if (_inSafeZone == value) return; + _inSafeZone = value; + OnSafeZoneChanged(); + } + } + + public float ArmourRate, DamageRate; //recieved not given + + public virtual List PoisonList { get; set; } = new List(); + public PoisonType CurrentPoison = PoisonType.None; + public List ActionList = new List(); + + public LinkedListNode Node; + public LinkedListNode NodeThreaded; + public long RevTime; + + public virtual bool Blocking + { + get { return true; } + } + + public Point Front + { + get { return Functions.PointMove(CurrentLocation, Direction, 1); } + } + + public Point Back + { + get { return Functions.PointMove(CurrentLocation, Direction, -1); } + + } + + public virtual void Process() + { + if (Master != null && Master.Node == null) Master = null; + if (LastHitter != null && LastHitter.Node == null) LastHitter = null; + if (EXPOwner != null && EXPOwner.Node == null) EXPOwner = null; + if (Target != null && (Target.Node == null || Target.Dead)) Target = null; + if (Owner != null && Owner.Node == null) Owner = null; + + if (PKPoints > 0 && Envir.Time > PKPointTime) + { + PKPointTime = Envir.Time + Settings.PKDelay * Settings.Second; + PKPoints--; + } + + if (LastHitter != null && Envir.Time > LastHitTime) + { + LastHitter = null; + } + + if (EXPOwner != null && Envir.Time > EXPOwnerTime) + { + EXPOwner = null; + } + + for (int i = 0; i < ActionList.Count; i++) + { + if (Envir.Time < ActionList[i].Time) continue; + Process(ActionList[i]); + ActionList.RemoveAt(i); + } + } + + public virtual void OnSafeZoneChanged() + { + + } + + public abstract void SetOperateTime(); + + public int GetAttackPower(int min, int max) + { + if (min < 0) min = 0; + if (min > max) max = min; + + if (Stats[Stat.Luck] > 0) + { + if (Stats[Stat.Luck] > Envir.Random.Next(Settings.MaxLuck)) + return max; + } + else if (Stats[Stat.Luck] < 0) + { + if (Stats[Stat.Luck] < -Envir.Random.Next(Settings.MaxLuck)) + return min; + } + + return Envir.Random.Next(min, max + 1); + } + + public int GetRangeAttackPower(int min, int max, int range) + { + //maxRange = highest possible damage + //minRange = lowest possible damage + + decimal x = ((decimal)min / (Globals.MaxAttackRange)) * (Globals.MaxAttackRange - range); + + min -= (int)Math.Floor(x); + + return GetAttackPower(min, max); + } + + public int GetDefencePower(int min, int max) + { + if (min < 0) min = 0; + if (min > max) max = min; + + return Envir.Random.Next(min, max + 1); + } + + public virtual void Remove(HumanObject player) + { + player.Enqueue(new S.ObjectRemove { ObjectID = ObjectID }); + } + public virtual void Add(HumanObject player) + { + if (player.Race != ObjectType.Player) return; + + if (Race == ObjectType.Merchant) + { + NPCObject npc = (NPCObject)this; + npc.CheckVisible((PlayerObject)player, true); + return; + } + + player.Enqueue(GetInfo()); + + //if (Race == ObjectType.Player) + //{ + // PlayerObject me = (PlayerObject)this; + // player.Enqueue(me.GetInfoEx(player)); + //} + //else + //{ + // player.Enqueue(GetInfo()); + //} + } + public virtual void Remove(MonsterObject monster) + { + + } + public virtual void Add(MonsterObject monster) + { + + } + + public abstract void Process(DelayedAction action); + + + public bool CanFly(Point target) + { + Point location = CurrentLocation; + + while (location != target) + { + MirDirection dir = Functions.DirectionFromPoint(location, target); + + location = Functions.PointMove(location, dir, 1); + + if (location.X < 0 || location.Y < 0 || location.X >= CurrentMap.Width || location.Y >= CurrentMap.Height) return false; + + if (!CurrentMap.GetCell(location).Valid) return false; + } + + return true; + } + + public virtual void Spawned() + { + Node = Envir.Objects.AddLast(this); + if ((Race == ObjectType.Monster) && Settings.Multithreaded) + { + SpawnThread = CurrentMap.Thread; + NodeThreaded = Envir.MobThreads[SpawnThread].ObjectsList.AddLast(this); + } + + OperateTime = Envir.Time + Envir.Random.Next(OperateDelay); + + InSafeZone = CurrentMap != null && CurrentMap.GetSafeZone(CurrentLocation) != null; + BroadcastInfo(); + BroadcastHealthChange(); + } + public virtual void Despawn() + { + if (Node == null) return; + + Broadcast(new S.ObjectRemove { ObjectID = ObjectID }); + Envir.Objects.Remove(Node); + if (Settings.Multithreaded && (Race == ObjectType.Monster)) + { + Envir.MobThreads[SpawnThread].ObjectsList.Remove(NodeThreaded); + } + + ActionList.Clear(); + + for (int i = Pets.Count - 1; i >= 0; i--) + Pets[i].Die(); + + Node = null; + } + + public MapObject FindObject(uint targetID, int dist) + { + for (int d = 0; d <= dist; d++) + { + for (int y = CurrentLocation.Y - d; y <= CurrentLocation.Y + d; y++) + { + if (y < 0) continue; + if (y >= CurrentMap.Height) break; + + for (int x = CurrentLocation.X - d; x <= CurrentLocation.X + d; x += Math.Abs(y - CurrentLocation.Y) == d ? 1 : d * 2) + { + if (x < 0) continue; + if (x >= CurrentMap.Width) break; + + Cell cell = CurrentMap.GetCell(x, y); + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + if (ob.ObjectID != targetID) continue; + + return ob; + } + } + } + } + return null; + } + + public virtual void Broadcast(Packet p) + { + if (p == null || CurrentMap == null) return; + + for (int i = CurrentMap.Players.Count - 1; i >= 0; i--) + { + PlayerObject player = CurrentMap.Players[i]; + if (player == this) continue; + + if (Functions.InRange(CurrentLocation, player.CurrentLocation, Globals.DataRange)) + player.Enqueue(p); + } + } + + public virtual void BroadcastInfo() + { + Broadcast(GetInfo()); + return; + } + + public bool IsAttackTarget(MapObject attacker) + { + if (attacker == null || attacker.Node == null) return false; + if (Dead || InSafeZone || attacker.InSafeZone || attacker == this) return false; + + switch (attacker.Race) + { + case ObjectType.Player: + return IsAttackTarget((PlayerObject)attacker); + case ObjectType.Monster: + return IsAttackTarget((MonsterObject)attacker); + default: + throw new NotSupportedException(); + } + } + + public abstract bool IsAttackTarget(HumanObject attacker); + public abstract bool IsAttackTarget(MonsterObject attacker); + public abstract int Attacked(HumanObject attacker, int damage, DefenceType type = DefenceType.ACAgility, bool damageWeapon = true); + public abstract int Attacked(MonsterObject attacker, int damage, DefenceType type = DefenceType.ACAgility); + + public virtual int GetArmour(DefenceType type, MapObject attacker, out bool hit) + { + var armour = 0; + hit = true; + switch (type) + { + case DefenceType.ACAgility: + if (Envir.Random.Next(Stats[Stat.Agility] + 1) > attacker.Stats[Stat.Accuracy]) + { + BroadcastDamageIndicator(DamageType.Miss); + hit = false; + } + armour = GetDefencePower(Stats[Stat.MinAC], Stats[Stat.MaxAC]); + break; + case DefenceType.AC: + armour = GetDefencePower(Stats[Stat.MinAC], Stats[Stat.MaxAC]); + break; + case DefenceType.MACAgility: + if (Envir.Random.Next(Settings.MagicResistWeight) < Stats[Stat.MagicResist]) + { + BroadcastDamageIndicator(DamageType.Miss); + hit = false; + } + if (Envir.Random.Next(Stats[Stat.Agility] + 1) > attacker.Stats[Stat.Accuracy]) + { + BroadcastDamageIndicator(DamageType.Miss); + hit = false; + } + armour = GetDefencePower(Stats[Stat.MinMAC], Stats[Stat.MaxMAC]); + break; + case DefenceType.MAC: + if (Envir.Random.Next(Settings.MagicResistWeight) < Stats[Stat.MagicResist]) + { + BroadcastDamageIndicator(DamageType.Miss); + hit = false; + } + armour = GetDefencePower(Stats[Stat.MinMAC], Stats[Stat.MaxMAC]); + break; + case DefenceType.Agility: + if (Envir.Random.Next(Stats[Stat.Agility] + 1) > attacker.Stats[Stat.Accuracy]) + { + BroadcastDamageIndicator(DamageType.Miss); + hit = false; + } + break; + } + return armour; + } + + public virtual void ApplyNegativeEffects(HumanObject attacker, DefenceType type, ushort levelOffset) + { + if (attacker.SpecialMode.HasFlag(SpecialItemMode.Paralize) && type != DefenceType.MAC && type != DefenceType.MACAgility && 1 == Envir.Random.Next(1, 15)) + { + ApplyPoison(new Poison { PType = PoisonType.Paralysis, Duration = 5, TickSpeed = 1000 }, attacker); + } + if ((attacker.Stats[Stat.Freezing] > 0) && (Settings.PvpCanFreeze || Race != ObjectType.Player) && type != DefenceType.MAC && type != DefenceType.MACAgility) + { + if ((Envir.Random.Next(Settings.FreezingAttackWeight) < attacker.Stats[Stat.Freezing]) && (Envir.Random.Next(levelOffset) == 0)) + ApplyPoison(new Poison { PType = PoisonType.Slow, Duration = Math.Min(10, (3 + Envir.Random.Next(attacker.Stats[Stat.Freezing]))), TickSpeed = 1000 }, attacker); + } + if (attacker.Stats[Stat.PoisonAttack] > 0 && type != DefenceType.MAC && type != DefenceType.MACAgility) + { + if ((Envir.Random.Next(Settings.PoisonAttackWeight) < attacker.Stats[Stat.PoisonAttack]) && (Envir.Random.Next(levelOffset) == 0)) + ApplyPoison(new Poison { PType = PoisonType.Green, Duration = 5, TickSpeed = 1000, Value = Math.Min(10, 3 + Envir.Random.Next(attacker.Stats[Stat.PoisonAttack])) }, attacker); + } + } + + public abstract int Struck(int damage, DefenceType type = DefenceType.ACAgility); + + public bool IsFriendlyTarget(MapObject ally) + { + switch (ally.Race) + { + case ObjectType.Player: + return IsFriendlyTarget((PlayerObject)ally); + case ObjectType.Monster: + return IsFriendlyTarget((MonsterObject)ally); + default: + throw new NotSupportedException(); + } + } + + public abstract bool IsFriendlyTarget(HumanObject ally); + public abstract bool IsFriendlyTarget(MonsterObject ally); + + public abstract void ReceiveChat(string text, ChatType type); + + public abstract Packet GetInfo(); + + public virtual void WinExp(uint amount, uint targetLevel = 0) + { + + + } + + public virtual bool CanGainGold(uint gold) + { + return false; + } + public virtual void WinGold(uint gold) + { + + } + + public virtual bool Harvest(PlayerObject player) { return false; } + + public abstract void ApplyPoison(Poison p, MapObject Caster = null, bool NoResist = false, bool ignoreDefence = true); + + public virtual Buff AddBuff(BuffType type, MapObject owner, int duration, Stats stats, bool refreshStats = true, bool updateOnly = false, params int[] values) + { + if (!HasBuff(type, out Buff buff)) + { + buff = new Buff(type) + { + Caster = owner, + ObjectID = ObjectID, + ExpireTime = duration, + LastTime = Envir.Time, + Stats = stats + }; + + Buffs.Add(buff); + } + else + { + if (!updateOnly) + { + switch (buff.StackType) + { + case BuffStackType.ResetDuration: + { + buff.ExpireTime = duration; + } + break; + case BuffStackType.StackDuration: + { + buff.ExpireTime += duration; + } + break; + case BuffStackType.StackStat: + { + if (stats != null) + { + buff.Stats.Add(stats); + } + } + break; + case BuffStackType.StackStatAndDuration: + { + if (stats != null) + { + buff.Stats.Add(stats); + } + + buff.ExpireTime += duration; + } + break; + case BuffStackType.ResetStat: + { + if (stats != null) + { + buff.Stats = stats; + } + } + break; + case BuffStackType.ResetStatAndDuration: + { + buff.ExpireTime = duration; + if (stats != null) + { + buff.Stats = stats; + } + } + break; + case BuffStackType.Infinite: + case BuffStackType.None: + break; + } + } + } + + if (buff.Properties.HasFlag(BuffProperty.PauseInSafeZone) && InSafeZone) + { + buff.Paused = true; + } + + buff.Stats ??= new Stats(); + buff.Values = values ?? new int[0]; + + if (buff.Caster?.Node == null) + buff.Caster = owner; + + switch (buff.Type) + { + case BuffType.Hiding: + case BuffType.ClearRing: + Hidden = true; + HideFromTargets(); + break; + } + + return buff; + } + + public virtual void RemoveBuff(BuffType b) + { + for (int i = 0; i < Buffs.Count; i++) + { + if (Buffs[i].Type != b) continue; + + Buffs[i].FlagForRemoval = true; + Buffs[i].Paused = false; + Buffs[i].ExpireTime = 0; + + switch(b) + { + case BuffType.Hiding: + if (!HasAnyBuffs(b, BuffType.ClearRing, BuffType.Hiding)) + { + Hidden = false; + } + break; + } + } + } + public bool HasBuff(BuffType type) + { + for (int i = 0; i < Buffs.Count; i++) + { + if (Buffs[i].Type != type) continue; + return true; + } + return false; + } + public bool HasBuff(BuffType type, out Buff buff) + { + for (int i = 0; i < Buffs.Count; i++) + { + if (Buffs[i].Type != type) continue; + + buff = Buffs[i]; + return true; + } + + buff = null; + return false; + } + + public bool HasAnyBuffs(BuffType exceptBuff, params BuffType[] types) + { + return Buffs.Select(x => x.Type).Except(new List { exceptBuff }).Intersect(types).Any(); + } + + public virtual void PauseBuff(Buff b) + { + if (b.Paused) return; + + b.Paused = true; + } + + public virtual void UnpauseBuff(Buff b) + { + if (!b.Paused) return; + + b.Paused = false; + } + + protected void HideFromTargets() + { + for (int y = CurrentLocation.Y - Globals.DataRange; y <= CurrentLocation.Y + Globals.DataRange; y++) + { + if (y < 0) continue; + if (y >= CurrentMap.Height) break; + + for (int x = CurrentLocation.X - Globals.DataRange; x <= CurrentLocation.X + Globals.DataRange; x++) + { + if (x < 0) continue; + if (x >= CurrentMap.Width) break; + if (x < 0 || x >= CurrentMap.Width) continue; + + Cell cell = CurrentMap.GetCell(x, y); + + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + if (ob.Race != ObjectType.Monster) continue; + + if (ob.Target == this && (!ob.CoolEye || ob.Level < Level)) ob.Target = null; + } + } + } + } + + public bool CheckStacked() + { + Cell cell = CurrentMap.GetCell(CurrentLocation); + + if (cell.Objects != null) + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + if (ob == this || !ob.Blocking) continue; + return true; + } + + return false; + } + + public virtual bool Teleport(Map temp, Point location, bool effects = true, byte effectnumber = 0) + { + if (temp == null || !temp.ValidPoint(location)) return false; + + CurrentMap.RemoveObject(this); + if (effects) Broadcast(new S.ObjectTeleportOut {ObjectID = ObjectID, Type = effectnumber}); + Broadcast(new S.ObjectRemove {ObjectID = ObjectID}); + + CurrentMap = temp; + CurrentLocation = location; + + CurrentMap.AddObject(this); + BroadcastInfo(); + + if (effects) Broadcast(new S.ObjectTeleportIn { ObjectID = ObjectID, Type = effectnumber }); + + BroadcastHealthChange(); + + return true; + } + + public virtual bool TeleportRandom(int attempts, int distance, Map map = null) + { + if (map == null) map = CurrentMap; + if (map.Cells == null) return false; + if (map.WalkableCells.Count == 0) return false; + + int cellIndex = Envir.Random.Next(map.WalkableCells.Count); + + return Teleport(map, map.WalkableCells[cellIndex]); + } + + public Point GetRandomPoint(int attempts, int distance, Map map) + { + byte edgeoffset = 0; + + if (map.Width < 150) + { + if (map.Height < 30) edgeoffset = 2; + else edgeoffset = 20; + } + + for (int i = 0; i < attempts; i++) + { + Point location; + + if (distance <= 0) + location = new Point(edgeoffset + Envir.Random.Next(map.Width - edgeoffset), edgeoffset + Envir.Random.Next(map.Height - edgeoffset)); //Can adjust Random Range... + else + location = new Point(CurrentLocation.X + Envir.Random.Next(-distance, distance + 1), + CurrentLocation.Y + Envir.Random.Next(-distance, distance + 1)); + + + if (map.ValidPoint(location)) return location; + } + + return new Point(0, 0); + } + + public virtual void BroadcastHealthChange() + { + if (Race != ObjectType.Player && Race != ObjectType.Monster) return; + + byte time = Math.Min(byte.MaxValue, (byte)Math.Max(5, (RevTime - Envir.Time) / 1000)); + Packet p = new S.ObjectHealth { ObjectID = ObjectID, Percent = PercentHealth, Expire = time }; + + if (Envir.Time < RevTime) + { + CurrentMap.Broadcast(p, CurrentLocation); + return; + } + + if (Race == ObjectType.Monster && !AutoRev && Master == null) return; + + if (Race == ObjectType.Player) + { + if (GroupMembers != null) //Send HP to group + { + for (int i = 0; i < GroupMembers.Count; i++) + { + PlayerObject member = GroupMembers[i]; + + if (this == member) continue; + if (member.CurrentMap != CurrentMap || !Functions.InRange(member.CurrentLocation, CurrentLocation, Globals.DataRange)) continue; + member.Enqueue(p); + } + } + + return; + } + + if (Master != null && Master.Race == ObjectType.Player) + { + PlayerObject player = (PlayerObject)Master; + + player.Enqueue(p); + + if (player.GroupMembers != null) //Send pet HP to group + { + for (int i = 0; i < player.GroupMembers.Count; i++) + { + PlayerObject member = player.GroupMembers[i]; + + if (player == member) continue; + + if (member.CurrentMap != CurrentMap || !Functions.InRange(member.CurrentLocation, CurrentLocation, Globals.DataRange)) continue; + member.Enqueue(p); + } + } + } + + + if (EXPOwner != null && EXPOwner.Race == ObjectType.Player) + { + PlayerObject player = (PlayerObject)EXPOwner; + + if (player.IsMember(Master)) return; + + player.Enqueue(p); + + if (player.GroupMembers != null) + { + for (int i = 0; i < player.GroupMembers.Count; i++) + { + PlayerObject member = player.GroupMembers[i]; + + if (player == member) continue; + if (member.CurrentMap != CurrentMap || !Functions.InRange(member.CurrentLocation, CurrentLocation, Globals.DataRange)) continue; + member.Enqueue(p); + } + } + } + } + + public void BroadcastDamageIndicator(DamageType type, int damage = 0) + { + Packet p = new S.DamageIndicator { ObjectID = ObjectID, Damage = damage, Type = type }; + + if (Race == ObjectType.Player) + { + PlayerObject player = (PlayerObject)this; + player.Enqueue(p); + } + Broadcast(p); + } + + public abstract void Die(); + + public abstract int Pushed(MapObject pusher, MirDirection dir, int distance); + + public bool IsMember(MapObject member) + { + if (member == this) return true; + if (GroupMembers == null || member == null) return false; + + for (int i = 0; i < GroupMembers.Count; i++) + if (GroupMembers[i] == member) return true; + + return false; + } + + public abstract void SendHealth(HumanObject player); + + } + + public class Poison + { + private MapObject owner; + public MapObject Owner + { + get + { + return owner; + } + set { owner = value; } + } + public PoisonType PType; + public int Value; + public long Duration, Time, TickTime, TickSpeed; + + public Poison() { } + + public Poison(BinaryReader reader) + { + Owner = null; + PType = (PoisonType)reader.ReadByte(); + Value = reader.ReadInt32(); + Duration = reader.ReadInt64(); + Time = reader.ReadInt64(); + TickTime = reader.ReadInt64(); + TickSpeed = reader.ReadInt64(); + } + } +} diff --git a/Server/MirObjects/MonsterObject.cs b/Server/MirObjects/MonsterObject.cs new file mode 100644 index 0000000..c75d4bf --- /dev/null +++ b/Server/MirObjects/MonsterObject.cs @@ -0,0 +1,2968 @@ +using Server.MirDatabase; +using Server.MirEnvir; +using Server.MirObjects.Monsters; +using S = ServerPackets; + +namespace Server.MirObjects +{ + public class MonsterObject : MapObject + { + public static MonsterObject GetMonster(MonsterInfo info) + { + if (info == null) return null; + + switch (info.AI) + { + case 1: + case 2: + return new PassiveMonster(info); + case 3: + return new Trainer(info); + default: + return new MonsterObject(info); + } + } + + public override ObjectType Race + { + get { return ObjectType.Monster; } + } + + public MonsterInfo Info; + public MapRespawn Respawn; + + public override string Name + { + get { return Master == null ? Info.GameName : string.Format("{0}({1})", Info.GameName, Master.Name); } + set { throw new NotSupportedException(); } + } + + public override int CurrentMapIndex { get; set; } + public override Point CurrentLocation { get; set; } + public override sealed MirDirection Direction { get; set; } + public override ushort Level + { + get { return Info.Level; } + set { throw new NotSupportedException(); } + } + + public override sealed AttackMode AMode + { + get + { + return base.AMode; + } + set + { + base.AMode = value; + } + } + public override sealed PetMode PMode + { + get + { + return base.PMode; + } + set + { + base.PMode = value; + } + } + + public override int Health + { + get { return HP; } + } + + public override int MaxHealth + { + get { return Stats[Stat.HP]; } + } + + public int HealthPercent + { + get + { + return (Health * 100) / MaxHealth; + } + } + + public int HP; + + public ushort MoveSpeed; + + public virtual uint Experience + { + get { return Info.Experience; } + } + public int DeadDelay + { + get + { + switch (Info.AI) + { + case 64: + return 0; + case 81: + case 82: + return int.MaxValue; + case 252: + return 5000; + default: + return 180000; + } + } + } + public const int RegenDelay = 10000, EXPOwnerDelay = 5000, AloneDelay = 3000, SearchDelay = 3000, RoamDelay = 1000, HealDelay = 600, RevivalDelay = 2000; + public long ActionTime, MoveTime, AttackTime, RegenTime, DeadTime, AloneTime, SearchTime, RoamTime, HealTime; + public long ShockTime, RageTime, HallucinationTime; + public bool BindingShotCenter, PoisonStopRegen = true; + + protected bool Alone = false, Stacking = false; + + public byte PetLevel; + public uint PetExperience; + public byte MaxPetLevel; + public long TameTime; + public bool DieNextTurn; + + public int RoutePoint; + public bool Waiting; + + public List SlaveList = new List(); + public List Route = new List(); + + public override bool Blocking + { + get + { + return !Dead; + } + } + protected virtual bool CanRegen + { + get { return Envir.Time >= RegenTime; } + } + protected virtual bool CanMove + { + get + { + return + !Dead && + Envir.Time > MoveTime && + Envir.Time > ActionTime && + Envir.Time > ShockTime && + (Master == null || Master.PMode == PetMode.MoveOnly || Master.PMode == PetMode.Both || Master.PMode == PetMode.FocusMasterTarget) && + !CurrentPoison.HasFlag(PoisonType.Paralysis) && + !CurrentPoison.HasFlag(PoisonType.Frozen) && + (!CurrentPoison.HasFlag(PoisonType.Stun) || (Info.Light == 10 || Info.Light == 5)); + } + } + protected virtual bool CanAttack + { + get + { + return + !Dead && + Envir.Time > AttackTime && + Envir.Time > ActionTime && + (Master == null || Master.PMode == PetMode.AttackOnly || Master.PMode == PetMode.Both || Master.PMode == PetMode.FocusMasterTarget) && + !CurrentPoison.HasFlag(PoisonType.Paralysis) && + !CurrentPoison.HasFlag(PoisonType.Frozen) && + (!CurrentPoison.HasFlag(PoisonType.Stun) || (Info.Light == 10 || Info.Light == 5)); + } + } + protected internal MonsterObject(MonsterInfo info) + { + Info = info; + + Stats = new Stats(); + + Undead = Info.Undead; + AutoRev = info.AutoRev; + CoolEye = info.CoolEye > Envir.Random.Next(100); + Direction = (MirDirection)Envir.Random.Next(8); + + AMode = AttackMode.All; + PMode = PetMode.Both; + + RegenTime = Envir.Random.Next(RegenDelay) + Envir.Time; + SearchTime = Envir.Random.Next(SearchDelay) + Envir.Time; + RoamTime = Envir.Random.Next(RoamDelay) + Envir.Time; + } + public bool Spawn(Map temp, Point location) + { + if (!temp.ValidPoint(location)) return false; + + CurrentMap = temp; + CurrentLocation = location; + + CurrentMap.AddObject(this); + + RefreshAll(); + SetHP(Stats[Stat.HP]); + + Spawned(); + Envir.MonsterCount++; + CurrentMap.MonsterCount++; + return true; + } + public bool Spawn(MapRespawn respawn) + { + Respawn = respawn; + + if (Respawn.Map == null) return false; + if (Respawn.WalkableCells == null || Respawn.WalkableCells.Count == 0) return false; + + var spawnPoint = Respawn.WalkableCells[Envir.Random.Next(Respawn.WalkableCells.Count)]; + + CurrentLocation = spawnPoint; + + respawn.Map.AddObject(this); + + CurrentMap = respawn.Map; + + if (Respawn.Route.Count > 0) + Route.AddRange(Respawn.Route); + + RefreshAll(); + SetHP(Stats[Stat.HP]); + + Spawned(); + Respawn.Count++; + respawn.Map.MonsterCount++; + Envir.MonsterCount++; + + return true; + } + + public override void Spawned() + { + ActionTime = Envir.Time + 2000; + + if (Info.HasSpawnScript && (Envir.MonsterNPC != null)) + { + Envir.MonsterNPC.Call(this, string.Format("[@_SPAWN({0})]", Info.Index)); + } + + base.Spawned(); + } + + protected virtual void RefreshBase() + { + Stats.Clear(); + + Stats.Add(Info.Stats); + + MoveSpeed = Info.MoveSpeed; + AttackSpeed = Info.AttackSpeed; + } + + public virtual void RefreshAll() + { + RefreshBase(); + + Stats[Stat.HP] += PetLevel * 20; + Stats[Stat.MinAC] += PetLevel * 2; + Stats[Stat.MaxAC] += PetLevel * 2; + Stats[Stat.MinMAC] += PetLevel * 2; + Stats[Stat.MaxMAC] += PetLevel * 2; + Stats[Stat.MinDC] += PetLevel; + Stats[Stat.MaxDC] += PetLevel; + + if (Info.Name == Settings.SkeletonName || Info.Name == Settings.ShinsuName || Info.Name == Settings.AngelName) + { + MoveSpeed = (ushort)Math.Min(ushort.MaxValue, (Math.Max(ushort.MinValue, MoveSpeed - MaxPetLevel * 130))); + AttackSpeed = (ushort)Math.Min(ushort.MaxValue, (Math.Max(ushort.MinValue, AttackSpeed - MaxPetLevel * 70))); + } + + if (MoveSpeed < 400) MoveSpeed = 400; + if (AttackSpeed < 400) AttackSpeed = 400; + + RefreshBuffs(); + } + + protected virtual void RefreshBuffs() + { + for (int i = 0; i < Buffs.Count; i++) + { + Buff buff = Buffs[i]; + + Stats.Add(buff.Stats); + } + } + public virtual void RefreshNameColour(bool send = true) + { + if (ShockTime < Envir.Time) BindingShotCenter = false; + + Color colour = Color.White; + + switch (PetLevel) + { + case 1: + colour = Color.Aqua; + break; + case 2: + colour = Color.Aquamarine; + break; + case 3: + colour = Color.LightSeaGreen; + break; + case 4: + colour = Color.SlateBlue; + break; + case 5: + colour = Color.SteelBlue; + break; + case 6: + colour = Color.Blue; + break; + case 7: + colour = Color.Navy; + break; + } + + if (Envir.Time < ShockTime) + colour = Color.Peru; + else if (Envir.Time < RageTime) + colour = Color.Red; + else if (Envir.Time < HallucinationTime) + colour = Color.MediumOrchid; + + if (colour == NameColour || !send) return; + + NameColour = colour; + + Broadcast(new S.ObjectColourChanged { ObjectID = ObjectID, NameColour = NameColour }); + } + + public void SetHP(int amount) + { + if (HP == amount) return; + + HP = amount <= Stats[Stat.HP] ? amount : Stats[Stat.HP]; + + if (!Dead && HP == 0) Die(); + + // HealthChanged = true; + BroadcastHealthChange(); + } + public virtual void ChangeHP(int amount) + { + if (HP + amount > Stats[Stat.HP]) + amount = Stats[Stat.HP] - HP; + + if (amount == 0) return; + + HP += amount; + + if (HP < 0) HP = 0; + + if (!Dead && HP == 0) Die(); + + // HealthChanged = true; + BroadcastHealthChange(); + } + + //use this so you can have mobs take no/reduced poison damage + public virtual void PoisonDamage(int amount, MapObject Attacker) + { + ChangeHP(amount); + } + + + public override bool Teleport(Map temp, Point location, bool effects = true, byte effectnumber = 0) + { + if (temp == null || !temp.ValidPoint(location)) return false; + + CurrentMap.RemoveObject(this); + if (effects) Broadcast(new S.ObjectTeleportOut { ObjectID = ObjectID, Type = effectnumber }); + Broadcast(new S.ObjectRemove { ObjectID = ObjectID }); + + CurrentMap.MonsterCount--; + + CurrentMap = temp; + CurrentLocation = location; + + CurrentMap.MonsterCount++; + + CurrentMap.AddObject(this); + BroadcastInfo(); + + if (effects) Broadcast(new S.ObjectTeleportIn { ObjectID = ObjectID, Type = effectnumber }); + + BroadcastHealthChange(); + + return true; + } + + + public override void Die() + { + if (Dead) return; + + HP = 0; + Dead = true; + + DeadTime = Envir.Time + DeadDelay; + + Broadcast(new S.ObjectDied { ObjectID = ObjectID, Direction = Direction, Location = CurrentLocation }); + + if (Info.HasDieScript && (Envir.MonsterNPC != null)) + { + Envir.MonsterNPC.Call(this, string.Format("[@_DIE({0})]", Info.Index)); + } + + if (EXPOwner != null && EXPOwner.Node != null && Master == null && (EXPOwner.Race == ObjectType.Player)) + { + EXPOwner.WinExp(Experience, Level); + + PlayerObject playerObj = (PlayerObject)EXPOwner; + playerObj.CheckGroupQuestKill(Info); + } + + if (Respawn != null) + Respawn.Count--; + + if (Master == null && EXPOwner != null) + Drop(); + + Master = null; + + PoisonList.Clear(); + Envir.MonsterCount--; + if (CurrentMap != null) + CurrentMap.MonsterCount--; + } + + public MapObject GetAttacker(MapObject attacker) + { + return attacker; + } + + public void Revive(int hp, bool effect) + { + if (!Dead) return; + + SetHP(hp); + + Dead = false; + ActionTime = Envir.Time + RevivalDelay; + + Broadcast(new S.ObjectRevived { ObjectID = ObjectID, Effect = effect }); + + if (Respawn != null) + Respawn.Count++; + + Envir.MonsterCount++; + CurrentMap.MonsterCount++; + } + + public override int Pushed(MapObject pusher, MirDirection dir, int distance) + { + if (!Info.CanPush) return 0; + //if (!CanMove) return 0; //stops mobs that can't move (like cannibalplants) from being pushed + + int result = 0; + MirDirection reverse = Functions.ReverseDirection(dir); + for (int i = 0; i < distance; i++) + { + Point location = Functions.PointMove(CurrentLocation, dir, 1); + + if (!CurrentMap.ValidPoint(location)) return result; + + Cell cell = CurrentMap.GetCell(location); + + bool stop = false; + if (cell.Objects != null) + for (int c = 0; c < cell.Objects.Count; c++) + { + MapObject ob = cell.Objects[c]; + if (!ob.Blocking) continue; + stop = true; + } + if (stop) break; + + CurrentMap.GetCell(CurrentLocation).Remove(this); + + Direction = reverse; + RemoveObjects(dir, 1); + CurrentLocation = location; + CurrentMap.GetCell(CurrentLocation).Add(this); + AddObjects(dir, 1); + + Broadcast(new S.ObjectPushed { ObjectID = ObjectID, Direction = Direction, Location = CurrentLocation }); + + result++; + } + + ActionTime = Envir.Time + 300 * result; + MoveTime = Envir.Time + 500 * result; + + if (result > 0) + { + Cell cell = CurrentMap.GetCell(CurrentLocation); + + for (int i = 0; i < cell.Objects.Count; i++) + { + if (cell.Objects[i].Race != ObjectType.Spell) continue; + SpellObject ob = (SpellObject)cell.Objects[i]; + + ob.ProcessSpell(this); + //break; + } + } + + return result; + } + + protected virtual void Drop() + { + if (CurrentMap.Info.NoDropMonster) + return; + + for (int i = 0; i < Info.Drops.Count; i++) + { + DropInfo drop = Info.Drops[i]; + + var reward = drop.AttemptDrop(EXPOwner?.Stats[Stat.ItemDropRatePercent] ?? 0, EXPOwner?.Stats[Stat.GoldDropRatePercent] ?? 0); + + if (reward != null) + { + if (reward.Gold > 0) + { + DropGold(reward.Gold); + } + + foreach (var dropItem in reward.Items) + { + UserItem item = Envir.CreateDropItem(dropItem); + + if (item == null) continue; + + if (EXPOwner != null && EXPOwner.Race == ObjectType.Player) + { + PlayerObject ob = (PlayerObject)EXPOwner; + + if (ob.CheckGroupQuestItem(item)) + { + continue; + } + } + + if (drop.QuestRequired) continue; + if (!DropItem(item)) return; + } + } + } + } + + protected virtual bool DropItem(UserItem item) + { + if (CurrentMap.Info.NoDropMonster) + return false; + + ItemObject ob = new ItemObject(this, item) + { + Owner = EXPOwner, + OwnerTime = Envir.Time + Settings.Minute, + }; + + if (!item.Info.GlobalDropNotify) + return ob.Drop(Settings.DropRange); + + foreach (var player in Envir.Players) + { + player.ReceiveChat($"{Name} has dropped {item.FriendlyName}.", ChatType.System2); + } + + return ob.Drop(Settings.DropRange); + } + + protected virtual bool DropGold(uint gold) + { + if (EXPOwner != null && EXPOwner.CanGainGold(gold) && !Settings.DropGold) + { + EXPOwner.WinGold(gold); + return true; + } + + uint count = gold / Settings.MaxDropGold == 0 ? 1 : gold / Settings.MaxDropGold + 1; + for (int i = 0; i < count; i++) + { + ItemObject ob = new ItemObject(this, i != count - 1 ? Settings.MaxDropGold : gold % Settings.MaxDropGold) + { + Owner = EXPOwner, + OwnerTime = Envir.Time + Settings.Minute, + }; + + ob.Drop(Settings.DropRange); + } + + return true; + } + + public override void Process() + { + base.Process(); + + RefreshNameColour(); + + if (Target != null && (Target.CurrentMap != CurrentMap || !Target.IsAttackTarget(this) || !Functions.InRange(CurrentLocation, Target.CurrentLocation, Globals.DataRange))) + Target = null; + + for (int i = SlaveList.Count - 1; i >= 0; i--) + if (SlaveList[i].Dead || SlaveList[i].Node == null) + SlaveList.RemoveAt(i); + + if (Dead && Envir.Time >= DeadTime) + { + CurrentMap.RemoveObject(this); + if (Master != null) + { + Master.Pets.Remove(this); + Master = null; + } + + Despawn(); + return; + } + + if (Master != null && TameTime > 0 && Envir.Time >= TameTime) + { + Master.Pets.Remove(this); + Master = null; + Broadcast(new S.ObjectName { ObjectID = ObjectID, Name = Name }); + } + + ProcessAI(); + + ProcessBuffs(); + ProcessRegen(); + ProcessPoison(); + } + + public override void SetOperateTime() + { + long time = Envir.Time + 2000; + + if (AloneTime < time && AloneTime > Envir.Time) + time = AloneTime; + + if (DeadTime < time && DeadTime > Envir.Time) + time = DeadTime; + + if (OwnerTime < time && OwnerTime > Envir.Time) + time = OwnerTime; + + if (ExpireTime < time && ExpireTime > Envir.Time) + time = ExpireTime; + + if (PKPointTime < time && PKPointTime > Envir.Time) + time = PKPointTime; + + if (LastHitTime < time && LastHitTime > Envir.Time) + time = LastHitTime; + + if (EXPOwnerTime < time && EXPOwnerTime > Envir.Time) + time = EXPOwnerTime; + + if (SearchTime < time && SearchTime > Envir.Time) + time = SearchTime; + + if (RoamTime < time && RoamTime > Envir.Time) + time = RoamTime; + + if (ShockTime < time && ShockTime > Envir.Time) + time = ShockTime; + + if (RegenTime < time && RegenTime > Envir.Time && Health < MaxHealth) + time = RegenTime; + + if (RageTime < time && RageTime > Envir.Time) + time = RageTime; + + if (HallucinationTime < time && HallucinationTime > Envir.Time) + time = HallucinationTime; + + if (ActionTime < time && ActionTime > Envir.Time) + time = ActionTime; + + if (MoveTime < time && MoveTime > Envir.Time) + time = MoveTime; + + if (AttackTime < time && AttackTime > Envir.Time) + time = AttackTime; + + if (HealTime < time && HealTime > Envir.Time && HealAmount > 0) + time = HealTime; + + if (BrownTime < time && BrownTime > Envir.Time) + time = BrownTime; + + for (int i = 0; i < ActionList.Count; i++) + { + if (ActionList[i].Time >= time && ActionList[i].Time > Envir.Time) continue; + time = ActionList[i].Time; + } + + for (int i = 0; i < PoisonList.Count; i++) + { + if (PoisonList[i].TickTime >= time && PoisonList[i].TickTime > Envir.Time) continue; + time = PoisonList[i].TickTime; + } + + for (int i = 0; i < Buffs.Count; i++) + { + if (Buffs[i].NextTime >= time && Buffs[i].NextTime > Envir.Time) continue; + time = Buffs[i].NextTime; + } + + if (OperateTime <= Envir.Time || time < OperateTime) + OperateTime = time; + } + + public override void Process(DelayedAction action) + { + switch (action.Type) + { + case DelayedType.Damage: + CompleteAttack(action.Params); + break; + case DelayedType.RangeDamage: + CompleteRangeAttack(action.Params); + break; + case DelayedType.Die: + CompleteDeath(action.Params); + break; + case DelayedType.Recall: + PetRecall(); + break; + case DelayedType.SpellEffect: + CompleteSpellEffect(action.Params); + break; + } + } + + public void PetRecall() + { + if (Master == null) return; + if (!Teleport(Master.CurrentMap, Master.Back)) + Teleport(Master.CurrentMap, Master.CurrentLocation); + } + protected virtual void CompleteAttack(IList data) + { + MapObject target = (MapObject)data[0]; + int damage = (int)data[1]; + DefenceType defence = (DefenceType)data[2]; + + if (target == null || !target.IsAttackTarget(this) || target.CurrentMap != CurrentMap || target.Node == null) return; + + target.Attacked(this, damage, defence); + } + + protected virtual void CompleteRangeAttack(IList data) + { + MapObject target = (MapObject)data[0]; + int damage = (int)data[1]; + DefenceType defence = (DefenceType)data[2]; + + if (target == null || !target.IsAttackTarget(this) || target.CurrentMap != CurrentMap || target.Node == null) return; + + target.Attacked(this, damage, defence); + } + + protected virtual void CompleteDeath(IList data) + { + throw new NotImplementedException(); + } + + protected virtual void CompleteSpellEffect(IList data) + { + MapObject target = (MapObject)data[0]; + SpellEffect effect = (SpellEffect)data[1]; + + if (target == null || !target.IsAttackTarget(this) || target.CurrentMap != CurrentMap || target.Node == null) return; + + S.ObjectEffect p = new S.ObjectEffect { ObjectID = target.ObjectID, Effect = effect }; + CurrentMap.Broadcast(p, target.CurrentLocation); + } + + protected virtual void ProcessRegen() + { + if (Dead) return; + + int healthRegen = 0; + + if (CanRegen) + { + RegenTime = Envir.Time + RegenDelay; + + + if (HP < Stats[Stat.HP]) + healthRegen += (int)(Stats[Stat.HP] * 0.022F) + 1; + } + + + if (Envir.Time > HealTime) + { + HealTime = Envir.Time + HealDelay; + + if (HealAmount > 5) + { + healthRegen += 5; + HealAmount -= 5; + } + else + { + healthRegen += HealAmount; + HealAmount = 0; + } + } + + if (healthRegen > 0) + { + ChangeHP(healthRegen); + BroadcastDamageIndicator(DamageType.Hit, healthRegen); + } + if (HP == Stats[Stat.HP]) HealAmount = 0; + } + protected virtual void ProcessPoison() + { + PoisonType type = PoisonType.None; + ArmourRate = 1F; + DamageRate = 1F; + + for (int i = PoisonList.Count - 1; i >= 0; i--) + { + if (Dead) return; + + Poison poison = PoisonList[i]; + if (poison.Owner != null && poison.Owner.Node == null) + { + if (poison.PType == PoisonType.Slow) + { + MoveSpeed = Info.MoveSpeed; + AttackSpeed = Info.AttackSpeed; + AttackTime = Envir.Time + AttackSpeed; + } + PoisonList.RemoveAt(i); + continue; + } + + if (Envir.Time > poison.TickTime) + { + poison.Time++; + poison.TickTime = Envir.Time + poison.TickSpeed; + + if (poison.Time >= poison.Duration) + { + if (poison.PType == PoisonType.Slow) + { + MoveSpeed = Info.MoveSpeed; + AttackSpeed = Info.AttackSpeed; + AttackTime = Envir.Time + AttackSpeed; + } + PoisonList.RemoveAt(i); + continue; + } + + if (poison.PType == PoisonType.Green) + { + if (EXPOwner == null || EXPOwner.Dead) + { + EXPOwner = poison.Owner; + EXPOwnerTime = Envir.Time + EXPOwnerDelay; + } + else if (EXPOwner == poison.Owner) + EXPOwnerTime = Envir.Time + EXPOwnerDelay; + + PoisonDamage(-poison.Value, poison.Owner); + BroadcastDamageIndicator(DamageType.Hit, -poison.Value); + if (PoisonStopRegen) + RegenTime = Envir.Time + RegenDelay; + if (poison.Owner != null && Target == null) + Target = poison.Owner; + } + } + + switch (poison.PType) + { + case PoisonType.Red: + ArmourRate -= 0.5F; + break; + case PoisonType.Stun: + DamageRate += 0.5F; + break; + case PoisonType.Slow: + MoveSpeed = (ushort)Math.Min(3500, MoveSpeed + 100); + AttackSpeed = (ushort)Math.Min(3500, AttackSpeed + 100); + + if (poison.Time >= poison.Duration) + { + MoveSpeed = Info.MoveSpeed; + AttackSpeed = Info.AttackSpeed; + AttackTime = Envir.Time + AttackSpeed; + } + break; + } + type |= poison.PType; + } + + + if (type == CurrentPoison) return; + + CurrentPoison = type; + Broadcast(new S.ObjectPoisoned { ObjectID = ObjectID, Poison = type }); + } + + private void ProcessBuffs() + { + bool refresh = false; + for (int i = Buffs.Count - 1; i >= 0; i--) + { + Buff buff = Buffs[i]; + + if (buff.NextTime > Envir.Time) continue; + + if (!buff.Paused && buff.StackType != BuffStackType.Infinite) + { + var change = Envir.Time - buff.LastTime; + buff.ExpireTime -= change; + } + + buff.LastTime = Envir.Time; + buff.NextTime = Envir.Time + 1000; + + if ((buff.ExpireTime > 0 || buff.StackType == BuffStackType.Infinite) && !buff.FlagForRemoval) continue; + + Buffs.RemoveAt(i); + + if (buff.Info.Visible) + { + Broadcast(new S.RemoveBuff { Type = buff.Type, ObjectID = ObjectID }); + } + + switch (buff.Type) + { + case BuffType.Hiding: + Hidden = false; + break; + } + + ProcessBuffEnd(buff); + + refresh = true; + } + + if (refresh) RefreshAll(); + } + + protected virtual void ProcessBuffEnd(Buff buff) + { + + } + + protected virtual void ProcessAI() + { + if (Dead) return; + + if (DieNextTurn) + { + Die(); + return; + } + + if (Master != null) + { + if (Master.PMode == PetMode.Both || Master.PMode == PetMode.MoveOnly || Master.PMode == PetMode.FocusMasterTarget) + { + if (!Functions.InRange(CurrentLocation, Master.CurrentLocation, Globals.DataRange) || CurrentMap != Master.CurrentMap) + PetRecall(); + } + + if (Master.PMode == PetMode.MoveOnly || Master.PMode == PetMode.None) + Target = null; + } + + CheckAlone(); + + if (!Alone || Settings.MonsterProcessWhenAlone) + { + ProcessStacking(); + + ProcessSearch(); + ProcessRoam(); + ProcessTarget(); + } + } + + protected virtual void CheckAlone() + { + if (Envir.Time < AloneTime) return; + + AloneTime = Envir.Time + AloneDelay; + + if (CurrentMap.Players.Count == 0) + { + Alone = true; + return; + } + + for (int i = 0; i < CurrentMap.Players.Count; i++) + { + if (Functions.InRange(CurrentLocation, CurrentMap.Players[i].CurrentLocation, Globals.DataRange * 2)) + { + Alone = false; + return; + } + } + + Alone = true; + } + + protected virtual void ProcessStacking() + { + //Stacking or Infront of master - Move + Stacking = CheckStacked(); + + if (CanMove && ((Master != null && Master.Front == CurrentLocation) || Stacking)) + { + //Walk Randomly + if (!Walk(Direction)) + { + MirDirection dir = Direction; + + switch (Envir.Random.Next(3)) // favour Clockwise + { + case 0: + for (int i = 0; i < 7; i++) + { + dir = Functions.NextDir(dir); + + if (Walk(dir)) + break; + } + break; + default: + for (int i = 0; i < 7; i++) + { + dir = Functions.PreviousDir(dir); + + if (Walk(dir)) + break; + } + break; + } + } + + return; + } + } + + protected virtual void ProcessSearch() + { + if (Envir.Time < SearchTime) return; + if (Master != null && (Master.PMode == PetMode.MoveOnly || Master.PMode == PetMode.None || Master.PMode == PetMode.FocusMasterTarget)) return; + + SearchTime = Envir.Time + SearchDelay; + + if (Target == null || Envir.Random.Next(3) == 0) + FindTarget(); + } + + protected virtual void ProcessRoam() + { + if (Target != null || Envir.Time < RoamTime) return; + + if (ProcessRoute()) return; + + if (Master != null) + { + MoveTo(Master.Back); + return; + } + + RoamTime = Envir.Time + RoamDelay; + + if (Envir.Random.Next(10) != 0) return; + + switch (Envir.Random.Next(3)) //Face Walk + { + case 0: + Turn((MirDirection)Envir.Random.Next(8)); + break; + default: + Walk(Direction); + break; + } + } + + protected virtual void ProcessTarget() + { + if (Target == null || !CanAttack) return; + + if (InAttackRange()) + { + Attack(); + + if (Target != null && Target.Dead) + { + FindTarget(); + } + + return; + } + + if (Envir.Time < ShockTime) + { + Target = null; + return; + } + + MoveTo(Target.CurrentLocation); + } + + protected virtual bool InAttackRange() + { + if (Target.CurrentMap != CurrentMap) return false; + + return Target.CurrentLocation != CurrentLocation && Functions.InRange(CurrentLocation, Target.CurrentLocation, 1); + } + + protected virtual void FindTarget() + { + Map Current = CurrentMap; + + for (int d = 0; d <= Info.ViewRange; d++) + { + for (int y = CurrentLocation.Y - d; y <= CurrentLocation.Y + d; y++) + { + if (y < 0) continue; + if (y >= Current.Height) break; + + for (int x = CurrentLocation.X - d; x <= CurrentLocation.X + d; x += Math.Abs(y - CurrentLocation.Y) == d ? 1 : d * 2) + { + if (x < 0) continue; + if (x >= Current.Width) break; + Cell cell = Current.Cells[x, y]; + if (cell.Objects == null || !cell.Valid) continue; + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + switch (ob.Race) + { + case ObjectType.Monster: + + if (!ob.IsAttackTarget(this)) continue; + if (ob.Hidden && (!CoolEye || Level < ob.Level)) continue; + + Target ??= ob; + continue; + + case ObjectType.Player: + + if (Target != null) + { + continue; + } + + PlayerObject playerob = (PlayerObject)ob; + if (!ob.IsAttackTarget(this)) continue; + if (playerob.GMGameMaster || ob.Hidden && (!CoolEye || Level < ob.Level) || Envir.Time < HallucinationTime) continue; + + Target = ob; + + if (Master != null) + { + for (int j = 0; j < playerob.Pets.Count; j++) + { + MonsterObject pet = playerob.Pets[j]; + + if (!pet.IsAttackTarget(this)) continue; + Target = pet; + break; + } + } + continue; + default: + continue; + } + } + } + } + } + } + + protected virtual bool ProcessRoute() + { + if (Route.Count < 1) return false; + + RoamTime = Envir.Time + 500; + + if (CurrentLocation == Route[RoutePoint].Location) + { + if (Route[RoutePoint].Delay > 0 && !Waiting) + { + Waiting = true; + RoamTime = Envir.Time + RoamDelay + Route[RoutePoint].Delay; + return true; + } + + Waiting = false; + RoutePoint++; + } + + if (RoutePoint > Route.Count - 1) RoutePoint = 0; + + if (!CurrentMap.ValidPoint(Route[RoutePoint].Location)) return true; + + MoveTo(Route[RoutePoint].Location); + + return true; + } + + protected virtual void MoveTo(Point location) + { + if (CurrentLocation == location) return; + + bool inRange = Functions.InRange(location, CurrentLocation, 1); + + if (inRange) + { + if (!CurrentMap.ValidPoint(location)) return; + Cell cell = CurrentMap.GetCell(location); + if (cell.Objects != null) + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + if (!ob.Blocking) continue; + return; + } + } + + MirDirection dir = Functions.DirectionFromPoint(CurrentLocation, location); + + if (Walk(dir)) return; + + switch (Envir.Random.Next(2)) //No favour + { + case 0: + for (int i = 0; i < 7; i++) + { + dir = Functions.NextDir(dir); + + if (Walk(dir)) + return; + } + break; + default: + for (int i = 0; i < 7; i++) + { + dir = Functions.PreviousDir(dir); + + if (Walk(dir)) + return; + } + break; + } + } + + public virtual void Turn(MirDirection dir) + { + if (!CanMove) return; + + Direction = dir; + + InSafeZone = CurrentMap.GetSafeZone(CurrentLocation) != null; + + Cell cell = CurrentMap.GetCell(CurrentLocation); + + for (int i = 0; i < cell.Objects.Count; i++) + { + if (cell.Objects[i].Race != ObjectType.Spell) continue; + SpellObject ob = (SpellObject)cell.Objects[i]; + + ob.ProcessSpell(this); + //break; + } + + Broadcast(new S.ObjectTurn { ObjectID = ObjectID, Direction = Direction, Location = CurrentLocation }); + } + + public virtual bool Walk(MirDirection dir) + { + if (!CanMove) return false; + + Point location = Functions.PointMove(CurrentLocation, dir, 1); + + if (!CurrentMap.ValidPoint(location)) return false; + + Cell cell = CurrentMap.GetCell(location); + + if (cell.Objects != null) + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + if (!ob.Blocking) continue; + + return false; + } + + CurrentMap.GetCell(CurrentLocation).Remove(this); + + Direction = dir; + RemoveObjects(dir, 1); + CurrentLocation = location; + CurrentMap.GetCell(CurrentLocation).Add(this); + AddObjects(dir, 1); + + if (Hidden) + { + RemoveBuff(BuffType.Hiding); + } + + CellTime = Envir.Time + 500; + ActionTime = Envir.Time + 300; + MoveTime = Envir.Time + MoveSpeed; + if (MoveTime > AttackTime) + AttackTime = MoveTime; + + InSafeZone = CurrentMap.GetSafeZone(CurrentLocation) != null; + + Broadcast(new S.ObjectWalk { ObjectID = ObjectID, Direction = Direction, Location = CurrentLocation }); + + cell = CurrentMap.GetCell(CurrentLocation); + + for (int i = 0; i < cell.Objects.Count; i++) + { + if (cell.Objects[i].Race != ObjectType.Spell) continue; + SpellObject ob = (SpellObject)cell.Objects[i]; + + ob.ProcessSpell(this); + //break; + } + + return true; + } + protected virtual void Attack() + { + if (BindingShotCenter) ReleaseBindingShot(); + + ShockTime = 0; + + if (!Target.IsAttackTarget(this)) + { + Target = null; + return; + } + + Direction = Functions.DirectionFromPoint(CurrentLocation, Target.CurrentLocation); + Broadcast(new S.ObjectAttack { ObjectID = ObjectID, Direction = Direction, Location = CurrentLocation }); + + ActionTime = Envir.Time + 300; + AttackTime = Envir.Time + AttackSpeed; + + int damage = GetAttackPower(Stats[Stat.MinDC], Stats[Stat.MaxDC]); + if (damage == 0) return; + + DelayedAction action = new DelayedAction(DelayedType.Damage, Envir.Time + 300, Target, damage, DefenceType.ACAgility); + ActionList.Add(action); + } + + public void ReleaseBindingShot() + { + if (!BindingShotCenter) return; + + ShockTime = 0; + Broadcast(GetInfo());//update clients in range (remove effect) + BindingShotCenter = false; + + //the centertarget is escaped so make all shocked mobs awake (3x3 from center) + Point place = CurrentLocation; + for (int y = place.Y - 1; y <= place.Y + 1; y++) + { + if (y < 0) continue; + if (y >= CurrentMap.Height) break; + + for (int x = place.X - 1; x <= place.X + 1; x++) + { + if (x < 0) continue; + if (x >= CurrentMap.Width) break; + + Cell cell = CurrentMap.GetCell(x, y); + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject targetob = cell.Objects[i]; + if (targetob == null || targetob.Node == null || targetob.Race != ObjectType.Monster) continue; + if (((MonsterObject)targetob).ShockTime == 0) continue; + + //each centerTarget has its own effect which needs to be cleared when no longer shocked + if (((MonsterObject)targetob).BindingShotCenter) ((MonsterObject)targetob).ReleaseBindingShot(); + else ((MonsterObject)targetob).ShockTime = 0; + + break; + } + } + } + } + + public bool FindNearby(int distance) + { + for (int d = 0; d <= distance; d++) + { + for (int y = CurrentLocation.Y - d; y <= CurrentLocation.Y + d; y++) + { + if (y < 0) continue; + if (y >= CurrentMap.Height) break; + + for (int x = CurrentLocation.X - d; x <= CurrentLocation.X + d; x += Math.Abs(y - CurrentLocation.Y) == d ? 1 : d * 2) + { + if (x < 0) continue; + if (x >= CurrentMap.Width) break; + if (!CurrentMap.ValidPoint(x, y)) continue; + Cell cell = CurrentMap.GetCell(x, y); + if (cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + switch (ob.Race) + { + case ObjectType.Monster: + case ObjectType.Player: + if (!ob.IsAttackTarget(this)) continue; + if (ob.Hidden && (!CoolEye || Level < ob.Level)) continue; + if (ob.Race == ObjectType.Player) + { + PlayerObject player = ((PlayerObject)ob); + if (player.GMGameMaster) continue; + } + return true; + default: + continue; + } + } + } + } + } + + return false; + } + public bool FindFriendsNearby(int distance) + { + for (int d = 0; d <= distance; d++) + { + for (int y = CurrentLocation.Y - d; y <= CurrentLocation.Y + d; y++) + { + if (y < 0) continue; + if (y >= CurrentMap.Height) break; + + for (int x = CurrentLocation.X - d; x <= CurrentLocation.X + d; x += Math.Abs(y - CurrentLocation.Y) == d ? 1 : d * 2) + { + if (x < 0) continue; + if (x >= CurrentMap.Width) break; + if (!CurrentMap.ValidPoint(x, y)) continue; + Cell cell = CurrentMap.GetCell(x, y); + if (cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + switch (ob.Race) + { + case ObjectType.Monster: + case ObjectType.Player: + if (ob == this || ob.Dead) continue; + if (ob.IsAttackTarget(this)) continue; + if (ob.Race == ObjectType.Player) + { + PlayerObject player = ((PlayerObject)ob); + if (player.GMGameMaster) continue; + } + return true; + default: + continue; + } + } + } + } + } + + return false; + } + + protected List FindAllFriends(int dist, Point location, bool needSight = true, bool ownAI = true) + { + List targets = new List(); + for (int d = 0; d <= dist; d++) + { + for (int y = location.Y - d; y <= location.Y + d; y++) + { + if (y < 0) continue; + if (y >= CurrentMap.Height) break; + + for (int x = location.X - d; x <= location.X + d; x += Math.Abs(y - location.Y) == d ? 1 : d * 2) + { + if (x < 0) continue; + if (x >= CurrentMap.Width) break; + + Cell cell = CurrentMap.GetCell(x, y); + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + + if (ob == this) continue; + + switch (ob.Race) + { + case ObjectType.Monster: + case ObjectType.Player: + if (ob.Dead) continue; + if (!ownAI && ob.Race == ObjectType.Monster && ((MonsterObject)ob).Info.AI == Info.AI) continue; + if (!ob.IsFriendlyTarget(this)) continue; + if (ob.Master != Master) continue; + if (ob.Hidden && (!CoolEye || Level < ob.Level) && needSight) continue; + targets.Add(ob); + continue; + default: + continue; + } + } + } + } + } + return targets; + } + + public List FindAllNearby(int dist, Point location, bool needSight = true) + { + List targets = new List(); + for (int d = 0; d <= dist; d++) + { + for (int y = location.Y - d; y <= location.Y + d; y++) + { + if (y < 0) continue; + if (y >= CurrentMap.Height) break; + + for (int x = location.X - d; x <= location.X + d; x += Math.Abs(y - location.Y) == d ? 1 : d * 2) + { + if (x < 0) continue; + if (x >= CurrentMap.Width) break; + + Cell cell = CurrentMap.GetCell(x, y); + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + switch (ob.Race) + { + case ObjectType.Monster: + case ObjectType.Player: + targets.Add(ob); + continue; + default: + continue; + } + } + } + } + } + return targets; + } + + protected List FindAllTargets(int dist, Point location, bool needSight = true) + { + List targets = new List(); + for (int d = 0; d <= dist; d++) + { + for (int y = location.Y - d; y <= location.Y + d; y++) + { + if (y < 0) continue; + if (y >= CurrentMap.Height) break; + + for (int x = location.X - d; x <= location.X + d; x += Math.Abs(y - location.Y) == d ? 1 : d * 2) + { + if (x < 0) continue; + if (x >= CurrentMap.Width) break; + + Cell cell = CurrentMap.GetCell(x, y); + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + switch (ob.Race) + { + case ObjectType.Monster: + case ObjectType.Player: + if (!ob.IsAttackTarget(this)) continue; + if (ob.Hidden && (!CoolEye || Level < ob.Level) && needSight) continue; + if (ob.Race == ObjectType.Player) + { + PlayerObject player = ((PlayerObject)ob); + if (player.GMGameMaster) continue; + } + targets.Add(ob); + continue; + default: + continue; + } + } + } + } + } + return targets; + } + + public override bool IsAttackTarget(HumanObject attacker) + { + if (attacker == null || attacker.Node == null) return false; + if (Dead) return false; + if (Master == null) return true; + + if (attacker.AMode == AttackMode.Peace) return false; + if (Master == attacker) return attacker.AMode == AttackMode.All; + if (Master.Race == ObjectType.Player && (attacker.InSafeZone || InSafeZone)) return false; + + switch (attacker.AMode) + { + case AttackMode.Group: + return Master.GroupMembers == null || !Master.GroupMembers.Contains(attacker); + case AttackMode.Guild: + { + if (!(Master is PlayerObject)) return false; + PlayerObject master = (PlayerObject)Master; + return master.MyGuild == null || master.MyGuild != attacker.MyGuild; + } + case AttackMode.EnemyGuild: + { + if (!(Master is PlayerObject)) return false; + PlayerObject master = (PlayerObject)Master; + return (master.MyGuild != null && attacker.MyGuild != null) && master.MyGuild.IsEnemy(attacker.MyGuild); + } + case AttackMode.RedBrown: + return Master.PKPoints >= 200 || Envir.Time < Master.BrownTime; + default: + return true; + } + } + public override bool IsAttackTarget(MonsterObject attacker) + { + if (attacker == null || attacker.Node == null) return false; + if (Dead || attacker == this) return false; + + if (attacker.Info.AI == 6 || attacker.Info.AI == 113) // Guard + { + if (Info.AI != 1 && Info.AI != 2 && Info.AI != 3 && (Master == null || Master.PKPoints >= 200)) //Not Dear/Hen/Tree/Pets or Red Master + return true; + } + else if (attacker.Info.AI == 58) // Tao Guard - attacks Pets + { + if (Info.AI != 1 && Info.AI != 2 && Info.AI != 3 && (Master == null || Master.AMode != AttackMode.Peace)) //Not Dear/Hen/Tree or Peaceful Master + return true; + } + else if (Master != null) //Pet Attacked + { + if (attacker.Master == null) //Wild Monster + return true; + + //Pet Vs Pet + if (Master == attacker.Master) + return false; + + if (Envir.Time < ShockTime) //Shocked + return false; + + if (Master.Race == ObjectType.Player && attacker.Master.Race == ObjectType.Player && (Master.InSafeZone || attacker.Master.InSafeZone)) return false; + + switch (attacker.Master.AMode) + { + case AttackMode.Group: + if (Master.GroupMembers != null && Master.GroupMembers.Contains((PlayerObject)attacker.Master)) return false; + break; + case AttackMode.Guild: + break; + case AttackMode.EnemyGuild: + break; + case AttackMode.RedBrown: + if (attacker.Master.PKPoints < 200 || Envir.Time > attacker.Master.BrownTime) return false; + break; + case AttackMode.Peace: + return false; + } + + for (int i = 0; i < Master.Pets.Count; i++) + if (Master.Pets[i].EXPOwner == attacker.Master) return true; + + for (int i = 0; i < attacker.Master.Pets.Count; i++) + { + MonsterObject ob = attacker.Master.Pets[i]; + if (ob == Target || ob.Target == this) return true; + } + + return Master.LastHitter == attacker.Master; + } + else if (attacker.Master != null) //Pet Attacking Wild Monster + { + if (Envir.Time < ShockTime) //Shocked + return false; + + for (int i = 0; i < attacker.Master.Pets.Count; i++) + { + MonsterObject ob = attacker.Master.Pets[i]; + if (ob == Target || ob.Target == this) return true; + } + + if (Target == attacker.Master) + return true; + } + + if (Envir.Time < attacker.HallucinationTime) return true; + + return Envir.Time < attacker.RageTime; + } + public override bool IsFriendlyTarget(HumanObject ally) + { + if (Master == null) return false; + if (Master == ally) return true; + + switch (ally.AMode) + { + case AttackMode.Group: + return Master.GroupMembers != null && Master.GroupMembers.Contains(ally); + case AttackMode.Guild: + return false; + case AttackMode.EnemyGuild: + return true; + case AttackMode.RedBrown: + return Master.PKPoints < 200 & Envir.Time > Master.BrownTime; + } + return true; + } + + public override bool IsFriendlyTarget(MonsterObject ally) + { + if (Master != null) return false; + if (ally.Race != ObjectType.Monster) return false; + if (ally.Master != null) return false; + + return true; + } + + public override int Attacked(HumanObject attacker, int damage, DefenceType type = DefenceType.ACAgility, bool damageWeapon = true) + { + if (Target == null && attacker.IsAttackTarget(this)) + { + Target = attacker; + } + + var armour = GetArmour(type, attacker, out bool hit); + + if (!hit) + return 0; + + armour = (int)Math.Max(int.MinValue, (Math.Min(int.MaxValue, (decimal)(armour * ArmourRate)))); + damage = (int)Math.Max(int.MinValue, (Math.Min(int.MaxValue, (decimal)(damage * DamageRate)))); + + if (damageWeapon) + attacker.DamageWeapon(); + damage += attacker.Stats[Stat.AttackBonus]; + + if (armour >= damage) + { + BroadcastDamageIndicator(DamageType.Miss); + return 0; + } + + if (Target != this && attacker.IsAttackTarget(this)) + { + if (attacker.Info.MentalState == 2) + { + if (Functions.MaxDistance(CurrentLocation, attacker.CurrentLocation) < (8 - attacker.Info.MentalStateLvl)) + Target = attacker; + } + else + Target = attacker; + } + + if (BindingShotCenter) ReleaseBindingShot(); + ShockTime = 0; + + if (Master != null && Master != attacker) + if (Envir.Time > Master.BrownTime && Master.PKPoints < 200) + attacker.BrownTime = Envir.Time + Settings.Minute; + + if (EXPOwner == null || EXPOwner.Dead) + { + EXPOwner = GetAttacker(attacker); + } + + if (EXPOwner == attacker) + EXPOwnerTime = Envir.Time + EXPOwnerDelay; + + ushort levelOffset = (ushort)(Level > attacker.Level ? 0 : Math.Min(10, attacker.Level - Level)); + + ApplyNegativeEffects(attacker, type, levelOffset); + + Broadcast(new S.ObjectStruck { ObjectID = ObjectID, AttackerID = attacker.ObjectID, Direction = Direction, Location = CurrentLocation }); + + if (attacker.Stats[Stat.HPDrainRatePercent] > 0 && damageWeapon) + { + attacker.HpDrain += Math.Max(0, ((float)(damage - armour) / 100) * attacker.Stats[Stat.HPDrainRatePercent]); + if (attacker.HpDrain > 2) + { + int hpGain = (int)Math.Floor(attacker.HpDrain); + attacker.ChangeHP(hpGain); + attacker.HpDrain -= hpGain; + } + } + + if (Master != null && Master != attacker && Master.Race == ObjectType.Player && Envir.Time > Master.BrownTime && Master.PKPoints < 200 && !((PlayerObject)Master).AtWar(attacker)) + { + attacker.BrownTime = Envir.Time + Settings.Minute; + } + + for (int i = 0; i < attacker.Pets.Count; i++) + { + MonsterObject ob = attacker.Pets[i]; + + if (IsAttackTarget(ob) && (ob.Target == null)) ob.Target = this; + } + + BroadcastDamageIndicator(DamageType.Hit, armour - damage); + + ChangeHP(armour - damage); + return damage - armour; + } + + public override int Attacked(MonsterObject attacker, int damage, DefenceType type = DefenceType.ACAgility) + { + if (Target == null && attacker.IsAttackTarget(this)) + Target = attacker; + + + var armour = GetArmour(type, attacker, out bool hit); + if (!hit) + return 0; + + armour = (int)Math.Max(int.MinValue, (Math.Min(int.MaxValue, (decimal)(armour * ArmourRate)))); + damage = (int)Math.Max(int.MinValue, (Math.Min(int.MaxValue, (decimal)(damage * DamageRate)))); + + if (armour >= damage) + { + BroadcastDamageIndicator(DamageType.Miss); + return 0; + } + + if (Target != this && attacker.IsAttackTarget(this)) + Target = attacker; + + if (BindingShotCenter) ReleaseBindingShot(); + ShockTime = 0; + + if (attacker.Info.AI == 6 || attacker.Info.AI == 58 || attacker.Info.AI == 113) + EXPOwner = null; + + else if (attacker.Master != null) + { + if (attacker.CurrentMap != attacker.Master.CurrentMap || !Functions.InRange(attacker.CurrentLocation, attacker.Master.CurrentLocation, Globals.DataRange)) + EXPOwner = null; + else + { + + if (EXPOwner == null || EXPOwner.Dead) + EXPOwner = attacker; + + if (EXPOwner == attacker.Master) + EXPOwnerTime = Envir.Time + EXPOwnerDelay; + } + + } + + Broadcast(new S.ObjectStruck { ObjectID = ObjectID, AttackerID = attacker.ObjectID, Direction = Direction, Location = CurrentLocation }); + + BroadcastDamageIndicator(DamageType.Hit, armour - damage); + + ChangeHP(armour - damage); + return damage - armour; + } + + public override int Struck(int damage, DefenceType type = DefenceType.ACAgility) + { + int armour = 0; + + switch (type) + { + case DefenceType.ACAgility: + armour = GetAttackPower(Stats[Stat.MinAC], Stats[Stat.MaxAC]); + break; + case DefenceType.AC: + armour = GetAttackPower(Stats[Stat.MinAC], Stats[Stat.MaxAC]); + break; + case DefenceType.MACAgility: + armour = GetAttackPower(Stats[Stat.MinMAC], Stats[Stat.MaxMAC]); + break; + case DefenceType.MAC: + armour = GetAttackPower(Stats[Stat.MinMAC], Stats[Stat.MaxMAC]); + break; + case DefenceType.Agility: + break; + } + + armour = (int)Math.Max(int.MinValue, (Math.Min(int.MaxValue, (decimal)(armour * ArmourRate)))); + damage = (int)Math.Max(int.MinValue, (Math.Min(int.MaxValue, (decimal)(damage * DamageRate)))); + + if (armour >= damage) return 0; + Broadcast(new S.ObjectStruck { ObjectID = ObjectID, AttackerID = 0, Direction = Direction, Location = CurrentLocation }); + + ChangeHP(armour - damage); + return damage - armour; + } + + public override void ApplyPoison(Poison p, MapObject Caster = null, bool NoResist = false, bool ignoreDefence = true) + { + if (p.Owner != null && p.Owner.IsAttackTarget(this) && Target == null) + Target = p.Owner; + + if (Master != null && p.Owner != null && p.Owner.Race == ObjectType.Player && p.Owner != Master) + { + if (Envir.Time > Master.BrownTime && Master.PKPoints < 200) + p.Owner.BrownTime = Envir.Time + Settings.Minute; + } + + if (!ignoreDefence && (p.PType == PoisonType.Green)) + { + int armour = GetAttackPower(Stats[Stat.MinMAC], Stats[Stat.MaxMAC]); + + if (p.Value < armour) + p.PType = PoisonType.None; + else + p.Value -= armour; + } + + if (p.PType == PoisonType.None) return; + + for (int i = 0; i < PoisonList.Count; i++) + { + if (PoisonList[i].PType != p.PType) continue; + if ((PoisonList[i].PType == PoisonType.Green) && (PoisonList[i].Value > p.Value)) return;//cant cast weak poison to cancel out strong poison + if ((PoisonList[i].PType != PoisonType.Green) && ((PoisonList[i].Duration - PoisonList[i].Time) > p.Duration)) return;//cant cast 1 second poison to make a 1minute poison go away! + if ((PoisonList[i].PType == PoisonType.Frozen) || (PoisonList[i].PType == PoisonType.Slow) || (PoisonList[i].PType == PoisonType.Paralysis)) return;//prevents mobs from being perma frozen/slowed + PoisonList[i] = p; + return; + } + PoisonList.Add(p); + } + + public override Buff AddBuff(BuffType type, MapObject owner, int duration, Stats stats, bool refreshStats = true, bool updateOnly = false, params int[] values) + { + Buff b = base.AddBuff(type, owner, duration, stats, refreshStats, updateOnly, values); + + var packet = new S.AddBuff + { + Buff = b.ToClientBuff(), + }; + + if (b.Info.Visible) Broadcast(packet); + + if (refreshStats) + { + RefreshAll(); + } + + return b; + } + + public override Packet GetInfo() + { + return new S.ObjectMonster + { + ObjectID = ObjectID, + Name = Name, + NameColour = NameColour, + Location = CurrentLocation, + Image = Info.Image, + Direction = Direction, + Effect = Info.Effect, + AI = Info.AI, + Light = Info.Light, + Dead = Dead, + Skeleton = Harvested, + Poison = CurrentPoison, + Hidden = Hidden, + ShockTime = (ShockTime > 0 ? ShockTime - Envir.Time : 0), + BindingShotCenter = BindingShotCenter, + Buffs = Buffs.Where(d => d.Info.Visible).Select(e => e.Type).ToList() + }; + } + + public override void ReceiveChat(string text, ChatType type) + { + throw new NotSupportedException(); + } + + public void RemoveObjects(MirDirection dir, int count) + { + switch (dir) + { + case MirDirection.Up: + //Bottom Block + for (int a = 0; a < count; a++) + { + int y = CurrentLocation.Y + Globals.DataRange - a; + if (y < 0 || y >= CurrentMap.Height) continue; + + for (int b = -Globals.DataRange; b <= Globals.DataRange; b++) + { + int x = CurrentLocation.X + b; + if (x < 0 || x >= CurrentMap.Width) continue; + + Cell cell = CurrentMap.GetCell(x, y); + + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + if (ob.Race != ObjectType.Player) continue; + ob.Remove(this); + } + } + } + break; + case MirDirection.UpRight: + //Bottom Block + for (int a = 0; a < count; a++) + { + int y = CurrentLocation.Y + Globals.DataRange - a; + if (y < 0 || y >= CurrentMap.Height) continue; + + for (int b = -Globals.DataRange; b <= Globals.DataRange; b++) + { + int x = CurrentLocation.X + b; + if (x < 0 || x >= CurrentMap.Width) continue; + + Cell cell = CurrentMap.GetCell(x, y); + + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + if (ob.Race != ObjectType.Player) continue; + ob.Remove(this); + } + } + } + + //Left Block + for (int a = -Globals.DataRange; a <= Globals.DataRange - count; a++) + { + int y = CurrentLocation.Y + a; + if (y < 0 || y >= CurrentMap.Height) continue; + + for (int b = 0; b < count; b++) + { + int x = CurrentLocation.X - Globals.DataRange + b; + if (x < 0 || x >= CurrentMap.Width) continue; + + Cell cell = CurrentMap.GetCell(x, y); + + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + if (ob.Race != ObjectType.Player) continue; + ob.Remove(this); + } + } + } + break; + case MirDirection.Right: + //Left Block + for (int a = -Globals.DataRange; a <= Globals.DataRange; a++) + { + int y = CurrentLocation.Y + a; + if (y < 0 || y >= CurrentMap.Height) continue; + + for (int b = 0; b < count; b++) + { + int x = CurrentLocation.X - Globals.DataRange + b; + if (x < 0 || x >= CurrentMap.Width) continue; + + Cell cell = CurrentMap.GetCell(x, y); + + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + if (ob.Race != ObjectType.Player) continue; + ob.Remove(this); + } + } + } + break; + case MirDirection.DownRight: + //Top Block + for (int a = 0; a < count; a++) + { + int y = CurrentLocation.Y - Globals.DataRange + a; + if (y < 0 || y >= CurrentMap.Height) continue; + + for (int b = -Globals.DataRange; b <= Globals.DataRange; b++) + { + int x = CurrentLocation.X + b; + if (x < 0 || x >= CurrentMap.Width) continue; + + Cell cell = CurrentMap.GetCell(x, y); + + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + if (ob.Race != ObjectType.Player) continue; + ob.Remove(this); + } + } + } + + //Left Block + for (int a = -Globals.DataRange + count; a <= Globals.DataRange; a++) + { + int y = CurrentLocation.Y + a; + if (y < 0 || y >= CurrentMap.Height) continue; + + for (int b = 0; b < count; b++) + { + int x = CurrentLocation.X - Globals.DataRange + b; + if (x < 0 || x >= CurrentMap.Width) continue; + + Cell cell = CurrentMap.GetCell(x, y); + + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + if (ob.Race != ObjectType.Player) continue; + ob.Remove(this); + } + } + } + break; + case MirDirection.Down: + for (int a = 0; a < count; a++) + { + int y = CurrentLocation.Y - Globals.DataRange + a; + if (y < 0 || y >= CurrentMap.Height) continue; + + for (int b = -Globals.DataRange; b <= Globals.DataRange; b++) + { + int x = CurrentLocation.X + b; + if (x < 0 || x >= CurrentMap.Width) continue; + + Cell cell = CurrentMap.GetCell(x, y); + + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + if (ob.Race != ObjectType.Player) continue; + ob.Remove(this); + } + } + } + break; + case MirDirection.DownLeft: + //Top Block + for (int a = 0; a < count; a++) + { + int y = CurrentLocation.Y - Globals.DataRange + a; + if (y < 0 || y >= CurrentMap.Height) continue; + + for (int b = -Globals.DataRange; b <= Globals.DataRange; b++) + { + int x = CurrentLocation.X + b; + if (x < 0 || x >= CurrentMap.Width) continue; + + Cell cell = CurrentMap.GetCell(x, y); + + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + if (ob.Race != ObjectType.Player) continue; + ob.Remove(this); + } + } + } + + //Right Block + for (int a = -Globals.DataRange + count; a <= Globals.DataRange; a++) + { + int y = CurrentLocation.Y + a; + if (y < 0 || y >= CurrentMap.Height) continue; + + for (int b = 0; b < count; b++) + { + int x = CurrentLocation.X + Globals.DataRange - b; + if (x < 0 || x >= CurrentMap.Width) continue; + + Cell cell = CurrentMap.GetCell(x, y); + + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + if (ob.Race != ObjectType.Player) continue; + ob.Remove(this); + } + } + } + break; + case MirDirection.Left: + for (int a = -Globals.DataRange; a <= Globals.DataRange; a++) + { + int y = CurrentLocation.Y + a; + if (y < 0 || y >= CurrentMap.Height) continue; + + for (int b = 0; b < count; b++) + { + int x = CurrentLocation.X + Globals.DataRange - b; + if (x < 0 || x >= CurrentMap.Width) continue; + + Cell cell = CurrentMap.GetCell(x, y); + + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + if (ob.Race != ObjectType.Player) continue; + ob.Remove(this); + } + } + } + break; + case MirDirection.UpLeft: + //Bottom Block + for (int a = 0; a < count; a++) + { + int y = CurrentLocation.Y + Globals.DataRange - a; + if (y < 0 || y >= CurrentMap.Height) continue; + + for (int b = -Globals.DataRange; b <= Globals.DataRange; b++) + { + int x = CurrentLocation.X + b; + if (x < 0 || x >= CurrentMap.Width) continue; + if (x < 0 || x >= CurrentMap.Width) continue; + + Cell cell = CurrentMap.GetCell(x, y); + + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + if (ob.Race != ObjectType.Player) continue; + ob.Remove(this); + } + } + } + + //Right Block + for (int a = -Globals.DataRange; a <= Globals.DataRange - count; a++) + { + int y = CurrentLocation.Y + a; + if (y < 0 || y >= CurrentMap.Height) continue; + + for (int b = 0; b < count; b++) + { + int x = CurrentLocation.X + Globals.DataRange - b; + if (x < 0 || x >= CurrentMap.Width) continue; + + Cell cell = CurrentMap.GetCell(x, y); + + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + if (ob.Race != ObjectType.Player) continue; + ob.Remove(this); + } + } + } + break; + } + } + public void AddObjects(MirDirection dir, int count) + { + switch (dir) + { + case MirDirection.Up: + for (int a = 0; a < count; a++) + { + int y = CurrentLocation.Y - Globals.DataRange + a; + if (y < 0 || y >= CurrentMap.Height) continue; + + for (int b = -Globals.DataRange; b <= Globals.DataRange; b++) + { + int x = CurrentLocation.X + b; + if (x < 0 || x >= CurrentMap.Width) continue; + + Cell cell = CurrentMap.GetCell(x, y); + + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + if (ob.Race != ObjectType.Player) continue; + ob.Add(this); + } + } + } + break; + case MirDirection.UpRight: + //Top Block + for (int a = 0; a < count; a++) + { + int y = CurrentLocation.Y - Globals.DataRange + a; + if (y < 0 || y >= CurrentMap.Height) continue; + + for (int b = -Globals.DataRange; b <= Globals.DataRange; b++) + { + int x = CurrentLocation.X + b; + if (x < 0 || x >= CurrentMap.Width) continue; + + Cell cell = CurrentMap.GetCell(x, y); + + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + if (ob.Race != ObjectType.Player) continue; + ob.Add(this); + } + } + } + + //Right Block + for (int a = -Globals.DataRange + count; a <= Globals.DataRange; a++) + { + int y = CurrentLocation.Y + a; + if (y < 0 || y >= CurrentMap.Height) continue; + + for (int b = 0; b < count; b++) + { + int x = CurrentLocation.X + Globals.DataRange - b; + if (x < 0 || x >= CurrentMap.Width) continue; + + Cell cell = CurrentMap.GetCell(x, y); + + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + if (ob.Race != ObjectType.Player) continue; + ob.Add(this); + } + } + } + break; + case MirDirection.Right: + for (int a = -Globals.DataRange; a <= Globals.DataRange; a++) + { + int y = CurrentLocation.Y + a; + if (y < 0 || y >= CurrentMap.Height) continue; + + for (int b = 0; b < count; b++) + { + int x = CurrentLocation.X + Globals.DataRange - b; + if (x < 0 || x >= CurrentMap.Width) continue; + + Cell cell = CurrentMap.GetCell(x, y); + + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + if (ob.Race != ObjectType.Player) continue; + ob.Add(this); + } + } + } + break; + case MirDirection.DownRight: + //Bottom Block + for (int a = 0; a < count; a++) + { + int y = CurrentLocation.Y + Globals.DataRange - a; + if (y < 0 || y >= CurrentMap.Height) continue; + + for (int b = -Globals.DataRange; b <= Globals.DataRange; b++) + { + int x = CurrentLocation.X + b; + if (x < 0 || x >= CurrentMap.Width) continue; + + Cell cell = CurrentMap.GetCell(x, y); + + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + if (ob.Race != ObjectType.Player) continue; + ob.Add(this); + } + } + } + + //Right Block + for (int a = -Globals.DataRange; a <= Globals.DataRange - count; a++) + { + int y = CurrentLocation.Y + a; + if (y < 0 || y >= CurrentMap.Height) continue; + + for (int b = 0; b < count; b++) + { + int x = CurrentLocation.X + Globals.DataRange - b; + if (x < 0 || x >= CurrentMap.Width) continue; + + Cell cell = CurrentMap.GetCell(x, y); + + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + if (ob.Race != ObjectType.Player) continue; + ob.Add(this); + } + } + } + break; + case MirDirection.Down: + //Bottom Block + for (int a = 0; a < count; a++) + { + int y = CurrentLocation.Y + Globals.DataRange - a; + if (y < 0 || y >= CurrentMap.Height) continue; + + for (int b = -Globals.DataRange; b <= Globals.DataRange; b++) + { + int x = CurrentLocation.X + b; + if (x < 0 || x >= CurrentMap.Width) continue; + + Cell cell = CurrentMap.GetCell(x, y); + + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + if (ob.Race != ObjectType.Player) continue; + ob.Add(this); + } + } + } + break; + case MirDirection.DownLeft: + //Bottom Block + for (int a = 0; a < count; a++) + { + int y = CurrentLocation.Y + Globals.DataRange - a; + if (y < 0 || y >= CurrentMap.Height) continue; + + for (int b = -Globals.DataRange; b <= Globals.DataRange; b++) + { + int x = CurrentLocation.X + b; + if (x < 0 || x >= CurrentMap.Width) continue; + + Cell cell = CurrentMap.GetCell(x, y); + + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + if (ob.Race != ObjectType.Player) continue; + ob.Add(this); + } + } + } + + //Left Block + for (int a = -Globals.DataRange; a <= Globals.DataRange - count; a++) + { + int y = CurrentLocation.Y + a; + if (y < 0 || y >= CurrentMap.Height) continue; + + for (int b = 0; b < count; b++) + { + int x = CurrentLocation.X - Globals.DataRange + b; + if (x < 0 || x >= CurrentMap.Width) continue; + + Cell cell = CurrentMap.GetCell(x, y); + + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + if (ob.Race != ObjectType.Player) continue; + ob.Add(this); + } + } + } + break; + case MirDirection.Left: + //Left Block + for (int a = -Globals.DataRange; a <= Globals.DataRange; a++) + { + int y = CurrentLocation.Y + a; + if (y < 0 || y >= CurrentMap.Height) continue; + + for (int b = 0; b < count; b++) + { + int x = CurrentLocation.X - Globals.DataRange + b; + if (x < 0 || x >= CurrentMap.Width) continue; + + Cell cell = CurrentMap.GetCell(x, y); + + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + if (ob.Race != ObjectType.Player) continue; + ob.Add(this); + } + } + } + break; + case MirDirection.UpLeft: + //Top Block + for (int a = 0; a < count; a++) + { + int y = CurrentLocation.Y - Globals.DataRange + a; + if (y < 0 || y >= CurrentMap.Height) continue; + + for (int b = -Globals.DataRange; b <= Globals.DataRange; b++) + { + int x = CurrentLocation.X + b; + if (x < 0 || x >= CurrentMap.Width) continue; + + Cell cell = CurrentMap.GetCell(x, y); + + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + if (ob.Race != ObjectType.Player) continue; + ob.Add(this); + } + } + } + + //Left Block + for (int a = -Globals.DataRange + count; a <= Globals.DataRange; a++) + { + int y = CurrentLocation.Y + a; + if (y < 0 || y >= CurrentMap.Height) continue; + + for (int b = 0; b < count; b++) + { + int x = CurrentLocation.X - Globals.DataRange + b; + if (x < 0 || x >= CurrentMap.Width) continue; + + Cell cell = CurrentMap.GetCell(x, y); + + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + if (ob.Race != ObjectType.Player) continue; + ob.Add(this); + } + } + } + break; + } + } + + public override void Add(HumanObject player) + { + player.Enqueue(GetInfo()); + SendHealth(player); + } + + public override void SendHealth(HumanObject player) + { + if (!player.IsMember(Master) && !(player.IsMember(EXPOwner) && AutoRev) && Envir.Time > RevTime) return; + byte time = Math.Min(byte.MaxValue, (byte)Math.Max(5, (RevTime - Envir.Time) / 1000)); + player.Enqueue(new S.ObjectHealth { ObjectID = ObjectID, Percent = PercentHealth, Expire = time }); + } + + public void PetExp(uint amount) + { + if (PetLevel >= MaxPetLevel) return; + + if (Info.Name == Settings.SkeletonName || Info.Name == Settings.ShinsuName || Info.Name == Settings.AngelName) + amount *= 3; + + PetExperience += amount; + + if (PetExperience < (PetLevel + 1) * 20000) return; + + PetExperience = (uint)(PetExperience - ((PetLevel + 1) * 20000)); + PetLevel++; + RefreshAll(); + OperateTime = 0; + BroadcastHealthChange(); + } + public override void Despawn() + { + SlaveList.Clear(); + base.Despawn(); + } + + + // MONSTER AI ATTACKS \\\ + protected virtual void PoisonTarget(MapObject target, int chanceToPoison, long poisonDuration, PoisonType poison, long poisonTickSpeed = 1000, bool noResist = false, bool ignoreDefence = true) + { + int value = GetAttackPower(Stats[Stat.MinSC], Stats[Stat.MaxSC]); + + if (Envir.Random.Next(Settings.PoisonResistWeight) >= target.Stats[Stat.PoisonResist]) + { + if (Envir.Random.Next(chanceToPoison) == 0) + { + target.ApplyPoison(new Poison { Owner = this, Duration = poisonDuration, PType = poison, Value = value, TickSpeed = poisonTickSpeed }, this, noResist, ignoreDefence); + } + } + } + + protected virtual void TriangleAttack(int damage, int distance, int limitWidth = -1, int additionalDelay = 500, DefenceType defenceType = DefenceType.ACAgility, bool push = false) + { + List points = new List(); + + for (int i = 1; i <= distance; i++) + { + Point target = Functions.PointMove(CurrentLocation, Direction, i); + + if (!CurrentMap.ValidPoint(target)) continue; + + points.Add(target); + + if (distance > 1) + { + Point left = target; + Point right = target; + + var offset = i - 1; + + for (int l = 1; l <= offset; l++) + { + if (limitWidth > -1 && l > limitWidth) break; + + left = Functions.Left(left, Direction); + if (!CurrentMap.ValidPoint(left)) continue; + points.Add(left); + } + + for (int r = 1; r <= offset; r++) + { + if (limitWidth > -1 && r > limitWidth) break; + + right = Functions.Right(right, Direction); + if (!CurrentMap.ValidPoint(right)) continue; + points.Add(right); + } + } + } + + foreach (var point in points) + { + Cell cell = CurrentMap.GetCell(point); + if (cell.Objects == null) continue; + + for (int o = 0; o < cell.Objects.Count; o++) + { + MapObject ob = cell.Objects[o]; + if (ob.Race == ObjectType.Monster || ob.Race == ObjectType.Player) + { + if (!ob.IsAttackTarget(this)) continue; + + if (push) + { + var dir = Functions.DirectionFromPoint(CurrentLocation, ob.CurrentLocation); + + ob.Pushed(this, dir, distance - 1); + } + + int delay = Functions.MaxDistance(CurrentLocation, ob.CurrentLocation) * 50 + additionalDelay; //50 MS per Step + + DelayedAction action = new DelayedAction(DelayedType.Damage, Envir.Time + delay, ob, damage, defenceType); + + ActionList.Add(action); + } + else continue; + + break; + } + } + } + + protected virtual void LineAttack(int damage, int distance, int additionalDelay = 500, DefenceType defenceType = DefenceType.ACAgility, bool push = false) + { + for (int i = 1; i <= distance; i++) + { + Point target = Functions.PointMove(CurrentLocation, Direction, i); + + if (!CurrentMap.ValidPoint(target)) continue; + + Cell cell = CurrentMap.GetCell(target); + if (cell.Objects == null) continue; + + for (int o = 0; o < cell.Objects.Count; o++) + { + MapObject ob = cell.Objects[o]; + if (ob.Race == ObjectType.Monster || ob.Race == ObjectType.Player) + { + if (!ob.IsAttackTarget(this)) continue; + + if (push) + { + ob.Pushed(this, Direction, distance - 1); + } + + int delay = Functions.MaxDistance(CurrentLocation, ob.CurrentLocation) * 50 + additionalDelay; //50 MS per Step + DelayedAction action = new DelayedAction(DelayedType.Damage, Envir.Time + delay, ob, damage, defenceType); + ActionList.Add(action); + } + else continue; + + break; + } + } + } + + protected virtual void WideLineAttack(int damage, int distance, int additionalDelay = 500, DefenceType defenceType = DefenceType.ACAgility, bool push = false, int width = 3) + { + if (width <= 2) + { + width = 3; + } + + var even = width % 2 == 0; + + if (even) + { + width--; + } + + var startPoints = new List + { + CurrentLocation + }; + + var half = (width - 1) / 2; + + var leftLoc = CurrentLocation; + var rightLoc = CurrentLocation; + + for (int j = 0; j < half; j++) + { + leftLoc = Functions.Left(leftLoc, Direction); + rightLoc = Functions.Right(rightLoc, Direction); + + startPoints.Add(leftLoc); + startPoints.Add(rightLoc); + } + + for (int j = 0; j < startPoints.Count; j++) + { + var point = startPoints[j]; + + for (int i = 1; i <= distance; i++) + { + Point target = Functions.PointMove(point, Direction, i); + + if (!CurrentMap.ValidPoint(target)) continue; + + Cell cell = CurrentMap.GetCell(target); + if (cell.Objects == null) continue; + + for (int o = 0; o < cell.Objects.Count; o++) + { + MapObject ob = cell.Objects[o]; + if (ob.Race == ObjectType.Monster || ob.Race == ObjectType.Player) + { + if (!ob.IsAttackTarget(this)) continue; + + if (push) + { + ob.Pushed(this, Direction, distance - 1); + } + + int delay = Functions.MaxDistance(CurrentLocation, ob.CurrentLocation) * 50 + additionalDelay; //50 MS per Step + DelayedAction action = new DelayedAction(DelayedType.Damage, Envir.Time + delay, ob, damage, defenceType); + ActionList.Add(action); + } + else continue; + + break; + } + } + } + } + + protected virtual void HalfmoonAttack(int damage, int delay = 500, DefenceType defenceType = DefenceType.ACAgility) + { + MirDirection dir = Functions.PreviousDir(Direction); + + for (int i = 0; i < 4; i++) + { + Point target = Functions.PointMove(CurrentLocation, dir, 1); + dir = Functions.NextDir(dir); + + if (!CurrentMap.ValidPoint(target)) continue; + + Cell cell = CurrentMap.GetCell(target); + if (cell.Objects == null) continue; + + for (int o = 0; o < cell.Objects.Count; o++) + { + MapObject ob = cell.Objects[o]; + if (ob.Race != ObjectType.Player && ob.Race != ObjectType.Monster) continue; + if (!ob.IsAttackTarget(this)) continue; + + DelayedAction action = new DelayedAction(DelayedType.Damage, Envir.Time + delay, ob, damage, defenceType); + ActionList.Add(action); + break; + } + } + } + + // Sanjian + protected virtual void ThreeQuarterMoonAttack(int damage, int delay = 500, DefenceType defenceType = DefenceType.ACAgility) + { + MirDirection dir = Functions.PreviousDir(Direction); + + for (int i = 0; i < 6; i++) + { + Point target = Functions.PointMove(CurrentLocation, dir, 1); + dir = Functions.NextDir(dir); + + if (!CurrentMap.ValidPoint(target)) continue; + + Cell cell = CurrentMap.GetCell(target); + if (cell.Objects == null) continue; + + for (int o = 0; o < cell.Objects.Count; o++) + { + MapObject ob = cell.Objects[o]; + if (ob.Race != ObjectType.Player && ob.Race != ObjectType.Monster) continue; + if (!ob.IsAttackTarget(this)) continue; + + DelayedAction action = new DelayedAction(DelayedType.Damage, Envir.Time + delay, ob, damage, defenceType); + ActionList.Add(action); + break; + } + } + } + + protected virtual void FullmoonAttack(int damage, int delay = 500, DefenceType defenceType = DefenceType.ACAgility, int pushDistance = -1, int distance = 1) + { + MirDirection dir = Direction; + + bool pushed = false; + + for (int j = 1; j <= distance; j++) + { + for (int i = 0; i < 8; i++) + { + dir = Functions.NextDir(dir); + Point point = Functions.PointMove(CurrentLocation, dir, j); + + if (!CurrentMap.ValidPoint(point)) continue; + + Cell cell = CurrentMap.GetCell(point); + + if (cell.Objects == null) continue; + + for (int o = 0; o < cell.Objects.Count; o++) + { + MapObject ob = cell.Objects[o]; + if (ob.Race != ObjectType.Player && ob.Race != ObjectType.Monster) continue; + if (!ob.IsAttackTarget(this)) continue; + + if (pushDistance > 0 && !pushed) + { + ob.Pushed(this, Direction, pushDistance); + pushed = true; + } + + DelayedAction action = new DelayedAction(DelayedType.Damage, Envir.Time + delay, ob, damage, defenceType); + ActionList.Add(action); + break; + } + } + } + } + + protected virtual void ProjectileAttack(int damage, DefenceType type = DefenceType.ACAgility, int additionalDelay = 500) + { + int delay = Functions.MaxDistance(CurrentLocation, Target.CurrentLocation) * 50 + additionalDelay; + + DelayedAction action = new DelayedAction(DelayedType.RangeDamage, Envir.Time + delay, Target, damage, type); + ActionList.Add(action); + } + + protected virtual void SinglePushAttack(int damage, DefenceType type = DefenceType.AC, int delay = 500, int pushDistance = 3) + { + //Repulsion - (utilises DelayedAction so player is hit at end of push) + //need to put Damage Stats (DC/MC/SC) on mob for it to push + int levelGap = 5; + int mobLevel = this.Level; + int targetLevel = Target.Level; + + if ((targetLevel <= mobLevel + levelGap)) + { + if (Target.Pushed(this, Functions.DirectionFromPoint(CurrentLocation, Target.CurrentLocation), pushDistance) > 0) + { + AttackTime = Envir.Time + AttackSpeed + 300; + if (damage == 0) return; + + DelayedAction action = new DelayedAction(DelayedType.Damage, Envir.Time + delay, Target, damage, type); + ActionList.Add(action); + } + else + { + if (damage == 0) return; + + DelayedAction action = new DelayedAction(DelayedType.Damage, Envir.Time + delay, Target, damage, type); + ActionList.Add(action); + } + } + } + } +} diff --git a/Server/MirObjects/Monsters/PassiveMonster.cs b/Server/MirObjects/Monsters/PassiveMonster.cs new file mode 100644 index 0000000..1b23c81 --- /dev/null +++ b/Server/MirObjects/Monsters/PassiveMonster.cs @@ -0,0 +1,16 @@ +using Server.MirDatabase; + +namespace Server.MirObjects.Monsters +{ + public class PassiveMonster : MonsterObject + { + protected internal PassiveMonster(MonsterInfo info) + : base(info) + { + } + + protected override void FindTarget() + { + } + } +} diff --git a/Server/MirObjects/Monsters/Trainer.cs b/Server/MirObjects/Monsters/Trainer.cs new file mode 100644 index 0000000..84fb2a8 --- /dev/null +++ b/Server/MirObjects/Monsters/Trainer.cs @@ -0,0 +1,260 @@ +using Server.MirDatabase; + +namespace Server.MirObjects.Monsters +{ + public class Trainer : MonsterObject + { + private HumanObject _currentAttacker = null; + private int _hitCount = 0, _totalDamage = 0; + private long _lastAttackTime = 0, _StartTime = 0; + private bool Poisoned = false; + + protected override bool CanAttack { get { return false; } } + protected override bool CanMove { get { return false; } } + protected override bool DropItem(UserItem item) { throw new NotSupportedException(); } + protected override bool DropGold(uint gold) { throw new NotSupportedException(); } + + protected override void Attack() { } + protected override void ProcessRoam() { } + + public override bool Blocking { get { return true; } } + public override bool IsAttackTarget(HumanObject attacker) { return true; } + public override bool IsAttackTarget(MonsterObject attacker) + { + if (attacker.Master == null) return false; + + return true; + } + + public override void Die() { } + public override void ReceiveChat(string text, ChatType type) { } + + protected internal Trainer(MonsterInfo info) + : base(info) { } + + public override void Spawned() + { + PoisonStopRegen = false; + if (Respawn != null && Respawn.Info.Direction < 8) + Direction = (MirDirection)Respawn.Info.Direction; + + base.Spawned(); + } + + public override void Process() + { + base.Process(); + + if (_currentAttacker != null && _lastAttackTime + 5000 < Envir.Time) + { + OutputAverage(); + ResetStats(); + } + } + + public override int Attacked(HumanObject attacker, int damage, DefenceType type = DefenceType.ACAgility, bool damageWeapon = false) + { + if (attacker == null) return 0; + + if (_currentAttacker != null && _currentAttacker != attacker) + { + OutputAverage(); + ResetStats(); + } + + damage += attacker.Stats[Stat.AttackBonus]; + + int armour = 0; + //deal with trainers defense + switch (type) + { + case DefenceType.AC: + case DefenceType.ACAgility: + armour = GetAttackPower(Stats[Stat.MinAC], Stats[Stat.MaxAC]); + break; + case DefenceType.MAC: + case DefenceType.MACAgility: + armour = GetAttackPower(Stats[Stat.MinMAC], Stats[Stat.MaxMAC]); + break; + } + if (armour >= damage) + { + BroadcastDamageIndicator(DamageType.Miss); + return 0; + } + + damage -= armour; + + if (_currentAttacker == null) + _StartTime = Envir.Time; + _currentAttacker = attacker; + _hitCount++; + _totalDamage += damage; + _lastAttackTime = Envir.Time; + + ReportDamage(damage, type, false); + return 1; + } + + public override int Attacked(MonsterObject attacker, int damage, DefenceType type = DefenceType.ACAgility) + { + if (attacker == null || attacker.Master == null) return 0; + + if (_currentAttacker != null && _currentAttacker != attacker.Master) + { + OutputAverage(); + ResetStats(); + } + + int armour = 0; + + switch (type) + { + case DefenceType.AC: + case DefenceType.ACAgility: + armour = GetAttackPower(Stats[Stat.MinAC], Stats[Stat.MaxAC]); + break; + case DefenceType.MAC: + case DefenceType.MACAgility: + armour = GetAttackPower(Stats[Stat.MinMAC], Stats[Stat.MaxMAC]); + break; + } + if (armour >= damage) + { + BroadcastDamageIndicator(DamageType.Miss); + return 0; + } + damage -= armour; + + if (_currentAttacker == null) + _StartTime = Envir.Time; + + MapObject tmpAttacker = attacker.Master; + + while(true) + { + if(tmpAttacker.Master != null) + { + tmpAttacker = tmpAttacker.Master; + continue; + } + break; + } + + _currentAttacker = (PlayerObject)tmpAttacker; + + _hitCount++; + _totalDamage += damage; + _lastAttackTime = Envir.Time; + + ReportDamage(damage, type, true); + return 1; + } + + public override int Struck(int damage, DefenceType type = DefenceType.ACAgility) + { + return 0; + } + + public override void PoisonDamage(int damage, MapObject attacker) + { + damage = damage * (-1); + if (attacker == null || (attacker is MonsterObject && attacker.Master == null)) return; + + if (_currentAttacker != null && (_currentAttacker != attacker || _currentAttacker != attacker.Master)) + { + OutputAverage(); + } + + if (_currentAttacker == null) + _StartTime = Envir.Time; + _currentAttacker = attacker is MonsterObject ? (PlayerObject)attacker.Master : (PlayerObject)attacker; + _hitCount++; + _totalDamage += damage; + _lastAttackTime = Envir.Time; + + long timespend = Math.Max(1000, (Envir.Time - _StartTime)); + if (_StartTime == 0) + timespend = 1000; + double Dps = _totalDamage / (timespend * 0.001); + _currentAttacker.ReceiveChat(string.Format("{1} inflicted {0} Damage, Dps: {2:#.00}.", damage, attacker is MonsterObject ? "Your pets poison" : "Your poison", Dps), ChatType.Trainer); + Poisoned = true; + } + + protected override void ProcessRegen() + { + if (Dead) return; + + int healthRegen = 0; + + if (CanRegen) + { + RegenTime = Envir.Time + RegenDelay; + healthRegen += (int)(Stats[Stat.HP] * 0.022F) + 1; + } + if (healthRegen > 0) ChangeHP(healthRegen); + } + + public override void ChangeHP(int amount) + { + if (!Poisoned) return; + if (_currentAttacker == null) return; + _totalDamage += amount; + long timespend = Math.Max(1000, (Envir.Time - _StartTime)); + if (_StartTime == 0) + timespend = 1000; + double Dps = _totalDamage / (timespend * 0.001); + _currentAttacker.ReceiveChat(string.Format("Your poison stopped {0} regen, Dps: {1:#.00}.", amount, Dps), ChatType.Trainer); + } + + + private void ReportDamage(int damage, DefenceType type, bool Pet) + { + string output = ""; + switch (type) + { + case DefenceType.ACAgility: + output = "Physical Agility"; + break; + case DefenceType.AC: + output = "Physicial"; + break; + case DefenceType.MACAgility: + output = "Magical Agility"; + break; + case DefenceType.MAC: + output = "Magic"; + break; + case DefenceType.Agility: + output = "Agility"; + break; + } + long timespend = Math.Max(1000,(Envir.Time - _StartTime)); + if (_StartTime == 0) + timespend = 1000; + double Dps = _totalDamage / (timespend * 0.001); + _currentAttacker.ReceiveChat(string.Format("{3} inflicted {0} {1} Damage, Dps: {2:#.00}.", damage, output, Dps, Pet? "Your pet": "You"), ChatType.Trainer); + } + + private void ResetStats() + { + _currentAttacker = null; + _hitCount = 0; + _totalDamage = 0; + _lastAttackTime = 0; + _StartTime = 0; + Poisoned = false; + PoisonList.Clear(); + } + + private void OutputAverage() + { + if (_currentAttacker == null) return; + long timespend = Math.Max(1000, (_lastAttackTime - _StartTime)); + if (_StartTime == 0) + timespend = 1000; + double Dps = _totalDamage / (timespend * 0.001); + _currentAttacker.ReceiveChat(string.Format("{0} Average Damage inflicted on the trainer, Dps: {1:#.00}.", (int)(_totalDamage / _hitCount),Dps), ChatType.Trainer); + } + } +} diff --git a/Server/MirObjects/NPC/NPCActions.cs b/Server/MirObjects/NPC/NPCActions.cs new file mode 100644 index 0000000..1a340dd --- /dev/null +++ b/Server/MirObjects/NPC/NPCActions.cs @@ -0,0 +1,107 @@ +namespace Server.MirObjects +{ + public class NPCActions + { + public ActionType Type; + public List Params = new List(); + + public NPCActions(ActionType action, params string[] p) + { + Type = action; + + Params.AddRange(p); + } + } + + public enum ActionType + { + Move, + InstanceMove, + GiveGold, + TakeGold, + GiveGuildGold, + TakeGuildGold, + GiveCredit, + TakeCredit, + GiveItem, + TakeItem, + GiveExp, + GivePet, + ClearPets, + AddNameList, + DelNameList, + ClearNameList, + GiveHP, + GiveMP, + ChangeLevel, + SetPkPoint, + ReducePkPoint, + IncreasePkPoint, + ChangeGender, + ChangeClass, + LocalMessage, + Goto, + Call, + GiveSkill, + RemoveSkill, + Set, + Param1, + Param2, + Param3, + Mongen, + TimeRecall, + TimeRecallGroup, + BreakTimeRecall, + MonClear, + GroupRecall, + GroupTeleport, + DelayGoto, + Mov, + Calc, + GiveBuff, + RemoveBuff, + AddToGuild, + RemoveFromGuild, + RefreshEffects, + ChangeHair, + CanGainExp, + ComposeMail, + AddMailItem, + AddMailGold, + SendMail, + GroupGoto, + EnterMap, + GivePearls, + TakePearls, + MakeWeddingRing, + ForceDivorce, + GlobalMessage, + LoadValue, + SaveValue, + RemovePet, + ConquestGuard, + ConquestGate, + ConquestWall, + ConquestSiege, + TakeConquestGold, + SetConquestRate, + StartConquest, + ScheduleConquest, + OpenGate, + CloseGate, + Break, + AddGuildNameList, + DelGuildNameList, + ClearGuildNameList, + OpenBrowser, + GetRandomText, + PlaySound, + SetTimer, + ExpireTimer, + UnequipItem, + RollDie, + RollYut, + Drop, + ConquestRepairAll + } +} \ No newline at end of file diff --git a/Server/MirObjects/NPC/NPCChecks.cs b/Server/MirObjects/NPC/NPCChecks.cs new file mode 100644 index 0000000..31e2b7d --- /dev/null +++ b/Server/MirObjects/NPC/NPCChecks.cs @@ -0,0 +1,63 @@ +namespace Server.MirObjects +{ + public class NPCChecks + { + public CheckType Type; + public List Params = new List(); + + public NPCChecks(CheckType check, params string[] p) + { + Type = check; + + for (int i = 0; i < p.Length; i++) + Params.Add(p[i]); + } + } + + public enum CheckType + { + IsAdmin, + Level, + CheckItem, + CheckGold, + CheckGuildGold, + CheckCredit, + CheckGender, + CheckClass, + CheckDay, + CheckHour, + CheckMinute, + CheckNameList, + CheckPkPoint, + CheckRange, + Check, + CheckHum, + CheckMon, + CheckExactMon, + Random, + Groupleader, + GroupCount, + GroupCheckNearby, + PetLevel, + PetCount, + CheckCalc, + InGuild, + CheckMap, + CheckQuest, + CheckRelationship, + CheckWeddingRing, + CheckPet, + HasBagSpace, + IsNewHuman, + CheckConquest, + AffordGuard, + AffordGate, + AffordWall, + AffordSiege, + CheckPermission, + ConquestAvailable, + ConquestOwner, + CheckGuildNameList, + CheckTimer + } +} \ No newline at end of file diff --git a/Server/MirObjects/NPC/NPCPage.cs b/Server/MirObjects/NPC/NPCPage.cs new file mode 100644 index 0000000..90a0b3a --- /dev/null +++ b/Server/MirObjects/NPC/NPCPage.cs @@ -0,0 +1,43 @@ +using System.Text.RegularExpressions; + +namespace Server.MirObjects +{ + public class NPCPage + { + public string Key; + public List SegmentList = new List(); + public List Args = new List(); + public List Buttons = new List(); + + public List ScriptCalls = new List(); + + public bool BreakFromSegments = false; + + public NPCPage(string key) + { + Key = key; + } + + public string ArgumentParse(string key) + { + if (key.StartsWith("[@_")) return key; //Default NPC page so doesn't use arguments in this way + + Regex r = new Regex(@"\((.*)\)"); + + Match match = r.Match(key); + if (!match.Success) return key; + + key = Regex.Replace(key, r.ToString(), "()"); + + string strValues = match.Groups[1].Value; + string[] arrValues = strValues.Split(','); + + Args = new List(); + + foreach (var t in arrValues) + Args.Add(t); + + return key; + } + } +} \ No newline at end of file diff --git a/Server/MirObjects/NPC/NPCScript.cs b/Server/MirObjects/NPC/NPCScript.cs new file mode 100644 index 0000000..c3af659 --- /dev/null +++ b/Server/MirObjects/NPC/NPCScript.cs @@ -0,0 +1,1137 @@ +using Server.MirDatabase; +using Server.MirEnvir; +using System.Text.RegularExpressions; +using S = ServerPackets; + +namespace Server.MirObjects +{ + public class NPCScript + { + protected static Envir Envir + { + get { return Envir.Main; } + } + + protected static MessageQueue MessageQueue + { + get { return MessageQueue.Instance; } + } + + public static NPCScript Get(int index) + { + return Envir.Scripts[index]; + } + + public static NPCScript GetOrAdd(uint loadedObjectID, string fileName, NPCScriptType type) + { + var script = Envir.Scripts.SingleOrDefault(x => x.Value.FileName.Equals(fileName, StringComparison.OrdinalIgnoreCase) && x.Value.LoadedObjectID == loadedObjectID).Value; + + if (script != null) + { + return script; + } + + return new NPCScript(loadedObjectID, fileName, type); + } + + public readonly int ScriptID; + public readonly uint LoadedObjectID; + public readonly NPCScriptType Type; + public readonly string FileName; + + public const string + MainKey = "[@MAIN]", + BuyKey = "[@BUY]", + SellKey = "[@SELL]", + BuySellKey = "[@BUYSELL]", + RepairKey = "[@REPAIR]", + SRepairKey = "[@SREPAIR]", + RefineKey = "[@REFINE]", + RefineCheckKey = "[@REFINECHECK]", + RefineCollectKey = "[@REFINECOLLECT]", + ReplaceWedRingKey = "[@REPLACEWEDDINGRING]", + BuyBackKey = "[@BUYBACK]", + StorageKey = "[@STORAGE]", + ConsignKey = "[@CONSIGN]", + MarketKey = "[@MARKET]", + + GuildCreateKey = "[@CREATEGUILD]", + RequestWarKey = "[@REQUESTWAR]", + SendParcelKey = "[@SENDPARCEL]", + CollectParcelKey = "[@COLLECTPARCEL]", + BuyUsedKey = "[@BUYUSED]", + BuyNewKey = "[@BUYNEW]", + BuySellNewKey = "[@BUYSELLNEW]", + + TradeKey = "[TRADE]", + RecipeKey = "[RECIPE]", + TypeKey = "[TYPES]", + UsedTypeKey = "[USEDTYPES]", + QuestKey = "[QUESTS]", + SpeechKey = "[SPEECH]"; + + + public List Types = new List(); + public List UsedTypes = new List(); + public List Goods = new List(); + + public List NPCSections = new List(); + public List NPCPages = new List(); + + private NPCScript(uint loadedObjectID, string fileName, NPCScriptType type) + { + ScriptID = ++Envir.ScriptIndex; + + LoadedObjectID = loadedObjectID; + FileName = fileName; + Type = type; + + Load(); + + Envir.Scripts.Add(ScriptID, this); + } + + public void Load() + { + LoadInfo(); + LoadGoods(); + } + + public float PriceRate(PlayerObject player, bool baseRate = false) + { + var callingNPC = Envir.NPCs.SingleOrDefault(x => x.ObjectID == player.NPCObjectID); + + if (callingNPC == null) + { + return 1F; + } + + return callingNPC.Info.Rate / 100F; + } + + + public void LoadInfo() + { + ClearInfo(); + + if (!Directory.Exists(Settings.NPCPath)) return; + + string fileName = Path.Combine(Settings.NPCPath, FileName + ".txt"); + + if (File.Exists(fileName)) + { + List lines = File.ReadAllLines(fileName).ToList(); + + lines = ParseInsert(lines); + lines = ParseInclude(lines); + + switch (Type) + { + case NPCScriptType.Normal: + default: + ParseScript(lines); + break; + case NPCScriptType.AutoPlayer: + case NPCScriptType.AutoMonster: + case NPCScriptType.Robot: + ParseDefault(lines); + break; + } + } + else + MessageQueue.Enqueue(string.Format("Script Not Found: {0}", FileName)); + } + public void ClearInfo() + { + Goods = new List(); + Types = new List(); + UsedTypes = new List(); + NPCPages = new List(); + + if (Type == NPCScriptType.AutoPlayer) + { + Envir.CustomCommands.Clear(); + } + } + public void LoadGoods() + { + var loadedNPC = NPCObject.Get(LoadedObjectID); + + if (loadedNPC != null) + { + loadedNPC.UsedGoods.Clear(); + + string path = Path.Combine(Settings.GoodsPath, loadedNPC.Info.Index.ToString() + ".msd"); + + if (!File.Exists(path)) return; + + using (FileStream stream = File.OpenRead(path)) + { + using (BinaryReader reader = new BinaryReader(stream)) + { + int version = reader.ReadInt32(); + int count = version; + int customversion = Envir.LoadCustomVersion; + if (version == 9999)//the only real way to tell if the file was made before or after version code got added: assuming nobody had a config option to save more then 10000 sold items + { + version = reader.ReadInt32(); + customversion = reader.ReadInt32(); + count = reader.ReadInt32(); + } + else + version = Envir.LoadVersion; + + for (int k = 0; k < count; k++) + { + UserItem item = new UserItem(reader, version, customversion); + if (Envir.BindItem(item)) + loadedNPC.UsedGoods.Add(item); + } + } + } + } + } + + private void ParseDefault(List lines) + { + for (int i = 0; i < lines.Count; i++) + { + if (!lines[i].ToUpper().StartsWith("[@_")) continue; + + if (Type == NPCScriptType.AutoPlayer) + { + if (lines[i].ToUpper().Contains("MAPCOORD")) + { + Regex regex = new Regex(@"\((.*?),([0-9]{1,3}),([0-9]{1,3})\)"); + Match match = regex.Match(lines[i]); + + if (!match.Success) continue; + + Map map = Envir.MapList.FirstOrDefault(m => m.Info.FileName == match.Groups[1].Value); + + if (map == null) continue; + + Point point = new Point(Convert.ToInt16(match.Groups[2].Value), Convert.ToInt16(match.Groups[3].Value)); + + if (!map.Info.ActiveCoords.Contains(point)) + { + map.Info.ActiveCoords.Add(point); + } + } + + if (lines[i].ToUpper().Contains("CUSTOMCOMMAND")) + { + Regex regex = new Regex(@"\((.*?)\)"); + Match match = regex.Match(lines[i]); + + if (!match.Success) continue; + + Envir.CustomCommands.Add(match.Groups[1].Value); + } + } + else if (Type == NPCScriptType.AutoMonster) + { + MonsterInfo MobInfo; + if (lines[i].ToUpper().Contains("SPAWN")) + { + Regex regex = new Regex(@"\((.*?)\)"); + Match match = regex.Match(lines[i]); + + if (!match.Success) continue; + MobInfo = Envir.GetMonsterInfo(Convert.ToInt16(match.Groups[1].Value)); + if (MobInfo == null) continue; + MobInfo.HasSpawnScript = true; + } + if (lines[i].ToUpper().Contains("DIE")) + { + Regex regex = new Regex(@"\((.*?)\)"); + Match match = regex.Match(lines[i]); + + if (!match.Success) continue; + MobInfo = Envir.GetMonsterInfo(Convert.ToInt16(match.Groups[1].Value)); + if (MobInfo == null) continue; + MobInfo.HasDieScript = true; + } + } + else if (Type == NPCScriptType.Robot) + { + if (lines[i].ToUpper().Contains("TIME")) + { + Robot.AddRobot(lines[i].ToUpper()); + } + } + + NPCPages.AddRange(ParsePages(lines, lines[i])); + } + } + + private void ParseScript(IList lines) + { + NPCPages.AddRange(ParsePages(lines)); + + ParseGoods(lines); + ParseTypes(lines); + ParseQuests(lines); + ParseSpeech(lines); + } + + private List ParseInsert(List lines) + { + List newLines = new List(); + + for (int i = 0; i < lines.Count; i++) + { + if (!lines[i].ToUpper().StartsWith("#INSERT")) continue; + + string[] split = lines[i].Split(' '); + + if (split.Length < 2) continue; + + string path = Path.Combine(Settings.EnvirPath, split[1].Substring(1, split[1].Length - 2)); + + if (!File.Exists(path)) + MessageQueue.Enqueue(string.Format("INSERT Script Not Found: {0}", path)); + else + newLines = File.ReadAllLines(path).ToList(); + + lines.AddRange(newLines); + } + + lines.RemoveAll(str => str.ToUpper().StartsWith("#INSERT")); + + return lines; + } + + private List ParseInclude(List lines) + { + for (int i = 0; i < lines.Count; i++) + { + if (!lines[i].ToUpper().StartsWith("#INCLUDE")) continue; + + string[] split = lines[i].Split(' '); + + string path = Path.Combine(Settings.EnvirPath, split[1].Substring(1, split[1].Length - 2)); + string page = ("[" + split[2] + "]").ToUpper(); + + bool start = false, finish = false; + + var parsedLines = new List(); + + if (!File.Exists(path)) + { + MessageQueue.Enqueue(string.Format("INCLUDE Script Not Found: {0}", path)); + return parsedLines; + } + + IList extLines = File.ReadAllLines(path); + + for (int j = 0; j < extLines.Count; j++) + { + if (!extLines[j].ToUpper().StartsWith(page)) continue; + + for (int x = j + 1; x < extLines.Count; x++) + { + if (extLines[x].Trim() == ("{")) + { + start = true; + continue; + } + + if (extLines[x].Trim() == ("}")) + { + finish = true; + break; + } + + parsedLines.Add(extLines[x]); + } + } + + if (start && finish) + { + lines.InsertRange(i + 1, parsedLines); + parsedLines.Clear(); + } + } + + lines.RemoveAll(str => str.ToUpper().StartsWith("#INCLUDE")); + + return lines; + } + + + private List ParsePages(IList lines, string key = MainKey) + { + List pages = new List(); + List buttons = new List(); + + NPCPage page = ParsePage(lines, key); + pages.Add(page); + + buttons.AddRange(page.Buttons); + + for (int i = 0; i < buttons.Count; i++) + { + string section = buttons[i]; + + bool match = pages.Any(t => t.Key.ToUpper() == section.ToUpper()); + + if (match) continue; + + page = ParsePage(lines, section); + buttons.AddRange(page.Buttons); + + pages.Add(page); + } + + return pages; + } + + private NPCPage ParsePage(IList scriptLines, string sectionName) + { + bool nextPage = false, nextSection = false; + + List lines = scriptLines.Where(x => !string.IsNullOrEmpty(x)).ToList(); + + NPCPage Page = new NPCPage(sectionName); + + //Cleans arguments out of search page name + string tempSectionName = Page.ArgumentParse(sectionName); + + //parse all individual pages in a script, defined by sectionName + for (int i = 0; i < lines.Count; i++) + { + string line = lines[i]; + + if (line.StartsWith(";")) continue; + + if (!lines[i].ToUpper().StartsWith(tempSectionName.ToUpper())) continue; + + List segmentLines = new List(); + + nextPage = false; + + //Found a page, now process that page and split it into segments + for (int j = i + 1; j < lines.Count; j++) + { + string nextLine = lines[j]; + + if (j < lines.Count - 1) + nextLine = lines[j + 1]; + else + nextLine = ""; + + if (nextLine.StartsWith("[") && nextLine.EndsWith("]")) + { + nextPage = true; + } + + else if (nextLine.StartsWith("#IF")) + { + nextSection = true; + } + + if (nextSection || nextPage) + { + segmentLines.Add(lines[j]); + + //end of segment, so need to parse it and put into the segment list within the page + if (segmentLines.Count > 0) + { + NPCSegment segment = ParseSegment(Page, segmentLines); + + List currentButtons = new List(); + currentButtons.AddRange(segment.Buttons); + currentButtons.AddRange(segment.ElseButtons); + currentButtons.AddRange(segment.GotoButtons); + + Page.Buttons.AddRange(currentButtons); + Page.SegmentList.Add(segment); + segmentLines.Clear(); + + nextSection = false; + } + + if (nextPage) break; + + continue; + } + + segmentLines.Add(lines[j]); + } + + //bottom of script reached, add all lines found to new segment + if (segmentLines.Count > 0) + { + NPCSegment segment = ParseSegment(Page, segmentLines); + + List currentButtons = new List(); + currentButtons.AddRange(segment.Buttons); + currentButtons.AddRange(segment.ElseButtons); + currentButtons.AddRange(segment.GotoButtons); + + Page.Buttons.AddRange(currentButtons); + Page.SegmentList.Add(segment); + segmentLines.Clear(); + } + + return Page; + } + + return Page; + } + + private NPCSegment ParseSegment(NPCPage page, IEnumerable scriptLines) + { + List + checks = new List(), + acts = new List(), + say = new List(), + buttons = new List(), + elseSay = new List(), + elseActs = new List(), + elseButtons = new List(), + gotoButtons = new List(); + + List lines = scriptLines.ToList(); + List currentSay = say, currentButtons = buttons; + + Regex regex = new Regex(@"<.*?/(\@.*?)>"); + + for (int i = 0; i < lines.Count; i++) + { + if (string.IsNullOrEmpty(lines[i])) continue; + + if (lines[i].StartsWith(";")) continue; + + if (lines[i].StartsWith("#")) + { + string[] action = lines[i].Remove(0, 1).ToUpper().Trim().Split(' '); + switch (action[0]) + { + case "IF": + currentSay = checks; + currentButtons = null; + continue; + case "SAY": + currentSay = say; + currentButtons = buttons; + continue; + case "ACT": + currentSay = acts; + currentButtons = gotoButtons; + continue; + case "ELSESAY": + currentSay = elseSay; + currentButtons = elseButtons; + continue; + case "ELSEACT": + currentSay = elseActs; + currentButtons = gotoButtons; + continue; + default: + throw new NotImplementedException(); + } + } + + if (lines[i].StartsWith("[") && lines[i].EndsWith("]")) break; + + if (currentButtons != null) + { + Match match = regex.Match(lines[i]); + + while (match.Success) + { + string argu = match.Groups[1].Captures[0].Value; + argu = argu.Split('/')[0]; + + currentButtons.Add(string.Format("[{0}]", argu)); + match = match.NextMatch(); + } + + //Check if line has a goto command + var parts = lines[i].Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); + + if (parts.Count() > 1) + switch (parts[0].ToUpper()) + { + case "GOTO": + case "GROUPGOTO": + gotoButtons.Add(string.Format("[{0}]", parts[1].ToUpper())); + break; + case "TIMERECALL": + case "DELAYGOTO": + case "TIMERECALLGROUP": + if (parts.Length > 2) + gotoButtons.Add(string.Format("[{0}]", parts[2].ToUpper())); + break; + case "ROLLDIE": + case "ROLLYUT": + buttons.Add(string.Format("[{0}]", parts[1].ToUpper())); + break; + } + } + + currentSay.Add(lines[i].TrimEnd()); + } + + NPCSegment segment = new NPCSegment(page, say, buttons, elseSay, elseButtons, gotoButtons); + + for (int i = 0; i < checks.Count; i++) + segment.ParseCheck(checks[i]); + + for (int i = 0; i < acts.Count; i++) + segment.ParseAct(segment.ActList, acts[i]); + + for (int i = 0; i < elseActs.Count; i++) + segment.ParseAct(segment.ElseActList, elseActs[i]); + + currentButtons = new List(); + currentButtons.AddRange(buttons); + currentButtons.AddRange(elseButtons); + currentButtons.AddRange(gotoButtons); + + return segment; + } + + private void ParseTypes(IList lines) + { + for (int i = 0; i < lines.Count; i++) + { + if (!lines[i].ToUpper().StartsWith(TypeKey)) continue; + + while (++i < lines.Count) + { + if (String.IsNullOrEmpty(lines[i])) continue; + + if (!int.TryParse(lines[i], out int index)) break; + Types.Add((ItemType)index); + } + } + + for (int i = 0; i < lines.Count; i++) + { + if (!lines[i].ToUpper().StartsWith(UsedTypeKey)) continue; + + while (++i < lines.Count) + { + if (String.IsNullOrEmpty(lines[i])) continue; + + if (!int.TryParse(lines[i], out int index)) break; + UsedTypes.Add((ItemType)index); + } + } + } + private void ParseGoods(IList lines) + { + for (int i = 0; i < lines.Count; i++) + { + if (!lines[i].ToUpper().StartsWith(TradeKey)) continue; + + while (++i < lines.Count) + { + if (lines[i].StartsWith("[")) return; + if (String.IsNullOrEmpty(lines[i])) continue; + + var data = lines[i].Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); + + ItemInfo info = Envir.GetItemInfo(data[0]); + if (info == null) + continue; + + UserItem goods = Envir.CreateShopItem(info, (uint)i); + + if (goods == null || Goods.Contains(goods)) + { + MessageQueue.Enqueue(string.Format("Could not find Item: {0}, File: {1}", lines[i], FileName)); + continue; + } + + ushort count = 1; + if (data.Length == 2) + ushort.TryParse(data[1], out count); + + goods.Count = count; + + Goods.Add(goods); + } + } + } + private void ParseQuests(IList lines) + { + for (int i = 0; i < lines.Count; i++) + { + if (!lines[i].ToUpper().StartsWith(QuestKey)) continue; + + var loadedNPC = NPCObject.Get(LoadedObjectID); + + if (loadedNPC == null) + { + return; + } + + while (++i < lines.Count) + { + if (lines[i].StartsWith("[")) return; + if (String.IsNullOrEmpty(lines[i])) continue; + + int.TryParse(lines[i], out int index); + + if (index == 0) continue; + + QuestInfo info = Envir.GetQuestInfo(Math.Abs(index)); + + if (info == null) return; + + if (index > 0) + info.NpcIndex = LoadedObjectID; + else + info.FinishNpcIndex = LoadedObjectID; + + if (loadedNPC.Quests.All(x => x != info)) + loadedNPC.Quests.Add(info); + + } + } + } + + + private void ParseSpeech(IList lines) + { + var loadedNPC = NPCObject.Get(LoadedObjectID); + + if (loadedNPC == null) + { + return; + } + + for (int i = 0; i < lines.Count; i++) + { + if (!lines[i].ToUpper().StartsWith(SpeechKey)) continue; + + while (++i < lines.Count) + { + if (String.IsNullOrEmpty(lines[i])) continue; + + var parts = lines[i].Split(' '); + + if (parts.Length < 2 || !int.TryParse(parts[0], out int weight)) return; + + loadedNPC.Speech.Add(new NPCSpeech { Weight = weight, Message = lines[i].Substring(parts[0].Length + 1) }); + } + } + } + + public void Call(MonsterObject monster, string key) + { + key = key.ToUpper(); + + for (int i = 0; i < NPCPages.Count; i++) + { + NPCPage page = NPCPages[i]; + if (!String.Equals(page.Key, key, StringComparison.CurrentCultureIgnoreCase)) continue; + + foreach (NPCSegment segment in page.SegmentList) + { + if (page.BreakFromSegments) + { + page.BreakFromSegments = false; + break; + } + + ProcessSegment(monster, page, segment); + } + } + } + public void Call(string key) + { + key = key.ToUpper(); + + for (int i = 0; i < NPCPages.Count; i++) + { + NPCPage page = NPCPages[i]; + if (!String.Equals(page.Key, key, StringComparison.CurrentCultureIgnoreCase)) continue; + + foreach (NPCSegment segment in page.SegmentList) + { + if (page.BreakFromSegments) + { + page.BreakFromSegments = false; + break; + } + + ProcessSegment(page, segment); + } + } + } + public void Call(PlayerObject player, uint objectID, string key) + { + key = key.ToUpper(); + + if (!player.NPCDelayed) + { + if (key != MainKey) + { + if (player.NPCObjectID != objectID) return; + + bool found = false; + + foreach (NPCSegment segment in player.NPCPage.SegmentList) + { + if (!player.NPCSuccess.TryGetValue(segment, out bool result)) break; //no result for segment ? + + if ((result ? segment.Buttons : segment.ElseButtons).Any(s => s.ToUpper() == key)) + { + found = true; + } + } + + if (!found) + { + MessageQueue.Enqueue(string.Format("Player: {0} was prevented access to NPC key: '{1}' ", player.Name, key)); + return; + } + } + } + else + { + player.NPCDelayed = false; + } + + if (key.StartsWith("[@@") && !player.NPCData.TryGetValue("NPCInputStr", out object _npcInputStr)) + { + //send off packet to request input + player.Enqueue(new S.NPCRequestInput { NPCID = player.NPCObjectID, PageName = key }); + return; + } + + for (int i = 0; i < NPCPages.Count; i++) + { + NPCPage page = NPCPages[i]; + if (!String.Equals(page.Key, key, StringComparison.CurrentCultureIgnoreCase)) continue; + + player.NPCSpeech = new List(); + player.NPCSuccess.Clear(); + + foreach (NPCSegment segment in page.SegmentList) + { + if (page.BreakFromSegments) + { + page.BreakFromSegments = false; + break; + } + + ProcessSegment(player, page, segment, objectID); + } + + Response(player, page); + } + + player.NPCData.Remove("NPCInputStr"); + } + + private void Response(PlayerObject player, NPCPage page) + { + player.Enqueue(new S.NPCResponse { Page = player.NPCSpeech }); + + ProcessSpecial(player, page); + } + + private void ProcessSegment(PlayerObject player, NPCPage page, NPCSegment segment, uint objectID) + { + player.NPCObjectID = objectID; + player.NPCScriptID = ScriptID; + player.NPCSuccess.Add(segment, segment.Check(player)); + player.NPCPage = page; + } + + private void ProcessSegment(MonsterObject monster, NPCPage page, NPCSegment segment) + { + segment.Check(monster); + } + private void ProcessSegment(NPCPage page, NPCSegment segment) + { + segment.Check(); + } + + private void ProcessSpecial(PlayerObject player, NPCPage page) + { + List allGoods = new List(); + + var key = page.Key.ToUpper(); + + switch (key) + { + case BuyKey: + case BuySellKey: + var sentGoods = new List(Goods); + + for (int i = 0; i < Goods.Count; i++) + player.CheckItem(Goods[i]); + + if (Settings.GoodsOn) + { + var callingNPC = NPCObject.Get(player.NPCObjectID); + + if (callingNPC != null) + { + for (int i = 0; i < callingNPC.UsedGoods.Count; i++) + player.CheckItem(callingNPC.UsedGoods[i]); + } + + sentGoods.AddRange(callingNPC.UsedGoods); + } + + player.Enqueue(new S.NPCGoods { List = sentGoods, Rate = PriceRate(player), Type = PanelType.Buy, HideAddedStats = Settings.GoodsHideAddedStats }); + + if (key == BuySellKey) + { + player.Enqueue(new S.NPCSell()); + } + break; + case BuyNewKey: + case BuySellNewKey: + sentGoods = new List(Goods); + + for (int i = 0; i < Goods.Count; i++) + player.CheckItem(Goods[i]); + + player.Enqueue(new S.NPCGoods { List = sentGoods, Rate = PriceRate(player), Type = PanelType.Buy, HideAddedStats = Settings.GoodsHideAddedStats }); + + if (key == BuySellNewKey) + { + player.Enqueue(new S.NPCSell()); + } + break; + case SellKey: + player.Enqueue(new S.NPCSell()); + break; + case RepairKey: + player.Enqueue(new S.NPCRepair { Rate = PriceRate(player) }); + break; + case SRepairKey: + player.Enqueue(new S.NPCSRepair { Rate = PriceRate(player) }); + break; + case RefineKey: + if (player.Info.CurrentRefine != null) + { + player.ReceiveChat("You're already refining an item.", ChatType.System); + player.Enqueue(new S.NPCRefine { Rate = (Settings.RefineCost), Refining = true }); + break; + } + else + player.Enqueue(new S.NPCRefine { Rate = (Settings.RefineCost), Refining = false }); + break; + case RefineCheckKey: + player.Enqueue(new S.NPCCheckRefine()); + break; + case RefineCollectKey: + player.CollectRefine(); + break; + case ReplaceWedRingKey: + player.Enqueue(new S.NPCReplaceWedRing { Rate = Settings.ReplaceWedRingCost }); + break; + case StorageKey: + player.SendStorage(); + player.Enqueue(new S.NPCStorage()); + break; + case BuyBackKey: + { + if (Settings.GoodsOn) + { + var callingNPC = NPCObject.Get(player.NPCObjectID); + + if (callingNPC != null) + { + if (!callingNPC.BuyBack.ContainsKey(player.Name)) callingNPC.BuyBack[player.Name] = new List(); + + for (int i = 0; i < callingNPC.BuyBack[player.Name].Count; i++) + { + player.CheckItem(callingNPC.BuyBack[player.Name][i]); + } + + player.Enqueue(new S.NPCGoods { List = callingNPC.BuyBack[player.Name], Rate = PriceRate(player), Type = PanelType.Buy }); + } + } + } + break; + case BuyUsedKey: + { + if (Settings.GoodsOn) + { + var callingNPC = NPCObject.Get(player.NPCObjectID); + + if (callingNPC != null) + { + for (int i = 0; i < callingNPC.UsedGoods.Count; i++) + player.CheckItem(callingNPC.UsedGoods[i]); + + player.Enqueue(new S.NPCGoods { List = callingNPC.UsedGoods, Rate = PriceRate(player), Type = PanelType.BuySub, HideAddedStats = Settings.GoodsHideAddedStats }); + } + } + } + break; + case ConsignKey: + player.Enqueue(new S.NPCConsign()); + break; + case MarketKey: + player.UserMatch = false; + player.GetMarket(string.Empty, ItemType.Nothing); + break; + case GuildCreateKey: + if (player.Info.Level < Settings.Guild_RequiredLevel) + { + player.ReceiveChat(String.Format("You have to be at least level {0} to create a guild.", Settings.Guild_RequiredLevel), ChatType.System); + } + else if (player.MyGuild == null) + { + player.CanCreateGuild = true; + player.Enqueue(new S.GuildNameRequest()); + } + else + player.ReceiveChat("You are already part of a guild.", ChatType.System); + break; + case RequestWarKey: + if (player.MyGuild != null) + { + if (player.MyGuildRank != player.MyGuild.Ranks[0]) + { + player.ReceiveChat("You must be the leader to request a war.", ChatType.System); + return; + } + player.Enqueue(new S.GuildRequestWar()); + } + else + { + player.ReceiveChat(GameLanguage.NotInGuild, ChatType.System); + } + break; + case SendParcelKey: + player.Enqueue(new S.MailSendRequest()); + break; + case CollectParcelKey: + + sbyte result = 0; + + if (player.GetMailAwaitingCollectionAmount() < 1) + { + result = -1; + } + else + { + foreach (var mail in player.Info.Mail) + { + if (mail.Parcel) mail.Collected = true; + } + } + player.Enqueue(new S.ParcelCollected { Result = result }); + player.GetMail(); + break; + } + } + + public void Buy(PlayerObject player, ulong index, ushort count) + { + UserItem goods = null; + + for (int i = 0; i < Goods.Count; i++) + { + if (Goods[i].UniqueID != index) continue; + goods = Goods[i]; + break; + } + + bool isUsed = false; + bool isBuyBack = false; + + var callingNPC = NPCObject.Get(player.NPCObjectID); + + if (callingNPC != null) + { + if (goods == null) + { + for (int i = 0; i < callingNPC.UsedGoods.Count; i++) + { + if (callingNPC.UsedGoods[i].UniqueID != index) continue; + goods = callingNPC.UsedGoods[i]; + isUsed = true; + break; + } + } + + if (goods == null) + { + if (!callingNPC.BuyBack.ContainsKey(player.Name)) callingNPC.BuyBack[player.Name] = new List(); + for (int i = 0; i < callingNPC.BuyBack[player.Name].Count; i++) + { + if (callingNPC.BuyBack[player.Name][i].UniqueID != index) continue; + goods = callingNPC.BuyBack[player.Name][i]; + isBuyBack = true; + break; + } + } + } + + if (goods == null || count == 0 || count > goods.Info.StackSize) return; + + if ((isBuyBack || isUsed) && count > goods.Count) + count = goods.Count; + else + goods.Count = count; + + uint cost = goods.Price(); + cost = (uint)(cost * PriceRate(player)); + uint baseCost = (uint)(goods.Price() * PriceRate(player, true)); + + if (cost > player.Account.Gold) return; + + UserItem item = (isBuyBack || isUsed) ? goods : Envir.CreateFreshItem(goods.Info); + item.Count = goods.Count; + + if (!player.CanGainItem(item)) return; + + player.Account.Gold -= cost; + player.Enqueue(new S.LoseGold { Gold = cost }); + + player.GainItem(item); + + if (isUsed) + { + callingNPC.UsedGoods.Remove(goods); //If used or buyback will destroy whole stack instead of reducing to remaining quantity + + List newGoodsList = new List(); + newGoodsList.AddRange(Goods); + newGoodsList.AddRange(callingNPC.UsedGoods); + + callingNPC.NeedSave = true; + + player.Enqueue(new S.NPCGoods + { + List = newGoodsList, + Rate = PriceRate(player), + HideAddedStats = Settings.GoodsHideAddedStats, + Type = player.NPCPage.Key.ToUpper() == BuyUsedKey ? PanelType.BuySub : PanelType.Buy + }); + } + + if (isBuyBack) + { + callingNPC.BuyBack[player.Name].Remove(goods); //If used or buyback will destroy whole stack instead of reducing to remaining quantity + player.Enqueue(new S.NPCGoods { List = callingNPC.BuyBack[player.Name], Rate = PriceRate(player), HideAddedStats = false }); + } + } + public void Sell(PlayerObject player, UserItem item) + { + /* Handle Item Sale */ + } + } + + public enum NPCScriptType + { + Normal, + Called, + AutoPlayer, + AutoMonster, + Robot + } +} \ No newline at end of file diff --git a/Server/MirObjects/NPC/NPCSegment.cs b/Server/MirObjects/NPC/NPCSegment.cs new file mode 100644 index 0000000..5a2ee91 --- /dev/null +++ b/Server/MirObjects/NPC/NPCSegment.cs @@ -0,0 +1,3659 @@ +using Server.MirDatabase; +using Server.MirEnvir; +using System.Globalization; +using System.Numerics; +using System.Text.RegularExpressions; +using S = ServerPackets; +using Timer = Server.MirEnvir.Timer; + +namespace Server.MirObjects +{ + public class NPCSegment + { + protected static Envir Envir + { + get { return Envir.Main; } + } + + protected static MessageQueue MessageQueue + { + get { return MessageQueue.Instance; } + } + + public NPCPage Page; + + public readonly string Key; + public List CheckList = new List(); + public List ActList = new List(), ElseActList = new List(); + public List Say, ElseSay, Buttons, ElseButtons, GotoButtons; + + public string Param1; + public int Param1Instance, Param2, Param3; + + public List Args = new List(); + + public NPCSegment(NPCPage page, List say, List buttons, List elseSay, List elseButtons, List gotoButtons) + { + Page = page; + + Say = say; + Buttons = buttons; + + ElseSay = elseSay; + ElseButtons = elseButtons; + + GotoButtons = gotoButtons; + } + + public string[] ParseArguments(string[] words) + { + Regex r = new Regex(@"\%ARG\((\d+)\)"); + + for (int i = 0; i < words.Length; i++) + { + foreach (Match m in r.Matches(words[i].ToUpper())) + { + if (!m.Success) continue; + + int sequence = Convert.ToInt32(m.Groups[1].Value); + + if (Page.Args.Count >= (sequence + 1)) words[i] = words[i].Replace(m.Groups[0].Value, Page.Args[sequence]); + } + } + + return words; + } + + public void AddVariable(MapObject player, string key, string value) + { + Regex regex = new Regex(@"[A-Za-z][0-9]"); + + if (!regex.Match(key).Success) return; + + for (int i = 0; i < player.NPCVar.Count; i++) + { + if (!String.Equals(player.NPCVar[i].Key, key, StringComparison.CurrentCultureIgnoreCase)) continue; + player.NPCVar[i] = new KeyValuePair(player.NPCVar[i].Key, value); + return; + } + + player.NPCVar.Add(new KeyValuePair(key, value)); + } + + public string FindVariable(MapObject player, string key) + { + Regex regex = new Regex(@"\%[A-Za-z][0-9]"); + + if (!regex.Match(key).Success) return key; + + string tempKey = key.Substring(1); + + foreach (KeyValuePair t in player.NPCVar) + { + if (String.Equals(t.Key, tempKey, StringComparison.CurrentCultureIgnoreCase)) return t.Value; + } + + return key; + } + + public void ParseCheck(string line) + { + var parts = line.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); + + parts = ParseArguments(parts); + + if (parts.Length == 0) return; + + string tempString, tempString2; + + var regexFlag = new Regex(@"\[(.*?)\]"); + var regexQuote = new Regex("\"([^\"]*)\""); + + Match quoteMatch; + + switch (parts[0].ToUpper()) + { + case "LEVEL": + if (parts.Length < 3) return; + + CheckList.Add(new NPCChecks(CheckType.Level, parts[1], parts[2])); + break; + + case "CHECKGOLD": + if (parts.Length < 3) return; + + CheckList.Add(new NPCChecks(CheckType.CheckGold, parts[1], parts[2])); + break; + case "CHECKGUILDGOLD": + if (parts.Length < 3) return; + + CheckList.Add(new NPCChecks(CheckType.CheckGuildGold, parts[1], parts[2])); + break; + case "CHECKCREDIT": + if (parts.Length < 3) return; + + CheckList.Add(new NPCChecks(CheckType.CheckCredit, parts[1], parts[2])); + break; + case "CHECKITEM": + if (parts.Length < 2) return; + + tempString = parts.Length < 3 ? "1" : parts[2]; + tempString2 = parts.Length > 3 ? parts[3] : ""; + + CheckList.Add(new NPCChecks(CheckType.CheckItem, parts[1], tempString, tempString2)); + break; + + case "CHECKGENDER": + if (parts.Length < 2) return; + + CheckList.Add(new NPCChecks(CheckType.CheckGender, parts[1])); + break; + + case "CHECKCLASS": + if (parts.Length < 2) return; + + CheckList.Add(new NPCChecks(CheckType.CheckClass, parts[1])); + break; + + case "DAYOFWEEK": + if (parts.Length < 2) return; + CheckList.Add(new NPCChecks(CheckType.CheckDay, parts[1])); + break; + + case "HOUR": + if (parts.Length < 2) return; + + CheckList.Add(new NPCChecks(CheckType.CheckHour, parts[1])); + break; + + case "MIN": + if (parts.Length < 2) return; + + CheckList.Add(new NPCChecks(CheckType.CheckMinute, parts[1])); + break; + + //cant use stored var + case "CHECKNAMELIST": + if (parts.Length < 2) return; + + quoteMatch = regexQuote.Match(line); + + string listPath = parts[1]; + + if (quoteMatch.Success) + listPath = quoteMatch.Groups[1].Captures[0].Value; + + var fileName = Path.Combine(Settings.NameListPath, listPath); + + string sDirectory = Path.GetDirectoryName(fileName); + Directory.CreateDirectory(sDirectory); + + if (File.Exists(fileName)) + CheckList.Add(new NPCChecks(CheckType.CheckNameList, fileName)); + break; + + //cant use stored var + case "CHECKGUILDNAMELIST": + if (parts.Length < 2) return; + + quoteMatch = regexQuote.Match(line); + + listPath = parts[1]; + + if (quoteMatch.Success) + listPath = quoteMatch.Groups[1].Captures[0].Value; + + fileName = Path.Combine(Settings.NameListPath, listPath); + + sDirectory = Path.GetDirectoryName(fileName); + Directory.CreateDirectory(sDirectory); + + if (File.Exists(fileName)) + CheckList.Add(new NPCChecks(CheckType.CheckGuildNameList, fileName)); + break; + case "ISADMIN": + CheckList.Add(new NPCChecks(CheckType.IsAdmin)); + break; + + case "CHECKPKPOINT": + if (parts.Length < 3) return; + + CheckList.Add(new NPCChecks(CheckType.CheckPkPoint, parts[1], parts[2])); + break; + + case "CHECKRANGE": + if (parts.Length < 4) return; + + CheckList.Add(new NPCChecks(CheckType.CheckRange, parts[1], parts[2], parts[3])); + break; + + case "CHECKMAP": + if (parts.Length < 2) return; + + CheckList.Add(new NPCChecks(CheckType.CheckMap, parts[1])); + break; + + //cant use stored var + case "CHECK": + if (parts.Length < 3) return; + var match = regexFlag.Match(parts[1]); + if (match.Success) + { + string flagIndex = match.Groups[1].Captures[0].Value; + CheckList.Add(new NPCChecks(CheckType.Check, flagIndex, parts[2])); + } + break; + + case "CHECKHUM": + if (parts.Length < 4) return; + + tempString = parts.Length < 5 ? "1" : parts[4]; + CheckList.Add(new NPCChecks(CheckType.CheckHum, parts[1], parts[2], parts[3], tempString)); + break; + + case "CHECKMON": + if (parts.Length < 4) return; + + tempString = parts.Length < 5 ? "1" : parts[4]; + CheckList.Add(new NPCChecks(CheckType.CheckMon, parts[1], parts[2], parts[3], tempString)); + break; + + case "CHECKEXACTMON": + if (parts.Length < 5) return; + + tempString = parts.Length < 6 ? "1" : parts[5]; + CheckList.Add(new NPCChecks(CheckType.CheckExactMon, parts[1], parts[2], parts[3], parts[4], tempString)); + break; + + case "RANDOM": + if (parts.Length < 2) return; + + CheckList.Add(new NPCChecks(CheckType.Random, parts[1])); + break; + + case "GROUPLEADER": + CheckList.Add(new NPCChecks(CheckType.Groupleader)); + break; + + case "GROUPCOUNT": + if (parts.Length < 3) return; + + CheckList.Add(new NPCChecks(CheckType.GroupCount, parts[1], parts[2])); + break; + + case "GROUPCHECKNEARBY": + CheckList.Add(new NPCChecks(CheckType.GroupCheckNearby)); + break; + + case "PETCOUNT": + if (parts.Length < 3) return; + + CheckList.Add(new NPCChecks(CheckType.PetCount, parts[1], parts[2])); + break; + + case "PETLEVEL": + if (parts.Length < 3) return; + + CheckList.Add(new NPCChecks(CheckType.PetLevel, parts[1], parts[2])); + break; + + case "CHECKCALC": + if (parts.Length < 4) return; + CheckList.Add(new NPCChecks(CheckType.CheckCalc, parts[1], parts[2], parts[3])); + break; + + case "INGUILD": + string guildName = string.Empty; + + if (parts.Length > 1) guildName = parts[1]; + + CheckList.Add(new NPCChecks(CheckType.InGuild, guildName)); + break; + + case "CHECKQUEST": + if (parts.Length < 3) return; + + CheckList.Add(new NPCChecks(CheckType.CheckQuest, parts[1], parts[2])); + break; + case "CHECKRELATIONSHIP": + CheckList.Add(new NPCChecks(CheckType.CheckRelationship)); + break; + case "CHECKWEDDINGRING": + CheckList.Add(new NPCChecks(CheckType.CheckWeddingRing)); + break; + + case "CHECKPET": + if (parts.Length < 2) return; + + CheckList.Add(new NPCChecks(CheckType.CheckPet, parts[1])); + break; + + case "HASBAGSPACE": + if (parts.Length < 3) return; + + CheckList.Add(new NPCChecks(CheckType.HasBagSpace, parts[1], parts[2])); + break; + case "ISNEWHUMAN": + CheckList.Add(new NPCChecks(CheckType.IsNewHuman)); + break; + case "CHECKCONQUEST": + if (parts.Length < 2) return; + + CheckList.Add(new NPCChecks(CheckType.CheckConquest, parts[1])); + break; + case "AFFORDGUARD": + if (parts.Length < 3) return; + + CheckList.Add(new NPCChecks(CheckType.AffordGuard, parts[1], parts[2])); + break; + case "AFFORDGATE": + if (parts.Length < 3) return; + + CheckList.Add(new NPCChecks(CheckType.AffordGate, parts[1], parts[2])); + break; + case "AFFORDWALL": + if (parts.Length < 3) return; + + CheckList.Add(new NPCChecks(CheckType.AffordWall, parts[1], parts[2])); + break; + case "AFFORDSIEGE": + if (parts.Length < 3) return; + + CheckList.Add(new NPCChecks(CheckType.AffordSiege, parts[1], parts[2])); + break; + case "CHECKPERMISSION": + if (parts.Length < 2) return; + + CheckList.Add(new NPCChecks(CheckType.CheckPermission, parts[1])); + break; + case "CONQUESTAVAILABLE": + if (parts.Length < 2) return; + + CheckList.Add(new NPCChecks(CheckType.ConquestAvailable, parts[1])); + break; + case "CONQUESTOWNER": + if (parts.Length < 2) return; + + CheckList.Add(new NPCChecks(CheckType.ConquestOwner, parts[1])); + break; + case "CHECKTIMER": + if (parts.Length < 4) return; + + CheckList.Add(new NPCChecks(CheckType.CheckTimer, parts[1], parts[2], parts[3])); + break; + } + + } + public void ParseAct(List acts, string line) + { + var parts = line.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); + + parts = ParseArguments(parts); + + if (parts.Length == 0) return; + + string fileName; + var regexQuote = new Regex("\"([^\"]*)\""); + var regexFlag = new Regex(@"\[(.*?)\]"); + + Match quoteMatch = null; + + switch (parts[0].ToUpper()) + { + case "MOVE": + if (parts.Length < 2) return; + + string tempx = parts.Length > 3 ? parts[2] : "0"; + string tempy = parts.Length > 3 ? parts[3] : "0"; + + acts.Add(new NPCActions(ActionType.Move, parts[1], tempx, tempy)); + break; + + case "INSTANCEMOVE": + if (parts.Length < 5) return; + + acts.Add(new NPCActions(ActionType.InstanceMove, parts[1], parts[2], parts[3], parts[4])); + break; + + case "GIVEGOLD": + if (parts.Length < 2) return; + + acts.Add(new NPCActions(ActionType.GiveGold, parts[1])); + break; + + case "TAKEGOLD": + if (parts.Length < 2) return; + + acts.Add(new NPCActions(ActionType.TakeGold, parts[1])); + break; + case "GIVEGUILDGOLD": + if (parts.Length < 2) return; + + acts.Add(new NPCActions(ActionType.GiveGuildGold, parts[1])); + break; + case "TAKEGUILDGOLD": + if (parts.Length < 2) return; + + acts.Add(new NPCActions(ActionType.TakeGuildGold, parts[1])); + break; + case "GIVECREDIT": + if (parts.Length < 2) return; + + acts.Add(new NPCActions(ActionType.GiveCredit, parts[1])); + break; + case "TAKECREDIT": + if (parts.Length < 2) return; + + acts.Add(new NPCActions(ActionType.TakeCredit, parts[1])); + break; + + case "GIVEPEARLS": + if (parts.Length < 2) return; + + acts.Add(new NPCActions(ActionType.GivePearls, parts[1])); + break; + + case "TAKEPEARLS": + if (parts.Length < 2) return; + + acts.Add(new NPCActions(ActionType.TakePearls, parts[1])); + break; + + case "GIVEITEM": + if (parts.Length < 2) return; + + string count = parts.Length < 3 ? string.Empty : parts[2]; + acts.Add(new NPCActions(ActionType.GiveItem, parts[1], count)); + break; + + case "TAKEITEM": + if (parts.Length < 3) return; + + count = parts.Length < 3 ? string.Empty : parts[2]; + string dura = parts.Length > 3 ? parts[3] : ""; + + acts.Add(new NPCActions(ActionType.TakeItem, parts[1], count, dura)); + break; + + case "GIVEEXP": + if (parts.Length < 2) return; + + acts.Add(new NPCActions(ActionType.GiveExp, parts[1])); + break; + + case "GIVEPET": + if (parts.Length < 2) return; + + string petcount = parts.Length > 2 ? parts[2] : "1"; + string petlevel = parts.Length > 3 ? parts[3] : "0"; + + acts.Add(new NPCActions(ActionType.GivePet, parts[1], petcount, petlevel)); + break; + case "REMOVEPET": + if (parts.Length < 2) return; + + acts.Add(new NPCActions(ActionType.RemovePet, parts[1])); + break; + case "CLEARPETS": + acts.Add(new NPCActions(ActionType.ClearPets)); + break; + + case "GOTO": + if (parts.Length < 2) return; + + acts.Add(new NPCActions(ActionType.Goto, parts[1])); + break; + + case "CALL": + if (parts.Length < 2) return; + + quoteMatch = regexQuote.Match(line); + + string listPath = parts[1]; + + if (quoteMatch.Success) + { + listPath = quoteMatch.Groups[1].Captures[0].Value; + } + + fileName = Path.Combine(Settings.NPCPath, listPath + ".txt"); + + if (!File.Exists(fileName)) return; + + var script = NPCScript.GetOrAdd(0, listPath, NPCScriptType.Called); + + Page.ScriptCalls.Add(script.ScriptID); + + acts.Add(new NPCActions(ActionType.Call, script.ScriptID.ToString())); + break; + + case "BREAK": + acts.Add(new NPCActions(ActionType.Break)); + break; + + //cant use stored var + case "ADDNAMELIST": + if (parts.Length < 2) return; + + quoteMatch = regexQuote.Match(line); + + listPath = parts[1]; + + if (quoteMatch.Success) + listPath = quoteMatch.Groups[1].Captures[0].Value; + + fileName = Path.Combine(Settings.NameListPath, listPath); + + string sDirectory = Path.GetDirectoryName(fileName); + Directory.CreateDirectory(sDirectory); + + if (!File.Exists(fileName)) + File.Create(fileName).Close(); + + acts.Add(new NPCActions(ActionType.AddNameList, fileName)); + break; + + //cant use stored var + case "ADDGUILDNAMELIST": + if (parts.Length < 2) return; + + quoteMatch = regexQuote.Match(line); + + listPath = parts[1]; + + if (quoteMatch.Success) + listPath = quoteMatch.Groups[1].Captures[0].Value; + + fileName = Path.Combine(Settings.NameListPath, listPath); + + sDirectory = Path.GetDirectoryName(fileName); + Directory.CreateDirectory(sDirectory); + + if (!File.Exists(fileName)) + File.Create(fileName).Close(); + + acts.Add(new NPCActions(ActionType.AddGuildNameList, fileName)); + break; + //cant use stored var + case "DELNAMELIST": + if (parts.Length < 2) return; + + quoteMatch = regexQuote.Match(line); + + listPath = parts[1]; + + if (quoteMatch.Success) + listPath = quoteMatch.Groups[1].Captures[0].Value; + + fileName = Path.Combine(Settings.NameListPath, listPath); + + sDirectory = Path.GetDirectoryName(fileName); + Directory.CreateDirectory(sDirectory); + + if (File.Exists(fileName)) + acts.Add(new NPCActions(ActionType.DelNameList, fileName)); + break; + + //cant use stored var + case "DELGUILDNAMELIST": + if (parts.Length < 2) return; + + quoteMatch = regexQuote.Match(line); + + listPath = parts[1]; + + if (quoteMatch.Success) + listPath = quoteMatch.Groups[1].Captures[0].Value; + + fileName = Path.Combine(Settings.NameListPath, listPath); + + sDirectory = Path.GetDirectoryName(fileName); + Directory.CreateDirectory(sDirectory); + + if (File.Exists(fileName)) + acts.Add(new NPCActions(ActionType.DelGuildNameList, fileName)); + break; + //cant use stored var + case "CLEARNAMELIST": + if (parts.Length < 2) return; + + quoteMatch = regexQuote.Match(line); + + listPath = parts[1]; + + if (quoteMatch.Success) + listPath = quoteMatch.Groups[1].Captures[0].Value; + + fileName = Path.Combine(Settings.NameListPath, listPath); + + sDirectory = Path.GetDirectoryName(fileName); + Directory.CreateDirectory(sDirectory); + + if (File.Exists(fileName)) + acts.Add(new NPCActions(ActionType.ClearNameList, fileName)); + break; + //cant use stored var + case "CLEARGUILDNAMELIST": + if (parts.Length < 2) return; + + quoteMatch = regexQuote.Match(line); + + listPath = parts[1]; + + if (quoteMatch.Success) + listPath = quoteMatch.Groups[1].Captures[0].Value; + + fileName = Path.Combine(Settings.NameListPath, listPath); + + sDirectory = Path.GetDirectoryName(fileName); + Directory.CreateDirectory(sDirectory); + + if (File.Exists(fileName)) + acts.Add(new NPCActions(ActionType.ClearGuildNameList, fileName)); + break; + + case "GIVEHP": + if (parts.Length < 2) return; + + acts.Add(new NPCActions(ActionType.GiveHP, parts[1])); + break; + + case "GIVEMP": + if (parts.Length < 2) return; + acts.Add(new NPCActions(ActionType.GiveMP, parts[1])); + break; + + case "CHANGELEVEL": + if (parts.Length < 2) return; + + acts.Add(new NPCActions(ActionType.ChangeLevel, parts[1])); + break; + + case "SETPKPOINT": + if (parts.Length < 2) return; + + acts.Add(new NPCActions(ActionType.SetPkPoint, parts[1])); + break; + + case "REDUCEPKPOINT": + if (parts.Length < 2) return; + + acts.Add(new NPCActions(ActionType.ReducePkPoint, parts[1])); + break; + + case "INCREASEPKPOINT": + if (parts.Length < 2) return; + + acts.Add(new NPCActions(ActionType.IncreasePkPoint, parts[1])); + break; + + case "CHANGEGENDER": + acts.Add(new NPCActions(ActionType.ChangeGender)); + break; + + case "CHANGECLASS": + if (parts.Length < 2) return; + + acts.Add(new NPCActions(ActionType.ChangeClass, parts[1])); + break; + + case "CHANGEHAIR": + if (parts.Length < 2) + { + acts.Add(new NPCActions(ActionType.ChangeHair)); + } + else + { + acts.Add(new NPCActions(ActionType.ChangeHair, parts[1])); + } + break; + + case "LOCALMESSAGE": + var match = regexQuote.Match(line); + if (match.Success) + { + var message = match.Groups[1].Captures[0].Value; + + var last = parts.Count() - 1; + acts.Add(new NPCActions(ActionType.LocalMessage, message, parts[last])); + } + break; + + case "GLOBALMESSAGE": + match = regexQuote.Match(line); + if (match.Success) + { + var message = match.Groups[1].Captures[0].Value; + + var last = parts.Count() - 1; + acts.Add(new NPCActions(ActionType.GlobalMessage, message, parts[last])); + } + break; + + case "GIVESKILL": + if (parts.Length < 3) return; + + string spelllevel = parts.Length > 2 ? parts[2] : "0"; + acts.Add(new NPCActions(ActionType.GiveSkill, parts[1], spelllevel)); + break; + + case "REMOVESKILL": + if (parts.Length < 2) return; + + acts.Add(new NPCActions(ActionType.RemoveSkill, parts[1])); + break; + + //cant use stored var + case "SET": + if (parts.Length < 3) return; + match = regexFlag.Match(parts[1]); + if (match.Success) + { + string flagIndex = match.Groups[1].Captures[0].Value; + acts.Add(new NPCActions(ActionType.Set, flagIndex, parts[2])); + } + break; + + case "PARAM1": + if (parts.Length < 2) return; + + string instanceId = parts.Length < 3 ? "1" : parts[2]; + acts.Add(new NPCActions(ActionType.Param1, parts[1], instanceId)); + break; + + case "PARAM2": + if (parts.Length < 2) return; + + acts.Add(new NPCActions(ActionType.Param2, parts[1])); + break; + + case "PARAM3": + if (parts.Length < 2) return; + + acts.Add(new NPCActions(ActionType.Param3, parts[1])); + break; + + case "MONGEN": + if (parts.Length < 2) return; + + count = parts.Length < 3 ? "1" : parts[2]; + acts.Add(new NPCActions(ActionType.Mongen, parts[1], count)); + break; + + case "TIMERECALL": + if (parts.Length < 2) return; + + string page = parts.Length > 2 ? parts[2] : ""; + + acts.Add(new NPCActions(ActionType.TimeRecall, parts[1], page)); + break; + + case "TIMERECALLGROUP": + if (parts.Length < 2) return; + + page = parts.Length > 2 ? parts[2] : ""; + + acts.Add(new NPCActions(ActionType.TimeRecallGroup, parts[1], page)); + break; + + case "BREAKTIMERECALL": + acts.Add(new NPCActions(ActionType.BreakTimeRecall)); + break; + + case "DELAYGOTO": + if (parts.Length < 3) return; + + acts.Add(new NPCActions(ActionType.DelayGoto, parts[1], parts[2])); + break; + + case "MONCLEAR": + if (parts.Length < 2) return; + + instanceId = parts.Length < 3 ? "1" : parts[2]; + + string mobName = parts.Length < 4 ? "" : parts[3]; + + acts.Add(new NPCActions(ActionType.MonClear, parts[1], instanceId, mobName)); + break; + + case "GROUPRECALL": + acts.Add(new NPCActions(ActionType.GroupRecall)); + break; + + case "GROUPTELEPORT": + if (parts.Length < 2) return; + string x; + string y; + + if (parts.Length == 4) + { + instanceId = "1"; + x = parts[2]; + y = parts[3]; + } + else + { + instanceId = parts.Length < 3 ? "1" : parts[2]; + x = parts.Length < 4 ? "0" : parts[3]; + y = parts.Length < 5 ? "0" : parts[4]; + } + + acts.Add(new NPCActions(ActionType.GroupTeleport, parts[1], instanceId, x, y)); + break; + + case "MOV": + if (parts.Length < 3) return; + match = Regex.Match(parts[1], @"[A-Z][0-9]", RegexOptions.IgnoreCase); + + quoteMatch = regexQuote.Match(line); + + string valueToStore = parts[2]; + + if (quoteMatch.Success) + valueToStore = quoteMatch.Groups[1].Captures[0].Value; + + if (match.Success) + acts.Add(new NPCActions(ActionType.Mov, parts[1], valueToStore)); + + break; + case "CALC": + if (parts.Length < 4) return; + + match = Regex.Match(parts[1], @"[A-Z][0-9]", RegexOptions.IgnoreCase); + + quoteMatch = regexQuote.Match(line); + + valueToStore = parts[3]; + + if (quoteMatch.Success) + valueToStore = quoteMatch.Groups[1].Captures[0].Value; + + if (match.Success) + acts.Add(new NPCActions(ActionType.Calc, "%" + parts[1], parts[2], valueToStore, parts[1].Insert(1, "-"))); + + break; + case "GIVEBUFF": + if (parts.Length < 4) return; + + string visible = ""; + string infinite = ""; + string stackable = ""; + + if (parts.Length > 3) visible = parts[3]; + if (parts.Length > 4) infinite = parts[4]; + if (parts.Length > 5) stackable = parts[5]; + + acts.Add(new NPCActions(ActionType.GiveBuff, parts[1], parts[2], visible, infinite, stackable)); + break; + + case "REMOVEBUFF": + if (parts.Length < 2) return; + + acts.Add(new NPCActions(ActionType.RemoveBuff, parts[1])); + break; + + case "ADDTOGUILD": + if (parts.Length < 2) return; + acts.Add(new NPCActions(ActionType.AddToGuild, parts[1])); + break; + + case "REMOVEFROMGUILD": + if (parts.Length < 2) return; + acts.Add(new NPCActions(ActionType.RemoveFromGuild, parts[1])); + break; + + case "REFRESHEFFECTS": + acts.Add(new NPCActions(ActionType.RefreshEffects)); + break; + + case "CANGAINEXP": + if (parts.Length < 2) return; + acts.Add(new NPCActions(ActionType.CanGainExp, parts[1])); + break; + + case "COMPOSEMAIL": + match = regexQuote.Match(line); + if (match.Success) + { + var message = match.Groups[1].Captures[0].Value; + + var last = parts.Count() - 1; + acts.Add(new NPCActions(ActionType.ComposeMail, message, parts[last])); + } + break; + + case "ADDMAILGOLD": + if (parts.Length < 2) return; + acts.Add(new NPCActions(ActionType.AddMailGold, parts[1])); + break; + + case "ADDMAILITEM": + if (parts.Length < 3) return; + acts.Add(new NPCActions(ActionType.AddMailItem, parts[1], parts[2])); + break; + + case "SENDMAIL": + acts.Add(new NPCActions(ActionType.SendMail)); + break; + + case "GROUPGOTO": + if (parts.Length < 2) return; + acts.Add(new NPCActions(ActionType.GroupGoto, parts[1])); + break; + + case "ENTERMAP": + acts.Add(new NPCActions(ActionType.EnterMap)); + break; + case "MAKEWEDDINGRING": + acts.Add(new NPCActions(ActionType.MakeWeddingRing)); + break; + case "FORCEDIVORCE": + acts.Add(new NPCActions(ActionType.ForceDivorce)); + break; + + case "LOADVALUE": + if (parts.Length < 5) return; + + quoteMatch = regexQuote.Match(line); + + if (quoteMatch.Success) + { + fileName = Path.Combine(Settings.ValuePath, quoteMatch.Groups[1].Captures[0].Value); + + string group = parts[parts.Length - 2]; + string key = parts[parts.Length - 1]; + + sDirectory = Path.GetDirectoryName(fileName); + Directory.CreateDirectory(sDirectory); + + if (!File.Exists(fileName)) + File.Create(fileName).Close(); + + acts.Add(new NPCActions(ActionType.LoadValue, parts[1], fileName, group, key)); + } + break; + + case "SAVEVALUE": + if (parts.Length < 5) return; + + MatchCollection matchCol = regexQuote.Matches(line); + + if (matchCol.Count > 0 && matchCol[0].Success) + { + fileName = Path.Combine(Settings.ValuePath, matchCol[0].Groups[1].Captures[0].Value); + + string value = parts[parts.Length - 1]; + + if (matchCol.Count > 1 && matchCol[1].Success) + value = matchCol[1].Groups[1].Captures[0].Value; + + string[] newParts = line.Replace(value, string.Empty).Replace("\"", "").Trim().Split(' '); + + string group = newParts[newParts.Length - 2]; + string key = newParts[newParts.Length - 1]; + + sDirectory = Path.GetDirectoryName(fileName); + Directory.CreateDirectory(sDirectory); + + if (!File.Exists(fileName)) + File.Create(fileName).Close(); + + acts.Add(new NPCActions(ActionType.SaveValue, fileName, group, key, value)); + } + break; + case "CONQUESTGUARD": + if (parts.Length < 3) return; + acts.Add(new NPCActions(ActionType.ConquestGuard, parts[1], parts[2])); + break; + case "CONQUESTGATE": + if (parts.Length < 3) return; + acts.Add(new NPCActions(ActionType.ConquestGate, parts[1], parts[2])); + break; + case "CONQUESTWALL": + if (parts.Length < 3) return; + acts.Add(new NPCActions(ActionType.ConquestWall, parts[1], parts[2])); + break; + case "TAKECONQUESTGOLD": + if (parts.Length < 2) return; + acts.Add(new NPCActions(ActionType.TakeConquestGold, parts[1])); + break; + case "SETCONQUESTRATE": + if (parts.Length < 3) return; + acts.Add(new NPCActions(ActionType.SetConquestRate, parts[1], parts[2])); + break; + case "STARTCONQUEST": + if (parts.Length < 2) return; + acts.Add(new NPCActions(ActionType.StartConquest, parts[1])); + break; + case "SCHEDULECONQUEST": + if (parts.Length < 2) return; + acts.Add(new NPCActions(ActionType.ScheduleConquest, parts[1])); + break; + case "OPENGATE": + if (parts.Length < 3) return; + acts.Add(new NPCActions(ActionType.OpenGate, parts[1], parts[2])); + break; + case "CLOSEGATE": + if (parts.Length < 3) return; + acts.Add(new NPCActions(ActionType.CloseGate, parts[1], parts[2])); + break; + case "OPENBROWSER": + if (parts.Length < 2) return; + acts.Add(new NPCActions(ActionType.OpenBrowser, parts[1])); + break; + case "GETRANDOMTEXT": + if (parts.Length < 3) return; + match = Regex.Match(parts[2], @"[A-Z][0-9]", RegexOptions.IgnoreCase); + if (match.Success) + acts.Add(new NPCActions(ActionType.GetRandomText, parts[1], parts[2])); + break; + case "PLAYSOUND": + if (parts.Length < 2) return; + acts.Add(new NPCActions(ActionType.PlaySound, parts[1])); + break; + case "SETTIMER": + { + if (parts.Length < 4) return; + + string global = parts.Length < 5 ? "" : parts[4]; + + acts.Add(new NPCActions(ActionType.SetTimer, parts[1], parts[2], parts[3], global)); + } + break; + case "EXPIRETIMER": + { + if (parts.Length < 2) return; + + acts.Add(new NPCActions(ActionType.ExpireTimer, parts[1])); + } + break; + + case "UNEQUIPITEM": + var type = ""; + + if (parts.Length >= 2) + { + type = parts[1]; + } + + acts.Add(new NPCActions(ActionType.UnequipItem, type)); + break; + case "ROLLDIE": + if (parts.Length < 3) return; + + acts.Add(new NPCActions(ActionType.RollDie, parts[1], parts[2])); + break; + case "ROLLYUT": + if (parts.Length < 3) return; + + acts.Add(new NPCActions(ActionType.RollYut, parts[1], parts[2])); + break; + + case "DROP": + if (parts.Length < 2) return; + + quoteMatch = regexQuote.Match(line); + + listPath = parts[1]; + + if (quoteMatch.Success) + listPath = quoteMatch.Groups[1].Captures[0].Value; + + fileName = Path.Combine(Settings.DropPath, listPath); + + acts.Add(new NPCActions(ActionType.Drop, fileName)); + break; + + case "CONQUESTREPAIRALL": + if (parts.Length < 2) return; + + acts.Add(new NPCActions(ActionType.ConquestRepairAll, parts[1])); + break; + } + } + + public List ParseSay(PlayerObject player, List speech) + { + for (var i = 0; i < speech.Count; i++) + { + var parts = speech[i].Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); + + if (parts.Length == 0) continue; + + foreach (var part in parts) + { + speech[i] = speech[i].Replace(part, ReplaceValue(player, part)); + } + } + return speech; + } + + public string ReplaceValue(PlayerObject player, string param) + { + var regex = new Regex(@"\<\$(.*)\>"); + var varRegex = new Regex(@"(.*?)\(([A-Z][0-9])\)"); + var oneValRegex = new Regex(@"(.*?)\(((.*?))\)"); + var twoValRegex = new Regex(@"(.*?)\(((.*?),(.*?))\)"); + + var match = regex.Match(param); + + if (!match.Success) return param; + + string innerMatch = match.Groups[1].Captures[0].Value.ToUpper(); + + Match varMatch = varRegex.Match(innerMatch); + Match oneValMatch = oneValRegex.Match(innerMatch); + Match twoValMatch = twoValRegex.Match(innerMatch); + + if (varRegex.Match(innerMatch).Success) + innerMatch = innerMatch.Replace(varMatch.Groups[2].Captures[0].Value.ToUpper(), ""); + else if (twoValRegex.Match(innerMatch).Success) + innerMatch = innerMatch.Replace(twoValMatch.Groups[2].Captures[0].Value.ToUpper(), ""); + else if (oneValRegex.Match(innerMatch).Success) + innerMatch = innerMatch.Replace(oneValMatch.Groups[2].Captures[0].Value.ToUpper(), ""); + + string newValue = string.Empty; + + switch (innerMatch) + { + case "MONSTERCOUNT()": + Map map = Envir.GetMapByNameAndInstance(oneValMatch.Groups[2].Captures[0].Value.ToUpper()); + newValue = map == null ? "N/A" : map.MonsterCount.ToString(); + break; + case "OUTPUT()": + newValue = FindVariable(player, "%" + varMatch.Groups[2].Captures[0].Value.ToUpper()); + break; + case "NPCNAME": + for (int i = 0; i < player.CurrentMap.NPCs.Count; i++) + { + NPCObject ob = player.CurrentMap.NPCs[i]; + if (ob.ObjectID != player.NPCObjectID) continue; + newValue = ob.Name.Replace("_", " "); + } + break; + case "USERNAME": + newValue = player.Name; + break; + case "LEVEL": + newValue = player.Level.ToString(CultureInfo.InvariantCulture); + break; + case "CLASS": + newValue = player.Class.ToString(); + break; + case "MAP": + newValue = player.CurrentMap.Info.FileName; + break; + case "X_COORD": + newValue = player.CurrentLocation.X.ToString(); + break; + case "Y_COORD": + newValue = player.CurrentLocation.Y.ToString(); + break; + case "HP": + newValue = player.HP.ToString(CultureInfo.InvariantCulture); + break; + case "MAXHP": + newValue = player.Stats[Stat.HP].ToString(CultureInfo.InvariantCulture); + break; + case "MP": + newValue = player.MP.ToString(CultureInfo.InvariantCulture); + break; + case "MAXMP": + newValue = player.Stats[Stat.MP].ToString(CultureInfo.InvariantCulture); + break; + case "GAMEGOLD": + newValue = player.Account.Gold.ToString(CultureInfo.InvariantCulture); + break; + case "CREDIT": + newValue = player.Account.Credit.ToString(CultureInfo.InvariantCulture); + break; + case "ARMOUR": + newValue = player.Info.Equipment[(int)EquipmentSlot.Armour] != null ? + player.Info.Equipment[(int)EquipmentSlot.Armour].FriendlyName : "No Armour"; + break; + case "WEAPON": + newValue = player.Info.Equipment[(int)EquipmentSlot.Weapon] != null ? + player.Info.Equipment[(int)EquipmentSlot.Weapon].FriendlyName : "No Weapon"; + break; + case "RING_L": + newValue = player.Info.Equipment[(int)EquipmentSlot.RingL] != null ? + player.Info.Equipment[(int)EquipmentSlot.RingL].FriendlyName : "No Ring"; + break; + case "RING_R": + newValue = player.Info.Equipment[(int)EquipmentSlot.RingR] != null ? + player.Info.Equipment[(int)EquipmentSlot.RingR].FriendlyName : "No Ring"; + break; + case "BRACELET_L": + newValue = player.Info.Equipment[(int)EquipmentSlot.BraceletL] != null ? + player.Info.Equipment[(int)EquipmentSlot.BraceletL].FriendlyName : "No Bracelet"; + break; + case "BRACELET_R": + newValue = player.Info.Equipment[(int)EquipmentSlot.BraceletR] != null ? + player.Info.Equipment[(int)EquipmentSlot.BraceletR].FriendlyName : "No Bracelet"; + break; + case "NECKLACE": + newValue = player.Info.Equipment[(int)EquipmentSlot.Necklace] != null ? + player.Info.Equipment[(int)EquipmentSlot.Necklace].FriendlyName : "No Necklace"; + break; + case "HELMET": + newValue = player.Info.Equipment[(int)EquipmentSlot.Helmet] != null ? + player.Info.Equipment[(int)EquipmentSlot.Helmet].FriendlyName : "No Helmet"; + break; + + case "DATE": + newValue = Envir.Now.ToShortDateString(); + break; + case "USERCOUNT": + newValue = Envir.PlayerCount.ToString(CultureInfo.InvariantCulture); + break; + case "PKPOINT": + newValue = player.PKPoints.ToString(); + break; + case "GUILDWARTIME": + newValue = Settings.Guild_WarTime.ToString(); + break; + case "GUILDWARFEE": + newValue = Settings.Guild_WarCost.ToString(); + break; + case "PARCELAMOUNT": + newValue = player.GetMailAwaitingCollectionAmount().ToString(); + break; + case "GUILDNAME": + if (player.MyGuild == null) return "No Guild"; + else + newValue = player.MyGuild.Name + " Guild"; + break; + case "ROLLRESULT": + newValue = player.NPCData.TryGetValue("NPCRollResult", out object _rollResult) ? _rollResult.ToString() : "Not Rolled"; + break; + default: + newValue = string.Empty; + break; + } + + if (string.IsNullOrEmpty(newValue)) return param; + + return param.Replace(match.Value, newValue); + } + public string ReplaceValue(MonsterObject Monster, string param) + { + var regex = new Regex(@"\<\$(.*)\>"); + var varRegex = new Regex(@"(.*?)\(([A-Z][0-9])\)"); + + var match = regex.Match(param); + + if (!match.Success) return param; + + string innerMatch = match.Groups[1].Captures[0].Value.ToUpper(); + + Match varMatch = varRegex.Match(innerMatch); + + if (varRegex.Match(innerMatch).Success) + innerMatch = innerMatch.Replace(varMatch.Groups[2].Captures[0].Value.ToUpper(), ""); + + string newValue = string.Empty; + + switch (innerMatch) + { + case "OUTPUT()": + newValue = FindVariable(Monster, "%" + varMatch.Groups[2].Captures[0].Value.ToUpper()); + break; + case "USERNAME": + newValue = Monster.Name; + break; + case "LEVEL": + newValue = Monster.Level.ToString(CultureInfo.InvariantCulture); + break; + case "MAP": + newValue = Monster.CurrentMap.Info.FileName; + break; + case "X_COORD": + newValue = Monster.CurrentLocation.X.ToString(); + break; + case "Y_COORD": + newValue = Monster.CurrentLocation.Y.ToString(); + break; + case "HP": + newValue = Monster.HP.ToString(CultureInfo.InvariantCulture); + break; + case "MAXHP": + newValue = Monster.Stats[Stat.HP].ToString(CultureInfo.InvariantCulture); + break; + case "DATE": + newValue = Envir.Now.ToShortDateString(); + break; + case "USERCOUNT": + newValue = Envir.PlayerCount.ToString(CultureInfo.InvariantCulture); + break; + case "GUILDWARTIME": + newValue = Settings.Guild_WarTime.ToString(); + break; + case "GUILDWARFEE": + newValue = Settings.Guild_WarCost.ToString(); + break; + default: + newValue = string.Empty; + break; + } + + if (string.IsNullOrEmpty(newValue)) return param; + + return param.Replace(match.Value, newValue); + } + + public bool Check() + { + var failed = false; + + for (int i = 0; i < CheckList.Count; i++) + { + NPCChecks check = CheckList[i]; + List param = check.Params.ToList(); + + uint tempUint; + int tempInt; + int tempInt2; + Map map; + switch (check.Type) + { + case CheckType.CheckDay: + var day = Envir.Now.DayOfWeek.ToString().ToUpper(); + var dayToCheck = param[0].ToUpper(); + + failed = day != dayToCheck; + break; + + case CheckType.CheckHour: + if (!uint.TryParse(param[0], out tempUint)) + { + failed = true; + break; + } + + var hour = Envir.Now.Hour; + var hourToCheck = tempUint; + + failed = hour != hourToCheck; + break; + + case CheckType.CheckMinute: + if (!uint.TryParse(param[0], out tempUint)) + { + failed = true; + break; + } + + var minute = Envir.Now.Minute; + var minuteToCheck = tempUint; + + failed = minute != minuteToCheck; + break; + + case CheckType.CheckHum: + if (!int.TryParse(param[1], out tempInt) || !int.TryParse(param[3], out tempInt2)) + { + failed = true; + break; + } + + map = Envir.GetMapByNameAndInstance(param[2], tempInt2); + if (map == null) + { + failed = true; + break; + } + + failed = !Compare(param[0], map.Players.Count(), tempInt); + + break; + + case CheckType.CheckMon: + if (!int.TryParse(param[1], out tempInt) || !int.TryParse(param[3], out tempInt2)) + { + failed = true; + break; + } + + map = Envir.GetMapByNameAndInstance(param[2], tempInt2); + if (map == null) + { + failed = true; + break; + } + + failed = !Compare(param[0], map.MonsterCount, tempInt); + + break; + + case CheckType.CheckExactMon: + if (Envir.GetMonsterInfo(param[0]) == null) + { + failed = true; + break; + } + + if (!int.TryParse(param[2], out tempInt) || !int.TryParse(param[4], out tempInt2)) + { + failed = true; + break; + } + + map = Envir.GetMapByNameAndInstance(param[3], tempInt2); + if (map == null) + { + failed = true; + break; + } + + failed = (!Compare(param[1], Envir.Objects.Count(( + d => d.CurrentMap == map && + d.Race == ObjectType.Monster && + string.Equals(d.Name.Replace(" ", ""), param[0], StringComparison.OrdinalIgnoreCase) && + !d.Dead)), tempInt)); + + break; + + case CheckType.Random: + if (!int.TryParse(param[0], out tempInt)) + { + failed = true; + break; + } + + failed = 0 != Envir.Random.Next(0, tempInt); + break; + case CheckType.CheckCalc: + int left; + int right; + + if (!int.TryParse(param[0], out left) || !int.TryParse(param[2], out right)) + { + failed = true; + break; + } + + try + { + failed = !Compare(param[1], left, right); + } + catch (ArgumentException) + { + MessageQueue.Enqueue(string.Format("Incorrect operator: {0}, Page: {1}", param[1], Key)); + return true; + } + break; + } + + if (!failed) continue; + + Failed(); + return false; + } + + Success(); + return true; + + } + public bool Check(MonsterObject monster) + { + var failed = false; + + for (int i = 0; i < CheckList.Count; i++) + { + NPCChecks check = CheckList[i]; + List param = check.Params.Select(t => FindVariable(monster, t)).ToList(); + + for (int j = 0; j < param.Count; j++) + { + var parts = param[j].Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); + + if (parts.Length == 0) continue; + + foreach (var part in parts) + { + param[j] = param[j].Replace(part, ReplaceValue(monster, part)); + } + } + + uint tempUint; + int tempInt; + int tempInt2; + Map map; + + switch (check.Type) + { + case CheckType.Level: + { + if (!ushort.TryParse(param[1], out ushort level)) + { + failed = true; + break; + } + + try + { + failed = !Compare(param[0], monster.Level, level); + } + catch (ArgumentException) + { + MessageQueue.Enqueue(string.Format("Incorrect operator: {0}, Page: {1}", param[0], Key)); + return true; + } + } + break; + case CheckType.CheckDay: + var day = Envir.Now.DayOfWeek.ToString().ToUpper(); + var dayToCheck = param[0].ToUpper(); + + failed = day != dayToCheck; + break; + + case CheckType.CheckHour: + if (!uint.TryParse(param[0], out tempUint)) + { + failed = true; + break; + } + + var hour = Envir.Now.Hour; + var hourToCheck = tempUint; + + failed = hour != hourToCheck; + break; + + case CheckType.CheckMinute: + if (!uint.TryParse(param[0], out tempUint)) + { + failed = true; + break; + } + + var minute = Envir.Now.Minute; + var minuteToCheck = tempUint; + + failed = minute != minuteToCheck; + break; + + case CheckType.CheckRange: + int x, y, range; + if (!int.TryParse(param[0], out x) || !int.TryParse(param[1], out y) || !int.TryParse(param[2], out range)) + { + failed = true; + break; + } + + var target = new Point { X = x, Y = y }; + + failed = !Functions.InRange(monster.CurrentLocation, target, range); + break; + + case CheckType.CheckMap: + map = Envir.GetMapByNameAndInstance(param[0]); + + failed = monster.CurrentMap != map; + break; + case CheckType.CheckHum: + if (!int.TryParse(param[1], out tempInt) || !int.TryParse(param[3], out tempInt2)) + { + failed = true; + break; + } + + map = Envir.GetMapByNameAndInstance(param[2], tempInt2); + if (map == null) + { + failed = true; + break; + } + + failed = !Compare(param[0], map.Players.Count(), tempInt); + + break; + + case CheckType.CheckMon: + if (!int.TryParse(param[1], out tempInt) || !int.TryParse(param[3], out tempInt2)) + { + failed = true; + break; + } + + map = Envir.GetMapByNameAndInstance(param[2], tempInt2); + if (map == null) + { + failed = true; + break; + } + + failed = !Compare(param[0], map.MonsterCount, tempInt); + + break; + + case CheckType.CheckExactMon: + if (Envir.GetMonsterInfo(param[0]) == null) + { + failed = true; + break; + } + + if (!int.TryParse(param[2], out tempInt) || !int.TryParse(param[4], out tempInt2)) + { + failed = true; + break; + } + + map = Envir.GetMapByNameAndInstance(param[3], tempInt2); + if (map == null) + { + failed = true; + break; + } + + failed = (!Compare(param[1], Envir.Objects.Count(( + d => d.CurrentMap == map && + d.Race == ObjectType.Monster && + string.Equals(d.Name.Replace(" ", ""), param[0], StringComparison.OrdinalIgnoreCase) && + !d.Dead)), tempInt)); + + break; + + case CheckType.Random: + if (!int.TryParse(param[0], out tempInt)) + { + failed = true; + break; + } + + failed = 0 != Envir.Random.Next(0, tempInt); + break; + case CheckType.CheckCalc: + int left; + int right; + + if (!int.TryParse(param[0], out left) || !int.TryParse(param[2], out right)) + { + failed = true; + break; + } + + try + { + failed = !Compare(param[1], left, right); + } + catch (ArgumentException) + { + MessageQueue.Enqueue(string.Format("Incorrect operator: {0}, Page: {1}", param[1], Key)); + return true; + } + break; + } + + if (!failed) continue; + + Failed(monster); + return false; + } + + Success(monster); + return true; + + } + public bool Check(PlayerObject player) + { + var failed = false; + + for (int i = 0; i < CheckList.Count; i++) + { + NPCChecks check = CheckList[i]; + List param = check.Params.Select(t => FindVariable(player, t)).ToList(); + + for (int j = 0; j < param.Count; j++) + { + var parts = param[j].Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); + + if (parts.Length == 0) continue; + + foreach (var part in parts) + { + param[j] = param[j].Replace(part, ReplaceValue(player, part)); + } + } + + uint tempUint; + int tempInt; + int tempInt2; + + switch (check.Type) + { + case CheckType.Level: + { + if (!ushort.TryParse(param[1], out ushort level)) + { + failed = true; + break; + } + + try + { + failed = !Compare(param[0], player.Level, level); + } + catch (ArgumentException) + { + MessageQueue.Enqueue(string.Format("Incorrect operator: {0}, Page: {1}", param[0], Key)); + return true; + } + } + break; + + case CheckType.CheckGold: + if (!uint.TryParse(param[1], out tempUint)) + { + failed = true; + break; + } + + try + { + failed = !Compare(param[0], player.Account.Gold, tempUint); + } + catch (ArgumentException) + { + MessageQueue.Enqueue(string.Format("Incorrect operator: {0}, Page: {1}", param[0], Key)); + return true; + } + break; + case CheckType.CheckGuildGold: + if (!uint.TryParse(param[1], out tempUint)) + { + failed = true; + break; + } + + try + { + failed = !Compare(param[0], player.MyGuild.Gold, tempUint); + } + catch (ArgumentException) + { + MessageQueue.Enqueue(string.Format("Incorrect operator: {0}, Page: {1}", param[0], Key)); + return true; + } + break; + case CheckType.CheckCredit: + if (!uint.TryParse(param[1], out tempUint)) + { + failed = true; + break; + } + + try + { + failed = !Compare(param[0], player.Account.Credit, tempUint); + } + catch (ArgumentException) + { + MessageQueue.Enqueue(string.Format("Incorrect operator: {0}, Page: {1}", param[0], Key)); + return true; + } + break; + + case CheckType.CheckItem: + ushort count; + ushort dura; + + if (!ushort.TryParse(param[1], out count)) + { + failed = true; + break; + } + + bool checkDura = ushort.TryParse(param[2], out dura); + + var info = Envir.GetItemInfo(param[0]); + + foreach (var item in player.Info.Inventory.Where(item => item != null && item.Info == info)) + { + if (checkDura) + if (item.CurrentDura < (dura * 1000)) continue; + + if (count > item.Count) + { + count -= item.Count; + continue; + } + + if (count > item.Count) continue; + count = 0; + break; + } + if (count > 0) + failed = true; + break; + + case CheckType.CheckGender: + MirGender gender; + + if (!MirGender.TryParse(param[0], false, out gender)) + { + failed = true; + break; + } + + failed = player.Gender != gender; + break; + + case CheckType.CheckClass: + MirClass mirClass; + + if (!MirClass.TryParse(param[0], true, out mirClass)) + { + failed = true; + break; + } + + failed = player.Class != mirClass; + break; + + case CheckType.CheckDay: + var day = Envir.Now.DayOfWeek.ToString().ToUpper(); + var dayToCheck = param[0].ToUpper(); + + failed = day != dayToCheck; + break; + + case CheckType.CheckHour: + if (!uint.TryParse(param[0], out tempUint)) + { + failed = true; + break; + } + + var hour = Envir.Now.Hour; + var hourToCheck = tempUint; + + failed = hour != hourToCheck; + break; + + case CheckType.CheckMinute: + if (!uint.TryParse(param[0], out tempUint)) + { + failed = true; + break; + } + + var minute = Envir.Now.Minute; + var minuteToCheck = tempUint; + + failed = minute != minuteToCheck; + break; + + case CheckType.CheckNameList: + if (!File.Exists(param[0])) + { + failed = true; + break; + } + + var read = File.ReadAllLines(param[0]); + failed = !read.Contains(player.Name); + break; + + case CheckType.CheckGuildNameList: + if (!File.Exists(param[0])) + { + failed = true; + break; + } + + read = File.ReadAllLines(param[0]); + failed = player.MyGuild == null || !read.Contains(player.MyGuild.Name); + break; + + case CheckType.IsAdmin: + failed = !player.IsGM; + break; + + case CheckType.CheckPkPoint: + if (!int.TryParse(param[1], out tempInt)) + { + failed = true; + break; + } + + try + { + failed = !Compare(param[0], player.PKPoints, tempInt); + } + catch (ArgumentException) + { + MessageQueue.Enqueue(string.Format("Incorrect operator: {0}, Page: {1}", param[0], Key)); + return true; + } + break; + + case CheckType.CheckRange: + int x, y, range; + if (!int.TryParse(param[0], out x) || !int.TryParse(param[1], out y) || !int.TryParse(param[2], out range)) + { + failed = true; + break; + } + + var target = new Point { X = x, Y = y }; + + failed = !Functions.InRange(player.CurrentLocation, target, range); + break; + + case CheckType.CheckMap: + Map map = Envir.GetMapByNameAndInstance(param[0]); + + failed = player.CurrentMap != map; + break; + + case CheckType.Check: + uint onCheck; + + if (!uint.TryParse(param[0], out tempUint) || !uint.TryParse(param[1], out onCheck) || tempUint > Globals.FlagIndexCount) + { + failed = true; + break; + } + + bool tempBool = Convert.ToBoolean(onCheck); + + bool flag = player.Info.Flags[tempUint]; + + failed = flag != tempBool; + break; + + case CheckType.CheckHum: + if (!int.TryParse(param[1], out tempInt) || !int.TryParse(param[3], out tempInt2)) + { + failed = true; + break; + } + + map = Envir.GetMapByNameAndInstance(param[2], tempInt2); + if (map == null) + { + failed = true; + break; + } + + failed = !Compare(param[0], map.Players.Count(), tempInt); + + break; + + case CheckType.CheckMon: + if (!int.TryParse(param[1], out tempInt) || !int.TryParse(param[3], out tempInt2)) + { + failed = true; + break; + } + + map = Envir.GetMapByNameAndInstance(param[2], tempInt2); + if (map == null) + { + failed = true; + break; + } + + failed = !Compare(param[0], map.MonsterCount, tempInt); + + break; + + case CheckType.CheckExactMon: + if (Envir.GetMonsterInfo(param[0]) == null) + { + failed = true; + break; + } + + if (!int.TryParse(param[2], out tempInt) || !int.TryParse(param[4], out tempInt2)) + { + failed = true; + break; + } + + map = Envir.GetMapByNameAndInstance(param[3], tempInt2); + if (map == null) + { + failed = true; + break; + } + + failed = (!Compare(param[1], Envir.Objects.Count(( + d => d.CurrentMap == map && + d.Race == ObjectType.Monster && + string.Equals(d.Name.Replace(" ", ""), param[0], StringComparison.OrdinalIgnoreCase) && + !d.Dead)), tempInt)); + + break; + + case CheckType.Random: + if (!int.TryParse(param[0], out tempInt)) + { + failed = true; + break; + } + + failed = 0 != Envir.Random.Next(0, tempInt); + break; + + case CheckType.Groupleader: + failed = (player.GroupMembers == null || player.GroupMembers[0] != player); + break; + + case CheckType.GroupCount: + if (!int.TryParse(param[1], out tempInt)) + { + failed = true; + break; + } + + failed = (player.GroupMembers == null || !Compare(param[0], player.GroupMembers.Count, tempInt)); + break; + case CheckType.GroupCheckNearby: + target = new Point(-1, -1); + for (int j = 0; j < player.CurrentMap.NPCs.Count; j++) + { + NPCObject ob = player.CurrentMap.NPCs[j]; + if (ob.ObjectID != player.NPCObjectID) continue; + target = ob.CurrentLocation; + break; + } + if (target.X == -1) + { + failed = true; + break; + } + if (player.GroupMembers == null) + failed = true; + else + { + for (int j = 0; j < player.GroupMembers.Count; j++) + { + if (player.GroupMembers[j] == null) continue; + failed |= !Functions.InRange(player.GroupMembers[j].CurrentLocation, target, 9); + if (failed) break; + } + } + break; + + case CheckType.PetCount: + if (!int.TryParse(param[1], out tempInt)) + { + failed = true; + break; + } + + failed = !Compare(param[0], player.Pets.Count(), tempInt); + break; + + case CheckType.PetLevel: + if (!int.TryParse(param[1], out tempInt)) + { + failed = true; + break; + } + + for (int p = 0; p < player.Pets.Count(); p++) + { + failed = !Compare(param[0], player.Pets[p].PetLevel, tempInt); + } + break; + + case CheckType.CheckCalc: + int left; + int right; + + try + { + if (!int.TryParse(param[0], out left) || !int.TryParse(param[2], out right)) + { + failed = !Compare(param[1], param[0], param[2]); + } + else + { + failed = !Compare(param[1], left, right); + } + } + catch (ArgumentException) + { + MessageQueue.Enqueue(string.Format("Incorrect operator: {0}, Page: {1}", param[1], Key)); + return true; + } + break; + case CheckType.InGuild: + if (param[0].Length > 0) + { + failed = player.MyGuild == null || player.MyGuild.Name != param[0]; + break; + } + + failed = player.MyGuild == null; + break; + + case CheckType.CheckQuest: + if (!int.TryParse(param[0], out tempInt)) + { + failed = true; + break; + } + + string tempString = param[1].ToUpper(); + + if (tempString == "ACTIVE") + { + failed = !player.CurrentQuests.Any(e => e.Index == tempInt); + } + else //COMPLETE + { + failed = !player.CompletedQuests.Contains(tempInt); + } + break; + case CheckType.CheckRelationship: + if (player.Info.Married == 0) + { + failed = true; + } + break; + case CheckType.CheckWeddingRing: + failed = !player.CheckMakeWeddingRing(); + break; + case CheckType.CheckPet: + + bool petMatch = false; + for (int c = player.Pets.Count - 1; c >= 0; c--) + { + if (string.Compare(player.Pets[c].Info.Name, param[0], true) != 0) continue; + + petMatch = true; + } + + failed = !petMatch; + break; + + case CheckType.HasBagSpace: + if (!int.TryParse(param[1], out tempInt)) + { + failed = true; + break; + } + + int slotCount = 0; + + for (int k = 0; k < player.Info.Inventory.Length; k++) + if (player.Info.Inventory[k] == null) slotCount++; + + failed = !Compare(param[0], slotCount, tempInt); + break; + case CheckType.IsNewHuman: + failed = player.Info.AccountInfo.Characters.Count > 1; + break; + case CheckType.CheckPermission: + GuildRankOptions guildPermissions; + if (!Enum.TryParse(param[0], true, out guildPermissions)) + { + failed = true; + break; + } + + if (player.MyGuild == null) + { + failed = true; + break; + } + + failed = !(player.MyGuildRank.Options.HasFlag(guildPermissions)); + + break; + case CheckType.CheckTimer: + { + if (!long.TryParse(param[1], out long time)) + { + failed = true; + break; + } + + try + { + var globalTimerKey = "_-" + param[0]; + + Timer timer; + + if (Envir.Timers.ContainsKey(globalTimerKey)) + { + timer = Envir.Timers[globalTimerKey]; + } + else + { + timer = player.GetTimer(param[0]); + } + + long remainingTime = 0; + + if (timer != null) + { + remainingTime = (timer.RelativeTime - Envir.Time) / 1000; + break; + } + + failed = !Compare(param[0], remainingTime, time); + } + catch (ArgumentException) + { + MessageQueue.Enqueue(string.Format("Incorrect operator: {0}, Page: {1}", param[0], Key)); + return true; + } + } + break; + + } + + if (!failed) continue; + + Failed(player); + return false; + } + + Success(player); + return true; + + } + + private void Act(IList acts) + { + for (var i = 0; i < acts.Count; i++) + { + string tempString = string.Empty; + int tempInt; + byte tempByte; + Packet p; + + MonsterInfo monInfo; + + NPCActions act = acts[i]; + List param = act.Params.ToList(); + Map map; + ChatType chatType; + switch (act.Type) + { + case ActionType.ClearNameList: + tempString = param[0]; + File.WriteAllLines(tempString, new string[] { }); + break; + + case ActionType.GlobalMessage: + if (!Enum.TryParse(param[1], true, out chatType)) return; + + p = new S.Chat { Message = param[0], Type = chatType }; + Envir.Broadcast(p); + break; + + case ActionType.Break: + Page.BreakFromSegments = true; + break; + + case ActionType.Param1: + if (!int.TryParse(param[1], out tempInt)) return; + + Param1 = param[0]; + Param1Instance = tempInt; + break; + + case ActionType.Param2: + if (!int.TryParse(param[0], out tempInt)) return; + + Param2 = tempInt; + break; + + case ActionType.Param3: + if (!int.TryParse(param[0], out tempInt)) return; + + Param3 = tempInt; + break; + + case ActionType.Mongen: + if (Param1 == null || Param2 == 0 || Param3 == 0) return; + if (!byte.TryParse(param[1], out tempByte)) return; + + map = Envir.GetMapByNameAndInstance(Param1, Param1Instance); + if (map == null) return; + + monInfo = Envir.GetMonsterInfo(param[0]); + if (monInfo == null) return; + + for (int j = 0; j < tempByte; j++) + { + MonsterObject monster = MonsterObject.GetMonster(monInfo); + if (monster == null) return; + monster.Direction = 0; + monster.ActionTime = Envir.Time + 1000; + monster.Spawn(map, new Point(Param2, Param3)); + } + break; + + case ActionType.MonClear: + if (!int.TryParse(param[1], out tempInt)) return; + + map = Envir.GetMapByNameAndInstance(param[0], tempInt); + if (map == null) return; + + foreach (var cell in map.Cells) + { + if (cell == null || cell.Objects == null) continue; + + for (int j = 0; j < cell.Objects.Count(); j++) + { + MapObject ob = cell.Objects[j]; + + if (ob.Race != ObjectType.Monster) continue; + if (ob.Dead) continue; + ob.Die(); + } + } + break; + } + } + } + private void Act(IList acts, PlayerObject player) + { + MailInfo mailInfo = null; + + for (var i = 0; i < acts.Count; i++) + { + NPCActions act = acts[i]; + List param = act.Params.Select(t => FindVariable(player, t)).ToList(); + + for (int j = 0; j < param.Count; j++) + { + var parts = param[j].Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); + + if (parts.Length == 0) continue; + + foreach (var part in parts) + { + param[j] = param[j].Replace(part, ReplaceValue(player, part)); + } + + if (player.NPCData.TryGetValue("NPCInputStr", out object _npcInputStr)) + { + param[j] = param[j].Replace("%INPUTSTR", (string)_npcInputStr); + } + } + + switch (act.Type) + { + case ActionType.Move: + { + Map map = Envir.GetMapByNameAndInstance(param[0]); + if (map == null) return; + + if (!int.TryParse(param[1], out int x)) return; + if (!int.TryParse(param[2], out int y)) return; + + var coords = new Point(x, y); + + if (coords.X > 0 && coords.Y > 0) player.Teleport(map, coords); + else player.TeleportRandom(200, 0, map); + } + break; + + case ActionType.InstanceMove: + { + if (!int.TryParse(param[1], out int instanceId)) return; + if (!int.TryParse(param[2], out int x)) return; + if (!int.TryParse(param[3], out int y)) return; + + var map = Envir.GetMapByNameAndInstance(param[0], instanceId); + if (map == null) return; + player.Teleport(map, new Point(x, y)); + } + break; + + case ActionType.GiveGold: + { + if (!uint.TryParse(param[0], out uint gold)) return; + + if (gold + player.Account.Gold >= uint.MaxValue) + gold = uint.MaxValue - player.Account.Gold; + + player.GainGold(gold); + } + break; + + case ActionType.TakeGold: + { + if (!uint.TryParse(param[0], out uint gold)) return; + + if (gold >= player.Account.Gold) gold = player.Account.Gold; + + player.Account.Gold -= gold; + player.Enqueue(new S.LoseGold { Gold = gold }); + } + break; + case ActionType.GiveGuildGold: + { + if (!uint.TryParse(param[0], out uint gold)) return; + + if (gold + player.MyGuild.Gold >= uint.MaxValue) + gold = uint.MaxValue - player.MyGuild.Gold; + + player.MyGuild.Gold += gold; + player.MyGuild.SendServerPacket(new S.GuildStorageGoldChange() { Type = 3, Amount = gold }); + } + break; + case ActionType.TakeGuildGold: + { + if (!uint.TryParse(param[0], out uint gold)) return; + + if (gold >= player.MyGuild.Gold) gold = player.MyGuild.Gold; + + player.MyGuild.Gold -= gold; + player.MyGuild.SendServerPacket(new S.GuildStorageGoldChange() { Type = 2, Amount = gold }); + } + break; + case ActionType.GiveCredit: + { + if (!uint.TryParse(param[0], out uint credit)) return; + + if (credit + player.Account.Credit >= uint.MaxValue) + credit = uint.MaxValue - player.Account.Credit; + + player.GainCredit(credit); + } + break; + + case ActionType.TakeCredit: + { + if (!uint.TryParse(param[0], out uint credit)) return; + + if (credit >= player.Account.Credit) credit = player.Account.Credit; + + player.Account.Credit -= credit; + player.Enqueue(new S.LoseCredit { Credit = credit }); + } + break; + + case ActionType.GiveItem: + { + if (param.Count < 2 || !ushort.TryParse(param[1], out ushort count)) count = 1; + + var info = Envir.GetItemInfo(param[0]); + + if (info == null) + { + MessageQueue.Enqueue(string.Format("Failed to get ItemInfo: {0}, Page: {1}", param[0], Key)); + break; + } + + while (count > 0) + { + UserItem item = Envir.CreateFreshItem(info); + + if (item == null) + { + MessageQueue.Enqueue(string.Format("Failed to create UserItem: {0}, Page: {1}", param[0], Key)); + return; + } + + if (item.Info.StackSize > count) + { + item.Count = count; + count = 0; + } + else + { + count -= item.Info.StackSize; + item.Count = item.Info.StackSize; + } + + if (player.CanGainItem(item)) + player.GainItem(item); + } + } + break; + + case ActionType.TakeItem: + { + if (param.Count < 2 || !ushort.TryParse(param[1], out ushort count)) count = 1; + var info = Envir.GetItemInfo(param[0]); + + ushort dura; + bool checkDura = ushort.TryParse(param[2], out dura); + + if (info == null) + { + MessageQueue.Enqueue(string.Format("Failed to get ItemInfo: {0}, Page: {1}", param[0], Key)); + break; + } + + for (int j = 0; j < player.Info.Inventory.Length; j++) + { + UserItem item = player.Info.Inventory[j]; + if (item == null) continue; + if (item.Info != info) continue; + + if (checkDura) + { + if (item.CurrentDura < (dura * 1000)) continue; + } + + if (count > item.Count) + { + player.Enqueue(new S.DeleteItem { UniqueID = item.UniqueID, Count = item.Count }); + player.Info.Inventory[j] = null; + + count -= item.Count; + continue; + } + + player.Enqueue(new S.DeleteItem { UniqueID = item.UniqueID, Count = count }); + if (count == item.Count) + player.Info.Inventory[j] = null; + else + item.Count -= count; + break; + } + player.RefreshStats(); + } + break; + + case ActionType.GiveExp: + { + uint tempUint; + if (!uint.TryParse(param[0], out tempUint)) return; + player.GainExp(tempUint); + } + break; + + case ActionType.GivePet: + { + byte petcount = 0; + byte petlevel = 0; + + var monInfo = Envir.GetMonsterInfo(param[0]); + if (monInfo == null) return; + + if (param.Count > 1) + petcount = byte.TryParse(param[1], out petcount) ? Math.Min((byte)5, petcount) : (byte)1; + + if (param.Count > 2) + petlevel = byte.TryParse(param[2], out petlevel) ? Math.Min((byte)7, petlevel) : (byte)0; + + for (int j = 0; j < petcount; j++) + { + MonsterObject monster = MonsterObject.GetMonster(monInfo); + if (monster == null) return; + monster.PetLevel = petlevel; + monster.Master = player; + monster.MaxPetLevel = 7; + monster.Direction = player.Direction; + monster.ActionTime = Envir.Time + 1000; + monster.Spawn(player.CurrentMap, player.CurrentLocation); + player.Pets.Add(monster); + } + } + break; + + case ActionType.RemovePet: + { + for (int c = player.Pets.Count - 1; c >= 0; c--) + { + if (string.Compare(player.Pets[c].Info.Name, param[0], true) != 0) continue; + + player.Pets[c].Die(); + } + } + break; + + case ActionType.ClearPets: + { + for (int c = player.Pets.Count - 1; c >= 0; c--) + { + player.Pets[c].DieNextTurn = true; + } + } + break; + + case ActionType.AddNameList: + { + var tempString = param[0]; + if (File.ReadAllLines(tempString).All(t => player.Name != t)) + { + using (var line = File.AppendText(tempString)) + { + line.WriteLine(player.Name); + } + } + } + break; + + + case ActionType.AddGuildNameList: + { + var tempString = param[0]; + if (player.MyGuild == null) break; + if (File.ReadAllLines(tempString).All(t => player.MyGuild.Name != t)) + { + using (var line = File.AppendText(tempString)) + { + line.WriteLine(player.MyGuild.Name); + } + } + } + break; + case ActionType.DelNameList: + { + var tempString = param[0]; + File.WriteAllLines(tempString, File.ReadLines(tempString).Where(l => l != player.Name).ToList()); + } + break; + + case ActionType.DelGuildNameList: + { + if (player.MyGuild == null) break; + var tempString = param[0]; + File.WriteAllLines(tempString, File.ReadLines(tempString).Where(l => l != player.MyGuild.Name).ToList()); + } + break; + case ActionType.ClearNameList: + { + var tempString = param[0]; + File.WriteAllLines(tempString, new string[] { }); + } + break; + case ActionType.ClearGuildNameList: + { + if (player.MyGuild == null) break; + var tempString = param[0]; + File.WriteAllLines(tempString, new string[] { }); + } + break; + + case ActionType.GiveHP: + { + if (!int.TryParse(param[0], out int tempInt)) return; + player.ChangeHP(tempInt); + } + break; + + case ActionType.GiveMP: + { + if (!int.TryParse(param[0], out int tempInt)) return; + player.ChangeMP(tempInt); + } + break; + + case ActionType.ChangeLevel: + { + if (!ushort.TryParse(param[0], out ushort tempuShort)) return; + tempuShort = Math.Min(ushort.MaxValue, tempuShort); + + player.Level = tempuShort; + player.Experience = 0; + player.LevelUp(); + } + break; + + case ActionType.SetPkPoint: + { + if (!int.TryParse(param[0], out int tempInt)) return; + player.PKPoints = tempInt; + } + break; + + case ActionType.ReducePkPoint: + { + if (!int.TryParse(param[0], out int tempInt)) return; + + player.PKPoints -= tempInt; + if (player.PKPoints < 0) player.PKPoints = 0; + } + break; + + case ActionType.IncreasePkPoint: + { + if (!int.TryParse(param[0], out int tempInt)) return; + player.PKPoints += tempInt; + } + break; + + case ActionType.ChangeGender: + { + switch (player.Info.Gender) + { + case MirGender.Male: + player.Info.Gender = MirGender.Female; + break; + case MirGender.Female: + player.Info.Gender = MirGender.Male; + break; + } + } + break; + + case ActionType.ChangeHair: + { + if (param.Count < 1) + { + player.Info.Hair = (byte)Envir.Random.Next(0, 9); + } + else + { + byte.TryParse(param[0], out byte tempByte); + + if (tempByte >= 0 && tempByte <= 9) + { + player.Info.Hair = tempByte; + } + } + } + break; + + case ActionType.ChangeClass: + { + if (!Enum.TryParse(param[0], true, out MirClass mirClass)) return; + + switch (mirClass) + { + case MirClass.Warrior: + player.Info.Class = MirClass.Warrior; + break; + case MirClass.Taoist: + player.Info.Class = MirClass.Taoist; + break; + case MirClass.Wizard: + player.Info.Class = MirClass.Wizard; + break; + } + } + break; + + case ActionType.LocalMessage: + { + ChatType chatType; + if (!Enum.TryParse(param[1], true, out chatType)) return; + player.ReceiveChat(param[0], chatType); + } + break; + + case ActionType.GlobalMessage: + { + if (!Enum.TryParse(param[1], true, out ChatType chatType)) return; + + var p = new S.Chat { Message = param[0], Type = chatType }; + Envir.Broadcast(p); + } + break; + + case ActionType.GiveSkill: + { + byte spellLevel = 0; + + Spell skill; + if (!Enum.TryParse(param[0], true, out skill)) return; + + if (player.Info.Magics.Any(e => e.Spell == skill)) break; + + if (param.Count > 1) + spellLevel = byte.TryParse(param[1], out spellLevel) ? Math.Min((byte)3, spellLevel) : (byte)0; + + var magic = new UserMagic(skill) { Level = spellLevel }; + + if (magic.Info == null) return; + + player.Info.Magics.Add(magic); + player.SendMagicInfo(magic); + } + break; + + case ActionType.RemoveSkill: + { + if (!Enum.TryParse(param[0], true, out Spell skill)) return; + + if (!player.Info.Magics.Any(e => e.Spell == skill)) break; + + for (var j = player.Info.Magics.Count - 1; j >= 0; j--) + { + if (player.Info.Magics[j].Spell != skill) continue; + + player.Info.Magics.RemoveAt(j); + player.Enqueue(new S.RemoveMagic { PlaceId = j }); + } + } + break; + + case ActionType.Goto: + { + DelayedAction action = new DelayedAction(DelayedType.NPC, -1, player.NPCObjectID, player.NPCScriptID, "[" + param[0] + "]"); + player.ActionList.Add(action); + } + break; + + case ActionType.Call: + { + if (!int.TryParse(param[0], out int scriptID)) return; + + var action = new DelayedAction(DelayedType.NPC, -1, player.NPCObjectID, scriptID, "[@MAIN]"); + player.ActionList.Add(action); + } + break; + + case ActionType.Break: + { + Page.BreakFromSegments = true; + } + break; + + case ActionType.Set: + { + int flagIndex; + uint onCheck; + if (!int.TryParse(param[0], out flagIndex)) return; + if (!uint.TryParse(param[1], out onCheck)) return; + + if (flagIndex < 0 || flagIndex >= Globals.FlagIndexCount) return; + var flagIsOn = Convert.ToBoolean(onCheck); + + player.Info.Flags[flagIndex] = flagIsOn; + + for (int f = player.CurrentMap.NPCs.Count - 1; f >= 0; f--) + { + if (Functions.InRange(player.CurrentMap.NPCs[f].CurrentLocation, player.CurrentLocation, Globals.DataRange)) + player.CurrentMap.NPCs[f].CheckVisible(player); + } + + if (flagIsOn) player.CheckNeedQuestFlag(flagIndex); + } + break; + + case ActionType.Param1: + { + if (!int.TryParse(param[1], out int tempInt)) return; + + Param1 = param[0]; + Param1Instance = tempInt; + } + break; + + case ActionType.Param2: + { + if (!int.TryParse(param[0], out int tempInt)) return; + + Param2 = tempInt; + } + break; + + case ActionType.Param3: + { + if (!int.TryParse(param[0], out int tempInt)) return; + + Param3 = tempInt; + } + break; + + case ActionType.Mongen: + { + if (Param1 == null || Param2 == 0 || Param3 == 0) return; + if (!byte.TryParse(param[1], out byte tempByte)) return; + + Map map = Envir.GetMapByNameAndInstance(Param1, Param1Instance); + if (map == null) return; + + var monInfo = Envir.GetMonsterInfo(param[0]); + if (monInfo == null) return; + + for (int j = 0; j < tempByte; j++) + { + MonsterObject monster = MonsterObject.GetMonster(monInfo); + if (monster == null) return; + monster.Direction = 0; + monster.ActionTime = Envir.Time + 1000; + monster.Spawn(map, new Point(Param2, Param3)); + } + } + break; + + case ActionType.TimeRecall: + { + var tempString = ""; + if (!long.TryParse(param[0], out long tempLong)) return; + + if (param[1].Length > 0) tempString = "[" + param[1] + "]"; + + Map tempMap = player.CurrentMap; + Point tempPoint = player.CurrentLocation; + + var action = new DelayedAction(DelayedType.NPC, Envir.Time + (tempLong * 1000), player.NPCObjectID, player.NPCScriptID, tempString, tempMap, tempPoint); + player.ActionList.Add(action); + } + break; + + case ActionType.TimeRecallGroup: + { + var tempString = ""; + if (player.GroupMembers == null) return; + if (!long.TryParse(param[0], out long tempLong)) return; + if (param[1].Length > 0) tempString = "[" + param[1] + "]"; + + for (int j = 0; j < player.GroupMembers.Count(); j++) + { + var groupMember = player.GroupMembers[j]; + + var action = new DelayedAction(DelayedType.NPC, Envir.Time + (tempLong * 1000), player.NPCObjectID, player.NPCScriptID, tempString, player.CurrentMap, player.CurrentLocation); + groupMember.ActionList.Add(action); + } + } + break; + + case ActionType.BreakTimeRecall: + { + foreach (DelayedAction ac in player.ActionList.Where(u => u.Type == DelayedType.NPC)) + { + ac.FlaggedToRemove = true; + } + } + break; + + case ActionType.DelayGoto: + { + if (!long.TryParse(param[0], out long tempLong)) return; + + var action = new DelayedAction(DelayedType.NPC, Envir.Time + (tempLong * 1000), player.NPCObjectID, player.NPCScriptID, "[" + param[1] + "]"); + player.ActionList.Add(action); + } + break; + + case ActionType.MonClear: + { + if (!int.TryParse(param[1], out int tempInt)) return; + + var map = Envir.GetMapByNameAndInstance(param[0], tempInt); + if (map == null) return; + + foreach (var cell in map.Cells) + { + if (cell == null || cell.Objects == null) continue; + + for (int j = 0; j < cell.Objects.Count(); j++) + { + MapObject ob = cell.Objects[j]; + + if (ob.Race != ObjectType.Monster) continue; + if (ob.Dead) continue; + + if (!string.IsNullOrEmpty(param[2]) && string.Compare(param[2], ((MonsterObject)ob).Info.Name, true) != 0) + continue; + + ob.Die(); + } + } + } + break; + case ActionType.GroupRecall: + { + if (player.GroupMembers == null) return; + + for (int j = 0; j < player.GroupMembers.Count(); j++) + { + player.GroupMembers[j].Teleport(player.CurrentMap, player.CurrentLocation); + } + } + break; + + case ActionType.GroupTeleport: + { + if (player.GroupMembers == null) return; + if (!int.TryParse(param[1], out int tempInt)) return; + if (!int.TryParse(param[2], out int x)) return; + if (!int.TryParse(param[3], out int y)) return; + + var map = Envir.GetMapByNameAndInstance(param[0], tempInt); + if (map == null) return; + + for (int j = 0; j < player.GroupMembers.Count(); j++) + { + if (x == 0 || y == 0) + { + player.GroupMembers[j].TeleportRandom(200, 0, map); + } + else + { + player.GroupMembers[j].Teleport(map, new Point(x, y)); + } + } + } + break; + + case ActionType.Mov: + { + string value = param[0]; + AddVariable(player, value, param[1]); + } + break; + + case ActionType.Calc: + { + int left; + int right; + + bool resultLeft = int.TryParse(param[0], out left); + bool resultRight = int.TryParse(param[2], out right); + + if (resultLeft && resultRight) + { + try + { + int result = Calculate(param[1], left, right); + AddVariable(player, param[3].Replace("-", ""), result.ToString()); + } + catch (ArgumentException) + { + MessageQueue.Enqueue(string.Format("Incorrect operator: {0}, Page: {1}", param[1], Key)); + } + } + else + { + AddVariable(player, param[3].Replace("-", ""), param[0] + param[2]); + } + } + break; + + case ActionType.GiveBuff: + { + if (!Enum.IsDefined(typeof(BuffType), param[0])) return; + + int.TryParse(param[1], out int duration); + bool.TryParse(param[2], out bool infinite); + bool.TryParse(param[3], out bool visible); + bool.TryParse(param[4], out bool stackable); + + player.AddBuff((BuffType)(byte)Enum.Parse(typeof(BuffType), param[0], true), player, Settings.Second * duration, new Stats(), visible); + } + break; + + case ActionType.RemoveBuff: + { + if (!Enum.IsDefined(typeof(BuffType), param[0])) return; + + BuffType bType = (BuffType)(byte)Enum.Parse(typeof(BuffType), param[0]); + + player.RemoveBuff(bType); + } + break; + + case ActionType.AddToGuild: + { + if (player.MyGuild != null) return; + + GuildObject guild = Envir.GetGuild(param[0]); + + if (guild == null) return; + + player.PendingGuildInvite = guild; + player.GuildInvite(true); + } + break; + + case ActionType.RemoveFromGuild: + { + if (player.MyGuild == null) return; + + if (player.MyGuildRank == null) return; + + player.MyGuild.DeleteMember(player, player.Name); + } + break; + + case ActionType.RefreshEffects: + { + player.SetLevelEffects(); + var p = new S.ObjectLevelEffects { ObjectID = player.ObjectID, LevelEffects = player.LevelEffects }; + player.Enqueue(p); + player.Broadcast(p); + } + break; + + case ActionType.CanGainExp: + { + bool.TryParse(param[0], out bool tempBool); + player.CanGainExp = tempBool; + } + break; + + case ActionType.ComposeMail: + { + mailInfo = new MailInfo(player.Info.Index, false) + { + Sender = param[1], + Message = param[0] + }; + } + break; + case ActionType.AddMailGold: + { + if (mailInfo == null) return; + + uint.TryParse(param[0], out uint tempUint); + + mailInfo.Gold += tempUint; + } + break; + + case ActionType.AddMailItem: + { + if (mailInfo == null) return; + if (mailInfo.Items.Count > 5) return; + + if (param.Count < 2 || !ushort.TryParse(param[1], out ushort count)) count = 1; + + var info = Envir.GetItemInfo(param[0]); + + if (info == null) + { + MessageQueue.Enqueue(string.Format("Failed to get ItemInfo: {0}, Page: {1}", param[0], Key)); + break; + } + + while (count > 0 && mailInfo.Items.Count < 5) + { + UserItem item = Envir.CreateFreshItem(info); + + if (item == null) + { + MessageQueue.Enqueue(string.Format("Failed to create UserItem: {0}, Page: {1}", param[0], Key)); + return; + } + + if (item.Info.StackSize > count) + { + item.Count = count; + count = 0; + } + else + { + count -= item.Info.StackSize; + item.Count = item.Info.StackSize; + } + + mailInfo.Items.Add(item); + } + } + break; + + case ActionType.SendMail: + { + if (mailInfo == null) return; + + mailInfo.Send(); + } + break; + + case ActionType.GroupGoto: + { + if (player.GroupMembers == null) return; + + for (int j = 0; j < player.GroupMembers.Count(); j++) + { + var action = new DelayedAction(DelayedType.NPC, Envir.Time, player.NPCObjectID, player.NPCScriptID, "[" + param[0] + "]"); + player.GroupMembers[j].ActionList.Add(action); + } + } + break; + + case ActionType.EnterMap: + { + if (!player.NPCData.TryGetValue("NPCMoveMap", out object _npcMoveMap) || !player.NPCData.TryGetValue("NPCMoveCoord", out object _npcMoveCoord)) return; + + player.Teleport((Map)_npcMoveMap, (Point)_npcMoveCoord, false); + + player.NPCData.Remove("NPCMoveMap"); + player.NPCData.Remove("NPCMoveCoord"); + } + break; + + case ActionType.MakeWeddingRing: + { + player.MakeWeddingRing(); + } + break; + + case ActionType.ForceDivorce: + { + player.NPCDivorce(); + } + break; + + case ActionType.LoadValue: + { + string val = param[0]; + string filePath = param[1]; + string header = param[2]; + string key = param[3]; + + InIReader reader = new InIReader(filePath); + string loadedString = reader.ReadString(header, key, ""); + + if (loadedString == "") break; + AddVariable(player, val, loadedString); + } + break; + + case ActionType.SaveValue: + { + string filePath = param[0]; + string header = param[1]; + string key = param[2]; + string val = param[3]; + + InIReader reader = new InIReader(filePath); + reader.Write(header, key, val); + } + break; + case ActionType.OpenBrowser: + { + player.Enqueue(new S.OpenBrowser { Url = param[0] }); + } + break; + case ActionType.GetRandomText: + { + string randomTextPath = Path.Combine(Settings.NPCPath, param[0]); + if (!File.Exists(randomTextPath)) + { + MessageQueue.Enqueue(string.Format("the randomTextFile:{0} does not exist.", randomTextPath)); + } + else + { + var lines = File.ReadAllLines(randomTextPath); + int index = Envir.Random.Next(0, lines.Length); + string randomText = lines[index]; + AddVariable(player, param[1], randomText); + } + } + break; + case ActionType.PlaySound: + { + if (!int.TryParse(param[0], out int soundID)) return; + player.Enqueue(new S.PlaySound { Sound = soundID }); + } + break; + + case ActionType.SetTimer: + { + if (!int.TryParse(param[1], out int seconds) || !byte.TryParse(param[2], out byte type)) return; + + bool.TryParse(param[3], out bool global); + + if (seconds < 0) seconds = 0; + + if (global) + { + var timerKey = "_-" + param[0]; + + Envir.Timers[timerKey] = new Timer(timerKey, seconds, type); + } + else + { + player.SetTimer(param[0], seconds, type); + } + } + break; + case ActionType.ExpireTimer: + { + var globalTimerKey = "_-" + param[0]; + + if (Envir.Timers.ContainsKey(globalTimerKey)) + { + Envir.Timers.Remove(globalTimerKey); + } + + player.ExpireTimer(param[0]); + } + break; + case ActionType.UnequipItem: + break; + case ActionType.RollDie: + { + bool.TryParse(param[1], out bool autoRoll); + + var result = Envir.Random.Next(1, 7); + + S.Roll p = new S.Roll { Type = 0, Page = param[0], AutoRoll = autoRoll, Result = result }; + + player.NPCData["NPCRollResult"] = result; + player.Enqueue(p); + } + break; + case ActionType.RollYut: + { + bool.TryParse(param[1], out bool autoRoll); + + var result = Envir.Random.Next(1, 7); + + S.Roll p = new S.Roll { Type = 1, Page = param[0], AutoRoll = autoRoll, Result = result }; + + player.NPCData["NPCRollResult"] = result; + player.Enqueue(p); + } + break; + case ActionType.Drop: + { + var path = param[0]; + var drops = new List(); + DropInfo.Load(drops, "NPC", path, 0, false); + + foreach (var drop in drops) + { + var reward = drop.AttemptDrop(player?.Stats[Stat.ItemDropRatePercent] ?? 0, player?.Stats[Stat.GoldDropRatePercent] ?? 0); + + if (reward != null) + { + if (reward.Gold > 0) + { + player.GainGold(reward.Gold); + } + + foreach (var dropItem in reward.Items) + { + UserItem item = Envir.CreateDropItem(dropItem); + + if (item == null) continue; + + if (player != null && player.Race == ObjectType.Player) + { + PlayerObject ob = (PlayerObject)player; + + if (ob.CheckGroupQuestItem(item)) + { + continue; + } + } + + if (drop.QuestRequired) continue; + + if (player.CanGainItem(item)) + { + player.GainItem(item); + } + } + } + } + } + break; + } + } + } + private void Act(IList acts, MonsterObject monster) + { + for (var i = 0; i < acts.Count; i++) + { + NPCActions act = acts[i]; + List param = act.Params.Select(t => FindVariable(monster, t)).ToList(); + + for (int j = 0; j < param.Count; j++) + { + var parts = param[j].Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); + + if (parts.Length == 0) continue; + + foreach (var part in parts) + { + param[j] = param[j].Replace(part, ReplaceValue(monster, part)); + } + } + + switch (act.Type) + { + case ActionType.GiveHP: + { + if (!int.TryParse(param[0], out int tempInt)) return; + monster.ChangeHP(tempInt); + } + break; + case ActionType.GlobalMessage: + { + if (!Enum.TryParse(param[1], true, out ChatType chatType)) return; + + var p = new S.Chat { Message = param[0], Type = chatType }; + Envir.Broadcast(p); + } + break; + + /* //mobs have no real "delayed" npc code so not added this yet + case ActionType.Goto: + DelayedAction action = new DelayedAction(DelayedType.NPC, -1, player.NPCID, "[" + param[0] + "]"); + player.ActionList.Add(action); + break; + */ + case ActionType.Break: + { + Page.BreakFromSegments = true; + } + break; + + case ActionType.Param1: + { + if (!int.TryParse(param[1], out int tempInt)) return; + + Param1 = param[0]; + Param1Instance = tempInt; + } + break; + + case ActionType.Param2: + { + if (!int.TryParse(param[0], out int tempInt)) return; + + Param2 = tempInt; + } + break; + + case ActionType.Param3: + { + if (!int.TryParse(param[0], out int tempInt)) return; + + Param3 = tempInt; + } + break; + + case ActionType.Mongen: + { + if (Param1 == null || Param2 == 0 || Param3 == 0) return; + if (!byte.TryParse(param[1], out byte tempByte)) return; + + var map = Envir.GetMapByNameAndInstance(Param1, Param1Instance); + if (map == null) return; + + var monInfo = Envir.GetMonsterInfo(param[0]); + if (monInfo == null) return; + + for (int j = 0; j < tempByte; j++) + { + MonsterObject mob = MonsterObject.GetMonster(monInfo); + if (mob == null) return; + mob.Direction = 0; + mob.ActionTime = Envir.Time + 1000; + mob.Spawn(map, new Point(Param2, Param3)); + } + } + break; + case ActionType.MonClear: + { + if (!int.TryParse(param[1], out int tempInt)) return; + + var map = Envir.GetMapByNameAndInstance(param[0], tempInt); + if (map == null) return; + + foreach (var cell in map.Cells) + { + if (cell == null || cell.Objects == null) continue; + + for (int j = 0; j < cell.Objects.Count(); j++) + { + MapObject ob = cell.Objects[j]; + + if (ob.Race != ObjectType.Monster) continue; + if (ob.Dead) continue; + ob.Die(); + } + } + } + break; + + case ActionType.Mov: + { + string value = param[0]; + AddVariable(monster, value, param[1]); + } + break; + + case ActionType.Calc: + { + int left; + int right; + + bool resultLeft = int.TryParse(param[0], out left); + bool resultRight = int.TryParse(param[2], out right); + + if (resultLeft && resultRight) + { + try + { + int result = Calculate(param[1], left, right); + AddVariable(monster, param[3].Replace("-", ""), result.ToString()); + } + catch (ArgumentException) + { + MessageQueue.Enqueue(string.Format("Incorrect operator: {0}, Page: {1}", param[1], Key)); + } + } + else + { + AddVariable(monster, param[3].Replace("-", ""), param[0] + param[2]); + } + } + break; + + case ActionType.GiveBuff: + { + if (!Enum.IsDefined(typeof(BuffType), param[0])) return; + + int.TryParse(param[1], out int tempInt); + bool.TryParse(param[2], out bool infinite); + bool.TryParse(param[3], out bool visible); + bool.TryParse(param[4], out bool stackable); + + monster.AddBuff((BuffType)(byte)Enum.Parse(typeof(BuffType), param[0], true), monster, Settings.Second * tempInt, new Stats(), visible); + } + break; + + case ActionType.RemoveBuff: + { + if (!Enum.IsDefined(typeof(BuffType), param[0])) return; + + BuffType bType = (BuffType)(byte)Enum.Parse(typeof(BuffType), param[0]); + + monster.RemoveBuff(bType); + } + break; + + case ActionType.LoadValue: + { + string val = param[0]; + string filePath = param[1]; + string header = param[2]; + string key = param[3]; + + var reader = new InIReader(filePath); + string loadedString = reader.ReadString(header, key, ""); + + if (loadedString == "") break; + AddVariable(monster, val, loadedString); + } + break; + + case ActionType.SaveValue: + { + string filePath = param[0]; + string header = param[1]; + string key = param[2]; + string val = param[3]; + + var reader = new InIReader(filePath); + reader.Write(header, key, val); + } + break; + } + } + } + + private void Success(PlayerObject player) + { + Act(ActList, player); + + var parseSay = new List(Say); + parseSay = ParseSay(player, parseSay); + + player.NPCSpeech.AddRange(parseSay); + } + + private void Failed(PlayerObject player) + { + Act(ElseActList, player); + + var parseElseSay = new List(ElseSay); + parseElseSay = ParseSay(player, parseElseSay); + + player.NPCSpeech.AddRange(parseElseSay); + } + + private void Success(MonsterObject Monster) + { + Act(ActList, Monster); + } + + private void Failed(MonsterObject Monster) + { + Act(ElseActList, Monster); + } + + private void Success() + { + Act(ActList); + } + + private void Failed() + { + Act(ElseActList); + } + + + + public static bool Compare(string op, T left, T right) where T : IComparable + { + switch (op) + { + case "<": return left.CompareTo(right) < 0; + case ">": return left.CompareTo(right) > 0; + case "<=": return left.CompareTo(right) <= 0; + case ">=": return left.CompareTo(right) >= 0; + case "==": return left.Equals(right); + case "!=": return !left.Equals(right); + default: throw new ArgumentException("Invalid comparison operator: {0}", op); + } + } + + public static int Calculate(string op, int left, int right) + { + switch (op) + { + case "+": return left + right; + case "-": return left - right; + case "*": return left * right; + case "/": return left / right; + default: throw new ArgumentException("Invalid sum operator: {0}", op); + } + } + } +} \ No newline at end of file diff --git a/Server/MirObjects/NPCObject.cs b/Server/MirObjects/NPCObject.cs new file mode 100644 index 0000000..d1ae425 --- /dev/null +++ b/Server/MirObjects/NPCObject.cs @@ -0,0 +1,464 @@ +using Server.MirDatabase; +using Server.MirEnvir; +using S = ServerPackets; + +namespace Server.MirObjects +{ + public sealed class NPCObject : MapObject + { + public override ObjectType Race + { + get { return ObjectType.Merchant; } + } + + public static NPCObject Get(uint objectID) + { + if (objectID == 0) return null; + + var obj = Envir.NPCs.SingleOrDefault(x => x.ObjectID == objectID); + + if (obj != null && obj is NPCObject) + { + return obj as NPCObject; + } + + return null; + } + + public int ScriptID { get; set; } + + public NPCInfo Info; + private const long TurnDelay = 10000, SpeechDelay = 5000; + public long TurnTime, UsedGoodsTime, VisTime, SpeechTime; + public bool Visible = true; + + public Dictionary VisibleLog = new Dictionary(); + + public List Quests = new List(); + public List Speech = new List(); + + public List UsedGoods = new List(); + public Dictionary> BuyBack = new Dictionary>(); + + public bool NeedSave; + + public NPCObject(NPCInfo info) + { + Info = info; + NameColour = Color.Lime; + + Direction = (MirDirection)(3 + Envir.Random.Next(3)); + TurnTime = Envir.Time + Envir.Random.Next(100); + + Envir.NPCs.Add(this); + + Spawned(); + LoadScript(); + } + + private void LoadScript() + { + var script = NPCScript.GetOrAdd(ObjectID, Info.FileName, NPCScriptType.Normal); + + ScriptID = script.ScriptID; + } + + public void ProcessGoods(bool clear = false) + { + if (!Settings.GoodsOn) return; + + var script = NPCScript.Get(ScriptID); + + List deleteList = new List(); + + foreach (var playerGoods in BuyBack) + { + List items = playerGoods.Value; + + for (int i = 0; i < items.Count; i++) + { + UserItem item = items[i]; + + if (DateTime.Compare(item.BuybackExpiryDate.AddMinutes(Settings.GoodsBuyBackTime), Envir.Now) <= 0 || clear) + { + deleteList.Add(BuyBack[playerGoods.Key][i]); + + if (script.UsedTypes.Count != 0 && !script.UsedTypes.Contains(item.Info.Type)) + { + continue; + } + + var multiCount = UsedGoods.Count(x => x.Info.Index == item.Info.Index); + + if (multiCount >= Settings.GoodsMaxStored) + { + UserItem nonAddedItem = UsedGoods.FirstOrDefault(e => e.IsAdded == false); + + if (nonAddedItem != null) + { + UsedGoods.Remove(nonAddedItem); + } + else + { + UsedGoods.RemoveAt(0); + } + } + + UsedGoods.Add(item); + NeedSave = true; + } + } + + for (int i = 0; i < deleteList.Count; i++) + { + BuyBack[playerGoods.Key].Remove(deleteList[i]); + } + } + } + + + #region Overrides + public override void Process(DelayedAction action) + { + throw new NotSupportedException(); + } + + public override bool IsAttackTarget(HumanObject attacker) + { + return false; + } + public override bool IsFriendlyTarget(HumanObject ally) + { + throw new NotSupportedException(); + } + public override bool IsFriendlyTarget(MonsterObject ally) + { + throw new NotSupportedException(); + } + public override bool IsAttackTarget(MonsterObject attacker) + { + return false; + } + + public override Buff AddBuff(BuffType type, MapObject owner, int duration, Stats stats, bool refreshStats = true, bool updateOnly = false, params int[] values) + { + throw new NotSupportedException(); + } + + public override int Attacked(HumanObject attacker, int damage, DefenceType type = DefenceType.ACAgility, bool damageWeapon = true) + { + throw new NotSupportedException(); + } + + public override int Attacked(MonsterObject attacker, int damage, DefenceType type = DefenceType.ACAgility) + { + throw new NotSupportedException(); + } + + public override int Struck(int damage, DefenceType type = DefenceType.ACAgility) + { + throw new NotSupportedException(); + } + + public override void SendHealth(HumanObject player) + { + throw new NotSupportedException(); + } + + public override void Die() + { + throw new NotSupportedException(); + } + + public override int Pushed(MapObject pusher, MirDirection dir, int distance) + { + throw new NotSupportedException(); + } + + public override ushort Level + { + get { throw new NotSupportedException(); } + set { throw new NotSupportedException(); } + } + + public override void ReceiveChat(string text, ChatType type) + { + throw new NotSupportedException(); + } + + public void Turn(MirDirection dir) + { + Direction = dir; + + Broadcast(new S.ObjectTurn { ObjectID = ObjectID, Direction = Direction, Location = CurrentLocation }); + } + + public override void Process() + { + base.Process(); + + if (Envir.Time > TurnTime) + { + TurnTime = Envir.Time + TurnDelay; + Turn((MirDirection)(3 + Envir.Random.Next(3))); + } + + if (Envir.Time > UsedGoodsTime) + { + UsedGoodsTime = Envir.Time + (Settings.Minute * Settings.GoodsBuyBackTime); + ProcessGoods(); + } + + if (Envir.Time > VisTime) + { + VisTime = Envir.Time + (Settings.Minute); + + if (Info.DayofWeek != "" && Info.DayofWeek != Envir.Now.DayOfWeek.ToString()) + { + if (Visible) Hide(); + } + else + { + int StartTime = ((Info.HourStart * 60) + Info.MinuteStart); + int FinishTime = ((Info.HourEnd * 60) + Info.MinuteEnd); + int CurrentTime = ((Envir.Now.Hour * 60) + Envir.Now.Minute); + + if (Info.TimeVisible) + { + if (StartTime > CurrentTime || FinishTime <= CurrentTime) + { + if (Visible) Hide(); + } + else if (StartTime <= CurrentTime && FinishTime > CurrentTime) + { + if (!Visible) Show(); + } + } + } + } + + if (Speech.Count > 0 && Envir.Time > SpeechTime) + { + var nearby = FindNearby(4); + + SpeechTime = Envir.Time + (SpeechDelay * (nearby ? Envir.Random.Next(1, 13) : 1)); + + if (nearby) + { + var maxWeight = Speech.Max(x => x.Weight); + + var speech = Speech.OrderBy(x => x.GetWeight(Envir.Random, maxWeight)).Last(); + + Broadcast(new S.ObjectChat { ObjectID = this.ObjectID, Text = $"{Info.Name.Split('_')[0]}:{speech.Message}", Type = ChatType.Normal }); + } + } + } + + public override void SetOperateTime() + { + long time = Envir.Time + 2000; + + if (TurnTime < time && TurnTime > Envir.Time) + time = TurnTime; + + if (OwnerTime < time && OwnerTime > Envir.Time) + time = OwnerTime; + + if (ExpireTime < time && ExpireTime > Envir.Time) + time = ExpireTime; + + if (PKPointTime < time && PKPointTime > Envir.Time) + time = PKPointTime; + + if (LastHitTime < time && LastHitTime > Envir.Time) + time = LastHitTime; + + if (EXPOwnerTime < time && EXPOwnerTime > Envir.Time) + time = EXPOwnerTime; + + if (BrownTime < time && BrownTime > Envir.Time) + time = BrownTime; + + for (int i = 0; i < ActionList.Count; i++) + { + if (ActionList[i].Time >= time && ActionList[i].Time > Envir.Time) continue; + time = ActionList[i].Time; + } + + for (int i = 0; i < PoisonList.Count; i++) + { + if (PoisonList[i].TickTime >= time && PoisonList[i].TickTime > Envir.Time) continue; + time = PoisonList[i].TickTime; + } + + for (int i = 0; i < Buffs.Count; i++) + { + if (Buffs[i].NextTime >= time && Buffs[i].NextTime > Envir.Time) continue; + time = Buffs[i].NextTime; + } + + if (OperateTime <= Envir.Time || time < OperateTime) + OperateTime = time; + } + + public void Hide() + { + CurrentMap.Broadcast(new S.ObjectRemove { ObjectID = ObjectID }, CurrentLocation); + Visible = false; + } + + public void Show() + { + Visible = true; + for (int i = CurrentMap.Players.Count - 1; i >= 0; i--) + { + PlayerObject player = CurrentMap.Players[i]; + + if (Functions.InRange(CurrentLocation, player.CurrentLocation, Globals.DataRange)) + { + CheckVisible(player, true); + if (player.CheckStacked()) + { + player.StackingTime = Envir.Time + 1000; + player.Stacking = true; + } + } + } + } + + public bool FindNearby(int distance) + { + for (int d = 0; d <= distance; d++) + { + for (int y = CurrentLocation.Y - d; y <= CurrentLocation.Y + d; y++) + { + if (y < 0) continue; + if (y >= CurrentMap.Height) break; + + for (int x = CurrentLocation.X - d; x <= CurrentLocation.X + d; x += Math.Abs(y - CurrentLocation.Y) == d ? 1 : d * 2) + { + if (x < 0) continue; + if (x >= CurrentMap.Width) break; + if (!CurrentMap.ValidPoint(x, y)) continue; + Cell cell = CurrentMap.GetCell(x, y); + if (cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + switch (ob.Race) + { + case ObjectType.Player: + if (ob == this || ob.Dead) continue; + return true; + default: + continue; + } + } + } + } + } + + return false; + } + + public override Packet GetInfo() + { + return new S.ObjectNPC + { + ObjectID = ObjectID, + Name = Name, + NameColour = NameColour, + Image = Info.Image, + Gender = Info.Gender, + Hair = Info.Hair, + Colour = Info.Colour, + Location = CurrentLocation, + Direction = Direction, + QuestIDs = (from q in Quests + select q.Index).ToList() + }; + } + + public override void ApplyPoison(Poison p, MapObject Caster = null, bool NoResist = false, bool ignoreDefence = true) + { + throw new NotSupportedException(); + } + + public override string Name + { + get { return Info.Name; } + set { throw new NotSupportedException(); } + } + + public override bool Blocking + { + get { return Visible; } + } + + + public void CheckVisible(PlayerObject Player, bool Force = false) + { + VisibleLog.TryGetValue(Player.Info.Index, out bool canSee); + + if (Info.FlagNeeded != 0 && !Player.Info.Flags[Info.FlagNeeded]) + { + if (canSee) CurrentMap.Broadcast(new S.ObjectRemove { ObjectID = ObjectID }, CurrentLocation, Player); + VisibleLog[Player.Info.Index] = false; + return; + } + + if (Info.MinLev != 0 && Player.Level < Info.MinLev || Info.MaxLev != 0 && Player.Level > Info.MaxLev) + { + if (canSee) CurrentMap.Broadcast(new S.ObjectRemove { ObjectID = ObjectID }, CurrentLocation, Player); + VisibleLog[Player.Info.Index] = false; + return; + } + + if (Info.ClassRequired != "" && Player.Class.ToString() != Info.ClassRequired) + { + if (canSee) CurrentMap.Broadcast(new S.ObjectRemove { ObjectID = ObjectID }, CurrentLocation, Player); + VisibleLog[Player.Info.Index] = false; + return; + } + + if (Visible && !canSee) CurrentMap.Broadcast(GetInfo(), CurrentLocation, Player); + else if (Force && Visible) CurrentMap.Broadcast(GetInfo(), CurrentLocation, Player); + + VisibleLog[Player.Info.Index] = true; + } + + public override int CurrentMapIndex { get; set; } + + public override Point CurrentLocation + { + get { return Info.Location; } + set { throw new NotSupportedException(); } + } + + public override MirDirection Direction { get; set; } + + public override int Health + { + get { throw new NotSupportedException(); } + } + + public override int MaxHealth + { + get { throw new NotSupportedException(); } + } + #endregion + + } + + public class NPCSpeech + { + public int Weight { get; set; } + public string Message { get; set; } + + public int GetWeight(RandomProvider rnd, int max) + { + return rnd.Next(Weight, max + 100); + } + } +} diff --git a/Server/MirObjects/Player/Reporting.cs b/Server/MirObjects/Player/Reporting.cs new file mode 100644 index 0000000..bcd6f5c --- /dev/null +++ b/Server/MirObjects/Player/Reporting.cs @@ -0,0 +1,237 @@ +using log4net; +using System.Runtime.CompilerServices; +using Server.MirDatabase; + +namespace Server.MirObjects +{ + public class Reporting + { + private static readonly ILog log = Logger.GetLogger(LogType.Player); + + protected static MessageQueue MessageQueue + { + get { return MessageQueue.Instance; } + } + + private readonly PlayerObject _player; + + public Reporting(PlayerObject player) + { + this._player = player; + } + + #region Move Actions + + public void MapChange(MapInfo oldMap, MapInfo newMap, [CallerMemberName] string source = "") + { + string message = $"Moved Map {oldMap.FileName} => {newMap.FileName}"; + + LogMessage(message, source); + } + + #endregion + + #region Item Actions + + public void ItemSplit(UserItem item, UserItem newItem, MirGridType grid, [CallerMemberName] string source = "") + { + string message = $"Item Split - {item.Info.Name} from x{item.Count + newItem.Count} to x{item.Count} in {grid} - Created new item ({newItem.UniqueID}) x {newItem.Count}"; + + LogMessage(message, source); + } + + public void ItemMerged(UserItem fromItem, UserItem toItem, int slotFrom, int slotTo, MirGridType gridFrom, MirGridType gridTo, [CallerMemberName] string source = "") + { + string message = $"Item Merged - {fromItem.Info.Name} with {toItem.Info.Name} from {slotFrom} ({gridFrom}) to {slotTo} ({gridTo}) ({toItem.UniqueID})"; + + LogMessage(message, source); + } + public void ItemCombined(UserItem fromItem, UserItem toItem, int slotFrom, int slotTo, MirGridType grid, [CallerMemberName] string source = "") + { + string message = $"Item Combined - {fromItem.Info.Name} with {toItem.Info.Name} from {slotFrom} to {slotTo} in {grid} ({toItem.UniqueID})"; + + LogMessage(message, source); + } + + public void ItemMoved(UserItem item, MirGridType from, MirGridType to, int slotFrom, int slotTo, string info = "", [CallerMemberName] string source = "") + { + string message = $"Item Moved - {(item != null ? item.Info.Name : "Empty")} from {from}:{slotFrom} to {to}:{slotTo} ({item?.UniqueID}) {info}"; + + LogMessage(message, source); + } + + public void ItemChanged(UserItem item, uint amount, int state, [CallerMemberName] string source = "") + { + string type = string.Empty; + + switch (state) + { + case 1: + type = "Lost"; + break; + case 2: + type = "Gained"; + break; + } + + string message = $"Item {type} - {item.Info.Name} x{amount} ({item.UniqueID})"; + + LogMessage(message, source); + } + + public void ItemChangedHero(UserItem item, uint amount, int state, [CallerMemberName] string source = "") + { + string type = string.Empty; + + switch (state) + { + case 1: + type = "Lost"; + break; + case 2: + type = "Gained"; + break; + } + + string message = $"Item {type} - {item.Info.Name} x{amount} ({item.UniqueID})"; + + LogHeroMessage(message, source); + } + + public void ItemGSBought(GameShopItem item, uint amount, uint CreditCost, uint GoldCost, [CallerMemberName] string source = "") + { + string message = $"Purchased {item.Info.FriendlyName} x{amount} for {CreditCost} Credits and {GoldCost} Gold."; + + LogMessage(message, source); + } + + public void ItemMailed(UserItem item, uint amount, int reason, [CallerMemberName] string source = "") + { + string msg; + switch (reason) + { + case 1: + msg = "Could not return item to bag after trade."; + break; + case 2: + msg = "Item rental expired."; + break; + case 3: + msg = "Could not return item to bag after rental."; + break; + default: + msg = "No reason provided."; + break; + } + + string message = $"Mailed {item.Info.FriendlyName} x{amount}. Reason : {msg}."; + + LogMessage(message, source); + } + + public void GoldChanged(uint amount, bool lost = true, string info = "", [CallerMemberName] string source = "") + { + string message = $"Gold{(lost ? "Lost" : "Gained")} - x{amount} {info}"; + + LogMessage(message, source); + } + + public void CreditChanged(uint amount, bool lost = true, string info = "", [CallerMemberName] string source = "") + { + string message = $"Credit{(lost ? "Lost" : "Gained")} - x{amount} {info}"; + + LogMessage(message, source); + } + + public void ItemError(MirGridType from, MirGridType to, int slotFrom, int slotTo, [CallerMemberName] string source = "") + { + string message = $"Item Moved Error - from {from}:{slotFrom} to {to}:{slotTo}"; + + LogMessage(message, source); + } + + #endregion + + #region Kill Actions + + public void KilledPlayer(PlayerObject obj, string info = "", [CallerMemberName] string source = "") + { + string message = $"Killed Player {obj.Name} {info}"; + + LogMessage(message, source); + } + + public void KilledMonster(MonsterObject obj, string info = "", [CallerMemberName] string source = "") + { + string message = $"Killed Monster {obj.Name} {info}"; + + LogMessage(message, source); + } + + #endregion + + #region Other Actions + + public void Levelled(int level) + { + string message = $"Levelled to {level}"; + + LogMessage(message, ""); + } + + public void Died(string map) + { + string message = $"Died - Map {map}"; + + LogMessage(message, ""); + } + + public void Connected(string ipAddress) + { + string message = $"Connected - {ipAddress}"; + + LogMessage(message, ""); + } + + public void Disconnected(string reason) + { + string message = $"Disconnected - {reason}"; + + LogMessage(message, ""); + } + + #endregion + + #region Private Methods + + private void LogMessage(string message, string source) + { + try + { + var logMessage = $"{_player.Name} - {source} : {message}"; + + log.Info(logMessage); + } + catch (Exception ex) + { + MessageQueue.Enqueue(ex); + } + } + + private void LogHeroMessage(string message, string source) + { + try + { + var logMessage = $"{_player.Name}[Hero] - {source} : {message}"; + + log.Info(logMessage); + } + catch (Exception ex) + { + MessageQueue.Enqueue(ex); + } + } + + #endregion + } +} diff --git a/Server/MirObjects/PlayerObject.cs b/Server/MirObjects/PlayerObject.cs new file mode 100644 index 0000000..019614b --- /dev/null +++ b/Server/MirObjects/PlayerObject.cs @@ -0,0 +1,9742 @@ +using C = ClientPackets; +using Server.MirDatabase; +using Server.MirEnvir; +using Server.MirNetwork; +using S = ServerPackets; +using System.Text.RegularExpressions; +using Timer = Server.MirEnvir.Timer; +using Server.MirObjects.Monsters; +using System.Threading; + +namespace Server.MirObjects +{ + public class PlayerObject : HumanObject + { + private long NextTradeTime; + private long NextGroupInviteTime; + + public string GMPassword = Settings.GMPassword; + public bool GMLogin, EnableGroupRecall, EnableGuildInvite, AllowMarriage, AllowLoverRecall, AllowMentor, HasMapShout, HasServerShout; //TODO - Remove + + public long LastRecallTime, LastTeleportTime, LastProbeTime; + public long MenteeEXP; + + public bool WarZone = false; + + protected AccountInfo account; + public virtual AccountInfo Account + { + get { return account; } + set { account = value; } + } + + public override bool CanMove + { + get + { + return base.CanMove; + } + } + public override bool CanWalk + { + get + { + return base.CanMove; + } + } + public override bool CanAttack + { + get + { + return base.CanAttack; + } + } + protected override bool CanCast + { + get + { + return base.CanCast; + } + } + + public bool NewMail = false; + + public override int PKPoints + { + get { return Info.PKPoints; } + set { Info.PKPoints = value; } + } + + public int BindMapIndex + { + get { return Info.BindMapIndex; } + set { Info.BindMapIndex = value; } + } + public Point BindLocation + { + get { return Info.BindLocation; } + set { Info.BindLocation = value; } + } + + public const long TurnDelay = 350, HarvestDelay = 350, MovementDelay = 2000; + public long ChatTime, ShoutTime, RestedTime, MovementTime; + + public byte ChatTick; + + protected int _restedCounter; + + public uint NPCObjectID; + public int NPCScriptID; + public NPCPage NPCPage; + public Dictionary NPCSuccess = new Dictionary(); + public bool NPCDelayed; + public List NPCSpeech = new List(); + public Dictionary NPCData = new Dictionary(); + + public bool UserMatch; + public string MatchName; + public ItemType MatchType; + public MarketPanelType MarketPanelType; + public short MinShapes, MaxShapes; + + public int PageSent; + public List Search = new List(); + + public bool CanCreateGuild = false; + + public GuildObject PendingGuildInvite = null; + public bool GuildNoticeChanged = true; //set to false first time client requests notice list, set to true each time someone in guild edits notice + public bool GuildMembersChanged = true;//same as above but for members + public bool GuildCanRequestItems = true; + public bool RequestedGuildBuffInfo = false; + + public bool CanCreateHero = false; + public bool AllowGroup + { + get { return Info.AllowGroup; } + set { Info.AllowGroup = value; } + } + + public bool AllowTrade + { + get { return Info.AllowTrade; } + set { Info.AllowTrade = value; } + } + + public bool AllowObserve + { + get { return Info.AllowObserve; } + set { Info.AllowObserve = value; } + } + + public PlayerObject MarriageProposal; + public PlayerObject DivorceProposal; + public PlayerObject MentorRequest; + + public PlayerObject GroupInvitation; + public PlayerObject TradeInvitation; + + public PlayerObject TradePartner = null; + public bool TradeLocked = false; + public uint TradeGoldAmount = 0; + + public PlayerObject ItemRentalPartner = null; + public UserItem ItemRentalDepositedItem = null; + public uint ItemRentalFeeAmount = 0; + public uint ItemRentalPeriodLength = 0; + public bool ItemRentalFeeLocked = false; + public bool ItemRentalItemLocked = false; + + private long LastRankUpdate = Envir.Time; + + public List CurrentQuests + { + get { return Info.CurrentQuests; } + } + + public List CompletedQuests + { + get { return Info.CompletedQuests; } + } + + public PlayerObject() { } + + public PlayerObject(CharacterInfo info, MirConnection connection) : base(info, connection) { } + protected override void Load(CharacterInfo info, MirConnection connection) + { + if (info.Player != null) + { + throw new InvalidOperationException("Player.Info not Null."); + } + + info.Player = this; + + Connection = connection; + Info = info; + Account = Connection.Account; + + Stats = new Stats(); + + Report = new Reporting(this); + + if (Account.AdminAccount) + { + IsGM = true; + MessageQueue.Enqueue(string.Format("{0} is now a GM", Name)); + } + + if (Level == 0) NewCharacter(); + + if (Info.GuildIndex != -1) + { + MyGuild = Envir.GetGuild(Info.GuildIndex); + } + + RefreshStats(); + + if (HP == 0) + { + SetHP(Stats[Stat.HP]); + SetMP(Stats[Stat.MP]); + + CurrentLocation = BindLocation; + CurrentMapIndex = BindMapIndex; + + if (Info.PKPoints >= 200) + { + Map temp = Envir.GetMapByNameAndInstance(Settings.PKTownMapName, 1); + Point tempLocation = new Point(Settings.PKTownPositionX, Settings.PKTownPositionY); + + if (temp != null && temp.ValidPoint(tempLocation)) + { + CurrentMapIndex = temp.Info.Index; + CurrentLocation = tempLocation; + } + } + } + + Info.LastLoginDate = Envir.Now; + } + + public void StopGame(byte reason) + { + if (Node == null) return; + + for (int i = Pets.Count - 1; i >= 0; i--) + { + MonsterObject pet = Pets[i]; + + pet.Master = null; + + if (!pet.Dead) + { + switch (Settings.PetSave) + { + case true when Settings.PetSave is true: + + switch (Class) + { + default: + + Info.Pets.Add(new PetInfo(pet)); + + break; + } + + break; + case false when Settings.PetSave is false: + + switch (Class) + { + case (MirClass.Wizard): + + if (pet.Name == Settings.CloneName) + { + Info.Pets.Add(new PetInfo(pet)); + } + else + { + Info.Pets.Add(new PetInfo(pet) + { + TameTime = pet.TameTime - Envir.Time + }); + } + + break; + } + + break; + } + + Envir.MonsterCount--; + pet.CurrentMap.MonsterCount--; + + pet.CurrentMap.RemoveObject(pet); + pet.Despawn(); + + Pets.RemoveAt(i); + } + } + + for (int i = 0; i < Info.Magics.Count; i++) + { + var magic = Info.Magics[i]; + + if (Envir.Time < (magic.CastTime + magic.GetDelay())) + { + magic.CastTime -= Envir.Time; + } + else + { + magic.CastTime = int.MinValue; + } + } + + for (int i = Buffs.Count - 1; i >= 0; i--) + { + var buff = Buffs[i]; + buff.Caster = null; + buff.ObjectID = 0; + + if (buff.Properties.HasFlag(BuffProperty.RemoveOnExit)) + { + Buffs.RemoveAt(i); + } + } + + for (int i = 0; i < PoisonList.Count; i++) + { + var poison = PoisonList[i]; + poison.Owner = null; + } + + if (MyGuild != null) + { + MyGuild.PlayerLogged(this, false); + } + + Envir.Players.Remove(this); + CurrentMap.RemoveObject(this); + + Despawn(); + LeaveGroup(); + TradeCancel(); + RefineCancel(); + LogoutRelationship(); + + string logReason = LogOutReason(reason); + + MessageQueue.Enqueue(logReason); + + Info.LastIP = Connection.IPAddress; + Info.LastLogoutDate = Envir.Now; + + Report.Disconnected(logReason); + Connection.WorldMapSetupSent = false; + + if (!IsGM) + { + Envir.OnlineRankingCount[0]--; + Envir.OnlineRankingCount[(int)Class + 1]--; + } + + CleanUp(); + } + private string LogOutReason(byte reason) + { + switch (reason) + { + //0-10 are 'senddisconnect to client' + case 0: + return string.Format("{0} Has logged out. Reason: Server closed", Name); + case 1: + return string.Format("{0} Has logged out. Reason: Double login", Name); + case 2: + return string.Format("{0} Has logged out. Reason: Chat message too long", Name); + case 3: + return string.Format("{0} Has logged out. Reason: Server crashed", Name); + case 4: + return string.Format("{0} Has logged out. Reason: Kicked by admin", Name); + case 5: + return string.Format("{0} Has logged out. Reason: Maximum connections reached", Name); + case 6: + return string.Format("{0} Has logged out. Reason: Account has been Banned!", Name); + case 10: + return string.Format("{0} Has logged out. Reason: Wrong client version", Name); + case 20: + return string.Format("{0} Has logged out. Reason: User gone missing / disconnected", Name); + case 21: + return string.Format("{0} Has logged out. Reason: Connection timed out", Name); + case 22: + return string.Format("{0} Has logged out. Reason: User closed game", Name); + case 23: + return string.Format("{0} Has logged out. Reason: User returned to select char", Name); + case 24: + return string.Format("{0} Has logged out. Reason: Began observing", Name); + default: + return string.Format("{0} Has logged out. Reason: Unknown", Name); + } + } + protected override void NewCharacter() + { + if (Envir.StartPoints.Count == 0) return; + + SetBind(); + + base.NewCharacter(); + } + public override void Process() + { + if (Connection == null || Node == null || Info == null) return; + + if (GroupInvitation != null && GroupInvitation.Node == null) + GroupInvitation = null; + + base.Process(); + + if (Settings.RestedPeriod > 0 && Envir.Time > RestedTime) + { + _restedCounter = InSafeZone ? _restedCounter + 1 : _restedCounter; + + if (_restedCounter > 0) + { + int count = _restedCounter / (Settings.RestedPeriod * 60); + + GiveRestedBonus(count); + } + + RestedTime = Envir.Time + Settings.Second; + } + + if (NewMail) + { + ReceiveChat(GameLanguage.NewMail, ChatType.System); + + GetMail(); + } + + if (Account.HasExpandedStorage && Envir.Now > Account.ExpandedStorageExpiryDate) + { + Account.HasExpandedStorage = false; + ReceiveChat("Expanded storage has expired.", ChatType.System); + Enqueue(new S.ResizeStorage { Size = Account.Storage.Length, HasExpandedStorage = Account.HasExpandedStorage, ExpiryTime = Account.ExpandedStorageExpiryDate }); + } + } + public override void Process(DelayedAction action) + { + if (action.FlaggedToRemove) + return; + + switch (action.Type) + { + case DelayedType.Magic: + CompleteMagic(action.Params); + break; + case DelayedType.Damage: + CompleteAttack(action.Params); + break; + case DelayedType.MapMovement: + CompleteMapMovement(action.Params); + break; + case DelayedType.NPC: + CompleteNPC(action.Params); + break; + case DelayedType.Poison: + CompletePoison(action.Params); + break; + case DelayedType.DamageIndicator: + CompleteDamageIndicator(action.Params); + break; + case DelayedType.Quest: + CompleteQuest(action.Params); + break; + case DelayedType.SpellEffect: + CompleteSpellEffect(action.Params); + break; + } + } + protected override void Moved() + { + base.Moved(); + if (TradePartner != null) + TradeCancel(); + } + public override void Die() + { + if (SpecialMode.HasFlag(SpecialItemMode.Revival) && Envir.Time > LastRevivalTime) + { + LastRevivalTime = Envir.Time + 300000; + + for (var i = (int)EquipmentSlot.RingL; i <= (int)EquipmentSlot.RingR; i++) + { + var item = Info.Equipment[i]; + + if (item == null) continue; + if (!(item.Info.Unique.HasFlag(SpecialItemMode.Revival)) || item.CurrentDura < 1000) continue; + SetHP(Stats[Stat.HP]); + item.CurrentDura = (ushort)(item.CurrentDura - 1000); + Enqueue(new S.DuraChanged { UniqueID = item.UniqueID, CurrentDura = item.CurrentDura }); + RefreshStats(); + ReceiveChat("You have been given a second chance at life", ChatType.System); + return; + } + } + + if (LastHitter != null && LastHitter.Race == ObjectType.Player) + { + PlayerObject hitter = (PlayerObject)LastHitter; + + if (AtWar(hitter) || WarZone) + { + hitter.ReceiveChat(string.Format("You've been protected by the law"), ChatType.System); + } + else if (Envir.Time > BrownTime && PKPoints < 200) + { + UserItem weapon = hitter.Info.Equipment[(byte)EquipmentSlot.Weapon]; + + hitter.PKPoints = Math.Min(int.MaxValue, LastHitter.PKPoints + 100); + hitter.ReceiveChat(string.Format("You have murdered {0}", Name), ChatType.System); + ReceiveChat(string.Format("You have been murdered by {0}", LastHitter.Name), ChatType.System); + + if (weapon != null && weapon.AddedStats[Stat.Luck] > (Settings.MaxLuck * -1) && Envir.Random.Next(4) == 0) + { + weapon.AddedStats[Stat.Luck]--; + hitter.ReceiveChat("Your weapon has been cursed.", ChatType.System); + hitter.Enqueue(new S.RefreshItem { Item = weapon }); + } + } + } + + for (int i = Pets.Count - 1; i >= 0; i--) + { + if (Pets[i].Dead) continue; + Pets[i].Die(); + } + + RemoveBuff(BuffType.MagicShield); + + if (PKPoints > 200) + RedDeathDrop(LastHitter); + else if (!InSafeZone) + DeathDrop(LastHitter); + + HP = 0; + Dead = true; + + LogTime = Envir.Time; + BrownTime = Envir.Time; + + Enqueue(new S.Death { Direction = Direction, Location = CurrentLocation }); + Broadcast(new S.ObjectDied { ObjectID = ObjectID, Direction = Direction, Location = CurrentLocation }); + + for (int i = 0; i < Buffs.Count; i++) + { + Buff buff = Buffs[i]; + + if (!buff.Properties.HasFlag(BuffProperty.RemoveOnDeath)) continue; + + RemoveBuff(buff.Type); + } + + PoisonList.Clear(); + + CallDefaultNPC(DefaultNPCType.Die); + + Report.Died(CurrentMap.Info.FileName); + } + private void RedDeathDrop(MapObject killer) + { + if (killer == null || killer.Race != ObjectType.Player) + { + for (var i = 0; i < Info.Equipment.Length; i++) + { + var item = Info.Equipment[i]; + + if (item == null) + continue; + + if (item.Info.Bind.HasFlag(BindMode.DontDeathdrop)) + continue; + + // TODO: Check this. + if ((item.WeddingRing != -1) && (Info.Equipment[(int)EquipmentSlot.RingL].UniqueID == item.UniqueID)) + continue; + + if (item.SealedInfo != null && item.SealedInfo.ExpiryDate > Envir.Now) + continue; + + if (item.Info.Bind.HasFlag(BindMode.BreakOnDeath)) + { + Info.Equipment[i] = null; + Enqueue(new S.DeleteItem { UniqueID = item.UniqueID, Count = item.Count }); + ReceiveChat($"Your {item.FriendlyName} shattered upon death.", ChatType.System2); + Report.ItemChanged(item, item.Count, 1, "RedDeathDrop"); + } + + if (item.Count > 1) + { + var percent = Envir.RandomomRange(10, 4); + var count = (ushort)Math.Ceiling(item.Count / 10F * percent); + + if (count > item.Count) + throw new ArgumentOutOfRangeException(); + + var temp2 = Envir.CreateFreshItem(item.Info); + temp2.Count = count; + + if (!DropItem(temp2, Settings.DropRange, true)) + continue; + + if (count == item.Count) + Info.Equipment[i] = null; + + Enqueue(new S.DeleteItem { UniqueID = item.UniqueID, Count = count }); + item.Count -= count; + + Report.ItemChanged(item, count, 1, "RedDeathDrop"); + } + else if (Envir.Random.Next(10) == 0) + { + if (!DropItem(item, Settings.DropRange, true)) + continue; + + if (item.Info.GlobalDropNotify) + foreach (var player in Envir.Players) + { + player.ReceiveChat($"{Name} has dropped {item.FriendlyName}.", ChatType.System2); + } + + Info.Equipment[i] = null; + Enqueue(new S.DeleteItem { UniqueID = item.UniqueID, Count = item.Count }); + + Report.ItemChanged(item, item.Count, 1, "RedDeathDrop"); + } + } + + } + + for (var i = 0; i < Info.Inventory.Length; i++) + { + var item = Info.Inventory[i]; + + if (item == null) + continue; + + if (item.Info.Bind.HasFlag(BindMode.DontDeathdrop)) + continue; + + if (item.WeddingRing != -1) + continue; + + if (item.SealedInfo != null && item.SealedInfo.ExpiryDate > Envir.Now) + continue; + + if (!DropItem(item, Settings.DropRange, true)) + continue; + + if (item.Info.GlobalDropNotify) + foreach (var player in Envir.Players) + { + player.ReceiveChat($"{Name} has dropped {item.FriendlyName}.", ChatType.System2); + } + + Info.Inventory[i] = null; + Enqueue(new S.DeleteItem { UniqueID = item.UniqueID, Count = item.Count }); + + Report.ItemChanged(item, item.Count, 1, "RedDeathDrop"); + } + + RefreshStats(); + } + public override void WinExp(uint amount, uint targetLevel = 0) + { + int expPoint; + uint originalAmount = amount; + + expPoint = ReduceExp(amount, targetLevel); + expPoint = (int)(expPoint * Settings.ExpRate); + + //party + float[] partyExpRate = { 1.0F, 1.3F, 1.4F, 1.5F, 1.6F, 1.7F, 1.8F, 1.9F, 2F, 2.1F, 2.2F }; + + if (GroupMembers != null) + { + int sumLevel = 0; + int nearCount = 0; + for (int i = 0; i < GroupMembers.Count; i++) + { + PlayerObject player = GroupMembers[i]; + + if (Functions.InRange(player.CurrentLocation, CurrentLocation, Globals.DataRange)) + { + sumLevel += player.Level; + nearCount++; + } + } + + if (nearCount > partyExpRate.Length) nearCount = partyExpRate.Length; + + for (int i = 0; i < GroupMembers.Count; i++) + { + PlayerObject player = GroupMembers[i]; + if (player.CurrentMap == CurrentMap && + Functions.InRange(player.CurrentLocation, CurrentLocation, Globals.DataRange) && !player.Dead) + { + player.GainExp((uint)((float)expPoint * partyExpRate[nearCount - 1] * (float)player.Level / (float)sumLevel)); + } + } + } + else + GainExp((uint)expPoint); + } + public override void GainExp(uint amount) + { + if (!CanGainExp) return; + + if (amount == 0) return; + + if (Info.Married != 0) + { + if (HasBuff(BuffType.Lover, out Buff buff)) + { + CharacterInfo lover = Envir.GetCharacterInfo(Info.Married); + PlayerObject loverPlayer = Envir.GetPlayer(lover.Name); + if (loverPlayer != null && loverPlayer.CurrentMap == CurrentMap && Functions.InRange(loverPlayer.CurrentLocation, CurrentLocation, Globals.DataRange) && !loverPlayer.Dead) + { + amount += (uint)Math.Max(0, (amount * Stats[Stat.LoverExpRatePercent]) / 100); + } + } + } + + if (Stats[Stat.ExpRatePercent] > 0) + { + amount += (uint)Math.Max(0, (amount * Stats[Stat.ExpRatePercent]) / 100); + } + + Experience += amount; + + Enqueue(new S.GainExperience { Amount = amount }); + + for (int i = 0; i < Pets.Count; i++) + { + MonsterObject monster = Pets[i]; + if (monster.CurrentMap == CurrentMap && Functions.InRange(monster.CurrentLocation, CurrentLocation, Globals.DataRange) && !monster.Dead) + monster.PetExp(amount); + } + + if (MyGuild != null && MyGuild.Name != Settings.PalaceGuild) + MyGuild.GainExp(amount); + + if (Experience < MaxExperience) return; + if (Level >= ushort.MaxValue) return; + + //Calculate increased levels + var experience = Experience; + + while (experience >= MaxExperience) + { + Level++; + experience -= MaxExperience; + + RefreshLevelStats(); + + if (Level >= ushort.MaxValue) break; + } + + Experience = experience; + + LevelUp(); + + if (IsGM) return; + if ((LastRankUpdate + 3600 * 1000) > Envir.Time) + { + LastRankUpdate = Envir.Time; + Envir.CheckRankUpdate(Info); + } + } + public override void LevelUp() + { + CallDefaultNPC(DefaultNPCType.LevelUp); + + base.LevelUp(); + + Enqueue(new S.LevelChanged { Level = Level, Experience = Experience, MaxExperience = MaxExperience }); + + for (int i = CurrentMap.NPCs.Count - 1; i >= 0; i--) + { + if (Functions.InRange(CurrentMap.NPCs[i].CurrentLocation, CurrentLocation, Globals.DataRange)) + CurrentMap.NPCs[i].CheckVisible(this); + } + Report.Levelled(Level); + + if (IsGM) return; + Envir.CheckRankUpdate(Info); + } + private void AddQuestItem(UserItem item) + { + if (item.Info.StackSize > 1) //Stackable + { + for (int i = 0; i < Info.QuestInventory.Length; i++) + { + UserItem temp = Info.QuestInventory[i]; + if (temp == null || item.Info != temp.Info || temp.Count >= temp.Info.StackSize) continue; + + if (item.Count + temp.Count <= temp.Info.StackSize) + { + temp.Count += item.Count; + return; + } + item.Count -= (ushort)(temp.Info.StackSize - temp.Count); + temp.Count = temp.Info.StackSize; + } + } + + for (int i = 0; i < Info.QuestInventory.Length; i++) + { + if (Info.QuestInventory[i] != null) continue; + Info.QuestInventory[i] = item; + + return; + } + } + public void CheckQuestInfo(QuestInfo info) + { + if (Connection.SentQuestInfo.Contains(info)) return; + Enqueue(new S.NewQuestInfo { Info = info.CreateClientQuestInfo() }); + Connection.SentQuestInfo.Add(info); + } + public void CheckMapInfo(MapInfo mapInfo) + { + if (!Connection.WorldMapSetupSent) + { + Enqueue(new S.WorldMapSetupInfo { Setup = Settings.WorldMapSetup, TeleportToNPCCost = Settings.TeleportToNPCCost }); + Connection.WorldMapSetupSent = true; + } + + if (Connection.SentMapInfo.Contains(mapInfo)) return; + + var map = Envir.GetMap(mapInfo.Index); + if (map == null) return; + + var info = new ClientMapInfo() + { + Width = map.Width, + Height = map.Height, + BigMap = mapInfo.BigMap, + Title = mapInfo.Title + }; + + foreach (MovementInfo mInfo in mapInfo.Movements.Where(x => x.ShowOnBigMap)) + { + Map destMap = Envir.GetMap(mInfo.MapIndex); + if (destMap is null) + continue; + var cmInfo = new ClientMovementInfo() + { + Destination = mInfo.MapIndex, + Location = mInfo.Source, + Icon = mInfo.Icon + }; + + cmInfo.Title = destMap.Info.Title; + + info.Movements.Add(cmInfo); + } + + foreach (NPCObject npc in Envir.NPCs.Where(x => x.CurrentMap == map && x.Info.ShowOnBigMap).OrderBy(x => x.Info.BigMapIcon)) + { + info.NPCs.Add(new ClientNPCInfo() + { + ObjectID = npc.ObjectID, + Name = npc.Info.Name, + Location = npc.Info.Location, + Icon = npc.Info.BigMapIcon, + CanTeleportTo = npc.Info.CanTeleportTo + }); + } + + Enqueue(new S.NewMapInfo { MapIndex = mapInfo.Index, Info = info }); + Connection.SentMapInfo.Add(mapInfo); + } + private void SetBind() + { + SafeZoneInfo szi = Envir.StartPoints[Envir.Random.Next(Envir.StartPoints.Count)]; + + BindMapIndex = szi.Info.Index; + BindLocation = szi.Location; + } + protected override void SetBindSafeZone(SafeZoneInfo szi) + { + BindLocation = szi.Location; + BindMapIndex = CurrentMapIndex; + } + public void StartGame() + { + Map temp = Envir.GetMap(CurrentMapIndex); + + if (temp != null && temp.Info.NoReconnect) + { + Map temp1 = Envir.GetMapByNameAndInstance(temp.Info.NoReconnectMap); + if (temp1 != null) + { + temp = temp1; + CurrentLocation = GetRandomPoint(40, 0, temp); + } + } + + if (temp == null || !temp.ValidPoint(CurrentLocation)) + { + temp = Envir.GetMap(BindMapIndex); + + if (temp == null || !temp.ValidPoint(BindLocation)) + { + SetBind(); + temp = Envir.GetMap(BindMapIndex); + + if (temp == null || !temp.ValidPoint(BindLocation)) + { + StartGameFailed(); + return; + } + } + CurrentMapIndex = BindMapIndex; + CurrentLocation = BindLocation; + } + temp.AddObject(this); + CurrentMap = temp; + Envir.Players.Add(this); + + StartGameSuccess(); + + //Call Login NPC + CallDefaultNPC(DefaultNPCType.Login); + + //Call Daily NPC + if (Info.NewDay) + { + CallDefaultNPC(DefaultNPCType.Daily); + } + } + private void StartGameSuccess() + { + Connection.Stage = GameStage.Game; + + Enqueue(new S.StartGame { Result = 4, Resolution = Settings.AllowedResolution }); + ReceiveChat(string.Format(GameLanguage.Welcome, GameLanguage.GameName), ChatType.Hint); + + if (Settings.TestServer) + { + ReceiveChat("Game is currently in test mode.", ChatType.Hint); + Chat("@GAMEMASTER"); + } + + for (int i = 0; i < Info.Magics.Count; i++) + { + var magic = Info.Magics[i]; + magic.CastTime += Envir.Time; + + if (magic.CastTime + magic.GetDelay() < Envir.Time) + { + magic.CastTime = int.MinValue; + } + } + + if (Info.GuildIndex != -1) + { + if (MyGuild == null) + { + Info.GuildIndex = -1; + ReceiveChat("You have been removed from the guild.", ChatType.System); + } + else + { + MyGuildRank = MyGuild.FindRank(Info.Name); + if (MyGuildRank == null) + { + MyGuild = null; + Info.GuildIndex = -1; + ReceiveChat("You have been removed from the guild.", ChatType.System); + } + } + } + + /*if (!string.IsNullOrWhiteSpace(Settings.Notice.Message) && Settings.Notice.LastUpdate > Info.LastLogoutDate) + { + Enqueue(new S.UpdateNotice { Notice = Settings.Notice }); + }*/ + + Spawned(); + + SetLevelEffects(); + + GetItemInfo(Connection); + GetMapInfo(Connection); + GetUserInfo(Connection); + GetQuestInfo(); + + GetCompletedQuests(); + + GetMail(); + GetFriends(); + GetRelationship(); + + GetGameShop(); + + for (int i = 0; i < CurrentQuests.Count; i++) + { + var quest = CurrentQuests[i]; + quest.Init(this); + SendUpdateQuest(quest, QuestState.Add); + } + + SendBaseStats(); + GetObjectsPassive(); + Enqueue(new S.TimeOfDay { Lights = Envir.Lights }); + Enqueue(new S.ChangeAMode { Mode = AMode }); + Enqueue(new S.ChangePMode { Mode = PMode }); + Enqueue(new S.SwitchGroup { AllowGroup = AllowGroup }); + + Enqueue(new S.DefaultNPC { ObjectID = Envir.DefaultNPC.LoadedObjectID }); + + Enqueue(new S.GuildBuffList() { GuildBuffs = Settings.Guild_BuffList }); + RequestedGuildBuffInfo = true; + + if (Info.Thrusting) Enqueue(new S.SpellToggle { ObjectID = ObjectID, Spell = Spell.Thrusting, CanUse = true }); + if (Info.HalfMoon) Enqueue(new S.SpellToggle { ObjectID = ObjectID, Spell = Spell.HalfMoon, CanUse = true }); + + for (int i = 0; i < Info.Pets.Count; i++) + { + MonsterObject monster; + + PetInfo info = Info.Pets[i]; + + var monsterInfo = Envir.GetMonsterInfo(info.MonsterIndex); + if (monsterInfo == null) continue; + + monster = MonsterObject.GetMonster(monsterInfo); + if (monster == null) continue; + + monster.PetLevel = info.Level; + monster.MaxPetLevel = info.MaxPetLevel; + monster.PetExperience = info.Experience; + monster.Master = this; + + switch (Settings.PetSave) + { + case true when Settings.PetSave is true: + + if (monster.Info.Name == Settings.CloneName) + { + monster.ActionTime = Envir.Time + 1000; + monster.RefreshNameColour(false); + } + + break; + case false when Settings.PetSave is false: + + switch (Class) + { + case (MirClass.Wizard): + + if (monster.Info.Name == Settings.CloneName) + { + monster.ActionTime = Envir.Time + 1000; + monster.RefreshNameColour(false); + } + else + { + monster.TameTime = Envir.Time + info.TameTime; + } + + break; + } + + break; + } + + // [grimchamp] leave refresh here incase future code sets levels or stats in above switch + monster.RefreshAll(); + + Pets.Add(monster); + + if (!monster.Spawn(CurrentMap, Back)) + { + monster.Spawn(CurrentMap, CurrentLocation); + } + + monster.SetHP(info.HP); + } + + Info.Pets.Clear(); + + for (int i = 0; i < Buffs.Count; i++) + { + var buff = Buffs[i]; + buff.LastTime = Envir.Time; + buff.ObjectID = ObjectID; + + AddBuff(buff.Type, null, (int)buff.ExpireTime, buff.Stats, true, true, buff.Values); + } + + for (int i = 0; i < PoisonList.Count; i++) + { + var poison = PoisonList[i]; + poison.TickTime = Envir.Time; + } + + if (MyGuild != null) + { + MyGuild.PlayerLogged(this, true); + if (MyGuild.BuffList.Count > 0) + { + Enqueue(new S.GuildBuffList() { ActiveBuffs = MyGuild.BuffList }); + } + } + + if (InSafeZone && Info.LastLogoutDate > DateTime.MinValue) + { + double totalMinutes = (Envir.Now - Info.LastLogoutDate).TotalMinutes; + + _restedCounter = (int)(totalMinutes * 60); + } + + if (Info.Mail.Count > Settings.MailCapacity) + { + ReceiveChat("Your mailbox is overflowing.", ChatType.System); + } + + Report.Connected(Connection.IPAddress); + + MessageQueue.Enqueue(string.Format("{0} has connected.", Info.Name)); + + if (IsGM) + { + UpdateGMBuff(); + } + else + { + LastRankUpdate = Envir.Time; + Envir.CheckRankUpdate(Info); + Envir.OnlineRankingCount[0]++; + Envir.OnlineRankingCount[(int)Class + 1]++; + } + } + private void StartGameFailed() + { + Enqueue(new S.StartGame { Result = 3 }); + CleanUp(); + } + public void GiveRestedBonus(int count) + { + if (count > 0) + { + long existingTime = 0; + + if (HasBuff(BuffType.Rested, out Buff rested)) + { + existingTime = rested.ExpireTime; + } + + int duration = (int)Math.Min(int.MaxValue, ((Settings.RestedBuffLength * Settings.Minute) * count) + existingTime); + int maxDuration = (Settings.RestedBuffLength * Settings.Minute) * Settings.RestedMaxBonus; + + if (duration > maxDuration) duration = maxDuration; + + AddBuff(BuffType.Rested, this, duration, new Stats { [Stat.ExpRatePercent] = Settings.RestedExpBonus }); + + _restedCounter = 0; + } + } + public override void Revive(int hp, bool effect) + { + if (!Dead) return; + + base.Revive(hp, effect); + + GetObjects(); + GroupMemberMapNameChanged(); + GetPlayerLocation(); + } + public void TownRevive() + { + if (!Dead) return; + + Map temp = Envir.GetMap(BindMapIndex); + Point bindLocation = BindLocation; + + if (Info.PKPoints >= 200) + { + temp = Envir.GetMapByNameAndInstance(Settings.PKTownMapName, 1); + bindLocation = new Point(Settings.PKTownPositionX, Settings.PKTownPositionY); + + if (temp == null) + { + temp = Envir.GetMap(BindMapIndex); + bindLocation = BindLocation; + } + } + + if (temp == null || !temp.ValidPoint(bindLocation)) return; + + Dead = false; + SetHP(Stats[Stat.HP]); + SetMP(Stats[Stat.MP]); + RefreshStats(); + + CurrentMap.RemoveObject(this); + Broadcast(new S.ObjectRemove { ObjectID = ObjectID }); + + CurrentMap = temp; + CurrentLocation = bindLocation; + + CurrentMap.AddObject(this); + + Enqueue(new S.MapChanged + { + MapIndex = CurrentMap.Info.Index, + FileName = CurrentMap.Info.FileName, + Title = CurrentMap.Info.Title, + MiniMap = CurrentMap.Info.MiniMap, + BigMap = CurrentMap.Info.BigMap, + Lights = CurrentMap.Info.Light, + Location = CurrentLocation, + Direction = Direction, + MapDarkLight = CurrentMap.Info.MapDarkLight, + Music = CurrentMap.Info.Music + }); + + GetObjects(); + Enqueue(new S.Revived()); + Broadcast(new S.ObjectRevived { ObjectID = ObjectID, Effect = true }); + + InSafeZone = true; + GroupMemberMapNameChanged(); + GetPlayerLocation(); + } + public override bool Teleport(Map temp, Point location, bool effects = true, byte effectnumber = 0) + { + Map oldMap = CurrentMap; + Point oldLocation = CurrentLocation; + bool mapChanged = temp != oldMap; + + if (!base.Teleport(temp, location, effects)) return false; + + //Cancel actions + if (TradePartner != null) + TradeCancel(); + + GetObjectsPassive(); + + if (mapChanged) + { + CallDefaultNPC(DefaultNPCType.MapEnter, CurrentMap.Info.FileName); + + if (Info.Married != 0) + { + CharacterInfo Lover = Envir.GetCharacterInfo(Info.Married); + PlayerObject player = Envir.GetPlayer(Lover.Name); + + if (player != null) player.GetRelationship(false); + } + GroupMemberMapNameChanged(); + } + GetPlayerLocation(); + + Report?.MapChange(oldMap.Info, CurrentMap.Info); + + return true; + } + + static readonly ServerPacketIds[] BroadcastObservePackets = new ServerPacketIds[] + { + ServerPacketIds.ObjectTurn, + ServerPacketIds.ObjectWalk, + ServerPacketIds.ObjectAttack, + ServerPacketIds.ObjectRangeAttack, + ServerPacketIds.ObjectMagic, + ServerPacketIds.ObjectHarvest + }; + + public override void Broadcast(Packet p) + { + if (p == null || CurrentMap == null) return; + + base.Broadcast(p); + + if (Array.Exists(BroadcastObservePackets, x => x == (ServerPacketIds)p.Index)) + { + foreach (MirConnection c in Connection.Observers) + c.Enqueue(p); + } + } + + public void AddObserver(MirConnection observer) + { + if (observer == Connection) return; + + Connection.AddObserver(observer); + GetItemInfo(observer); + GetMapInfo(observer); + GetUserInfo(observer); + GetObjectsPassive(observer); + if (observer.Player != null) + observer.Player.StopGame(24); + } + protected virtual void GetItemInfo(MirConnection c) + { + UserItem item; + for (int i = 0; i < Info.Inventory.Length; i++) + { + item = Info.Inventory[i]; + if (item == null) continue; + + c.CheckItem(item); + } + + for (int i = 0; i < Info.Equipment.Length; i++) + { + item = Info.Equipment[i]; + + if (item == null) continue; + + c.CheckItem(item); + } + + for (int i = 0; i < Info.QuestInventory.Length; i++) + { + item = Info.QuestInventory[i]; + + if (item == null) continue; + c.CheckItem(item); + } + } + private void GetUserInfo(MirConnection c) + { + string guildname = MyGuild != null ? MyGuild.Name : ""; + string guildrank = MyGuild != null ? MyGuildRank.Name : ""; + S.UserInformation packet = new S.UserInformation + { + ObjectID = ObjectID, + RealId = (uint)Info.Index, + Name = Name, + GuildName = guildname, + GuildRank = guildrank, + NameColour = GetNameColour(this), + Class = Class, + Gender = Gender, + Level = Level, + Location = CurrentLocation, + Direction = Direction, + Hair = Hair, + HP = HP, + MP = MP, + + Experience = Experience, + MaxExperience = MaxExperience, + + LevelEffects = LevelEffects, + + Inventory = new UserItem[Info.Inventory.Length], + Equipment = new UserItem[Info.Equipment.Length], + QuestInventory = new UserItem[Info.QuestInventory.Length], + Gold = Account.Gold, + Credit = Account.Credit, + HasExpandedStorage = Account.ExpandedStorageExpiryDate > Envir.Now ? true : false, + ExpandedStorageExpiryTime = Account.ExpandedStorageExpiryDate, + AllowObserve = AllowObserve, + Observer = c != Connection + }; + + //Copy this method to prevent modification before sending packet information. + for (int i = 0; i < Info.Magics.Count; i++) + packet.Magics.Add(Info.Magics[i].CreateClientMagic()); + + Info.Inventory.CopyTo(packet.Inventory, 0); + Info.Equipment.CopyTo(packet.Equipment, 0); + Info.QuestInventory.CopyTo(packet.QuestInventory, 0); + + Enqueue(packet, c); + } + private void GetMapInfo(MirConnection c) + { + Enqueue(new S.MapInformation + { + MapIndex = CurrentMap.Info.Index, + FileName = CurrentMap.Info.FileName, + Title = CurrentMap.Info.Title, + MiniMap = CurrentMap.Info.MiniMap, + Lights = CurrentMap.Info.Light, + BigMap = CurrentMap.Info.BigMap, + Lightning = CurrentMap.Info.Lightning, + Fire = CurrentMap.Info.Fire, + MapDarkLight = CurrentMap.Info.MapDarkLight, + Music = CurrentMap.Info.Music, + }, c); + } + private void GetQuestInfo() + { + for (int i = 0; i < Envir.QuestInfoList.Count; i++) + { + CheckQuestInfo(Envir.QuestInfoList[i]); + } + } + private void GetObjects() + { + for (int y = CurrentLocation.Y - Globals.DataRange; y <= CurrentLocation.Y + Globals.DataRange; y++) + { + if (y < 0) continue; + if (y >= CurrentMap.Height) break; + + for (int x = CurrentLocation.X - Globals.DataRange; x <= CurrentLocation.X + Globals.DataRange; x++) + { + if (x < 0) continue; + if (x >= CurrentMap.Width) break; + if (x < 0 || x >= CurrentMap.Width) continue; + + Cell cell = CurrentMap.GetCell(x, y); + + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + + //if (ob.Race == ObjectType.Player && ob.Observer) continue; + + ob.Add(this); + } + } + } + } + private void GetObjectsPassive(MirConnection c = null) + { + for (int y = CurrentLocation.Y - Globals.DataRange; y <= CurrentLocation.Y + Globals.DataRange; y++) + { + if (y < 0) continue; + if (y >= CurrentMap.Height) break; + + for (int x = CurrentLocation.X - Globals.DataRange; x <= CurrentLocation.X + Globals.DataRange; x++) + { + if (x < 0) continue; + if (x >= CurrentMap.Width) break; + if (x < 0 || x >= CurrentMap.Width) continue; + + Cell cell = CurrentMap.GetCell(x, y); + + if (!cell.Valid || cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + if (ob == this) continue; + + if (ob.Race == ObjectType.Player) + { + PlayerObject Player = (PlayerObject)ob; + Enqueue(Player.GetInfoEx(this), c); + } + else if (ob.Race == ObjectType.Merchant) + { + NPCObject NPC = (NPCObject)ob; + + NPC.CheckVisible(this); + + if (NPC.VisibleLog[Info.Index] && NPC.Visible) Enqueue(ob.GetInfo(), c); + } + else + { + Enqueue(ob.GetInfo(), c); + } + + if (ob.Race == ObjectType.Player || ob.Race == ObjectType.Monster) + { + ob.SendHealth(this); + } + } + } + } + } + public override void RefreshGuildBuffs() + { + if (MyGuild == null) return; + if (MyGuild.BuffList.Count == 0) return; + + for (int i = 0; i < MyGuild.BuffList.Count; i++) + { + GuildBuff buff = MyGuild.BuffList[i]; + if ((buff.Info == null) || (!buff.Active)) continue; + + Stats.Add(buff.Info.Stats); + } + } + + public override void RefreshNameColour() + { + var prevColor = NameColour; + NameColour = GetNameColour(this); + + if (prevColor == NameColour) return; + + Enqueue(new S.ColourChanged { NameColour = NameColour }); + BroadcastColourChange(); + } + + public override Color GetNameColour(HumanObject human) + { + if (human == null) return NameColour; + + if (human is PlayerObject player) + { + if (player.PKPoints >= 200) + return Color.Red; + + if (Envir.Time < player.BrownTime) + return Color.SaddleBrown; + + if (player.WarZone) + { + if (player.MyGuild == null) + return Color.Green; + + if (player.MyGuild == MyGuild) + return Color.Green; + else + return Color.Orange; + } + + if (MyGuild != null) + { + if (MyGuild.IsAtWar()) + { + if (player.MyGuild != null) + { + if (player.MyGuild == MyGuild) + return Color.Blue; + if (MyGuild.IsEnemy(player.MyGuild)) + return Color.Orange; + } + } + } + + if (player.PKPoints >= 100) + return Color.Yellow; + } + + return Color.White; + } + public void Chat(string message, List linkedItems = null) + { + if (string.IsNullOrEmpty(message)) return; + + MessageQueue.EnqueueChat(string.Format("{0}: {1}", Name, message)); + + if (GMLogin) + { + if (message == GMPassword) + { + IsGM = true; + UpdateGMBuff(); + MessageQueue.Enqueue(string.Format("{0} is now a GM", Name)); + ReceiveChat("You have been made a GM", ChatType.System); + Envir.RemoveRank(Info);//remove gm chars from ranking to avoid causing bugs in rank list + } + else + { + MessageQueue.Enqueue(string.Format("{0} attempted a GM login", Name)); + ReceiveChat("Incorrect login password", ChatType.System); + } + GMLogin = false; + return; + } + + if (Info.ChatBanned) + { + if (Info.ChatBanExpiryDate > Envir.Now) + { + ReceiveChat("You are currently banned from chatting.", ChatType.System); + return; + } + + Info.ChatBanned = false; + } + else + { + if (ChatTime > Envir.Time) + { + if (ChatTick >= 5 & !IsGM) + { + Info.ChatBanned = true; + Info.ChatBanExpiryDate = Envir.Now.AddMinutes(5); + ReceiveChat("You have been banned from chatting for 5 minutes.", ChatType.System); + return; + } + + ChatTick++; + } + else + ChatTick = 0; + + ChatTime = Envir.Time + 2000; + } + + string[] parts; + + message = message.Replace("$pos", Functions.PointToString(CurrentLocation)); + + + Packet p; + if (message.StartsWith("/")) + { + //Private Message + message = message.Remove(0, 1); + parts = message.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); + + if (parts.Length == 0) return; + + PlayerObject player = Envir.GetPlayer(parts[0]); + + if (player == null) + { + ReceiveChat(string.Format("Could not find {0}.", parts[0]), ChatType.System); + return; + } + + if (player.Info.Friends.Any(e => e.Info == Info && e.Blocked)) + { + ReceiveChat("Player is not accepting your messages.", ChatType.System); + return; + } + + if (Info.Friends.Any(e => e.Info == player.Info && e.Blocked)) + { + ReceiveChat("Cannot message player whilst they are on your blacklist.", ChatType.System); + return; + } + + message = ProcessChatItems(message, new List { player }, linkedItems); + + ReceiveChat(string.Format("/{0}", message), ChatType.WhisperOut); + player.ReceiveChat(string.Format("{0}=>{1}", Name, message.Remove(0, parts[0].Length)), ChatType.WhisperIn); + } + else if (message.StartsWith("!!")) + { + if (GroupMembers == null) return; + //Group + message = String.Format("{0}:{1}", Name, message.Remove(0, 2)); + + message = ProcessChatItems(message, GroupMembers, linkedItems); + + p = new S.ObjectChat { ObjectID = ObjectID, Text = message, Type = ChatType.Group }; + + for (int i = 0; i < GroupMembers.Count; i++) + GroupMembers[i].Enqueue(p); + } + else if (message.StartsWith("!~")) + { + if (MyGuild == null) return; + + //Guild + message = message.Remove(0, 2); + + message = ProcessChatItems(message, MyGuild.GetOnlinePlayers(), linkedItems); + + MyGuild.SendMessage(String.Format("{0}: {1}", Name, message)); + + } + else if (message.StartsWith("!")) + { + //Shout + if (Envir.Time < ShoutTime) + { + ReceiveChat(string.Format("You cannot shout for another {0} seconds.", Math.Ceiling((ShoutTime - Envir.Time) / 1000D)), ChatType.System); + return; + } + if (Level < 8 && (!HasMapShout && !HasServerShout)) + { + ReceiveChat("You need to be level 8 before you can shout.", ChatType.System); + return; + } + + ShoutTime = Envir.Time + 10000; + message = String.Format("(!){0}:{1}", Name, message.Remove(0, 1)); + + if (HasMapShout) + { + message = ProcessChatItems(message, CurrentMap.Players, linkedItems); + + p = new S.Chat { Message = message, Type = ChatType.Shout2 }; + HasMapShout = false; + + for (int i = 0; i < CurrentMap.Players.Count; i++) + { + CurrentMap.Players[i].Enqueue(p); + } + return; + } + else if (HasServerShout) + { + message = ProcessChatItems(message, Envir.Players, linkedItems); + + p = new S.Chat { Message = message, Type = ChatType.Shout3 }; + HasServerShout = false; + + for (int i = 0; i < Envir.Players.Count; i++) + { + Envir.Players[i].Enqueue(p); + } + return; + } + else + { + List playersInRange = new List(); + + for (int i = 0; i < CurrentMap.Players.Count; i++) + { + if (!Functions.InRange(CurrentLocation, CurrentMap.Players[i].CurrentLocation, Globals.DataRange * 2)) continue; + + playersInRange.Add(CurrentMap.Players[i]); + } + + message = ProcessChatItems(message, playersInRange, linkedItems); + + p = new S.Chat { Message = message, Type = ChatType.Shout }; + + for (int i = 0; i < playersInRange.Count; i++) + { + playersInRange[i].Enqueue(p); + } + + } + + } + else if (message.StartsWith(":)")) + { + //Relationship Message + message = message.Remove(0, 2); + parts = message.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); + + if (parts.Length == 0) return; + + if (Info.Married == 0) return; + + CharacterInfo Lover = Envir.GetCharacterInfo(Info.Married); + PlayerObject player = Envir.GetPlayer(Lover.Name); + + if (player == null) + { + ReceiveChat(string.Format("{0} isn't online.", Lover.Name), ChatType.System); + return; + } + + message = ProcessChatItems(message, new List { player }, linkedItems); + + ReceiveChat(string.Format("{0}: {1}", Name, message), ChatType.Relationship); + player.ReceiveChat(string.Format("{0}: {1}", Name, message), ChatType.Relationship); + } + else if (message.StartsWith("@!")) + { + if (!IsGM) return; + + message = String.Format("(*){0}:{1}", Name, message.Remove(0, 2)); + + message = ProcessChatItems(message, Envir.Players, linkedItems); + + p = new S.Chat { Message = message, Type = ChatType.Announcement }; + + Envir.Broadcast(p); + } + else if (message.StartsWith("@")) + { + + //Command + message = message.Remove(0, 1); + parts = message.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); + + if (parts.Length == 0) return; + + PlayerObject player; + CharacterInfo data; + String hintstring; + UserItem item; + + List conquestAIs = new() + { + 72, // siege gate + 73, // gate west + 80, // archer + 81, // gate + 82 // wall + }; + + switch (parts[0].ToUpper()) + { + case "LOGIN": + GMLogin = true; + ReceiveChat("Please type the GM Password", ChatType.Hint); + return; + + case "KILL": + if (!IsGM) return; + + if (parts.Length >= 2) + { + player = Envir.GetPlayer(parts[1]); + + if (player == null) + { + ReceiveChat(string.Format("Could not find {0}", parts[0]), ChatType.System); + return; + } + if (!player.GMNeverDie) player.Die(); + } + else + { + if (!CurrentMap.ValidPoint(Front)) return; + + Cell cell = CurrentMap.GetCell(Front); + + if (cell == null || cell.Objects == null) return; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + + switch (ob.Race) + { + case ObjectType.Player: + case ObjectType.Monster: + if (ob.Dead) continue; + ob.EXPOwner = this; + ob.ExpireTime = Envir.Time + MonsterObject.EXPOwnerDelay; + ob.Die(); + break; + default: + continue; + } + } + } + return; + + case "CHANGEGENDER": + if (!IsGM && !Settings.TestServer) return; + + data = parts.Length < 2 ? Info : Envir.GetCharacterInfo(parts[1]); + + if (data == null) return; + + switch (data.Gender) + { + case MirGender.Male: + data.Gender = MirGender.Female; + break; + case MirGender.Female: + data.Gender = MirGender.Male; + break; + } + + ReceiveChat(string.Format("Player {0} has been changed to {1}", data.Name, data.Gender), ChatType.System); + MessageQueue.Enqueue(string.Format("Player {0} has been changed to {1} by {2}", data.Name, data.Gender, Name)); + break; + + case "LEVEL": + if ((!IsGM && !Settings.TestServer) || parts.Length < 2) return; + + ushort level; + ushort old; + if (parts.Length >= 3) + { + if (!IsGM) return; + + if (ushort.TryParse(parts[2], out level)) + { + if (level == 0) return; + player = Envir.GetPlayer(parts[1]); + if (player == null) return; + old = player.Level; + player.Level = level; + player.LevelUp(); + + ReceiveChat(string.Format("Player {0} has been Leveled {1} -> {2}.", player.Name, old, player.Level), ChatType.System); + MessageQueue.Enqueue(string.Format("Player {0} has been Leveled {1} -> {2} by {3}", player.Name, old, player.Level, Name)); + return; + } + } + else + { + if (parts[1] == "-1") + { + parts[1] = ushort.MaxValue.ToString(); + } + + if (ushort.TryParse(parts[1], out level)) + { + if (level == 0) return; + old = Level; + Level = level; + LevelUp(); + + ReceiveChat(string.Format("{0} {1} -> {2}.", GameLanguage.LevelUp, old, Level), ChatType.System); + MessageQueue.Enqueue(string.Format("Player {0} has been Leveled {1} -> {2} by {3}", Name, old, Level, Name)); + return; + } + } + + ReceiveChat("Could not level player", ChatType.System); + break; + + case "MAKE": + { + if ((!IsGM && !Settings.TestServer) || parts.Length < 2) return; + + ItemInfo iInfo; + int itemIndex = 0; + + if (Int32.TryParse(parts[1], out itemIndex)) + { + iInfo = Envir.GetItemInfo(itemIndex); + } + else + { + iInfo = Envir.GetItemInfo(parts[1]); + } + + if (iInfo == null) return; + + ushort itemCount = 1; + if (parts.Length >= 3 && !ushort.TryParse(parts[2], out itemCount)) + itemCount = 1; + + var tempCount = itemCount; + + while (itemCount > 0) + { + if (iInfo.StackSize >= itemCount) + { + item = Envir.CreateDropItem(iInfo); + item.Count = itemCount; + + if (CanGainItem(item)) GainItem(item); + + return; + } + item = Envir.CreateDropItem(iInfo); + item.Count = iInfo.StackSize; + itemCount -= iInfo.StackSize; + + if (!CanGainItem(item)) return; + GainItem(item); + } + + ReceiveChat(string.Format("{0} x{1} has been created.", iInfo.FriendlyName, tempCount), ChatType.System); + MessageQueue.Enqueue(string.Format("Player {0} has attempted to Create {1} x{2}", Name, iInfo.Name, tempCount)); + } + break; + case "CLEARBUFFS": + foreach (var buff in Buffs) + { + buff.FlagForRemoval = true; + buff.ExpireTime = 0; + } + break; + + case "CLEARBAG": + if (!IsGM && !Settings.TestServer) return; + player = this; + + if (parts.Length >= 2) + player = Envir.GetPlayer(parts[1]); + + if (player == null) return; + for (int i = 0; i < player.Info.Inventory.Length; i++) + { + item = player.Info.Inventory[i]; + if (item == null) continue; + + player.Enqueue(new S.DeleteItem { UniqueID = item.UniqueID, Count = item.Count }); + player.Info.Inventory[i] = null; + } + player.RefreshStats(); + break; + + case "SUPERMAN": + if (!IsGM && !Settings.TestServer) return; + + GMNeverDie = !GMNeverDie; + + hintstring = GMNeverDie ? "Invincible Mode." : "Normal Mode."; + ReceiveChat(hintstring, ChatType.Hint); + UpdateGMBuff(); + break; + + case "GAMEMASTER": + if (!IsGM && !Settings.TestServer) return; + + GMGameMaster = !GMGameMaster; + + hintstring = GMGameMaster ? "GameMaster Mode." : "Normal Mode."; + ReceiveChat(hintstring, ChatType.Hint); + UpdateGMBuff(); + break; + + case "OBSERVER": + if (!IsGM) return; + Observer = !Observer; + + hintstring = Observer ? "Observer Mode." : "Normal Mode."; + ReceiveChat(hintstring, ChatType.Hint); + UpdateGMBuff(); + break; + case "ALLOWGUILD": + EnableGuildInvite = !EnableGuildInvite; + hintstring = EnableGuildInvite ? "Guild invites enabled." : "Guild invites disabled."; + ReceiveChat(hintstring, ChatType.Hint); + break; + case "RECALL": + if (!IsGM) return; + + if (parts.Length < 2) return; + player = Envir.GetPlayer(parts[1]); + + if (player == null) return; + + player.Teleport(CurrentMap, Front); + break; + case "OBSERVE": + if (parts.Length < 2) return; + player = Envir.GetPlayer(parts[1]); + + if (player == null) return; + if ((!player.AllowObserve || !Settings.AllowObserve) && !IsGM) return; + + player.AddObserver(Connection); + break; + case "RECALLLOVER": + if (Info.Married == 0) + { + ReceiveChat("You're not married.", ChatType.System); + return; + } + + if (Dead) + { + ReceiveChat("You can't recall when you are dead.", ChatType.System); + return; + } + + if (CurrentMap.Info.NoRecall) + { + ReceiveChat("You cannot recall people on this map", ChatType.System); + return; + } + + if (Info.Equipment[(int)EquipmentSlot.RingL] == null) + { + ReceiveChat("You need to be wearing a Wedding Ring for recall.", ChatType.System); + return; + } + + + if (Info.Equipment[(int)EquipmentSlot.RingL].WeddingRing == Info.Married) + { + CharacterInfo Lover = Envir.GetCharacterInfo(Info.Married); + + if (Lover == null) return; + + player = Envir.GetPlayer(Lover.Name); + + if (!Settings.WeddingRingRecall) + { + ReceiveChat($"Teleportation via Wedding Ring is disabled.", ChatType.System); + return; + } + + if (player == null) + { + ReceiveChat((string.Format("{0} is not online.", Lover.Name)), ChatType.System); + return; + } + + if (player.Dead) + { + ReceiveChat("You can't recall a dead player.", ChatType.System); + return; + } + + if (player.Info.Equipment[(int)EquipmentSlot.RingL] == null) + { + player.ReceiveChat((string.Format("You need to wear a Wedding Ring for recall.", Lover.Name)), ChatType.System); + ReceiveChat((string.Format("{0} Isn't wearing a Wedding Ring.", Lover.Name)), ChatType.System); + return; + } + + if (player.Info.Equipment[(int)EquipmentSlot.RingL].WeddingRing != player.Info.Married) + { + player.ReceiveChat((string.Format("You need to wear a Wedding Ring on your left finger for recall.", Lover.Name)), ChatType.System); + ReceiveChat((string.Format("{0} Isn't wearing a Wedding Ring.", Lover.Name)), ChatType.System); + return; + } + + if (!player.AllowLoverRecall) + { + player.ReceiveChat("A recall was attempted without your permission", + ChatType.System); + ReceiveChat((string.Format("{0} is blocking Lover Recall.", player.Name)), ChatType.System); + return; + } + + if ((Envir.Time < LastRecallTime) && (Envir.Time < player.LastRecallTime)) + { + ReceiveChat(string.Format("You cannot recall for another {0} seconds", (LastRecallTime - Envir.Time) / 1000), ChatType.System); + return; + } + + LastRecallTime = Envir.Time + 60000; + player.LastRecallTime = Envir.Time + 60000; + + if (!player.Teleport(CurrentMap, Front)) + player.Teleport(CurrentMap, CurrentLocation); + } + else + { + ReceiveChat("You cannot recall your lover without wearing a wedding ring", ChatType.System); + return; + } + break; + case "TIME": + ReceiveChat(string.Format("The time is : {0}", Envir.Now.ToString("hh:mm tt")), ChatType.System); + break; + + case "ROLL": + int diceNum = Envir.Random.Next(5) + 1; + + if (GroupMembers == null) { return; } + + for (int i = 0; i < GroupMembers.Count; i++) + { + PlayerObject playerSend = GroupMembers[i]; + playerSend.ReceiveChat(string.Format("{0} has rolled a {1}", Name, diceNum), ChatType.Group); + } + break; + + case "MAP": + var mapName = CurrentMap.Info.FileName; + var mapTitle = CurrentMap.Info.Title; + ReceiveChat((string.Format("You are currently in {0}. Map ID: {1}", mapTitle, mapName)), ChatType.System); + break; + + case "BACKUPPLAYER": + { + if (!IsGM || parts.Length < 2) return; + + var info = Envir.GetCharacterInfo(parts[1]); + + if (info == null) + { + ReceiveChat(string.Format("Player {0} was not found", parts[1]), ChatType.System); + return; + } + + Envir.SaveArchivedCharacter(info); + + ReceiveChat(string.Format("Player {0} has been backed up", info.Name), ChatType.System); + MessageQueue.Enqueue(string.Format("Player {0} has been backed up by {1}", info.Name, Name)); + } + break; + + case "ARCHIVEPLAYER": + { + if (!IsGM || parts.Length < 2) return; + + data = Envir.GetCharacterInfo(parts[1]); + + if (data == null) + { + ReceiveChat(string.Format("Player {0} was not found", parts[1]), ChatType.System); + return; + } + + if (data == Info) + { + ReceiveChat("Cannot archive the player you are on", ChatType.System); + return; + } + + var account = Envir.GetAccountByCharacter(parts[1]); + + if (account == null) + { + ReceiveChat(string.Format("Player {0} was not found in any account", parts[1]), ChatType.System); + return; + } + + Envir.SaveArchivedCharacter(data); + + Envir.CharacterList.Remove(data); + account.Characters.Remove(data); + + ReceiveChat(string.Format("Player {0} has been archived", data.Name), ChatType.System); + MessageQueue.Enqueue(string.Format("Player {0} has been archived by {1}", data.Name, Name)); + } + break; + + case "LOADPLAYER": + { + if (!IsGM) return; + + if (parts.Length < 2) return; + + var bak = Envir.GetArchivedCharacter(parts[1]); + + if (bak == null) + { + ReceiveChat(string.Format("Player {0} could not be loaded. Try specifying the full archive filename", parts[1]), ChatType.System); + return; + } + + var info = Envir.GetCharacterInfo(bak.Name); + + if (info == null) + { + ReceiveChat(string.Format("Player {0} was not found", parts[1]), ChatType.System); + return; + } + + if (info.Index != bak.Index) + { + ReceiveChat("Cannot load this player due to mismatching ID's", ChatType.System); + return; + } + + info = bak; + + ReceiveChat(string.Format("Player {0} has been loaded", info.Name), ChatType.System); + MessageQueue.Enqueue(string.Format("Player {0} has been loaded by {1}", info.Name, Name)); + } + break; + + case "RESTOREPLAYER": + { + if (!IsGM || parts.Length < 2) return; + + AccountInfo account = null; + + if (parts.Length > 2) + { + if (!Envir.AccountExists(parts[2])) + { + ReceiveChat(string.Format("Account {0} was not found", parts[2]), ChatType.System); + return; + } + + account = Envir.GetAccount(parts[2]); + + if (account.Characters.Count >= Globals.MaxCharacterCount) + { + ReceiveChat(string.Format("Account {0} already has {1} characters", parts[2], Globals.MaxCharacterCount), ChatType.System); + return; + } + } + + data = Envir.GetCharacterInfo(parts[1]); + + if (data == null) + { + if (account != null) + { + data = Envir.GetArchivedCharacter(parts[1]); + + if (data == null) + { + ReceiveChat(string.Format("Player {0} could not be restored. Try specifying the full archive filename", parts[1]), ChatType.System); + return; + } + + data.AccountInfo = account; + + account.Characters.Add(data); + Envir.CharacterList.Add(data); + + data.Deleted = false; + data.DeleteDate = DateTime.MinValue; + + data.LastLoginDate = Envir.Now; + } + else + { + ReceiveChat(string.Format("Player {0} was not found", parts[1]), ChatType.System); + return; + } + } + else + { + if (!data.Deleted) return; + data.Deleted = false; + data.DeleteDate = DateTime.MinValue; + } + + ReceiveChat(string.Format("Player {0} has been restored by", data.Name), ChatType.System); + MessageQueue.Enqueue(string.Format("Player {0} has been restored by {1}", data.Name, Name)); + } + break; + + case "MOVE": + if (!IsGM && !SpecialMode.HasFlag(SpecialItemMode.Teleport) && !Settings.TestServer) return; + if (!IsGM && CurrentMap.Info.NoPosition) + { + ReceiveChat(("You cannot position move on this map"), ChatType.System); + return; + } + if (Envir.Time < LastTeleportTime) + { + ReceiveChat(string.Format("You cannot teleport for another {0} seconds", (LastTeleportTime - Envir.Time) / 1000), ChatType.System); + return; + } + + int x, y; + + if (parts.Length <= 2 || !int.TryParse(parts[1], out x) || !int.TryParse(parts[2], out y)) + { + if (!IsGM) + LastTeleportTime = Envir.Time + 10000; + TeleportRandom(200, 0); + return; + } + if (!IsGM) + LastTeleportTime = Envir.Time + 10000; + Teleport(CurrentMap, new Point(x, y)); + break; + + case "MAPMOVE": + if ((!IsGM && !Settings.TestServer) || parts.Length < 2) return; + var instanceID = 1; x = 0; y = 0; + + if (parts.Length == 3 || parts.Length == 5) + int.TryParse(parts[2], out instanceID); + + if (instanceID < 1) instanceID = 1; + + var map = Envir.GetMapByNameAndInstance(parts[1], instanceID); + if (map == null) + { + ReceiveChat((string.Format("Map {0}:[{1}] could not be found", parts[1], instanceID)), ChatType.System); + return; + } + + if (parts.Length == 4 || parts.Length == 5) + { + int.TryParse(parts[parts.Length - 2], out x); + int.TryParse(parts[parts.Length - 1], out y); + } + + switch (parts.Length) + { + case 2: + ReceiveChat(TeleportRandom(200, 0, map) ? (string.Format("Moved to Map {0}", map.Info.FileName)) : + (string.Format("Failed movement to Map {0}", map.Info.FileName)), ChatType.System); + break; + case 3: + ReceiveChat(TeleportRandom(200, 0, map) ? (string.Format("Moved to Map {0}:[{1}]", map.Info.FileName, instanceID)) : + (string.Format("Failed movement to Map {0}:[{1}]", map.Info.FileName, instanceID)), ChatType.System); + break; + case 4: + ReceiveChat(Teleport(map, new Point(x, y)) ? (string.Format("Moved to Map {0} at {1}:{2}", map.Info.FileName, x, y)) : + (string.Format("Failed movement to Map {0} at {1}:{2}", map.Info.FileName, x, y)), ChatType.System); + break; + case 5: + ReceiveChat(Teleport(map, new Point(x, y)) ? (string.Format("Moved to Map {0}:[{1}] at {2}:{3}", map.Info.FileName, instanceID, x, y)) : + (string.Format("Failed movement to Map {0}:[{1}] at {2}:{3}", map.Info.FileName, instanceID, x, y)), ChatType.System); + break; + } + break; + + case "GOTO": + if (!IsGM) return; + + if (parts.Length < 2) return; + player = Envir.GetPlayer(parts[1]); + + if (player == null) return; + + Teleport(player.CurrentMap, player.CurrentLocation); + break; + + case "MOB": + if (!IsGM && !Settings.TestServer) return; + if (parts.Length < 2) + { + ReceiveChat("Not enough parameters to spawn monster", ChatType.System); + return; + } + + MonsterInfo mInfo = null; + int monsterIndex = 0; + + if (Int32.TryParse(parts[1], out monsterIndex)) + { + mInfo = Envir.GetMonsterInfo(monsterIndex, false); + } + else + { + mInfo = Envir.GetMonsterInfo(parts[1]); + } + + if (mInfo == null) + { + ReceiveChat((string.Format("Monster {0} does not exist", parts[1])), ChatType.System); + return; + } + + if (conquestAIs.Contains(mInfo.AI)) + { + ReceiveChat($"Cannot spawn conquest item: {mInfo.Name}", ChatType.System); + return; + } + + uint count = 1; + if (parts.Length >= 3 && IsGM) + if (!uint.TryParse(parts[2], out count)) count = 1; + int spread = 0; + if (parts.Length >= 4) + int.TryParse(parts[3], out spread); + + for (int i = 0; i < count; i++) + { + MonsterObject monster = MonsterObject.GetMonster(mInfo); + if (monster == null) + { + return; + } + + if (spread == 0) + monster.Spawn(CurrentMap, Front); + else + for (int _ = 0; _ < 20; _++) + if (monster.Spawn(CurrentMap, CurrentLocation.Add(Envir.Random.Next(-spread, spread + 1), Envir.Random.Next(-spread, spread + 1)))) + break; + } + + ReceiveChat((string.Format("Monster {0} x{1} has been spawned.", mInfo.Name, count)), ChatType.System); + break; + + case "RECALLMOB": + if ((!IsGM && !Settings.TestServer) || parts.Length < 2) return; + + MonsterInfo mInfo2 = null; + int monsterIndex2 = 0; + + if (Int32.TryParse(parts[1], out monsterIndex2)) + { + mInfo2 = Envir.GetMonsterInfo(monsterIndex2, false); + } + else + { + mInfo2 = Envir.GetMonsterInfo(parts[1]); + } + + if (mInfo2 == null) return; + + count = 1; + byte petlevel = 0; + + if (parts.Length > 2) + if (!uint.TryParse(parts[2], out count) || count > 50) count = 1; + + if (parts.Length > 3) + if (!byte.TryParse(parts[3], out petlevel) || petlevel > 7) petlevel = 0; + + if (!IsGM && (Pets.Count(t => !t.Dead) >= Globals.MaxPets)) return; + + for (int i = 0; i < count; i++) + { + MonsterObject monster = MonsterObject.GetMonster(mInfo2); + + if (monster == null) return; + + if (conquestAIs.Contains(monster.Info.AI)) + { + ReceiveChat($"Cannot spawn conquest item: {monster.Name}", ChatType.System); + return; + } + + monster.PetLevel = petlevel; + monster.Master = this; + monster.MaxPetLevel = 7; + monster.Direction = Direction; + monster.ActionTime = Envir.Time + 1000; + monster.Spawn(CurrentMap, Front); + Pets.Add(monster); + } + + ReceiveChat((string.Format("Pet {0} x{1} has been recalled.", mInfo2.Name, count)), ChatType.System); + break; + + case "RELOADDROPS": + if (!IsGM) return; + + Envir.ReloadDrops(); + + ReceiveChat("Drops Reloaded.", ChatType.Hint); + break; + + case "RELOADNPCS": + if (!IsGM) return; + + Envir.ReloadNPCs(); + + ReceiveChat("NPC Scripts Reloaded.", ChatType.Hint); + break; + + case "CLEARIPBLOCKS": + if (!IsGM) return; + + Envir.IPBlocks.Clear(); + break; + + case "GIVEGOLD": + if ((!IsGM && !Settings.TestServer) || parts.Length < 2) return; + + player = this; + + if (parts.Length > 2) + { + if (!IsGM) return; + + if (!uint.TryParse(parts[2], out count)) return; + player = Envir.GetPlayer(parts[1]); + + if (player == null) + { + ReceiveChat(string.Format("Player {0} was not found.", parts[1]), ChatType.System); + return; + } + } + + else if (!uint.TryParse(parts[1], out count)) return; + + if (count + player.Account.Gold >= uint.MaxValue) + count = uint.MaxValue - player.Account.Gold; + + player.GainGold(count); + MessageQueue.Enqueue(string.Format("Player {0} has been given {1} gold", player.Name, count)); + break; + + case "GIVECREDIT": + if ((!IsGM && !Settings.TestServer) || parts.Length < 2) return; + + player = this; + + if (parts.Length > 2) + { + if (!IsGM) return; + + if (!uint.TryParse(parts[2], out count)) return; + player = Envir.GetPlayer(parts[1]); + + if (player == null) + { + ReceiveChat(string.Format("Player {0} was not found.", parts[1]), ChatType.System); + return; + } + } + + else if (!uint.TryParse(parts[1], out count)) return; + + if (count + player.Account.Credit >= uint.MaxValue) + count = uint.MaxValue - player.Account.Credit; + + player.GainCredit(count); + MessageQueue.Enqueue(string.Format("Player {0} has been given {1} credit", player.Name, count)); + break; + case "GIVESKILL": + if ((!IsGM && !Settings.TestServer) || parts.Length < 3) return; + + byte spellLevel = 0; + + player = this; + Spell skill; + + if (!Enum.TryParse(parts.Length > 3 ? parts[2] : parts[1], true, out skill)) return; + + if (skill == Spell.None) return; + + spellLevel = byte.TryParse(parts.Length > 3 ? parts[3] : parts[2], out spellLevel) ? Math.Min((byte)3, spellLevel) : (byte)0; + + if (parts.Length > 3) + { + if (!IsGM) return; + + player = Envir.GetPlayer(parts[1]); + + if (player == null) + { + ReceiveChat(string.Format("Player {0} was not found.", parts[1]), ChatType.System); + return; + } + } + + var magic = new UserMagic(skill) { Level = spellLevel }; + + if (player.Info.Magics.Any(e => e.Spell == skill)) + { + player.Info.Magics.FirstOrDefault(e => e.Spell == skill).Level = spellLevel; + player.ReceiveChat(string.Format("Spell {0} changed to level {1}", skill.ToString(), spellLevel), ChatType.Hint); + return; + } + else + { + player.ReceiveChat(string.Format("You have learned {0} at level {1}", skill.ToString(), spellLevel), ChatType.Hint); + + if (player != this) + { + ReceiveChat(string.Format("{0} has learned {1} at level {2}", player.Name, skill.ToString(), spellLevel), ChatType.Hint); + } + + player.Info.Magics.Add(magic); + } + + player.SendMagicInfo(magic); + player.RefreshStats(); + break; + + case "FIND": + if (!IsGM && !SpecialMode.HasFlag(SpecialItemMode.Probe)) return; + + if (Envir.Time < LastProbeTime) + { + ReceiveChat(string.Format("You cannot search for another {0} seconds", (LastProbeTime - Envir.Time) / 1000), ChatType.System); + return; + } + + if (parts.Length < 2) return; + player = Envir.GetPlayer(parts[1]); + + if (player == null) + { + ReceiveChat(parts[1] + " is not online", ChatType.System); + return; + } + if (player.CurrentMap == null) return; + if (!IsGM) + LastProbeTime = Envir.Time + 180000; + ReceiveChat((string.Format("{0} is located at {1} ({2},{3})", player.Name, player.CurrentMap.Info.Title, player.CurrentLocation.X, player.CurrentLocation.Y)), ChatType.System); + break; + + case "LEAVEGUILD": + if (MyGuild == null) return; + if (MyGuildRank == null) return; + if (MyGuild.IsAtWar()) + { + ReceiveChat("Cannot leave guild whilst at war.", ChatType.System); + return; + } + + MyGuild.DeleteMember(this, Name); + break; + + case "CREATEGUILD": + + if ((!IsGM && !Settings.TestServer) || parts.Length < 2) return; + + player = parts.Length < 3 ? this : Envir.GetPlayer(parts[1]); + + if (player == null) + { + ReceiveChat(string.Format("Player {0} was not found.", parts[1]), ChatType.System); + return; + } + + if (player.MyGuild != null) + { + ReceiveChat(string.Format("Player {0} is already in a guild.", player.Name), ChatType.System); + return; + } + + String gName = parts.Length < 3 ? parts[1] : parts[2]; + if ((gName.Length < 3) || (gName.Length > 20)) + { + ReceiveChat("Guildname is restricted to 3-20 characters.", ChatType.System); + return; + } + + GuildObject guild = Envir.GetGuild(gName); + if (guild != null) + { + ReceiveChat(string.Format("Guild {0} already exists.", gName), ChatType.System); + return; + } + + player.CanCreateGuild = true; + if (player.CreateGuild(gName)) + { + ReceiveChat(string.Format("Successfully created guild {0}", gName), ChatType.System); + } + else + { + ReceiveChat("Failed to create guild", ChatType.System); + } + + player.CanCreateGuild = false; + break; + + case "ALLOWTRADE": + AllowTrade = !AllowTrade; + + if (AllowTrade) + ReceiveChat("You are now allowing trade", ChatType.System); + else + ReceiveChat("You are no longer allowing trade", ChatType.System); + break; + + case "TRIGGER": + if (!IsGM) return; + if (parts.Length < 2) return; + + if (parts.Length >= 3) + { + player = Envir.GetPlayer(parts[2]); + + if (player == null) + { + ReceiveChat(string.Format("Player {0} was not found.", parts[2]), ChatType.System); + return; + } + + player.CallDefaultNPC(DefaultNPCType.Trigger, parts[1]); + return; + } + + foreach (var pl in Envir.Players) + { + pl.CallDefaultNPC(DefaultNPCType.Trigger, parts[1]); + } + + break; + + case "SETFLAG": + if (!IsGM && !Settings.TestServer) return; + + if (parts.Length < 2) return; + + int tempInt = 0; + + if (!int.TryParse(parts[1], out tempInt)) return; + + if (tempInt > Info.Flags.Length - 1) return; + + Info.Flags[tempInt] = !Info.Flags[tempInt]; + + for (int f = CurrentMap.NPCs.Count - 1; f >= 0; f--) + { + if (Functions.InRange(CurrentMap.NPCs[f].CurrentLocation, CurrentLocation, Globals.DataRange)) + CurrentMap.NPCs[f].CheckVisible(this); + } + + break; + + case "LISTFLAGS": + if (!IsGM && !Settings.TestServer) return; + + for (int i = 0; i < Info.Flags.Length; i++) + { + if (Info.Flags[i] == false) continue; + + ReceiveChat("Flag " + i, ChatType.Hint); + } + break; + + case "CLEARFLAGS": + if (!IsGM && !Settings.TestServer) return; + + player = parts.Length > 1 && IsGM ? Envir.GetPlayer(parts[1]) : this; + + if (player == null) + { + ReceiveChat(parts[1] + " is not online", ChatType.System); + return; + } + + for (int i = 0; i < player.Info.Flags.Length; i++) + { + player.Info.Flags[i] = false; + } + break; + case "CLEARMOB": + if (!IsGM) return; + + if (parts.Length > 1) + { + map = Envir.GetMapByNameAndInstance(parts[1]); + + if (map == null) return; + + } + else + { + map = CurrentMap; + } + + foreach (var cell in map.Cells) + { + if (cell == null || cell.Objects == null) continue; + + int obCount = cell.Objects.Count(); + + for (int m = 0; m < obCount; m++) + { + MapObject ob = cell.Objects[m]; + + if (ob.Race != ObjectType.Monster) continue; + if (ob.Dead) continue; + ob.Die(); + } + } + + break; + + case "CHANGECLASS": //@changeclass [Player] [Class] + if (!IsGM && !Settings.TestServer) return; + + data = parts.Length <= 2 || !IsGM ? Info : Envir.GetCharacterInfo(parts[1]); + + if (data == null) return; + + MirClass mirClass; + + if (!Enum.TryParse(parts[parts.Length - 1], true, out mirClass) || data.Class == mirClass) return; + + data.Class = mirClass; + + ReceiveChat(string.Format("Player {0} has been changed to {1}", data.Name, data.Class), ChatType.System); + MessageQueue.Enqueue(string.Format("Player {0} has been changed to {1} by {2}", data.Name, data.Class, Name)); + break; + + case "DIE": + LastHitter = null; + Die(); + break; + case "HAIR": + if (!IsGM && !Settings.TestServer) return; + + if (parts.Length < 2) + { + Info.Hair = (byte)Envir.Random.Next(0, 9); + } + else + { + byte tempByte = 0; + + byte.TryParse(parts[1], out tempByte); + + Info.Hair = tempByte; + } + break; + + case "ADJUSTPKPOINT": + if ((!IsGM && !Settings.TestServer) || parts.Length < 2) return; + + if (parts.Length > 2) + { + if (!IsGM) return; + + player = Envir.GetPlayer(parts[1]); + + if (player == null) return; + + + int.TryParse(parts[2], out tempInt); + } + else + { + player = this; + int.TryParse(parts[1], out tempInt); + } + + player.PKPoints = tempInt; + + break; + + case "STARTWAR": + if (!IsGM) return; + if (parts.Length < 2) return; + + GuildObject enemyGuild = Envir.GetGuild(parts[1]); + + if (MyGuild == null) + { + ReceiveChat(GameLanguage.NotInGuild, ChatType.System); + } + + if (MyGuild.Ranks[0] != MyGuildRank) + { + ReceiveChat("You must be a leader to start a war.", ChatType.System); + return; + } + + if (enemyGuild == null) + { + ReceiveChat(string.Format("Could not find guild {0}.", parts[1]), ChatType.System); + return; + } + + if (MyGuild == enemyGuild) + { + ReceiveChat("Cannot go to war with your own guild.", ChatType.System); + return; + } + + if (MyGuild.WarringGuilds.Contains(enemyGuild)) + { + ReceiveChat("Already at war with this guild.", ChatType.System); + return; + } + + if (MyGuild.GoToWar(enemyGuild)) + { + ReceiveChat(string.Format("You started a war with {0}.", parts[1]), ChatType.System); + enemyGuild.SendMessage(string.Format("{0} has started a war", MyGuild.Name), ChatType.System); + } + break; + case "ADDINVENTORY": + { + int openLevel = (int)((Info.Inventory.Length - 46) / 4); + uint openGold = (uint)(1000000 + openLevel * 1000000); + if (Account.Gold >= openGold) + { + Account.Gold -= openGold; + Enqueue(new S.LoseGold { Gold = openGold }); + Enqueue(new S.ResizeInventory { Size = Info.ResizeInventory() }); + ReceiveChat(GameLanguage.InventoryIncreased, ChatType.System); + } + else + { + ReceiveChat(GameLanguage.LowGold, ChatType.System); + } + ChatTime = 0; + } + break; + + case "ADDSTORAGE": + { + TimeSpan addedTime = new TimeSpan(10, 0, 0, 0); + uint cost = 1000000; + + if (Account.Gold >= cost) + { + Account.Gold -= cost; + Account.HasExpandedStorage = true; + + if (Account.ExpandedStorageExpiryDate > Envir.Now) + { + Account.ExpandedStorageExpiryDate = Account.ExpandedStorageExpiryDate + addedTime; + ReceiveChat(GameLanguage.ExpandedStorageExpiresOn + Account.ExpandedStorageExpiryDate.ToString(), ChatType.System); + } + else + { + Account.ExpandedStorageExpiryDate = Envir.Now + addedTime; + ReceiveChat(GameLanguage.ExpandedStorageExpiresOn + Account.ExpandedStorageExpiryDate.ToString(), ChatType.System); + } + + Enqueue(new S.LoseGold { Gold = cost }); + Enqueue(new S.ResizeStorage { Size = Account.ExpandStorage(), HasExpandedStorage = Account.HasExpandedStorage, ExpiryTime = Account.ExpandedStorageExpiryDate }); + } + else + { + ReceiveChat(GameLanguage.LowGold, ChatType.System); + } + ChatTime = 0; + } + break; + + case "ALLOWOBSERVE": + AllowObserve = !AllowObserve; + Enqueue(new S.AllowObserve { Allow = AllowObserve }); + break; + + case "INFO": + { + if (!IsGM && !Settings.TestServer) return; + + MapObject ob = null; + + if (parts.Length < 2) + { + Point target = Functions.PointMove(CurrentLocation, Direction, 1); + Cell cell = CurrentMap.GetCell(target); + + if (cell.Objects == null || cell.Objects.Count < 1) return; + + ob = cell.Objects[0]; + } + else + { + ob = Envir.GetPlayer(parts[1]); + } + + if (ob == null) return; + + switch (ob.Race) + { + case ObjectType.Player: + PlayerObject plOb = (PlayerObject)ob; + ReceiveChat("--Player Info--", ChatType.System2); + ReceiveChat(string.Format("Name : {0}, Level : {1}, X : {2}, Y : {3}", plOb.Name, plOb.Level, plOb.CurrentLocation.X, plOb.CurrentLocation.Y), ChatType.System2); + break; + case ObjectType.Monster: + MonsterObject monOb = (MonsterObject)ob; + ReceiveChat("--Monster Info--", ChatType.System2); + ReceiveChat(string.Format("ID : {0}, Name : {1}", monOb.Info.Index, monOb.Name), ChatType.System2); + ReceiveChat(string.Format("Level : {0}, X : {1}, Y : {2}, Dir: {3}", monOb.Level, monOb.CurrentLocation.X, monOb.CurrentLocation.Y, monOb.Direction), ChatType.System2); + ReceiveChat(string.Format("HP : {0}, MinDC : {1}, MaxDC : {2}", monOb.Info.Stats[Stat.HP], monOb.Stats[Stat.MinDC], monOb.Stats[Stat.MaxDC]), ChatType.System2); + break; + case ObjectType.Merchant: + NPCObject npcOb = (NPCObject)ob; + ReceiveChat("--NPC Info--", ChatType.System2); + ReceiveChat(string.Format("ID : {0}, Name : {1}", npcOb.Info.Index, npcOb.Name), ChatType.System2); + ReceiveChat(string.Format("X : {0}, Y : {1}", ob.CurrentLocation.X, ob.CurrentLocation.Y), ChatType.System2); + ReceiveChat(string.Format("File : {0}", npcOb.Info.FileName), ChatType.System2); + break; + } + } + break; + + case "CLEARQUESTS": + if (!IsGM && !Settings.TestServer) return; + + player = parts.Length > 1 && IsGM ? Envir.GetPlayer(parts[1]) : this; + + if (player == null) + { + ReceiveChat(parts[1] + " is not online", ChatType.System); + return; + } + + for (int i = player.CurrentQuests.Count - 1; i >= 0; i--) + { + SendUpdateQuest(player.CurrentQuests[i], QuestState.Remove); + } + + player.CompletedQuests.Clear(); + player.GetCompletedQuests(); + + break; + + case "SETQUEST": + if ((!IsGM && !Settings.TestServer) || parts.Length < 3) return; + + player = parts.Length > 3 && IsGM ? Envir.GetPlayer(parts[3]) : this; + + if (player == null) + { + ReceiveChat(parts[3] + " is not online", ChatType.System); + return; + } + + int.TryParse(parts[1], out int questID); + int.TryParse(parts[2], out int questState); + + if (questID < 1) return; + + var activeQuest = player.CurrentQuests.FirstOrDefault(e => e.Index == questID); + + //remove from active list + if (activeQuest != null) + { + player.SendUpdateQuest(activeQuest, QuestState.Remove); + } + + switch (questState) + { + case 0: //cancel + if (player.CompletedQuests.Contains(questID)) + { + player.CompletedQuests.Remove(questID); + } + break; + case 1: //complete + if (!player.CompletedQuests.Contains(questID)) + { + player.CompletedQuests.Add(questID); + } + break; + } + + player.GetCompletedQuests(); + break; + case "REVIVE": + if (!IsGM) return; + + if (parts.Length < 2) + { + RefreshStats(); + SetHP(Stats[Stat.HP]); + SetMP(Stats[Stat.MP]); + Revive(MaxHealth, true); + } + else + { + player = Envir.GetPlayer(parts[1]); + if (player == null) return; + + player.Revive(MaxHealth, true); + } + break; + case "DELETESKILL": + if ((!IsGM) || parts.Length < 2) return; + Spell skill1; + + if (!Enum.TryParse(parts.Length > 2 ? parts[2] : parts[1], true, out skill1)) return; + + if (skill1 == Spell.None) return; + + if (parts.Length > 2) + { + if (!IsGM) return; + player = Envir.GetPlayer(parts[1]); + + if (player == null) + { + ReceiveChat(string.Format("Player {0} was not found!", parts[1]), ChatType.System); + return; + } + } + else + { + player = this; + } + + if (player == null) return; + + var magics = new UserMagic(skill1); + bool removed = false; + + for (var i = player.Info.Magics.Count - 1; i >= 0; i--) + { + if (player.Info.Magics[i].Spell != skill1) continue; + + player.Info.Magics.RemoveAt(i); + player.Enqueue(new S.RemoveMagic { PlaceId = i }); + removed = true; + } + + if (removed) + { + ReceiveChat(string.Format("You have deleted skill {0} from player {1}", skill1.ToString(), player.Name), ChatType.Hint); + player.ReceiveChat(string.Format("{0} has been removed from you.", skill1), ChatType.Hint); + } + else + { + ReceiveChat(string.Format("Unable to delete skill, skill not found"), ChatType.Hint); + } + + break; + case "SETTIMER": + if (parts.Length < 4) return; + + string key = parts[1]; + + if (!int.TryParse(parts[2], out int seconds)) return; + if (!byte.TryParse(parts[3], out byte timerType)) return; + + SetTimer(key, seconds, timerType); + + break; + case "SETLIGHT": + if ((!IsGM) || parts.Length < 2) return; + + if (!byte.TryParse(parts[1], out byte light)) return; + + Light = light; + + Enqueue(GetUpdateInfo()); + Broadcast(GetUpdateInfo()); + break; + + case "ALLOWGROUP": + SwitchGroup(!AllowGroup); + ReceiveChat($"Allow Group: {AllowGroup}", ChatType.Group); + break; + + case "LEAVEGROUP": + LeaveGroup(); + break; + default: + break; + } + + foreach (string command in Envir.CustomCommands) + { + if (string.Compare(parts[0], command, true) != 0) continue; + + CallDefaultNPC(DefaultNPCType.CustomCommand, parts[0]); + } + } + else + { + message = String.Format("{0}:{1}", CurrentMap.Info.NoNames ? "?????" : Name, message); + + message = ProcessChatItems(message, null, linkedItems); + + p = new S.ObjectChat { ObjectID = ObjectID, Text = message, Type = ChatType.Normal }; + + Enqueue(p); + Broadcast(p); + } + } + private string ProcessChatItems(string text, List recipients, List chatItems) + { + if (chatItems == null) + { + return text; + } + + foreach (var chatItem in chatItems) + { + Regex r = new Regex(chatItem.RegexInternalName, RegexOptions.IgnoreCase); + + text = r.Replace(text, chatItem.InternalName, 1); + + UserItem[] array; + + switch (chatItem.Grid) + { + case MirGridType.Inventory: + array = Info.Inventory; + break; + case MirGridType.Storage: + array = Info.AccountInfo.Storage; + break; + default: + continue; + } + + UserItem item = null; + + for (int i = 0; i < array.Length; i++) + { + item = array[i]; + if (item == null || item.UniqueID != chatItem.UniqueID) continue; + break; + } + + if (item != null) + { + if (recipients == null) + { + for (int i = CurrentMap.Players.Count - 1; i >= 0; i--) + { + PlayerObject player = CurrentMap.Players[i]; + if (player == this) continue; + + if (player == null || player.Info == null || player.Node == null) continue; + + if (Functions.InRange(CurrentLocation, player.CurrentLocation, Globals.DataRange)) + { + player.CheckItem(item); + + if (!player.Connection.SentChatItem.Contains(item)) + { + player.Enqueue(new S.NewChatItem { Item = item }); + player.Connection.SentChatItem.Add(item); + } + } + } + } + else + { + for (int i = 0; i < recipients.Count; i++) + { + PlayerObject player = recipients[i]; + if (player == this) continue; + + if (player == null || player.Info == null || player.Node == null) continue; + + player.CheckItem(item); + + if (!player.Connection.SentChatItem.Contains(item)) + { + player.Enqueue(new S.NewChatItem { Item = item }); + player.Connection.SentChatItem.Add(item); + } + } + } + + if (!Connection.SentChatItem.Contains(item)) + { + Enqueue(new S.NewChatItem { Item = item }); + Connection.SentChatItem.Add(item); + } + } + } + + return text; + } + public void Turn(MirDirection dir) + { + if (CanMove) + { + ActionTime = Envir.Time + GetDelayTime(TurnDelay); + + Direction = dir; + if (CheckMovement(CurrentLocation)) return; + + SafeZoneInfo szi = CurrentMap.GetSafeZone(CurrentLocation); + + if (szi != null) + { + BindLocation = szi.Location; + BindMapIndex = CurrentMapIndex; + InSafeZone = true; + } + else + InSafeZone = false; + + Cell cell = CurrentMap.GetCell(CurrentLocation); + + for (int i = 0; i < cell.Objects.Count; i++) + { + if (cell.Objects[i].Race != ObjectType.Spell) continue; + SpellObject ob = (SpellObject)cell.Objects[i]; + + ob.ProcessSpell(this); + //break; + } + + if (TradePartner != null) + TradeCancel(); + + Broadcast(new S.ObjectTurn { ObjectID = ObjectID, Direction = Direction, Location = CurrentLocation }); + } + + Enqueue(new S.UserLocation { Direction = Direction, Location = CurrentLocation }); + } + public void Harvest(MirDirection dir) + { + if (!CanMove) + { + Enqueue(new S.UserLocation { Direction = Direction, Location = CurrentLocation }); + return; + } + + ActionTime = Envir.Time + HarvestDelay; + + Direction = dir; + + Enqueue(new S.UserLocation { Direction = Direction, Location = CurrentLocation }); + Broadcast(new S.ObjectHarvest { ObjectID = ObjectID, Direction = Direction, Location = CurrentLocation }); + + Point front = Front; + bool send = false; + for (int d = 0; d <= 1; d++) + { + for (int y = front.Y - d; y <= front.Y + d; y++) + { + if (y < 0) continue; + if (y >= CurrentMap.Height) break; + + for (int x = front.X - d; x <= front.X + d; x += Math.Abs(y - front.Y) == d ? 1 : d * 2) + { + if (x < 0) continue; + if (x >= CurrentMap.Width) break; + if (!CurrentMap.ValidPoint(x, y)) continue; + + Cell cell = CurrentMap.GetCell(x, y); + if (cell.Objects == null) continue; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + if (ob.Race != ObjectType.Monster || !ob.Dead || ob.Harvested) continue; + + if (ob.EXPOwner != null && ob.EXPOwner != this && !IsMember(ob)) + { + send = true; + continue; + } + + if (ob.Harvest(this)) return; + } + } + } + } + + if (send) + ReceiveChat("You do not own any nearby carcasses.", ChatType.System); + } + private void CompleteQuest(IList data) + { + QuestProgressInfo quest = (QuestProgressInfo)data[0]; + QuestAction questAction = (QuestAction)data[1]; + bool ignoreIfComplete = (bool)data[2]; + + if (quest == null) return; + + switch (questAction) + { + case QuestAction.TimeExpired: + { + if (ignoreIfComplete && quest.Completed) + { + return; + } + + AbandonQuest(quest.Info.Index); + } + break; + } + } + private void CompleteNPC(IList data) + { + uint npcid = (uint)data[0]; + int scriptid = (int)data[1]; + string page = (string)data[2]; + + if (data.Count == 5) + { + Map map = (Map)data[3]; + Point coords = (Point)data[4]; + + Teleport(map, coords); + } + + NPCDelayed = true; + + if (page.Length > 0) + { + var script = NPCScript.Get(scriptid); + script.Call(this, npcid, page.ToUpper()); + } + } + public override bool CheckMovement(Point location) + { + if (Envir.Time < MovementTime) return false; + + //Script triggered coords + for (int s = 0; s < CurrentMap.Info.ActiveCoords.Count; s++) + { + Point activeCoord = CurrentMap.Info.ActiveCoords[s]; + + if (activeCoord != location) continue; + + CallDefaultNPC(DefaultNPCType.MapCoord, CurrentMap.Info.FileName, activeCoord.X, activeCoord.Y); + } + + //Map movements + for (int i = 0; i < CurrentMap.Info.Movements.Count; i++) + { + MovementInfo info = CurrentMap.Info.Movements[i]; + + if (info.Source != location) continue; + + if (info.NeedMove) //use with ENTERMAP npc command + { + NPCData["NPCMoveMap"] = Envir.GetMap(info.MapIndex); + NPCData["NPCMoveCoord"] = info.Destination; + continue; + } + + Map temp = Envir.GetMap(info.MapIndex); + + if (temp == null || !temp.ValidPoint(info.Destination)) continue; + + CurrentMap.RemoveObject(this); + Broadcast(new S.ObjectRemove { ObjectID = ObjectID }); + + CompleteMapMovement(temp, info.Destination, CurrentMap, CurrentLocation); + return true; + } + + return false; + } + private void CompleteMapMovement(params object[] data) + { + if (this == null) return; + Map temp = (Map)data[0]; + Point destination = (Point)data[1]; + Map checkmap = (Map)data[2]; + Point checklocation = (Point)data[3]; + + if (CurrentMap != checkmap || CurrentLocation != checklocation) return; + + bool mapChanged = temp != CurrentMap; + + CurrentMap = temp; + CurrentLocation = destination; + + CurrentMap.AddObject(this); + + MovementTime = Envir.Time + MovementDelay; + + Enqueue(new S.MapChanged + { + MapIndex = CurrentMap.Info.Index, + FileName = CurrentMap.Info.FileName, + Title = CurrentMap.Info.Title, + MiniMap = CurrentMap.Info.MiniMap, + BigMap = CurrentMap.Info.BigMap, + Lights = CurrentMap.Info.Light, + Location = CurrentLocation, + Direction = Direction, + MapDarkLight = CurrentMap.Info.MapDarkLight, + Music = CurrentMap.Info.Music + }); + + GetObjects(); + + SafeZoneInfo szi = CurrentMap.GetSafeZone(CurrentLocation); + + if (szi != null) + { + BindLocation = szi.Location; + BindMapIndex = CurrentMapIndex; + InSafeZone = true; + } + else + InSafeZone = false; + + if (mapChanged) + { + CallDefaultNPC(DefaultNPCType.MapEnter, CurrentMap.Info.FileName); + GroupMemberMapNameChanged(); + } + GetPlayerLocation(); + + if (Info.Married != 0) + { + CharacterInfo Lover = Envir.GetCharacterInfo(Info.Married); + PlayerObject player = Envir.GetPlayer(Lover.Name); + + if (player != null) player.GetRelationship(false); + } + } + public bool TeleportEscape(int attempts) + { + Map temp = Envir.GetMap(BindMapIndex); + + for (int i = 0; i < attempts; i++) + { + Point location = new Point(BindLocation.X + Envir.Random.Next(-100, 100), + BindLocation.Y + Envir.Random.Next(-100, 100)); + + if (Teleport(temp, location)) return true; + } + + return false; + } + public override bool MagicTeleport(UserMagic magic) + { + Map temp = Envir.GetMap(BindMapIndex); + int mapSizeX = temp.Width / (magic.Level + 1); + int mapSizeY = temp.Height / (magic.Level + 1); + + for (int i = 0; i < 200; i++) + { + Point location = new Point(BindLocation.X + Envir.Random.Next(-mapSizeX, mapSizeX), + BindLocation.Y + Envir.Random.Next(-mapSizeY, mapSizeY)); + + if (Teleport(temp, location)) return true; + } + + return false; + } + + public override bool IsAttackTarget(HumanObject attacker) + { + if (attacker == null || attacker.Node == null) return false; + if (Dead || InSafeZone || attacker.InSafeZone || attacker == this || GMGameMaster) return false; + if (CurrentMap.Info.NoFight) return false; + + switch (attacker.AMode) + { + case AttackMode.All: + return true; + case AttackMode.Group: + return GroupMembers == null || !GroupMembers.Contains(attacker); + case AttackMode.Guild: + return MyGuild == null || MyGuild != attacker.MyGuild; + case AttackMode.EnemyGuild: + return MyGuild != null && MyGuild.IsEnemy(attacker.MyGuild); + case AttackMode.Peace: + return false; + case AttackMode.RedBrown: + return PKPoints >= 200 || Envir.Time < BrownTime; + } + + return true; + } + public override bool IsAttackTarget(MonsterObject attacker) + { + if (attacker == null || attacker.Node == null) return false; + if (Dead || attacker.Master == this || GMGameMaster) return false; + if (attacker.Info.AI == 6 || attacker.Info.AI == 58 || attacker.Info.AI == 113) return PKPoints >= 200; + if (attacker.Master == null) return true; + if (InSafeZone || attacker.InSafeZone || attacker.Master.InSafeZone) return false; + + if (LastHitter != attacker.Master && attacker.Master.LastHitter != this) + { + bool target = false; + + for (int i = 0; i < attacker.Master.Pets.Count; i++) + { + if (attacker.Master.Pets[i].Target != this) continue; + + target = true; + break; + } + + if (!target) + return false; + } + + switch (attacker.Master.AMode) + { + case AttackMode.All: + return true; + case AttackMode.Group: + return GroupMembers == null || !GroupMembers.Contains(attacker.Master); + case AttackMode.Guild: + return true; + case AttackMode.EnemyGuild: + return false; + case AttackMode.Peace: + return false; + case AttackMode.RedBrown: + return PKPoints >= 200 || Envir.Time < BrownTime; + } + + return true; + } + public override bool IsFriendlyTarget(HumanObject ally) + { + if (ally == this) return true; + + switch (ally.AMode) + { + case AttackMode.Group: + return GroupMembers != null && GroupMembers.Contains(ally); + case AttackMode.RedBrown: + return PKPoints < 200 & Envir.Time > BrownTime; + case AttackMode.Guild: + return MyGuild != null && MyGuild == ally.MyGuild; + case AttackMode.EnemyGuild: + return true; + } + return true; + } + public override bool IsFriendlyTarget(MonsterObject ally) + { + if (ally.Race != ObjectType.Monster) return false; + if (ally.Master == null) return false; + + switch (ally.Master.Race) + { + case ObjectType.Player: + if (!ally.Master.IsFriendlyTarget(this)) return false; + break; + case ObjectType.Monster: + return false; + } + + return true; + } + protected override void UpdateLooks(short OldLooks_Weapon) + { + base.UpdateLooks(OldLooks_Weapon); + } + public override Packet GetInfo() + { + //should never use this but i leave it in for safety + if (Observer) return null; + + string gName = ""; + string conquest = ""; + if (MyGuild != null) + { + gName = MyGuild.Name; + } + + return new S.ObjectPlayer + { + ObjectID = ObjectID, + Name = CurrentMap.Info.NoNames ? "?????" : Name, + NameColour = NameColour, + GuildName = CurrentMap.Info.NoNames ? "?????" : gName, + GuildRankName = CurrentMap.Info.NoNames ? "?????" : MyGuildRank != null ? MyGuildRank.Name : "", + Class = Class, + Gender = Gender, + Level = Level, + Location = CurrentLocation, + Direction = Direction, + Hair = Hair, + Weapon = Looks_Weapon, + Armour = Looks_Armour, + Light = Light, + Poison = CurrentPoison, + Dead = Dead, + Hidden = Hidden, + Effect = HasBuff(BuffType.MagicShield, out _) ? SpellEffect.MagicShieldUp : SpellEffect.None, + WingEffect = Looks_Wings, + + Buffs = Buffs.Where(d => d.Info.Visible).Select(e => e.Type).ToList(), + + LevelEffects = LevelEffects + }; + } + + public void RemoveItem(MirGridType grid, ulong id, int to) + { + S.RemoveItem p = new S.RemoveItem { Grid = grid, UniqueID = id, To = to, Success = false }; + UserItem[] toArray, fromArray; + MirGridType fromGrid; + switch (grid) + { + case MirGridType.Inventory: + toArray = Info.Inventory; + fromArray = Info.Equipment; + fromGrid = MirGridType.Equipment; + break; + case MirGridType.Storage: + if (NPCPage == null || !String.Equals(NPCPage.Key, NPCScript.StorageKey, StringComparison.CurrentCultureIgnoreCase)) + { + Enqueue(p); + return; + } + NPCObject ob = null; + for (int i = 0; i < CurrentMap.NPCs.Count; i++) + { + if (CurrentMap.NPCs[i].ObjectID != NPCObjectID) continue; + ob = CurrentMap.NPCs[i]; + break; + } + + if (ob == null || !Functions.InRange(ob.CurrentLocation, CurrentLocation, Globals.DataRange)) + { + Enqueue(p); + return; + } + toArray = Account.Storage; + fromArray = Info.Equipment; + fromGrid = MirGridType.Equipment; + break; + default: + Enqueue(p); + return; + } + + if (to < 0 || to >= toArray.Length) return; + + UserItem temp = null; + int index = -1; + + for (int i = 0; i < fromArray.Length; i++) + { + temp = fromArray[i]; + if (temp == null || temp.UniqueID != id) continue; + index = i; + break; + } + + if (temp == null || index == -1) + { + Enqueue(p); + return; + } + + if (temp.Cursed && !UnlockCurse) + { + Enqueue(p); + return; + } + + if (temp.WeddingRing != -1) + { + Enqueue(p); + return; + } + + if (temp.Info.Bind.HasFlag(BindMode.DontStore) && grid == MirGridType.Storage) + { + Enqueue(p); + return; + } + + if (!CanRemoveItem(grid, temp)) return; + + if (temp.Cursed) + UnlockCurse = false; + + if (toArray[to] == null) + { + fromArray[index] = null; + + toArray[to] = temp; + p.Success = true; + Enqueue(p); + RefreshStats(); + Broadcast(GetUpdateInfo()); + + Report.ItemMoved(temp, fromGrid, grid, index, to); + + return; + } + + Enqueue(p); + } + public void MoveItem(MirGridType grid, int from, int to) + { + S.MoveItem p = new S.MoveItem { Grid = grid, From = from, To = to, Success = false }; + UserItem[] array; + switch (grid) + { + case MirGridType.Inventory: + array = Info.Inventory; + break; + case MirGridType.Storage: + if (NPCPage == null || !String.Equals(NPCPage.Key, NPCScript.StorageKey, StringComparison.CurrentCultureIgnoreCase)) + { + Enqueue(p); + return; + } + NPCObject ob = null; + for (int i = 0; i < CurrentMap.NPCs.Count; i++) + { + if (CurrentMap.NPCs[i].ObjectID != NPCObjectID) continue; + ob = CurrentMap.NPCs[i]; + break; + } + + if (ob == null || !Functions.InRange(ob.CurrentLocation, CurrentLocation, Globals.DataRange)) + { + Enqueue(p); + return; + } + array = Account.Storage; + break; + case MirGridType.Trade: + array = Info.Trade; + TradeItem(); + break; + case MirGridType.Refine: + array = Info.Refine; + break; + default: + Enqueue(p); + return; + } + + if (from >= 0 && to >= 0 && from < array.Length && to < array.Length) + { + if (array[from] == null) + { + Report.ItemError(grid, grid, from, to); + ReceiveChat("Item Move Error - Please report the item you tried to move and the time", ChatType.System); + Enqueue(p); + return; + } + + UserItem i = array[to]; + array[to] = array[from]; + + Report.ItemMoved(array[to], grid, grid, from, to); + + array[from] = i; + + Report.ItemMoved(array[from], grid, grid, to, from); + + p.Success = true; + Enqueue(p); + return; + } + + Enqueue(p); + } + public void StoreItem(int from, int to) + { + S.StoreItem p = new S.StoreItem { From = from, To = to, Success = false }; + + if (NPCPage == null || !String.Equals(NPCPage.Key, NPCScript.StorageKey, StringComparison.CurrentCultureIgnoreCase)) + { + Enqueue(p); + return; + } + NPCObject ob = null; + for (int i = 0; i < CurrentMap.NPCs.Count; i++) + { + if (CurrentMap.NPCs[i].ObjectID != NPCObjectID) continue; + ob = CurrentMap.NPCs[i]; + break; + } + + if (ob == null || !Functions.InRange(ob.CurrentLocation, CurrentLocation, Globals.DataRange)) + { + Enqueue(p); + return; + } + + + if (from < 0 || from >= Info.Inventory.Length) + { + Enqueue(p); + return; + } + + if (to < 0 || to >= Account.Storage.Length) + { + Enqueue(p); + return; + } + + UserItem temp = Info.Inventory[from]; + + if (temp == null) + { + Enqueue(p); + return; + } + + if (temp.Info.Bind.HasFlag(BindMode.DontStore)) + { + Enqueue(p); + return; + } + + if (Account.Storage[to] == null) + { + Account.Storage[to] = temp; + Info.Inventory[from] = null; + RefreshBagWeight(); + + Report.ItemMoved(temp, MirGridType.Inventory, MirGridType.Storage, from, to); + + p.Success = true; + Enqueue(p); + return; + } + Enqueue(p); + } + public void TakeBackItem(int from, int to) + { + S.TakeBackItem p = new S.TakeBackItem { From = from, To = to, Success = false }; + + if (NPCPage == null || !String.Equals(NPCPage.Key, NPCScript.StorageKey, StringComparison.CurrentCultureIgnoreCase)) + { + Enqueue(p); + return; + } + NPCObject ob = null; + for (int i = 0; i < CurrentMap.NPCs.Count; i++) + { + if (CurrentMap.NPCs[i].ObjectID != NPCObjectID) continue; + ob = CurrentMap.NPCs[i]; + break; + } + + if (ob == null || !Functions.InRange(ob.CurrentLocation, CurrentLocation, Globals.DataRange)) + { + Enqueue(p); + return; + } + + + if (from < 0 || from >= Account.Storage.Length) + { + Enqueue(p); + return; + } + + if (to < 0 || to >= Info.Inventory.Length) + { + Enqueue(p); + return; + } + + UserItem temp = Account.Storage[from]; + + if (temp == null) + { + Enqueue(p); + return; + } + + if (Info.Inventory[to] == null) + { + Info.Inventory[to] = temp; + Account.Storage[from] = null; + + Report.ItemMoved(temp, MirGridType.Storage, MirGridType.Inventory, from, to); + + p.Success = true; + RefreshBagWeight(); + Enqueue(p); + + return; + } + Enqueue(p); + } + public void EquipItem(MirGridType grid, ulong id, int to) + { + S.EquipItem p = new S.EquipItem { Grid = grid, UniqueID = id, To = to, Success = false }; + + UserItem[] toArray = null; + MirGridType toGrid = MirGridType.Equipment; + HumanObject actor = this; + switch (grid) + { + case MirGridType.Inventory: + case MirGridType.Storage: + toArray = Info.Equipment; + break; + } + + if (toArray == null || to < 0 || to >= toArray.Length) + { + Enqueue(p); + return; + } + + UserItem[] array; + switch (grid) + { + case MirGridType.Inventory: + array = Info.Inventory; + break; + case MirGridType.Storage: + if (NPCPage == null || !String.Equals(NPCPage.Key, NPCScript.StorageKey, StringComparison.CurrentCultureIgnoreCase)) + { + Enqueue(p); + return; + } + NPCObject ob = null; + for (int i = 0; i < CurrentMap.NPCs.Count; i++) + { + if (CurrentMap.NPCs[i].ObjectID != NPCObjectID) continue; + ob = CurrentMap.NPCs[i]; + break; + } + + if (ob == null || !Functions.InRange(ob.CurrentLocation, CurrentLocation, Globals.DataRange)) + { + Enqueue(p); + return; + } + array = Account.Storage; + break; + default: + Enqueue(p); + return; + } + + int index = -1; + UserItem temp = null; + + for (int i = 0; i < array.Length; i++) + { + temp = array[i]; + if (temp == null || temp.UniqueID != id) continue; + index = i; + break; + } + + if (temp == null || index == -1) + { + Enqueue(p); + return; + } + if ((toArray[to] != null) && (toArray[to].Cursed) && (!UnlockCurse)) + { + Enqueue(p); + return; + } + + if ((temp.SoulBoundId != -1) && (temp.SoulBoundId != Info.Index)) + { + Enqueue(p); + return; + } + + if (toArray[to] != null) + if (toArray[to].WeddingRing != -1) + { + Enqueue(p); + return; + } + if (toArray[to] != null && + toArray[to].Info.Bind.HasFlag(BindMode.DontStore)) + { + Enqueue(p); + return; + } + + if (actor.CanEquipItem(temp, to)) + { + if (temp.Info.NeedIdentify && !temp.Identified) + { + temp.Identified = true; + Enqueue(new S.RefreshItem { Item = temp }); + } + if ((temp.Info.Bind.HasFlag(BindMode.BindOnEquip)) && (temp.SoulBoundId == -1)) + { + temp.SoulBoundId = Info.Index; + Enqueue(new S.RefreshItem { Item = temp }); + } + + if ((toArray[to] != null) && (toArray[to].Cursed) && (UnlockCurse)) + UnlockCurse = false; + + array[index] = toArray[to]; + + Report.ItemMoved(temp, toGrid, grid, to, index, "RemoveItem"); + + toArray[to] = temp; + + Report.ItemMoved(temp, grid, toGrid, index, to); + + p.Success = true; + Enqueue(p); + RefreshStats(); + + //Broadcast(GetUpdateInfo()); + return; + } + Enqueue(p); + } + public override void UseItem(ulong id) + { + S.UseItem p = new S.UseItem { UniqueID = id, Grid = MirGridType.Inventory, Success = false }; + + UserItem item = null; + int index = -1; + + for (int i = 0; i < Info.Inventory.Length; i++) + { + item = Info.Inventory[i]; + if (item == null || item.UniqueID != id) continue; + index = i; + break; + } + + if (item == null || index == -1 || !CanUseItem(item)) + { + Enqueue(p); + return; + } + + if (Dead && !(item.Info.Type == ItemType.Scroll && item.Info.Shape == 6)) + { + Enqueue(p); + return; + } + + switch (item.Info.Type) + { + case ItemType.Potion: + switch (item.Info.Shape) + { + case 0: //NormalPotion + PotHealthAmount = (ushort)Math.Min(ushort.MaxValue, PotHealthAmount + item.Info.Stats[Stat.HP]); + PotManaAmount = (ushort)Math.Min(ushort.MaxValue, PotManaAmount + item.Info.Stats[Stat.MP]); + break; + case 1: //SunPotion + ChangeHP(item.Info.Stats[Stat.HP]); + ChangeMP(item.Info.Stats[Stat.MP]); + break; + case 2: //MysteryWater + if (UnlockCurse) + { + ReceiveChat("You can already unequip a cursed item.", ChatType.Hint); + Enqueue(p); + return; + } + ReceiveChat("You can now unequip a cursed item.", ChatType.Hint); + UnlockCurse = true; + break; + case 3: //Buff + { + int time = item.Info.Durability; + + if (item.GetTotal(Stat.MaxDC) > 0) + AddBuff(BuffType.Impact, this, time * Settings.Minute, new Stats { [Stat.MaxDC] = item.GetTotal(Stat.MaxDC) }); + + if (item.GetTotal(Stat.MaxMC) > 0) + AddBuff(BuffType.Magic, this, time * Settings.Minute, new Stats { [Stat.MaxMC] = item.GetTotal(Stat.MaxMC) }); + + if (item.GetTotal(Stat.MaxSC) > 0) + AddBuff(BuffType.Taoist, this, time * Settings.Minute, new Stats { [Stat.MaxSC] = item.GetTotal(Stat.MaxSC) }); + + if (item.GetTotal(Stat.AttackSpeed) > 0) + AddBuff(BuffType.Storm, this, time * Settings.Minute, new Stats { [Stat.AttackSpeed] = item.GetTotal(Stat.AttackSpeed) }); + + if (item.GetTotal(Stat.HP) > 0) + AddBuff(BuffType.HealthAid, this, time * Settings.Minute, new Stats { [Stat.HP] = item.GetTotal(Stat.HP) }); + + if (item.GetTotal(Stat.MP) > 0) + AddBuff(BuffType.ManaAid, this, time * Settings.Minute, new Stats { [Stat.MP] = item.GetTotal(Stat.MP) }); + + if (item.GetTotal(Stat.MaxAC) > 0) + AddBuff(BuffType.Defence, this, time * Settings.Minute, new Stats { [Stat.MaxAC] = item.GetTotal(Stat.MaxAC) }); + + if (item.GetTotal(Stat.MaxMAC) > 0) + AddBuff(BuffType.MagicDefence, this, time * Settings.Minute, new Stats { [Stat.MaxMAC] = item.GetTotal(Stat.MaxMAC) }); + + if (item.GetTotal(Stat.BagWeight) > 0) + AddBuff(BuffType.BagWeight, this, time * Settings.Minute, new Stats { [Stat.BagWeight] = item.GetTotal(Stat.BagWeight) }); + } + break; + case 4: //Exp + { + int time = item.Info.Durability; + AddBuff(BuffType.Exp, this, Settings.Minute * time, new Stats { [Stat.ExpRatePercent] = item.GetTotal(Stat.Luck) }); + } + break; + case 5: //Drop + { + int time = item.Info.Durability; + AddBuff(BuffType.Drop, this, Settings.Minute * time, new Stats { [Stat.ItemDropRatePercent] = item.GetTotal(Stat.Luck) }); + } + break; + } + break; + case ItemType.Scroll: + UserItem temp; + switch (item.Info.Shape) + { + case 0: //DE + if (!TeleportEscape(20)) + { + Enqueue(p); + return; + } + foreach (DelayedAction ac in ActionList.Where(u => u.Type == DelayedType.NPC)) + { + ac.FlaggedToRemove = true; + } + break; + case 1: //TT + if (!Teleport(Envir.GetMap(BindMapIndex), BindLocation)) + { + Enqueue(p); + return; + } + foreach (DelayedAction ac in ActionList.Where(u => u.Type == DelayedType.NPC)) + { + ac.FlaggedToRemove = true; + } + break; + case 2: //RT + if (!TeleportRandom(200, item.Info.Durability)) + { + Enqueue(p); + return; + } + foreach (DelayedAction ac in ActionList.Where(u => u.Type == DelayedType.NPC)) + { + ac.FlaggedToRemove = true; + } + break; + case 3: //BenedictionOil + if (!TryLuckWeapon()) + { + Enqueue(p); + return; + } + break; + case 4: //RepairOil + temp = Info.Equipment[(int)EquipmentSlot.Weapon]; + if (temp == null || temp.MaxDura == temp.CurrentDura) + { + Enqueue(p); + return; + } + if (temp.Info.Bind.HasFlag(BindMode.DontRepair)) + { + Enqueue(p); + return; + } + temp.MaxDura = (ushort)Math.Max(0, temp.MaxDura - Math.Min(5000, temp.MaxDura - temp.CurrentDura) / 30); + + temp.CurrentDura = (ushort)Math.Min(temp.MaxDura, temp.CurrentDura + 5000); + temp.DuraChanged = false; + + ReceiveChat("Your weapon has been partially repaired", ChatType.Hint); + Enqueue(new S.ItemRepaired { UniqueID = temp.UniqueID, MaxDura = temp.MaxDura, CurrentDura = temp.CurrentDura }); + break; + case 5: //WarGodOil + temp = Info.Equipment[(int)EquipmentSlot.Weapon]; + if (temp == null || temp.MaxDura == temp.CurrentDura) + { + Enqueue(p); + return; + } + if (temp.Info.Bind.HasFlag(BindMode.DontRepair) || (temp.Info.Bind.HasFlag(BindMode.NoSRepair))) + { + Enqueue(p); + return; + } + temp.CurrentDura = temp.MaxDura; + temp.DuraChanged = false; + + ReceiveChat("Your weapon has been completely repaired", ChatType.Hint); + Enqueue(new S.ItemRepaired { UniqueID = temp.UniqueID, MaxDura = temp.MaxDura, CurrentDura = temp.CurrentDura }); + break; + case 6: //ResurrectionScroll + if (CurrentMap.Info.NoReincarnation) + { + ReceiveChat(string.Format("Cannot use on this map"), ChatType.System); + Enqueue(p); + return; + } + if (Dead) + { + MP = Stats[Stat.MP]; + Revive(MaxHealth, true); + } + break; + case 7: //CreditScroll + if (item.Info.Price > 0) + { + GainCredit(item.Info.Price); + ReceiveChat(String.Format("{0} Credits have been added to your Account", item.Info.Price), ChatType.Hint); + } + break; + case 8: //MapShoutScroll + HasMapShout = true; + ReceiveChat("You have been given one free shout across your current map", ChatType.Hint); + break; + case 9://ServerShoutScroll + HasServerShout = true; + ReceiveChat("You have been given one free shout across the server", ChatType.Hint); + break; + case 10://GuildSkillScroll + MyGuild.NewBuff(item.Info.Effect, false); + break; + case 12://LotteryTicket + if (Envir.Random.Next(item.Info.Effect * 32) == 1) // 1st prize : 1,000,000 + { + ReceiveChat("You won 1st Prize! Received 1,000,000 gold", ChatType.Hint); + GainGold(1000000); + } + else if (Envir.Random.Next(item.Info.Effect * 16) == 1) // 2nd prize : 200,000 + { + ReceiveChat("You won 2nd Prize! Received 200,000 gold", ChatType.Hint); + GainGold(200000); + } + else if (Envir.Random.Next(item.Info.Effect * 8) == 1) // 3rd prize : 100,000 + { + ReceiveChat("You won 3rd Prize! Received 100,000 gold", ChatType.Hint); + GainGold(100000); + } + else if (Envir.Random.Next(item.Info.Effect * 4) == 1) // 4th prize : 10,000 + { + ReceiveChat("You won 4th Prize! Received 10,000 gold", ChatType.Hint); + GainGold(10000); + } + else if (Envir.Random.Next(item.Info.Effect * 2) == 1) // 5th prize : 1,000 + { + ReceiveChat("You won 5th Prize! Received 1,000 gold", ChatType.Hint); + GainGold(1000); + } + else if (Envir.Random.Next(item.Info.Effect) == 1) // 6th prize 500 + { + ReceiveChat("You won 6th Prize! Received 500 gold", ChatType.Hint); + GainGold(500); + } + else + { + ReceiveChat("You haven't won anything.", ChatType.Hint); + } + break; + } + break; + case ItemType.Book: + UserMagic magic = new UserMagic((Spell)item.Info.Shape); + + if (magic.Info == null) + { + Enqueue(p); + return; + } + + Info.Magics.Add(magic); + SendMagicInfo(magic); + RefreshStats(); + break; + case ItemType.Script: + CallDefaultNPC(DefaultNPCType.UseItem, item.Info.Shape); + break; + default: + return; + } + + if (item.Count > 1) item.Count--; + else Info.Inventory[index] = null; + RefreshBagWeight(); + + Report.ItemChanged(item, 1, 1); + + p.Success = true; + Enqueue(p); + } + public void SplitItem(MirGridType grid, ulong id, ushort count) + { + S.SplitItem1 p = new S.SplitItem1 { Grid = grid, UniqueID = id, Count = count, Success = false }; + UserItem[] array; + switch (grid) + { + case MirGridType.Inventory: + array = Info.Inventory; + break; + case MirGridType.Storage: + if (NPCPage == null || !String.Equals(NPCPage.Key, NPCScript.StorageKey, StringComparison.CurrentCultureIgnoreCase)) + { + Enqueue(p); + return; + } + NPCObject ob = null; + for (int i = 0; i < CurrentMap.NPCs.Count; i++) + { + if (CurrentMap.NPCs[i].ObjectID != NPCObjectID) continue; + ob = CurrentMap.NPCs[i]; + break; + } + + if (ob == null || !Functions.InRange(ob.CurrentLocation, CurrentLocation, Globals.DataRange)) + { + Enqueue(p); + return; + } + array = Account.Storage; + break; + default: + Enqueue(p); + return; + } + + UserItem temp = null; + + + for (int i = 0; i < array.Length; i++) + { + if (array[i] == null || array[i].UniqueID != id) continue; + temp = array[i]; + break; + } + + if (temp == null || count >= temp.Count || FreeSpace(array) == 0 || count < 1) + { + Enqueue(p); + return; + } + + temp.Count -= count; + + var originalItem = temp; + + temp = Envir.CreateFreshItem(temp.Info); + temp.Count = count; + + Report.ItemSplit(originalItem, temp, grid); + + p.Success = true; + Enqueue(p); + Enqueue(new S.SplitItem { Item = temp, Grid = grid }); + + if (grid == MirGridType.Inventory && (temp.Info.Type == ItemType.Potion || temp.Info.Type == ItemType.Scroll || (temp.Info.Type == ItemType.Script && temp.Info.Effect == 1))) + { + if (temp.Info.Type == ItemType.Potion || temp.Info.Type == ItemType.Scroll || (temp.Info.Type == ItemType.Script && temp.Info.Effect == 1)) + { + for (int i = PotionBeltMinimum; i < PotionBeltMaximum; i++) + { + if (array[i] != null) continue; + array[i] = temp; + RefreshBagWeight(); + return; + } + } + } + + for (int i = BeltSize; i < array.Length; i++) + { + if (array[i] != null) continue; + array[i] = temp; + RefreshBagWeight(); + return; + } + + for (int i = 0; i < BeltSize; i++) + { + if (array[i] != null) continue; + array[i] = temp; + RefreshBagWeight(); + return; + } + } + public void MergeItem(MirGridType gridFrom, MirGridType gridTo, ulong fromID, ulong toID) + { + S.MergeItem p = new S.MergeItem { GridFrom = gridFrom, GridTo = gridTo, IDFrom = fromID, IDTo = toID, Success = false }; + + UserItem[] arrayFrom; + + switch (gridFrom) + { + case MirGridType.Inventory: + arrayFrom = Info.Inventory; + break; + case MirGridType.Storage: + if (NPCPage == null || !String.Equals(NPCPage.Key, NPCScript.StorageKey, StringComparison.CurrentCultureIgnoreCase)) + { + Enqueue(p); + return; + } + NPCObject ob = null; + for (int i = 0; i < CurrentMap.NPCs.Count; i++) + { + if (CurrentMap.NPCs[i].ObjectID != NPCObjectID) continue; + ob = CurrentMap.NPCs[i]; + break; + } + + if (ob == null || !Functions.InRange(ob.CurrentLocation, CurrentLocation, Globals.DataRange)) + { + Enqueue(p); + return; + } + arrayFrom = Account.Storage; + break; + case MirGridType.Equipment: + arrayFrom = Info.Equipment; + break; + default: + Enqueue(p); + return; + } + + UserItem[] arrayTo; + switch (gridTo) + { + case MirGridType.Inventory: + arrayTo = Info.Inventory; + break; + case MirGridType.Storage: + if (NPCPage == null || !String.Equals(NPCPage.Key, NPCScript.StorageKey, StringComparison.CurrentCultureIgnoreCase)) + { + Enqueue(p); + return; + } + NPCObject ob = null; + for (int i = 0; i < CurrentMap.NPCs.Count; i++) + { + if (CurrentMap.NPCs[i].ObjectID != NPCObjectID) continue; + ob = CurrentMap.NPCs[i]; + break; + } + + if (ob == null || !Functions.InRange(ob.CurrentLocation, CurrentLocation, Globals.DataRange)) + { + Enqueue(p); + return; + } + arrayTo = Account.Storage; + break; + case MirGridType.Equipment: + arrayTo = Info.Equipment; + break; + default: + Enqueue(p); + return; + } + + UserItem tempFrom = null; + int index = -1; + + for (int i = 0; i < arrayFrom.Length; i++) + { + if (arrayFrom[i] == null || arrayFrom[i].UniqueID != fromID) continue; + index = i; + tempFrom = arrayFrom[i]; + break; + } + + if (tempFrom == null || tempFrom.Info.StackSize == 1 || index == -1) + { + Enqueue(p); + return; + } + + + UserItem tempTo = null; + int toIndex = -1; + + for (int i = 0; i < arrayTo.Length; i++) + { + if (arrayTo[i] == null || arrayTo[i].UniqueID != toID) continue; + toIndex = i; + tempTo = arrayTo[i]; + break; + } + + if (tempTo == null || tempTo.Info != tempFrom.Info || tempTo.Count == tempTo.Info.StackSize) + { + Enqueue(p); + return; + } + + if (tempFrom.Count <= tempTo.Info.StackSize - tempTo.Count) + { + tempTo.Count += tempFrom.Count; + arrayFrom[index] = null; + } + else + { + tempFrom.Count -= (ushort)(tempTo.Info.StackSize - tempTo.Count); + tempTo.Count = tempTo.Info.StackSize; + } + + Report.ItemMerged(tempFrom, tempTo, index, toIndex, gridFrom, gridTo); + + TradeUnlock(); + + p.Success = true; + Enqueue(p); + RefreshStats(); + } + public void CombineItem(MirGridType grid, ulong fromID, ulong toID) + { + S.CombineItem p = new S.CombineItem { Grid = grid, IDFrom = fromID, IDTo = toID, Success = false }; + + UserItem[] array = null; + switch (grid) + { + case MirGridType.Inventory: + array = Info.Inventory; + break; + } + + if (array == null) + { + Enqueue(p); + return; + } + + UserItem tempFrom = null; + UserItem tempTo = null; + int indexFrom = -1; + int indexTo = -1; + + if (Dead) + { + Enqueue(p); + return; + } + + for (int i = 0; i < array.Length; i++) + { + if (array[i] == null || array[i].UniqueID != fromID) continue; + indexFrom = i; + tempFrom = array[i]; + break; + } + + if (tempFrom == null || indexFrom == -1) + { + Enqueue(p); + return; + } + + for (int i = 0; i < array.Length; i++) + { + if (array[i] == null || array[i].UniqueID != toID) continue; + indexTo = i; + tempTo = array[i]; + break; + } + + if (tempTo == null || indexTo == -1) + { + Enqueue(p); + return; + } + + if ((byte)tempTo.Info.Type < 1 || (byte)tempTo.Info.Type > 11) + { + Enqueue(p); + return; + } + + bool canRepair = false, canUpgrade = false, canSeal = false; + + if (tempFrom.Info.Type != ItemType.Gem) + { + Enqueue(p); + return; + } + + switch (tempFrom.Info.Shape) + { + case 1: //BoneHammer + case 2: //SewingSupplies + case 5: //SpecialHammer + case 6: //SpecialSewingSupplies + + if (tempTo.Info.Bind.HasFlag(BindMode.DontRepair)) + { + Enqueue(p); + return; + } + + switch (tempTo.Info.Type) + { + case ItemType.Weapon: + case ItemType.Necklace: + case ItemType.Ring: + case ItemType.Bracelet: + if (tempFrom.Info.Shape == 1 || tempFrom.Info.Shape == 5) + canRepair = true; + break; + case ItemType.Armour: + case ItemType.Helmet: + if (tempFrom.Info.Shape == 2 || tempFrom.Info.Shape == 6) + canRepair = true; + break; + default: + canRepair = false; + break; + } + + if (canRepair != true) + { + Enqueue(p); + return; + } + + if (tempTo.CurrentDura == tempTo.MaxDura) + { + ReceiveChat("Item does not need to be repaired.", ChatType.Hint); + Enqueue(p); + return; + } + break; + case 8: //Seal + if (tempTo.Info.Bind.HasFlag(BindMode.DontUpgrade) || tempTo.Info.Unique != SpecialItemMode.None) + { + Enqueue(p); + return; + } + if (tempTo.SealedInfo != null && tempTo.SealedInfo.ExpiryDate > Envir.Now) + { + ReceiveChat("Item is already sealed.", ChatType.Hint); + Enqueue(p); + return; + } + if (tempTo.SealedInfo != null && tempTo.SealedInfo.NextSealDate > Envir.Now) + { + double remainingSeconds = (tempTo.SealedInfo.NextSealDate - Envir.Now).TotalSeconds; + + ReceiveChat($"Item cannot be resealed for another {Functions.PrintTimeSpanFromSeconds(remainingSeconds, false)}.", ChatType.Hint); + Enqueue(p); + return; + } + + canSeal = true; + break; + case 3: //gems + case 4: //orbs + if (tempTo.Info.Bind.HasFlag(BindMode.DontUpgrade) || tempTo.Info.Unique != SpecialItemMode.None) + { + Enqueue(p); + return; + } + + if ((tempTo.GemCount >= tempFrom.Info.Stats[Stat.CriticalDamage]) || (GetCurrentStatCount(tempFrom, tempTo) >= tempFrom.Info.Stats[Stat.HPDrainRatePercent])) + { + ReceiveChat("Item has already reached maximum added stats.", ChatType.Hint); + Enqueue(p); + return; + } + + int successchance = tempFrom.Info.Stats[Stat.Reflect]; + + // Gem is only affected by the stat applied. + // Drop rate per gem won't work if gems add more than 1 stat, i.e. DC + 2 per gem. + if (Settings.GemStatIndependent) + { + Stat GemType = GetGemType(tempFrom); + + switch (GemType) + { + case Stat.MaxAC: + successchance *= (int)tempTo.AddedStats[Stat.MaxAC]; + break; + + case Stat.MaxMAC: + successchance *= (int)tempTo.AddedStats[Stat.MaxMAC]; + break; + + case Stat.MaxDC: + successchance *= (int)tempTo.AddedStats[Stat.MaxDC]; + break; + + case Stat.MaxMC: + successchance *= (int)tempTo.AddedStats[Stat.MaxMC]; + break; + + case Stat.MaxSC: + successchance *= (int)tempTo.AddedStats[Stat.MaxSC]; + break; + + case Stat.AttackSpeed: + successchance *= (int)tempTo.AddedStats[Stat.AttackSpeed]; + break; + + case Stat.Accuracy: + successchance *= (int)tempTo.AddedStats[Stat.Accuracy]; + break; + + case Stat.Agility: + successchance *= (int)tempTo.AddedStats[Stat.Agility]; + break; + + case Stat.Freezing: + successchance *= (int)tempTo.AddedStats[Stat.Freezing]; + break; + + case Stat.PoisonAttack: + successchance *= (int)tempTo.AddedStats[Stat.PoisonAttack]; + break; + + case Stat.MagicResist: + successchance *= (int)tempTo.AddedStats[Stat.MagicResist]; + break; + + case Stat.PoisonResist: + successchance *= (int)tempTo.AddedStats[Stat.PoisonResist]; + break; + + // These attributes may not work as more than 1 stat is + // added per gem, i.e + 40 HP. + + case Stat.HP: + successchance *= (int)tempTo.AddedStats[Stat.HP]; + break; + + case Stat.MP: + successchance *= (int)tempTo.AddedStats[Stat.MP]; + break; + + case Stat.HealthRecovery: + successchance *= (int)tempTo.AddedStats[Stat.HealthRecovery]; + break; + + // I don't know if this conflicts with benes. + case Stat.Luck: + successchance *= (int)tempTo.AddedStats[Stat.Luck]; + break; + + case Stat.Strong: + successchance *= (int)tempTo.AddedStats[Stat.Strong]; + break; + + case Stat.PoisonRecovery: + successchance *= (int)tempTo.AddedStats[Stat.PoisonRecovery]; + break; + + + /* + Currently not supported. + Missing item definitions. + + case StatType.HP_Precent: + case StatType.MP_Precent: + case StatType.MP_Regen: + case StatType.Holy: + case StatType.Durability: + + + */ + default: + successchance *= (int)tempTo.GemCount; + break; + + } + } + // Gem is affected by the total added stats on the item. + else + { + successchance *= (int)tempTo.GemCount; + } + + successchance = successchance >= tempFrom.Info.Stats[Stat.CriticalRate] ? 0 : (tempFrom.Info.Stats[Stat.CriticalRate] - successchance) + Stats[Stat.GemRatePercent]; + + //check if combine will succeed + bool succeeded = Envir.Random.Next(100) < successchance; + canUpgrade = true; + + byte itemType = (byte)tempTo.Info.Type; + + if (!ValidGemForItem(tempFrom, itemType)) + { + ReceiveChat("Invalid combination", ChatType.Hint); + Enqueue(p); + return; + } + + if (tempFrom.GetTotal(Stat.MaxDC) > 0) + { + if (succeeded) tempTo.AddedStats[Stat.MaxDC] += tempFrom.GetTotal(Stat.MaxDC); + } + + else if (tempFrom.GetTotal(Stat.MaxMC) > 0) + { + if (succeeded) tempTo.AddedStats[Stat.MaxMC] += tempFrom.GetTotal(Stat.MaxMC); + } + + else if (tempFrom.GetTotal(Stat.MaxSC) > 0) + { + if (succeeded) tempTo.AddedStats[Stat.MaxSC] += tempFrom.GetTotal(Stat.MaxSC); + } + + else if (tempFrom.GetTotal(Stat.MaxAC) > 0) + { + if (succeeded) tempTo.AddedStats[Stat.MaxAC] += tempFrom.GetTotal(Stat.MaxAC); + } + + else if (tempFrom.GetTotal(Stat.MaxMAC) > 0) + { + if (succeeded) tempTo.AddedStats[Stat.MaxMAC] += tempFrom.GetTotal(Stat.MaxMAC); + } + + else if ((tempFrom.Info.Durability) > 0) + { + if (succeeded) tempTo.MaxDura = (ushort)Math.Min(ushort.MaxValue, tempTo.MaxDura + tempFrom.MaxDura); + } + + else if (tempFrom.GetTotal(Stat.AttackSpeed) > 0) + { + if (succeeded) tempTo.AddedStats[Stat.AttackSpeed] += tempFrom.GetTotal(Stat.AttackSpeed); + } + + else if (tempFrom.GetTotal(Stat.Agility) > 0) + { + if (succeeded) tempTo.AddedStats[Stat.Agility] += tempFrom.GetTotal(Stat.Agility); + } + + else if (tempFrom.GetTotal(Stat.Accuracy) > 0) + { + if (succeeded) tempTo.AddedStats[Stat.Accuracy] += tempFrom.GetTotal(Stat.Accuracy); + } + + else if (tempFrom.GetTotal(Stat.PoisonAttack) > 0) + { + if (succeeded) tempTo.AddedStats[Stat.PoisonAttack] += tempFrom.GetTotal(Stat.PoisonAttack); + } + + else if (tempFrom.GetTotal(Stat.Freezing) > 0) + { + if (succeeded) tempTo.AddedStats[Stat.Freezing] += tempFrom.GetTotal(Stat.Freezing); + } + + else if (tempFrom.GetTotal(Stat.MagicResist) > 0) + { + if (succeeded) tempTo.AddedStats[Stat.MagicResist] += tempFrom.GetTotal(Stat.MagicResist); + } + + else if (tempFrom.GetTotal(Stat.PoisonResist) > 0) + { + if (succeeded) tempTo.AddedStats[Stat.PoisonResist] += tempFrom.GetTotal(Stat.PoisonResist); + } + else if (tempFrom.GetTotal(Stat.Luck) > 0) + { + if (succeeded) tempTo.AddedStats[Stat.Luck] += tempFrom.GetTotal(Stat.Luck); + } + else + { + ReceiveChat("Cannot combine these items.", ChatType.Hint); + Enqueue(p); + return; + } + + if (!succeeded) + { + if ((tempFrom.Info.Shape == 3) && (Envir.Random.Next(15) < 3)) + { + //item destroyed + ReceiveChat("Item has been destroyed.", ChatType.Hint); + Report.ItemChanged(array[indexTo], 1, 1, "CombineItem (Item Destroyed)"); + + array[indexTo] = null; + p.Destroy = true; + } + else + { + //upgrade has no effect + ReceiveChat("Upgrade has no effect.", ChatType.Hint); + } + + canUpgrade = false; + } + break; + default: + Enqueue(p); + return; + } + + + switch (grid) + { + case MirGridType.Inventory: + RefreshBagWeight(); + break; + } + + if (canRepair && array[indexTo] != null) + { + switch (tempTo.Info.Shape) + { + case 1: + case 2: + { + tempTo.MaxDura = (ushort)Math.Max(0, Math.Min(tempTo.MaxDura, tempTo.MaxDura - 100 * Envir.Random.Next(10))); + } + break; + default: + break; + } + tempTo.CurrentDura = tempTo.MaxDura; + tempTo.DuraChanged = false; + + ReceiveChat("Item has been repaired.", ChatType.Hint); + Enqueue(new S.ItemRepaired { UniqueID = tempTo.UniqueID, MaxDura = tempTo.MaxDura, CurrentDura = tempTo.CurrentDura }); + } + + if (canUpgrade && array[indexTo] != null) + { + tempTo.GemCount++; + ReceiveChat("Item has been upgraded.", ChatType.Hint); + Enqueue(new S.ItemUpgraded { Item = tempTo }); + } + + if (canSeal && array[indexTo] != null) + { + var minutes = tempFrom.CurrentDura; + tempTo.SealedInfo = new SealedInfo + { + ExpiryDate = Envir.Now.AddMinutes(minutes), + NextSealDate = Envir.Now.AddMinutes(minutes).AddMinutes(Settings.ItemSealDelay) + }; + + ReceiveChat($"Item sealed for {Functions.PrintTimeSpanFromSeconds(minutes * 60)}.", ChatType.Hint); + + Enqueue(new S.ItemSealChanged { UniqueID = tempTo.UniqueID, ExpiryDate = tempTo.SealedInfo.ExpiryDate }); + } + + if (tempFrom.Count > 1) tempFrom.Count--; + else array[indexFrom] = null; + + Report.ItemCombined(tempFrom, tempTo, indexFrom, indexTo, grid); + + //item merged ok + TradeUnlock(); + + p.Success = true; + Enqueue(p); + } + private bool ValidGemForItem(UserItem Gem, byte itemtype) + { + switch (itemtype) + { + case 1: //weapon + if (Gem.Info.Unique.HasFlag(SpecialItemMode.Paralize)) + return true; + break; + case 2: //Armour + if (Gem.Info.Unique.HasFlag(SpecialItemMode.Teleport)) + return true; + break; + case 4: //Helmet + if (Gem.Info.Unique.HasFlag(SpecialItemMode.ClearRing)) + return true; + break; + case 5: //necklace + if (Gem.Info.Unique.HasFlag(SpecialItemMode.Protection)) + return true; + break; + case 6: //bracelet + if (Gem.Info.Unique.HasFlag(SpecialItemMode.Revival)) + return true; + break; + case 7: //ring + if (Gem.Info.Unique.HasFlag(SpecialItemMode.Muscle)) + return true; + break; + case 8: //amulet + if (Gem.Info.Unique.HasFlag(SpecialItemMode.Flame)) + return true; + break; + case 9://belt + if (Gem.Info.Unique.HasFlag(SpecialItemMode.Healing)) + return true; + break; + case 10: //boots + if (Gem.Info.Unique.HasFlag(SpecialItemMode.Probe)) + return true; + break; + case 11: //stone + if (Gem.Info.Unique.HasFlag(SpecialItemMode.Skill)) + return true; + break; + case 12:///torch + if (Gem.Info.Unique.HasFlag(SpecialItemMode.NoDuraLoss)) + return true; + break; + } + return false; + } + //Gems granting multiple stat types are not compatiable with this method. + private Stat GetGemType(UserItem gem) + { + if (gem.GetTotal(Stat.MaxDC) > 0) + return Stat.MaxDC; + + else if (gem.GetTotal(Stat.MaxMC) > 0) + return Stat.MaxMC; + + else if (gem.GetTotal(Stat.MaxSC) > 0) + return Stat.MaxSC; + + else if (gem.GetTotal(Stat.MaxAC) > 0) + return Stat.MaxAC; + + else if (gem.GetTotal(Stat.MaxMAC) > 0) + return Stat.MaxMAC; + + else if (gem.GetTotal(Stat.AttackSpeed) > 0) + return Stat.AttackSpeed; + + else if (gem.GetTotal(Stat.Agility) > 0) + return Stat.Agility; + + else if (gem.GetTotal(Stat.Accuracy) > 0) + return Stat.Accuracy; + + else if (gem.GetTotal(Stat.PoisonAttack) > 0) + return Stat.PoisonAttack; + + else if (gem.GetTotal(Stat.Freezing) > 0) + return Stat.Freezing; + + else if (gem.GetTotal(Stat.MagicResist) > 0) + return Stat.MagicResist; + + else if (gem.GetTotal(Stat.PoisonResist) > 0) + return Stat.PoisonResist; + + else if (gem.GetTotal(Stat.Luck) > 0) + return Stat.Luck; + + else if (gem.GetTotal(Stat.PoisonRecovery) > 0) + return Stat.PoisonRecovery; + + else if (gem.GetTotal(Stat.HP) > 0) + return Stat.HP; + + else if (gem.GetTotal(Stat.MP) > 0) + return Stat.MP; + + else if (gem.GetTotal(Stat.HealthRecovery) > 0) + return Stat.HealthRecovery; + + // These may be incomplete. Item definitions may be missing? + + else if (gem.GetTotal(Stat.HPRatePercent) > 0) + return Stat.HPRatePercent; + + else if (gem.GetTotal(Stat.MPRatePercent) > 0) + return Stat.MPRatePercent; + + else if (gem.GetTotal(Stat.SpellRecovery) > 0) + return Stat.SpellRecovery; + + else if (gem.GetTotal(Stat.Holy) > 0) + return Stat.Holy; + + else if (gem.GetTotal(Stat.Strong) > 0) + return Stat.Strong; + + else if (gem.GetTotal(Stat.HPDrainRatePercent) > 0) + return Stat.HPDrainRatePercent; + + return Stat.Unknown; + } + //Gems granting multiple stat types are not compatible with this method. + public void DropItem(ulong id, ushort count) + { + S.DropItem p = new S.DropItem { UniqueID = id, Count = count, Success = false }; + if (Dead) + { + Enqueue(p); + return; + } + + if (CurrentMap.Info.NoThrowItem) + { + ReceiveChat(GameLanguage.CanNotDrop, ChatType.System); + Enqueue(p); + return; + } + + UserItem temp = null; + int index = -1; + + + for (int i = 0; i < Info.Inventory.Length; i++) + { + temp = Info.Inventory[i]; + if (temp == null || temp.UniqueID != id) continue; + index = i; + break; + } + + if (temp == null || index == -1 || count > temp.Count || count < 1) + { + Enqueue(p); + return; + } + + if (temp.Info.Bind.HasFlag(BindMode.DontDrop)) + { + Enqueue(p); + return; + } + + if (temp.Count == count) + { + if (!temp.Info.Bind.HasFlag(BindMode.DestroyOnDrop)) + if (!DropItem(temp)) + { + Enqueue(p); + return; + } + + Info.Inventory[index] = null; + } + else + { + UserItem temp2 = Envir.CreateFreshItem(temp.Info); + temp2.Count = count; + if (!temp.Info.Bind.HasFlag(BindMode.DestroyOnDrop)) + if (!DropItem(temp2)) + { + Enqueue(p); + return; + } + temp.Count -= count; + } + p.Success = true; + Enqueue(p); + + RefreshBagWeight(); + Report.ItemChanged(temp, count, 1); + } + public void DropGold(uint gold) + { + if (Account.Gold < gold) return; + + ItemObject ob = new ItemObject(this, gold); + + if (!ob.Drop(5)) return; + Account.Gold -= gold; + Enqueue(new S.LoseGold { Gold = gold }); + } + public void PickUp() + { + if (Dead) + { + //Send Fail + return; + } + + Cell cell = CurrentMap.GetCell(CurrentLocation); + + bool sendFail = false; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + + if (ob.Race != ObjectType.Item) continue; + + if (ob.Owner != null && ob.Owner != this && !IsGroupMember(ob.Owner)) //Or Group member. + { + sendFail = true; + continue; + } + ItemObject item = (ItemObject)ob; + + if (item.Item != null) + { + if (!CanGainItem(item.Item)) continue; + + if (item.Item.Info.ShowGroupPickup && IsGroupMember(this)) + for (int j = 0; j < GroupMembers.Count; j++) + GroupMembers[j].ReceiveChat(Name + " Picked up: {" + item.Item.FriendlyName + "}", + ChatType.System); + + GainItem(item.Item); + + Report.ItemChanged(item.Item, item.Item.Count, 2); + + CurrentMap.RemoveObject(ob); + ob.Despawn(); + + return; + } + + if (!CanGainGold(item.Gold)) continue; + + GainGold(item.Gold); + CurrentMap.RemoveObject(ob); + ob.Despawn(); + return; + } + + if (sendFail) + ReceiveChat("Can not pick up, You do not own this item.", ChatType.System); + + } + public void RequestMapInfo(int mapIndex) + { + var info = Envir.GetMapInfo(mapIndex); + CheckMapInfo(info); + } + public void TeleportToNPC(uint objectID) + { + for (int i = 0; i < CurrentMap.NPCs.Count; i++) + { + NPCObject ob = CurrentMap.NPCs[i]; + if (ob.ObjectID != objectID) continue; + + if (!ob.Info.CanTeleportTo) return; + + uint cost = (uint)Settings.TeleportToNPCCost; + if (Account.Gold < cost) return; + + Point p = ob.Front; + if (!CurrentMap.ValidPoint(p)) + { + for (int j = 0; j < 7; j++) + { + p = Functions.PointMove(CurrentLocation, Functions.ShiftDirection(ob.Direction, j), 1); + if (CurrentMap.ValidPoint(p)) break; + } + } + + if (CurrentMap.ValidPoint(p)) + { + Account.Gold -= cost; + Enqueue(new S.LoseGold { Gold = cost }); + Teleport(CurrentMap, p); + } + + break; + } + } + public void SearchMap(string text) + { + if (string.IsNullOrWhiteSpace(text) || text.Length < 3) return; + + S.SearchMapResult p = new S.SearchMapResult(); + + Map map = Envir.GetWorldMap(text); + if (map != null) + { + CheckMapInfo(map.Info); + p.MapIndex = map.Info.Index; + Enqueue(p); + return; + } + + NPCObject npc = Envir.GetWorldMapNPC(text); + if (npc != null) + { + CheckMapInfo(npc.CurrentMap.Info); + p.MapIndex = npc.CurrentMap.Info.Index; + p.NPCIndex = npc.ObjectID; + Enqueue(p); + return; + } + + Enqueue(p); + return; + } + private bool IsGroupMember(MapObject player) + { + if (player.Race != ObjectType.Player) return false; + return GroupMembers != null && GroupMembers.Contains(player); + } + public override bool CanGainGold(uint gold) + { + return (ulong)gold + Account.Gold <= uint.MaxValue; + } + public override void WinGold(uint gold) + { + if (GroupMembers == null) + { + GainGold(gold); + return; + } + + uint count = 0; + + for (int i = 0; i < GroupMembers.Count; i++) + { + PlayerObject player = GroupMembers[i]; + if (player.CurrentMap == CurrentMap && Functions.InRange(player.CurrentLocation, CurrentLocation, Globals.DataRange) && !player.Dead) + count++; + } + + if (count == 0 || count > gold) + { + GainGold(gold); + return; + } + gold = gold / count; + + for (int i = 0; i < GroupMembers.Count; i++) + { + PlayerObject player = GroupMembers[i]; + if (player.CurrentMap == CurrentMap && Functions.InRange(player.CurrentLocation, CurrentLocation, Globals.DataRange) && !player.Dead) + player.GainGold(gold); + } + } + public void GainGold(uint gold) + { + if (gold == 0) return; + + if (((UInt64)Account.Gold + gold) > uint.MaxValue) + gold = uint.MaxValue - Account.Gold; + + Account.Gold += gold; + + Enqueue(new S.GainedGold { Gold = gold }); + } + public void GainCredit(uint credit) + { + if (credit == 0) return; + + if (((UInt64)Account.Credit + credit) > uint.MaxValue) + credit = uint.MaxValue - Account.Credit; + + Account.Credit += credit; + + Enqueue(new S.GainedCredit { Credit = credit }); + } + public void GainItemMail(UserItem item, int reason) + { + Envir.MailCharacter(Info, item: item, reason: reason); + } + public bool CanRemoveItem(MirGridType grid, UserItem item) + { + //Item Stuck + + UserItem[] array; + switch (grid) + { + case MirGridType.Inventory: + array = Info.Inventory; + break; + case MirGridType.Storage: + array = Account.Storage; + break; + default: + return false; + } + + return FreeSpace(array) > 0; + } + public bool CheckQuestItem(UserItem uItem, ushort count) + { + foreach (var item in Info.QuestInventory.Where(item => item != null && item.Info == uItem.Info)) + { + if (count > item.Count) + { + count -= item.Count; + continue; + } + + if (count > item.Count) continue; + count = 0; + break; + } + + return count <= 0; + } + public bool CanGainQuestItem(UserItem item) + { + if (FreeSpace(Info.QuestInventory) > 0) return true; + + if (item.Info.StackSize > 1) + { + ushort count = item.Count; + + for (int i = 0; i < Info.QuestInventory.Length; i++) + { + UserItem bagItem = Info.QuestInventory[i]; + + if (bagItem.Info != item.Info) continue; + + if (bagItem.Count + count <= bagItem.Info.StackSize) return true; + + count -= (ushort)(bagItem.Info.StackSize - bagItem.Count); + } + } + + ReceiveChat("You cannot carry anymore quest items.", ChatType.System); + + return false; + } + public void GainQuestItem(UserItem item) + { + CheckItem(item); + + UserItem clonedItem = item.Clone(); + + Enqueue(new S.GainedQuestItem { Item = clonedItem }); + + AddQuestItem(item); + } + public void TakeQuestItem(ItemInfo uItem, ushort count) + { + for (int o = 0; o < Info.QuestInventory.Length; o++) + { + UserItem item = Info.QuestInventory[o]; + if (item == null) continue; + if (item.Info != uItem) continue; + + if (count > item.Count) + { + Enqueue(new S.DeleteQuestItem { UniqueID = item.UniqueID, Count = item.Count }); + Info.QuestInventory[o] = null; + + count -= item.Count; + continue; + } + + Enqueue(new S.DeleteQuestItem { UniqueID = item.UniqueID, Count = count }); + + if (count == item.Count) + Info.QuestInventory[o] = null; + else + item.Count -= count; + break; + } + } + + public void RequestChatItem(ulong id) + { + //Enqueue(new S.ChatItemStats { ChatItemId = id, Stats = whatever }); + } + + public override void ReceiveChat(string text, ChatType type) + { + Enqueue(new S.Chat { Message = text, Type = type }); + } + public void ReceiveOutputMessage(string text, OutputMessageType type) + { + Enqueue(new S.SendOutputMessage { Message = text, Type = type }); + } + + #region NPC + + public void CallDefaultNPC(DefaultNPCType type, params object[] value) + { + string key = string.Empty; + + switch (type) + { + case DefaultNPCType.Login: + key = "Login"; + break; + case DefaultNPCType.UseItem: + if (value.Length < 1) return; + key = string.Format("UseItem({0})", value[0]); + break; + case DefaultNPCType.Trigger: + if (value.Length < 1) return; + key = string.Format("Trigger({0})", value[0]); + break; + case DefaultNPCType.MapCoord: + if (value.Length < 3) return; + key = string.Format("MapCoord({0},{1},{2})", value[0], value[1], value[2]); + break; + case DefaultNPCType.MapEnter: + if (value.Length < 1) return; + key = string.Format("MapEnter({0})", value[0]); + break; + case DefaultNPCType.Die: + key = "Die"; + break; + case DefaultNPCType.LevelUp: + key = "LevelUp"; + break; + case DefaultNPCType.CustomCommand: + if (value.Length < 1) return; + key = string.Format("CustomCommand({0})", value[0]); + break; + case DefaultNPCType.OnAcceptQuest: + if (value.Length < 1) return; + key = string.Format("OnAcceptQuest({0})", value[0]); + break; + case DefaultNPCType.OnFinishQuest: + if (value.Length < 1) return; + key = string.Format("OnFinishQuest({0})", value[0]); + break; + case DefaultNPCType.Daily: + key = "Daily"; + Info.NewDay = false; + break; + case DefaultNPCType.Client: + key = "Client"; + break; + } + + key = string.Format("[@_{0}]", key); + + DelayedAction action = new DelayedAction(DelayedType.NPC, Envir.Time, Envir.DefaultNPC.LoadedObjectID, Envir.DefaultNPC.ScriptID, key); + ActionList.Add(action); + + Enqueue(new S.NPCUpdate { NPCID = Envir.DefaultNPC.LoadedObjectID }); + } + + public void CallDefaultNPC(string key) + { + if (NPCObjectID != Envir.DefaultNPC.LoadedObjectID) return; + + var script = NPCScript.Get(NPCScriptID); + script.Call(this, NPCObjectID, key.ToUpper()); + + CallNPCNextPage(); + } + + public void CallNPC(uint objectID, string key) + { + if (Dead) return; + + key = key.ToUpper(); + + for (int i = 0; i < CurrentMap.NPCs.Count; i++) + { + NPCObject ob = CurrentMap.NPCs[i]; + if (ob.ObjectID != objectID) continue; + if (!Functions.InRange(ob.CurrentLocation, CurrentLocation, Globals.DataRange)) return; + + ob.CheckVisible(this); + + if (!ob.VisibleLog[Info.Index] || !ob.Visible) return; + + var scriptID = NPCScriptID; + if (objectID != NPCObjectID || key == NPCScript.MainKey) + { + scriptID = ob.ScriptID; + } + + var script = NPCScript.Get(scriptID); + script.Call(this, objectID, key); + + break; + } + + CallNPCNextPage(); + } + private void CallNPCNextPage() + { + //process any new npc calls immediately + for (int i = 0; i < ActionList.Count; i++) + { + if (ActionList[i].Type != DelayedType.NPC || ActionList[i].Time != -1) continue; + var action = ActionList[i]; + + ActionList.RemoveAt(i); + + CompleteNPC(action.Params); + } + } + + public void BuyItem(ulong index, ushort count, PanelType type) + { + if (Dead || count < 1) return; + + if (NPCPage == null || + !(String.Equals(NPCPage.Key, NPCScript.BuySellKey, StringComparison.CurrentCultureIgnoreCase) || + String.Equals(NPCPage.Key, NPCScript.BuyKey, StringComparison.CurrentCultureIgnoreCase) || + String.Equals(NPCPage.Key, NPCScript.BuyBackKey, StringComparison.CurrentCultureIgnoreCase) || + String.Equals(NPCPage.Key, NPCScript.BuyUsedKey, StringComparison.CurrentCultureIgnoreCase) || + String.Equals(NPCPage.Key, NPCScript.BuyNewKey, StringComparison.CurrentCultureIgnoreCase) || + String.Equals(NPCPage.Key, NPCScript.BuySellNewKey, StringComparison.CurrentCultureIgnoreCase))) return; + + for (int i = 0; i < CurrentMap.NPCs.Count; i++) + { + NPCObject ob = CurrentMap.NPCs[i]; + if (ob.ObjectID != NPCObjectID) continue; + if (!Functions.InRange(ob.CurrentLocation, CurrentLocation, Globals.DataRange)) return; + + if (type == PanelType.Buy) + { + NPCScript script = NPCScript.Get(NPCScriptID); + script.Buy(this, index, count); + } + } + } + + public void SellItem(ulong uniqueID, ushort count) + { + S.SellItem p = new S.SellItem { UniqueID = uniqueID, Count = count }; + + if (Dead || count == 0) + { + Enqueue(p); + return; + } + + if (NPCPage == null || !(String.Equals(NPCPage.Key, NPCScript.BuyKey, StringComparison.CurrentCultureIgnoreCase) || String.Equals(NPCPage.Key, NPCScript.SellKey, StringComparison.CurrentCultureIgnoreCase))) + { + Enqueue(p); + return; + } + + for (int n = 0; n < CurrentMap.NPCs.Count; n++) + { + NPCObject ob = CurrentMap.NPCs[n]; + if (ob.ObjectID != NPCObjectID) continue; + if (!Functions.InRange(ob.CurrentLocation, CurrentLocation, Globals.DataRange)) return; + + UserItem temp = null; + int index = -1; + + for (int i = 0; i < Info.Inventory.Length; i++) + { + temp = Info.Inventory[i]; + if (temp == null || temp.UniqueID != uniqueID) continue; + index = i; + break; + } + + if (temp == null || index == -1 || count > temp.Count) + { + Enqueue(p); + return; + } + + if (temp.Info.Bind.HasFlag(BindMode.DontSell)) + { + Enqueue(p); + return; + } + + NPCScript script = NPCScript.Get(NPCScriptID); + + if (script.Types.Count != 0 && !script.Types.Contains(temp.Info.Type)) + { + ReceiveChat("You cannot sell this item here.", ChatType.System); + Enqueue(p); + return; + } + + if (temp.Info.StackSize > 1 && count != temp.Count) + { + UserItem item = Envir.CreateFreshItem(temp.Info); + item.Count = count; + + if (item.Price() / 2 + Account.Gold > uint.MaxValue) + { + Enqueue(p); + return; + } + + temp.Count -= count; + temp = item; + } + else Info.Inventory[index] = null; + + script.Sell(this, temp); + + if (Settings.GoodsOn) + { + var callingNPC = NPCObject.Get(NPCObjectID); + + if (callingNPC != null) + { + if (!callingNPC.BuyBack.ContainsKey(Name)) callingNPC.BuyBack[Name] = new List(); + + if (Settings.GoodsBuyBackMaxStored > 0 && callingNPC.BuyBack[Name].Count >= Settings.GoodsBuyBackMaxStored) + callingNPC.BuyBack[Name].RemoveAt(0); + + temp.BuybackExpiryDate = Envir.Now; + callingNPC.BuyBack[Name].Add(temp); + } + } + + p.Success = true; + Enqueue(p); + GainGold(temp.Price() / 2); + RefreshBagWeight(); + + return; + } + + Enqueue(p); + } + public void RepairItem(ulong uniqueID, bool special = false) + { + Enqueue(new S.RepairItem { UniqueID = uniqueID }); + + if (Dead) return; + + if (NPCPage == null || (!String.Equals(NPCPage.Key, NPCScript.RepairKey, StringComparison.CurrentCultureIgnoreCase) && !special) || (!String.Equals(NPCPage.Key, NPCScript.SRepairKey, StringComparison.CurrentCultureIgnoreCase) && special)) return; + + for (int n = 0; n < CurrentMap.NPCs.Count; n++) + { + NPCObject ob = CurrentMap.NPCs[n]; + if (ob.ObjectID != NPCObjectID) continue; + if (!Functions.InRange(ob.CurrentLocation, CurrentLocation, Globals.DataRange)) return; + + UserItem temp = null; + int index = -1; + + for (int i = 0; i < Info.Inventory.Length; i++) + { + temp = Info.Inventory[i]; + if (temp == null || temp.UniqueID != uniqueID) continue; + index = i; + break; + } + + if (temp == null || index == -1) return; + + if ((temp.Info.Bind.HasFlag(BindMode.DontRepair)) || (temp.Info.Bind.HasFlag(BindMode.NoSRepair) && special)) + { + ReceiveChat("You cannot Repair this item.", ChatType.System); + return; + } + + NPCScript script = NPCScript.Get(NPCScriptID); + + if (script.Types.Count != 0 && !script.Types.Contains(temp.Info.Type)) + { + ReceiveChat("You cannot Repair this item here.", ChatType.System); + return; + } + + uint cost; + uint baseCost; + if (!special) + { + cost = (uint)(temp.RepairPrice() * script.PriceRate(this)); + baseCost = (uint)(temp.RepairPrice() * script.PriceRate(this, true)); + } + else + { + cost = (uint)(temp.RepairPrice() * 3 * script.PriceRate(this)); + baseCost = (uint)(temp.RepairPrice() * 3 * script.PriceRate(this, true)); + } + + if (cost > Account.Gold) return; + + Account.Gold -= cost; + Enqueue(new S.LoseGold { Gold = cost }); + + if (!special) temp.MaxDura = (ushort)Math.Max(0, temp.MaxDura - (temp.MaxDura - temp.CurrentDura) / 30); + + temp.CurrentDura = temp.MaxDura; + temp.DuraChanged = false; + + Enqueue(new S.ItemRepaired { UniqueID = uniqueID, MaxDura = temp.MaxDura, CurrentDura = temp.CurrentDura }); + return; + } + } + public void SendStorage() + { + if (Connection.StorageSent) return; + Connection.StorageSent = true; + + for (int i = 0; i < Account.Storage.Length; i++) + { + UserItem item = Account.Storage[i]; + if (item == null) continue; + //CheckItemInfo(item.Info); + CheckItem(item); + } + + Enqueue(new S.UserStorage { Storage = Account.Storage }); // Should be no alter before being sent. + } + + #endregion + + #region Consignment + public void ConsignItem(ulong uniqueID, uint price, MarketPanelType panelType) + { + S.ConsignItem p = new S.ConsignItem { UniqueID = uniqueID }; + + if (Dead || NPCPage == null) + { + Enqueue(p); + return; + } + + switch (panelType) + { + case MarketPanelType.Consign: + { + if (price < Globals.MinConsignment || price > Globals.MaxConsignment) + { + Enqueue(p); + return; + } + + if (Account.Gold < Globals.ConsignmentCost) + { + Enqueue(p); + return; + } + } + break; + case MarketPanelType.Auction: + { + if (price < Globals.MinStartingBid || price > Globals.MaxStartingBid) + { + Enqueue(p); + return; + } + + if (Account.Gold < Globals.AuctionCost) + { + Enqueue(p); + return; + } + } + break; + default: + Enqueue(p); + return; + } + + for (int n = 0; n < CurrentMap.NPCs.Count; n++) + { + NPCObject ob = CurrentMap.NPCs[n]; + if (ob.ObjectID != NPCObjectID) continue; + if (!Functions.InRange(ob.CurrentLocation, CurrentLocation, Globals.DataRange)) return; + + UserItem temp = null; + int index = -1; + + for (int i = 0; i < Info.Inventory.Length; i++) + { + temp = Info.Inventory[i]; + if (temp == null || temp.UniqueID != uniqueID) continue; + index = i; + break; + } + + if (temp == null || index == -1) + { + Enqueue(p); + return; + } + + if (temp.Info.Bind.HasFlag(BindMode.DontSell)) + { + Enqueue(p); + return; + } + + MarketItemType type = panelType == MarketPanelType.Consign ? MarketItemType.Consign : MarketItemType.Auction; + uint cost = panelType == MarketPanelType.Consign ? Globals.ConsignmentCost : Globals.AuctionCost; + + //TODO Check Max Consignment. + + AuctionInfo auction = new AuctionInfo(Info, temp, price, type); + + Account.Auctions.AddLast(auction); + Envir.Auctions.AddFirst(auction); + + p.Success = true; + Enqueue(p); + + Info.Inventory[index] = null; + + Account.Gold -= cost; + + Enqueue(new S.LoseGold { Gold = cost }); + RefreshBagWeight(); + } + + Enqueue(p); + } + + private bool Match(AuctionInfo info) + { + return (UserMatch || !info.Expired && !info.Sold) + && (!UserMatch || ((MarketPanelType == MarketPanelType.Auction && info.ItemType == MarketItemType.Auction) || (MarketPanelType != MarketPanelType.Auction && info.ItemType == MarketItemType.Consign))) + && ((MatchType == ItemType.Nothing || info.Item.Info.Type == MatchType) + && (info.Item.Info.Shape >= MinShapes && info.Item.Info.Shape <= MaxShapes) + && (string.IsNullOrWhiteSpace(MatchName) || info.Item.Info.Name.Replace(" ", "").IndexOf(MatchName, StringComparison.OrdinalIgnoreCase) >= 0)); + } + + public void MarketPage(int page) + { + if (Dead || Envir.Time < SearchTime) return; + + if (MarketPanelType != MarketPanelType.GameShop) + { + bool failed = true; + + if (NPCPage == null || (!String.Equals(NPCPage.Key, NPCScript.MarketKey, StringComparison.CurrentCultureIgnoreCase)) || page <= PageSent) return; + + SearchTime = Envir.Time + Globals.SearchDelay; + + for (int n = 0; n < CurrentMap.NPCs.Count; n++) + { + NPCObject ob = CurrentMap.NPCs[n]; + if (ob.ObjectID != NPCObjectID) continue; + if (!Functions.InRange(ob.CurrentLocation, CurrentLocation, Globals.DataRange)) return; + failed = false; + } + + if (failed) + { + return; + } + } + + List listings = new List(); + List clientListings = new List(); + + for (int i = 0; i < 10; i++) + { + if (i + page * 10 >= Search.Count) break; + listings.Add(Search[i + page * 10]); + } + + foreach (var listing in listings) + { + clientListings.Add(listing.CreateClientAuction(UserMatch)); + } + + for (int i = 0; i < listings.Count; i++) + { + CheckItem(listings[i].Item); + } + + PageSent = page; + Enqueue(new S.NPCMarketPage { Listings = clientListings }); + } + + public void GetMarket(string name, ItemType type) + { + Search.Clear(); + MatchName = name.Replace(" ", ""); + MatchType = type; + PageSent = 0; + + long start = Envir.Stopwatch.ElapsedMilliseconds; + + if (MarketPanelType == MarketPanelType.GameShop) + { + //Search = Envir.GameShopList.Where(x => (MatchType == ItemType.Nothing || x.Info.Type == MatchType) + //&& (x.Info.Shape >= MinShapes && x.Info.Shape <= MaxShapes) + //&& (string.IsNullOrWhiteSpace(MatchName) || x.Info.Name.Replace(" ", "").IndexOf(MatchName, StringComparison.OrdinalIgnoreCase) >= 0)).ToList(); + } + else + { + LinkedListNode current = UserMatch ? Account.Auctions.First : Envir.Auctions.First; + + while (current != null) + { + if (Match(current.Value)) Search.Add(current.Value); + current = current.Next; + } + } + + List listings = new List(); + List clientListings = new List(); + + for (int i = 0; i < 10; i++) + { + if (i >= Search.Count) break; + listings.Add(Search[i]); + } + + foreach (var listing in listings) + { + clientListings.Add(listing.CreateClientAuction(UserMatch)); + } + + for (int i = 0; i < listings.Count; i++) + CheckItem(listings[i].Item); + + Enqueue(new S.NPCMarket { Listings = clientListings, Pages = (Search.Count - 1) / 10 + 1, UserMode = UserMatch }); + + MessageQueue.EnqueueDebugging(string.Format("{0}ms to match {1} items", Envir.Stopwatch.ElapsedMilliseconds - start, MarketPanelType == MarketPanelType.GameShop ? Envir.GameShopList.Count : (UserMatch ? Account.Auctions.Count : Envir.Auctions.Count))); + } + + public void MarketSearch(string match, ItemType type) + { + if (Dead || Envir.Time < SearchTime) return; + + SearchTime = Envir.Time + Globals.SearchDelay; + + if (MarketPanelType == MarketPanelType.GameShop) + { + GetMarket(match, type); + } + else + { + if (NPCPage == null || !String.Equals(NPCPage.Key, NPCScript.MarketKey, StringComparison.CurrentCultureIgnoreCase)) return; + + for (int n = 0; n < CurrentMap.NPCs.Count; n++) + { + NPCObject ob = CurrentMap.NPCs[n]; + if (ob.ObjectID != NPCObjectID) continue; + + if (!Functions.InRange(CurrentLocation, ob.CurrentLocation, Globals.DataRange)) return; + + GetMarket(match, type); + } + } + } + + public void MarketBuy(ulong auctionID, uint bidPrice = 0) + { + if (Dead) + { + Enqueue(new S.MarketFail { Reason = 0 }); + return; + } + + if (MarketPanelType == MarketPanelType.GameShop) + { + foreach (AuctionInfo auction in Search) + { + if (auction.AuctionID != auctionID) continue; + if (auction.ItemType != MarketItemType.GameShop) continue; + + if (auction.Price > Account.Credit) + { + Enqueue(new S.MarketFail { Reason = 4 }); + return; + } + + if (!CanGainItem(auction.Item)) + { + Enqueue(new S.MarketFail { Reason = 5 }); + return; + } + + UserItem item = Envir.CreateFreshItem(auction.Item.Info); + + Account.Credit -= auction.Price; + GainItem(item); + Enqueue(new S.MarketSuccess { Message = string.Format("You bought {0} for {1:#,##0} Credit", auction.Item.FriendlyName, auction.Price) }); + MarketSearch(MatchName, MatchType); + + return; + } + } + else + { + if (NPCPage == null || !String.Equals(NPCPage.Key, NPCScript.MarketKey, StringComparison.CurrentCultureIgnoreCase)) + { + Enqueue(new S.MarketFail { Reason = 1 }); + return; + } + + for (int n = 0; n < CurrentMap.NPCs.Count; n++) + { + NPCObject ob = CurrentMap.NPCs[n]; + if (ob.ObjectID != NPCObjectID) continue; + + if (!Functions.InRange(ob.CurrentLocation, CurrentLocation, Globals.DataRange)) return; + + foreach (AuctionInfo auction in Search) + { + if (auction.AuctionID != auctionID) continue; + if (auction.ItemType != MarketItemType.Consign && auction.ItemType != MarketItemType.Auction) continue; + + if (auction.Sold) + { + Enqueue(new S.MarketFail { Reason = 2 }); + return; + } + + if (auction.Expired) + { + Enqueue(new S.MarketFail { Reason = 3 }); + return; + } + + if (!Envir.Auctions.Contains(auction)) + { + Enqueue(new S.MarketFail { Reason = 3 }); + return; + } + + if (!CanGainItem(auction.Item)) + { + Enqueue(new S.MarketFail { Reason = 5 }); + return; + } + + if (Account.Auctions.Contains(auction)) + { + Enqueue(new S.MarketFail { Reason = 6 }); + return; + } + + if (auction.Price > Account.Gold || bidPrice > Account.Gold) + { + Enqueue(new S.MarketFail { Reason = 4 }); + return; + } + + if (auction.ItemType == MarketItemType.Consign) + { + auction.Sold = true; + + Account.Gold -= auction.Price; + + Enqueue(new S.LoseGold { Gold = auction.Price }); + GainItem(auction.Item); + + Envir.MessageAccount(auction.SellerInfo.AccountInfo, string.Format("You sold {0} for {1:#,##0} Gold", auction.Item.FriendlyName, auction.Price), ChatType.Hint); + Enqueue(new S.MarketSuccess { Message = string.Format("You bought {0} for {1:#,##0} Gold", auction.Item.FriendlyName, auction.Price) }); + MarketSearch(MatchName, MatchType); + } + else + { + if (auction.CurrentBid > bidPrice) + { + Enqueue(new S.MarketFail { Reason = 9 }); + return; + } + + if (auction.CurrentBuyerInfo != null) + { + string message = string.Format("You have been outbid on {0}. Refunded {1:#,##0} Gold.", auction.Item.FriendlyName, auction.CurrentBid); + + Envir.MailCharacter(auction.CurrentBuyerInfo, gold: auction.CurrentBid, customMessage: message); + } + + auction.CurrentBid = bidPrice; + auction.CurrentBuyerIndex = Info.Index; + auction.CurrentBuyerInfo = Info; + + Account.Gold -= bidPrice; + Enqueue(new S.LoseGold { Gold = bidPrice }); + + Envir.MessageAccount(auction.SellerInfo.AccountInfo, string.Format("Someone has bid {1:#,##0} Gold for {0}", auction.Item.FriendlyName, auction.CurrentBid), ChatType.Hint); + Enqueue(new S.MarketSuccess { Message = string.Format("You bid {1:#,##0} Gold for {0}", auction.Item.FriendlyName, auction.CurrentBid) }); + MarketSearch(MatchName, MatchType); + } + + return; + } + } + } + + Enqueue(new S.MarketFail { Reason = 7 }); + } + + public void MarketSellNow(ulong auctionID) + { + if (Dead) + { + Enqueue(new S.MarketFail { Reason = 0 }); + return; + } + + if (NPCPage == null || !String.Equals(NPCPage.Key, NPCScript.MarketKey, StringComparison.CurrentCultureIgnoreCase)) + { + Enqueue(new S.MarketFail { Reason = 1 }); + return; + } + + for (int n = 0; n < CurrentMap.NPCs.Count; n++) + { + NPCObject ob = CurrentMap.NPCs[n]; + if (ob.ObjectID != NPCObjectID) continue; + if (!Functions.InRange(ob.CurrentLocation, CurrentLocation, Globals.DataRange)) return; + + foreach (AuctionInfo auction in Account.Auctions) + { + if (auction.AuctionID != auctionID) continue; + + if (auction.ItemType != MarketItemType.Auction) + { + return; + } + + if (auction.CurrentBid <= auction.Price || auction.CurrentBuyerInfo == null) + { + Enqueue(new S.MarketFail { Reason = 9 }); + return; + } + + if (auction.Sold && auction.Expired) + { + MessageQueue.Enqueue(string.Format("Auction both sold and Expired {0}", Account.AccountID)); + return; + } + + if (auction.Expired || auction.Sold || Envir.Now >= auction.ConsignmentDate.AddDays(Globals.ConsignmentLength)) + { + Enqueue(new S.MarketFail { Reason = 10 }); + return; + } + + uint cost = auction.CurrentBid; + + uint gold = (uint)Math.Max(0, cost - cost * Globals.Commission); + + if (!CanGainGold(auction.CurrentBid)) + { + Enqueue(new S.MarketFail { Reason = 8 }); + return; + } + + auction.Sold = true; + + string message = string.Format("You won {0} for {1:#,##0} Gold.", auction.Item.FriendlyName, auction.CurrentBid); + + Envir.MailCharacter(auction.CurrentBuyerInfo, item: auction.Item, customMessage: message); + Envir.MessageAccount(auction.CurrentBuyerInfo.AccountInfo, string.Format("You bought {0} for {1:#,##0} Gold", auction.Item.FriendlyName, auction.CurrentBid), ChatType.Hint); + + Account.Auctions.Remove(auction); + Envir.Auctions.Remove(auction); + GainGold(gold); + Enqueue(new S.MarketSuccess { Message = string.Format("You sold {0} for {1:#,##0} Gold. \nEarnings: {2:#,##0} Gold.\nCommision: {3:#,##0} Gold.‎", auction.Item.FriendlyName, cost, gold, cost - gold) }); + MarketSearch(MatchName, MatchType); + return; + } + + } + + Enqueue(new S.MarketFail { Reason = 7 }); + } + + public void MarketGetBack(ulong auctionID) + { + if (Dead) + { + Enqueue(new S.MarketFail { Reason = 0 }); + return; + } + + if (NPCPage == null || !String.Equals(NPCPage.Key, NPCScript.MarketKey, StringComparison.CurrentCultureIgnoreCase)) + { + Enqueue(new S.MarketFail { Reason = 1 }); + return; + } + + for (int n = 0; n < CurrentMap.NPCs.Count; n++) + { + NPCObject ob = CurrentMap.NPCs[n]; + if (ob.ObjectID != NPCObjectID) continue; + if (!Functions.InRange(ob.CurrentLocation, CurrentLocation, Globals.DataRange)) return; + + foreach (AuctionInfo auction in Account.Auctions) + { + if (auction.AuctionID != auctionID) continue; + + if (auction.Sold && auction.Expired) + { + MessageQueue.Enqueue(string.Format("Auction both sold and Expired {0}", Account.AccountID)); + return; + } + + if (!auction.Sold || auction.Expired) + { + if (!CanGainItem(auction.Item)) + { + Enqueue(new S.MarketFail { Reason = 5 }); + return; + } + + if (auction.CurrentBuyerInfo != null) + { + string message = string.Format("You have been outbid on {0}. Refunded {1:#,##0} Gold.", auction.Item.FriendlyName, auction.CurrentBid); + + Envir.MailCharacter(auction.CurrentBuyerInfo, gold: auction.CurrentBid, customMessage: message); + } + + Account.Auctions.Remove(auction); + Envir.Auctions.Remove(auction); + GainItem(auction.Item); + MarketSearch(MatchName, MatchType); + return; + } + + uint cost = auction.ItemType == MarketItemType.Consign ? auction.Price : auction.CurrentBid; + + if (!CanGainGold(cost)) + { + Enqueue(new S.MarketFail { Reason = 8 }); + return; + } + + uint gold = (uint)Math.Max(0, cost - cost * Globals.Commission); + + Account.Auctions.Remove(auction); + Envir.Auctions.Remove(auction); + GainGold(gold); + Enqueue(new S.MarketSuccess { Message = string.Format("You sold {0} for {1:#,##0} Gold. \nEarnings: {2:#,##0} Gold.\nCommision: {3:#,##0} Gold.‎", auction.Item.FriendlyName, cost, gold, cost - gold) }); + MarketSearch(MatchName, MatchType); + return; + } + + } + + Enqueue(new S.MarketFail { Reason = 7 }); + } + + public void RequestUserName(uint id) + { + CharacterInfo Character = Envir.GetCharacterInfo((int)id); + if (Character != null) + Enqueue(new S.UserName { Id = (uint)Character.Index, Name = Character.Name }); + } + + #endregion + + #region Groups + + public void SwitchGroup(bool allow) + { + Enqueue(new S.SwitchGroup { AllowGroup = allow }); + + if (AllowGroup == allow) return; + AllowGroup = allow; + + if (AllowGroup || GroupMembers == null) return; + + LeaveGroup(); + } + + public void LeaveGroup() + { + if (GroupMembers != null) + { + GroupMembers.Remove(this); + + if (GroupMembers.Count > 1) + { + Packet p = new S.DeleteMember { Name = Name }; + + for (int i = 0; i < GroupMembers.Count; i++) + { + GroupMembers[i].Enqueue(p); + } + } + else + { + GroupMembers[0].Enqueue(new S.DeleteGroup()); + GroupMembers[0].GroupMembers = null; + } + + GroupMembers = null; + } + } + + public void AddMember(string name) + { + if (Envir.Time < NextGroupInviteTime) return; + NextGroupInviteTime = Envir.Time + Settings.GroupInviteDelay; + if (GroupMembers != null && GroupMembers[0] != this) + { + ReceiveChat("You are not the group leader.", ChatType.System); + return; + } + + if (GroupMembers != null && GroupMembers.Count >= Globals.MaxGroup) + { + ReceiveChat("Your group already has the maximum number of members.", ChatType.System); + return; + } + + PlayerObject player = Envir.GetPlayer(name); + + if (player == null) + { + ReceiveChat(name + " could not be found.", ChatType.System); + return; + } + if (player == this) + { + ReceiveChat("You cannot group yourself.", ChatType.System); + return; + } + + if (!player.AllowGroup) + { + ReceiveChat(name + " is not allowing group.", ChatType.System); + return; + } + + if (player.GroupMembers != null) + { + ReceiveChat(name + " is already in another group.", ChatType.System); + return; + } + + if (player.GroupInvitation != null) + { + ReceiveChat(name + " is already receiving an invite from another player.", ChatType.System); + return; + } + + SwitchGroup(true); + player.Enqueue(new S.GroupInvite { Name = Name }); + player.GroupInvitation = this; + + } + public void DelMember(string name) + { + if (GroupMembers == null) + { + ReceiveChat("You are not in a group.", ChatType.System); + return; + } + if (GroupMembers[0] != this) + { + ReceiveChat("You are not the group leader.", ChatType.System); + return; + } + + PlayerObject player = null; + + for (int i = 0; i < GroupMembers.Count; i++) + { + if (String.Compare(GroupMembers[i].Name, name, StringComparison.OrdinalIgnoreCase) != 0) continue; + player = GroupMembers[i]; + break; + } + + if (player == null) + { + ReceiveChat(name + " is not in your group.", ChatType.System); + return; + } + + player.Enqueue(new S.DeleteGroup()); + player.LeaveGroup(); + } + + public void GroupInvite(bool accept) + { + if (GroupInvitation == null) + { + ReceiveChat("You have not been invited to a group.", ChatType.System); + return; + } + + if (!accept) + { + GroupInvitation.ReceiveChat(Name + " has declined your group invite.", ChatType.System); + GroupInvitation = null; + return; + } + + if (GroupMembers != null) + { + ReceiveChat(string.Format("You can no longer join {0}'s group", GroupInvitation.Name), ChatType.System); + GroupInvitation = null; + return; + } + + if (GroupInvitation.GroupMembers != null && GroupInvitation.GroupMembers[0] != GroupInvitation) + { + ReceiveChat(GroupInvitation.Name + " is no longer the group leader.", ChatType.System); + GroupInvitation = null; + return; + } + + if (GroupInvitation.GroupMembers != null && GroupInvitation.GroupMembers.Count >= Globals.MaxGroup) + { + ReceiveChat(GroupInvitation.Name + "'s group already has the maximum number of members.", ChatType.System); + GroupInvitation = null; + return; + } + if (!GroupInvitation.AllowGroup) + { + ReceiveChat(GroupInvitation.Name + " is not on allow group.", ChatType.System); + GroupInvitation = null; + return; + } + if (GroupInvitation.Node == null) + { + ReceiveChat(GroupInvitation.Name + " no longer online.", ChatType.System); + GroupInvitation = null; + return; + } + + if (GroupInvitation.GroupMembers == null) + { + GroupInvitation.GroupMembers = new List { GroupInvitation }; + GroupInvitation.Enqueue(new S.AddMember { Name = GroupInvitation.Name }); + GroupInvitation.Enqueue(new S.GroupMembersMap { PlayerName = GroupInvitation.Name, PlayerMap = GroupInvitation.CurrentMap.Info.Title }); + GroupInvitation.Enqueue(new S.SendMemberLocation { MemberName = GroupInvitation.Name, MemberLocation = GroupInvitation.CurrentLocation }); + } + + Packet p = new S.AddMember { Name = Name }; + GroupMembers = GroupInvitation.GroupMembers; + GroupInvitation = null; + + for (int i = 0; i < GroupMembers.Count; i++) + { + PlayerObject member = GroupMembers[i]; + + member.Enqueue(p); + Enqueue(new S.AddMember { Name = member.Name }); + + if (CurrentMap != member.CurrentMap || !Functions.InRange(CurrentLocation, member.CurrentLocation, Globals.DataRange)) continue; + + byte time = Math.Min(byte.MaxValue, (byte)Math.Max(5, (RevTime - Envir.Time) / 1000)); + + member.Enqueue(new S.ObjectHealth { ObjectID = ObjectID, Percent = PercentHealth, Expire = time }); + Enqueue(new S.ObjectHealth { ObjectID = member.ObjectID, Percent = member.PercentHealth, Expire = time }); + + for (int j = 0; j < member.Pets.Count; j++) + { + MonsterObject pet = member.Pets[j]; + + Enqueue(new S.ObjectHealth { ObjectID = pet.ObjectID, Percent = pet.PercentHealth, Expire = time }); + } + } + + GroupMembers.Add(this); + + for (int j = 0; j < Pets.Count; j++) + { + Pets[j].BroadcastHealthChange(); + } + + Enqueue(p); + GroupMemberMapNameChanged(); + GetPlayerLocation(); + } + public void GroupMemberMapNameChanged() + { + if (GroupMembers == null) return; + + for (int i = 0; i < GroupMembers.Count; i++) + { + PlayerObject member = GroupMembers[i]; + member.Enqueue(new S.GroupMembersMap { PlayerName = Name, PlayerMap = CurrentMap.Info.Title }); + Enqueue(new S.GroupMembersMap { PlayerName = member.Name, PlayerMap = member.CurrentMap.Info.Title }); + } + Enqueue(new S.GroupMembersMap { PlayerName = Name, PlayerMap = CurrentMap.Info.Title }); + } + + #endregion + + #region Guilds + + public bool CreateGuild(string guildName) + { + if ((MyGuild != null) || (Info.GuildIndex != -1)) return false; + if (Envir.GetGuild(guildName) != null) return false; + + if (Info.Level < Settings.Guild_RequiredLevel) + { + ReceiveChat(String.Format("Your level is not high enough to create a guild, required: {0}", Settings.Guild_RequiredLevel), ChatType.System); + return false; + } + + if (!Info.AccountInfo.AdminAccount && String.Equals(guildName, Settings.PalaceGuild, StringComparison.OrdinalIgnoreCase)) + { + ReceiveChat($"You cannot make the newbie guild. Nice try mortal.", ChatType.System); + return false; + } + + if (!Info.AccountInfo.AdminAccount) + { + //check if we have the required items + for (int i = 0; i < Settings.Guild_CreationCostList.Count; i++) + { + GuildItemVolume Required = Settings.Guild_CreationCostList[i]; + if (Required.Item == null) + { + if (Info.AccountInfo.Gold < Required.Amount) + { + ReceiveChat(String.Format("Insufficient gold. Creating a guild requires {0} gold.", Required.Amount), ChatType.System); + return false; + } + } + else + { + ushort count = (ushort)Math.Min(Required.Amount, ushort.MaxValue); + + foreach (var item in Info.Inventory.Where(item => item != null && item.Info == Required.Item)) + { + if ((Required.Item.Type == ItemType.Ore) && (item.CurrentDura / 1000 > Required.Amount)) + { + count = 0; + break; + } + if (item.Count > count) + count = 0; + else + count = (ushort)(count - item.Count); + if (count == 0) break; + } + if (count != 0) + { + if (Required.Amount == 1) + ReceiveChat(String.Format("{0} is required to create a guild.", Required.Item.FriendlyName), ChatType.System); + else + { + if (Required.Item.Type == ItemType.Ore) + ReceiveChat(string.Format("{0} with purity {1} is recuired to create a guild.", Required.Item.FriendlyName, Required.Amount / 1000), ChatType.System); + else + ReceiveChat(string.Format("Insufficient {0}, you need {1} to create a guild.", Required.Item.FriendlyName, Required.Amount), ChatType.System); + } + return false; + } + } + } + + //take the required items + for (int i = 0; i < Settings.Guild_CreationCostList.Count; i++) + { + GuildItemVolume Required = Settings.Guild_CreationCostList[i]; + if (Required.Item == null) + { + if (Info.AccountInfo.Gold >= Required.Amount) + { + Info.AccountInfo.Gold -= Required.Amount; + Enqueue(new S.LoseGold { Gold = Required.Amount }); + } + } + else + { + ushort count = (ushort)Math.Min(Required.Amount, ushort.MaxValue); + + for (int o = 0; o < Info.Inventory.Length; o++) + { + UserItem item = Info.Inventory[o]; + if (item == null) continue; + if (item.Info != Required.Item) continue; + + if ((Required.Item.Type == ItemType.Ore) && (item.CurrentDura / 1000 > Required.Amount)) + { + Enqueue(new S.DeleteItem { UniqueID = item.UniqueID, Count = item.Count }); + Info.Inventory[o] = null; + break; + } + if (count > item.Count) + { + Enqueue(new S.DeleteItem { UniqueID = item.UniqueID, Count = item.Count }); + Info.Inventory[o] = null; + count -= item.Count; + continue; + } + + Enqueue(new S.DeleteItem { UniqueID = item.UniqueID, Count = (ushort)count }); + if (count == item.Count) + Info.Inventory[o] = null; + else + item.Count -= (ushort)count; + break; + } + } + } + RefreshStats(); + } + + //make the guild + var guildInfo = new GuildInfo(this, guildName) { GuildIndex = ++Envir.NextGuildID }; + Envir.GuildList.Add(guildInfo); + + GuildObject guild = new GuildObject(guildInfo); + Info.GuildIndex = guildInfo.GuildIndex; + + MyGuild = guild; + MyGuildRank = guild.FindRank(Name); + GuildMembersChanged = true; + GuildNoticeChanged = true; + GuildCanRequestItems = true; + + //tell us we now have a guild + BroadcastInfo(); + MyGuild.SendGuildStatus(this); + + return true; + } + + public void EditGuildMember(string Name, string RankName, byte RankIndex, byte ChangeType) + { + if ((MyGuild == null) || (MyGuildRank == null)) + { + ReceiveChat(GameLanguage.NotInGuild, ChatType.System); + return; + } + switch (ChangeType) + { + case 0: //add member + if (!MyGuildRank.Options.HasFlag(GuildRankOptions.CanRecruit)) + { + ReceiveChat("You are not allowed to recruit new members!", ChatType.System); + return; + } + + if (Name == "") return; + + PlayerObject player = Envir.GetPlayer(Name); + if (player == null) + { + ReceiveChat(String.Format("{0} is not online!", Name), ChatType.System); + return; + } + if ((player.MyGuild != null) || (player.MyGuildRank != null) || (player.Info.GuildIndex != -1)) + { + ReceiveChat(String.Format("{0} is already in a guild!", Name), ChatType.System); + return; + } + if (!player.EnableGuildInvite) + { + ReceiveChat(String.Format("{0} is disabling guild invites!", Name), ChatType.System); + return; + } + if (player.PendingGuildInvite != null) + { + ReceiveChat(string.Format("{0} already has a guild invite pending.", Name), ChatType.System); + return; + } + + if (MyGuild.IsAtWar()) + { + ReceiveChat("Cannot recuit members whilst at war.", ChatType.System); + return; + } + + player.Enqueue(new S.GuildInvite { Name = MyGuild.Name }); + player.PendingGuildInvite = MyGuild; + break; + case 1: //delete member + if (!MyGuildRank.Options.HasFlag(GuildRankOptions.CanKick)) + { + ReceiveChat("You are not allowed to remove members!", ChatType.System); + return; + } + if (Name == "") return; + + if (!MyGuild.DeleteMember(this, Name)) + { + return; + } + break; + case 2: //promote member (and it'll auto create a new rank at bottom if the index > total ranks!) + if (!MyGuildRank.Options.HasFlag(GuildRankOptions.CanChangeRank)) + { + ReceiveChat("You are not allowed to change other members rank!", ChatType.System); + return; + } + if (Name == "") return; + MyGuild.ChangeRank(this, Name, RankIndex, RankName); + break; + case 3: //change rank name + if (!MyGuildRank.Options.HasFlag(GuildRankOptions.CanChangeRank)) + { + ReceiveChat("You are not allowed to change ranks!", ChatType.System); + return; + } + if ((RankName == "") || (RankName.Length < 3)) + { + ReceiveChat("Rank name to short!", ChatType.System); + return; + } + if (RankName.Contains("\\") || RankName.Length > 20) + { + return; + } + if (!MyGuild.ChangeRankName(this, RankName, RankIndex)) + return; + break; + case 4: //new rank + if (!MyGuildRank.Options.HasFlag(GuildRankOptions.CanChangeRank)) + { + ReceiveChat("You are not allowed to change ranks!", ChatType.System); + return; + } + if (MyGuild.Ranks.Count > 254) + { + ReceiveChat("No more rank slots available.", ChatType.System); + return; + } + MyGuild.NewRank(this); + break; + case 5: //change rank setting + if (!MyGuildRank.Options.HasFlag(GuildRankOptions.CanChangeRank)) + { + ReceiveChat("You are not allowed to change ranks!", ChatType.System); + return; + } + int temp; + + if (!int.TryParse(RankName, out temp)) + { + return; + } + MyGuild.ChangeRankOption(this, RankIndex, temp, Name); + break; + } + } + public void EditGuildNotice(List notice) + { + if ((MyGuild == null) || (MyGuildRank == null)) + { + ReceiveChat(GameLanguage.NotInGuild, ChatType.System); + return; + } + if (!MyGuildRank.Options.HasFlag(GuildRankOptions.CanChangeNotice)) + { + + ReceiveChat("You are not allowed to change the guild notice!", ChatType.System); + return; + } + if (notice.Count > 200) + { + ReceiveChat("Guild notice can not be longer then 200 lines!", ChatType.System); + return; + } + MyGuild.NewNotice(notice); + } + public void GuildInvite(bool accept) + { + if (PendingGuildInvite == null) + { + ReceiveChat("You have not been invited to a guild.", ChatType.System); + return; + } + if (!accept) return; + if (!PendingGuildInvite.HasRoom()) + { + ReceiveChat(String.Format("{0} is full.", PendingGuildInvite.Name), ChatType.System); + return; + } + PendingGuildInvite.NewMember(this); + Info.GuildIndex = PendingGuildInvite.Guildindex; + MyGuild = PendingGuildInvite; + MyGuildRank = PendingGuildInvite.FindRank(Name); + GuildMembersChanged = true; + GuildNoticeChanged = true; + //tell us we now have a guild + BroadcastInfo(); + MyGuild.SendGuildStatus(this); + PendingGuildInvite = null; + EnableGuildInvite = false; + GuildCanRequestItems = true; + //refresh guildbuffs + RefreshStats(); + if (MyGuild.BuffList.Count > 0) + Enqueue(new S.GuildBuffList() { ActiveBuffs = MyGuild.BuffList }); + } + public void RequestGuildInfo(byte Type) + { + if (MyGuild == null) return; + if (MyGuildRank == null) return; + switch (Type) + { + case 0://notice + if (GuildNoticeChanged) + Enqueue(new S.GuildNoticeChange() { notice = MyGuild.Info.Notice }); + GuildNoticeChanged = false; + break; + case 1://memberlist + if (GuildMembersChanged) + Enqueue(new S.GuildMemberChange() { Status = 255, Ranks = MyGuild.Ranks }); + break; + } + } + public void GuildNameReturn(string Name) + { + if (Name == "") CanCreateGuild = false; + if (!CanCreateGuild) return; + if ((Name.Length < 3) || (Name.Length > 20)) + { + ReceiveChat("Guild name too long.", ChatType.System); + CanCreateGuild = false; + return; + } + if (Name.Contains('\\')) + { + CanCreateGuild = false; + return; + } + if (MyGuild != null) + { + ReceiveChat("You are already part of a guild.", ChatType.System); + CanCreateGuild = false; + return; + } + GuildObject guild = Envir.GetGuild(Name); + if (guild != null) + { + ReceiveChat(string.Format("Guild {0} already exists.", Name), ChatType.System); + CanCreateGuild = false; + return; + } + + CreateGuild(Name); + CanCreateGuild = false; + } + public void GuildStorageGoldChange(byte type, uint amount) + { + if ((MyGuild == null) || (MyGuildRank == null)) + { + ReceiveChat("You are not part of a guild.", ChatType.System); + return; + } + + if (!InSafeZone) + { + ReceiveChat("You cannot use guild storage outside safezones.", ChatType.System); + return; + } + + if (type == 0)//donate + { + if (Account.Gold < amount) + { + ReceiveChat("Insufficient gold.", ChatType.System); + return; + } + + if ((MyGuild.Gold + (ulong)amount) > uint.MaxValue) + { + ReceiveChat("Guild gold limit reached.", ChatType.System); + return; + } + + Account.Gold -= amount; + MyGuild.Gold += amount; + Enqueue(new S.LoseGold { Gold = amount }); + MyGuild.SendServerPacket(new S.GuildStorageGoldChange() { Type = 0, Name = Info.Name, Amount = amount }); + MyGuild.NeedSave = true; + } + else + { + if (MyGuild.Gold < amount) + { + ReceiveChat("Insufficient gold.", ChatType.System); + return; + } + + if (!CanGainGold(amount)) + { + ReceiveChat("Gold limit reached.", ChatType.System); + return; + } + + if (MyGuildRank.Index != 0) + { + ReceiveChat("Insufficient rank.", ChatType.System); + return; + } + + MyGuild.Gold -= amount; + GainGold(amount); + MyGuild.SendServerPacket(new S.GuildStorageGoldChange() { Type = 1, Name = Info.Name, Amount = amount }); + MyGuild.NeedSave = true; + } + } + public void GuildStorageItemChange(byte type, int from, int to) + { + S.GuildStorageItemChange p = new S.GuildStorageItemChange { Type = (byte)(3 + type), From = from, To = to }; + if ((MyGuild == null) || (MyGuildRank == null)) + { + Enqueue(p); + ReceiveChat("You are not part of a guild.", ChatType.System); + return; + } + + if (!InSafeZone && type != 3) + { + Enqueue(p); + ReceiveChat("You cannot use guild storage outside safezones.", ChatType.System); + return; + } + + switch (type) + { + case 0://store + if (!MyGuildRank.Options.HasFlag(GuildRankOptions.CanStoreItem)) + { + Enqueue(p); + ReceiveChat("You do not have permission to store items in guild storage.", ChatType.System); + return; + } + if (from < 0 || from >= Info.Inventory.Length) + { + Enqueue(p); + return; + } + if (to < 0 || to >= MyGuild.StoredItems.Length) + { + Enqueue(p); + return; + } + if (Info.Inventory[from] == null) + { + Enqueue(p); + return; + } + if (Info.Inventory[from].Info.Bind.HasFlag(BindMode.DontStore)) + { + Enqueue(p); + return; + } + if (MyGuild.StoredItems[to] != null) + { + ReceiveChat("Target slot not empty.", ChatType.System); + Enqueue(p); + return; + } + MyGuild.StoredItems[to] = new GuildStorageItem() { Item = Info.Inventory[from], UserId = Info.Index }; + Info.Inventory[from] = null; + RefreshBagWeight(); + MyGuild.SendItemInfo(MyGuild.StoredItems[to].Item); + MyGuild.SendServerPacket(new S.GuildStorageItemChange() { Type = 0, User = Info.Index, Item = MyGuild.StoredItems[to], To = to, From = from }); + MyGuild.NeedSave = true; + break; + case 1://retrieve + if (!MyGuildRank.Options.HasFlag(GuildRankOptions.CanRetrieveItem)) + { + + ReceiveChat("You do not have permission to retrieve items from guild storage.", ChatType.System); + return; + } + if (from < 0 || from >= MyGuild.StoredItems.Length) + { + Enqueue(p); + return; + } + if (to < 0 || to >= Info.Inventory.Length) + { + Enqueue(p); + return; + } + if (Info.Inventory[to] != null) + { + ReceiveChat("Target slot not empty.", ChatType.System); + Enqueue(p); + return; + } + if (MyGuild.StoredItems[from] == null) + { + Enqueue(p); + return; + } + if (MyGuild.StoredItems[from].Item.Info.Bind.HasFlag(BindMode.DontStore)) + { + Enqueue(p); + return; + } + Info.Inventory[to] = MyGuild.StoredItems[from].Item; + MyGuild.StoredItems[from] = null; + MyGuild.SendServerPacket(new S.GuildStorageItemChange() { Type = 1, User = Info.Index, To = to, From = from }); + RefreshBagWeight(); + MyGuild.NeedSave = true; + break; + case 2: // Move Item + GuildStorageItem q = null; + if (!MyGuildRank.Options.HasFlag(GuildRankOptions.CanStoreItem)) + { + Enqueue(p); + ReceiveChat("You do not have permission to move items in guild storage.", ChatType.System); + return; + } + if (from < 0 || from >= MyGuild.StoredItems.Length) + { + Enqueue(p); + return; + } + if (to < 0 || to >= MyGuild.StoredItems.Length) + { + Enqueue(p); + return; + } + if (MyGuild.StoredItems[from] == null) + { + Enqueue(p); + return; + } + if (MyGuild.StoredItems[from].Item.Info.Bind.HasFlag(BindMode.DontStore)) + { + Enqueue(p); + return; + } + if (MyGuild.StoredItems[to] != null) + { + q = MyGuild.StoredItems[to]; + } + MyGuild.StoredItems[to] = MyGuild.StoredItems[from]; + if (q != null) MyGuild.StoredItems[from] = q; + else MyGuild.StoredItems[from] = null; + + MyGuild.SendItemInfo(MyGuild.StoredItems[to].Item); + + if (MyGuild.StoredItems[from] != null) MyGuild.SendItemInfo(MyGuild.StoredItems[from].Item); + + MyGuild.SendServerPacket(new S.GuildStorageItemChange() { Type = 2, User = Info.Index, Item = MyGuild.StoredItems[to], To = to, From = from }); + MyGuild.NeedSave = true; + break; + case 3://request list + if (!GuildCanRequestItems) return; + GuildCanRequestItems = false; + for (int i = 0; i < MyGuild.StoredItems.Length; i++) + { + if (MyGuild.StoredItems[i] == null) continue; + UserItem item = MyGuild.StoredItems[i].Item; + if (item == null) continue; + //CheckItemInfo(item.Info); + CheckItem(item); + } + Enqueue(new S.GuildStorageList() { Items = MyGuild.StoredItems }); + break; + } + + } + public void GuildWarReturn(string Name) + { + if (MyGuild == null || MyGuildRank != MyGuild.Ranks[0]) return; + + GuildObject enemyGuild = Envir.GetGuild(Name); + + if (enemyGuild == null) + { + ReceiveChat(string.Format("Could not find guild {0}.", Name), ChatType.System); + return; + } + + if (MyGuild == enemyGuild) + { + ReceiveChat("Cannot go to war with your own guild.", ChatType.System); + return; + } + + if (MyGuild.WarringGuilds.Contains(enemyGuild)) + { + ReceiveChat("Already at war with this guild.", ChatType.System); + return; + } + + if (MyGuild.Gold < Settings.Guild_WarCost) + { + ReceiveChat("Not enough funds in guild bank.", ChatType.System); + return; + } + + if (MyGuild.GoToWar(enemyGuild)) + { + ReceiveChat(string.Format("You started a war with {0}.", Name), ChatType.System); + enemyGuild.SendMessage(string.Format("{0} has started a war", MyGuild.Name), ChatType.System); + + MyGuild.Gold -= Settings.Guild_WarCost; + MyGuild.SendServerPacket(new S.GuildStorageGoldChange() { Type = 2, Name = Info.Name, Amount = Settings.Guild_WarCost }); + } + } + + public override bool AtWar(HumanObject attacker) + { + if (CurrentMap.Info.Fight) return true; + + if (MyGuild == null) return false; + + if (attacker is PlayerObject playerAttacker) + { + if (attacker == null || playerAttacker.MyGuild == null) return false; + + if (!MyGuild.WarringGuilds.Contains(playerAttacker.MyGuild)) return false; + } + + return true; + } + protected override void CleanUp() + { + base.CleanUp(); + Account = null; + } + + public void GuildBuffUpdate(byte type, int id) + { + if (MyGuild == null) return; + if (MyGuildRank == null) return; + if (id < 0) return; + switch (type) + { + case 0://request info list + if (RequestedGuildBuffInfo) return; + Enqueue(new S.GuildBuffList() { GuildBuffs = Settings.Guild_BuffList }); + break; + case 1://buy the buff + if (!MyGuildRank.Options.HasFlag(GuildRankOptions.CanActivateBuff)) + { + ReceiveChat("You do not have the correct guild rank.", ChatType.System); + return; + } + GuildBuffInfo BuffInfo = Envir.FindGuildBuffInfo(id); + if (BuffInfo == null) + { + ReceiveChat("Buff does not excist.", ChatType.System); + return; + } + if (MyGuild.GetBuff(id) != null) + { + ReceiveChat("Buff already obtained.", ChatType.System); + return; + } + if ((MyGuild.Info.Level < BuffInfo.LevelRequirement) || (MyGuild.Info.SparePoints < BuffInfo.PointsRequirement)) return;//client checks this so it shouldnt be possible without a moded client :p + MyGuild.NewBuff(id); + break; + case 2://activate the buff + if (!MyGuildRank.Options.HasFlag(GuildRankOptions.CanActivateBuff)) + { + ReceiveChat("You do not have the correct guild rank.", ChatType.System); + return; + } + GuildBuff Buff = MyGuild.GetBuff(id); + if (Buff == null) + { + ReceiveChat("Buff not obtained.", ChatType.System); + return; + } + if ((MyGuild.Gold < Buff.Info.ActivationCost) || (Buff.Active)) return; + MyGuild.ActivateBuff(id); + break; + } + } + + #endregion + + #region Trading + + public void DepositTradeItem(int from, int to) + { + S.DepositTradeItem p = new S.DepositTradeItem { From = from, To = to, Success = false }; + + if (from < 0 || from >= Info.Inventory.Length) + { + Enqueue(p); + return; + } + + if (to < 0 || to >= Info.Trade.Length) + { + Enqueue(p); + return; + } + + UserItem temp = Info.Inventory[from]; + + if (temp == null) + { + Enqueue(p); + return; + } + + if (temp.Info.Bind.HasFlag(BindMode.DontTrade)) + { + Enqueue(p); + return; + } + + if (Info.Trade[to] == null) + { + Info.Trade[to] = temp; + Info.Inventory[from] = null; + RefreshBagWeight(); + TradeItem(); + + Report.ItemMoved(temp, MirGridType.Inventory, MirGridType.Trade, from, to); + + p.Success = true; + Enqueue(p); + return; + } + Enqueue(p); + + } + public void RetrieveTradeItem(int from, int to) + { + S.RetrieveTradeItem p = new S.RetrieveTradeItem { From = from, To = to, Success = false }; + + if (from < 0 || from >= Info.Trade.Length) + { + Enqueue(p); + return; + } + + if (to < 0 || to >= Info.Inventory.Length) + { + Enqueue(p); + return; + } + + UserItem temp = Info.Trade[from]; + + if (temp == null) + { + Enqueue(p); + return; + } + + if (Info.Inventory[to] == null) + { + Info.Inventory[to] = temp; + Info.Trade[from] = null; + + p.Success = true; + RefreshBagWeight(); + TradeItem(); + + Report.ItemMoved(temp, MirGridType.Trade, MirGridType.Inventory, from, to); + } + + Enqueue(p); + } + + + + public void TradeRequest() + { + if (Envir.Time < NextTradeTime) return; + NextTradeTime = Envir.Time + Settings.TradeDelay; + + if (TradePartner != null) + { + ReceiveChat("You are already trading.", ChatType.System); + return; + } + + Point target = Functions.PointMove(CurrentLocation, Direction, 1); + Cell cell = CurrentMap.GetCell(target); + PlayerObject player = null; + + if (cell.Objects == null || cell.Objects.Count == 0) + { + ReceiveChat(GameLanguage.FaceToTrade, ChatType.System); + return; + } + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + if (ob.Race != ObjectType.Player) continue; + + player = Envir.GetPlayer(ob.Name); + } + + if (player == null) + { + ReceiveChat(GameLanguage.FaceToTrade, ChatType.System); + return; + } + + if (player != null) + { + if (!Functions.FacingEachOther(Direction, CurrentLocation, player.Direction, player.CurrentLocation)) + { + ReceiveChat(GameLanguage.FaceToTrade, ChatType.System); + return; + } + + if (player == this) + { + ReceiveChat("You cannot trade with your self.", ChatType.System); + return; + } + + if (player.Dead || Dead) + { + ReceiveChat("Cannot trade when dead", ChatType.System); + return; + } + + if (player.TradeInvitation != null) + { + ReceiveChat(string.Format("Player {0} already has a trade invitation.", player.Info.Name), ChatType.System); + return; + } + + if (!player.AllowTrade) + { + ReceiveChat(string.Format("Player {0} is not allowing trade at the moment.", player.Info.Name), ChatType.System); + return; + } + + if (!Functions.InRange(player.CurrentLocation, CurrentLocation, Globals.DataRange) || player.CurrentMap != CurrentMap) + { + ReceiveChat(string.Format("Player {0} is not within trading range.", player.Info.Name), ChatType.System); + return; + } + + if (player.TradePartner != null) + { + ReceiveChat(string.Format("Player {0} is already trading.", player.Info.Name), ChatType.System); + return; + } + + player.TradeInvitation = this; + player.Enqueue(new S.TradeRequest { Name = Info.Name }); + } + } + public void TradeReply(bool accept) + { + if (TradeInvitation == null || TradeInvitation.Info == null) + { + TradeInvitation = null; + return; + } + + if (!accept) + { + TradeInvitation.ReceiveChat(string.Format("Player {0} has refused to trade.", Info.Name), ChatType.System); + TradeInvitation = null; + return; + } + + if (TradePartner != null) + { + ReceiveChat("You are already trading.", ChatType.System); + TradeInvitation = null; + return; + } + + if (TradeInvitation.TradePartner != null) + { + ReceiveChat(string.Format("Player {0} is already trading.", TradeInvitation.Info.Name), ChatType.System); + TradeInvitation = null; + return; + } + + TradePartner = TradeInvitation; + TradeInvitation.TradePartner = this; + TradeInvitation = null; + + Enqueue(new S.TradeAccept { Name = TradePartner.Info.Name }); + TradePartner.Enqueue(new S.TradeAccept { Name = Info.Name }); + } + public void TradeGold(uint amount) + { + TradeUnlock(); + + if (TradePartner == null) return; + + if (amount < 1 || Account.Gold < amount) + { + return; + } + + TradeGoldAmount += amount; + Account.Gold -= amount; + + Enqueue(new S.LoseGold { Gold = amount }); + TradePartner.Enqueue(new S.TradeGold { Amount = TradeGoldAmount }); + } + public void TradeItem() + { + TradeUnlock(); + + if (TradePartner == null) return; + + for (int i = 0; i < Info.Trade.Length; i++) + { + UserItem u = Info.Trade[i]; + if (u == null) continue; + + //TradePartner.CheckItemInfo(u.Info); + TradePartner.CheckItem(u); + } + + TradePartner.Enqueue(new S.TradeItem { TradeItems = Info.Trade }); + } + + public void TradeUnlock() + { + TradeLocked = false; + + if (TradePartner != null) + { + TradePartner.TradeLocked = false; + } + } + + public void TradeConfirm(bool confirm) + { + if (!confirm) + { + TradeLocked = false; + return; + } + + if (TradePartner == null) + { + TradeCancel(); + return; + } + + if (!Functions.InRange(TradePartner.CurrentLocation, CurrentLocation, Globals.DataRange) || TradePartner.CurrentMap != CurrentMap || + !Functions.FacingEachOther(Direction, CurrentLocation, TradePartner.Direction, TradePartner.CurrentLocation)) + { + TradeCancel(); + return; + } + + TradeLocked = true; + + if (TradeLocked && !TradePartner.TradeLocked) + { + TradePartner.ReceiveChat(string.Format("Player {0} is waiting for you to confirm trade.", Info.Name), ChatType.System); + } + + if (!TradeLocked || !TradePartner.TradeLocked) return; + + PlayerObject[] TradePair = new PlayerObject[2] { TradePartner, this }; + + bool CanTrade = true; + UserItem u; + + //check if both people can accept the others items + for (int p = 0; p < 2; p++) + { + int o = p == 0 ? 1 : 0; + + if (!TradePair[o].CanGainItems(TradePair[p].Info.Trade)) + { + CanTrade = false; + TradePair[p].ReceiveChat("Trading partner cannot accept all items.", ChatType.System); + TradePair[p].Enqueue(new S.TradeCancel { Unlock = true }); + + TradePair[o].ReceiveChat("Unable to accept all items.", ChatType.System); + TradePair[o].Enqueue(new S.TradeCancel { Unlock = true }); + + return; + } + + if (!TradePair[o].CanGainGold(TradePair[p].TradeGoldAmount)) + { + CanTrade = false; + TradePair[p].ReceiveChat("Trading partner cannot accept any more gold.", ChatType.System); + TradePair[p].Enqueue(new S.TradeCancel { Unlock = true }); + + TradePair[o].ReceiveChat("Unable to accept any more gold.", ChatType.System); + TradePair[o].Enqueue(new S.TradeCancel { Unlock = true }); + + return; + } + } + + //swap items + if (CanTrade) + { + for (int p = 0; p < 2; p++) + { + int o = p == 0 ? 1 : 0; + + for (int i = 0; i < TradePair[p].Info.Trade.Length; i++) + { + u = TradePair[p].Info.Trade[i]; + + if (u == null) continue; + + TradePair[o].GainItem(u); + TradePair[p].Info.Trade[i] = null; + + Report.ItemMoved(u, MirGridType.Trade, MirGridType.Inventory, i, -99, string.Format("Trade from {0} to {1}", TradePair[p].Name, TradePair[o].Name)); + } + + if (TradePair[p].TradeGoldAmount > 0) + { + Report.GoldChanged(TradePair[p].TradeGoldAmount, true, string.Format("Trade from {0} to {1}", TradePair[p].Name, TradePair[o].Name)); + + TradePair[o].GainGold(TradePair[p].TradeGoldAmount); + TradePair[p].TradeGoldAmount = 0; + } + + TradePair[p].ReceiveChat("Trade successful.", ChatType.System); + TradePair[p].Enqueue(new S.TradeConfirm()); + + TradePair[p].TradeLocked = false; + TradePair[p].TradePartner = null; + } + } + } + public void TradeCancel() + { + TradeUnlock(); + + if (TradePartner == null) + { + return; + } + + PlayerObject[] TradePair = new PlayerObject[2] { TradePartner, this }; + + for (int p = 0; p < 2; p++) + { + if (TradePair[p] != null) + { + for (int t = 0; t < TradePair[p].Info.Trade.Length; t++) + { + UserItem temp = TradePair[p].Info.Trade[t]; + + if (temp == null) continue; + + if (FreeSpace(TradePair[p].Info.Inventory) < 1) + { + TradePair[p].GainItemMail(temp, 1); + Report.ItemMailed(temp, temp.Count, 1); + + TradePair[p].Enqueue(new S.DeleteItem { UniqueID = temp.UniqueID, Count = temp.Count }); + TradePair[p].Info.Trade[t] = null; + continue; + } + + for (int i = 0; i < TradePair[p].Info.Inventory.Length; i++) + { + if (TradePair[p].Info.Inventory[i] != null) continue; + + //Put item back in inventory + if (TradePair[p].CanGainItem(temp)) + { + TradePair[p].RetrieveTradeItem(t, i); + } + else //Send item to mailbox if it can no longer be stored + { + TradePair[p].GainItemMail(temp, 1); + Report.ItemMailed(temp, temp.Count, 1); + + TradePair[p].Enqueue(new S.DeleteItem { UniqueID = temp.UniqueID, Count = temp.Count }); + } + + TradePair[p].Info.Trade[t] = null; + + break; + } + } + + //Put back deposited gold + if (TradePair[p].TradeGoldAmount > 0) + { + Report.GoldChanged(TradePair[p].TradeGoldAmount, false); + + TradePair[p].GainGold(TradePair[p].TradeGoldAmount); + TradePair[p].TradeGoldAmount = 0; + } + + TradePair[p].TradeLocked = false; + TradePair[p].TradePartner = null; + + TradePair[p].Enqueue(new S.TradeCancel { Unlock = false }); + } + } + } + + #endregion + + #region Quests + + public void AcceptQuest(int index) + { + bool canAccept = true; + + if (CurrentQuests.Exists(e => e.Index == index)) return; //e.Info.NpcIndex == npcIndex && + + QuestInfo info = Envir.QuestInfoList.FirstOrDefault(d => d.Index == index); + + NPCObject npc = null; + + for (int i = CurrentMap.NPCs.Count - 1; i >= 0; i--) + { + if (CurrentMap.NPCs[i].ObjectID != info.NpcIndex) continue; + + if (!Functions.InRange(CurrentMap.NPCs[i].CurrentLocation, CurrentLocation, Globals.DataRange)) break; + npc = CurrentMap.NPCs[i]; + break; + } + if (npc == null || !npc.VisibleLog[Info.Index] || !npc.Visible) return; + + if (!info.CanAccept(this)) + { + canAccept = false; + } + + if (CurrentQuests.Count >= Globals.MaxConcurrentQuests) + { + ReceiveChat("Maximum amount of quests already taken.", ChatType.System); + return; + } + + if (CompletedQuests.Contains(index)) + { + ReceiveChat("Quest has already been completed.", ChatType.System); + return; + } + + //check previous chained quests have been completed + QuestInfo tempInfo = info; + while (tempInfo != null && tempInfo.RequiredQuest != 0) + { + if (!CompletedQuests.Contains(tempInfo.RequiredQuest)) + { + canAccept = false; + break; + } + + tempInfo = Envir.QuestInfoList.FirstOrDefault(d => d.Index == tempInfo.RequiredQuest); + } + + if (!canAccept) + { + ReceiveChat("Could not accept quest.", ChatType.System); + return; + } + + if (info.CarryItems.Count > 0) + { + foreach (QuestItemTask carryItem in info.CarryItems) + { + ushort count = carryItem.Count; + + while (count > 0) + { + UserItem item = Envir.CreateFreshItem(carryItem.Item); + + if (item.Info.StackSize > count) + { + item.Count = count; + count = 0; + } + else + { + count -= item.Info.StackSize; + item.Count = item.Info.StackSize; + } + + if (!CanGainQuestItem(item)) + { + RecalculateQuestBag(); + return; + } + + GainQuestItem(item); + + Report.ItemChanged(item, item.Count, 2); + } + } + } + + QuestProgressInfo quest = new QuestProgressInfo(index); + + quest.Init(this); + + SendUpdateQuest(quest, QuestState.Add, true); + + CallDefaultNPC(DefaultNPCType.OnAcceptQuest, index); + } + + public void FinishQuest(int questIndex, int selectedItemIndex = -1) + { + QuestProgressInfo quest = CurrentQuests.FirstOrDefault(e => e.Info.Index == questIndex); + + if (quest == null || !quest.Completed) return; + + NPCObject npc = null; + + for (int i = CurrentMap.NPCs.Count - 1; i >= 0; i--) + { + if (CurrentMap.NPCs[i].ObjectID != quest.Info.FinishNpcIndex) continue; + + if (!Functions.InRange(CurrentMap.NPCs[i].CurrentLocation, CurrentLocation, Globals.DataRange)) break; + npc = CurrentMap.NPCs[i]; + break; + } + if (npc == null || !npc.VisibleLog[Info.Index] || !npc.Visible) return; + + List rewardItems = new List(); + + foreach (var reward in quest.Info.FixedRewards) + { + ushort count = reward.Count; + + UserItem rewardItem; + + while (count > 0) + { + rewardItem = Envir.CreateFreshItem(reward.Item); + if (reward.Item.StackSize >= count) + { + rewardItem.Count = count; + count = 0; + } + else + { + rewardItem.Count = reward.Item.StackSize; + count -= reward.Item.StackSize; + } + + rewardItems.Add(rewardItem); + } + } + + if (selectedItemIndex >= 0) + { + for (int i = 0; i < quest.Info.SelectRewards.Count; i++) + { + if (selectedItemIndex != i) continue; + + ushort count = quest.Info.SelectRewards[i].Count; + UserItem rewardItem; + + while (count > 0) + { + rewardItem = Envir.CreateFreshItem(quest.Info.SelectRewards[i].Item); + if (quest.Info.SelectRewards[i].Item.StackSize >= count) + { + rewardItem.Count = count; + count = 0; + } + else + { + rewardItem.Count = quest.Info.SelectRewards[i].Item.StackSize; + count -= quest.Info.SelectRewards[i].Item.StackSize; + } + + rewardItems.Add(rewardItem); + } + } + } + + if (!CanGainItems(rewardItems.ToArray())) + { + ReceiveChat("Cannot hand in quest whilst bag is full.", ChatType.System); + return; + } + + if (quest.Info.Type != QuestType.Repeatable) + { + Info.CompletedQuests.Add(quest.Index); + GetCompletedQuests(); + } + + SendUpdateQuest(quest, QuestState.Remove); + + if (quest.Info.CarryItems.Count > 0) + { + foreach (QuestItemTask carryItem in quest.Info.CarryItems) + { + TakeQuestItem(carryItem.Item, carryItem.Count); + } + } + + foreach (QuestItemTask iTask in quest.Info.ItemTasks) + { + TakeQuestItem(iTask.Item, iTask.Count); + } + + foreach (UserItem item in rewardItems) + { + GainItem(item); + } + + RecalculateQuestBag(); + + GainGold(quest.Info.GoldReward); + GainExp(quest.Info.ExpReward); + GainCredit(quest.Info.CreditReward); + + CallDefaultNPC(DefaultNPCType.OnFinishQuest, questIndex); + } + public void AbandonQuest(int questIndex) + { + QuestProgressInfo quest = CurrentQuests.FirstOrDefault(e => e.Info.Index == questIndex); + + if (quest == null) return; + + SendUpdateQuest(quest, QuestState.Remove); + + RecalculateQuestBag(); + } + public void ShareQuest(int questIndex) + { + bool shared = false; + + if (GroupMembers != null) + { + foreach (PlayerObject player in GroupMembers. + Where(player => player.CurrentMap == CurrentMap && + Functions.InRange(player.CurrentLocation, CurrentLocation, Globals.DataRange) && + !player.Dead && player != this)) + { + player.Enqueue(new S.ShareQuest { QuestIndex = questIndex, SharerName = Name }); + shared = true; + } + } + + if (!shared) + { + ReceiveChat("Quest could not be shared with anyone.", ChatType.System); + } + } + + public void CheckGroupQuestKill(MonsterInfo mInfo) + { + if (GroupMembers != null) + { + foreach (PlayerObject player in GroupMembers. + Where(player => player.CurrentMap == CurrentMap && + Functions.InRange(player.CurrentLocation, CurrentLocation, Globals.DataRange) && + !player.Dead)) + { + player.CheckNeedQuestKill(mInfo); + } + } + else + CheckNeedQuestKill(mInfo); + } + public override bool CheckGroupQuestItem(UserItem item, bool gainItem = true) + { + bool itemCollected = false; + + if (GroupMembers != null) + { + foreach (PlayerObject player in GroupMembers. + Where(player => player != null && player.Node != null && player.CurrentMap == CurrentMap && + Functions.InRange(player.CurrentLocation, CurrentLocation, Globals.DataRange) && + !player.Dead)) + { + if (player.CheckNeedQuestItem(item, gainItem)) + { + itemCollected = true; + player.Report.ItemChanged(item, item.Count, 2, "CheckGroupQuestItem (WinQuestItem)"); + } + } + } + else + { + if (CheckNeedQuestItem(item, gainItem)) + { + itemCollected = true; + Report.ItemChanged(item, item.Count, 2, "CheckGroupQuestItem (WinQuestItem)"); + } + } + + return itemCollected; + } + + public bool CheckNeedQuestItem(UserItem item, bool gainItem = true) + { + foreach (QuestProgressInfo quest in CurrentQuests. + Where(e => e.ItemTaskCount.Count > 0). + Where(e => e.NeedItem(item.Info)). + Where(e => CanGainQuestItem(item))) + { + if (gainItem) + { + GainQuestItem(item); + quest.ProcessItem(Info.QuestInventory); + + Enqueue(new S.SendOutputMessage { Message = string.Format("You found {0}.", item.FriendlyName), Type = OutputMessageType.Quest }); + + SendUpdateQuest(quest, QuestState.Update); + + Report.ItemChanged(item, item.Count, 2, "CheckNeedQuestItem (WinQuestItem)"); + } + return true; + } + + return false; + } + public bool CheckNeedQuestFlag(int flagNumber) + { + foreach (QuestProgressInfo quest in CurrentQuests. + Where(e => e.FlagTaskSet.Count > 0). + Where(e => e.NeedFlag(flagNumber))) + { + quest.ProcessFlag(Info.Flags); + + //Enqueue(new S.SendOutputMessage { Message = string.Format("Location visited."), Type = OutputMessageType.Quest }); + + SendUpdateQuest(quest, QuestState.Update); + return true; + } + + return false; + } + public void CheckNeedQuestKill(MonsterInfo mInfo) + { + foreach (QuestProgressInfo quest in CurrentQuests. + Where(e => e.KillTaskCount.Count > 0). + Where(quest => quest.NeedKill(mInfo))) + { + quest.ProcessKill(mInfo); + + Enqueue(new S.SendOutputMessage { Message = string.Format("You killed {0}.", mInfo.GameName), Type = OutputMessageType.Quest }); + + SendUpdateQuest(quest, QuestState.Update); + } + } + + public void RecalculateQuestBag() + { + for (int i = Info.QuestInventory.Length - 1; i >= 0; i--) + { + UserItem itm = Info.QuestInventory[i]; + + if (itm == null) continue; + + bool itemRequired = false; + bool isCarryItem = false; + + foreach (QuestProgressInfo quest in CurrentQuests) + { + foreach (QuestItemTask carryItem in quest.Info.CarryItems) + { + if (carryItem.Item == itm.Info) + { + isCarryItem = true; + break; + } + } + + foreach (QuestItemTask task in quest.Info.ItemTasks) + { + if (task.Item == itm.Info) + { + itemRequired = true; + break; + } + } + } + + if (!itemRequired && !isCarryItem) + { + Info.QuestInventory[i] = null; + Enqueue(new S.DeleteQuestItem { UniqueID = itm.UniqueID, Count = itm.Count }); + } + } + } + + public void SendUpdateQuest(QuestProgressInfo quest, QuestState state, bool trackQuest = false) + { + quest.CheckCompleted(); + + switch (state) + { + case QuestState.Add: + if (!CurrentQuests.Contains(quest)) + { + CurrentQuests.Add(quest); + } + quest.SetTimer(); + break; + case QuestState.Remove: + if (CurrentQuests.Contains(quest)) + { + CurrentQuests.Remove(quest); + } + quest.RemoveTimer(); + break; + } + + Enqueue(new S.ChangeQuest + { + Quest = quest.CreateClientQuestProgress(), + QuestState = state, + TrackQuest = trackQuest + }); + } + + public void GetCompletedQuests() + { + Enqueue(new S.CompleteQuest + { + CompletedQuests = CompletedQuests + }); + } + + #endregion + + #region Mail + + public void SendMail(string name, string message) + { + CharacterInfo player = Envir.GetCharacterInfo(name); + + if (player == null) + { + ReceiveChat(string.Format(GameLanguage.CouldNotFindPlayer, name), ChatType.System); + return; + } + + if (player.Friends.Any(e => e.Info == Info && e.Blocked)) + { + ReceiveChat("Player is not accepting your mail.", ChatType.System); + return; + } + + if (Info.Friends.Any(e => e.Info == player && e.Blocked)) + { + ReceiveChat("Cannot mail player whilst they are on your blacklist.", ChatType.System); + return; + } + + //sent from player + MailInfo mail = new MailInfo(player.Index, true) + { + Sender = Info.Name, + Message = message, + Gold = 0 + }; + + mail.Send(); + } + + public void SendMail(string name, string message, uint gold, ulong[] items, bool stamped) + { + CharacterInfo player = Envir.GetCharacterInfo(name); + + if (player == null) + { + ReceiveChat(string.Format(GameLanguage.CouldNotFindPlayer, name), ChatType.System); + return; + } + + bool hasStamp = false; + uint totalGold = 0; + uint parcelCost = GetMailCost(items, gold, stamped); + + totalGold = gold + parcelCost; + + if (Account.Gold < totalGold || Account.Gold < gold || gold > totalGold) + { + Enqueue(new S.MailSent { Result = -1 }); + return; + } + + //Validate user has stamp + if (stamped) + { + for (int i = 0; i < Info.Inventory.Length; i++) + { + UserItem item = Info.Inventory[i]; + + if (item == null || item.Info.Type != ItemType.Nothing || item.Info.Shape != 1 || item.Count < 1) continue; + + hasStamp = true; + + if (item.Count > 1) item.Count--; + else Info.Inventory[i] = null; + + Enqueue(new S.DeleteItem { UniqueID = item.UniqueID, Count = 1 }); + break; + } + } + + List giftItems = new List(); + + for (int j = 0; j < (hasStamp ? 5 : 1); j++) + { + if (items[j] < 1) continue; + + for (int i = 0; i < Info.Inventory.Length; i++) + { + UserItem item = Info.Inventory[i]; + + if (item == null || items[j] != item.UniqueID) continue; + + if (item.Info.Bind.HasFlag(BindMode.DontTrade)) + { + ReceiveChat(string.Format("{0} cannot be mailed", item.FriendlyName), ChatType.System); + return; + } + + if (item.Info.Bind.HasFlag(BindMode.NoMail)) + { + ReceiveChat(string.Format("{0} cannot be mailed", item.FriendlyName), ChatType.System); + Enqueue(new S.MailSent { Result = -1 }); + return; + } + + giftItems.Add(item); + + Info.Inventory[i] = null; + Enqueue(new S.DeleteItem { UniqueID = item.UniqueID, Count = item.Count }); + } + } + + if (totalGold > 0) + { + Account.Gold -= totalGold; + Enqueue(new S.LoseGold { Gold = totalGold }); + } + + //Create parcel + MailInfo mail = new MailInfo(player.Index, true) + { + MailID = ++Envir.NextMailID, + Sender = Info.Name, + Message = message, + Gold = gold, + Items = giftItems + }; + + mail.Send(); + + Enqueue(new S.MailSent { Result = 1 }); + } + + public void ReadMail(ulong mailID) + { + MailInfo mail = Info.Mail.SingleOrDefault(e => e.MailID == mailID); + + if (mail == null) return; + + mail.DateOpened = Envir.Now; + + GetMail(); + } + + public void CollectMail(ulong mailID) + { + MailInfo mail = Info.Mail.SingleOrDefault(e => e.MailID == mailID); + + if (mail == null) return; + + if (!mail.Collected) + { + ReceiveChat("Mail must be collected from the post office.", ChatType.System); + return; + } + + if (mail.Items.Count > 0) + { + if (!CanGainItems(mail.Items.ToArray())) + { + ReceiveChat("Cannot collect items when bag is full.", ChatType.System); + return; + } + + for (int i = 0; i < mail.Items.Count; i++) + { + GainItem(mail.Items[i]); + } + } + + if (mail.Gold > 0) + { + uint gold = mail.Gold; + + if (gold + Account.Gold >= uint.MaxValue) + gold = uint.MaxValue - Account.Gold; + + GainGold(gold); + } + + mail.Items = new List(); + mail.Gold = 0; + + mail.Collected = true; + + Enqueue(new S.ParcelCollected { Result = 1 }); + + GetMail(); + } + + public void DeleteMail(ulong mailID) + { + MailInfo mail = Info.Mail.SingleOrDefault(e => e.MailID == mailID); + + if (mail == null) return; + + Info.Mail.Remove(mail); + + GetMail(); + } + + public void LockMail(ulong mailID, bool lockMail) + { + MailInfo mail = Info.Mail.SingleOrDefault(e => e.MailID == mailID); + + if (mail == null) return; + + mail.Locked = lockMail; + + GetMail(); + } + + public uint GetMailCost(ulong[] items, uint gold, bool stamped) + { + uint cost = 0; + + if (!Settings.MailFreeWithStamp || !stamped) + { + if (gold > 0 && Settings.MailCostPer1KGold > 0) + { + cost += (uint)Math.Floor((decimal)gold / 1000) * Settings.MailCostPer1KGold; + } + + if (items != null && items.Length > 0 && Settings.MailItemInsurancePercentage > 0) + { + for (int j = 0; j < (stamped ? 5 : 1); j++) + { + if (items[j] < 1) continue; + + for (int i = 0; i < Info.Inventory.Length; i++) + { + UserItem item = Info.Inventory[i]; + + if (item == null || items[j] != item.UniqueID) continue; + + cost += (uint)Math.Floor((double)item.Price() / 100 * Settings.MailItemInsurancePercentage); + } + } + } + } + + + return cost; + } + + public void GetMail() + { + List mail = new List(); + + int start = (Info.Mail.Count - Settings.MailCapacity) > 0 ? (Info.Mail.Count - (int)Settings.MailCapacity) : 0; + + for (int i = start; i < Info.Mail.Count; i++) + { + foreach (UserItem itm in Info.Mail[i].Items) + { + CheckItem(itm); + } + + mail.Add(Info.Mail[i].CreateClientMail()); + } + + //foreach (MailInfo m in Info.Mail) + //{ + // foreach (UserItem itm in m.Items) + // { + // CheckItem(itm); + // } + + // mail.Add(m.CreateClientMail()); + //} + + NewMail = false; + + Enqueue(new S.ReceiveMail { Mail = mail }); + } + + public int GetMailAwaitingCollectionAmount() + { + int count = 0; + for (int i = 0; i < Info.Mail.Count; i++) + { + if (!Info.Mail[i].Collected) count++; + } + + return count; + } + + #endregion + + #region Friends + public void AddFriend(string name, bool blocked = false) + { + CharacterInfo info = Envir.GetCharacterInfo(name); + + if (info == null) + { + ReceiveChat("Player doesn't exist", ChatType.System); + return; + } + + if (Name == name) + { + ReceiveChat("Cannot add yourself", ChatType.System); + return; + } + + if (Info.Friends.Any(e => e.Index == info.Index)) + { + ReceiveChat("Player already added", ChatType.System); + return; + } + + FriendInfo friend = new FriendInfo(info, blocked); + + Info.Friends.Add(friend); + + GetFriends(); + } + + public void RemoveFriend(int index) + { + FriendInfo friend = Info.Friends.FirstOrDefault(e => e.Index == index); + + if (friend == null) + { + return; + } + + Info.Friends.Remove(friend); + + GetFriends(); + } + + public void AddMemo(int index, string memo) + { + if (string.IsNullOrEmpty(memo) || memo.Length > 200) return; + + FriendInfo friend = Info.Friends.FirstOrDefault(e => e.Index == index); + + if (friend == null) + { + return; + } + + friend.Memo = memo; + + GetFriends(); + } + + public void GetFriends() + { + List friends = new List(); + + foreach (FriendInfo friend in Info.Friends) + { + if (friend.Info != null) + { + friends.Add(friend.CreateClientFriend()); + } + } + + Enqueue(new S.FriendUpdate { Friends = friends }); + } + + #endregion + + #region Refining + + public void DepositRefineItem(int from, int to) + { + + S.DepositRefineItem p = new S.DepositRefineItem { From = from, To = to, Success = false }; + + if (NPCPage == null || !String.Equals(NPCPage.Key, NPCScript.RefineKey, StringComparison.CurrentCultureIgnoreCase)) + { + Enqueue(p); + return; + } + NPCObject ob = null; + for (int i = 0; i < CurrentMap.NPCs.Count; i++) + { + if (CurrentMap.NPCs[i].ObjectID != NPCObjectID) continue; + ob = CurrentMap.NPCs[i]; + break; + } + + if (ob == null || !Functions.InRange(ob.CurrentLocation, CurrentLocation, Globals.DataRange)) + { + Enqueue(p); + return; + } + + + if (from < 0 || from >= Info.Inventory.Length) + { + Enqueue(p); + return; + } + + if (to < 0 || to >= Info.Refine.Length) + { + Enqueue(p); + return; + } + + UserItem temp = Info.Inventory[from]; + + if (temp == null) + { + Enqueue(p); + return; + } + + if (Info.Refine[to] == null) + { + Info.Refine[to] = temp; + Info.Inventory[from] = null; + RefreshBagWeight(); + + Report.ItemMoved(temp, MirGridType.Inventory, MirGridType.Refine, from, to); + + p.Success = true; + Enqueue(p); + return; + } + Enqueue(p); + + } + public void RetrieveRefineItem(int from, int to) + { + S.RetrieveRefineItem p = new S.RetrieveRefineItem { From = from, To = to, Success = false }; + + if (from < 0 || from >= Info.Refine.Length) + { + Enqueue(p); + return; + } + + if (to < 0 || to >= Info.Inventory.Length) + { + Enqueue(p); + return; + } + + UserItem temp = Info.Refine[from]; + + if (temp == null) + { + Enqueue(p); + return; + } + + if (Info.Inventory[to] == null) + { + Info.Inventory[to] = temp; + Info.Refine[from] = null; + + Report.ItemMoved(temp, MirGridType.Refine, MirGridType.Inventory, from, to); + + p.Success = true; + RefreshBagWeight(); + Enqueue(p); + + return; + } + Enqueue(p); + } + public void RefineCancel() + { + for (int t = 0; t < Info.Refine.Length; t++) + { + UserItem temp = Info.Refine[t]; + + if (temp == null) continue; + + for (int i = 0; i < Info.Inventory.Length; i++) + { + if (Info.Inventory[i] != null) continue; + + //Put item back in inventory + if (CanGainItem(temp)) + { + RetrieveRefineItem(t, i); + } + else //Send item via mail if it can no longer be stored + { + Enqueue(new S.DeleteItem { UniqueID = temp.UniqueID, Count = temp.Count }); + + MailInfo mail = new MailInfo(Info.Index) + { + MailID = ++Envir.NextMailID, + Sender = "Refiner", + Message = "Refining was cancelled with an item which couldn't be returned to your inventory.", + Items = new List { temp }, + }; + + mail.Send(); + } + + Info.Refine[t] = null; + + break; + } + } + } + public void RefineItem(ulong uniqueID) + { + Enqueue(new S.RepairItem { UniqueID = uniqueID }); //CHECK THIS. + + if (Dead) return; + + if (NPCPage == null || (!String.Equals(NPCPage.Key, NPCScript.RefineKey, StringComparison.CurrentCultureIgnoreCase))) return; + + int index = -1; + + for (int i = 0; i < Info.Inventory.Length; i++) + { + if (Info.Inventory[i] == null || Info.Inventory[i].UniqueID != uniqueID) continue; + index = i; + break; + } + + if (index == -1) return; + + if (Info.Inventory[index].RefineAdded != 0) + { + ReceiveChat(String.Format("Your {0} needs to be checked before you can attempt to refine it again.", Info.Inventory[index].FriendlyName), ChatType.System); + return; + } + + if ((Info.Inventory[index].Info.Type != ItemType.Weapon) && (Settings.OnlyRefineWeapon)) + { + ReceiveChat(String.Format("Your {0} can't be refined.", Info.Inventory[index].FriendlyName), ChatType.System); + return; + } + + if (Info.Inventory[index].Info.Bind.HasFlag(BindMode.DontUpgrade)) + { + ReceiveChat(String.Format("Your {0} can't be refined.", Info.Inventory[index].FriendlyName), ChatType.System); + return; + } + + if (index == -1) return; + + //CHECK GOLD HERE + uint cost = (uint)((Info.Inventory[index].Info.RequiredAmount * 10) * Settings.RefineCost); + + if (cost > Account.Gold) + { + ReceiveChat(String.Format("You don't have enough gold to refine your {0}.", Info.Inventory[index].FriendlyName), ChatType.System); + return; + } + + Account.Gold -= cost; + Enqueue(new S.LoseGold { Gold = cost }); + + //START OF FORMULA + + Info.CurrentRefine = Info.Inventory[index]; + Info.Inventory[index] = null; + Info.CollectTime = (Envir.Time + (Settings.RefineTime * Settings.Minute)); + Enqueue(new S.RefineItem { UniqueID = uniqueID }); + + + short orePurity = 0; + byte oreAmount = 0; + byte itemAmount = 0; + short totalDC = 0; + short totalMC = 0; + short totalSC = 0; + short requiredLevel = 0; + short durability = 0; + short currentDura = 0; + short addedStats = 0; + UserItem ingredient; + + for (int i = 0; i < Info.Refine.Length; i++) + { + ingredient = Info.Refine[i]; + + if (ingredient == null) continue; + if (ingredient.Info.Type == ItemType.Weapon) + { + Info.Refine[i] = null; + continue; + } + + if ((ingredient.Info.Stats[Stat.MaxDC] > 0) || (ingredient.Info.Stats[Stat.MaxMC] > 0) || (ingredient.Info.Stats[Stat.MaxSC] > 0)) + { + totalDC += (short)(ingredient.Info.Stats[Stat.MinDC] + ingredient.Info.Stats[Stat.MaxDC] + ingredient.AddedStats[Stat.MaxDC]); + totalMC += (short)(ingredient.Info.Stats[Stat.MinMC] + ingredient.Info.Stats[Stat.MaxMC] + ingredient.AddedStats[Stat.MaxMC]); + totalSC += (short)(ingredient.Info.Stats[Stat.MinSC] + ingredient.Info.Stats[Stat.MaxSC] + ingredient.AddedStats[Stat.MaxSC]); + requiredLevel += ingredient.Info.RequiredAmount; + if (Math.Floor(ingredient.MaxDura / 1000M) == Math.Floor(ingredient.Info.Durability / 1000M)) durability++; + if (Math.Floor(ingredient.CurrentDura / 1000M) == Math.Floor(ingredient.MaxDura / 1000M)) currentDura++; + itemAmount++; + } + + if (ingredient.Info.FriendlyName == Settings.RefineOreName) + { + orePurity += (short)Math.Floor(ingredient.CurrentDura / 1000M); + oreAmount++; + } + + Info.Refine[i] = null; + } + + if ((totalDC == 0) && (totalMC == 0) && (totalSC == 0)) + { + Info.CurrentRefine.RefineSuccessChance = 0; + //Info.CurrentRefine.RefinedValue = RefinedValue.None; + Info.CurrentRefine.RefineAdded = Settings.RefineIncrease; + + if (Settings.RefineTime == 0) + { + CollectRefine(); + } + else + { + ReceiveChat(String.Format("Your {0} is now being refined, please check back in {1} minute(s).", Info.CurrentRefine.FriendlyName, Settings.RefineTime), ChatType.System); + } + + return; + } + + if (oreAmount == 0) + { + Info.CurrentRefine.RefineSuccessChance = 0; + //Info.CurrentRefine.RefinedValue = RefinedValue.None; + Info.CurrentRefine.RefineAdded = Settings.RefineIncrease; + if (Settings.RefineTime == 0) + { + CollectRefine(); + } + else + { + ReceiveChat(String.Format("Your {0} is now being refined, please check back in {1} minute(s).", Info.CurrentRefine.FriendlyName, Settings.RefineTime), ChatType.System); + } + return; + } + + + short refineStat = 0; + + if ((totalDC > totalMC) && (totalDC > totalSC)) + { + Info.CurrentRefine.RefinedValue = RefinedValue.DC; + refineStat = totalDC; + } + + if ((totalMC > totalDC) && (totalMC > totalSC)) + { + Info.CurrentRefine.RefinedValue = RefinedValue.MC; + refineStat = totalMC; + } + + if ((totalSC > totalDC) && (totalSC > totalMC)) + { + Info.CurrentRefine.RefinedValue = RefinedValue.SC; + refineStat = totalSC; + } + + Info.CurrentRefine.RefineAdded = Settings.RefineIncrease; + + + int itemSuccess = 0; //Chance out of 35% + + itemSuccess += (refineStat * 5) - Info.CurrentRefine.Info.RequiredAmount; + itemSuccess += 5; + if (itemSuccess > 10) itemSuccess = 10; + if (itemSuccess < 0) itemSuccess = 0; //10% + + + if ((requiredLevel / itemAmount) > (Info.CurrentRefine.Info.RequiredAmount - 5)) itemSuccess += 10; //20% + if (durability == itemAmount) itemSuccess += 10; //30% + if (currentDura == itemAmount) itemSuccess += 5; //35% + + int oreSuccess = 0; //Chance out of 35% + + if (oreAmount >= itemAmount) oreSuccess += 15; //15% + if ((orePurity / oreAmount) >= (refineStat / itemAmount)) oreSuccess += 15; //30% + if (orePurity == refineStat) oreSuccess += 5; //35% + + int luckSuccess = (Info.CurrentRefine.AddedStats[Stat.Luck] + 5); //Chance out of 10% + if (luckSuccess > 10) luckSuccess = 10; + if (luckSuccess < 0) luckSuccess = 0; + + + int baseSuccess = Settings.RefineBaseChance; //20% as standard + + int successChance = (itemSuccess + oreSuccess + luckSuccess + baseSuccess); + + addedStats = (byte)(Info.CurrentRefine.AddedStats[Stat.MaxDC] + Info.CurrentRefine.AddedStats[Stat.MaxMC] + Info.CurrentRefine.AddedStats[Stat.MaxSC]); + if (Info.CurrentRefine.Info.Type == ItemType.Weapon) addedStats = (short)(addedStats * Settings.RefineWepStatReduce); + else addedStats = (short)(addedStats * Settings.RefineItemStatReduce); + if (addedStats > 50) addedStats = 50; + + successChance -= addedStats; + + Info.CurrentRefine.RefineSuccessChance = successChance; + + //END OF FORMULA + + if (Settings.RefineTime == 0) + { + CollectRefine(); + } + else + { + ReceiveChat(String.Format("Your {0} is now being refined, please check back in {1} minute(s).", Info.CurrentRefine.FriendlyName, Settings.RefineTime), ChatType.System); + } + } + public void CollectRefine() + { + S.NPCCollectRefine p = new S.NPCCollectRefine { Success = false }; + + if (Info.CurrentRefine == null) + { + ReceiveChat("You aren't currently refining any items.", ChatType.System); + Enqueue(p); + return; + } + + if (Info.CollectTime > Envir.Time) + { + ReceiveChat(string.Format("Your {0} will be ready to collect in {1} minute(s).", Info.CurrentRefine.FriendlyName, ((Info.CollectTime - Envir.Time) / Settings.Minute)), ChatType.System); + Enqueue(p); + return; + } + + int index = -1; + + for (int i = 0; i < Info.Inventory.Length; i++) + { + if (Info.Inventory[i] != null) continue; + index = i; + break; + } + + if (index == -1) + { + ReceiveChat(String.Format("There isn't room in your bag for your {0}, make some space and try again.", Info.CurrentRefine.FriendlyName), ChatType.System); + Enqueue(p); + return; + } + + ReceiveChat(String.Format("Your item has been returned to you."), ChatType.System); + p.Success = true; + + GainItem(Info.CurrentRefine); + + Info.CurrentRefine = null; + Info.CollectTime = 0; + Enqueue(p); + } + public void CheckRefine(ulong uniqueID) + { + if (Dead) return; + + if (NPCPage == null || (!String.Equals(NPCPage.Key, NPCScript.RefineCheckKey, StringComparison.CurrentCultureIgnoreCase))) return; + + int index = -1; + + for (int i = 0; i < Info.Inventory.Length; i++) + { + UserItem temp = Info.Inventory[i]; + if (temp == null || temp.UniqueID != uniqueID) continue; + index = i; + break; + } + + if (index == -1) return; + + if (Info.Inventory[index].RefineAdded == 0) + { + ReceiveChat(String.Format("{0} doesn't need to be checked as it hasn't been refined yet.", Info.Inventory[index].FriendlyName), ChatType.System); + return; + } + + if (Envir.Random.Next(1, 100) > Info.Inventory[index].RefineSuccessChance) + { + Info.Inventory[index].RefinedValue = RefinedValue.None; + } + + if (Envir.Random.Next(1, 100) < Settings.RefineCritChance) + { + Info.Inventory[index].RefineAdded = (byte)(Info.Inventory[index].RefineAdded * Settings.RefineCritIncrease); + } + + if ((Info.Inventory[index].RefinedValue == RefinedValue.DC) && (Info.Inventory[index].RefineAdded > 0)) + { + ReceiveChat(String.Format("Congratulations, your {0} now has +{1} extra DC.", Info.Inventory[index].FriendlyName, Info.Inventory[index].RefineAdded), ChatType.System); + Info.Inventory[index].AddedStats[Stat.MaxDC] = (int)Math.Min(int.MaxValue, Info.Inventory[index].AddedStats[Stat.MaxDC] + Info.Inventory[index].RefineAdded); + Info.Inventory[index].RefineAdded = 0; + Info.Inventory[index].RefinedValue = RefinedValue.None; + Info.Inventory[index].RefineSuccessChance = 0; + + } + else if ((Info.Inventory[index].RefinedValue == RefinedValue.MC) && (Info.Inventory[index].RefineAdded > 0)) + { + ReceiveChat(String.Format("Congratulations, your {0} now has +{1} extra MC.", Info.Inventory[index].FriendlyName, Info.Inventory[index].RefineAdded), ChatType.System); + Info.Inventory[index].AddedStats[Stat.MaxMC] = (int)Math.Min(int.MaxValue, Info.Inventory[index].AddedStats[Stat.MaxMC] + Info.Inventory[index].RefineAdded); + Info.Inventory[index].RefineAdded = 0; + Info.Inventory[index].RefinedValue = RefinedValue.None; + Info.Inventory[index].RefineSuccessChance = 0; + + } + else if ((Info.Inventory[index].RefinedValue == RefinedValue.SC) && (Info.Inventory[index].RefineAdded > 0)) + { + ReceiveChat(String.Format("Congratulations, your {0} now has +{1} extra SC.", Info.Inventory[index].FriendlyName, Info.Inventory[index].RefineAdded), ChatType.System); + Info.Inventory[index].AddedStats[Stat.MaxSC] = (int)Math.Min(int.MaxValue, Info.Inventory[index].AddedStats[Stat.MaxSC] + Info.Inventory[index].RefineAdded); + Info.Inventory[index].RefineAdded = 0; + Info.Inventory[index].RefinedValue = RefinedValue.None; + Info.Inventory[index].RefineSuccessChance = 0; + } + else if ((Info.Inventory[index].RefinedValue == RefinedValue.None) && (Info.Inventory[index].RefineAdded > 0)) + { + ReceiveChat(String.Format("Your {0} smashed into a thousand pieces upon testing.", Info.Inventory[index].FriendlyName), ChatType.System); + Enqueue(new S.RefineItem { UniqueID = Info.Inventory[index].UniqueID }); + Info.Inventory[index].RefineSuccessChance = 0; + Info.Inventory[index] = null; + return; + } + + Enqueue(new S.ItemUpgraded { Item = Info.Inventory[index] }); + return; + } + + #endregion + + #region Relationship + + public void NPCDivorce() + { + if (Info.Married == 0) + { + ReceiveChat(string.Format("You're not married."), ChatType.System); + return; + } + + CharacterInfo lover = Envir.GetCharacterInfo(Info.Married); + PlayerObject player = Envir.GetPlayer(lover.Name); + + Info.Married = 0; + Info.MarriedDate = Envir.Now; + + if (Info.Equipment[(int)EquipmentSlot.RingL] != null) + { + Info.Equipment[(int)EquipmentSlot.RingL].WeddingRing = -1; + Enqueue(new S.RefreshItem { Item = Info.Equipment[(int)EquipmentSlot.RingL] }); + } + + GetRelationship(false); + + lover.Married = 0; + lover.MarriedDate = Envir.Now; + if (lover.Equipment[(int)EquipmentSlot.RingL] != null) + lover.Equipment[(int)EquipmentSlot.RingL].WeddingRing = -1; + + if (player != null) + { + player.GetRelationship(false); + player.ReceiveChat(string.Format("You've just been forcefully divorced"), ChatType.System); + if (player.Info.Equipment[(int)EquipmentSlot.RingL] != null) + player.Enqueue(new S.RefreshItem { Item = player.Info.Equipment[(int)EquipmentSlot.RingL] }); + } + } + + public bool CheckMakeWeddingRing() + { + if (Info.Married == 0) + { + ReceiveChat(string.Format("You need to be married to make a Wedding Ring."), ChatType.System); + return false; + } + + if (Info.Equipment[(int)EquipmentSlot.RingL] == null) + { + ReceiveChat(string.Format("You need to wear a ring on your left finger to make a Wedding Ring."), ChatType.System); + return false; + } + + if (Info.Equipment[(int)EquipmentSlot.RingL].WeddingRing != -1) + { + ReceiveChat(string.Format("You're already wearing a Wedding Ring."), ChatType.System); + return false; + } + + if (Info.Equipment[(int)EquipmentSlot.RingL].Info.Bind.HasFlag(BindMode.NoWeddingRing)) + { + ReceiveChat(string.Format("You cannot use this type of ring."), ChatType.System); + return false; + } + + return true; + } + + public void MakeWeddingRing() + { + if (CheckMakeWeddingRing()) + { + Info.Equipment[(int)EquipmentSlot.RingL].WeddingRing = Info.Married; + Enqueue(new S.RefreshItem { Item = Info.Equipment[(int)EquipmentSlot.RingL] }); + } + } + + public void ReplaceWeddingRing(ulong uniqueID) + { + if (Dead) return; + + if (NPCPage == null || (!String.Equals(NPCPage.Key, NPCScript.ReplaceWedRingKey, StringComparison.CurrentCultureIgnoreCase))) return; + + UserItem temp = null; + UserItem CurrentRing = Info.Equipment[(int)EquipmentSlot.RingL]; + + if (CurrentRing == null) + { + ReceiveChat(string.Format("You arn't wearing a ring to upgrade."), ChatType.System); + return; + } + + if (CurrentRing.WeddingRing == -1) + { + ReceiveChat(string.Format("You arn't wearing a Wedding Ring to upgrade."), ChatType.System); + return; + } + + int index = -1; + + for (int i = 0; i < Info.Inventory.Length; i++) + { + temp = Info.Inventory[i]; + if (temp == null || temp.UniqueID != uniqueID) continue; + index = i; + break; + } + + if (index == -1) return; + + temp = Info.Inventory[index]; + + + if (temp.Info.Type != ItemType.Ring) + { + ReceiveChat(string.Format("You can't replace a Wedding Ring with this item."), ChatType.System); + return; + } + + if (!CanEquipItem(temp, (int)EquipmentSlot.RingL)) + { + ReceiveChat(string.Format("You can't equip the item you're trying to use."), ChatType.System); + return; + } + + if (temp.Info.Bind.HasFlag(BindMode.NoWeddingRing)) + { + ReceiveChat(string.Format("You cannot use this type of ring."), ChatType.System); + return; + } + + uint cost = (uint)((Info.Inventory[index].Info.RequiredAmount * 10) * Settings.ReplaceWedRingCost); + + if (cost > Account.Gold) + { + ReceiveChat(String.Format("You don't have enough gold to replace your Wedding Ring."), ChatType.System); + return; + } + + Account.Gold -= cost; + Enqueue(new S.LoseGold { Gold = cost }); + + + temp.WeddingRing = Info.Married; + CurrentRing.WeddingRing = -1; + + Info.Equipment[(int)EquipmentSlot.RingL] = temp; + Info.Inventory[index] = CurrentRing; + + Enqueue(new S.EquipItem { Grid = MirGridType.Inventory, UniqueID = temp.UniqueID, To = (int)EquipmentSlot.RingL, Success = true }); + + Enqueue(new S.RefreshItem { Item = Info.Inventory[index] }); + Enqueue(new S.RefreshItem { Item = Info.Equipment[(int)EquipmentSlot.RingL] }); + + } + + public void MarriageRequest() + { + + if (Info.Married != 0) + { + ReceiveChat(string.Format("You're already married."), ChatType.System); + return; + } + + if (Info.MarriedDate.AddDays(Settings.MarriageCooldown) > Envir.Now) + { + ReceiveChat(string.Format("You can't get married again yet, there is a {0} day cooldown after a divorce.", Settings.MarriageCooldown), ChatType.System); + return; + } + + if (Info.Level < Settings.MarriageLevelRequired) + { + ReceiveChat(string.Format("You need to be at least level {0} to get married.", Settings.MarriageLevelRequired), ChatType.System); + return; + } + + Point target = Functions.PointMove(CurrentLocation, Direction, 1); + Cell cell = CurrentMap.GetCell(target); + PlayerObject player = null; + + if (cell.Objects == null || cell.Objects.Count < 1) return; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + if (ob.Race != ObjectType.Player) continue; + + player = Envir.GetPlayer(ob.Name); + } + + + + if (player != null) + { + + + if (!Functions.FacingEachOther(Direction, CurrentLocation, player.Direction, player.CurrentLocation)) + { + ReceiveChat(string.Format("You need to be facing each other to perform a marriage."), ChatType.System); + return; + } + + if (player.Level < Settings.MarriageLevelRequired) + { + ReceiveChat(string.Format("Your lover needs to be at least level {0} to get married.", Settings.MarriageLevelRequired), ChatType.System); + return; + } + + if (player.Info.MarriedDate.AddDays(Settings.MarriageCooldown) > Envir.Now) + { + ReceiveChat(string.Format("{0} can't get married again yet, there is a {1} day cooldown after divorce", player.Name, Settings.MarriageCooldown), ChatType.System); + return; + } + + if (!player.AllowMarriage) + { + ReceiveChat("The person you're trying to propose to isn't allowing marriage requests.", ChatType.System); + return; + } + + if (player == this) + { + ReceiveChat("You cant marry yourself.", ChatType.System); + return; + } + + if (player.Dead || Dead) + { + ReceiveChat("You can't perform a marriage with a dead player.", ChatType.System); + return; + } + + if (player.MarriageProposal != null) + { + ReceiveChat(string.Format("{0} already has a marriage invitation.", player.Info.Name), ChatType.System); + return; + } + + if (!Functions.InRange(player.CurrentLocation, CurrentLocation, Globals.DataRange) || player.CurrentMap != CurrentMap) + { + ReceiveChat(string.Format("{0} is not within marriage range.", player.Info.Name), ChatType.System); + return; + } + + if (player.Info.Married != 0) + { + ReceiveChat(string.Format("{0} is already married.", player.Info.Name), ChatType.System); + return; + } + + player.MarriageProposal = this; + player.Enqueue(new S.MarriageRequest { Name = Info.Name }); + } + else + { + ReceiveChat(string.Format("You need to be facing a player to request a marriage."), ChatType.System); + return; + } + } + + public void MarriageReply(bool accept) + { + if (MarriageProposal == null || MarriageProposal.Info == null) + { + MarriageProposal = null; + return; + } + + if (!accept) + { + MarriageProposal.ReceiveChat(string.Format("{0} has refused to marry you.", Info.Name), ChatType.System); + MarriageProposal = null; + return; + } + + if (Info.Married != 0) + { + ReceiveChat("You are already married.", ChatType.System); + MarriageProposal = null; + return; + } + + if (MarriageProposal.Info.Married != 0) + { + ReceiveChat(string.Format("{0} is already married.", MarriageProposal.Info.Name), ChatType.System); + MarriageProposal = null; + return; + } + + + MarriageProposal.Info.Married = Info.Index; + MarriageProposal.Info.MarriedDate = Envir.Now; + + Info.Married = MarriageProposal.Info.Index; + Info.MarriedDate = Envir.Now; + + GetRelationship(false); + MarriageProposal.GetRelationship(false); + + MarriageProposal.ReceiveChat(string.Format("Congratulations, you're now married to {0}.", Info.Name), ChatType.System); + ReceiveChat(String.Format("Congratulations, you're now married to {0}.", MarriageProposal.Info.Name), ChatType.System); + + MarriageProposal = null; + } + + public void DivorceRequest() + { + + if (Info.Married == 0) + { + ReceiveChat(string.Format("You're not married."), ChatType.System); + return; + } + + + Point target = Functions.PointMove(CurrentLocation, Direction, 1); + Cell cell = CurrentMap.GetCell(target); + PlayerObject player = null; + + if (cell.Objects == null || cell.Objects.Count < 1) return; + + for (int i = 0; i < cell.Objects.Count; i++) + { + MapObject ob = cell.Objects[i]; + if (ob.Race != ObjectType.Player) continue; + + player = Envir.GetPlayer(ob.Name); + } + + if (player == null) + { + ReceiveChat(string.Format("You need to be facing your lover to divorce them."), ChatType.System); + return; + } + + if (player != null) + { + if (!Functions.FacingEachOther(Direction, CurrentLocation, player.Direction, player.CurrentLocation)) + { + ReceiveChat(string.Format("You need to be facing your lover to divorce them."), ChatType.System); + return; + } + + if (player == this) + { + ReceiveChat("You can't divorce yourself.", ChatType.System); + return; + } + + if (player.Dead || Dead) + { + ReceiveChat("You can't divorce a dead player.", ChatType.System); //GOT TO HERE, NEED TO KEEP WORKING ON IT. + return; + } + + if (player.Info.Index != Info.Married) + { + ReceiveChat(string.Format("You aren't married to {0}", player.Info.Name), ChatType.System); + return; + } + + if (!Functions.InRange(player.CurrentLocation, CurrentLocation, Globals.DataRange) || player.CurrentMap != CurrentMap) + { + ReceiveChat(string.Format("{0} is not within divorce range.", player.Info.Name), ChatType.System); + return; + } + + player.DivorceProposal = this; + player.Enqueue(new S.DivorceRequest { Name = Info.Name }); + } + else + { + ReceiveChat(string.Format("You need to be facing your lover to divorce them."), ChatType.System); + return; + } + } + + public void DivorceReply(bool accept) + { + if (DivorceProposal == null || DivorceProposal.Info == null) + { + DivorceProposal = null; + return; + } + + if (!accept) + { + DivorceProposal.ReceiveChat(string.Format("{0} has refused to divorce you.", Info.Name), ChatType.System); + DivorceProposal = null; + return; + } + + if (Info.Married == 0) + { + ReceiveChat("You aren't married so you don't require a divorce.", ChatType.System); + DivorceProposal = null; + return; + } + + DivorceProposal.Info.Married = 0; + DivorceProposal.Info.MarriedDate = Envir.Now; + if (DivorceProposal.Info.Equipment[(int)EquipmentSlot.RingL] != null) + { + DivorceProposal.Info.Equipment[(int)EquipmentSlot.RingL].WeddingRing = -1; + DivorceProposal.Enqueue(new S.RefreshItem { Item = DivorceProposal.Info.Equipment[(int)EquipmentSlot.RingL] }); + } + + Info.Married = 0; + Info.MarriedDate = Envir.Now; + if (Info.Equipment[(int)EquipmentSlot.RingL] != null) + { + Info.Equipment[(int)EquipmentSlot.RingL].WeddingRing = -1; + Enqueue(new S.RefreshItem { Item = Info.Equipment[(int)EquipmentSlot.RingL] }); + } + + DivorceProposal.ReceiveChat(string.Format("You're now divorced", Info.Name), ChatType.System); + ReceiveChat("You're now divorced", ChatType.System); + + GetRelationship(false); + DivorceProposal.GetRelationship(false); + DivorceProposal = null; + } + + public void GetRelationship(bool CheckOnline = true) + { + if (Info.Married == 0) + { + Enqueue(new S.LoverUpdate { Name = "", Date = Info.MarriedDate, MapName = "", MarriedDays = 0 }); + } + else + { + CharacterInfo Lover = Envir.GetCharacterInfo(Info.Married); + + PlayerObject player = Envir.GetPlayer(Lover.Name); + + if (player == null) + Enqueue(new S.LoverUpdate { Name = Lover.Name, Date = Info.MarriedDate, MapName = "", MarriedDays = (short)(Envir.Now - Info.MarriedDate).TotalDays }); + else + { + Enqueue(new S.LoverUpdate { Name = Lover.Name, Date = Info.MarriedDate, MapName = player.CurrentMap.Info.Title, MarriedDays = (short)(Envir.Now - Info.MarriedDate).TotalDays }); + if (CheckOnline) + { + player.GetRelationship(false); + player.ReceiveChat(String.Format("{0} has come online.", Info.Name), ChatType.System); + } + } + } + } + public void LogoutRelationship() + { + if (Info.Married == 0) return; + CharacterInfo lover = Envir.GetCharacterInfo(Info.Married); + + if (lover == null) + { + MessageQueue.EnqueueDebugging(Name + " is married but couldn't find marriage ID " + Info.Married); + return; + } + + PlayerObject player = Envir.GetPlayer(lover.Name); + if (player != null) + { + player.Enqueue(new S.LoverUpdate { Name = Info.Name, Date = player.Info.MarriedDate, MapName = "", MarriedDays = (short)(Envir.Now - Info.MarriedDate).TotalDays }); + player.ReceiveChat(String.Format("{0} has gone offline.", Info.Name), ChatType.System); + } + } + + #endregion + + #region Gameshop + + public void GameShopStock(GameShopItem item) + { + int purchased; + int StockLevel; + + if (item.iStock) //Invididual Stock + { + Info.GSpurchases.TryGetValue(item.Info.Index, out purchased); + } + else //Server Stock + { + Envir.GameshopLog.TryGetValue(item.Info.Index, out purchased); + } + + if (item.Stock - purchased >= 0) + { + StockLevel = item.Stock - purchased; + Enqueue(new S.GameShopStock { GIndex = item.Info.Index, StockLevel = StockLevel }); + } + + } + + public void GameshopBuy(int GIndex, byte Quantity) + { + if (Quantity < 1 || Quantity > 99) return; + + List shopList = Envir.GameShopList; + GameShopItem Product = null; + + int purchased; + bool stockAvailable = false; + bool canAfford = false; + uint CreditCost = 0; + uint GoldCost = 0; + + List mailItems = new List(); + + for (int i = 0; i < shopList.Count; i++) + { + if (shopList[i].GIndex == GIndex) + { + Product = shopList[i]; + break; + } + } + + if (Product == null) + { + ReceiveChat("You're trying to buy an item that isn't in the shop.", ChatType.System); + MessageQueue.EnqueueDebugging(Info.Name + " is trying to buy Something that doesn't exist."); + return; + } + + if (((decimal)(Quantity * Product.Count) / Product.Info.StackSize) > 5) return; + + if (Product.Stock != 0) + { + + if (Product.iStock) //Invididual Stock + { + Info.GSpurchases.TryGetValue(Product.Info.Index, out purchased); + } + else //Server Stock + { + Envir.GameshopLog.TryGetValue(Product.Info.Index, out purchased); + } + + if (Product.Stock - purchased - Quantity >= 0) + { + stockAvailable = true; + } + else + { + ReceiveChat("You're trying to buy more of this item than is available.", ChatType.System); + GameShopStock(Product); + MessageQueue.EnqueueDebugging(Info.Name + " is trying to buy " + Product.Info.FriendlyName + " x " + Quantity + " - Stock isn't available."); + return; + } + } + else + { + stockAvailable = true; + } + + if (stockAvailable) + { + MessageQueue.EnqueueDebugging(Info.Name + " is trying to buy " + Product.Info.FriendlyName + " x " + Quantity + " - Stock is available"); + + var cost = Product.CreditPrice * Quantity; + if (cost < Account.Credit || cost == 0) + { + canAfford = true; + CreditCost = cost; + } + else + { + //Needs to attempt to pay with gold and credits + var totalCost = ((Product.GoldPrice * Quantity) / cost) * (cost - Account.Credit); + if (Account.Gold >= totalCost) + { + GoldCost = totalCost; + CreditCost = Account.Credit; + canAfford = true; + } + else + { + ReceiveChat("You don't have enough currency for your purchase.", ChatType.System); + MessageQueue.EnqueueDebugging(Info.Name + " is trying to buy " + Product.Info.FriendlyName + " x " + Quantity + " - not enough currency."); + return; + } + } + } + else + { + return; + } + + if (canAfford) + { + MessageQueue.EnqueueDebugging(Info.Name + " is trying to buy " + Product.Info.FriendlyName + " x " + Quantity + " - Has enough currency."); + Account.Gold -= GoldCost; + Account.Credit -= CreditCost; + + Report.GoldChanged(GoldCost, true, Product.Info.FriendlyName); + Report.CreditChanged(CreditCost, true, Product.Info.FriendlyName); + + if (GoldCost != 0) Enqueue(new S.LoseGold { Gold = GoldCost }); + if (CreditCost != 0) Enqueue(new S.LoseCredit { Credit = CreditCost }); + + if (Product.iStock && Product.Stock != 0) + { + Info.GSpurchases.TryGetValue(Product.Info.Index, out purchased); + if (purchased == 0) + { + Info.GSpurchases[Product.GIndex] = Quantity; + } + else + { + Info.GSpurchases[Product.GIndex] += Quantity; + } + } + + Envir.GameshopLog.TryGetValue(Product.Info.Index, out purchased); + if (purchased == 0) + { + Envir.GameshopLog[Product.GIndex] = Quantity; + } + else + { + Envir.GameshopLog[Product.GIndex] += Quantity; + } + + if (Product.Stock != 0) GameShopStock(Product); + } + else + { + return; + } + + Report.ItemGSBought(Product, Quantity, CreditCost, GoldCost); + + ushort quantity = (ushort)(Quantity * Product.Count); + + if (Product.Info.StackSize <= 1 || quantity == 1) + { + for (int i = 0; i < Quantity; i++) + { + UserItem mailItem = Envir.CreateFreshItem(Envir.GetItemInfo(Product.Info.Index)); + + mailItems.Add(mailItem); + } + } + else + { + while (quantity > 0) + { + UserItem mailItem = Envir.CreateFreshItem(Envir.GetItemInfo(Product.Info.Index)); + mailItem.Count = 0; + for (int i = 0; i < mailItem.Info.StackSize; i++) + { + mailItem.Count++; + quantity--; + if (quantity == 0) break; + } + if (mailItem.Count == 0) break; + + mailItems.Add(mailItem); + + } + } + + MailInfo mail = new MailInfo(Info.Index) + { + MailID = ++Envir.NextMailID, + Sender = "Gameshop", + Message = "Thank you for your purchase from the Gameshop. Your item(s) are enclosed.", + Items = mailItems, + }; + mail.Send(); + + MessageQueue.EnqueueDebugging(Info.Name + " is trying to buy " + Product.Info.FriendlyName + " x " + Quantity + " - Purchases Sent!"); + ReceiveChat("Your purchases have been sent to your Mailbox.", ChatType.Hint); + } + + public void GetGameShop() + { + int purchased; + int stockLevel; + + for (int i = 0; i < Envir.GameShopList.Count; i++) + { + var item = Envir.GameShopList[i]; + + if (item.Stock != 0) + { + if (item.iStock) //Individual Stock + { + Info.GSpurchases.TryGetValue(item.Info.Index, out purchased); + } + else //Server Stock + { + Envir.GameshopLog.TryGetValue(item.Info.Index, out purchased); + } + + if (item.Stock - purchased >= 0) + { + stockLevel = item.Stock - purchased; + Enqueue(new S.GameShopInfo { Item = item, StockLevel = stockLevel }); + } + } + else + { + Enqueue(new S.GameShopInfo { Item = item, StockLevel = item.Stock }); + } + } + } + + #endregion + + public Server.MirEnvir.Timer GetTimer(string key) + { + var timerKey = Name + "-" + key; + + if (Envir.Timers.ContainsKey(timerKey)) + { + return Envir.Timers[timerKey]; + } + + return null; + } + public void SetTimer(string key, int seconds, byte type = 0) + { + if (seconds < 0) seconds = 0; + + var timerKey = Name + "-" + key; + + Timer t = new Timer(timerKey, seconds, type); + + Envir.Timers[timerKey] = t; + + Enqueue(new S.SetTimer { Key = t.Key, Seconds = t.Seconds, Type = t.Type }); + } + public void ExpireTimer(string key) + { + var timerKey = Name + "-" + key; + + if (Envir.Timers.ContainsKey(timerKey)) + { + Envir.Timers.Remove(timerKey); + } + + Enqueue(new S.ExpireTimer { Key = timerKey }); + } + public void SetCompass(Point location) + { + Enqueue(new S.SetCompass { Location = location }); + } + } +} \ No newline at end of file diff --git a/Server/MirObjects/SpellObject.cs b/Server/MirObjects/SpellObject.cs new file mode 100644 index 0000000..6f795e1 --- /dev/null +++ b/Server/MirObjects/SpellObject.cs @@ -0,0 +1,270 @@ +using Server.MirEnvir; +using S = ServerPackets; + + +namespace Server.MirObjects +{ + public class SpellObject : MapObject + { + public override ObjectType Race + { + get { return ObjectType.Spell; } + } + + public override string Name { get; set; } + public override int CurrentMapIndex { get; set; } + public override Point CurrentLocation { get; set; } + public override MirDirection Direction { get; set; } + public override ushort Level { get; set; } + public override bool Blocking + { + get + { + return false; + } + } + + public long TickTime, StartTime; + public MapObject Caster; + public int Value, TickSpeed, BonusDmg; + public Spell Spell; + public Point CastLocation; + public bool Show, Decoration; + + public override int Health + { + get { throw new NotSupportedException(); } + } + public override int MaxHealth + { + get { throw new NotSupportedException(); } + } + + + public override void Process() + { + if (Decoration) return; + + if (Caster != null && Caster.Node == null) Caster = null; + + if (Envir.Time > ExpireTime || ((Spell == Spell.FireWall) && Caster == null) || (Spell == Spell.TrapHexagon && Target != null)) + { + if (Spell == Spell.TrapHexagon && Target != null && Target != null) + { + MonsterObject ob = (MonsterObject)Target; + + if (Envir.Time < ExpireTime && ob.ShockTime != 0) return; + } + + CurrentMap.RemoveObject(this); + Despawn(); + return; + } + + if (Spell == Spell.FireWall) + { + if (CurrentMap != Caster?.CurrentMap) + { + CurrentMap.RemoveObject(this); + Despawn(); + return; + } + } + + if (Envir.Time < TickTime) return; + TickTime = Envir.Time + TickSpeed; + + Cell cell = CurrentMap.GetCell(CurrentLocation); + for (int i = 0; i < cell.Objects.Count; i++) + if (cell != null) + { + ProcessSpell(cell.Objects[i]); + } + } + public void ProcessSpell(MapObject ob) + { + if (Envir.Time < StartTime) return; + switch (Spell) + { + case Spell.FireWall: + { + if (ob.Race != ObjectType.Player && ob.Race != ObjectType.Monster) return; + if (ob.Dead) return; + + if (!ob.IsAttackTarget(Caster)) return; + ob.Attacked(((HumanObject)Caster), Value, DefenceType.MAC, false); + } + break; + case Spell.Healing: //SafeZone + { + if (ob.Race != ObjectType.Player && (ob.Race != ObjectType.Monster || ob.Master == null || ob.Master.Race != ObjectType.Player)) return; + if (ob.Dead || ob.HealAmount != 0 || ob.PercentHealth == 100) return; + + ob.HealAmount += 25; + Broadcast(new S.ObjectEffect { ObjectID = ob.ObjectID, Effect = SpellEffect.Healing }); + } + break; + } + } + + public override void SetOperateTime() + { + long time = Envir.Time + 2000; + + if (TickTime < time && TickTime > Envir.Time) + time = TickTime; + + if (OwnerTime < time && OwnerTime > Envir.Time) + time = OwnerTime; + + if (ExpireTime < time && ExpireTime > Envir.Time) + time = ExpireTime; + + if (PKPointTime < time && PKPointTime > Envir.Time) + time = PKPointTime; + + if (LastHitTime < time && LastHitTime > Envir.Time) + time = LastHitTime; + + if (EXPOwnerTime < time && EXPOwnerTime > Envir.Time) + time = EXPOwnerTime; + + if (BrownTime < time && BrownTime > Envir.Time) + time = BrownTime; + + for (int i = 0; i < ActionList.Count; i++) + { + if (ActionList[i].Time >= time && ActionList[i].Time > Envir.Time) continue; + time = ActionList[i].Time; + } + + for (int i = 0; i < PoisonList.Count; i++) + { + if (PoisonList[i].TickTime >= time && PoisonList[i].TickTime > Envir.Time) continue; + time = PoisonList[i].TickTime; + } + + for (int i = 0; i < Buffs.Count; i++) + { + if (Buffs[i].NextTime >= time && Buffs[i].NextTime > Envir.Time) continue; + time = Buffs[i].NextTime; + } + + if (OperateTime <= Envir.Time || time < OperateTime) + OperateTime = time; + } + + public override void Process(DelayedAction action) + { + throw new NotSupportedException(); + } + public override bool IsAttackTarget(HumanObject attacker) + { + throw new NotSupportedException(); + } + public override bool IsAttackTarget(MonsterObject attacker) + { + throw new NotSupportedException(); + } + public override int Attacked(HumanObject attacker, int damage, DefenceType type = DefenceType.ACAgility, bool damageWeapon = true) + { + throw new NotSupportedException(); + } + public override int Attacked(MonsterObject attacker, int damage, DefenceType type = DefenceType.ACAgility) + { + throw new NotSupportedException(); + } + + public override int Struck(int damage, DefenceType type = DefenceType.ACAgility) + { + throw new NotSupportedException(); + } + public override bool IsFriendlyTarget(HumanObject ally) + { + throw new NotSupportedException(); + } + public override bool IsFriendlyTarget(MonsterObject ally) + { + throw new NotSupportedException(); + } + public override void ReceiveChat(string text, ChatType type) + { + throw new NotSupportedException(); + } + + public override Packet GetInfo() + { + switch (Spell) + { + case Spell.Healing: + return null; + default: + return new S.ObjectSpell + { + ObjectID = ObjectID, + Location = CurrentLocation, + Spell = Spell, + Direction = Direction + }; + } + + } + + public override void ApplyPoison(Poison p, MapObject Caster = null, bool NoResist = false, bool ignoreDefence = true) + { + throw new NotSupportedException(); + } + public override void Die() + { + throw new NotSupportedException(); + } + public override int Pushed(MapObject pusher, MirDirection dir, int distance) + { + throw new NotSupportedException(); + } + public override void SendHealth(HumanObject player) + { + throw new NotSupportedException(); + } + + public override void Spawned() + { + base.Spawned(); + + Envir.Spells.Add(this); + } + + public override void Despawn() + { + base.Despawn(); + + Envir.Spells.Remove(this); + } + + public override void BroadcastInfo() + { + if (Caster == null) + base.BroadcastInfo(); + + Packet p; + if (CurrentMap == null) return; + + for (int i = CurrentMap.Players.Count - 1; i >= 0; i--) + { + PlayerObject player = CurrentMap.Players[i]; + if (Functions.InRange(CurrentLocation, player.CurrentLocation, Globals.DataRange)) + { + if ((Caster == null) || (player == null)) continue; + + if ((player == Caster) || player.IsFriendlyTarget(Caster)) + { + p = GetInfo(); + + if (p != null) + player.Enqueue(p); + } + } + } + } + } +} diff --git a/Server/Server.Library.csproj b/Server/Server.Library.csproj new file mode 100644 index 0000000..44af5c6 --- /dev/null +++ b/Server/Server.Library.csproj @@ -0,0 +1,24 @@ + + + + Library + net8.0-windows7.0 + disable + true + enable + + + + false + false + + + + + + + + + + + \ No newline at end of file diff --git a/Server/Settings.cs b/Server/Settings.cs new file mode 100644 index 0000000..e06008e --- /dev/null +++ b/Server/Settings.cs @@ -0,0 +1,1270 @@ +using System.Security.Cryptography; +using Server.MirDatabase; +using Server.MirObjects; + +namespace Server +{ + public static class Settings + { + private static MessageQueue MessageQueue + { + get { return MessageQueue.Instance; } + } + + public const int Day = 24 * Hour, Hour = 60 * Minute, Minute = 60 * Second, Second = 1000; + + public static readonly string EnvirPath = Path.Combine(".", "Envir"), + ConfigPath = Path.Combine(".", "Configs"), + MapPath = Path.Combine(".", "Maps"), + ExportPath = Path.Combine(".", "Exports"), + GuildPath = Path.Combine(".", "Guilds"), + ConquestsPath = Path.Combine(".", "Conquests"), + NPCPath = Path.Combine(EnvirPath, "NPCs"), + GoodsPath = Path.Combine(EnvirPath, "Goods"), + RecipePath = Path.Combine(EnvirPath, "Recipe"), + QuestPath = Path.Combine(EnvirPath, "Quests"), + DropPath = Path.Combine(EnvirPath, "Drops"), + RoutePath = Path.Combine(EnvirPath, "Routes"), + NameListPath = Path.Combine(EnvirPath, "NameLists"), + ValuePath = Path.Combine(EnvirPath, "Values"), + NoticePath = Path.Combine(EnvirPath, "Notice.txt"), + MinimapsPath = Path.Combine(EnvirPath, "Previews", "Minimaps"), + NPCPreviewPath = Path.Combine(EnvirPath, "Previews", "NPC"), + PreviewsPath = Path.Combine(EnvirPath, "Previews"), + HairPath = Path.Combine(EnvirPath, "Previews", "NPC", "Hair"); + + private static readonly InIReader Reader = new InIReader(Path.Combine(ConfigPath, "Setup.ini")); + + public static Notice Notice; + + //General + public static string VersionPath = Path.Combine(".", "Mir1.Exe"); + public static bool CheckVersion = true; + public static List VersionHashes; + public static string GMPassword = "CarbonMir1.0"; + public static bool Multithreaded = true; + public static int ThreadLimit = 2; + public static bool TestServer = false; + public static bool EnforceDBChecks = true; + + public static bool MonsterProcessWhenAlone = false; + + public static string DefaultNPCFilename = "00Default"; + public static string MonsterNPCFilename = "00Monster"; + public static string RobotNPCFilename = "00Robot"; + public static string FishingDropFilename = "00Fishing"; + public static string AwakeningDropFilename = "00Awakening"; + public static string StrongboxDropFilename = "00Strongbox"; + public static string BlackstoneDropFilename = "00Blackstone"; + public static string BanIPsListFilename = "BannedIPs"; + + //Network + public static string IPAddress = "127.0.0.1"; + + public static ushort Port = 7000, + TimeOut = 10000, + MaxUser = 50, + RelogDelay = 50, + MaxIP = 5, + MaxPacket = 50; + + public static int IPBlockSeconds = 5; + + //HTTP + public static bool StartHTTPService = false; + public static string HTTPIPAddress = "http://127.0.0.1:5679/"; + public static string HTTPTrustedIPAddress = "127.0.0.1"; + + //Permission + public static bool AllowNewAccount = true, + AllowChangePassword = true, + AllowLogin = true, + AllowNewCharacter = true, + AllowDeleteCharacter = true, + AllowStartGame = false, + AllowCreateAssassin = false, + AllowCreateArcher = false; + + public static int AllowedResolution = 1024; + + //Optional + public static bool SafeZoneBorder = false, + SafeZoneHealing = false, + GameMasterEffect = false, + GatherOrbsPerLevel = true, + ExpMobLevelDifference = true; + public static int LineMessageTimer = 10; + + //Database + public static int SaveDelay = 5; + public static short CredxGold = 30; + + //Game + public static List ExperienceList = new List(); + public static List OrbsExpList = new List(); + public static List OrbsDefList = new List(); + public static List OrbsDmgList = new List(); + + public static float DropRate = 1F, ExpRate = 1F; + public static int TeleportToNPCCost = 3000; + + public static int ItemTimeOut = 30, + PlayerDiedItemTimeOut = 120, + DropRange = 4, + DropStackSize = 5, + PKDelay = 12; + + public static bool PetSave = false; + + public static int RestedPeriod = 60, + RestedBuffLength = 10, + RestedExpBonus = 5, + RestedMaxBonus = 24, + PalaceGuildMaxSize = 1000; + + public static string PalaceGuild = "PalaceGuild", + SkeletonName = "BoneFamiliar", + ShinsuName = "Shinsu", + BugBatName = "BugBat", + Zuma1 = "ZumaStatue", + Zuma2 = "ZumaGuardian", + Zuma3 = "ZumaArcher", + Zuma4 = "WedgeMoth", + Zuma5 = "ZumaArcher3", + Zuma6 = "ZumaStatue3", + Zuma7 = "ZumaGuardian3", + Turtle1 = "RedTurtle", + Turtle2 = "GreenTurtle", + Turtle3 = "BlueTurtle", + Turtle4 = "TowerTurtle", + Turtle5 = "FinialTurtle", + BoneMonster1 = "BoneSpearman", + BoneMonster2 = "BoneBlademan", + BoneMonster3 = "BoneArcher", + BoneMonster4 = "BoneCaptain", + BehemothMonster1 = "Hugger", + BehemothMonster2 = "PoisonHugger", + BehemothMonster3 = "MutatedHugger", + HellKnight1 = "HellKnight1", + HellKnight2 = "HellKnight2", + HellKnight3 = "HellKnight3", + HellKnight4 = "HellKnight4", + HellBomb1 = "HellBomb1", + HellBomb2 = "HellBomb2", + HellBomb3 = "HellBomb3", + WhiteSnake = "WhiteSerpent", + AngelName = "HolyDeva", + BombSpiderName = "BombSpider", + CloneName = "Clone", + AncientBatName = "AncientBat", + TucsonGeneralEgg = "GeneralTucson", + GeneralMeowMeowMob1 = "StainHammerCat", + GeneralMeowMeowMob2 = "BlackHammerCat", + GeneralMeowMeowMob3 = "StrayCat", + GeneralMeowMeowMob4 = "CatShaman", + KingHydraxMob = "Hydrax", + HornedCommanderMob = "HornedSorceror", + HornedCommanderBombMob = "BoulderSpirit", + SnowWolfKingMob = "SnowWolf", + ScrollMob1 = "WarriorScroll", + ScrollMob2 = "TaoistScroll", + ScrollMob3 = "WizardScroll", + ScrollMob4 = "AssassinScroll"; + + public static string HealRing = "Healing", + FireRing = "FireBall", + ParalysisRing = "Paralysis", + BlinkSkill = "Blink"; + + public static string PKTownMapName = "3"; + public static int PKTownPositionX = 848, + PKTownPositionY = 677; + + public static uint MaxDropGold = 2000; + public static bool DropGold = true; + + //Mail Settings + public static bool MailAutoSendGold = false; + public static bool MailAutoSendItems = false; + public static bool MailFreeWithStamp = true; + public static uint MailCostPer1KGold = 100; + public static uint MailItemInsurancePercentage = 5; + public static uint MailCapacity = 100; + + //Refine Settings + public static bool OnlyRefineWeapon = true; + public static byte RefineBaseChance = 20; + public static int RefineTime = 20; + public static byte RefineIncrease = 1; + public static byte RefineCritChance = 10; + public static byte RefineCritIncrease = 2; + public static byte RefineWepStatReduce = 6; + public static byte RefineItemStatReduce = 15; + public static int RefineCost = 125; + + public static string RefineOreName = "BlackIronOre"; + + //Marriage Settings + public static int LoverEXPBonus = 5; + public static int MarriageCooldown = 7; + public static bool WeddingRingRecall = true; + public static int MarriageLevelRequired = 10; + public static int ReplaceWedRingCost = 125; + + //Mentor Settings + public static byte MentorLevelGap = 10; + public static bool MentorSkillBoost = true; + public static byte MentorLength = 7; + public static byte MentorDamageBoost = 10; + public static byte MentorExpBoost = 10; + public static byte MenteeExpBank = 1; + + //Gem Settings + public static bool GemStatIndependent = true; + + + //Goods Settings + public static bool GoodsOn = true; + public static uint GoodsMaxStored = 15; + public static uint GoodsBuyBackTime = 60; + public static uint GoodsBuyBackMaxStored = 20; + public static bool GoodsHideAddedStats = true; + + public static BaseStats[] ClassBaseStats = new BaseStats[3] { new BaseStats(MirClass.Warrior), new BaseStats(MirClass.Wizard), new BaseStats(MirClass.Taoist) }; + + public static List RandomItemStatsList = new List(); + public static WorldMapSetup WorldMapSetup = new WorldMapSetup(); + + //item related settings + public static byte MagicResistWeight = 10, + PoisonResistWeight = 10, + CriticalRateWeight = 5, + CriticalDamageWeight = 50, + FreezingAttackWeight = 10, + PoisonAttackWeight = 10, + HealthRegenWeight = 10, + ManaRegenWeight = 10, + MaxLuck = 10; + + public static ushort ItemSealDelay = 60; + + public static bool PvpCanResistMagic = false, + PvpCanResistPoison = false, + PvpCanFreeze = false; + + public static byte RangeAccuracyBonus = 0; + + public static bool AllowObserve; + + //Guild related settings + public static byte Guild_RequiredLevel = 22, Guild_PointPerLevel = 0; + public static float Guild_ExpRate = 0.01f; + public static uint Guild_WarCost = 3000; + public static long Guild_WarTime = 180; + + public static List Guild_CreationCostList = new List(); + public static List Guild_ExperienceList = new List(); + public static List Guild_MembercapList = new List(); + public static List Guild_BuffList = new List(); + public static long GroupInviteDelay { get; internal set; } = 2000; + public static long TradeDelay { get; internal set; } = 2000; + + //Archive Settings + public static int ArchiveInactiveCharacterAfterMonths = 12; + public static int ArchiveDeletedCharacterAfterMonths = 1; + + public static void LoadVersion() + { + try + { + VersionHashes = new List(); + + var paths = VersionPath.Split(','); + + //foreach (var path in paths) + //{ + // if (File.Exists(path)) + // using (FileStream stream = new FileStream(path, FileMode.Open, FileAccess.Read)) + // using (MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider()) + // VersionHashes.Add(md5.ComputeHash(stream)); + //} + + foreach (var path in paths) + { + if (File.Exists(path)) + using (FileStream stream = new FileStream(path, FileMode.Open, FileAccess.Read)) + using (MD5 md5 = MD5.Create()) + VersionHashes.Add(md5.ComputeHash(stream)); + } + + } + catch (Exception ex) + { + MessageQueue.Enqueue(ex); + } + } + + public static void Load() + { + //General + VersionPath = Reader.ReadString("General", "VersionPath", VersionPath); + CheckVersion = Reader.ReadBoolean("General", "CheckVersion", CheckVersion); + RelogDelay = Reader.ReadUInt16("General", "RelogDelay", RelogDelay); + GMPassword = Reader.ReadString("General", "GMPassword", GMPassword); + Multithreaded = Reader.ReadBoolean("General", "Multithreaded", Multithreaded); + ThreadLimit = Reader.ReadInt32("General", "ThreadLimit", ThreadLimit); + TestServer = Reader.ReadBoolean("General", "TestServer", TestServer); + EnforceDBChecks = Reader.ReadBoolean("General", "EnforceDBChecks", EnforceDBChecks); + MonsterProcessWhenAlone = Reader.ReadBoolean("General", "MonsterProcessWhenAlone", MonsterProcessWhenAlone); + + //Paths + IPAddress = Reader.ReadString("Network", "IPAddress", IPAddress); + Port = Reader.ReadUInt16("Network", "Port", Port); + TimeOut = Reader.ReadUInt16("Network", "TimeOut", TimeOut); + MaxUser = Reader.ReadUInt16("Network", "MaxUser", MaxUser); + MaxIP = Reader.ReadUInt16("Network", "MaxIP", MaxIP); + MaxPacket = Reader.ReadUInt16("Network", "MaxPacket", MaxPacket); + + //HTTP + StartHTTPService = Reader.ReadBoolean("Network", "StartHTTPService", StartHTTPService); + HTTPIPAddress = Reader.ReadString("Network", "HTTPIPAddress", HTTPIPAddress); + HTTPTrustedIPAddress = Reader.ReadString("Network", "HTTPTrustedIPAddress", HTTPTrustedIPAddress); + + //Permission + AllowNewAccount = Reader.ReadBoolean("Permission", "AllowNewAccount", AllowNewAccount); + AllowChangePassword = Reader.ReadBoolean("Permission", "AllowChangePassword", AllowChangePassword); + AllowLogin = Reader.ReadBoolean("Permission", "AllowLogin", AllowLogin); + AllowNewCharacter = Reader.ReadBoolean("Permission", "AllowNewCharacter", AllowNewCharacter); + AllowDeleteCharacter = Reader.ReadBoolean("Permission", "AllowDeleteCharacter", AllowDeleteCharacter); + AllowStartGame = Reader.ReadBoolean("Permission", "AllowStartGame", AllowStartGame); + AllowCreateAssassin = Reader.ReadBoolean("Permission", "AllowCreateAssassin", AllowCreateAssassin); + AllowCreateArcher = Reader.ReadBoolean("Permission", "AllowCreateArcher", AllowCreateArcher); + AllowedResolution = Reader.ReadInt32("Permission", "MaxResolution", AllowedResolution); + + //Optional + SafeZoneBorder = Reader.ReadBoolean("Optional", "SafeZoneBorder", SafeZoneBorder); + SafeZoneHealing = Reader.ReadBoolean("Optional", "SafeZoneHealing", SafeZoneHealing); + GatherOrbsPerLevel = Reader.ReadBoolean("Optional", "GatherOrbsPerLevel", GatherOrbsPerLevel); + ExpMobLevelDifference = Reader.ReadBoolean("Optional", "ExpMobLevelDifference", ExpMobLevelDifference); + GameMasterEffect = Reader.ReadBoolean("Optional", "GameMasterEffect", GameMasterEffect); + LineMessageTimer = Reader.ReadInt32("Optional", "LineMessageTimer", LineMessageTimer); + + //Database + SaveDelay = Reader.ReadInt32("Database", "SaveDelay", SaveDelay); + CredxGold = Reader.ReadInt16("Database", "CredxGold", CredxGold); + + //Game + DropRate = Reader.ReadSingle("Game", "DropRate", DropRate); + ExpRate = Reader.ReadSingle("Game", "ExpRate", ExpRate); + ItemTimeOut = Reader.ReadInt32("Game", "ItemTimeOut", ItemTimeOut); + PlayerDiedItemTimeOut = Reader.ReadInt32("Game", "PlayerDiedItemTimeOut", PlayerDiedItemTimeOut); + PetSave = Reader.ReadBoolean("Game", "PetSave", PetSave); + PKDelay = Reader.ReadInt32("Game", "PKDelay", PKDelay); + PalaceGuild = Reader.ReadString("Game", "PalaceGuild", PalaceGuild); + PalaceGuildMaxSize = Reader.ReadInt32("Game", "PalaceGuildMaxSize", PalaceGuildMaxSize); + SkeletonName = Reader.ReadString("Game", "SkeletonName", SkeletonName); + BugBatName = Reader.ReadString("Game", "BugBatName", BugBatName); + ShinsuName = Reader.ReadString("Game", "ShinsuName", ShinsuName); + Zuma1 = Reader.ReadString("Game", "Zuma1", Zuma1); + Zuma2 = Reader.ReadString("Game", "Zuma2", Zuma2); + Zuma3 = Reader.ReadString("Game", "Zuma3", Zuma3); + Zuma4 = Reader.ReadString("Game", "Zuma4", Zuma4); + Zuma5 = Reader.ReadString("Game", "Zuma5", Zuma5); + Zuma6 = Reader.ReadString("Game", "Zuma6", Zuma6); + Zuma7 = Reader.ReadString("Game", "Zuma7", Zuma7); + Turtle1 = Reader.ReadString("Game", "Turtle1", Turtle1); + Turtle2 = Reader.ReadString("Game", "Turtle2", Turtle2); + Turtle3 = Reader.ReadString("Game", "Turtle3", Turtle3); + Turtle4 = Reader.ReadString("Game", "Turtle4", Turtle4); + Turtle5 = Reader.ReadString("Game", "Turtle5", Turtle5); + BoneMonster1 = Reader.ReadString("Game", "BoneMonster1", BoneMonster1); + BoneMonster2 = Reader.ReadString("Game", "BoneMonster2", BoneMonster2); + BoneMonster3 = Reader.ReadString("Game", "BoneMonster3", BoneMonster3); + BoneMonster4 = Reader.ReadString("Game", "BoneMonster4", BoneMonster4); + BehemothMonster1 = Reader.ReadString("Game", "BehemothMonster1", BehemothMonster1); + BehemothMonster2 = Reader.ReadString("Game", "BehemothMonster2", BehemothMonster2); + BehemothMonster3 = Reader.ReadString("Game", "BehemothMonster3", BehemothMonster3); + HellKnight1 = Reader.ReadString("Game", "HellKnight1", HellKnight1); + HellKnight2 = Reader.ReadString("Game", "HellKnight2", HellKnight2); + HellKnight3 = Reader.ReadString("Game", "HellKnight3", HellKnight3); + HellKnight4 = Reader.ReadString("Game", "HellKnight4", HellKnight4); + HellBomb1 = Reader.ReadString("Game", "HellBomb1", HellBomb1); + HellBomb2 = Reader.ReadString("Game", "HellBomb2", HellBomb2); + HellBomb3 = Reader.ReadString("Game", "HellBomb3", HellBomb3); + GeneralMeowMeowMob1 = Reader.ReadString("Game", "GeneralMeowMeowMob1", GeneralMeowMeowMob1); + GeneralMeowMeowMob2 = Reader.ReadString("Game", "GeneralMeowMeowMob2", GeneralMeowMeowMob2); + GeneralMeowMeowMob3 = Reader.ReadString("Game", "GeneralMeowMeowMob3", GeneralMeowMeowMob3); + GeneralMeowMeowMob4 = Reader.ReadString("Game", "GeneralMeowMeowMob4", GeneralMeowMeowMob4); + KingHydraxMob = Reader.ReadString("Game", "KingHydraxMob", KingHydraxMob); + HornedCommanderMob = Reader.ReadString("Game", "HornedCommanderMob", HornedCommanderMob); + HornedCommanderBombMob = Reader.ReadString("Game", "HornedCommanderBombMob", HornedCommanderBombMob); + SnowWolfKingMob = Reader.ReadString("Game", "SnowWolfKingMob", SnowWolfKingMob); + ScrollMob1 = Reader.ReadString("Game", "ScrollMob1", ScrollMob1); + ScrollMob2 = Reader.ReadString("Game", "ScrollMob2", ScrollMob2); + ScrollMob3 = Reader.ReadString("Game", "ScrollMob3", ScrollMob3); + ScrollMob4 = Reader.ReadString("Game", "ScrollMob4", ScrollMob4); + WhiteSnake = Reader.ReadString("Game", "WhiteSnake", WhiteSnake); + AngelName = Reader.ReadString("Game", "AngelName", AngelName); + BombSpiderName = Reader.ReadString("Game", "BombSpiderName", BombSpiderName); + CloneName = Reader.ReadString("Game", "CloneName", CloneName); + AncientBatName = Reader.ReadString("Game", "AncientBatName", AncientBatName); + TucsonGeneralEgg = Reader.ReadString("Game", "TucsonGeneralEgg", TucsonGeneralEgg); + GroupInviteDelay = Reader.ReadInt64("Game", "GroupInviteDelay", GroupInviteDelay); + TradeDelay = Reader.ReadInt64("Game", "TradeDelay", TradeDelay); + TeleportToNPCCost = Reader.ReadInt32("Game", "TeleportToNPCCost", TeleportToNPCCost); + + //Rested + RestedPeriod = Reader.ReadInt32("Rested", "Period", RestedPeriod); + RestedBuffLength = Reader.ReadInt32("Rested", "BuffLength", RestedBuffLength); + RestedExpBonus = Reader.ReadInt32("Rested", "ExpBonus", RestedExpBonus); + RestedMaxBonus = Reader.ReadInt32("Rested", "MaxBonus", RestedMaxBonus); + + //Items + HealRing = Reader.ReadString("Items", "HealRing", HealRing); + FireRing = Reader.ReadString("Items", "FireRing", FireRing); + BlinkSkill = Reader.ReadString("Items", "BlinkSkill", BlinkSkill); + + //PKTown + PKTownMapName = Reader.ReadString("PKTown", "PKTownMapName", PKTownMapName); + PKTownPositionX = Reader.ReadInt32("PKTown", "PKTownPositionX", PKTownPositionX); + PKTownPositionY = Reader.ReadInt32("PKTown", "PKTownPositionY", PKTownPositionY); + + DropGold = Reader.ReadBoolean("DropGold", "DropGold", DropGold); + MaxDropGold = Reader.ReadUInt32("DropGold", "MaxDropGold", MaxDropGold); + + MagicResistWeight = Reader.ReadByte("Items","MagicResistWeight",MagicResistWeight); + PoisonResistWeight = Reader.ReadByte("Items","PoisonResistWeight",PoisonResistWeight); + CriticalRateWeight = Reader.ReadByte("Items","CriticalRateWeight",CriticalRateWeight); + CriticalDamageWeight = Math.Max((byte)1, Reader.ReadByte("Items","CriticalDamageWeight",CriticalDamageWeight)); + FreezingAttackWeight = Reader.ReadByte("Items","FreezingAttackWeight",FreezingAttackWeight); + PoisonAttackWeight = Reader.ReadByte("Items","PoisonAttackWeight",PoisonAttackWeight); + HealthRegenWeight = Math.Max((byte)1, Reader.ReadByte("Items", "HealthRegenWeight", HealthRegenWeight)); + ManaRegenWeight = Math.Max((byte)1, Reader.ReadByte("Items", "ManaRegenWeight", ManaRegenWeight)); + MaxLuck = Reader.ReadByte("Items", "MaxLuck", MaxLuck); + ItemSealDelay = Reader.ReadUInt16("Items", "SealDelay", ItemSealDelay); + + PvpCanResistMagic = Reader.ReadBoolean("Items","PvpCanResistMagic",PvpCanResistMagic); + PvpCanResistPoison = Reader.ReadBoolean("Items", "PvpCanResistPoison", PvpCanResistPoison); + PvpCanFreeze = Reader.ReadBoolean("Items", "PvpCanFreeze", PvpCanFreeze); + + RangeAccuracyBonus = Reader.ReadByte("Bonus", "RangeAccuracyBonus", RangeAccuracyBonus); + + AllowObserve = Reader.ReadBoolean("Observe", "AllowObserve", AllowObserve); + + //Archive + ArchiveInactiveCharacterAfterMonths = Math.Max(1, Reader.ReadInt32("Archive", "InactiveCharacterMonths", ArchiveInactiveCharacterAfterMonths)); + ArchiveDeletedCharacterAfterMonths = Math.Max(1, Reader.ReadInt32("Archive", "DeletedCharacterMonths", ArchiveDeletedCharacterAfterMonths)); + + if (!Directory.Exists(EnvirPath)) + Directory.CreateDirectory(EnvirPath); + if (!Directory.Exists(ConfigPath)) + Directory.CreateDirectory(ConfigPath); + + if (!Directory.Exists(MapPath)) + Directory.CreateDirectory(MapPath); + if (!Directory.Exists(NPCPath)) + Directory.CreateDirectory(NPCPath); + if (!Directory.Exists(GoodsPath)) + Directory.CreateDirectory(GoodsPath); + if (!Directory.Exists(QuestPath)) + Directory.CreateDirectory(QuestPath); + if (!Directory.Exists(DropPath)) + Directory.CreateDirectory(DropPath); + if (!Directory.Exists(ExportPath)) + Directory.CreateDirectory(ExportPath); + if (!Directory.Exists(RoutePath)) + Directory.CreateDirectory(RoutePath); + if (!Directory.Exists(NameListPath)) + Directory.CreateDirectory(NameListPath); + if (!Directory.Exists(RecipePath)) + Directory.CreateDirectory(RecipePath); + + string PreviewsPath = Path.Combine(EnvirPath, "Previews"); + if (!Directory.Exists(PreviewsPath)) + Directory.CreateDirectory(PreviewsPath); + string MinimapsPath = Path.Combine(EnvirPath, "Previews", "Minimaps"); + if (!Directory.Exists(MinimapsPath)) + Directory.CreateDirectory(MinimapsPath); + string NPCPreviewPath = Path.Combine(EnvirPath, "Previews", "NPC"); + if (!Directory.Exists(NPCPreviewPath)) + Directory.CreateDirectory(NPCPreviewPath); + string MaleBodyPath = Path.Combine(EnvirPath, "Previews", "NPC", "Body", "Male"); + if (!Directory.Exists(MaleBodyPath)) + Directory.CreateDirectory(MaleBodyPath); + string FemalePath = Path.Combine(EnvirPath, "Previews", "NPC", "Body", "Female"); + if (!Directory.Exists(FemalePath)) + Directory.CreateDirectory(FemalePath); + string HairPath = Path.Combine(EnvirPath, "Previews", "NPC", "Hair"); + if (!Directory.Exists(HairPath)) + Directory.CreateDirectory(HairPath); + string MaleHairPath = Path.Combine(EnvirPath, "Previews", "NPC", "Hair", "Male"); + if (!Directory.Exists(MaleHairPath)) + Directory.CreateDirectory(MaleHairPath); + string FemaleHairPath = Path.Combine(EnvirPath, "Previews", "NPC", "Hair", "Female"); + if (!Directory.Exists(FemaleHairPath)) + Directory.CreateDirectory(FemaleHairPath); + + + string fileName = Path.Combine(Settings.NPCPath, DefaultNPCFilename + ".txt"); + + if (!File.Exists(fileName)) + { + FileStream NewFile = File.Create(fileName); + NewFile.Close(); + } + + fileName = Path.Combine(Settings.NPCPath, MonsterNPCFilename + ".txt"); + + if (!File.Exists(fileName)) + { + FileStream NewFile = File.Create(fileName); + NewFile.Close(); + } + + fileName = Path.Combine(Settings.NPCPath, RobotNPCFilename + ".txt"); + + if (!File.Exists(fileName)) + { + FileStream NewFile = File.Create(fileName); + NewFile.Close(); + } + + LoadVersion(); + LoadEXP(); + LoadBaseStats(); + LoadRandomItemStats(); + LoadGuildSettings(); + LoadMail(); + LoadRefine(); + LoadMarriage(); + LoadGoods(); + LoadGem(); + LoadNotice(); + LoadWorldMap(); + + GameLanguage.LoadServerLanguage(Path.Combine(ConfigPath, "Language.ini")); + } + + public static void LoadNotice() + { + Notice = new Notice(); + + if (!File.Exists(NoticePath)) + { + FileStream NewFile = File.Create(NoticePath); + NewFile.Close(); + } + + var lines = File.ReadAllLines(NoticePath); + + if (lines.Length == 0) + { + return; + } + + Notice.LastUpdate = File.GetLastWriteTime(NoticePath); + + var links = new List(); + + for (int i = 0; i < lines.Length; i++) + { + var line = lines[i]; + + if (string.Compare(line, "TITLE", false) > 0 && line.Contains("=")) + { + Notice.Title = line.Split('=')[1]; + continue; + } + + Notice.Message += line + "\r\n"; + } + } + + public static void Save() + { + //General + Reader.Write("General", "VersionPath", VersionPath); + Reader.Write("General", "CheckVersion", CheckVersion); + Reader.Write("General", "RelogDelay", RelogDelay); + Reader.Write("General", "Multithreaded", Multithreaded); + Reader.Write("General", "ThreadLimit", ThreadLimit); + Reader.Write("General", "TestServer", TestServer); + Reader.Write("General", "EnforceDBChecks", EnforceDBChecks); + Reader.Write("General", "MonsterProcessWhenAlone", MonsterProcessWhenAlone); + + //Paths + Reader.Write("Network", "IPAddress", IPAddress); + Reader.Write("Network", "Port", Port); + Reader.Write("Network", "TimeOut", TimeOut); + Reader.Write("Network", "MaxUser", MaxUser); + Reader.Write("Network", "MaxIP", MaxIP); + + //HTTP + Reader.Write("Network", "StartHTTPService", StartHTTPService); + Reader.Write("Network", "HTTPIPAddress", HTTPIPAddress); + Reader.Write("Network", "HTTPTrustedIPAddress", HTTPTrustedIPAddress); + + //Permission + Reader.Write("Permission", "AllowNewAccount", AllowNewAccount); + Reader.Write("Permission", "AllowChangePassword", AllowChangePassword); + Reader.Write("Permission", "AllowLogin", AllowLogin); + Reader.Write("Permission", "AllowNewCharacter", AllowNewCharacter); + Reader.Write("Permission", "AllowDeleteCharacter", AllowDeleteCharacter); + Reader.Write("Permission", "AllowStartGame", AllowStartGame); + Reader.Write("Permission", "AllowCreateAssassin", AllowCreateAssassin); + Reader.Write("Permission", "AllowCreateArcher", AllowCreateArcher); + Reader.Write("Permission", "MaxResolution", AllowedResolution); + + //Optional + Reader.Write("Optional", "SafeZoneBorder", SafeZoneBorder); + Reader.Write("Optional", "SafeZoneHealing", SafeZoneHealing); + Reader.Write("Optional", "GatherOrbsPerLevel", GatherOrbsPerLevel); + Reader.Write("Optional", "ExpMobLevelDifference", ExpMobLevelDifference); + Reader.Write("Optional", "GameMasterEffect", GameMasterEffect); + Reader.Write("Optional", "LineMessageTimer", LineMessageTimer); + + //Database + Reader.Write("Database", "SaveDelay", SaveDelay); + Reader.Write("Database", "CredxGold", CredxGold); + + //Game + Reader.Write("Game", "DropRate", DropRate); + Reader.Write("Game", "ExpRate", ExpRate); + Reader.Write("Game", "ItemTimeOut", ItemTimeOut); + Reader.Write("Game", "PlayerDiedItemTimeOut", PlayerDiedItemTimeOut); + Reader.Write("Game", "PetSave", PetSave); + Reader.Write("Game", "PKDelay", PKDelay); + Reader.Write("Game", "PalaceGuild", PalaceGuild); + Reader.Write("Game", "PalaceGuildMaxSize", PalaceGuildMaxSize); + Reader.Write("Game", "SkeletonName", SkeletonName); + Reader.Write("Game", "BugBatName", BugBatName); + Reader.Write("Game", "ShinsuName", ShinsuName); + + Reader.Write("Game", "Zuma1", Zuma1); + Reader.Write("Game", "Zuma2", Zuma2); + Reader.Write("Game", "Zuma3", Zuma3); + Reader.Write("Game", "Zuma4", Zuma4); + Reader.Write("Game", "Zuma5", Zuma5); + Reader.Write("Game", "Zuma6", Zuma6); + Reader.Write("Game", "Zuma7", Zuma7); + + Reader.Write("Game", "Turtle1", Turtle1); + Reader.Write("Game", "Turtle2", Turtle2); + Reader.Write("Game", "Turtle3", Turtle3); + Reader.Write("Game", "Turtle4", Turtle4); + Reader.Write("Game", "Turtle5", Turtle5); + + Reader.Write("Game", "BoneMonster1", BoneMonster1); + Reader.Write("Game", "BoneMonster2", BoneMonster2); + Reader.Write("Game", "BoneMonster3", BoneMonster3); + Reader.Write("Game", "BoneMonster4", BoneMonster4); + + Reader.Write("Game", "BehemothMonster1", BehemothMonster1); + Reader.Write("Game", "BehemothMonster2", BehemothMonster2); + Reader.Write("Game", "BehemothMonster3", BehemothMonster3); + + Reader.Write("Game", "HellKnight1", HellKnight1); + Reader.Write("Game", "HellKnight2", HellKnight2); + Reader.Write("Game", "HellKnight3", HellKnight3); + Reader.Write("Game", "HellKnight4", HellKnight4); + Reader.Write("Game", "HellBomb1", HellBomb1); + Reader.Write("Game", "HellBomb2", HellBomb2); + Reader.Write("Game", "HellBomb3", HellBomb3); + + Reader.Write("Game", "WhiteSnake", WhiteSnake); + Reader.Write("Game", "AngelName", AngelName); + Reader.Write("Game", "BombSpiderName", BombSpiderName); + Reader.Write("Game", "CloneName", CloneName); + Reader.Write("Game", "AncientBatName", AncientBatName); + Reader.Write("Game", "TucsonGeneralEgg", TucsonGeneralEgg); + Reader.Write("Game", "GroupInviteDelay", GroupInviteDelay); + Reader.Write("Game", "TradeDelay", TradeDelay); + + Reader.Write("Rested", "Period", RestedPeriod); + Reader.Write("Rested", "BuffLength", RestedBuffLength); + Reader.Write("Rested", "ExpBonus", RestedExpBonus); + Reader.Write("Rested", "MaxBonus", RestedMaxBonus); + + Reader.Write("Items", "HealRing", HealRing); + Reader.Write("Items", "FireRing", FireRing); + Reader.Write("Items", "BlinkSkill", BlinkSkill); + + Reader.Write("PKTown", "PKTownMapName", PKTownMapName); + Reader.Write("PKTown", "PKTownPositionX", PKTownPositionX); + Reader.Write("PKTown", "PKTownPositionY", PKTownPositionY); + + Reader.Write("DropGold", "DropGold", DropGold); + Reader.Write("DropGold", "MaxDropGold", MaxDropGold); + + Reader.Write("Items", "MagicResistWeight", MagicResistWeight); + Reader.Write("Items", "PoisonResistWeight", PoisonResistWeight); + Reader.Write("Items", "CriticalRateWeight", CriticalRateWeight); + Reader.Write("Items", "CriticalDamageWeight", CriticalDamageWeight); + Reader.Write("Items", "FreezingAttackWeight", FreezingAttackWeight); + Reader.Write("Items", "PoisonAttackWeight", PoisonAttackWeight); + Reader.Write("Items", "HealthRegenWeight", HealthRegenWeight); + Reader.Write("Items", "ManaRegenWeight", ManaRegenWeight); + Reader.Write("Items", "MaxLuck", MaxLuck); + Reader.Write("Items", "SealDelay", ItemSealDelay); + + Reader.Write("Items", "PvpCanResistMagic", PvpCanResistMagic); + Reader.Write("Items", "PvpCanResistPoison", PvpCanResistPoison); + Reader.Write("Items", "PvpCanFreeze", PvpCanFreeze); + + Reader.Write("Bonus", "RangeAccuracyBonus", RangeAccuracyBonus); + + Reader.Write("Observe", "AllowObserve", AllowObserve); + + Reader.Write("Game", "GeneralMeowMeowMob1", GeneralMeowMeowMob1); + Reader.Write("Game", "GeneralMeowMeowMob2", GeneralMeowMeowMob2); + Reader.Write("Game", "GeneralMeowMeowMob3", GeneralMeowMeowMob3); + Reader.Write("Game", "GeneralMeowMeowMob4", GeneralMeowMeowMob4); + + Reader.Write("Game", "KingHydraxMob", KingHydraxMob); + Reader.Write("Game", "HornedCommanderMob", HornedCommanderMob); + Reader.Write("Game", "HornedCommanderBombMob", HornedCommanderBombMob); + Reader.Write("Game", "SnowWolfKingMob", SnowWolfKingMob); + + Reader.Write("Game", "ScrollMob1", ScrollMob1); + Reader.Write("Game", "ScrollMob2", ScrollMob2); + Reader.Write("Game", "ScrollMob3", ScrollMob3); + Reader.Write("Game", "ScrollMob4", ScrollMob4); + + //Archive + Reader.Write("Archive", "InactiveCharacterMonths", ArchiveInactiveCharacterAfterMonths); + Reader.Write("Archive", "DeletedCharacterMonths", ArchiveDeletedCharacterAfterMonths); + + Reader.Write("Game", "TeleportToNPCCost", TeleportToNPCCost); + } + + public static void LoadEXP() + { + long exp = 100; + InIReader reader = new InIReader(Path.Combine(ConfigPath, "ExpList.ini")); + + for (int i = 1; i <= 500; i++) + { + exp = reader.ReadInt64("Exp", "Level" + i, exp); + ExperienceList.Add(exp); + } + + //ArcherSpells - Elemental system + reader = new InIReader(Path.Combine(ConfigPath, "OrbsExpList.ini")); + for (int i = 1; i <= 4; i++) + { + exp = i * 50;//default exp value + exp = reader.ReadInt64("Exp", "Orb" + i, exp); + OrbsExpList.Add(exp); + exp = i * 2;//default defense value + exp = reader.ReadInt64("Def", "Orb" + i, exp); + OrbsDefList.Add(exp); + exp = i * 4;//default power value + exp = reader.ReadInt64("Att", "Orb" + i, exp); + OrbsDmgList.Add(exp); + } + } + + public static void LoadWorldMap() + { + InIReader reader = null; + string path = Path.Combine(ConfigPath, "WorldMap.ini"); + if (!File.Exists(path)) + { + FileStream newFile = File.Create(path); + newFile.Close(); + reader = new InIReader(path); + reader.Write("Setup", "Enabled", false); + reader.Write("Layout", "Button0ImageIndex", ""); + reader.Write("Layout", "Button0Title", ""); + reader.Write("Layout", "Button0MapIndex", ""); + } + + if (reader == null) + reader = new InIReader(path); + + WorldMapSetup.Enabled = reader.ReadBoolean("Setup", "Enabled", false); + + int c = 0; + while (true) + { + int imageIndex = reader.ReadInt32("Layout", $"Button{c}ImageIndex", -1, false); + if (imageIndex == -1) + break; + + WorldMapIcon icon = new WorldMapIcon() + { + ImageIndex = imageIndex, + Title = reader.ReadString("Layout", $"Button{c}Title", ""), + MapIndex = reader.ReadInt32("Layout", $"Button{c}MapIndex", 0) + }; + WorldMapSetup.Icons.Add(icon); + c++; + } + } + + public static void LoadBaseStats() + { + for (int i = 0; i < ClassBaseStats.Length; i++) + { + if (!File.Exists(Path.Combine(ConfigPath, $"BaseStats{ClassBaseStats[i].Job}.ini"))) + { + SaveBaseStats(new BaseStats[1] { new BaseStats(ClassBaseStats[i].Job) }); + continue; + } + + InIReader reader = new InIReader(Path.Combine(ConfigPath, $"BaseStats{ClassBaseStats[i].Job}.ini")); + + ClassBaseStats[i].Stats.Clear(); + ClassBaseStats[i].Caps.Clear(); + + foreach (var stat in Enum.GetValues(typeof(Stat))) + { + var key = stat.ToString(); + + var formula = reader.ReadString(key, "Formula", null, false); + + if (!string.IsNullOrEmpty(formula)) + { + var baseStat = new BaseStat((Stat)stat) + { + FormulaType = (StatFormula)Enum.Parse(typeof(StatFormula), formula, true), + Base = reader.ReadInt32(key, "Base", 0), + Gain = reader.ReadFloat(key, "Gain", 0), + GainRate = reader.ReadFloat(key, "GainRate", 0), + Max = reader.ReadInt32(key, "Max", 0) + }; + + ClassBaseStats[i].Stats.Add(baseStat); + } + + ClassBaseStats[i].Caps[(Stat)stat] = reader.ReadInt32("Caps", key, 0, false); + } + } + } + + public static void SaveBaseStats(BaseStats[] classStats = null) + { + if (classStats == null) + { + classStats = ClassBaseStats; + } + + foreach (var baseStats in classStats) + { + File.Delete(Path.Combine(ConfigPath, $"BaseStats{baseStats.Job}.ini")); + InIReader reader = new InIReader(Path.Combine(ConfigPath, $"BaseStats{baseStats.Job}.ini")); + + foreach (var stat in baseStats.Stats) + { + reader.Write(stat.Type.ToString(), "Formula", stat.FormulaType.ToString()); + reader.Write(stat.Type.ToString(), "Base", stat.Base.ToString()); + reader.Write(stat.Type.ToString(), "Gain", stat.Gain.ToString()); + reader.Write(stat.Type.ToString(), "GainRate", stat.GainRate.ToString()); + reader.Write(stat.Type.ToString(), "Max", stat.Max.ToString()); + } + + foreach (var item in baseStats.Caps.Values) + { + reader.Write("Caps", item.Key.ToString(), item.Value); + } + } + } + + public static void LoadRandomItemStats() + { + if (!File.Exists(Path.Combine(ConfigPath, "RandomItemStats.ini"))) + { + RandomItemStatsList.Add(new RandomItemStat()); + RandomItemStatsList.Add(new RandomItemStat(ItemType.Weapon)); + RandomItemStatsList.Add(new RandomItemStat(ItemType.Armour)); + RandomItemStatsList.Add(new RandomItemStat(ItemType.Helmet)); + RandomItemStatsList.Add(new RandomItemStat(ItemType.Necklace)); + RandomItemStatsList.Add(new RandomItemStat(ItemType.Bracelet)); + RandomItemStatsList.Add(new RandomItemStat(ItemType.Ring)); + SaveRandomItemStats(); + return; + } + + InIReader reader = new InIReader(Path.Combine(ConfigPath, "RandomItemStats.ini")); + int i = 0; + RandomItemStat stat; + while (reader.ReadByte("Item" + i.ToString(),"MaxDuraChance",255) != 255) + { + stat = new RandomItemStat(); + stat.MaxDuraChance = reader.ReadByte("Item" + i.ToString(), "MaxDuraChance", 0); + stat.MaxDuraStatChance = reader.ReadByte("Item" + i.ToString(), "MaxDuraStatChance", 1); + stat.MaxDuraMaxStat = reader.ReadByte("Item" + i.ToString(), "MaxDuraMaxStat", 1); + stat.MaxAcChance = reader.ReadByte("Item" + i.ToString(), "MaxAcChance", 0); + stat.MaxAcStatChance = reader.ReadByte("Item" + i.ToString(), "MaxAcStatChance", 1); + stat.MaxAcMaxStat = reader.ReadByte("Item" + i.ToString(), "MaxAcMaxStat", 1); + stat.MaxMacChance = reader.ReadByte("Item" + i.ToString(), "MaxMacChance", 0); + stat.MaxMacStatChance = reader.ReadByte("Item" + i.ToString(), "MaxMacStatChance", 1); + stat.MaxMacMaxStat = reader.ReadByte("Item" + i.ToString(), "MaxMACMaxStat", 1); + stat.MaxDcChance = reader.ReadByte("Item" + i.ToString(), "MaxDcChance", 0); + stat.MaxDcStatChance = reader.ReadByte("Item" + i.ToString(), "MaxDcStatChance", 1); + stat.MaxDcMaxStat = reader.ReadByte("Item" + i.ToString(), "MaxDcMaxStat", 1); + stat.MaxMcChance = reader.ReadByte("Item" + i.ToString(), "MaxMcChance", 0); + stat.MaxMcStatChance = reader.ReadByte("Item" + i.ToString(), "MaxMcStatChance", 1); + stat.MaxMcMaxStat = reader.ReadByte("Item" + i.ToString(), "MaxMcMaxStat", 1); + stat.MaxScChance = reader.ReadByte("Item" + i.ToString(), "MaxScChance", 0); + stat.MaxScStatChance = reader.ReadByte("Item" + i.ToString(), "MaxScStatChance", 1); + stat.MaxScMaxStat = reader.ReadByte("Item" + i.ToString(), "MaxScMaxStat", 1); + stat.AccuracyChance = reader.ReadByte("Item" + i.ToString(), "AccuracyChance", 0); + stat.AccuracyStatChance = reader.ReadByte("Item" + i.ToString(), "AccuracyStatChance", 1); + stat.AccuracyMaxStat = reader.ReadByte("Item" + i.ToString(), "AccuracyMaxStat", 1); + stat.AgilityChance = reader.ReadByte("Item" + i.ToString(), "AgilityChance", 0); + stat.AgilityStatChance = reader.ReadByte("Item" + i.ToString(), "AgilityStatChance", 1); + stat.AgilityMaxStat = reader.ReadByte("Item" + i.ToString(), "AgilityMaxStat", 1); + stat.HpChance = reader.ReadByte("Item" + i.ToString(), "HpChance", 0); + stat.HpStatChance = reader.ReadByte("Item" + i.ToString(), "HpStatChance", 1); + stat.HpMaxStat = reader.ReadByte("Item" + i.ToString(), "HpMaxStat", 1); + stat.MpChance = reader.ReadByte("Item" + i.ToString(), "MpChance", 0); + stat.MpStatChance = reader.ReadByte("Item" + i.ToString(), "MpStatChance", 1); + stat.MpMaxStat = reader.ReadByte("Item" + i.ToString(), "MpMaxStat", 1); + stat.StrongChance = reader.ReadByte("Item" + i.ToString(), "StrongChance", 0); + stat.StrongStatChance = reader.ReadByte("Item" + i.ToString(), "StrongStatChance", 1); + stat.StrongMaxStat = reader.ReadByte("Item" + i.ToString(), "StrongMaxStat", 1); + stat.MagicResistChance = reader.ReadByte("Item" + i.ToString(), "MagicResistChance", 0); + stat.MagicResistStatChance = reader.ReadByte("Item" + i.ToString(), "MagicResistStatChance", 1); + stat.MagicResistMaxStat = reader.ReadByte("Item" + i.ToString(), "MagicResistMaxStat", 1); + stat.PoisonResistChance = reader.ReadByte("Item" + i.ToString(), "PoisonResistChance", 0); + stat.PoisonResistStatChance = reader.ReadByte("Item" + i.ToString(), "PoisonResistStatChance", 1); + stat.PoisonResistMaxStat = reader.ReadByte("Item" + i.ToString(), "PoisonResistMaxStat", 1); + stat.HpRecovChance = reader.ReadByte("Item" + i.ToString(), "HpRecovChance", 0); + stat.HpRecovStatChance = reader.ReadByte("Item" + i.ToString(), "HpRecovStatChance", 1); + stat.HpRecovMaxStat = reader.ReadByte("Item" + i.ToString(), "HpRecovMaxStat", 1); + stat.MpRecovChance = reader.ReadByte("Item" + i.ToString(), "MpRecovChance", 0); + stat.MpRecovStatChance = reader.ReadByte("Item" + i.ToString(), "MpRecovStatChance", 1); + stat.MpRecovMaxStat = reader.ReadByte("Item" + i.ToString(), "MpRecovMaxStat", 1); + stat.PoisonRecovChance = reader.ReadByte("Item" + i.ToString(), "PoisonRecovChance", 0); + stat.PoisonRecovStatChance = reader.ReadByte("Item" + i.ToString(), "PoisonRecovStatChance", 1); + stat.PoisonRecovMaxStat = reader.ReadByte("Item" + i.ToString(), "PoisonRecovMaxStat", 1); + stat.CriticalRateChance = reader.ReadByte("Item" + i.ToString(), "CriticalRateChance", 0); + stat.CriticalRateStatChance = reader.ReadByte("Item" + i.ToString(), "CriticalRateStatChance", 1); + stat.CriticalRateMaxStat = reader.ReadByte("Item" + i.ToString(), "CriticalRateMaxStat", 1); + stat.CriticalDamageChance = reader.ReadByte("Item" + i.ToString(), "CriticalDamageChance", 0); + stat.CriticalDamageStatChance = reader.ReadByte("Item" + i.ToString(), "CriticalDamageStatChance", 1); + stat.CriticalDamageMaxStat = reader.ReadByte("Item" + i.ToString(), "CriticalDamageMaxStat", 1); + stat.FreezeChance = reader.ReadByte("Item" + i.ToString(), "FreezeChance", 0); + stat.FreezeStatChance = reader.ReadByte("Item" + i.ToString(), "FreezeStatChance", 1); + stat.FreezeMaxStat = reader.ReadByte("Item" + i.ToString(), "FreezeMaxStat", 1); + stat.PoisonAttackChance = reader.ReadByte("Item" + i.ToString(), "PoisonAttackChance", 0); + stat.PoisonAttackStatChance = reader.ReadByte("Item" + i.ToString(), "PoisonAttackStatChance", 1); + stat.PoisonAttackMaxStat = reader.ReadByte("Item" + i.ToString(), "PoisonAttackMaxStat", 1); + stat.AttackSpeedChance = reader.ReadByte("Item" + i.ToString(), "AttackSpeedChance", 0); + stat.AttackSpeedStatChance = reader.ReadByte("Item" + i.ToString(), "AttackSpeedStatChance", 1); + stat.AttackSpeedMaxStat = reader.ReadByte("Item" + i.ToString(), "AttackSpeedMaxStat", 1); + stat.LuckChance = reader.ReadByte("Item" + i.ToString(), "LuckChance", 0); + stat.LuckStatChance = reader.ReadByte("Item" + i.ToString(), "LuckStatChance", 1); + stat.LuckMaxStat = reader.ReadByte("Item" + i.ToString(), "LuckMaxStat", 1); + stat.CurseChance = reader.ReadByte("Item" + i.ToString(), "CurseChance", 0); + RandomItemStatsList.Add(stat); + i++; + } + } + public static void SaveRandomItemStats() + { + File.Delete(Path.Combine(ConfigPath, "RandomItemStats.ini")); + InIReader reader = new InIReader(Path.Combine(ConfigPath, "RandomItemStats.ini")); + RandomItemStat stat; + for (int i = 0; i < RandomItemStatsList.Count; i++) + { + stat = RandomItemStatsList[i]; + reader.Write("Item" + i.ToString(), "MaxDuraChance", stat.MaxDuraChance); + reader.Write("Item" + i.ToString(), "MaxDuraStatChance", stat.MaxDuraStatChance); + reader.Write("Item" + i.ToString(), "MaxDuraMaxStat", stat.MaxDuraMaxStat); + reader.Write("Item" + i.ToString(), "MaxAcChance", stat.MaxAcChance); + reader.Write("Item" + i.ToString(), "MaxAcStatChance", stat.MaxAcStatChance); + reader.Write("Item" + i.ToString(), "MaxAcMaxStat", stat.MaxAcMaxStat); + reader.Write("Item" + i.ToString(), "MaxMacChance", stat.MaxMacChance); + reader.Write("Item" + i.ToString(), "MaxMacStatChance", stat.MaxMacStatChance); + reader.Write("Item" + i.ToString(), "MaxMACMaxStat", stat.MaxMacMaxStat); + reader.Write("Item" + i.ToString(), "MaxDcChance", stat.MaxDcChance); + reader.Write("Item" + i.ToString(), "MaxDcStatChance", stat.MaxDcStatChance); + reader.Write("Item" + i.ToString(), "MaxDcMaxStat", stat.MaxDcMaxStat); + reader.Write("Item" + i.ToString(), "MaxMcChance", stat.MaxMcChance); + reader.Write("Item" + i.ToString(), "MaxMcStatChance", stat.MaxMcStatChance); + reader.Write("Item" + i.ToString(), "MaxMcMaxStat", stat.MaxMcMaxStat); + reader.Write("Item" + i.ToString(), "MaxScChance", stat.MaxScChance); + reader.Write("Item" + i.ToString(), "MaxScStatChance", stat.MaxScStatChance); + reader.Write("Item" + i.ToString(), "MaxScMaxStat", stat.MaxScMaxStat); + reader.Write("Item" + i.ToString(), "AccuracyChance", stat.AccuracyChance); + reader.Write("Item" + i.ToString(), "AccuracyStatChance", stat.AccuracyStatChance); + reader.Write("Item" + i.ToString(), "AccuracyMaxStat", stat.AccuracyMaxStat); + reader.Write("Item" + i.ToString(), "AgilityChance", stat.AgilityChance); + reader.Write("Item" + i.ToString(), "AgilityStatChance", stat.AgilityStatChance); + reader.Write("Item" + i.ToString(), "AgilityMaxStat", stat.AgilityMaxStat); + reader.Write("Item" + i.ToString(), "HpChance", stat.HpChance); + reader.Write("Item" + i.ToString(), "HpStatChance", stat.HpStatChance); + reader.Write("Item" + i.ToString(), "HpMaxStat", stat.HpMaxStat); + reader.Write("Item" + i.ToString(), "MpChance", stat.MpChance); + reader.Write("Item" + i.ToString(), "MpStatChance", stat.MpStatChance); + reader.Write("Item" + i.ToString(), "MpMaxStat", stat.MpMaxStat); + reader.Write("Item" + i.ToString(), "StrongChance", stat.StrongChance); + reader.Write("Item" + i.ToString(), "StrongStatChance", stat.StrongStatChance); + reader.Write("Item" + i.ToString(), "StrongMaxStat", stat.StrongMaxStat); + reader.Write("Item" + i.ToString(), "MagicResistChance", stat.MagicResistChance); + reader.Write("Item" + i.ToString(), "MagicResistStatChance", stat.MagicResistStatChance); + reader.Write("Item" + i.ToString(), "MagicResistMaxStat", stat.MagicResistMaxStat); + reader.Write("Item" + i.ToString(), "PoisonResistChance", stat.PoisonResistChance); + reader.Write("Item" + i.ToString(), "PoisonResistStatChance", stat.PoisonResistStatChance); + reader.Write("Item" + i.ToString(), "PoisonResistMaxStat", stat.PoisonResistMaxStat); + reader.Write("Item" + i.ToString(), "HpRecovChance", stat.HpRecovChance); + reader.Write("Item" + i.ToString(), "HpRecovStatChance", stat.HpRecovStatChance); + reader.Write("Item" + i.ToString(), "HpRecovMaxStat", stat.HpRecovMaxStat); + reader.Write("Item" + i.ToString(), "MpRecovChance", stat.MpRecovChance); + reader.Write("Item" + i.ToString(), "MpRecovStatChance", stat.MpRecovStatChance); + reader.Write("Item" + i.ToString(), "MpRecovMaxStat", stat.MpRecovMaxStat); + reader.Write("Item" + i.ToString(), "PoisonRecovChance", stat.PoisonRecovChance); + reader.Write("Item" + i.ToString(), "PoisonRecovStatChance", stat.PoisonRecovStatChance); + reader.Write("Item" + i.ToString(), "PoisonRecovMaxStat", stat.PoisonRecovMaxStat); + reader.Write("Item" + i.ToString(), "CriticalRateChance", stat.CriticalRateChance); + reader.Write("Item" + i.ToString(), "CriticalRateStatChance", stat.CriticalRateStatChance); + reader.Write("Item" + i.ToString(), "CriticalRateMaxStat", stat.CriticalRateMaxStat); + reader.Write("Item" + i.ToString(), "CriticalDamageChance", stat.CriticalDamageChance); + reader.Write("Item" + i.ToString(), "CriticalDamageStatChance", stat.CriticalDamageStatChance); + reader.Write("Item" + i.ToString(), "CriticalDamageMaxStat", stat.CriticalDamageMaxStat); + reader.Write("Item" + i.ToString(), "FreezeChance", stat.FreezeChance); + reader.Write("Item" + i.ToString(), "FreezeStatChance", stat.FreezeStatChance); + reader.Write("Item" + i.ToString(), "FreezeMaxStat", stat.FreezeMaxStat); + reader.Write("Item" + i.ToString(), "PoisonAttackChance", stat.PoisonAttackChance); + reader.Write("Item" + i.ToString(), "PoisonAttackStatChance", stat.PoisonAttackStatChance); + reader.Write("Item" + i.ToString(), "PoisonAttackMaxStat", stat.PoisonAttackMaxStat); + reader.Write("Item" + i.ToString(), "AttackSpeedChance", stat.AttackSpeedChance); + reader.Write("Item" + i.ToString(), "AttackSpeedStatChance", stat.AttackSpeedStatChance); + reader.Write("Item" + i.ToString(), "AttackSpeedMaxStat", stat.AttackSpeedMaxStat); + reader.Write("Item" + i.ToString(), "LuckChance", stat.LuckChance); + reader.Write("Item" + i.ToString(), "LuckStatChance", stat.LuckStatChance); + reader.Write("Item" + i.ToString(), "LuckMaxStat", stat.LuckMaxStat); + reader.Write("Item" + i.ToString(), "CurseChance", stat.CurseChance); + } + } + + public static void LoadGuildSettings() + { + if (!File.Exists(Path.Combine(ConfigPath, "GuildSettings.ini"))) + { + Guild_CreationCostList.Add(new GuildItemVolume(){Amount = 1000000}); + Guild_CreationCostList.Add(new GuildItemVolume(){ItemName = "WoomaHorn",Amount = 1}); + return; + } + InIReader reader = new InIReader(Path.Combine(ConfigPath, "GuildSettings.ini")); + Guild_RequiredLevel = reader.ReadByte("Guilds", "MinimumLevel", Guild_RequiredLevel); + Guild_ExpRate = reader.ReadFloat("Guilds", "ExpRate", Guild_ExpRate); + Guild_PointPerLevel = reader.ReadByte("Guilds", "PointPerLevel", Guild_PointPerLevel); + Guild_WarTime = reader.ReadInt64("Guilds", "WarTime", Guild_WarTime); + Guild_WarCost = reader.ReadUInt32("Guilds", "WarCost", Guild_WarCost); + + int i = 0; + while (reader.ReadUInt32("Required-" + i.ToString(),"Amount",0) != 0) + { + Guild_CreationCostList.Add(new GuildItemVolume() + { + ItemName = reader.ReadString("Required-" + i.ToString(), "ItemName", ""), + Amount = reader.ReadUInt32("Required-" + i.ToString(), "Amount", 0) + } + ); + i++; + } + i = 0; + while (reader.ReadInt64("Exp", "Level-" + i.ToString(), -1) != -1) + { + Guild_ExperienceList.Add(reader.ReadInt64("Exp", "Level-" + i.ToString(), 0)); + i++; + } + i = 0; + while (reader.ReadInt32("Cap", "Level-" + i.ToString(), -1) != -1) + { + Guild_MembercapList.Add(reader.ReadInt32("Cap", "Level-" + i.ToString(), 0)); + i++; + } + byte TotalBuffs = reader.ReadByte("Guilds", "TotalBuffs", 0); + for (i = 0; i < TotalBuffs; i++) + { + Guild_BuffList.Add(new GuildBuffInfo(reader, i)); + } + } + public static void SaveGuildSettings() + { + File.Delete(Path.Combine(ConfigPath, "GuildSettings.ini")); + InIReader reader = new InIReader(Path.Combine(ConfigPath, "GuildSettings.ini")); + reader.Write("Guilds", "MinimumLevel", Guild_RequiredLevel); + reader.Write("Guilds", "ExpRate", Guild_ExpRate); + reader.Write("Guilds", "PointPerLevel", Guild_PointPerLevel); + reader.Write("Guilds", "TotalBuffs", Guild_BuffList.Count); + reader.Write("Guilds", "WarTime", Guild_WarTime); + reader.Write("Guilds", "WarCost", Guild_WarCost); + + int i; + for (i = 0; i < Guild_ExperienceList.Count; i++) + { + reader.Write("Exp", "Level-" + i.ToString(), Guild_ExperienceList[i]); + } + for (i = 0; i < Guild_MembercapList.Count; i++) + { + reader.Write("Cap", "Level-" + i.ToString(), Guild_MembercapList[i]); + } + for (i = 0; i < Guild_CreationCostList.Count; i++) + { + reader.Write("Required-" + i.ToString(), "ItemName", Guild_CreationCostList[i].ItemName); + reader.Write("Required-" + i.ToString(), "Amount", Guild_CreationCostList[i].Amount); + } + for (i = 0; i < Guild_BuffList.Count; i++) + { + Guild_BuffList[i].Save(reader, i); + } + } + public static void LinkGuildCreationItems(List ItemList) + { + for (int i = 0; i < Guild_CreationCostList.Count; i++) + { + if (Guild_CreationCostList[i].ItemName != "") + for (int j = 0; j < ItemList.Count; j++) + { + if (String.Compare(ItemList[j].Name.Replace(" ", ""), Guild_CreationCostList[i].ItemName, StringComparison.OrdinalIgnoreCase) != 0) continue; + Guild_CreationCostList[i].Item = ItemList[j]; + break; + } + + } + } + + public static void LoadMail() + { + if (!File.Exists(Path.Combine(ConfigPath, "MailSystem.ini"))) + { + SaveMail(); + return; + } + + InIReader reader = new InIReader(Path.Combine(ConfigPath, "MailSystem.ini")); + MailAutoSendGold = reader.ReadBoolean("AutoSend", "Gold", MailAutoSendGold); + MailAutoSendItems = reader.ReadBoolean("AutoSend", "Items", MailAutoSendItems); + MailFreeWithStamp = reader.ReadBoolean("Rates", "FreeWithStamp", MailFreeWithStamp); + MailCostPer1KGold = reader.ReadUInt32("Rates", "CostPer1k", MailCostPer1KGold); + MailItemInsurancePercentage = reader.ReadUInt32("Rates", "InsurancePerItem", MailItemInsurancePercentage); + MailCapacity = reader.ReadUInt32("General", "MailCapacity", MailCapacity); + } + public static void SaveMail() + { + File.Delete(Path.Combine(ConfigPath, "MailSystem.ini")); + InIReader reader = new InIReader(Path.Combine(ConfigPath, "MailSystem.ini")); + reader.Write("AutoSend", "Gold", MailAutoSendGold); + reader.Write("AutoSend", "Items", MailAutoSendItems); + reader.Write("Rates", "FreeWithStamp", MailFreeWithStamp); + reader.Write("Rates", "CostPer1k", MailCostPer1KGold); + reader.Write("Rates", "InsurancePerItem", MailItemInsurancePercentage); + reader.Write("General", "MailCapacity", MailCapacity); + } + + public static void LoadRefine() + { + if (!File.Exists(Path.Combine(ConfigPath, "RefineSystem.ini"))) + { + SaveRefine(); + return; + } + + InIReader reader = new InIReader(Path.Combine(ConfigPath, "RefineSystem.ini")); + OnlyRefineWeapon = reader.ReadBoolean("Config", "OnlyRefineWeapon", OnlyRefineWeapon); + RefineBaseChance = reader.ReadByte("Config", "BaseChance", RefineBaseChance); + RefineTime = reader.ReadInt32("Config", "Time", RefineTime); + RefineIncrease = reader.ReadByte("Config", "StatIncrease", RefineIncrease); + RefineCritChance = reader.ReadByte("Config", "CritChance", RefineCritChance); + RefineCritIncrease = reader.ReadByte("Config", "CritIncrease", RefineCritIncrease); + RefineWepStatReduce = reader.ReadByte("Config", "WepStatReducedChance", RefineWepStatReduce); + RefineItemStatReduce = reader.ReadByte("Config", "ItemStatReducedChance", RefineItemStatReduce); + RefineCost = reader.ReadInt32("Config", "RefineCost", RefineCost); + + RefineOreName = reader.ReadString("Ore", "OreName", RefineOreName); + } + public static void SaveRefine() + { + File.Delete(Path.Combine(ConfigPath, "RefineSystem.ini")); + InIReader reader = new InIReader(Path.Combine(ConfigPath, "RefineSystem.ini")); + reader.Write("Config", "OnlyRefineWeapon", OnlyRefineWeapon); + reader.Write("Config", "BaseChance", RefineBaseChance); + reader.Write("Config", "Time", RefineTime); + reader.Write("Config", "StatIncrease", RefineIncrease); + reader.Write("Config", "CritChance", RefineCritChance); + reader.Write("Config", "CritIncrease", RefineCritIncrease); + reader.Write("Config", "WepStatReducedChance", RefineWepStatReduce); + reader.Write("Config", "ItemStatReducedChance", RefineItemStatReduce); + reader.Write("Config", "RefineCost", RefineCost); + + reader.Write("Ore", "OreName", RefineOreName); + + } + + public static void LoadMarriage() + { + if (!File.Exists(Path.Combine(ConfigPath, "MarriageSystem.ini"))) + { + SaveMarriage(); + return; + } + InIReader reader = new InIReader(Path.Combine(ConfigPath, "MarriageSystem.ini")); + LoverEXPBonus = reader.ReadInt32("Config", "EXPBonus", LoverEXPBonus); + MarriageCooldown = reader.ReadInt32("Config", "MarriageCooldown", MarriageCooldown); + WeddingRingRecall = reader.ReadBoolean("Config", "AllowLoverRecall", WeddingRingRecall); + MarriageLevelRequired = reader.ReadInt32("Config", "MinimumLevel", MarriageLevelRequired); + ReplaceWedRingCost = reader.ReadInt32("Config", "ReplaceRingCost", ReplaceWedRingCost); + } + public static void SaveMarriage() + { + File.Delete(Path.Combine(ConfigPath, "MarriageSystem.ini")); + InIReader reader = new InIReader(Path.Combine(ConfigPath, "MarriageSystem.ini")); + reader.Write("Config", "EXPBonus", LoverEXPBonus); + reader.Write("Config", "MarriageCooldown", MarriageCooldown); + reader.Write("Config", "AllowLoverRecall", WeddingRingRecall); + reader.Write("Config", "MinimumLevel", MarriageLevelRequired); + reader.Write("Config", "ReplaceRingCost", ReplaceWedRingCost); + } + + public static void LoadGem() + { + if (!File.Exists(Path.Combine(ConfigPath, "GemSystem.ini"))) + { + SaveGem(); + return; + } + InIReader reader = new InIReader(Path.Combine(ConfigPath, "GemSystem.ini")); + GemStatIndependent = reader.ReadBoolean("Config", "GemStatIndependent", GemStatIndependent); + + + } + public static void SaveGem() + { + File.Delete(Path.Combine(ConfigPath, "GemSystem.ini")); + InIReader reader = new InIReader(Path.Combine(ConfigPath, "GemSystem.ini")); + reader.Write("Config", "GemStatIndependent", GemStatIndependent); + } + + public static void LoadGoods() + { + if (!File.Exists(Path.Combine(ConfigPath, "GoodsSystem.ini"))) + { + SaveGoods(); + return; + } + + InIReader reader = new InIReader(Path.Combine(ConfigPath, "GoodsSystem.ini")); + GoodsOn = reader.ReadBoolean("Goods", "On", GoodsOn); + GoodsMaxStored = reader.ReadUInt32("Goods", "MaxStored", GoodsMaxStored); + GoodsBuyBackTime = reader.ReadUInt32("Goods", "BuyBackTime", GoodsBuyBackTime); + GoodsBuyBackMaxStored = reader.ReadUInt32("Goods", "BuyBackMaxStored", GoodsBuyBackMaxStored); + GoodsHideAddedStats = reader.ReadBoolean("Goods", "HideAddedStats", GoodsHideAddedStats); + } + public static void SaveGoods() + { + File.Delete(Path.Combine(ConfigPath, "GoodsSystem.ini")); + InIReader reader = new InIReader(Path.Combine(ConfigPath, "GoodsSystem.ini")); + reader.Write("Goods", "On", GoodsOn); + reader.Write("Goods", "MaxStored", GoodsMaxStored); + reader.Write("Goods", "BuyBackTime", GoodsBuyBackTime); + reader.Write("Goods", "BuyBackMaxStored", GoodsBuyBackMaxStored); + reader.Write("Goods", "HideAddedStats", GoodsHideAddedStats); + } + + } +} diff --git a/Server/Utils/Crypto.cs b/Server/Utils/Crypto.cs new file mode 100644 index 0000000..f4e224f --- /dev/null +++ b/Server/Utils/Crypto.cs @@ -0,0 +1,26 @@ +using System.Security.Cryptography; +using System.Text; + +namespace Server.Utils +{ + class Crypto + { + public const int SaltSize = 24; + public const int HashSize = 24; + public const int Iterations = 50; + public static byte[] GenerateSalt() + { + var rng = RandomNumberGenerator.Create(); + byte[] salt = new byte[SaltSize]; + rng.GetBytes(salt); + + return salt; + } + + public static string HashPassword(string password, byte[] salt) + { + Rfc2898DeriveBytes pbkdf2 = new Rfc2898DeriveBytes(password, salt, Iterations, HashAlgorithmName.SHA1); + return Encoding.UTF8.GetString(pbkdf2.GetBytes(HashSize)); + } + } +} diff --git a/Server/Utils/FixedSizedQueue.cs b/Server/Utils/FixedSizedQueue.cs new file mode 100644 index 0000000..0c444a4 --- /dev/null +++ b/Server/Utils/FixedSizedQueue.cs @@ -0,0 +1,29 @@ +using System.Collections.Concurrent; + +namespace Server.Utils +{ + public class FixedSizedQueue : ConcurrentQueue + { + private readonly object syncObject = new object(); + + public int Size { get; private set; } + + public FixedSizedQueue(int size) + { + Size = size; + } + + public new void Enqueue(T obj) + { + base.Enqueue(obj); + lock (syncObject) + { + while (base.Count > Size) + { + T outObj; + base.TryDequeue(out outObj); + } + } + } + } +} diff --git a/Server/Utils/HttpServer.cs b/Server/Utils/HttpServer.cs new file mode 100644 index 0000000..7cd132d --- /dev/null +++ b/Server/Utils/HttpServer.cs @@ -0,0 +1,118 @@ +using System.Net; +using Server.MirEnvir; +using S = ServerPackets; + +namespace Server.Library.Utils +{ + class HttpServer : HttpService + { + Thread _thread; + CancellationTokenSource tokenSource = new(); + + public HttpServer() + { + Host = Settings.HTTPIPAddress; + } + + public void Start() + { + _thread = new Thread(Listen); + _thread.Start(tokenSource.Token); + } + + public new void Stop() + { + base.Stop(); + + tokenSource.Cancel(); + Thread.Sleep(1000); + tokenSource.Dispose(); + + } + + + public override void OnGetRequest(HttpListenerRequest request, HttpListenerResponse response) + { + var url = request.Url.PathAndQuery; + if (url.Contains("?")) + { + url = url.Substring(0, url.IndexOf("?", StringComparison.Ordinal)); + url = url.ToLower(); + } + try + { + switch (url) + { + case "/": + WriteResponse(response, GameLanguage.GameName); + break; + case "/newaccount": + var id = request.QueryString["id"]; + var psd = request.QueryString["psd"]; + var email = request.QueryString["email"]; + var name = request.QueryString["name"]; + var question = request.QueryString["question"]; + var answer = request.QueryString["answer"]; + var ip = request.QueryString["ip"]; + var p = new ClientPackets.NewAccount(); + p.AccountID = id; + p.Password = psd; + var result = Envir.Main.HTTPNewAccount(p, ip); + WriteResponse(response, result.ToString()); + break; + case "/addnamelist": + id = request.QueryString["id"]; + var fileName = request.QueryString["fileName"]; + AddNameList(id, fileName); + WriteResponse(response, "true"); + break; + case "/broadcast": + var msg = request.QueryString["msg"]; + if (msg.Length < 5) + { + WriteResponse(response, "short"); + return; + } + Envir.Main.Broadcast(new S.Chat + { + Message = msg.Trim(), + Type = ChatType.Shout2 + }); + WriteResponse(response, "true"); + break; + default: + WriteResponse(response, "error"); + break; + } + } + catch (Exception error) + { + WriteResponse(response, "request error: " + error); + } + } + + void AddNameList(string playerName, string fileName) + { + fileName = Path.Combine(Settings.NameListPath, fileName); + var sDirectory = Path.GetDirectoryName(fileName); + Directory.CreateDirectory(sDirectory ?? throw new InvalidOperationException()); + if (!File.Exists(fileName)) + File.Create(fileName).Close(); + + var tempString = fileName; + if (File.ReadAllLines(tempString).All(t => playerName != t)) + { + using (var line = File.AppendText(tempString)) + { + line.WriteLine(playerName); + } + } + } + + public override void OnPostRequest(HttpListenerRequest request, HttpListenerResponse response) + { + Console.WriteLine("POST request: {0}", request.Url); + } + } + +} diff --git a/Server/Utils/HttpService.cs b/Server/Utils/HttpService.cs new file mode 100644 index 0000000..9a1e7f2 --- /dev/null +++ b/Server/Utils/HttpService.cs @@ -0,0 +1,107 @@ +using System.Net; +using System.Text; + +namespace Server.Library.Utils +{ + internal abstract class HttpService + { + protected string Host; + private HttpListener _listener; + private bool _isActive = true; + + protected HttpService() + { + } + + public void Listen(object obj) + { + CancellationToken token = (CancellationToken)obj; + + if (!HttpListener.IsSupported) + { + throw new InvalidOperationException( + "To use HttpListener the operating system must be Windows XP SP2 or Server 2003 or higher."); + } + string[] prefixes = { Host }; + + _listener = new HttpListener(); + try + { + foreach (var s in prefixes) + { + _listener.Prefixes.Add(s); + } + _listener.Start(); + MessageQueue.Instance.Enqueue("HttpService started."); + } + catch (Exception err) + { + MessageQueue.Instance.Enqueue("HttpService start failed! Error:" + err); + return; + } + + while (_isActive && !token.IsCancellationRequested) + { + try + { + var context = _listener.GetContext(); + var request = context.Request; + Console.WriteLine("{0} {1} HTTP/1.1", request.HttpMethod, request.RawUrl); + Console.WriteLine("User-Agent: {0}", request.UserAgent); + Console.WriteLine("Accept-Encoding: {0}", request.Headers["Accept-Encoding"]); + Console.WriteLine("Connection: {0}", request.KeepAlive ? "Keep-Alive" : "close"); + Console.WriteLine("Host: {0}", request.UserHostName); + var response = context.Response; + if (context.Request.RemoteEndPoint != null) + { + var clientIp = context.Request.RemoteEndPoint.Address.ToString(); + + if (clientIp != Settings.HTTPTrustedIPAddress) + { + WriteResponse(response, "notrusted:" + clientIp); + continue; + } + } + + if (request.HttpMethod == "GET") + { + OnGetRequest(request, response); + } + else + { + OnPostRequest(request, response); + } + } + catch { } + } + } + + public void Stop() + { + _isActive = false; + if (_listener != null && _listener.IsListening) + { + _listener.Stop(); + } + } + + public abstract void OnGetRequest(HttpListenerRequest request, HttpListenerResponse response); + public abstract void OnPostRequest(HttpListenerRequest request, HttpListenerResponse response); + + public void WriteResponse(HttpListenerResponse response, string responseString) + { + try + { + response.ContentLength64 = Encoding.UTF8.GetByteCount(responseString); + response.ContentType = "text/html; charset=UTF-8"; + } + finally + { + var output = response.OutputStream; + var writer = new StreamWriter(output); + writer.Write(responseString); + writer.Close(); + } + } + } +} diff --git a/Shared/BaseStats.cs b/Shared/BaseStats.cs new file mode 100644 index 0000000..a53691d --- /dev/null +++ b/Shared/BaseStats.cs @@ -0,0 +1,155 @@ +public class BaseStats +{ + public MirClass Job; + public List Stats = new List(); + + public Stats Caps = new Stats(); + + public BaseStats(MirClass job) + { + Job = job; + + switch (job) + { + #region Warrior + case MirClass.Warrior: + Stats.Add(new BaseStat(Stat.HP) { FormulaType = StatFormula.Health, Base = 14, Gain = 4F, GainRate = 4.5F, Max = 0 }); + Stats.Add(new BaseStat(Stat.MP) { FormulaType = StatFormula.Mana, Base = 11, Gain = 3.5F, GainRate = 0F, Max = 0 }); + Stats.Add(new BaseStat(Stat.BagWeight) { FormulaType = StatFormula.Weight, Base = 50, Gain = 3F, GainRate = 0F, Max = 0 }); + Stats.Add(new BaseStat(Stat.WearWeight) { FormulaType = StatFormula.Weight, Base = 15, Gain = 20F, GainRate = 0F, Max = 0 }); + Stats.Add(new BaseStat(Stat.HandWeight) { FormulaType = StatFormula.Weight, Base = 12, Gain = 13F, GainRate = 0F, Max = 0 }); + Stats.Add(new BaseStat(Stat.MinAC) { FormulaType = StatFormula.Stat, Base = 0, Gain = 0, GainRate = 0F, Max = 0 }); + Stats.Add(new BaseStat(Stat.MaxAC) { FormulaType = StatFormula.Stat, Base = 0, Gain = 7, GainRate = 0F, Max = 0 }); + Stats.Add(new BaseStat(Stat.MinDC) { FormulaType = StatFormula.Stat, Base = 0, Gain = 5, GainRate = 0F, Max = 0 }); + Stats.Add(new BaseStat(Stat.MaxDC) { FormulaType = StatFormula.Stat, Base = 0, Gain = 5, GainRate = 0F, Max = 0 }); + Stats.Add(new BaseStat(Stat.Agility) { FormulaType = StatFormula.Stat, Base = 15, Gain = 0, GainRate = 0F, Max = 0 }); + Stats.Add(new BaseStat(Stat.Accuracy) { FormulaType = StatFormula.Stat, Base = 5, Gain = 0, GainRate = 0F, Max = 0 }); + break; + #endregion + #region Wizard + case MirClass.Wizard: + Stats.Add(new BaseStat(Stat.HP) { FormulaType = StatFormula.Health, Base = 14, Gain = 15F, GainRate =1.8F, Max = 0 }); + Stats.Add(new BaseStat(Stat.MP) { FormulaType = StatFormula.Mana, Base = 13, Gain = 5F, GainRate = 0F, Max = 0 }); + Stats.Add(new BaseStat(Stat.BagWeight) { FormulaType = StatFormula.Weight, Base = 50, Gain = 5F, GainRate = 0F, Max = 0 }); + Stats.Add(new BaseStat(Stat.WearWeight) { FormulaType = StatFormula.Weight, Base = 15, Gain = 100F, GainRate = 0F, Max = 0 }); + Stats.Add(new BaseStat(Stat.HandWeight) { FormulaType = StatFormula.Weight, Base = 12, Gain = 90F, GainRate = 0F, Max = 0 }); + Stats.Add(new BaseStat(Stat.MinDC) { FormulaType = StatFormula.Stat, Base = 0, Gain = 7, GainRate = 0F, Max = 0 }); + Stats.Add(new BaseStat(Stat.MaxDC) { FormulaType = StatFormula.Stat, Base = 0, Gain = 7, GainRate = 0F, Max = 0 }); + Stats.Add(new BaseStat(Stat.MinMC) { FormulaType = StatFormula.Stat, Base = 0, Gain = 7, GainRate = 0F, Max = 0 }); + Stats.Add(new BaseStat(Stat.MaxMC) { FormulaType = StatFormula.Stat, Base = 0, Gain = 7, GainRate = 0F, Max = 0 }); + Stats.Add(new BaseStat(Stat.Agility) { FormulaType = StatFormula.Stat, Base = 15, Gain = 0, GainRate = 0F, Max = 0 }); + Stats.Add(new BaseStat(Stat.Accuracy) { FormulaType = StatFormula.Stat, Base = 5, Gain = 0, GainRate = 0F, Max = 0 }); + break; + #endregion + #region Taoist + case MirClass.Taoist: + Stats.Add(new BaseStat(Stat.HP) { FormulaType = StatFormula.Health, Base = 14, Gain = 6F, GainRate = 2.5F, Max = 0 }); + Stats.Add(new BaseStat(Stat.MP) { FormulaType = StatFormula.Mana, Base = 13, Gain = 8F, GainRate = 0F, Max = 0 }); + Stats.Add(new BaseStat(Stat.BagWeight) { FormulaType = StatFormula.Weight, Base = 50, Gain = 4F, GainRate = 0F, Max = 0 }); + Stats.Add(new BaseStat(Stat.WearWeight) { FormulaType = StatFormula.Weight, Base = 15, Gain = 50F, GainRate = 0F, Max = 0 }); + Stats.Add(new BaseStat(Stat.HandWeight) { FormulaType = StatFormula.Weight, Base = 12, Gain = 42F, GainRate = 0F, Max = 0 }); + Stats.Add(new BaseStat(Stat.MinMAC) { FormulaType = StatFormula.Stat, Base = 0, Gain = 12, GainRate = 0F, Max = 0 }); + Stats.Add(new BaseStat(Stat.MaxMAC) { FormulaType = StatFormula.Stat, Base = 0, Gain = 6, GainRate = 0F, Max = 0 }); + Stats.Add(new BaseStat(Stat.MinDC) { FormulaType = StatFormula.Stat, Base = 0, Gain = 7, GainRate = 0F, Max = 0 }); + Stats.Add(new BaseStat(Stat.MaxDC) { FormulaType = StatFormula.Stat, Base = 0, Gain = 7, GainRate = 0F, Max = 0 }); + Stats.Add(new BaseStat(Stat.MinSC) { FormulaType = StatFormula.Stat, Base = 0, Gain = 7, GainRate = 0F, Max = 0 }); + Stats.Add(new BaseStat(Stat.MaxSC) { FormulaType = StatFormula.Stat, Base = 0, Gain = 7, GainRate = 0F, Max = 0 }); + Stats.Add(new BaseStat(Stat.Agility) { FormulaType = StatFormula.Stat, Base = 18, Gain = 0, GainRate = 0F, Max = 0 }); + Stats.Add(new BaseStat(Stat.Accuracy) { FormulaType = StatFormula.Stat, Base = 5, Gain = 0, GainRate = 0F, Max = 0 }); + break; + #endregion + } + + Caps[Stat.MagicResist] = 2; + Caps[Stat.PoisonResist] = 6; + Caps[Stat.CriticalRate] = 18; + Caps[Stat.CriticalDamage] = 10; + Caps[Stat.Freezing] = 6; + Caps[Stat.PoisonAttack] = 6; + Caps[Stat.HealthRecovery] = 8; + Caps[Stat.SpellRecovery] = 8; + Caps[Stat.PoisonRecovery] = 6; + } + + public BaseStats(BinaryReader reader) + { + var count = reader.ReadInt32(); + + for (int i = 0; i < count; i++) + { + Stats.Add(new BaseStat((Stat)reader.ReadByte()) + { + FormulaType = (StatFormula)reader.ReadByte(), + Base = reader.ReadInt32(), + Gain = reader.ReadSingle(), + GainRate = reader.ReadSingle(), + Max = reader.ReadInt32() + }); + } + + Caps = new Stats(reader); + } + + public void Save(BinaryWriter writer) + { + writer.Write(Stats.Count); + + foreach (var stat in Stats) + { + writer.Write((byte)stat.Type); + writer.Write((byte)stat.FormulaType); + writer.Write(stat.Base); + writer.Write(stat.Gain); + writer.Write(stat.GainRate); + writer.Write(stat.Max); + } + + Caps.Save(writer); + } +} + +public class BaseStat +{ + public StatFormula FormulaType; + public Stat Type; + public int Base; + public float Gain; + public float GainRate; + public int Max; + + public BaseStat(Stat type) + { + Type = type; + } + + public int Calculate(MirClass job, int level) + { + if (Gain == 0) return Base; + + if (FormulaType == StatFormula.Health) + { + return job switch + { + MirClass.Warrior => (int)Math.Min(Max > 0 ? Max : int.MaxValue, Base + (level / Gain + GainRate + level / 20F) * level), + _ => (int)Math.Min(Max > 0 ? Max : int.MaxValue, Base + (level / Gain + GainRate) * level), + }; + } + else if (FormulaType == StatFormula.Mana) + { + return job switch + { + MirClass.Wizard => (int)Math.Min(Max > 0 ? Max : int.MaxValue, Base + ((level / Gain + 2F) * 2.2F * level) + (level * GainRate)), + MirClass.Taoist => (int)Math.Min(Max > 0 ? Max : int.MaxValue, (Base + level / Gain * 2.2F * level) + (level * GainRate)), + _ => (int)Math.Min(Max > 0 ? Max : int.MaxValue, Base + (level * Gain) + (level * GainRate)), + }; + } + else + { + return FormulaType switch + { + StatFormula.Weight => (int)Math.Min(Max > 0 ? Max : int.MaxValue, Base + ((level / Gain) * level)), + _ => (int)Math.Min(Max > 0 ? Max : int.MaxValue, Base + (level / Gain)), + }; + } + } +} \ No newline at end of file diff --git a/Shared/ClientPackets.cs b/Shared/ClientPackets.cs new file mode 100644 index 0000000..ab41578 --- /dev/null +++ b/Shared/ClientPackets.cs @@ -0,0 +1,1793 @@ +using System.Drawing; + +namespace ClientPackets +{ + public sealed class ClientVersion : Packet + { + public override short Index + { + get { return (short)ClientPacketIds.ClientVersion; } + } + + public byte[] VersionHash; + + protected override void ReadPacket(BinaryReader reader) + { + VersionHash = reader.ReadBytes(reader.ReadInt32()); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(VersionHash.Length); + writer.Write(VersionHash); + } + } + public sealed class Disconnect : Packet + { + public override short Index + { + get { return (short)ClientPacketIds.Disconnect; } + } + protected override void ReadPacket(BinaryReader reader) + { + } + protected override void WritePacket(BinaryWriter writer) + { + } + } + public sealed class KeepAlive : Packet + { + public override short Index + { + get { return (short)ClientPacketIds.KeepAlive; } + } + public long Time; + protected override void ReadPacket(BinaryReader reader) + { + Time = reader.ReadInt64(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Time); + } + } + public sealed class NewAccount: Packet + { + public override short Index + { + get { return (short)ClientPacketIds.NewAccount; } + } + + public string AccountID = string.Empty; + public string Password = string.Empty; + public MirGender Gender; + + protected override void ReadPacket(BinaryReader reader) + { + AccountID = reader.ReadString(); + Password = reader.ReadString(); + Gender = (MirGender)reader.ReadByte(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(AccountID); + writer.Write(Password); + writer.Write((byte)Gender); + } + } + public sealed class ChangePassword: Packet + { + public override short Index + { + get { return (short)ClientPacketIds.ChangePassword; } + } + + public string AccountID = string.Empty; + public string CurrentPassword = string.Empty; + public string NewPassword = string.Empty; + + protected override void ReadPacket(BinaryReader reader) + { + AccountID = reader.ReadString(); + CurrentPassword = reader.ReadString(); + NewPassword = reader.ReadString(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(AccountID); + writer.Write(CurrentPassword); + writer.Write(NewPassword); + } + } + public sealed class Login : Packet + { + public override short Index + { + get { return (short)ClientPacketIds.Login; } + } + + public string AccountID = string.Empty; + public string Password = string.Empty; + + protected override void ReadPacket(BinaryReader reader) + { + AccountID = reader.ReadString(); + Password = reader.ReadString(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(AccountID); + writer.Write(Password); + } + } + + public sealed class NewCharacter : Packet + { + public override short Index { get { return (short)ClientPacketIds.NewCharacter; } } + + public string Name = string.Empty; + public MirGender Gender; + public MirClass Class; + public byte Hair; + protected override void ReadPacket(BinaryReader reader) + { + Name = reader.ReadString(); + Gender = (MirGender)reader.ReadByte(); + Class = (MirClass)reader.ReadByte(); + Hair = reader.ReadByte(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Name); + writer.Write((byte)Gender); + writer.Write((byte)Class); + writer.Write(Hair); + } + } + + public sealed class DeleteCharacter : Packet + { + public override short Index { get { return (short)ClientPacketIds.DeleteCharacter; } } + + public int CharacterIndex; + + protected override void ReadPacket(BinaryReader reader) + { + CharacterIndex = reader.ReadInt32(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(CharacterIndex); + } + } + + public sealed class StartGame : Packet + { + public override short Index { get { return (short)ClientPacketIds.StartGame; } } + + public int CharacterIndex; + + protected override void ReadPacket(BinaryReader reader) + { + CharacterIndex = reader.ReadInt32(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(CharacterIndex); + } + } + public sealed class LogOut : Packet + { + public override short Index { get { return (short)ClientPacketIds.LogOut; } } + + protected override void ReadPacket(BinaryReader reader) + { + } + protected override void WritePacket(BinaryWriter writer) + { + } + } + + public sealed class Turn : Packet + { + public override short Index { get { return (short)ClientPacketIds.Turn; } } + + public MirDirection Direction; + + protected override void ReadPacket(BinaryReader reader) + { + Direction = (MirDirection)reader.ReadByte(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write((byte)Direction); + } + } + public sealed class Walk : Packet + { + public override short Index { get { return (short)ClientPacketIds.Walk; } } + + public MirDirection Direction; + protected override void ReadPacket(BinaryReader reader) + { + Direction = (MirDirection)reader.ReadByte(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write((byte)Direction); + } + } + public sealed class Chat : Packet + { + public override short Index { get { return (short)ClientPacketIds.Chat; } } + + public string Message = string.Empty; + public List LinkedItems = new List(); + + protected override void ReadPacket(BinaryReader reader) + { + Message = reader.ReadString(); + + int count = reader.ReadInt32(); + + for (int i = 0; i < count; i++) + LinkedItems.Add(new ChatItem(reader)); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Message); + + writer.Write(LinkedItems.Count); + + for (int i = 0; i < LinkedItems.Count; i++) + LinkedItems[i].Save(writer); + } + } + public sealed class MoveItem : Packet + { + public override short Index { get { return (short)ClientPacketIds.MoveItem; } } + + public MirGridType Grid; + public int From, To; + protected override void ReadPacket(BinaryReader reader) + { + Grid = (MirGridType)reader.ReadByte(); + From = reader.ReadInt32(); + To = reader.ReadInt32(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write((byte)Grid); + writer.Write(From); + writer.Write(To); + } + } + public sealed class StoreItem : Packet + { + public override short Index { get { return (short)ClientPacketIds.StoreItem; } } + + public int From, To; + protected override void ReadPacket(BinaryReader reader) + { + From = reader.ReadInt32(); + To = reader.ReadInt32(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(From); + writer.Write(To); + } + } + + public sealed class DepositRefineItem : Packet + { + + public override short Index { get { return (short)ClientPacketIds.DepositRefineItem; } } + + public int From, To; + protected override void ReadPacket(BinaryReader reader) + { + From = reader.ReadInt32(); + To = reader.ReadInt32(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(From); + writer.Write(To); + } + } + + public sealed class RetrieveRefineItem : Packet + { + public override short Index { get { return (short)ClientPacketIds.RetrieveRefineItem; } } + + public int From, To; + protected override void ReadPacket(BinaryReader reader) + { + From = reader.ReadInt32(); + To = reader.ReadInt32(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(From); + writer.Write(To); + } + } + + public sealed class RefineCancel : Packet + { + public override short Index { get { return (short)ClientPacketIds.RefineCancel; } } + + protected override void ReadPacket(BinaryReader reader) + { + } + protected override void WritePacket(BinaryWriter writer) + { + } + } + + public sealed class RefineItem : Packet + { + public override short Index { get { return (short)ClientPacketIds.RefineItem; } } + + public ulong UniqueID; + + protected override void ReadPacket(BinaryReader reader) + { + UniqueID = reader.ReadUInt64(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(UniqueID); + } + } + + public sealed class CheckRefine : Packet + { + public override short Index { get { return (short)ClientPacketIds.CheckRefine; } } + + public ulong UniqueID; + + protected override void ReadPacket(BinaryReader reader) + { + UniqueID = reader.ReadUInt64(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(UniqueID); + } + } + + public sealed class ReplaceWedRing : Packet + { + public override short Index { get { return (short)ClientPacketIds.ReplaceWedRing; } } + + public ulong UniqueID; + + protected override void ReadPacket(BinaryReader reader) + { + UniqueID = reader.ReadUInt64(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(UniqueID); + } + } + + + public sealed class DepositTradeItem : Packet + { + public override short Index { get { return (short)ClientPacketIds.DepositTradeItem; } } + + public int From, To; + protected override void ReadPacket(BinaryReader reader) + { + From = reader.ReadInt32(); + To = reader.ReadInt32(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(From); + writer.Write(To); + } + } + + public sealed class RetrieveTradeItem : Packet + { + public override short Index { get { return (short)ClientPacketIds.RetrieveTradeItem; } } + + public int From, To; + protected override void ReadPacket(BinaryReader reader) + { + From = reader.ReadInt32(); + To = reader.ReadInt32(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(From); + writer.Write(To); + } + } + public sealed class TakeBackItem : Packet + { + public override short Index { get { return (short)ClientPacketIds.TakeBackItem; } } + + public int From, To; + protected override void ReadPacket(BinaryReader reader) + { + From = reader.ReadInt32(); + To = reader.ReadInt32(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(From); + writer.Write(To); + } + } + public sealed class MergeItem : Packet + { + public override short Index { get { return (short)ClientPacketIds.MergeItem; } } + + public MirGridType GridFrom, GridTo; + public ulong IDFrom, IDTo; + protected override void ReadPacket(BinaryReader reader) + { + GridFrom = (MirGridType)reader.ReadByte(); + GridTo = (MirGridType)reader.ReadByte(); + IDFrom = reader.ReadUInt64(); + IDTo = reader.ReadUInt64(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write((byte)GridFrom); + writer.Write((byte)GridTo); + writer.Write(IDFrom); + writer.Write(IDTo); + } + } + public sealed class EquipItem : Packet + { + public override short Index { get { return (short)ClientPacketIds.EquipItem; } } + + public MirGridType Grid; + public ulong UniqueID; + public int To; + + protected override void ReadPacket(BinaryReader reader) + { + Grid = (MirGridType)reader.ReadByte(); + UniqueID = reader.ReadUInt64(); + To = reader.ReadInt32(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write((byte)Grid); + writer.Write(UniqueID); + writer.Write(To); + } + } + public sealed class RemoveItem : Packet + { + public override short Index { get { return (short)ClientPacketIds.RemoveItem; } } + + public MirGridType Grid; + public ulong UniqueID; + public int To; + + protected override void ReadPacket(BinaryReader reader) + { + Grid = (MirGridType)reader.ReadByte(); + UniqueID = reader.ReadUInt64(); + To = reader.ReadInt32(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write((byte)Grid); + writer.Write(UniqueID); + writer.Write(To); + } + } + public sealed class SplitItem : Packet + { + public override short Index { get { return (short)ClientPacketIds.SplitItem; } } + + public MirGridType Grid; + public ulong UniqueID; + public ushort Count; + + protected override void ReadPacket(BinaryReader reader) + { + Grid = (MirGridType)reader.ReadByte(); + UniqueID = reader.ReadUInt64(); + Count = reader.ReadUInt16(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write((byte)Grid); + writer.Write(UniqueID); + writer.Write(Count); + } + } + public sealed class UseItem : Packet + { + public override short Index { get { return (short)ClientPacketIds.UseItem; } } + + public ulong UniqueID; + public MirGridType Grid; + protected override void ReadPacket(BinaryReader reader) + { + UniqueID = reader.ReadUInt64(); + Grid = (MirGridType)reader.ReadByte(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(UniqueID); + writer.Write((byte)Grid); + } + } + public sealed class DropItem : Packet + { + public override short Index { get { return (short)ClientPacketIds.DropItem; } } + + public ulong UniqueID; + public ushort Count; + + protected override void ReadPacket(BinaryReader reader) + { + UniqueID = reader.ReadUInt64(); + Count = reader.ReadUInt16(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(UniqueID); + writer.Write(Count); + } + } + public sealed class DropGold : Packet + { + public override short Index { get { return (short)ClientPacketIds.DropGold; } } + + public uint Amount; + + protected override void ReadPacket(BinaryReader reader) + { + Amount = reader.ReadUInt32(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Amount); + } + } + public sealed class PickUp : Packet + { + public override short Index { get { return (short)ClientPacketIds.PickUp; } } + + protected override void ReadPacket(BinaryReader reader) + { + } + protected override void WritePacket(BinaryWriter writer) + { + } + } + public sealed class Observe : Packet + { + public override short Index + { + get { return (short)ClientPacketIds.Observe; } + } + + public string Name; + + protected override void ReadPacket(BinaryReader reader) + { + Name = reader.ReadString(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Name); + } + } + public sealed class ChangeAMode : Packet + { + public override short Index { get { return (short)ClientPacketIds.ChangeAMode; } } + + public AttackMode Mode; + + protected override void ReadPacket(BinaryReader reader) + { + Mode = (AttackMode)reader.ReadByte(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write((byte)Mode); + } + } + public sealed class ChangePMode : Packet + { + public override short Index { get { return (short)ClientPacketIds.ChangePMode; } } + + public PetMode Mode; + + protected override void ReadPacket(BinaryReader reader) + { + Mode = (PetMode)reader.ReadByte(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write((byte)Mode); + } + } + public sealed class ChangeTrade : Packet + { + public override short Index { get { return (short)ClientPacketIds.ChangeTrade; } } + + public bool AllowTrade; + + protected override void ReadPacket(BinaryReader reader) + { + AllowTrade = reader.ReadBoolean(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(AllowTrade); + } + } + public sealed class Attack : Packet + { + public override short Index { get { return (short)ClientPacketIds.Attack; } } + + public MirDirection Direction; + public Spell Spell; + + protected override void ReadPacket(BinaryReader reader) + { + Direction = (MirDirection) reader.ReadByte(); + Spell = (Spell) reader.ReadByte(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write((byte)Direction); + writer.Write((byte)Spell); + } + } + public sealed class RangeAttack : Packet //ArcherTest + { + public override short Index { get { return (short)ClientPacketIds.RangeAttack; } } + + public MirDirection Direction; + public Point Location; + public uint TargetID; + public Point TargetLocation; + + protected override void ReadPacket(BinaryReader reader) + { + Direction = (MirDirection)reader.ReadByte(); + Location = new Point(reader.ReadInt32(), reader.ReadInt32()); + TargetID = reader.ReadUInt32(); + TargetLocation = new Point(reader.ReadInt32(), reader.ReadInt32()); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write((byte)Direction); + writer.Write(Location.X); + writer.Write(Location.Y); + writer.Write(TargetID); + writer.Write(TargetLocation.X); + writer.Write(TargetLocation.Y); + } + } + public sealed class Harvest : Packet + { + public override short Index { get { return (short)ClientPacketIds.Harvest; } } + + public MirDirection Direction; + protected override void ReadPacket(BinaryReader reader) + { + Direction = (MirDirection)reader.ReadByte(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write((byte)Direction); + } + } + public sealed class CallNPC : Packet + { + public override short Index { get { return (short)ClientPacketIds.CallNPC; } } + + public uint ObjectID; + public string Key = string.Empty; + + protected override void ReadPacket(BinaryReader reader) + { + ObjectID = reader.ReadUInt32(); + Key = reader.ReadString(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(ObjectID); + writer.Write(Key); + } + } + public sealed class BuyItem : Packet + { + public override short Index { get { return (short)ClientPacketIds.BuyItem; } } + + public ulong ItemIndex; + public ushort Count; + public PanelType Type; + + protected override void ReadPacket(BinaryReader reader) + { + ItemIndex = reader.ReadUInt64(); + Count = reader.ReadUInt16(); + Type = (PanelType)reader.ReadByte(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(ItemIndex); + writer.Write(Count); + writer.Write((byte)Type); + } + } + public sealed class SellItem : Packet + { + public override short Index { get { return (short)ClientPacketIds.SellItem; } } + + public ulong UniqueID; + public ushort Count; + + protected override void ReadPacket(BinaryReader reader) + { + UniqueID = reader.ReadUInt64(); + Count = reader.ReadUInt16(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(UniqueID); + writer.Write(Count); + } + } + public sealed class RepairItem : Packet + { + public override short Index { get { return (short)ClientPacketIds.RepairItem; } } + + public ulong UniqueID; + + protected override void ReadPacket(BinaryReader reader) + { + UniqueID = reader.ReadUInt64(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(UniqueID); + } + } + public sealed class BuyItemBack : Packet + { + public override short Index { get { return (short)ClientPacketIds.BuyItemBack; } } + + public ulong UniqueID; + public ushort Count; + + protected override void ReadPacket(BinaryReader reader) + { + UniqueID = reader.ReadUInt64(); + Count = reader.ReadUInt16(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(UniqueID); + writer.Write(Count); + } + } + public sealed class SRepairItem : Packet + { + public override short Index { get { return (short)ClientPacketIds.SRepairItem; } } + + public ulong UniqueID; + + protected override void ReadPacket(BinaryReader reader) + { + UniqueID = reader.ReadUInt64(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(UniqueID); + } + } + public sealed class MagicKey : Packet + { + public override short Index { get { return (short)ClientPacketIds.MagicKey; } } + + public Spell Spell; + public byte Key, OldKey; + + protected override void ReadPacket(BinaryReader reader) + { + Spell = (Spell) reader.ReadByte(); + Key = reader.ReadByte(); + OldKey = reader.ReadByte(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write((byte) Spell); + writer.Write(Key); + writer.Write(OldKey); + } + } + public sealed class Magic : Packet + { + public override short Index { get { return (short)ClientPacketIds.Magic; } } + + public Spell Spell; + public MirDirection Direction; + public uint TargetID; + public Point Location; + public uint ObjectID; + public bool SpellTargetLock; + + protected override void ReadPacket(BinaryReader reader) + { + ObjectID = reader.ReadUInt32(); + Spell = (Spell) reader.ReadByte(); + Direction = (MirDirection)reader.ReadByte(); + TargetID = reader.ReadUInt32(); + Location = new Point(reader.ReadInt32(), reader.ReadInt32()); + SpellTargetLock = reader.ReadBoolean(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(ObjectID); + writer.Write((byte) Spell); + writer.Write((byte)Direction); + writer.Write(TargetID); + writer.Write(Location.X); + writer.Write(Location.Y); + writer.Write(SpellTargetLock); + } + } + + public sealed class SwitchGroup : Packet + { + public override short Index { get { return (short)ClientPacketIds.SwitchGroup; } } + + public bool AllowGroup; + protected override void ReadPacket(BinaryReader reader) + { + AllowGroup = reader.ReadBoolean(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(AllowGroup); + } + } + public sealed class AddMember : Packet + { + public override short Index { get { return (short)ClientPacketIds.AddMember; } } + + public string Name = string.Empty; + protected override void ReadPacket(BinaryReader reader) + { + Name = reader.ReadString(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Name); + } + } + public sealed class DelMember : Packet + { + public override short Index { get { return (short)ClientPacketIds.DellMember; } } + + public string Name = string.Empty; + protected override void ReadPacket(BinaryReader reader) + { + Name = reader.ReadString(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Name); + } + } + public sealed class GroupInvite : Packet + { + public override short Index { get { return (short)ClientPacketIds.GroupInvite; } } + + public bool AcceptInvite; + protected override void ReadPacket(BinaryReader reader) + { + AcceptInvite = reader.ReadBoolean(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(AcceptInvite); + } + } + + public sealed class MarriageRequest : Packet + { + public override short Index { get { return (short)ClientPacketIds.MarriageRequest; } } + + protected override void ReadPacket(BinaryReader reader) + { + } + protected override void WritePacket(BinaryWriter writer) + { + } + } + + public sealed class MarriageReply : Packet + { + public override short Index { get { return (short)ClientPacketIds.MarriageReply; } } + + public bool AcceptInvite; + protected override void ReadPacket(BinaryReader reader) + { + AcceptInvite = reader.ReadBoolean(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(AcceptInvite); + } + } + + public sealed class ChangeMarriage : Packet + { + public override short Index { get { return (short)ClientPacketIds.ChangeMarriage; } } + + protected override void ReadPacket(BinaryReader reader) + { + } + protected override void WritePacket(BinaryWriter writer) + { + } + } + + public sealed class DivorceRequest : Packet + { + public override short Index { get { return (short)ClientPacketIds.DivorceRequest; } } + + protected override void ReadPacket(BinaryReader reader) + { + } + protected override void WritePacket(BinaryWriter writer) + { + } + } + + public sealed class DivorceReply : Packet + { + public override short Index { get { return (short)ClientPacketIds.DivorceReply; } } + + public bool AcceptInvite; + protected override void ReadPacket(BinaryReader reader) + { + AcceptInvite = reader.ReadBoolean(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(AcceptInvite); + } + } + + public sealed class TradeReply : Packet + { + public override short Index { get { return (short)ClientPacketIds.TradeReply; } } + + public bool AcceptInvite; + protected override void ReadPacket(BinaryReader reader) + { + AcceptInvite = reader.ReadBoolean(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(AcceptInvite); + } + } + public sealed class TradeRequest : Packet + { + public override short Index { get { return (short)ClientPacketIds.TradeRequest; } } + + protected override void ReadPacket(BinaryReader reader) + { } + + protected override void WritePacket(BinaryWriter writer) + { } + } + + public sealed class TradeGold : Packet + { + public override short Index { get { return (short)ClientPacketIds.TradeGold; } } + + public uint Amount; + protected override void ReadPacket(BinaryReader reader) + { + Amount = reader.ReadUInt32(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Amount); + } + } + public sealed class TradeConfirm : Packet + { + public override short Index { get { return (short)ClientPacketIds.TradeConfirm; } } + + public bool Locked; + protected override void ReadPacket(BinaryReader reader) + { + Locked = reader.ReadBoolean(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Locked); + } + } + public sealed class TradeCancel : Packet + { + public override short Index { get { return (short)ClientPacketIds.TradeCancel; } } + + protected override void ReadPacket(BinaryReader reader) + { + } + protected override void WritePacket(BinaryWriter writer) + { + } + } + public sealed class TownRevive : Packet + { + public override short Index { get { return (short)ClientPacketIds.TownRevive; } } + + protected override void ReadPacket(BinaryReader reader) + { + } + protected override void WritePacket(BinaryWriter writer) + { + } + } + public sealed class SpellToggle : Packet + { + public override short Index { get { return (short)ClientPacketIds.SpellToggle; } } + public Spell Spell; + public SpellToggleState canUse = SpellToggleState.None; + public bool CanUse + { + get { return Convert.ToBoolean(canUse); } + set + { + canUse = (SpellToggleState)Convert.ToSByte(value); + } + } + + protected override void ReadPacket(BinaryReader reader) + { + Spell = (Spell)reader.ReadByte(); + canUse = (SpellToggleState)reader.ReadSByte(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write((byte)Spell); + writer.Write((sbyte)canUse); + } + } + public sealed class ConsignItem : Packet + { + public override short Index { get { return (short)ClientPacketIds.ConsignItem; } } + + public ulong UniqueID; + public uint Price; + public MarketPanelType Type; + + protected override void ReadPacket(BinaryReader reader) + { + UniqueID = reader.ReadUInt64(); + Price = reader.ReadUInt32(); + Type = (MarketPanelType)reader.ReadByte(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(UniqueID); + writer.Write(Price); + writer.Write((byte)Type); + } + } + public sealed class MarketSearch : Packet + { + public override short Index { get { return (short)ClientPacketIds.MarketSearch; } } + + public string Match = string.Empty; + public ItemType Type = 0; + public bool Usermode = false; + public short MinShape = 0, MaxShape = 5000; + public MarketPanelType MarketType = MarketPanelType.Market; + + protected override void ReadPacket(BinaryReader reader) + { + Match = reader.ReadString(); + Type = (ItemType)reader.ReadByte(); + Usermode = reader.ReadBoolean(); + MinShape = reader.ReadInt16(); + MaxShape = reader.ReadInt16(); + MarketType = (MarketPanelType)reader.ReadByte(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Match); + writer.Write((Byte)Type); + writer.Write(Usermode); + writer.Write(MinShape); + writer.Write(MaxShape); + writer.Write((byte)MarketType); + } + } + public sealed class MarketRefresh : Packet + { + public override short Index { get { return (short)ClientPacketIds.MarketRefresh; } } + + protected override void ReadPacket(BinaryReader reader) + { + } + protected override void WritePacket(BinaryWriter writer) + { + } + } + public sealed class MarketPage : Packet + { + public override short Index { get { return (short)ClientPacketIds.MarketPage; } } + public int Page; + + protected override void ReadPacket(BinaryReader reader) + { + Page = reader.ReadInt32(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Page); + } + } + public sealed class MarketBuy : Packet + { + public override short Index { get { return (short)ClientPacketIds.MarketBuy; } } + + public ulong AuctionID; + public uint BidPrice; + + protected override void ReadPacket(BinaryReader reader) + { + AuctionID = reader.ReadUInt64(); + BidPrice = reader.ReadUInt32(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(AuctionID); + writer.Write(BidPrice); + } + } + public sealed class MarketSellNow : Packet + { + public override short Index { get { return (short)ClientPacketIds.MarketSellNow; } } + + public ulong AuctionID; + + protected override void ReadPacket(BinaryReader reader) + { + AuctionID = reader.ReadUInt64(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(AuctionID); + } + } + public sealed class MarketGetBack : Packet + { + public override short Index { get { return (short)ClientPacketIds.MarketGetBack; } } + + public ulong AuctionID; + + protected override void ReadPacket(BinaryReader reader) + { + AuctionID = reader.ReadUInt64(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(AuctionID); + } + } + public sealed class RequestUserName : Packet + { + public override short Index { get { return (short)ClientPacketIds.RequestUserName; } } + + public uint UserID; + + protected override void ReadPacket(BinaryReader reader) + { + UserID = reader.ReadUInt32(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(UserID); + } + } + public sealed class RequestChatItem : Packet + { + public override short Index { get { return (short)ClientPacketIds.RequestChatItem; } } + + public ulong ChatItemID; + + protected override void ReadPacket(BinaryReader reader) + { + ChatItemID = reader.ReadUInt64(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(ChatItemID); + } + } + public sealed class EditGuildMember : Packet + { + public override short Index { get { return (short)ClientPacketIds.EditGuildMember; } } + + public byte ChangeType = 0; + public byte RankIndex = 0; + public string Name = ""; + public string RankName = ""; + + protected override void ReadPacket(BinaryReader reader) + { + ChangeType = reader.ReadByte(); + RankIndex = reader.ReadByte(); + Name = reader.ReadString(); + RankName = reader.ReadString(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(ChangeType); + writer.Write(RankIndex); + writer.Write(Name); + writer.Write(RankName); + } + } + public sealed class EditGuildNotice : Packet + { + public override short Index { get { return (short)ClientPacketIds.EditGuildNotice; } } + + public List notice = new List(); + + protected override void ReadPacket(BinaryReader reader) + { + int LineCount = reader.ReadInt32(); + for (int i = 0; i < LineCount; i++) + notice.Add(reader.ReadString()); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(notice.Count); + for (int i = 0; i < notice.Count; i++) + writer.Write(notice[i]); + } + } + public sealed class GuildInvite : Packet + { + public override short Index { get { return (short)ClientPacketIds.GuildInvite; } } + + public bool AcceptInvite; + protected override void ReadPacket(BinaryReader reader) + { + AcceptInvite = reader.ReadBoolean(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(AcceptInvite); + } + } + public sealed class RequestGuildInfo : Packet + { + public override short Index { get { return (short)ClientPacketIds.RequestGuildInfo; } } + + public byte Type; + + protected override void ReadPacket(BinaryReader reader) + { + Type = reader.ReadByte(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Type); + } + } + public sealed class GuildNameReturn : Packet + { + public override short Index { get { return (short)ClientPacketIds.GuildNameReturn; } } + + public string Name; + + protected override void ReadPacket(BinaryReader reader) + { + Name = reader.ReadString(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Name); + } + } + public sealed class GuildWarReturn : Packet + { + public override short Index { get { return (short)ClientPacketIds.GuildWarReturn; } } + + public string Name; + + protected override void ReadPacket(BinaryReader reader) + { + Name = reader.ReadString(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Name); + } + } + public sealed class GuildStorageGoldChange: Packet + { + public override short Index { get { return (short)ClientPacketIds.GuildStorageGoldChange; } } + + public byte Type = 0; + public uint Amount = 0; + + protected override void ReadPacket(BinaryReader reader) + { + Type = reader.ReadByte(); + Amount = reader.ReadUInt32(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Type); + writer.Write(Amount); + } + } + public sealed class GuildStorageItemChange: Packet + { + public override short Index { get { return (short)ClientPacketIds.GuildStorageItemChange; } } + + public byte Type = 0; + public int From, To; + protected override void ReadPacket(BinaryReader reader) + { + Type = reader.ReadByte(); + From = reader.ReadInt32(); + To = reader.ReadInt32(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Type); + writer.Write(From); + writer.Write(To); + } + } + + public sealed class AcceptQuest : Packet + { + public override short Index { get { return (short)ClientPacketIds.AcceptQuest; } } + + public uint NPCIndex; + public int QuestIndex; + + protected override void ReadPacket(BinaryReader reader) + { + NPCIndex = reader.ReadUInt32(); + QuestIndex = reader.ReadInt32(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(NPCIndex); + writer.Write(QuestIndex); + } + } + + public sealed class FinishQuest : Packet + { + public override short Index { get { return (short)ClientPacketIds.FinishQuest; } } + + public int QuestIndex; + public int SelectedItemIndex; + + protected override void ReadPacket(BinaryReader reader) + { + QuestIndex = reader.ReadInt32(); + SelectedItemIndex = reader.ReadInt32(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(QuestIndex); + writer.Write(SelectedItemIndex); + } + } + + public sealed class AbandonQuest : Packet + { + public override short Index { get { return (short)ClientPacketIds.AbandonQuest; } } + + public int QuestIndex; + + protected override void ReadPacket(BinaryReader reader) + { + QuestIndex = reader.ReadInt32(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(QuestIndex); + } + } + + public sealed class ShareQuest : Packet + { + public override short Index { get { return (short)ClientPacketIds.ShareQuest; } } + + public int QuestIndex; + + protected override void ReadPacket(BinaryReader reader) + { + QuestIndex = reader.ReadInt32(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(QuestIndex); + } + } + + public sealed class CombineItem : Packet + { + public override short Index { get { return (short)ClientPacketIds.CombineItem; } } + + public MirGridType Grid; + public ulong IDFrom, IDTo; + protected override void ReadPacket(BinaryReader reader) + { + Grid = (MirGridType)reader.ReadByte(); + IDFrom = reader.ReadUInt64(); + IDTo = reader.ReadUInt64(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write((byte)Grid); + writer.Write(IDFrom); + writer.Write(IDTo); + } + } + + public sealed class SendMail : Packet + { + public override short Index { get { return (short)ClientPacketIds.SendMail; } } + + public string Name; + public string Message; + public uint Gold; + public ulong[] ItemsIdx = new ulong[5]; + public bool Stamped; + + protected override void ReadPacket(BinaryReader reader) + { + Name = reader.ReadString(); + Message = reader.ReadString(); + Gold = reader.ReadUInt32(); + + for (int i = 0; i < 5; i++) + { + ItemsIdx[i] = reader.ReadUInt64(); + } + + Stamped = reader.ReadBoolean(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Name); + writer.Write(Message); + writer.Write(Gold); + + for (int i = 0; i < 5; i++) + { + writer.Write(ItemsIdx[i]); + } + + writer.Write(Stamped); + } + } + + public sealed class ReadMail : Packet + { + public override short Index { get { return (short)ClientPacketIds.ReadMail; } } + + public ulong MailID; + + protected override void ReadPacket(BinaryReader reader) + { + MailID = reader.ReadUInt64(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(MailID); + } + } + + public sealed class CollectParcel : Packet + { + public override short Index { get { return (short)ClientPacketIds.CollectParcel; } } + + public ulong MailID; + + protected override void ReadPacket(BinaryReader reader) + { + MailID = reader.ReadUInt64(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(MailID); + } + } + + public sealed class DeleteMail : Packet + { + public override short Index { get { return (short)ClientPacketIds.DeleteMail; } } + + public ulong MailID; + + protected override void ReadPacket(BinaryReader reader) + { + MailID = reader.ReadUInt64(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(MailID); + } + } + + public sealed class LockMail : Packet + { + public override short Index { get { return (short)ClientPacketIds.LockMail; } } + + public ulong MailID; + public bool Lock; + + protected override void ReadPacket(BinaryReader reader) + { + MailID = reader.ReadUInt64(); + Lock = reader.ReadBoolean(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(MailID); + writer.Write(Lock); + } + } + + public sealed class MailLockedItem : Packet + { + public override short Index { get { return (short)ClientPacketIds.MailLockedItem; } } + + public ulong UniqueID; + public bool Locked; + + protected override void ReadPacket(BinaryReader reader) + { + UniqueID = reader.ReadUInt64(); + Locked = reader.ReadBoolean(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(UniqueID); + writer.Write(Locked); + } + } + + public sealed class MailCost : Packet + { + public override short Index { get { return (short)ClientPacketIds.MailCost; } } + + public uint Gold; + public ulong[] ItemsIdx = new ulong[5]; + public bool Stamped; + + protected override void ReadPacket(BinaryReader reader) + { + Gold = reader.ReadUInt32(); + + for (int i = 0; i < 5; i++) + { + ItemsIdx[i] = reader.ReadUInt64(); + } + + Stamped = reader.ReadBoolean(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Gold); + + for (int i = 0; i < 5; i++) + { + writer.Write(ItemsIdx[i]); + } + + writer.Write(Stamped); + } + } + + public sealed class AddFriend : Packet + { + public override short Index { get { return (short)ClientPacketIds.AddFriend; } } + + public string Name; + public bool Blocked; + + protected override void ReadPacket(BinaryReader reader) + { + Name = reader.ReadString(); + Blocked = reader.ReadBoolean(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Name); + writer.Write(Blocked); + } + } + + public sealed class RemoveFriend : Packet + { + public override short Index { get { return (short)ClientPacketIds.RemoveFriend; } } + + public int CharacterIndex; + + protected override void ReadPacket(BinaryReader reader) + { + CharacterIndex = reader.ReadInt32(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(CharacterIndex); + } + } + + public sealed class RefreshFriends : Packet + { + public override short Index { get { return (short)ClientPacketIds.RefreshFriends; } } + + protected override void ReadPacket(BinaryReader reader) + { + } + + protected override void WritePacket(BinaryWriter writer) + { + } + } + + + public sealed class AddMemo : Packet + { + public override short Index { get { return (short)ClientPacketIds.AddMemo; } } + + public int CharacterIndex; + public string Memo; + + protected override void ReadPacket(BinaryReader reader) + { + CharacterIndex = reader.ReadInt32(); + Memo = reader.ReadString(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(CharacterIndex); + writer.Write(Memo); + } + } + + public sealed class GuildBuffUpdate : Packet + { + public override short Index { get { return (short)ClientPacketIds.GuildBuffUpdate; } } + + public byte Action = 0; //0 = request list, 1 = request a buff to be enabled, 2 = request a buff to be activated + public int Id; + + protected override void ReadPacket(BinaryReader reader) + { + Action = reader.ReadByte(); + Id = reader.ReadInt32(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Action); + writer.Write(Id); + } + } + + public sealed class GameshopBuy : Packet + { + public override short Index { get { return (short)ClientPacketIds.GameshopBuy; } } + + public int GIndex; + public byte Quantity; + public int PType; + + protected override void ReadPacket(BinaryReader reader) + { + GIndex = reader.ReadInt32(); + Quantity = reader.ReadByte(); + PType = reader.ReadInt32(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(GIndex); + writer.Write(Quantity); + writer.Write(PType); + } + } + + public sealed class NPCConfirmInput : Packet + { + public override short Index { get { return (short)ClientPacketIds.NPCConfirmInput; } } + + public uint NPCID; + public string PageName; + public string Value; + + protected override void ReadPacket(BinaryReader reader) + { + NPCID = reader.ReadUInt32(); + PageName = reader.ReadString(); + Value = reader.ReadString(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(NPCID); + writer.Write(PageName); + writer.Write(Value); + } + } + + public sealed class ReportIssue : Packet + { + public override short Index { get { return (short)ClientPacketIds.ReportIssue; } } + + public byte[] Image; + public int ImageSize; + public int ImageChunk; + + public string Message; + + protected override void ReadPacket(BinaryReader reader) + { + Image = reader.ReadBytes(reader.ReadInt32()); + ImageSize = reader.ReadInt32(); + ImageChunk = reader.ReadInt32(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Image.Length); + writer.Write(Image); + writer.Write(ImageSize); + writer.Write(ImageChunk); + } + } + public sealed class GetRanking : Packet + { + public override short Index { get { return (short)ClientPacketIds.GetRanking; } } + public byte RankType; + public int RankIndex; + public bool OnlineOnly; + + protected override void ReadPacket(BinaryReader reader) + { + RankType = reader.ReadByte(); + RankIndex = reader.ReadInt32(); + OnlineOnly = reader.ReadBoolean(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(RankType); + writer.Write(RankIndex); + writer.Write(OnlineOnly); + } + } +} diff --git a/Shared/Data/ClientData.cs b/Shared/Data/ClientData.cs new file mode 100644 index 0000000..4513241 --- /dev/null +++ b/Shared/Data/ClientData.cs @@ -0,0 +1,557 @@ +using System.Drawing; + +public class ClientMagic +{ + public string Name; + public Spell Spell; + public byte BaseCost, LevelCost, Icon; + public byte Level1, Level2, Level3; + public ushort Need1, Need2, Need3; + + public byte Level, Key, Range; + public ushort Experience; + + public bool IsTempSpell; + public long CastTime, Delay; + + public ClientMagic() { } + + public ClientMagic(BinaryReader reader) + { + Name = reader.ReadString(); + Spell = (Spell)reader.ReadByte(); + + BaseCost = reader.ReadByte(); + LevelCost = reader.ReadByte(); + Icon = reader.ReadByte(); + Level1 = reader.ReadByte(); + Level2 = reader.ReadByte(); + Level3 = reader.ReadByte(); + Need1 = reader.ReadUInt16(); + Need2 = reader.ReadUInt16(); + Need3 = reader.ReadUInt16(); + + Level = reader.ReadByte(); + Key = reader.ReadByte(); + Experience = reader.ReadUInt16(); + + Delay = reader.ReadInt64(); + + Range = reader.ReadByte(); + CastTime = reader.ReadInt64(); + } + + public void Save(BinaryWriter writer) + { + writer.Write(Name); + writer.Write((byte)Spell); + + writer.Write(BaseCost); + writer.Write(LevelCost); + writer.Write(Icon); + writer.Write(Level1); + writer.Write(Level2); + writer.Write(Level3); + writer.Write(Need1); + writer.Write(Need2); + writer.Write(Need3); + + writer.Write(Level); + writer.Write(Key); + writer.Write(Experience); + + writer.Write(Delay); + + writer.Write(Range); + writer.Write(CastTime); + } + +} + +public class ClientFriend +{ + public int Index; + public string Name; + public string Memo = ""; + public bool Blocked; + + public bool Online; + + public ClientFriend() { } + + public ClientFriend(BinaryReader reader) + { + Index = reader.ReadInt32(); + Name = reader.ReadString(); + Memo = reader.ReadString(); + Blocked = reader.ReadBoolean(); + + Online = reader.ReadBoolean(); + } + + public void Save(BinaryWriter writer) + { + writer.Write(Index); + writer.Write(Name); + writer.Write(Memo); + writer.Write(Blocked); + + writer.Write(Online); + } +} + +public class ClientMail +{ + public ulong MailID; + public string SenderName; + public string Message; + public bool Opened, Locked, CanReply, Collected; + + public DateTime DateSent; + + public uint Gold; + public List Items = new List(); + + public ClientMail() { } + + public ClientMail(BinaryReader reader) + { + MailID = reader.ReadUInt64(); + SenderName = reader.ReadString(); + Message = reader.ReadString(); + Opened = reader.ReadBoolean(); + Locked = reader.ReadBoolean(); + CanReply = reader.ReadBoolean(); + Collected = reader.ReadBoolean(); + + DateSent = DateTime.FromBinary(reader.ReadInt64()); + + Gold = reader.ReadUInt32(); + int count = reader.ReadInt32(); + + for (int i = 0; i < count; i++) + Items.Add(new UserItem(reader)); + } + + public void Save(BinaryWriter writer) + { + writer.Write(MailID); + writer.Write(SenderName); + writer.Write(Message); + writer.Write(Opened); + writer.Write(Locked); + writer.Write(CanReply); + writer.Write(Collected); + + writer.Write(DateSent.ToBinary()); + + writer.Write(Gold); + writer.Write(Items.Count); + + for (int i = 0; i < Items.Count; i++) + Items[i].Save(writer); + } +} + +public class ClientAuction +{ + public ulong AuctionID; + public UserItem Item; + public string Seller = string.Empty; + public uint Price; + public DateTime ConsignmentDate = DateTime.MinValue; + public MarketItemType ItemType; + + public ClientAuction() { } + + public ClientAuction(BinaryReader reader) + { + AuctionID = reader.ReadUInt64(); + Item = new UserItem(reader); + Seller = reader.ReadString(); + Price = reader.ReadUInt32(); + ConsignmentDate = DateTime.FromBinary(reader.ReadInt64()); + ItemType = (MarketItemType)reader.ReadByte(); + } + public void Save(BinaryWriter writer) + { + writer.Write(AuctionID); + Item.Save(writer); + writer.Write(Seller); + writer.Write(Price); + writer.Write(ConsignmentDate.ToBinary()); + writer.Write((byte)ItemType); + } +} + +public class ClientMovementInfo +{ + public int Destination; + public string Title; + public Point Location; + public int Icon; + + public ClientMovementInfo() { } + + public ClientMovementInfo(BinaryReader reader) + { + Destination = reader.ReadInt32(); + Title = reader.ReadString(); + Location = new Point(reader.ReadInt32(), reader.ReadInt32()); + Icon = reader.ReadInt32(); + } + + public void Save(BinaryWriter writer) + { + writer.Write(Destination); + writer.Write(Title); + writer.Write(Location.X); + writer.Write(Location.Y); + writer.Write(Icon); + } +} + +public class ClientNPCInfo +{ + public uint ObjectID; + public string Name; + public Point Location; + public int Icon; + public bool CanTeleportTo; + + public ClientNPCInfo() { } + + public ClientNPCInfo(BinaryReader reader) + { + ObjectID = reader.ReadUInt32(); + Name = reader.ReadString(); + Location = new Point(reader.ReadInt32(), reader.ReadInt32()); + Icon = reader.ReadInt32(); + CanTeleportTo = reader.ReadBoolean(); + } + + public void Save(BinaryWriter writer) + { + writer.Write(ObjectID); + writer.Write(Name); + writer.Write(Location.X); + writer.Write(Location.Y); + writer.Write(Icon); + writer.Write(CanTeleportTo); + } +} + +public class ClientMapInfo +{ + public int Width; + public int Height; + public int BigMap; + public string Title; + public List Movements = new List(); + public List NPCs = new List(); + + public ClientMapInfo() { } + + public ClientMapInfo(BinaryReader reader) + { + Title = reader.ReadString(); + Width = reader.ReadInt32(); + Height = reader.ReadInt32(); + BigMap = reader.ReadInt32(); + var count = reader.ReadInt32(); + for (int i = 0; i < count; i++) + Movements.Add(new ClientMovementInfo(reader)); + count = reader.ReadInt32(); + for (int i = 0; i < count; i++) + NPCs.Add(new ClientNPCInfo(reader)); + } + + public void Save(BinaryWriter writer) + { + writer.Write(Title); + writer.Write(Width); + writer.Write(Height); + writer.Write(BigMap); + writer.Write(Movements.Count); + for (int i = 0; i < Movements.Count; i++) + Movements[i].Save(writer); + writer.Write(NPCs.Count); + for (int i = 0; i < NPCs.Count; i++) + NPCs[i].Save(writer); + } +} + +public class ClientQuestInfo +{ + public int Index; + + public uint NPCIndex; + + public string Name, Group; + public List Description = new List(); + public List TaskDescription = new List(); + public List ReturnDescription = new List(); + public List CompletionDescription = new List(); + + public int MinLevelNeeded, MaxLevelNeeded; + public int QuestNeeded; + public RequiredClass ClassNeeded; + + public QuestType Type; + + public int TimeLimitInSeconds = 0; + + public uint RewardGold; + public uint RewardExp; + public uint RewardCredit; + public List RewardsFixedItem = new List(); + public List RewardsSelectItem = new List(); + + public uint FinishNPCIndex; + + public bool SameFinishNPC + { + get { return NPCIndex == FinishNPCIndex; } + } + + public ClientQuestInfo() { } + + public ClientQuestInfo(BinaryReader reader) + { + Index = reader.ReadInt32(); + NPCIndex = reader.ReadUInt32(); + Name = reader.ReadString(); + Group = reader.ReadString(); + + int count = reader.ReadInt32(); + for (int i = 0; i < count; i++) + Description.Add(reader.ReadString()); + + count = reader.ReadInt32(); + for (int i = 0; i < count; i++) + TaskDescription.Add(reader.ReadString()); + + count = reader.ReadInt32(); + for (int i = 0; i < count; i++) + ReturnDescription.Add(reader.ReadString()); + + count = reader.ReadInt32(); + for (int i = 0; i < count; i++) + CompletionDescription.Add(reader.ReadString()); + + MinLevelNeeded = reader.ReadInt32(); + MaxLevelNeeded = reader.ReadInt32(); + QuestNeeded = reader.ReadInt32(); + ClassNeeded = (RequiredClass)reader.ReadByte(); + Type = (QuestType)reader.ReadByte(); + TimeLimitInSeconds = reader.ReadInt32(); + RewardGold = reader.ReadUInt32(); + RewardExp = reader.ReadUInt32(); + RewardCredit = reader.ReadUInt32(); + + + count = reader.ReadInt32(); + + for (int i = 0; i < count; i++) + RewardsFixedItem.Add(new QuestItemReward(reader)); + + count = reader.ReadInt32(); + + for (int i = 0; i < count; i++) + RewardsSelectItem.Add(new QuestItemReward(reader)); + + FinishNPCIndex = reader.ReadUInt32(); + } + public void Save(BinaryWriter writer) + { + writer.Write(Index); + writer.Write(NPCIndex); + writer.Write(Name); + writer.Write(Group); + + writer.Write(Description.Count); + for (int i = 0; i < Description.Count; i++) + writer.Write(Description[i]); + + writer.Write(TaskDescription.Count); + for (int i = 0; i < TaskDescription.Count; i++) + writer.Write(TaskDescription[i]); + + writer.Write(ReturnDescription.Count); + for (int i = 0; i < ReturnDescription.Count; i++) + writer.Write(ReturnDescription[i]); + + writer.Write(CompletionDescription.Count); + for (int i = 0; i < CompletionDescription.Count; i++) + writer.Write(CompletionDescription[i]); + + writer.Write(MinLevelNeeded); + writer.Write(MaxLevelNeeded); + writer.Write(QuestNeeded); + writer.Write((byte)ClassNeeded); + writer.Write((byte)Type); + writer.Write(TimeLimitInSeconds); + writer.Write(RewardGold); + writer.Write(RewardExp); + writer.Write(RewardCredit); + + writer.Write(RewardsFixedItem.Count); + + for (int i = 0; i < RewardsFixedItem.Count; i++) + RewardsFixedItem[i].Save(writer); + + writer.Write(RewardsSelectItem.Count); + + for (int i = 0; i < RewardsSelectItem.Count; i++) + RewardsSelectItem[i].Save(writer); + + writer.Write(FinishNPCIndex); + } + + public QuestIcon GetQuestIcon(bool taken = false, bool completed = false) + { + QuestIcon icon = QuestIcon.None; + + switch (Type) + { + case QuestType.General: + case QuestType.Repeatable: + if (completed) + icon = QuestIcon.QuestionYellow; + else if (taken) + icon = QuestIcon.QuestionWhite; + else + icon = QuestIcon.ExclamationYellow; + break; + case QuestType.Daily: + if (completed) + icon = QuestIcon.QuestionBlue; + else if (taken) + icon = QuestIcon.QuestionWhite; + else + icon = QuestIcon.ExclamationBlue; + break; + case QuestType.Story: + if (completed) + icon = QuestIcon.QuestionGreen; + else if (taken) + icon = QuestIcon.QuestionWhite; + else + icon = QuestIcon.ExclamationGreen; + break; + } + + return icon; + } +} + +public class ClientQuestProgress +{ + public int Id; + + public ClientQuestInfo QuestInfo; + + public List TaskList = new List(); + + public bool Taken; + public bool Completed; + public bool New; + + public QuestIcon Icon + { + get + { + return QuestInfo.GetQuestIcon(Taken, Completed); + } + } + + public ClientQuestProgress() { } + + public ClientQuestProgress(BinaryReader reader) + { + Id = reader.ReadInt32(); + + int count = reader.ReadInt32(); + + for (int i = 0; i < count; i++) + TaskList.Add(reader.ReadString()); + + Taken = reader.ReadBoolean(); + Completed = reader.ReadBoolean(); + New = reader.ReadBoolean(); + } + + public void Save(BinaryWriter writer) + { + writer.Write(Id); + + writer.Write(TaskList.Count); + + for (int i = 0; i < TaskList.Count; i++) + writer.Write(TaskList[i]); + + writer.Write(Taken); + writer.Write(Completed); + writer.Write(New); + } +} + +public class ClientBuff +{ + public BuffType Type; + public string Caster; + public bool Visible; + public uint ObjectID; + public long ExpireTime; + public bool Infinite; + public Stats Stats; + public bool Paused; + + public int[] Values; + + public ClientBuff() + { + Stats = new Stats(); + } + + public ClientBuff(BinaryReader reader) + { + Caster = null; + + Type = (BuffType)reader.ReadByte(); + Visible = reader.ReadBoolean(); + ObjectID = reader.ReadUInt32(); + ExpireTime = reader.ReadInt64(); + Infinite = reader.ReadBoolean(); + Paused = reader.ReadBoolean(); + + Stats = new Stats(reader); + + int count = reader.ReadInt32(); + + Values = new int[count]; + + for (int i = 0; i < count; i++) + { + Values[i] = reader.ReadInt32(); + } + } + + public void Save(BinaryWriter writer) + { + writer.Write((byte)Type); + writer.Write(Visible); + writer.Write(ObjectID); + writer.Write(ExpireTime); + writer.Write(Infinite); + writer.Write(Paused); + + Stats.Save(writer); + + writer.Write(Values.Length); + for (int i = 0; i < Values.Length; i++) + { + writer.Write(Values[i]); + } + } +} \ No newline at end of file diff --git a/Shared/Data/GuildData.cs b/Shared/Data/GuildData.cs new file mode 100644 index 0000000..a36189d --- /dev/null +++ b/Shared/Data/GuildData.cs @@ -0,0 +1,253 @@ +public class GuildRank +{ + public List Members = new List(); + public string Name = ""; + public int Index = 0; + public GuildRankOptions Options = (GuildRankOptions)0; + + public GuildRank() { } + + public GuildRank(BinaryReader reader, bool offline = false) + { + Name = reader.ReadString(); + Options = (GuildRankOptions)reader.ReadByte(); + + if (!offline) + { + Index = reader.ReadInt32(); + } + + int Membercount = reader.ReadInt32(); + for (int j = 0; j < Membercount; j++) + { + Members.Add(new GuildMember(reader, offline)); + } + } + public void Save(BinaryWriter writer, bool save = false) + { + writer.Write(Name); + writer.Write((byte)Options); + if (!save) + { + writer.Write(Index); + } + + writer.Write(Members.Count); + + for (int j = 0; j < Members.Count; j++) + { + Members[j].Save(writer); + } + } +} + +public class GuildStorageItem +{ + public UserItem Item; + public long UserId = 0; + public GuildStorageItem() { } + + public GuildStorageItem(BinaryReader reader) + { + Item = new UserItem(reader); + UserId = reader.ReadInt64(); + } + public void Save(BinaryWriter writer) + { + Item.Save(writer); + writer.Write(UserId); + } +} + +public class GuildMember +{ + public string Name = ""; + public int Id; + public object Player; + public DateTime LastLogin; + public bool hasvoted; + public bool Online; + + public GuildMember() { } + + public GuildMember(BinaryReader reader, bool offline = false) + { + Name = reader.ReadString(); + Id = reader.ReadInt32(); + LastLogin = DateTime.FromBinary(reader.ReadInt64()); + hasvoted = reader.ReadBoolean(); + Online = reader.ReadBoolean(); + Online = offline ? false : Online; + } + public void Save(BinaryWriter writer) + { + writer.Write(Name); + writer.Write(Id); + writer.Write(LastLogin.ToBinary()); + writer.Write(hasvoted); + writer.Write(Online); + } +} + +public class GuildBuffInfo +{ + public int Id; + public int Icon = 0; + public string Name = ""; + public byte LevelRequirement; + public byte PointsRequirement = 1; + public int TimeLimit; + public int ActivationCost; + + public Stats Stats; + + public GuildBuffInfo() + { + Stats = new Stats(); + } + + public GuildBuffInfo(BinaryReader reader) + { + Id = reader.ReadInt32(); + Icon = reader.ReadInt32(); + Name = reader.ReadString(); + LevelRequirement = reader.ReadByte(); + PointsRequirement = reader.ReadByte(); + TimeLimit = reader.ReadInt32(); + ActivationCost = reader.ReadInt32(); + + Stats = new Stats(reader); + } + + public GuildBuffInfo(InIReader reader, int i) + { + Id = reader.ReadInt32("Buff-" + i.ToString(), "Id", 0); + Icon = reader.ReadInt32("Buff-" + i.ToString(), "Icon", 0); + Name = reader.ReadString("Buff-" + i.ToString(), "Name", ""); + LevelRequirement = reader.ReadByte("Buff-" + i.ToString(), "LevelReq", 0); + PointsRequirement = reader.ReadByte("Buff-" + i.ToString(), "PointsReq", 1); + TimeLimit = reader.ReadInt32("Buff-" + i.ToString(), "TimeLimit", 0); ; + ActivationCost = reader.ReadInt32("Buff-" + i.ToString(), "ActivationCost", 0); + + Stats = new Stats(); + Stats[Stat.MaxAC] = reader.ReadByte("Buff-" + i.ToString(), "BuffAc", 0); + Stats[Stat.MaxMAC] = reader.ReadByte("Buff-" + i.ToString(), "BuffMAC", 0); + Stats[Stat.MaxDC] = reader.ReadByte("Buff-" + i.ToString(), "BuffDc", 0); + Stats[Stat.MaxMC] = reader.ReadByte("Buff-" + i.ToString(), "BuffMc", 0); + Stats[Stat.MaxSC] = reader.ReadByte("Buff-" + i.ToString(), "BuffSc", 0); + Stats[Stat.HP] = reader.ReadInt32("Buff-" + i.ToString(), "BuffMaxHp", 0); + Stats[Stat.MP] = reader.ReadInt32("Buff-" + i.ToString(), "BuffMaxMp", 0); + Stats[Stat.MineRatePercent] = reader.ReadByte("Buff-" + i.ToString(), "BuffMineRate", 0); + Stats[Stat.GemRatePercent] = reader.ReadByte("Buff-" + i.ToString(), "BuffGemRate", 0); + Stats[Stat.ExpRatePercent] = reader.ReadByte("Buff-" + i.ToString(), "BuffExpRate", 0); + Stats[Stat.CraftRatePercent] = reader.ReadByte("Buff-" + i.ToString(), "BuffCraftRate", 0); + Stats[Stat.SkillGainMultiplier] = reader.ReadByte("Buff-" + i.ToString(), "BuffSkillRate", 0); + Stats[Stat.HealthRecovery] = reader.ReadByte("Buff-" + i.ToString(), "BuffHpRegen", 0); + Stats[Stat.SpellRecovery] = reader.ReadByte("Buff-" + i.ToString(), "BuffMpRegen", 0); + Stats[Stat.AttackBonus] = reader.ReadByte("Buff-" + i.ToString(), "BuffAttack", 0); + Stats[Stat.ItemDropRatePercent] = reader.ReadByte("Buff-" + i.ToString(), "BuffDropRate", 0); + Stats[Stat.GoldDropRatePercent] = reader.ReadByte("Buff-" + i.ToString(), "BuffGoldRate", 0); + } + + public void Save(InIReader reader, int i) + { + reader.Write("Buff-" + i.ToString(), "Id", Id); + reader.Write("Buff-" + i.ToString(), "Icon", Icon); + reader.Write("Buff-" + i.ToString(), "Name", Name); + reader.Write("Buff-" + i.ToString(), "LevelReq", LevelRequirement); + reader.Write("Buff-" + i.ToString(), "PointsReq", PointsRequirement); + reader.Write("Buff-" + i.ToString(), "TimeLimit", TimeLimit); + reader.Write("Buff-" + i.ToString(), "ActivationCost", ActivationCost); + reader.Write("Buff-" + i.ToString(), "BuffAc", Stats[Stat.MaxAC]); + reader.Write("Buff-" + i.ToString(), "BuffMAC", Stats[Stat.MaxMAC]); + reader.Write("Buff-" + i.ToString(), "BuffDc", Stats[Stat.MaxDC]); + reader.Write("Buff-" + i.ToString(), "BuffMc", Stats[Stat.MaxMC]); + reader.Write("Buff-" + i.ToString(), "BuffSc", Stats[Stat.MaxSC]); + reader.Write("Buff-" + i.ToString(), "BuffMaxHp", Stats[Stat.HP]); + reader.Write("Buff-" + i.ToString(), "BuffMaxMp", Stats[Stat.MP]); + reader.Write("Buff-" + i.ToString(), "BuffMineRate", Stats[Stat.MineRatePercent]); + reader.Write("Buff-" + i.ToString(), "BuffGemRate", Stats[Stat.GemRatePercent]); + reader.Write("Buff-" + i.ToString(), "BuffExpRate", Stats[Stat.ExpRatePercent]); ; + reader.Write("Buff-" + i.ToString(), "BuffCraftRate", Stats[Stat.CraftRatePercent]); + reader.Write("Buff-" + i.ToString(), "BuffSkillRate", Stats[Stat.SkillGainMultiplier]); + reader.Write("Buff-" + i.ToString(), "BuffHpRegen", Stats[Stat.HealthRecovery]); + reader.Write("Buff-" + i.ToString(), "BuffMpRegen", Stats[Stat.SpellRecovery]); + reader.Write("Buff-" + i.ToString(), "BuffAttack", Stats[Stat.AttackBonus]); + reader.Write("Buff-" + i.ToString(), "BuffDropRate", Stats[Stat.ItemDropRatePercent]); + reader.Write("Buff-" + i.ToString(), "BuffGoldRate", Stats[Stat.GoldDropRatePercent]); + } + + public void Save(BinaryWriter writer) + { + writer.Write(Id); + writer.Write(Icon); + writer.Write(Name); + writer.Write(LevelRequirement); + writer.Write(PointsRequirement); + writer.Write(TimeLimit); + writer.Write(ActivationCost); + + Stats.Save(writer); + } + + public override string ToString() + { + return string.Format("{0}: {1}", Id, Name); + } + + public string ShowStats() + { + string text = string.Empty; + + foreach (var val in Stats.Values) + { + var c = val.Value < 0 ? "Decreases" : "Increases"; + + var txt = $"{c} {val.Key} by: {val.Value}{(val.Key.ToString().Contains("Percent") ? "%" : "")}.\n"; + + text += txt; + } + + return text; + } +} + +public class GuildBuff +{ + public int Id; + public GuildBuffInfo Info; + public bool Active = false; + public int ActiveTimeRemaining; + + public bool UsingGuildSkillIcon + { + get { return Info != null && Info.Icon < 1000; } + } + + public GuildBuff() { } + + public GuildBuff(BinaryReader reader) + { + Id = reader.ReadInt32(); + Active = reader.ReadBoolean(); + ActiveTimeRemaining = reader.ReadInt32(); + } + public void Save(BinaryWriter writer) + { + writer.Write(Id); + writer.Write(Active); + writer.Write(ActiveTimeRemaining); + } +} + +//outdated but cant delete it or old db's wont load +public class GuildBuffOld +{ + public GuildBuffOld() { } + + public GuildBuffOld(BinaryReader reader) + { + reader.ReadByte(); + reader.ReadInt64(); + } +} \ No newline at end of file diff --git a/Shared/Data/ItemData.cs b/Shared/Data/ItemData.cs new file mode 100644 index 0000000..d2c8a5d --- /dev/null +++ b/Shared/Data/ItemData.cs @@ -0,0 +1,930 @@ +using System.Text.RegularExpressions; + +public class ItemInfo +{ + public int Index; + public string Name = string.Empty; + public ItemType Type; + public ItemGrade Grade; + public RequiredType RequiredType = RequiredType.Level; + public RequiredClass RequiredClass = RequiredClass.None; + public RequiredGender RequiredGender = RequiredGender.None; + public ItemSet Set; + + public short Shape; + public byte Weight, Light, RequiredAmount; + + public ushort Image, Durability; + + public uint Price; + public ushort StackSize = 1; + + public bool StartItem; + public byte Effect; + + public bool NeedIdentify, ShowGroupPickup, GlobalDropNotify; + public bool ClassBased; + public bool LevelBased; + + public BindMode Bind = BindMode.None; + + public SpecialItemMode Unique = SpecialItemMode.None; + public byte RandomStatsId; + public RandomItemStat RandomStats; + public string ToolTip = string.Empty; + + public Stats Stats; + + public bool IsConsumable + { + get { return Type == ItemType.Potion || Type == ItemType.Scroll || Type == ItemType.Script; } + } + + public string FriendlyName + { + get + { + string temp = Name; + temp = Regex.Replace(temp, @"\d+$", string.Empty); //hides end numbers + temp = Regex.Replace(temp, @"\[[^]]*\]", string.Empty); //hides square brackets + + return temp; + } + } + + public ItemInfo() + { + Stats = new Stats(); + } + + public ItemInfo(BinaryReader reader, int version = int.MaxValue, int customVersion = int.MaxValue) + { + Index = reader.ReadInt32(); + Name = reader.ReadString(); + Type = (ItemType)reader.ReadByte(); + Grade = (ItemGrade)reader.ReadByte(); + RequiredType = (RequiredType)reader.ReadByte(); + RequiredClass = (RequiredClass)reader.ReadByte(); + RequiredGender = (RequiredGender)reader.ReadByte(); + Set = (ItemSet)reader.ReadByte(); + + Shape = reader.ReadInt16(); + Weight = reader.ReadByte(); + Light = reader.ReadByte(); + RequiredAmount = reader.ReadByte(); + + Image = reader.ReadUInt16(); + Durability = reader.ReadUInt16(); + + if (version <= 84) + { + StackSize = (ushort)reader.ReadUInt32(); + } + else + { + StackSize = reader.ReadUInt16(); + } + + Price = reader.ReadUInt32(); + + if (version <= 84) + { + Stats = new Stats(); + Stats[Stat.MinAC] = reader.ReadByte(); + Stats[Stat.MaxAC] = reader.ReadByte(); + Stats[Stat.MinMAC] = reader.ReadByte(); + Stats[Stat.MaxMAC] = reader.ReadByte(); + Stats[Stat.MinDC] = reader.ReadByte(); + Stats[Stat.MaxDC] = reader.ReadByte(); + Stats[Stat.MinMC] = reader.ReadByte(); + Stats[Stat.MaxMC] = reader.ReadByte(); + Stats[Stat.MinSC] = reader.ReadByte(); + Stats[Stat.MaxSC] = reader.ReadByte(); + Stats[Stat.HP] = reader.ReadUInt16(); + Stats[Stat.MP] = reader.ReadUInt16(); + Stats[Stat.Accuracy] = reader.ReadByte(); + Stats[Stat.Agility] = reader.ReadByte(); + + Stats[Stat.Luck] = reader.ReadSByte(); + Stats[Stat.AttackSpeed] = reader.ReadSByte(); + } + + StartItem = reader.ReadBoolean(); + + if (version <= 84) + { + Stats[Stat.BagWeight] = reader.ReadByte(); + Stats[Stat.HandWeight] = reader.ReadByte(); + Stats[Stat.WearWeight] = reader.ReadByte(); + } + + Effect = reader.ReadByte(); + + if (version <= 84) + { + Stats[Stat.Strong] = reader.ReadByte(); + Stats[Stat.MagicResist] = reader.ReadByte(); + Stats[Stat.PoisonResist] = reader.ReadByte(); + Stats[Stat.HealthRecovery] = reader.ReadByte(); + Stats[Stat.SpellRecovery] = reader.ReadByte(); + Stats[Stat.PoisonRecovery] = reader.ReadByte(); + Stats[Stat.HPRatePercent] = reader.ReadByte(); + Stats[Stat.MPRatePercent] = reader.ReadByte(); + Stats[Stat.CriticalRate] = reader.ReadByte(); + Stats[Stat.CriticalDamage] = reader.ReadByte(); + } + + + byte bools = reader.ReadByte(); + NeedIdentify = (bools & 0x01) == 0x01; + ShowGroupPickup = (bools & 0x02) == 0x02; + ClassBased = (bools & 0x04) == 0x04; + LevelBased = (bools & 0x08) == 0x08; + + if (version >= 77) + { + GlobalDropNotify = (bools & 0x20) == 0x20; + } + + if (version <= 84) + { + Stats[Stat.MaxACRatePercent] = reader.ReadByte(); + Stats[Stat.MaxMACRatePercent] = reader.ReadByte(); + Stats[Stat.Holy] = reader.ReadByte(); + Stats[Stat.Freezing] = reader.ReadByte(); + Stats[Stat.PoisonAttack] = reader.ReadByte(); + } + + Bind = (BindMode)reader.ReadInt16(); + + if (version <= 84) + { + Stats[Stat.Reflect] = reader.ReadByte(); + Stats[Stat.HPDrainRatePercent] = reader.ReadByte(); + } + + Unique = (SpecialItemMode)reader.ReadInt16(); + RandomStatsId = reader.ReadByte(); + + if (version > 84) + { + Stats = new Stats(reader, version, customVersion); + } + + bool isTooltip = reader.ReadBoolean(); + if (isTooltip) + { + ToolTip = reader.ReadString(); + } + + if (version < 70) //before db version 70 all specialitems had wedding rings disabled, after that it became a server option + { + if ((Type == ItemType.Ring) && (Unique != SpecialItemMode.None)) + Bind |= BindMode.NoWeddingRing; + } + } + + + + public void Save(BinaryWriter writer) + { + writer.Write(Index); + writer.Write(Name); + writer.Write((byte)Type); + writer.Write((byte)Grade); + writer.Write((byte)RequiredType); + writer.Write((byte)RequiredClass); + writer.Write((byte)RequiredGender); + writer.Write((byte)Set); + + writer.Write(Shape); + writer.Write(Weight); + writer.Write(Light); + writer.Write(RequiredAmount); + + writer.Write(Image); + writer.Write(Durability); + + writer.Write(StackSize); + writer.Write(Price); + + writer.Write(StartItem); + + writer.Write(Effect); + + byte bools = 0; + if (NeedIdentify) bools |= 0x01; + if (ShowGroupPickup) bools |= 0x02; + if (ClassBased) bools |= 0x04; + if (LevelBased) bools |= 0x08; + if (GlobalDropNotify) bools |= 0x20; + writer.Write(bools); + + writer.Write((short)Bind); + writer.Write((short)Unique); + + writer.Write(RandomStatsId); + + Stats.Save(writer); + + writer.Write(ToolTip != null); + if (ToolTip != null) + writer.Write(ToolTip); + + } + + public static ItemInfo FromText(string text) + { + return null; + } + + public string ToText() + { + return null; + } + + public override string ToString() + { + return string.Format("{0}: {1}", Index, Name); + } + +} + +public class UserItem +{ + public ulong UniqueID; + public int ItemIndex; + + public ItemInfo Info; + public ushort CurrentDura, MaxDura; + public ushort Count = 1, + GemCount = 0; + + public RefinedValue RefinedValue = RefinedValue.None; + public byte RefineAdded = 0; + public int RefineSuccessChance = 0; + + public bool DuraChanged; + public int SoulBoundId = -1; + public bool Identified = false; + public bool Cursed = false; + + public int WeddingRing = -1; + + public DateTime BuybackExpiryDate; + + public ExpireInfo ExpireInfo; + public SealedInfo SealedInfo; + + public bool IsShopItem; + + public Stats AddedStats; + + public bool IsAdded + { + get { return AddedStats.Count > 0; } + } + + public int Weight + { + get { return Info.Weight * Count; } + } + + public string FriendlyName + { + get { return Count > 1 ? string.Format("{0} ({1})", Info.FriendlyName, Count) : Info.FriendlyName; } + } + + public UserItem(ItemInfo info) + { + SoulBoundId = -1; + ItemIndex = info.Index; + Info = info; + AddedStats = new Stats(); + } + public UserItem(BinaryReader reader, int version = int.MaxValue, int customVersion = int.MaxValue) + { + UniqueID = reader.ReadUInt64(); + ItemIndex = reader.ReadInt32(); + + CurrentDura = reader.ReadUInt16(); + MaxDura = reader.ReadUInt16(); + + if (version <= 84) + { + Count = (ushort)reader.ReadUInt32(); + } + else + { + Count = reader.ReadUInt16(); + } + + if (version <= 84) + { + AddedStats = new Stats(); + + AddedStats[Stat.MaxAC] = reader.ReadByte(); + AddedStats[Stat.MaxMAC] = reader.ReadByte(); + AddedStats[Stat.MaxDC] = reader.ReadByte(); + AddedStats[Stat.MaxMC] = reader.ReadByte(); + AddedStats[Stat.MaxSC] = reader.ReadByte(); + + AddedStats[Stat.Accuracy] = reader.ReadByte(); + AddedStats[Stat.Agility] = reader.ReadByte(); + AddedStats[Stat.HP] = reader.ReadByte(); + AddedStats[Stat.MP] = reader.ReadByte(); + + AddedStats[Stat.AttackSpeed] = reader.ReadSByte(); + AddedStats[Stat.Luck] = reader.ReadSByte(); + } + + SoulBoundId = reader.ReadInt32(); + byte Bools = reader.ReadByte(); + Identified = (Bools & 0x01) == 0x01; + Cursed = (Bools & 0x02) == 0x02; + + if (version <= 84) + { + AddedStats[Stat.Strong] = reader.ReadByte(); + AddedStats[Stat.MagicResist] = reader.ReadByte(); + AddedStats[Stat.PoisonResist] = reader.ReadByte(); + AddedStats[Stat.HealthRecovery] = reader.ReadByte(); + AddedStats[Stat.SpellRecovery] = reader.ReadByte(); + AddedStats[Stat.PoisonRecovery] = reader.ReadByte(); + AddedStats[Stat.CriticalRate] = reader.ReadByte(); + AddedStats[Stat.CriticalDamage] = reader.ReadByte(); + AddedStats[Stat.Freezing] = reader.ReadByte(); + AddedStats[Stat.PoisonAttack] = reader.ReadByte(); + } + + if (version <= 84) + { + GemCount = (ushort)reader.ReadUInt32(); + } + else + { + GemCount = reader.ReadUInt16(); + } + + if (version > 84) + { + AddedStats = new Stats(reader, version, customVersion); + } + + RefinedValue = (RefinedValue)reader.ReadByte(); + RefineAdded = reader.ReadByte(); + + if (version > 85) + { + RefineSuccessChance = reader.ReadInt32(); + } + + WeddingRing = reader.ReadInt32(); + + if (version < 65) return; + + if (reader.ReadBoolean()) + { + ExpireInfo = new ExpireInfo(reader, version, customVersion); + } + + if (version < 76) + return; + + if (version < 83) return; + + IsShopItem = reader.ReadBoolean(); + + if (version < 92) return; + + if (reader.ReadBoolean()) + { + SealedInfo = new SealedInfo(reader, version, customVersion); + } + } + + public void Save(BinaryWriter writer) + { + writer.Write(UniqueID); + writer.Write(ItemIndex); + + writer.Write(CurrentDura); + writer.Write(MaxDura); + + writer.Write(Count); + + writer.Write(SoulBoundId); + byte Bools = 0; + if (Identified) Bools |= 0x01; + if (Cursed) Bools |= 0x02; + writer.Write(Bools); + + writer.Write(GemCount); + + AddedStats.Save(writer); + + writer.Write((byte)RefinedValue); + writer.Write(RefineAdded); + writer.Write(RefineSuccessChance); + + writer.Write(WeddingRing); + + writer.Write(ExpireInfo != null); + ExpireInfo?.Save(writer); + + writer.Write(IsShopItem); + + writer.Write(SealedInfo != null); + SealedInfo?.Save(writer); + } + + public int GetTotal(Stat type) + { + return AddedStats[type] + Info.Stats[type]; + } + + public uint Price() + { + if (Info == null) return 0; + + uint p = Info.Price; + + + if (Info.Durability > 0) + { + float r = ((Info.Price / 2F) / Info.Durability); + + p = (uint)(MaxDura * r); + + if (MaxDura > 0) + r = CurrentDura / (float)MaxDura; + else + r = 0; + + p = (uint)Math.Floor(p / 2F + ((p / 2F) * r) + Info.Price / 2F); + } + + + p = (uint)(p * (AddedStats.Count * 0.1F + 1F)); + + + return p * Count; + } + public uint RepairPrice() + { + if (Info == null || Info.Durability == 0) + return 0; + + var p = Info.Price; + + if (Info.Durability > 0) + { + p = (uint)Math.Floor(MaxDura * ((Info.Price / 2F) / Info.Durability) + Info.Price / 2F); + p = (uint)(p * (AddedStats.Count * 0.1F + 1F)); + + } + + var cost = p * Count - Price(); + + return cost; + } + + public uint Quality() + { + uint q = (uint)(AddedStats.Count + 1); + + return q; + } + + public ushort Image + { + get + { + return Info.Image; + } + } + + public UserItem Clone() + { + UserItem item = new UserItem(Info) + { + UniqueID = UniqueID, + CurrentDura = CurrentDura, + MaxDura = MaxDura, + Count = Count, + GemCount = GemCount, + DuraChanged = DuraChanged, + SoulBoundId = SoulBoundId, + Identified = Identified, + Cursed = Cursed, + AddedStats = new Stats(AddedStats), + + RefineAdded = RefineAdded, + + ExpireInfo = ExpireInfo, + SealedInfo = SealedInfo, + + IsShopItem = IsShopItem + }; + + return item; + } + +} + +public class ExpireInfo +{ + public DateTime ExpiryDate; + + public ExpireInfo() { } + + public ExpireInfo(BinaryReader reader, int version = int.MaxValue, int Customversion = int.MaxValue) + { + ExpiryDate = DateTime.FromBinary(reader.ReadInt64()); + } + + public void Save(BinaryWriter writer) + { + writer.Write(ExpiryDate.ToBinary()); + } +} + +public class SealedInfo +{ + public DateTime ExpiryDate; + public DateTime NextSealDate; + + public SealedInfo() { } + + public SealedInfo(BinaryReader reader, int version = int.MaxValue, int Customversion = int.MaxValue) + { + ExpiryDate = DateTime.FromBinary(reader.ReadInt64()); + + if (version > 92) + { + NextSealDate = DateTime.FromBinary(reader.ReadInt64()); + } + } + + public void Save(BinaryWriter writer) + { + writer.Write(ExpiryDate.ToBinary()); + writer.Write(NextSealDate.ToBinary()); + } +} + +public class GameShopItem +{ + public int ItemIndex; + public int GIndex; + public ItemInfo Info; + public uint GoldPrice = 0; + public uint CreditPrice = 0; + public ushort Count = 1; + public string Class = ""; + public string Category = ""; + public int Stock = 0; + public bool iStock = false; + public bool Deal = false; + public bool TopItem = false; + public DateTime Date; + public bool CanBuyGold = false; + public bool CanBuyCredit = false; + + public GameShopItem() + { + } + + public GameShopItem(BinaryReader reader, int version = int.MaxValue, int Customversion = int.MaxValue) + { + ItemIndex = reader.ReadInt32(); + GIndex = reader.ReadInt32(); + GoldPrice = reader.ReadUInt32(); + CreditPrice = reader.ReadUInt32(); + if (version <= 84) + { + Count = (ushort)reader.ReadUInt32(); + } + else + { + Count = reader.ReadUInt16(); + } + Class = reader.ReadString(); + Category = reader.ReadString(); + Stock = reader.ReadInt32(); + iStock = reader.ReadBoolean(); + Deal = reader.ReadBoolean(); + TopItem = reader.ReadBoolean(); + Date = DateTime.FromBinary(reader.ReadInt64()); + if (version > 105) + { + CanBuyGold = reader.ReadBoolean(); + CanBuyCredit = reader.ReadBoolean(); + } + + } + + public GameShopItem(BinaryReader reader, bool packet = false) + { + ItemIndex = reader.ReadInt32(); + GIndex = reader.ReadInt32(); + Info = new ItemInfo(reader); + GoldPrice = reader.ReadUInt32(); + CreditPrice = reader.ReadUInt32(); + Count = reader.ReadUInt16(); + Class = reader.ReadString(); + Category = reader.ReadString(); + Stock = reader.ReadInt32(); + iStock = reader.ReadBoolean(); + Deal = reader.ReadBoolean(); + TopItem = reader.ReadBoolean(); + Date = DateTime.FromBinary(reader.ReadInt64()); + CanBuyCredit = reader.ReadBoolean(); + CanBuyGold = reader.ReadBoolean(); + } + + public void Save(BinaryWriter writer, bool packet = false) + { + writer.Write(ItemIndex); + writer.Write(GIndex); + if (packet) Info.Save(writer); + writer.Write(GoldPrice); + writer.Write(CreditPrice); + writer.Write(Count); + writer.Write(Class); + writer.Write(Category); + writer.Write(Stock); + writer.Write(iStock); + writer.Write(Deal); + writer.Write(TopItem); + writer.Write(Date.ToBinary()); + writer.Write(CanBuyCredit); + writer.Write(CanBuyGold); + } + + public override string ToString() + { + return string.Format("{0}: {1}", GIndex, Info.Name); + } + +} + + +public class ItemSets +{ + public ItemSet Set; + public List Type; + private byte Amount + { + get + { + switch (Set) + { + default: + return 0; + } + } + } + public byte Count; + public bool SetComplete + { + get + { + return Count >= Amount; + } + } +} + + +public class RandomItemStat +{ + public byte MaxDuraChance, MaxDuraStatChance, MaxDuraMaxStat; + public byte MaxAcChance, MaxAcStatChance, MaxAcMaxStat, MaxMacChance, MaxMacStatChance, MaxMacMaxStat, MaxDcChance, MaxDcStatChance, MaxDcMaxStat, MaxMcChance, MaxMcStatChance, MaxMcMaxStat, MaxScChance, MaxScStatChance, MaxScMaxStat; + public byte AccuracyChance, AccuracyStatChance, AccuracyMaxStat, AgilityChance, AgilityStatChance, AgilityMaxStat, HpChance, HpStatChance, HpMaxStat, MpChance, MpStatChance, MpMaxStat, StrongChance, StrongStatChance, StrongMaxStat; + public byte MagicResistChance, MagicResistStatChance, MagicResistMaxStat, PoisonResistChance, PoisonResistStatChance, PoisonResistMaxStat; + public byte HpRecovChance, HpRecovStatChance, HpRecovMaxStat, MpRecovChance, MpRecovStatChance, MpRecovMaxStat, PoisonRecovChance, PoisonRecovStatChance, PoisonRecovMaxStat; + public byte CriticalRateChance, CriticalRateStatChance, CriticalRateMaxStat, CriticalDamageChance, CriticalDamageStatChance, CriticalDamageMaxStat; + public byte FreezeChance, FreezeStatChance, FreezeMaxStat, PoisonAttackChance, PoisonAttackStatChance, PoisonAttackMaxStat; + public byte AttackSpeedChance, AttackSpeedStatChance, AttackSpeedMaxStat, LuckChance, LuckStatChance, LuckMaxStat; + public byte CurseChance; + + public RandomItemStat(ItemType Type = ItemType.Book) + { + switch (Type) + { + case ItemType.Weapon: + SetWeapon(); + break; + case ItemType.Armour: + SetArmour(); + break; + case ItemType.Helmet: + SetHelmet(); + break; + case ItemType.Necklace: + SetNecklace(); + break; + case ItemType.Bracelet: + SetBracelet(); + break; + case ItemType.Ring: + SetRing(); + break; + } + } + + public void SetWeapon() + { + MaxDuraChance = 2; + MaxDuraStatChance = 13; + MaxDuraMaxStat = 13; + + MaxDcChance = 15; + MaxDcStatChance = 15; + MaxDcMaxStat = 13; + + MaxMcChance = 20; + MaxMcStatChance = 15; + MaxMcMaxStat = 13; + + MaxScChance = 20; + MaxScStatChance = 15; + MaxScMaxStat = 13; + + AttackSpeedChance = 60; + AttackSpeedStatChance = 30; + AttackSpeedMaxStat = 3; + + StrongChance = 24; + StrongStatChance = 20; + StrongMaxStat = 2; + + AccuracyChance = 30; + AccuracyStatChance = 20; + AccuracyMaxStat = 2; + } + public void SetArmour() + { + MaxDuraChance = 2; + MaxDuraStatChance = 10; + MaxDuraMaxStat = 3; + + MaxAcChance = 30; + MaxAcStatChance = 15; + MaxAcMaxStat = 7; + + MaxMacChance = 30; + MaxMacStatChance = 15; + MaxMacMaxStat = 7; + + MaxDcChance = 40; + MaxDcStatChance = 20; + MaxDcMaxStat = 7; + + MaxMcChance = 40; + MaxMcStatChance = 20; + MaxMcMaxStat = 7; + + MaxScChance = 40; + MaxScStatChance = 20; + MaxScMaxStat = 7; + + } + public void SetHelmet() + { + MaxDuraChance = 2; + MaxDuraStatChance = 10; + MaxDuraMaxStat = 3; + + MaxAcChance = 30; + MaxAcStatChance = 15; + MaxAcMaxStat = 7; + + MaxMacChance = 30; + MaxMacStatChance = 15; + MaxMacMaxStat = 7; + + MaxDcChance = 40; + MaxDcStatChance = 20; + MaxDcMaxStat = 7; + + MaxMcChance = 40; + MaxMcStatChance = 20; + MaxMcMaxStat = 7; + + MaxScChance = 40; + MaxScStatChance = 20; + MaxScMaxStat = 7; + } + public void SetNecklace() + { + MaxDuraChance = 2; + MaxDuraStatChance = 10; + MaxDuraMaxStat = 3; + + MaxDcChance = 15; + MaxDcStatChance = 30; + MaxDcMaxStat = 7; + + MaxMcChance = 15; + MaxMcStatChance = 30; + MaxMcMaxStat = 7; + + MaxScChance = 15; + MaxScStatChance = 30; + MaxScMaxStat = 7; + + AccuracyChance = 60; + AccuracyStatChance = 30; + AccuracyMaxStat = 7; + + AgilityChance = 60; + AgilityStatChance = 30; + AgilityMaxStat = 7; + } + public void SetBracelet() + { + MaxDuraChance = 2; + MaxDuraStatChance = 10; + MaxDuraMaxStat = 3; + + MaxAcChance = 20; + MaxAcStatChance = 30; + MaxAcMaxStat = 6; + + MaxMacChance = 20; + MaxMacStatChance = 30; + MaxMacMaxStat = 6; + + MaxDcChance = 30; + MaxDcStatChance = 30; + MaxDcMaxStat = 6; + + MaxMcChance = 30; + MaxMcStatChance = 30; + MaxMcMaxStat = 6; + + MaxScChance = 30; + MaxScStatChance = 30; + MaxScMaxStat = 6; + } + public void SetRing() + { + MaxDuraChance = 2; + MaxDuraStatChance = 10; + MaxDuraMaxStat = 3; + + MaxAcChance = 25; + MaxAcStatChance = 20; + MaxAcMaxStat = 6; + + MaxMacChance = 25; + MaxMacStatChance = 20; + MaxMacMaxStat = 6; + + MaxDcChance = 15; + MaxDcStatChance = 30; + MaxDcMaxStat = 6; + + MaxMcChance = 15; + MaxMcStatChance = 30; + MaxMcMaxStat = 6; + + MaxScChance = 15; + MaxScStatChance = 30; + MaxScMaxStat = 6; + } +} + +public class ChatItem +{ + public ulong UniqueID; + public string Title; + public MirGridType Grid; + + public string RegexInternalName + { + get { return $"<{Title.Replace("(", "\\(").Replace(")", "\\)")}>"; } + } + + public string InternalName + { + get { return $"<{Title}/{UniqueID}>"; } + } + + public ChatItem() { } + + public ChatItem(BinaryReader reader) + { + UniqueID = reader.ReadUInt64(); + Title = reader.ReadString(); + Grid = (MirGridType)reader.ReadByte(); + } + + public void Save(BinaryWriter writer) + { + writer.Write(UniqueID); + writer.Write(Title); + writer.Write((byte)Grid); + } +} diff --git a/Shared/Data/Notice.cs b/Shared/Data/Notice.cs new file mode 100644 index 0000000..a295f3a --- /dev/null +++ b/Shared/Data/Notice.cs @@ -0,0 +1,20 @@ +public class Notice +{ + public string Title = string.Empty; + public string Message = string.Empty; + public DateTime LastUpdate; + + public Notice() { } + + public Notice(BinaryReader reader) + { + Title = reader.ReadString(); + Message = reader.ReadString(); + } + + public void Save(BinaryWriter writer) + { + writer.Write(Title); + writer.Write(Message); + } +} \ No newline at end of file diff --git a/Shared/Data/SharedData.cs b/Shared/Data/SharedData.cs new file mode 100644 index 0000000..b49a70f --- /dev/null +++ b/Shared/Data/SharedData.cs @@ -0,0 +1,138 @@ +using System.Drawing; + +public class SelectInfo +{ + public int Index; + public string Name = string.Empty; + public ushort Level; + public MirClass Class; + public MirGender Gender; + public int Hair; + public int Body; + public int Weapon; + public DateTime LastAccess; + + public SelectInfo() { } + + public SelectInfo(BinaryReader reader) + { + Index = reader.ReadInt32(); + Name = reader.ReadString(); + Level = reader.ReadUInt16(); + Class = (MirClass)reader.ReadByte(); + Gender = (MirGender)reader.ReadByte(); + Hair = reader.ReadInt32(); + Body = reader.ReadInt32(); + Weapon = reader.ReadInt32(); + LastAccess = DateTime.FromBinary(reader.ReadInt64()); + } + public void Save(BinaryWriter writer) + { + writer.Write(Index); + writer.Write(Name); + writer.Write(Level); + writer.Write((byte)Class); + writer.Write((byte)Gender); + writer.Write(Hair); + writer.Write(Body); + writer.Write(Weapon); + writer.Write(LastAccess.ToBinary()); + } +} + +public class RankCharacterInfo +{ + public long PlayerId; + public string Name; + public MirClass Class; + public int level; + + public long Experience;//clients shouldnt care about this only server + public object info;//again only keep this on server! + public DateTime LastUpdated; + + public RankCharacterInfo() + { + + } + public RankCharacterInfo(BinaryReader reader) + { + PlayerId = reader.ReadInt64(); + Name = reader.ReadString(); + level = reader.ReadInt32(); + Class = (MirClass)reader.ReadByte(); + + } + public void Save(BinaryWriter writer) + { + writer.Write(PlayerId); + writer.Write(Name); + writer.Write(level); + writer.Write((byte)Class); + } +} + +public class QuestItemReward +{ + public ItemInfo Item; + public ushort Count = 1; + + public QuestItemReward() { } + + public QuestItemReward(BinaryReader reader) + { + Item = new ItemInfo(reader); + Count = reader.ReadUInt16(); + } + + public void Save(BinaryWriter writer) + { + Item.Save(writer); + writer.Write(Count); + } +} + +public class WorldMapSetup +{ + public bool Enabled; + public List Icons = new List(); + + public WorldMapSetup() { } + + public WorldMapSetup(BinaryReader reader) + { + Enabled = reader.ReadBoolean(); + int count = reader.ReadInt32(); + for (int i = 0; i < count; i++) + Icons.Add(new WorldMapIcon(reader)); + } + + public void Save(BinaryWriter writer) + { + writer.Write(Enabled); + writer.Write(Icons.Count); + for (int i = 0; i < Icons.Count; i++) + Icons[i].Save(writer); + } +} +public class WorldMapIcon +{ + public int ImageIndex; + public string Title; + public int MapIndex; + public WorldMapIcon() { } + + public WorldMapIcon(BinaryReader reader) + { + ImageIndex = reader.ReadInt32(); + Title = reader.ReadString(); + MapIndex = reader.ReadInt32(); + } + + public void Save(BinaryWriter writer) + { + writer.Write(ImageIndex); + writer.Write(Title); + writer.Write(MapIndex); + } +} \ No newline at end of file diff --git a/Shared/Data/Stat.cs b/Shared/Data/Stat.cs new file mode 100644 index 0000000..932720a --- /dev/null +++ b/Shared/Data/Stat.cs @@ -0,0 +1,150 @@ +public sealed class Stats : IEquatable +{ + public SortedDictionary Values { get; set; } = new SortedDictionary(); + public int Count => Values.Sum(pair => Math.Abs(pair.Value)); + + public int this[Stat stat] + { + get + { + return !Values.TryGetValue(stat, out int result) ? 0 : result; + } + set + { + if (value == 0) + { + if (Values.ContainsKey(stat)) + { + Values.Remove(stat); + } + + return; + } + + Values[stat] = value; + } + } + + public Stats() { } + + public Stats(Stats stats) + { + foreach (KeyValuePair pair in stats.Values) + this[pair.Key] += pair.Value; + } + + public Stats(BinaryReader reader, int version = int.MaxValue, int customVersion = int.MaxValue) + { + int count = reader.ReadInt32(); + + for (int i = 0; i < count; i++) + Values[(Stat)reader.ReadByte()] = reader.ReadInt32(); + } + + public void Add(Stats stats) + { + foreach (KeyValuePair pair in stats.Values) + this[pair.Key] += pair.Value; + } + + public void Save(BinaryWriter writer) + { + writer.Write(Values.Count); + + foreach (KeyValuePair pair in Values) + { + writer.Write((byte)pair.Key); + writer.Write(pair.Value); + } + } + + public void Clear() + { + Values.Clear(); + } + + public bool Equals(Stats other) + { + if (Values.Count != other.Values.Count) return false; + + foreach (KeyValuePair value in Values) + if (other[value.Key] != value.Value) return false; + + return true; + } +} + +public enum StatFormula : byte +{ + Health, + Mana, + Weight, + Stat +} + +public enum Stat : byte +{ + MinAC = 0, + MaxAC = 1, + MinMAC = 2, + MaxMAC = 3, + MinDC = 4, + MaxDC = 5, + MinMC = 6, + MaxMC = 7, + MinSC = 8, + MaxSC = 9, + + Accuracy = 10, + Agility = 11, + HP = 12, + MP = 13, + AttackSpeed = 14, + Luck = 15, + BagWeight = 16, + HandWeight = 17, + WearWeight = 18, + Reflect = 19, + Strong = 20, + Holy = 21, + Freezing = 22, + PoisonAttack = 23, + + MagicResist = 30, + PoisonResist = 31, + HealthRecovery = 32, + SpellRecovery = 33, + PoisonRecovery = 34, //TODO - Should this be in seconds or milliseconds?? + CriticalRate = 35, + CriticalDamage = 36, + + MaxACRatePercent = 40, + MaxMACRatePercent = 41, + MaxDCRatePercent = 42, + MaxMCRatePercent = 43, + MaxSCRatePercent = 44, + AttackSpeedRatePercent = 45, + HPRatePercent = 46, + MPRatePercent = 47, + HPDrainRatePercent = 48, + + ExpRatePercent = 100, + ItemDropRatePercent = 101, + GoldDropRatePercent = 102, + MineRatePercent = 103, + GemRatePercent = 104, + CraftRatePercent = 105, + SkillGainMultiplier = 106, + AttackBonus = 107, + + LoverExpRatePercent = 120, + MentorDamageRatePercent = 121, + MentorExpRatePercent = 123, + DamageReductionPercent = 124, + EnergyShieldPercent = 125, + EnergyShieldHPGain = 126, + ManaPenaltyPercent = 127, + TeleportManaPenaltyPercent = 128, + + Unknown = 255 +} \ No newline at end of file diff --git a/Shared/Enums.cs b/Shared/Enums.cs new file mode 100644 index 0000000..ca2cf73 --- /dev/null +++ b/Shared/Enums.cs @@ -0,0 +1,945 @@ +public enum MouseCursor : byte +{ + None, + Default, + Attack, + AttackRed, + NPCTalk, + TextPrompt, + Trash, + Upgrade +} + +public enum PanelType : byte +{ + Buy, + BuySub, + Sell, + Repair, + SpecialRepair, + Consign, + Refine, + CheckRefine, + CollectRefine, + ReplaceWedRing, +} + +public enum MarketItemType : byte +{ + Consign, + Auction, + GameShop +} + +public enum MarketPanelType : byte +{ + Market, + Consign, + Auction, + GameShop +} + +public enum BlendMode : sbyte +{ + NONE = -1, + NORMAL = 0, + LIGHT = 1, + LIGHTINV = 2, + INVNORMAL = 3, + INVLIGHT = 4, + INVLIGHTINV = 5, + INVCOLOR = 6, + INVBACKGROUND = 7 +} + +public enum DamageType : byte +{ + Hit = 0, + Miss = 1, + Critical = 2 +} + +[Flags] +public enum GMOptions : byte +{ + None = 0, + GameMaster = 0x0001, + Observer = 0x0002, + Superman = 0x0004 +} + +[Flags] +public enum LevelEffects : ushort +{ + None = 0, + Mist = 1, + RedDragon = 2, + BlueDragon = 4, + Rebirth1 = 8, + Rebirth2 = 16, + Rebirth3 = 32, + NewBlue = 64, + YellowDragon = 128, + Phoenix = 256 +} + +public enum OutputMessageType : byte +{ + Normal, + Quest, + Guild +} + +public enum ItemGrade : byte +{ + None = 0, + Common = 1, + YangWarrior = 2, + NegativeWarrior = 3, + FireWizard = 4, + CelestialWizard = 5, + MonkTaoist = 6, + InstructorTaoist = 7, +} + +public enum RefinedValue : byte +{ + None = 0, + DC = 1, + MC = 2, + SC = 3, +} + +public enum QuestType : byte +{ + General = 0, + Daily = 1, + Repeatable = 2, + Story = 3 +} + +public enum QuestIcon : byte +{ + None = 0, + QuestionWhite = 1, + ExclamationYellow = 2, + QuestionYellow = 3, + ExclamationBlue = 5, + QuestionBlue = 6, + ExclamationGreen = 52, + QuestionGreen = 53 +} + +public enum QuestState : byte +{ + Add, + Update, + Remove +} + +public enum QuestAction : byte +{ + TimeExpired +} + +public enum DefaultNPCType : byte +{ + Login, + LevelUp, + UseItem, + MapCoord, + MapEnter, + Die, + Trigger, + CustomCommand, + OnAcceptQuest, + OnFinishQuest, + Daily, + Client +} + +//2 blank mob files +public enum Monster : ushort +{ + Rabbit, + BlackRat, + BrownRat, + Witch, + Bat1, + ZombieMan1, + ZombieMan2, + WolfMan1, + WolfMan2, + Bat2, + Bat3, + Bat4, + Bat5, + Bat7, + Bat8, + Wolf, + Doe, + Bull, + Deer, + Hen, + Snake, + Fox, + Tiger, + Wolf2, + Skeleton1, + Skeleton2, + Skeleton3, + Skeleton4, + BigMan1, + BigMan2, + BigMan3, + BigMan4, + WizardMan1, + WizardMan2, + ANTDefinitlyAnANT, + BigANTDefinitlyAnANT, + TwoHeadMan, + FireMan, + StoneMan, + StoneMan2, + StoneMan3, + StoneMan4, + StoneMan5, + Bird, + Snake2, + + //Dungeon Monsters + BoneElite = 1000, + Wooma1, + GiantLizard, + Goblin, + Zombie, + Spider, + Centipede, + Wooma2, + Minotaur, + GiantFrog, + DragonBat, + Centipede2, + Reptile +} + +public enum MirAction : byte +{ + Standing, + Walking, + Pushed, + DashL, + DashR, + DashFail, + Stance, + Attack1, + AttackRange1, + Harvest, + Spell, + Die, + Dead, + Show, + Hide, + Revive +} + +public enum CellAttribute : byte +{ + Walk = 0, + HighWall = 1, + LowWall = 2, +} + +public enum LightSetting : byte +{ + Normal = 0, + Dawn = 1, + Day = 2, + Evening = 3, + Night = 4 +} + +public enum MirGender : byte +{ + Male = 0, + Female = 1 +} + +public enum MirClass : byte +{ + Warrior = 0, + Wizard = 1, + Taoist = 2 +} + +public enum MirDirection : byte +{ + Up = 0, + UpRight = 1, + Right = 2, + DownRight = 3, + Down = 4, + DownLeft = 5, + Left = 6, + UpLeft = 7 +} + +public enum ObjectType : byte +{ + None = 0, + Player = 1, + Item = 2, + Merchant = 3, + Spell = 4, + Monster = 5 +} + +public enum ChatType : byte +{ + Normal = 0, + Shout = 1, + System = 2, + Hint = 3, + Announcement = 4, + Group = 5, + WhisperIn = 6, + WhisperOut = 7, + Guild = 8, + Trainer = 9, + LevelUp = 10, + System2 = 11, + Relationship = 12, + Shout2 = 13, + Shout3 = 14, + LineMessage = 15, +} + +public enum ItemType : byte +{ + Nothing = 0, + Weapon, //1 + Armour, //2 + Helmet, //3 + Necklace, //4 + Bracelet, //5 + Ring, //6 + Potion, //7 + Ore, //8 + Meat, //9 + Material, //10 + Scroll, //11 + Gem, //12 + Book, //13 + Script, //14 + Quest, //15 + Amulet //16 +} + +public enum MirGridType : byte +{ + None = 0, + Inventory = 1, + Equipment = 2, + Trade = 3, + Storage = 4, + BuyBack = 5, + DropPanel = 6, + TrustMerchant = 7, + GuildStorage = 8, + GuestTrade = 9, + QuestInventory, + Mail, + Refine +} + +public enum EquipmentSlot : byte +{ + Weapon = 0, + Armour, + Helmet, + Necklace, + BraceletL, + BraceletR, + RingL, + RingR +} + +public enum AttackMode : byte +{ + Peace = 0, + Group = 1, + Guild = 2, + EnemyGuild = 3, + RedBrown = 4, + All = 5 +} + +public enum PetMode : byte +{ + Both = 0, + MoveOnly = 1, + AttackOnly = 2, + None = 3, + FocusMasterTarget = 4 +} + +[Flags] +public enum PoisonType : ushort +{ + None = 0, + Green = 1, + Red = 2, + Slow = 4, + Frozen = 8, + Stun = 16, + Paralysis = 32 +} + +[Flags] + +public enum BindMode : short +{ + None = 0, + DontDeathdrop = 1,//0x0001 + DontDrop = 2,//0x0002 + DontSell = 4,//0x0004 + DontStore = 8,//0x0008 + DontTrade = 16,//0x0010 + DontRepair = 32,//0x0020 + DontUpgrade = 64,//0x0040 + DestroyOnDrop = 128,//0x0080 + BreakOnDeath = 256,//0x0100 + BindOnEquip = 512,//0x0200 + NoSRepair = 1024,//0x0400 + NoWeddingRing = 2048,//0x0800 + UnableToRent = 4096, + UnableToDisassemble = 8192, + NoMail = 16384 +} + +[Flags] +public enum SpecialItemMode : short +{ + None = 0, + Paralize = 0x0001, + Teleport = 0x0002, + ClearRing = 0x0004, + Protection = 0x0008, + Revival = 0x0010, + Muscle = 0x0020, + Flame = 0x0040, + Healing = 0x0080, + Probe = 0x0100, + Skill = 0x0200, + NoDuraLoss = 0x0400, + Blink = 0x800, +} + +[Flags] +public enum RequiredClass : byte +{ + Warrior = 1, + Wizard = 2, + Taoist = 4, + None = Warrior | Wizard | Taoist +} + +[Flags] +public enum RequiredGender : byte +{ + Male = 1, + Female = 2, + None = Male | Female +} + +public enum RequiredType : byte +{ + Level = 0, + MaxAC = 1, + MaxMAC = 2, + MaxDC = 3, + MaxMC = 4, + MaxSC = 5, + MaxLevel = 6, + MinAC = 7, + MinMAC = 8, + MinDC = 9, + MinMC = 10, + MinSC = 11, +} + +public enum ItemSet : byte +{ + None = 0 +} + +public enum Spell : byte +{ + None = 0, + + //Warrior + Fencing = 1, + Slaying = 2, + Thrusting = 3, + HalfMoon = 4, + ShoulderDash = 5, + FlamingSword = 6, + + //Wizard + FireBall = 31, + Repulsion = 32, + ElectricShock = 33, + GreatFireBall = 34, + HellFire = 35, + ThunderBolt = 36, + Teleport = 37, + FireBang = 38, + FireWall = 39, + Lightning = 40, + FrostCrunch = 41, + ThunderStorm = 42, + MagicShield = 43, + + //Taoist + Healing = 61, + SpiritSword = 62, + Poisoning = 63, + SoulFireBall = 64, + SummonSkeleton = 65, + Hiding = 67, + MassHiding = 68, + SoulShield = 69, + Revelation = 70, + BlessedArmour = 71, + EnergyRepulsor = 72, + TrapHexagon = 73, + Purification = 74, + MassHealing = 75, + Hallucination = 76, + UltimateEnhancer = 77, +} + +public enum SpellEffect : byte +{ + None, + Teleport, + Healing, + MagicShieldUp, + MagicShieldDown +} + + +public enum BuffType : byte +{ + None = 0, + + //Magics + Hiding, + SoulShield, + BlessedArmour, + UltimateEnhancer, + MagicShield, + + //Special + GameMaster = 100, + General, + Exp, + Drop, + Gold, + BagWeight, + Lover, + Guild, + Prison, + Rested, + Skill, + ClearRing, + + //Stats + Impact = 200, + Magic, + Taoist, + Storm, + HealthAid, + ManaAid, + Defence, + MagicDefence, + WonderDrug, + Knapsack, +} + +[Flags] +public enum BuffProperty : byte +{ + None = 0, + RemoveOnDeath = 1, + RemoveOnExit = 2, + Debuff = 4, + PauseInSafeZone = 8 +} + +public enum BuffStackType : byte +{ + None, + ResetDuration, + StackDuration, + StackStat, + StackStatAndDuration, + Infinite, + ResetStat, + ResetStatAndDuration +} + +public enum DefenceType : byte +{ + ACAgility, + AC, + MACAgility, + MAC, + Agility, + Repulsion, + None +} + +public enum ServerPacketIds : short +{ + Connected, + ClientVersion, + Disconnect, + KeepAlive, + NewAccount, + ChangePassword, + ChangePasswordBanned, + Login, + LoginBanned, + LoginSuccess, + NewCharacter, + NewCharacterSuccess, + DeleteCharacter, + DeleteCharacterSuccess, + StartGame, + StartGameBanned, + StartGameDelay, + MapInformation, + NewMapInfo, + WorldMapSetup, + SearchMapResult, + UserInformation, + UserSlotsRefresh, + UserLocation, + ObjectPlayer, + ObjectRemove, + ObjectTurn, + ObjectWalk, + Chat, + ObjectChat, + NewItemInfo, + NewChatItem, + MoveItem, + EquipItem, + MergeItem, + RemoveItem, + TakeBackItem, + StoreItem, + SplitItem, + SplitItem1, + DepositRefineItem, + RetrieveRefineItem, + RefineCancel, + RefineItem, + DepositTradeItem, + RetrieveTradeItem, + UseItem, + DropItem, + PlayerUpdate, + LogOutSuccess, + LogOutFailed, + ReturnToLogin, + TimeOfDay, + ChangeAMode, + ChangePMode, + ObjectItem, + ObjectGold, + GainedItem, + GainedGold, + LoseGold, + GainedCredit, + LoseCredit, + ObjectMonster, + ObjectAttack, + Struck, + ObjectStruck, + DamageIndicator, + DuraChanged, + HealthChanged, + DeleteItem, + Death, + ObjectDied, + ColourChanged, + ObjectColourChanged, + ObjectGuildNameChanged, + GainExperience, + LevelChanged, + ObjectLeveled, + ObjectHarvest, + ObjectHarvested, + ObjectNpc, + NPCResponse, + ObjectHide, + ObjectShow, + Poisoned, + ObjectPoisoned, + MapChanged, + ObjectTeleportOut, + ObjectTeleportIn, + TeleportIn, + NPCGoods, + NPCSell, + NPCRepair, + NPCSRepair, + NPCRefine, + NPCCheckRefine, + NPCCollectRefine, + NPCReplaceWedRing, + NPCStorage, + SellItem, + RepairItem, + ItemRepaired, + ItemSlotSizeChanged, + ItemSealChanged, + NewMagic, + RemoveMagic, + MagicLeveled, + Magic, + MagicDelay, + MagicCast, + ObjectMagic, + ObjectEffect, + ObjectProjectile, + RangeAttack, + Pushed, + ObjectPushed, + ObjectName, + UserStorage, + SwitchGroup, + DeleteGroup, + DeleteMember, + GroupInvite, + AddMember, + Revived, + ObjectRevived, + SpellToggle, + ObjectHealth, + ObjectMana, + MapEffect, + AllowObserve, + ObjectRangeAttack, + AddBuff, + RemoveBuff, + PauseBuff, + ObjectHidden, + RefreshItem, + ObjectSpell, + UserDash, + ObjectDash, + UserDashFail, + ObjectDashFail, + NPCConsign, + NPCMarket, + NPCMarketPage, + ConsignItem, + MarketFail, + MarketSuccess, + BaseStatsInfo, + UserName, + ChatItemStats, + GuildNoticeChange, + GuildMemberChange, + GuildStatus, + GuildInvite, + GuildExpGain, + GuildNameRequest, + GuildStorageGoldChange, + GuildStorageItemChange, + GuildStorageList, + GuildRequestWar, + DefaultNPC, + NPCUpdate, + NPCImageUpdate, + MarriageRequest, + DivorceRequest, + TradeRequest, + TradeAccept, + TradeGold, + TradeItem, + TradeConfirm, + TradeCancel, + ChangeQuest, + CompleteQuest, + ShareQuest, + NewQuestInfo, + GainedQuestItem, + DeleteQuestItem, + CombineItem, + ItemUpgraded, + ObjectLevelEffects, + SendOutputMessage, + ReceiveMail, + MailLockedItem, + MailSendRequest, + MailSent, + ParcelCollected, + MailCost, + ResizeInventory, + ResizeStorage, + FriendUpdate, + LoverUpdate, + GuildBuffList, + NPCRequestInput, + GameShopInfo, + GameShopStock, + Rankings, + OpenBrowser, + PlaySound, + SetTimer, + ExpireTimer, + UpdateNotice, + Roll, + SetCompass, + GroupMembersMap, + SendMemberLocation, +} + +public enum ClientPacketIds : short +{ + ClientVersion, + Disconnect, + KeepAlive, + NewAccount, + ChangePassword, + Login, + NewCharacter, + DeleteCharacter, + StartGame, + LogOut, + Turn, + Walk, + Chat, + MoveItem, + StoreItem, + TakeBackItem, + MergeItem, + EquipItem, + RemoveItem, + SplitItem, + UseItem, + DropItem, + DepositRefineItem, + RetrieveRefineItem, + RefineCancel, + RefineItem, + CheckRefine, + ReplaceWedRing, + DepositTradeItem, + RetrieveTradeItem, + DropGold, + PickUp, + Observe, + ChangeAMode, + ChangePMode, + ChangeTrade, + Attack, + RangeAttack, + Harvest, + CallNPC, + BuyItem, + SellItem, + RepairItem, + BuyItemBack, + SRepairItem, + MagicKey, + Magic, + SwitchGroup, + AddMember, + DellMember, + GroupInvite, + TownRevive, + SpellToggle, + ConsignItem, + MarketSearch, + MarketRefresh, + MarketPage, + MarketBuy, + MarketGetBack, + MarketSellNow, + RequestUserName, + RequestChatItem, + EditGuildMember, + EditGuildNotice, + GuildInvite, + GuildNameReturn, + RequestGuildInfo, + GuildStorageGoldChange, + GuildStorageItemChange, + GuildWarReturn, + MarriageRequest, + MarriageReply, + ChangeMarriage, + DivorceRequest, + DivorceReply, + TradeRequest, + TradeReply, + TradeGold, + TradeConfirm, + TradeCancel, + AcceptQuest, + FinishQuest, + AbandonQuest, + ShareQuest, + CombineItem, + + SendMail, + ReadMail, + CollectParcel, + DeleteMail, + LockMail, + MailLockedItem, + MailCost, + + AddFriend, + RemoveFriend, + RefreshFriends, + AddMemo, + GuildBuffUpdate, + NPCConfirmInput, + GameshopBuy, + + ReportIssue, + GetRanking +} + +public enum ConquestType : byte +{ + Request = 0, + Auto = 1, + Forced = 2, +} + +[Flags] +public enum GuildRankOptions : byte +{ + CanChangeRank = 1, + CanRecruit = 2, + CanKick = 4, + CanStoreItem = 8, + CanRetrieveItem = 16, + CanAlterAlliance = 32, + CanChangeNotice = 64, + CanActivateBuff = 128 +} + +public enum SpellToggleState: sbyte +{ + None = -1, + False = 0, + True = 1 +} \ No newline at end of file diff --git a/Shared/Extensions/ExtensionMethods.cs b/Shared/Extensions/ExtensionMethods.cs new file mode 100644 index 0000000..9f2414f --- /dev/null +++ b/Shared/Extensions/ExtensionMethods.cs @@ -0,0 +1,30 @@ +namespace Shared.Extensions +{ + public static class HelperExtensions + { + private static Random rng = new Random(); + + public static T ValueOrDefault(this object value) + { + if (value == null || value.ToString() == "") + { + return default; + } + + return (T)Convert.ChangeType(value, typeof(T)); + } + + public static void Shuffle(this IList list) + { + int n = list.Count; + while (n > 1) + { + n--; + int k = rng.Next(n + 1); + T value = list[k]; + list[k] = list[n]; + list[n] = value; + } + } + } +} diff --git a/Shared/Functions/Functions.cs b/Shared/Functions/Functions.cs new file mode 100644 index 0000000..47b8de1 --- /dev/null +++ b/Shared/Functions/Functions.cs @@ -0,0 +1,457 @@ +using System.Drawing; +using System.Runtime.Serialization.Formatters.Binary; + +public static class Functions +{ + public static bool CompareBytes(byte[] a, byte[] b) + { + if (a == b) return true; + + if (a == null || b == null || a.Length != b.Length) return false; + + for (int i = 0; i < a.Length; i++) if (a[i] != b[i]) return false; + + return true; + } + + public static string ConvertByteSize(double byteCount) + { + string size = "0 Bytes"; + if (byteCount >= 1073741824.0) + size = String.Format("{0:##.##}", byteCount / 1073741824.0) + " GB"; + else if (byteCount >= 1048576.0) + size = String.Format("{0:##.##}", byteCount / 1048576.0) + " MB"; + else if (byteCount >= 1024.0) + size = String.Format("{0:##.##}", byteCount / 1024.0) + " KB"; + else if (byteCount > 0 && byteCount < 1024.0) + size = byteCount.ToString() + " Bytes"; + + return size; + } + + public static bool TryParse(string s, out Point temp) + { + temp = Point.Empty; + + if (String.IsNullOrWhiteSpace(s)) return false; + + string[] data = s.Split(','); + if (data.Length <= 1) return false; + + if (!Int32.TryParse(data[0], out int tempX)) + return false; + + if (!Int32.TryParse(data[1], out int tempY)) + return false; + + temp = new Point(tempX, tempY); + return true; + } + public static Point Subtract(this Point p1, Point p2) + { + return new Point(p1.X - p2.X, p1.Y - p2.Y); + } + public static Point Subtract(this Point p1, int x, int y) + { + return new Point(p1.X - x, p1.Y - y); + } + public static Point Add(this Point p1, Point p2) + { + return new Point(p1.X + p2.X, p1.Y + p2.Y); + } + public static Point Add(this Point p1, int x, int y) + { + return new Point(p1.X + x, p1.Y + y); + } + public static string PointToString(Point p) + { + return String.Format("{0}, {1}", p.X, p.Y); + } + public static bool InRange(Point a, Point b, int i) + { + return Math.Abs(a.X - b.X) <= i && Math.Abs(a.Y - b.Y) <= i; + } + + public static bool FacingEachOther(MirDirection dirA, Point pointA, MirDirection dirB, Point pointB) + { + if (dirA == DirectionFromPoint(pointA, pointB) && dirB == DirectionFromPoint(pointB, pointA)) + { + return true; + } + + return false; + } + + public static string PrintTimeSpanFromSeconds(double secs, bool accurate = true) + { + TimeSpan t = TimeSpan.FromSeconds(secs); + string answer; + if (t.TotalMinutes < 1.0) + { + answer = string.Format("{0}s", t.Seconds); + } + else if (t.TotalHours < 1.0) + { + answer = accurate ? string.Format("{0}m {1:D2}s", t.Minutes, t.Seconds) : string.Format("{0}m", t.Minutes); + } + else if (t.TotalDays < 1.0) + { + answer = accurate ? string.Format("{0}h {1:D2}m {2:D2}s", (int)t.Hours, t.Minutes, t.Seconds) : string.Format("{0}h {1:D2}m", (int)t.TotalHours, t.Minutes); + } + else // more than 1 day + { + answer = accurate ? string.Format("{0}d {1:D2}h {2:D2}m {3:D2}s", (int)t.Days, (int)t.Hours, t.Minutes, t.Seconds) : string.Format("{0}d {1}h {2:D2}m", (int)t.TotalDays, (int)t.Hours, t.Minutes); + } + + return answer; + } + + public static string PrintTimeSpanFromMilliSeconds(double milliSeconds) + { + TimeSpan t = TimeSpan.FromMilliseconds(milliSeconds); + string answer; + if (t.TotalMinutes < 1.0) + { + answer = string.Format("{0}.{1}s", t.Seconds, (decimal)(t.Milliseconds / 100)); + } + else if (t.TotalHours < 1.0) + { + answer = string.Format("{0}m {1:D2}s", t.TotalMinutes, t.Seconds); + } + else if (t.TotalDays < 1.0) + { + answer = string.Format("{0}h {1:D2}m {2:D2}s", (int)t.TotalHours, t.Minutes, t.Seconds); + } + else + { + answer = string.Format("{0}d {1}h {2:D2}m {3:D2}s", (int)t.Days, (int)t.Hours, t.Minutes, t.Seconds); + } + + return answer; + } + + public static MirDirection PreviousDir(MirDirection d) + { + switch (d) + { + case MirDirection.Up: + return MirDirection.UpLeft; + case MirDirection.UpRight: + return MirDirection.Up; + case MirDirection.Right: + return MirDirection.UpRight; + case MirDirection.DownRight: + return MirDirection.Right; + case MirDirection.Down: + return MirDirection.DownRight; + case MirDirection.DownLeft: + return MirDirection.Down; + case MirDirection.Left: + return MirDirection.DownLeft; + case MirDirection.UpLeft: + return MirDirection.Left; + default: return d; + } + } + public static MirDirection NextDir(MirDirection d) + { + switch (d) + { + case MirDirection.Up: + return MirDirection.UpRight; + case MirDirection.UpRight: + return MirDirection.Right; + case MirDirection.Right: + return MirDirection.DownRight; + case MirDirection.DownRight: + return MirDirection.Down; + case MirDirection.Down: + return MirDirection.DownLeft; + case MirDirection.DownLeft: + return MirDirection.Left; + case MirDirection.Left: + return MirDirection.UpLeft; + case MirDirection.UpLeft: + return MirDirection.Up; + default: return d; + } + } + public static MirDirection DirectionFromPoint(Point source, Point dest) + { + if (source.X < dest.X) + { + if (source.Y < dest.Y) + return MirDirection.DownRight; + if (source.Y > dest.Y) + return MirDirection.UpRight; + return MirDirection.Right; + } + + if (source.X > dest.X) + { + if (source.Y < dest.Y) + return MirDirection.DownLeft; + if (source.Y > dest.Y) + return MirDirection.UpLeft; + return MirDirection.Left; + } + + return source.Y < dest.Y ? MirDirection.Down : MirDirection.Up; + } + + public static MirDirection ShiftDirection(MirDirection dir, int i) + { + return (MirDirection)(((int)dir + i + 8) % 8); + } + + public static Size Add(this Size p1, Size p2) + { + return new Size(p1.Width + p2.Width, p1.Height + p2.Height); + } + public static Size Add(this Size p1, int width, int height) + { + return new Size(p1.Width + width, p1.Height + height); + } + + public static Point PointMove(Point p, MirDirection d, int i) + { + switch (d) + { + case MirDirection.Up: + p.Offset(0, -i); + break; + case MirDirection.UpRight: + p.Offset(i, -i); + break; + case MirDirection.Right: + p.Offset(i, 0); + break; + case MirDirection.DownRight: + p.Offset(i, i); + break; + case MirDirection.Down: + p.Offset(0, i); + break; + case MirDirection.DownLeft: + p.Offset(-i, i); + break; + case MirDirection.Left: + p.Offset(-i, 0); + break; + case MirDirection.UpLeft: + p.Offset(-i, -i); + break; + } + return p; + } + public static Point Left(Point p, MirDirection d) + { + switch (d) + { + case MirDirection.Up: + p.Offset(-1, 0); + break; + case MirDirection.UpRight: + p.Offset(-1, -1); + break; + case MirDirection.Right: + p.Offset(0, -1); + break; + case MirDirection.DownRight: + p.Offset(1, -1); + break; + case MirDirection.Down: + p.Offset(1, 0); + break; + case MirDirection.DownLeft: + p.Offset(1, 1); + break; + case MirDirection.Left: + p.Offset(0, 1); + break; + case MirDirection.UpLeft: + p.Offset(-1, 1); + break; + } + return p; + } + + public static Point Right(Point p, MirDirection d) + { + switch (d) + { + case MirDirection.Up: + p.Offset(1, 0); + break; + case MirDirection.UpRight: + p.Offset(1, 1); + break; + case MirDirection.Right: + p.Offset(0, 1); + break; + case MirDirection.DownRight: + p.Offset(-1, 1); + break; + case MirDirection.Down: + p.Offset(-1, 0); + break; + case MirDirection.DownLeft: + p.Offset(-1, -1); + break; + case MirDirection.Left: + p.Offset(0, -1); + break; + case MirDirection.UpLeft: + p.Offset(1, -1); + break; + } + return p; + } + + public static int MaxDistance(Point p1, Point p2) + { + return Math.Max(Math.Abs(p1.X - p2.X), Math.Abs(p1.Y - p2.Y)); + + } + + public static MirDirection ReverseDirection(MirDirection dir) + { + switch (dir) + { + case MirDirection.Up: + return MirDirection.Down; + case MirDirection.UpRight: + return MirDirection.DownLeft; + case MirDirection.Right: + return MirDirection.Left; + case MirDirection.DownRight: + return MirDirection.UpLeft; + case MirDirection.Down: + return MirDirection.Up; + case MirDirection.DownLeft: + return MirDirection.UpRight; + case MirDirection.Left: + return MirDirection.Right; + case MirDirection.UpLeft: + return MirDirection.DownRight; + default: + return dir; + } + } + public static ItemInfo GetRealItem(ItemInfo Origin, ushort Level, MirClass job, List ItemList) + { + if (Origin.ClassBased && Origin.LevelBased) + return GetClassAndLevelBasedItem(Origin, job, Level, ItemList); + if (Origin.ClassBased) + return GetClassBasedItem(Origin, job, ItemList); + if (Origin.LevelBased) + return GetLevelBasedItem(Origin, Level, ItemList); + return Origin; + } + public static ItemInfo GetLevelBasedItem(ItemInfo Origin, ushort level, List ItemList) + { + ItemInfo output = Origin; + for (int i = 0; i < ItemList.Count; i++) + { + ItemInfo info = ItemList[i]; + if (info.Name.StartsWith(Origin.Name)) + if ((info.RequiredType == RequiredType.Level) && (info.RequiredAmount <= level) && (output.RequiredAmount < info.RequiredAmount) && (Origin.RequiredGender == info.RequiredGender)) + output = info; + } + return output; + } + public static ItemInfo GetClassBasedItem(ItemInfo Origin, MirClass job, List ItemList) + { + for (int i = 0; i < ItemList.Count; i++) + { + ItemInfo info = ItemList[i]; + if (info.Name.StartsWith(Origin.Name)) + if (((byte)info.RequiredClass == (1 << (byte)job)) && (Origin.RequiredGender == info.RequiredGender)) + return info; + } + return Origin; + } + + public static ItemInfo GetClassAndLevelBasedItem(ItemInfo Origin, MirClass job, ushort level, List ItemList) + { + ItemInfo output = Origin; + for (int i = 0; i < ItemList.Count; i++) + { + ItemInfo info = ItemList[i]; + if (info.Name.StartsWith(Origin.Name)) + if ((byte)info.RequiredClass == (1 << (byte)job)) + if ((info.RequiredType == RequiredType.Level) && (info.RequiredAmount <= level) && (output.RequiredAmount <= info.RequiredAmount) && (Origin.RequiredGender == info.RequiredGender)) + output = info; + } + return output; + } + + public static string StringOverLines(string line, int maxWordsPerLine, int maxLettersPerLine) + { + string newString = string.Empty; + + string[] words = line.Split(' '); + + int lineLength = 0; + + for (int i = 0; i < words.Length; i++) + { + lineLength += words[i].Length + 1; + + newString += words[i] + " "; + if (i > 0 && i % maxWordsPerLine == 0 && lineLength > maxLettersPerLine) + { + lineLength = 0; + newString += "\r\n"; + } + } + + return newString; + } + + public static IEnumerable SplitArray(byte[] value, int bufferLength) + { + int countOfArray = value.Length / bufferLength; + if (value.Length % bufferLength > 0) + countOfArray++; + for (int i = 0; i < countOfArray; i++) + { + yield return value.Skip(i * bufferLength).Take(bufferLength).ToArray(); + } + } + + public static byte[] CombineArray(List arrays) + { + byte[] rv = new byte[arrays.Sum(x => x.Length)]; + int offset = 0; + foreach (byte[] array in arrays) + { + System.Buffer.BlockCopy(array, 0, rv, offset, array.Length); + offset += array.Length; + } + return rv; + } + public static byte[] SerializeToBytes(T item) + { +#pragma warning disable SYSLIB0011 + var formatter = new BinaryFormatter(); + using (var stream = new MemoryStream()) + { + formatter.Serialize(stream, item); + stream.Seek(0, SeekOrigin.Begin); +#pragma warning restore SYSLIB0011 + return stream.ToArray(); + } + } + public static object DeserializeFromBytes(byte[] bytes) + { +#pragma warning disable SYSLIB0011 + var formatter = new BinaryFormatter(); + using (var stream = new MemoryStream(bytes)) + { + var deserialized = formatter.Deserialize(stream); +#pragma warning restore SYSLIB0011 + return deserialized; + } + } +} \ No newline at end of file diff --git a/Shared/Functions/IniReader.cs b/Shared/Functions/IniReader.cs new file mode 100644 index 0000000..8b8532a --- /dev/null +++ b/Shared/Functions/IniReader.cs @@ -0,0 +1,438 @@ +using System.Drawing; + +public class InIReader +{ + #region Fields + private readonly List _contents; + private readonly string _fileName; + #endregion + + #region Constructor + public InIReader(string fileName) + { + _fileName = fileName; + + if (!Directory.Exists(Path.GetDirectoryName(fileName))) + { + Directory.CreateDirectory(Path.GetDirectoryName(fileName)); + } + + _contents = new List(); + try + { + if (File.Exists(_fileName)) + _contents.AddRange(File.ReadAllLines(_fileName)); + } + catch + { + } + } + #endregion + + #region Functions + private string FindValue(string section, string key) + { + for (int a = 0; a < _contents.Count; a++) + if (String.CompareOrdinal(_contents[a], "[" + section + "]") == 0) + for (int b = a + 1; b < _contents.Count; b++) + if (String.CompareOrdinal(_contents[b].Split('=')[0], key) == 0) + return _contents[b].Split('=')[1]; + else if (_contents[b].StartsWith("[") && _contents[b].EndsWith("]")) + return null; + return null; + } + + private int FindIndex(string section, string key) + { + for (int a = 0; a < _contents.Count; a++) + if (String.CompareOrdinal(_contents[a], "[" + section + "]") == 0) + for (int b = a + 1; b < _contents.Count; b++) + if (String.CompareOrdinal(_contents[b].Split('=')[0], key) == 0) + return b; + else if (_contents[b].StartsWith("[") && _contents[b].EndsWith("]")) + { + _contents.Insert(b - 1, key + "="); + return b - 1; + } + else if (_contents.Count - 1 == b) + { + _contents.Add(key + "="); + return _contents.Count - 1; + } + if (_contents.Count > 0) + _contents.Add(""); + + _contents.Add("[" + section + "]"); + _contents.Add(key + "="); + return _contents.Count - 1; + } + + public void Save() + { + try + { + File.WriteAllLines(_fileName, _contents); + } + catch + { + } + } + #endregion + + #region Read + public bool ReadBoolean(string section, string key, bool Default, bool writeWhenNull = true) + { + bool result; + + if (!bool.TryParse(FindValue(section, key), out result)) + { + result = Default; + if (writeWhenNull) Write(section, key, Default); + } + + return result; + } + + public byte ReadByte(string section, string key, byte Default, bool writeWhenNull = true) + { + byte result; + + if (!byte.TryParse(FindValue(section, key), out result)) + { + result = Default; + if (writeWhenNull) Write(section, key, Default); + } + + + return result; + } + + public sbyte ReadSByte(string section, string key, sbyte Default, bool writeWhenNull = true) + { + sbyte result; + + if (!sbyte.TryParse(FindValue(section, key), out result)) + { + result = Default; + if (writeWhenNull) Write(section, key, Default); + } + + + return result; + } + + public ushort ReadUInt16(string section, string key, ushort Default, bool writeWhenNull = true) + { + ushort result; + + if (!ushort.TryParse(FindValue(section, key), out result)) + { + result = Default; + if (writeWhenNull) Write(section, key, Default); + } + + + return result; + } + + public short ReadInt16(string section, string key, short Default, bool writeWhenNull = true) + { + short result; + + if (!short.TryParse(FindValue(section, key), out result)) + { + result = Default; + if (writeWhenNull) Write(section, key, Default); + } + + + return result; + } + + public uint ReadUInt32(string section, string key, uint Default, bool writeWhenNull = true) + { + uint result; + + if (!uint.TryParse(FindValue(section, key), out result)) + { + result = Default; + if (writeWhenNull) Write(section, key, Default); + } + + return result; + } + + public int ReadInt32(string section, string key, int Default, bool writeWhenNull = true) + { + int result; + + if (!int.TryParse(FindValue(section, key), out result)) + { + result = Default; + if (writeWhenNull) Write(section, key, Default); + } + + return result; + } + + public ulong ReadUInt64(string section, string key, ulong Default, bool writeWhenNull = true) + { + ulong result; + + if (!ulong.TryParse(FindValue(section, key), out result)) + { + result = Default; + if (writeWhenNull) Write(section, key, Default); + } + + return result; + } + + public long ReadInt64(string section, string key, long Default, bool writeWhenNull = true) + { + long result; + + if (!long.TryParse(FindValue(section, key), out result)) + { + result = Default; + if (writeWhenNull) Write(section, key, Default); + } + + + return result; + } + + public float ReadSingle(string section, string key, float Default, bool writeWhenNull = true) + { + float result; + + if (!float.TryParse(FindValue(section, key), out result)) + { + result = Default; + if (writeWhenNull) Write(section, key, Default); + } + + return result; + } + + public double ReadDouble(string section, string key, double Default, bool writeWhenNull = true) + { + double result; + + if (!double.TryParse(FindValue(section, key), out result)) + { + result = Default; + if (writeWhenNull) Write(section, key, Default); + } + + return result; + } + + public decimal ReadDecimal(string section, string key, decimal Default, bool writeWhenNull = true) + { + decimal result; + + if (!decimal.TryParse(FindValue(section, key), out result)) + { + result = Default; + if (writeWhenNull) Write(section, key, Default); + } + + return result; + } + + public string ReadString(string section, string key, string Default, bool writeWhenNull = true) + { + string result = FindValue(section, key); + + if (string.IsNullOrEmpty(result)) + { + result = Default; + + if (writeWhenNull) Write(section, key, Default); + } + + return result; + } + + public char ReadChar(string section, string key, char Default, bool writeWhenNull = true) + { + char result; + + if (!char.TryParse(FindValue(section, key), out result)) + { + result = Default; + if (writeWhenNull) Write(section, key, Default); + } + + return result; + } + + public Point ReadPoint(string section, string key, Point Default) + { + string temp = FindValue(section, key); + int tempX, tempY; + if (temp == null || !int.TryParse(temp.Split(',')[0], out tempX)) + { + Write(section, key, Default); + return Default; + } + if (!int.TryParse(temp.Split(',')[1], out tempY)) + { + Write(section, key, Default); + return Default; + } + + return new Point(tempX, tempY); + } + + public Size ReadSize(string section, string key, Size Default) + { + string temp = FindValue(section, key); + int tempX, tempY; + if (!int.TryParse(temp.Split(',')[0], out tempX)) + { + Write(section, key, Default); + return Default; + } + if (!int.TryParse(temp.Split(',')[1], out tempY)) + { + Write(section, key, Default); + return Default; + } + + return new Size(tempX, tempY); + } + + public TimeSpan ReadTimeSpan(string section, string key, TimeSpan Default) + { + TimeSpan result; + + if (!TimeSpan.TryParse(FindValue(section, key), out result)) + { + result = Default; + Write(section, key, Default); + } + + + return result; + } + + public float ReadFloat(string section, string key, float Default) + { + float result; + + if (!float.TryParse(FindValue(section, key), out result)) + { + result = Default; + Write(section, key, Default); + } + + return result; + } + #endregion + + #region Write + public void Write(string section, string key, bool value) + { + _contents[FindIndex(section, key)] = key + "=" + value; + Save(); + } + + public void Write(string section, string key, byte value) + { + _contents[FindIndex(section, key)] = key + "=" + value; + Save(); + } + + public void Write(string section, string key, sbyte value) + { + _contents[FindIndex(section, key)] = key + "=" + value; + Save(); + } + + public void Write(string section, string key, ushort value) + { + _contents[FindIndex(section, key)] = key + "=" + value; + Save(); + } + + public void Write(string section, string key, short value) + { + _contents[FindIndex(section, key)] = key + "=" + value; + Save(); + } + + public void Write(string section, string key, uint value) + { + _contents[FindIndex(section, key)] = key + "=" + value; + Save(); + } + + public void Write(string section, string key, int value) + { + _contents[FindIndex(section, key)] = key + "=" + value; + Save(); + } + + public void Write(string section, string key, ulong value) + { + _contents[FindIndex(section, key)] = key + "=" + value; + Save(); + } + + public void Write(string section, string key, long value) + { + _contents[FindIndex(section, key)] = key + "=" + value; + Save(); + } + + public void Write(string section, string key, float value) + { + _contents[FindIndex(section, key)] = key + "=" + value; + Save(); + } + + public void Write(string section, string key, double value) + { + _contents[FindIndex(section, key)] = key + "=" + value; + Save(); + } + + public void Write(string section, string key, decimal value) + { + _contents[FindIndex(section, key)] = key + "=" + value; + Save(); + } + + public void Write(string section, string key, string value) + { + _contents[FindIndex(section, key)] = key + "=" + value; + Save(); + } + + public void Write(string section, string key, char value) + { + _contents[FindIndex(section, key)] = key + "=" + value; + Save(); + } + + public void Write(string section, string key, Point value) + { + _contents[FindIndex(section, key)] = key + "=" + value.X + "," + value.Y; + Save(); + } + + public void Write(string section, string key, Size value) + { + _contents[FindIndex(section, key)] = key + "=" + value.Width + "," + value.Height; + Save(); + } + + public void Write(string section, string key, TimeSpan value) + { + _contents[FindIndex(section, key)] = key + "=" + value; + Save(); + } + #endregion +} \ No newline at end of file diff --git a/Shared/Functions/RegexFunctions.cs b/Shared/Functions/RegexFunctions.cs new file mode 100644 index 0000000..c99f009 --- /dev/null +++ b/Shared/Functions/RegexFunctions.cs @@ -0,0 +1,44 @@ +using System.Text.RegularExpressions; + +public static class RegexFunctions +{ + public static Regex ChatItemLinks = new Regex(@"<(.*?/.*?)>"); + + public enum RegexMatchEvalType + { + ChatLinkName + } + + private static string RegexReplace(string text, Regex regex, MatchEvaluator ev) + { + try + { + return regex.Replace(text, ev); + } + catch + { + return text; + } + } + + public static string SeperateCamelCase(this string value) + { + return Regex.Replace(value, "((?<=[a-z])[A-Z]|[A-Z](?=[a-z]))", " $1").Trim(); + } + + private static MatchEvaluator GetMatchEv(RegexMatchEvalType type) + { + switch (type) + { + case RegexMatchEvalType.ChatLinkName: + return m => m.Groups[1].Captures[0].Value.Split('/')[0]; + default: + return null; + } + } + + public static string CleanChatString(string text) + { + return RegexReplace(text, ChatItemLinks, GetMatchEv(RegexMatchEvalType.ChatLinkName)); + } +} diff --git a/Shared/Globals.cs b/Shared/Globals.cs new file mode 100644 index 0000000..0b29e3c --- /dev/null +++ b/Shared/Globals.cs @@ -0,0 +1,47 @@ +public static class Globals +{ + public const string ProductCodename = "Carbon"; + + public const int + + MinAccountIDLength = 3, + MaxAccountIDLength = 15, + + MinPasswordLength = 5, + MaxPasswordLength = 15, + + MinCharacterNameLength = 3, + MaxCharacterNameLength = 15, + MaxCharacterCount = 4, + + MaxChatLength = 80, + + MaxGroup = 15, + + MaxPets = 5, + + MaxAttackRange = 9, + + MaxDragonLevel = 13, + + ClassWeaponCount = 100, + + FlagIndexCount = 1999, + + MaxConcurrentQuests = 20, + + LogDelay = 10000, + + DataRange = 16;//Was 24 + + public static float Commission = 0.05F; + + public const uint SearchDelay = 500, + ConsignmentLength = 7, + ConsignmentCost = 5000, + MinConsignment = 5000, + MaxConsignment = 50000000, + AuctionCost = 5000, + MinStartingBid = 0, + MaxStartingBid = 50000; +} \ No newline at end of file diff --git a/Shared/Helpers/FileIO.cs b/Shared/Helpers/FileIO.cs new file mode 100644 index 0000000..7e4f03d --- /dev/null +++ b/Shared/Helpers/FileIO.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Shared.Helpers +{ + public static class FileIO + { + public static void OpenScript(string scriptPath, bool useShellExecutable) + { + Process p = new() + { + StartInfo = new ProcessStartInfo(scriptPath) + { + UseShellExecute = useShellExecutable + } + }; + + p.Start(); + } + } +} diff --git a/Shared/Language.cs b/Shared/Language.cs new file mode 100644 index 0000000..edd17ae --- /dev/null +++ b/Shared/Language.cs @@ -0,0 +1,757 @@ +public class GameLanguage +{ + //Client + public static string PetMode_Both = "[Pet: Attack and Move]", + PetMode_MoveOnly = "[Pet: Do Not Attack]", + PetMode_AttackOnly = "[Pet: Do Not Move]", + PetMode_None = "[Pet: Do Not Attack or Move]", + PetMode_FocusMasterTarget = "[Pet: Focus Master Target]", + + AttackMode_Peace = "[Mode: Peaceful]", + AttackMode_Group = "[Mode: Group]", + AttackMode_Guild = "[Mode: Guild]", + AttackMode_EnemyGuild = "[Mode: Enemy Guild]", + AttackMode_RedBrown = "[Mode: Red/Brown]", + AttackMode_All = "[Mode: Attack All]", + + LogOutTip = "Do you want to log out of Legend of Mir 1?", + ExitTip = "Do you want to quit Legend of Mir 1?", + DiedTip = "You have died, Do you want to revive in town?", + DropTip = "Are you sure you want to drop {0}?", + + Inventory = "Inventory ({0})", + Character = "Character ({0})", + Skills = "Skills ({0})", + Quests = "Quests ({0})", + Options = "Options ({0})", + Menu = "Menu", + GameShop = "Game Shop ({0})", + BigMap = "BigMap ({0})", + DuraPanel = "Dura Panel", + Mail = "Mail", + Exit = "Exit ({0})", + LogOut = "Log Out ({0})", + Help = "Help ({0})", + Keybinds = "Keybinds", + Ranking = "Ranking ({0})", + Friends = "Friends ({0})", + Mentor = "Mentor ({0})", + Relationship = "Relationship ({0})", + Groups = "Groups ({0})", + Guild = "Guild ({0})", + Expire = "Expire: {0}", + ExpireNever = "Expire: Never", + ExpirePaused = "Expire: Paused", + Never = "Never", + Trade = "Trade ({0})", + Size = "Size", + ChatSettings = "Chat Settings", + Rotate = "Rotate", + Close = "Close ({0})", + GameMaster = "GameMaster", + + PatchErr = "Could not get Patch Information", + LastOnline = "Last Online", + + Gold = "Gold", + Credit = "Credit", + + YouGained = "You gained {0}.", + + YouGained2 = "You gained {0:###,###,###} {1}", + + ExperienceGained = "Experience Gained {0}", + + ItemDescription = "Item Description", + RequiredLevel = "Required Level : {0}", + RequiredDC = "Required DC : {0}", + RequiredMC = "Required MC : {0}", + RequiredSC = "Required SC : {0}", + ClassRequired = "Class Required : {0}", + + Holy = "Holy: + {0} (+{1})", + Holy2 = "Holy: + {0}", + Accuracy = "Accuracy: + {0} (+{1})", + Accuracy2 = "Accuracy: + {0}", + Agility = "Agility: + {0} (+{1})", + Agility2 = "Agility: + {0}", + DC = "DC + {0}~{1} (+{2})", + DC2 = "DC + {0}~{1}", + MC = "MC + {0}~{1} (+{2})", + MC2 = "MC + {0}~{1}", + SC = "SC + {0}~{1} (+{2})", + SC2 = "SC + {0}~{1}", + Durability = "Durability", + Weight = "W:", + AC = "AC + {0}~{1} (+{2})", + AC2 = "AC + {0}~{1}", + MAC = "MAC + {0}~{1} (+{2})", + MAC2 = "MAC + {0}~{1}", + Luck = "Luck + {0}", + + DeleteCharacter = "Are you sure you want to Delete the character {0}", + CharacterDeleted = "Your character was deleted successfully.", + CharacterCreated = "Your character was created successfully.", + + Resolution = "Resolution", + Autostart = "Auto start", + Usrname = "Username", + Password = "Password", + + ShuttingDown = "Disconnected: Server is shutting down.", + MaxCombine = "Max Combine Count : {0}{1}Shift + Left click to split the stack", + Count = " Count {0}", + ExtraSlots8 = "Are you sure you would like to buy 8 extra slots for 1,000,000 gold?" + + "Next purchase you can unlock 4 extra slots up to a maximum of 40 slots.", + ExtraSlots4 = "Are you sure you would like to unlock 4 extra slots? for gold: {0:###,###}", + + Chat_All = "All", + Chat_Short = "Shout", + Chat_Whisper = "Whisper", + Chat_Lover = "Lover", + Chat_Mentor = "Mentor", + Chat_Group = "Group", + Chat_Guild = "Guild", + ExpandedStorageLocked = "Expanded Storage Locked", + ExtraStorage = "Would you like to rent extra storage for 10 days at a cost of 1,000,000 gold?", + ExtendYourRentalPeriod = "Would you like to extend your rental period for 10 days at a cost of 1,000,000 gold?", + + CannotLeaveGame = "Cannot leave game for {0} seconds", + SelectKey = "Select the Key for: {0}", + + WeaponSpiritFire = "Your weapon is glowed by spirit of fire.", + SpiritsFireDisappeared = "The spirits of fire disappeared.", + WeddingRing = "WeddingRing", + ItemTextFormat = "{0}{1}{2} {3}", + DropAmount = "Drop Amount:", + LowMana = "Not Enough Mana to cast.", + NoCreatures = "You do not own any creatures.", + NoMount = "You do not own a mount.", + NoFishingRod = "You are not holding a fishing rod.", + AttemptingConnect = "Attempting to connect to the server.{0}Attempt:{1}", + + CreatingCharactersDisabled = "Creating new characters is currently disabled.", + InvalidCharacterName = "Your Character Name is not acceptable.", + NoClass = "The class you selected does not exist. Contact a GM for assistance.", + ToManyCharacters = "You cannot make anymore then {0} Characters.", + CharacterNameExists = "A Character with this name already exists.", + WarriorsDes = "Warriors are a class of great strength and vitality. They are not easily killed in battle and have the advantage of being able to use" + + " a variety of heavy weapons and Armour. Therefore, Warriors favor attacks that are based on melee physical damage. They are weak in ranged" + + " attacks, however the variety of equipment that are developed specifically for Warriors complement their weakness in ranged combat.", + WizardDes = "Wizards are a class of low strength and stamina, but have the ability to use powerful spells. Their offensive spells are very effective, but" + + " because it takes time to cast these spells, they're likely to leave themselves open for enemy's attacks. Therefore, the physically weak wizards" + + " must aim to attack their enemies from a safe distance.", + TaoistDes = "Taoists are well disciplined in the study of Astronomy, Medicine, and others aside from Mu-Gong. Rather then directly engaging the enemies, their" + + " specialty lies in assisting their allies with support. Taoists can summon powerful creatures and have a high resistance to magic, and is a class" + + " with well balanced offensive and defensive abilities.", + AssassinDes = "Assassins are members of a secret organization and their history is relatively unknown. They're capable of hiding themselves and performing attacks" + + " while being unseen by others, which naturally makes them excellent at making fast kills. It is necessary for them to avoid being in battles with" + + " multiple enemies due to their weak vitality and strength.", + ArcherDes = "Archers are a class of great accuracy and strength, using their powerful skills with bows to deal extraordinary damage from range. Much like" + + " wizards, they rely on their keen instincts to dodge oncoming attacks as they tend to leave themselves open to frontal attacks. However, their" + + " physical prowess and deadly aim allows them to instil fear into anyone they hit.", + DateSent = "Date Sent : {0}", + Send = "Send", + Reply = "Reply", + Read = "Read", + Delete = "Delete", + BlockList = "Block List", + EnterMailToName = "Please enter the name of the person you would like to mail.", + AddFriend = "Add", + RemoveFriend = "Remove", + FriendMemo = "Memo", + FriendMail = "Mail", + FriendWhisper = "Whisper", + FriendEnterAddName = "Please enter the name of the person you would like to Add.", + FriendEnterBlockName = "Please enter the name of the person you would like to Block.", + AddMentor = "Add Mentor", + RemoveMentorMentee = "Remove Mentor/Mentee", + MentorRequests = "Allow/Disallow Mentor Requests", + MentorEnterName = "Please enter the name of the person you would like to be your Mentor.", + RestedBuff = "Rested{0}Increases Exp Rate by {1}%{2}", + + ItemTypeWeapon = "Weapon", + ItemTypeArmour = "Armour", + ItemTypeHelmet = "Helmet", + ItemTypeNecklace = "Necklace", + ItemTypeBracelet = "Bracelet", + ItemTypeRing = "Ring", + ItemTypePotion = "Potion", + ItemTypeOre = "Ore", + ItemTypeMeat = "Meat", + ItemTypeMaterial = "Material", + ItemTypeScroll = "Scroll", + ItemTypeGem = "Gem", + ItemTypeBook = "Book", + ItemTypeScript = "Script", + ItemTypeQuest = "Quest", + + ItemGradeCommon = "Common", + ItemGradeYangWarrior = "Yang Warrior", + ItemGradeNegativeWarrior = "Negative Warrior", + ItemGradeFireWizard = "Fire Wizard", + ItemGradeCelestialWizard = "Celestial Wizard", + ItemGradeMonkTaoist = "Monk Taoist", + ItemGradeInstructorTaoist = "Instructor Taoist", + NoAccountID = "The AccountID does not exist.", + IncorrectPasswordAccountID = "Incorrect Password and AccountID combination.", + GroupSwitch = "Allow/Disallow Group Requests", + GroupAdd = "Add", + GroupRemove = "Remove", + GroupAddEnterName = "Please enter the name of the person you wish to add.", + GroupRemoveEnterName = "Please enter the name of the person you wish to remove.", + TooHeavyToHold = "It is too heavy to Hold.", + SwitchMarriage = "Allow/Block Marriage", + RequestMarriage = "Request Marriage", + RequestDivorce = "Request Divorce", + MailLover = "Mail Lover", + WhisperLover = "Whisper Lover"; + + //Server + public static string Welcome = "Welcome to the {0} Server.", + OnlinePlayers = "Online Players: {0}", + WeaponLuck = "Luck dwells within your weapon.", + WeaponCurse = "Curse dwells within your weapon.", + WeaponNoEffect = "No effect.", + InventoryIncreased = "Inventory size increased.", + FaceToTrade = "You must face someone to trade.", + NoTownTeleport = "You cannot use Town Teleports here", + CanNotRandom = "You cannot use Random Teleports here", + CanNotDungeon = "You cannot use Dungeon Escapes here", + CannotResurrection = "You cannot use Resurrection Scrolls whilst alive", + CanNotDrop = "You cannot drop items on this map", + NewMail = "New mail has arrived.", + CouldNotFindPlayer = "Could not find player {0}", + BeenPoisoned = "You have been poisoned", + AllowingMentorRequests = "You're now allowing mentor requests.", + BlockingMentorRequests = "You're now blocking mentor requests."; + + //common + public static string LowLevel = "You are not a high enough level.", + LowGold = "Not enough gold.", + LevelUp = "Congratulations! You have leveled up. Your HP and MP have been restored.", + LowDC = "You do not have enough DC.", + LowMC = "You do not have enough MC.", + LowSC = "You do not have enough SC.", + GameName = "Legend of Mir 1 Battle of the King - LOMCN", + ExpandedStorageExpiresOn = "Expanded Storage Expires On", + + NotFemale = "You are not Female.", + NotMale = "You are not Male.", + NotInGuild = "You are not in a guild.", + NoMentorship = "You don't currently have a Mentorship to cancel.", + NoBagSpace = "You do not have enough space."; + + + public static void LoadClientLanguage(string languageIniPath) + { + if (!File.Exists(languageIniPath)) + { + SaveClientLanguage(languageIniPath); + return; + } + + InIReader reader = new InIReader(languageIniPath); + GameLanguage.PetMode_Both = reader.ReadString("Language", "PetMode_Both", GameLanguage.PetMode_Both); + GameLanguage.PetMode_MoveOnly = reader.ReadString("Language", "PetMode_MoveOnly", GameLanguage.PetMode_MoveOnly); + GameLanguage.PetMode_AttackOnly = reader.ReadString("Language", "PetMode_AttackOnly", GameLanguage.PetMode_AttackOnly); + GameLanguage.PetMode_None = reader.ReadString("Language", "PetMode_None", GameLanguage.PetMode_None); + GameLanguage.PetMode_FocusMasterTarget = reader.ReadString("Language", "PetMode_FocusMasterTarget", GameLanguage.PetMode_FocusMasterTarget); + + GameLanguage.AttackMode_Peace = reader.ReadString("Language", "AttackMode_Peace", GameLanguage.AttackMode_Peace); + GameLanguage.AttackMode_Group = reader.ReadString("Language", "AttackMode_Group", GameLanguage.AttackMode_Group); + GameLanguage.AttackMode_Guild = reader.ReadString("Language", "AttackMode_Guild", GameLanguage.AttackMode_Guild); + GameLanguage.AttackMode_EnemyGuild = reader.ReadString("Language", "AttackMode_EnemyGuild", GameLanguage.AttackMode_EnemyGuild); + GameLanguage.AttackMode_RedBrown = reader.ReadString("Language", "AttackMode_RedBrown", GameLanguage.AttackMode_RedBrown); + GameLanguage.AttackMode_All = reader.ReadString("Language", "AttackMode_All", GameLanguage.AttackMode_All); + + GameLanguage.LogOutTip = reader.ReadString("Language", "LogOutTip", GameLanguage.LogOutTip); + GameLanguage.ExitTip = reader.ReadString("Language", "ExitTip", GameLanguage.ExitTip); + GameLanguage.DiedTip = reader.ReadString("Language", "DiedTip", GameLanguage.DiedTip); + GameLanguage.DropTip = reader.ReadString("Language", "DropTip", GameLanguage.DropTip); + + GameLanguage.Inventory = reader.ReadString("Language", "Inventory", GameLanguage.Inventory); + GameLanguage.Character = reader.ReadString("Language", "Character", GameLanguage.Character); + GameLanguage.Skills = reader.ReadString("Language", "Skills", GameLanguage.Skills); + GameLanguage.Quests = reader.ReadString("Language", "Quests", GameLanguage.Quests); + GameLanguage.Options = reader.ReadString("Language", "Options", GameLanguage.Options); + GameLanguage.Menu = reader.ReadString("Language", "Menu", GameLanguage.Menu); + GameLanguage.GameShop = reader.ReadString("Language", "GameShop", GameLanguage.GameShop); + GameLanguage.BigMap = reader.ReadString("Language", "BigMap", GameLanguage.BigMap); + GameLanguage.DuraPanel = reader.ReadString("Language", "DuraPanel", GameLanguage.DuraPanel); + GameLanguage.Mail = reader.ReadString("Language", "Mail", GameLanguage.Mail); + GameLanguage.Exit = reader.ReadString("Language", "Exit", GameLanguage.Exit); + GameLanguage.LogOut = reader.ReadString("Language", "LogOut", GameLanguage.LogOut); + GameLanguage.Help = reader.ReadString("Language", "Help", GameLanguage.Help); + GameLanguage.Keybinds = reader.ReadString("Language", "Keybinds", GameLanguage.Keybinds); + GameLanguage.Ranking = reader.ReadString("Language", "Ranking", GameLanguage.Ranking); + GameLanguage.Friends = reader.ReadString("Language", "Friends", GameLanguage.Friends); + GameLanguage.Mentor = reader.ReadString("Language", "Mentor", GameLanguage.Mentor); + GameLanguage.Relationship = reader.ReadString("Language", "Relationship", GameLanguage.Relationship); + GameLanguage.Groups = reader.ReadString("Language", "Groups", GameLanguage.Groups); + GameLanguage.Guild = reader.ReadString("Language", "Guild", GameLanguage.Guild); + GameLanguage.Trade = reader.ReadString("Language", "Trade", GameLanguage.Trade); + GameLanguage.Size = reader.ReadString("Language", "Size", GameLanguage.Size); + GameLanguage.ChatSettings = reader.ReadString("Language", "ChatSettings", GameLanguage.ChatSettings); + GameLanguage.Rotate = reader.ReadString("Language", "Rotate", GameLanguage.Rotate); + GameLanguage.Close = reader.ReadString("Language", "Close", GameLanguage.Close); + GameLanguage.GameMaster = reader.ReadString("Language", "GameMaster", GameLanguage.GameMaster); + GameLanguage.Expire = reader.ReadString("Language", "Expire", GameLanguage.Expire); + GameLanguage.ExpireNever = reader.ReadString("Language", "ExpireNever", GameLanguage.ExpireNever); + GameLanguage.ExpirePaused = reader.ReadString("Language", "ExpirePaused", GameLanguage.ExpirePaused); + GameLanguage.Never = reader.ReadString("Language", "Never", GameLanguage.Never); + + GameLanguage.PatchErr = reader.ReadString("Language", "PatchErr", GameLanguage.PatchErr); + GameLanguage.LastOnline = reader.ReadString("Language", "LastOnline", GameLanguage.LastOnline); + + GameLanguage.LowLevel = reader.ReadString("Language", "LowLevel", GameLanguage.LowLevel); + GameLanguage.LowGold = reader.ReadString("Language", "LowGold", GameLanguage.LowGold); + GameLanguage.LowDC = reader.ReadString("Language", "LowDC", GameLanguage.LowDC); + GameLanguage.LowMC = reader.ReadString("Language", "LowMC", GameLanguage.LowMC); + GameLanguage.LowSC = reader.ReadString("Language", "LowSC", GameLanguage.LowSC); + + GameLanguage.Gold = reader.ReadString("Language", "Gold", GameLanguage.Gold); + GameLanguage.Credit = reader.ReadString("Language", "Credit", GameLanguage.Credit); + + GameLanguage.YouGained = reader.ReadString("Language", "YouGained", GameLanguage.YouGained); + GameLanguage.YouGained2 = reader.ReadString("Language", "YouGained2", GameLanguage.YouGained2); + GameLanguage.ExperienceGained = reader.ReadString("Language", "ExperienceGained", GameLanguage.ExperienceGained); + GameLanguage.LevelUp = reader.ReadString("Language", "LevelUp", GameLanguage.LevelUp); + + GameLanguage.ItemDescription = reader.ReadString("Language", "ItemDescription", GameLanguage.ItemDescription); + GameLanguage.RequiredLevel = reader.ReadString("Language", "RequiredLevel", GameLanguage.RequiredLevel); + GameLanguage.RequiredDC = reader.ReadString("Language", "RequiredDC", GameLanguage.RequiredDC); + GameLanguage.RequiredMC = reader.ReadString("Language", "RequiredMC", GameLanguage.RequiredMC); + GameLanguage.RequiredSC = reader.ReadString("Language", "RequiredSC", GameLanguage.RequiredSC); + GameLanguage.ClassRequired = reader.ReadString("Language", "ClassRequired", GameLanguage.ClassRequired); + GameLanguage.Holy = reader.ReadString("Language", "Holy", GameLanguage.Holy); + GameLanguage.Holy2 = reader.ReadString("Language", "Holy2", GameLanguage.Holy2); + GameLanguage.Accuracy = reader.ReadString("Language", "Accuracy", GameLanguage.Accuracy); + GameLanguage.Accuracy2 = reader.ReadString("Language", "Accuracy2", GameLanguage.Accuracy2); + GameLanguage.Agility = reader.ReadString("Language", "Agility", GameLanguage.Agility); + GameLanguage.Agility2 = reader.ReadString("Language", "Agility2", GameLanguage.Agility2); + GameLanguage.DC = reader.ReadString("Language", "DC", GameLanguage.DC); + GameLanguage.DC2 = reader.ReadString("Language", "DC2", GameLanguage.DC2); + GameLanguage.MC = reader.ReadString("Language", "MC", GameLanguage.MC); + GameLanguage.MC2 = reader.ReadString("Language", "MC2", GameLanguage.MC2); + GameLanguage.SC = reader.ReadString("Language", "SC", GameLanguage.SC); + GameLanguage.SC2 = reader.ReadString("Language", "SC2", GameLanguage.SC2); + GameLanguage.Durability = reader.ReadString("Language", "Durability", GameLanguage.Durability); + GameLanguage.Weight = reader.ReadString("Language", "Weight", GameLanguage.Weight); + GameLanguage.AC = reader.ReadString("Language", "AC", GameLanguage.AC); + GameLanguage.AC2 = reader.ReadString("Language", "AC2", GameLanguage.AC2); + GameLanguage.MAC = reader.ReadString("Language", "MAC", GameLanguage.MAC); + GameLanguage.MAC2 = reader.ReadString("Language", "MAC2", GameLanguage.MAC2); + GameLanguage.Luck = reader.ReadString("Language", "Luck", GameLanguage.Luck); + + GameLanguage.DeleteCharacter = reader.ReadString("Language", "DeleteCharacter", GameLanguage.DeleteCharacter); + GameLanguage.CharacterDeleted = reader.ReadString("Language", "CharacterDeleted", GameLanguage.CharacterDeleted); + GameLanguage.CharacterCreated = reader.ReadString("Language", "CharacterCreated", GameLanguage.CharacterCreated); + + GameLanguage.Resolution = reader.ReadString("Language", "Resolution", GameLanguage.Resolution); + GameLanguage.Autostart = reader.ReadString("Language", "Autostart", GameLanguage.Autostart); + GameLanguage.Usrname = reader.ReadString("Language", "Usrname", GameLanguage.Usrname); + GameLanguage.Password = reader.ReadString("Language", "Password", GameLanguage.Password); + + GameLanguage.ShuttingDown = reader.ReadString("Language", "ShuttingDown", GameLanguage.ShuttingDown); + + GameLanguage.MaxCombine = reader.ReadString("Language", "MaxCombine", GameLanguage.MaxCombine); + GameLanguage.Count = reader.ReadString("Language", "Count", GameLanguage.Count); + GameLanguage.ExtraSlots8 = reader.ReadString("Language", "ExtraSlots8", GameLanguage.ExtraSlots8); + GameLanguage.ExtraSlots4 = reader.ReadString("Language", "ExtraSlots4", GameLanguage.ExtraSlots4); + + GameLanguage.Chat_All = reader.ReadString("Language", "Chat_All", GameLanguage.Chat_All); + GameLanguage.Chat_Short = reader.ReadString("Language", "Chat_Short", GameLanguage.Chat_Short); + GameLanguage.Chat_Whisper = reader.ReadString("Language", "Chat_Whisper", GameLanguage.Chat_Whisper); + GameLanguage.Chat_Lover = reader.ReadString("Language", "Chat_Lover", GameLanguage.Chat_Lover); + GameLanguage.Chat_Mentor = reader.ReadString("Language", "Chat_Mentor", GameLanguage.Chat_Mentor); + GameLanguage.Chat_Group = reader.ReadString("Language", "Chat_Group", GameLanguage.Chat_Group); + GameLanguage.Chat_Guild = reader.ReadString("Language", "Chat_Guild", GameLanguage.Chat_Guild); + GameLanguage.ExpandedStorageLocked = reader.ReadString("Language", "ExpandedStorageLocked", GameLanguage.ExpandedStorageLocked); + GameLanguage.ExtraStorage = reader.ReadString("Language", "ExtraStorage", GameLanguage.ExtraStorage); + GameLanguage.ExtendYourRentalPeriod = reader.ReadString("Language", "ExtendYourRentalPeriod", GameLanguage.ExtendYourRentalPeriod); + GameLanguage.ExpandedStorageExpiresOn = reader.ReadString("Language", "ExpandedStorageExpiresOn", GameLanguage.ExpandedStorageExpiresOn); + GameLanguage.GameName = reader.ReadString("Language", "GameName", GameLanguage.GameName); + GameLanguage.CannotLeaveGame = reader.ReadString("Language", "CannotLeaveGame", GameLanguage.CannotLeaveGame); + GameLanguage.SelectKey = reader.ReadString("Language", "SelectKey", GameLanguage.SelectKey); + GameLanguage.WeaponSpiritFire = reader.ReadString("Language", "WeaponSpiritFire", GameLanguage.WeaponSpiritFire); + GameLanguage.SpiritsFireDisappeared = reader.ReadString("Language", "SpiritsFireDisappeared", GameLanguage.SpiritsFireDisappeared); + GameLanguage.WeddingRing = reader.ReadString("Language", "WeddingRing", GameLanguage.WeddingRing); + GameLanguage.ItemTextFormat = reader.ReadString("Language", "ItemTextFormat", GameLanguage.ItemTextFormat); + GameLanguage.DropAmount = reader.ReadString("Language", "DropAmount", GameLanguage.DropAmount); + GameLanguage.LowMana = reader.ReadString("Language", "LowMana", GameLanguage.LowMana); + + GameLanguage.NotFemale = reader.ReadString("Language", "NotFemale", GameLanguage.NotFemale); + GameLanguage.NotMale = reader.ReadString("Language", "NotMale", GameLanguage.NotMale); + GameLanguage.NoCreatures = reader.ReadString("Language", "NoCreatures", GameLanguage.NoCreatures); + GameLanguage.NoMount = reader.ReadString("Language", "NoMount", GameLanguage.NoMount); + GameLanguage.NoFishingRod = reader.ReadString("Language", "NoFishingRod", GameLanguage.NoFishingRod); + GameLanguage.NotInGuild = reader.ReadString("Language", "NotInGuild", GameLanguage.NotInGuild); + GameLanguage.NoBagSpace = reader.ReadString("Language", "NoBagSpace", GameLanguage.NoBagSpace); + GameLanguage.AttemptingConnect = reader.ReadString("Language", "AttemptingConnect", GameLanguage.AttemptingConnect); + + GameLanguage.CreatingCharactersDisabled = reader.ReadString("Language", "CreatingCharactersDisabled", GameLanguage.CreatingCharactersDisabled); + GameLanguage.InvalidCharacterName = reader.ReadString("Language", "InvalidCharacterName", GameLanguage.InvalidCharacterName); + GameLanguage.NoClass = reader.ReadString("Language", "NoClass", GameLanguage.NoClass); + GameLanguage.ToManyCharacters = reader.ReadString("Language", "ToManyCharacters", GameLanguage.ToManyCharacters); + GameLanguage.CharacterNameExists = reader.ReadString("Language", "CharacterNameExists", GameLanguage.CharacterNameExists); + + GameLanguage.WarriorsDes = reader.ReadString("Language", "WarriorsDes", GameLanguage.WarriorsDes); + GameLanguage.WizardDes = reader.ReadString("Language", "WizardDes", GameLanguage.WizardDes); + GameLanguage.TaoistDes = reader.ReadString("Language", "TaoistDes", GameLanguage.TaoistDes); + GameLanguage.AssassinDes = reader.ReadString("Language", "AssassinDes", GameLanguage.AssassinDes); + GameLanguage.ArcherDes = reader.ReadString("Language", "ArcherDes", GameLanguage.ArcherDes); + + GameLanguage.DateSent = reader.ReadString("Language", "DateSent", GameLanguage.DateSent); + GameLanguage.Send = reader.ReadString("Language", "Send", GameLanguage.Send); + GameLanguage.Reply = reader.ReadString("Language", "Reply", GameLanguage.Reply); + GameLanguage.Read = reader.ReadString("Language", "Read", GameLanguage.Read); + GameLanguage.Delete = reader.ReadString("Language", "Delete", GameLanguage.Delete); + GameLanguage.BlockList = reader.ReadString("Language", "BlockList", GameLanguage.BlockList); + GameLanguage.EnterMailToName = reader.ReadString("Language", "EnterMailToName", GameLanguage.EnterMailToName); + GameLanguage.BeenPoisoned = reader.ReadString("Language", "BeenPoisoned", GameLanguage.BeenPoisoned); + GameLanguage.AddFriend = reader.ReadString("Language", "AddFriend", GameLanguage.AddFriend); + GameLanguage.RemoveFriend = reader.ReadString("Language", "RemoveFriend", GameLanguage.RemoveFriend); + GameLanguage.FriendMemo = reader.ReadString("Language", "FriendMemo", GameLanguage.FriendMemo); + GameLanguage.FriendMail = reader.ReadString("Language", "FriendMail", GameLanguage.FriendMail); + GameLanguage.FriendWhisper = reader.ReadString("Language", "FriendWhisper", GameLanguage.FriendWhisper); + GameLanguage.FriendEnterAddName = reader.ReadString("Language", "FriendEnterAddName", GameLanguage.FriendEnterAddName); + GameLanguage.FriendEnterBlockName = reader.ReadString("Language", "FriendEnterBlockName", GameLanguage.FriendEnterBlockName); + GameLanguage.AddMentor = reader.ReadString("Language", "AddMentor", GameLanguage.AddMentor); + GameLanguage.RemoveMentorMentee = reader.ReadString("Language", "RemoveMentorMentee", GameLanguage.RemoveMentorMentee); + GameLanguage.MentorRequests = reader.ReadString("Language", "MentorRequests", GameLanguage.MentorRequests); + GameLanguage.MentorEnterName = reader.ReadString("Language", "MentorEnterName", GameLanguage.MentorEnterName); + GameLanguage.NoMentorship = reader.ReadString("Language", "NoMentorship", GameLanguage.NoMentorship); + GameLanguage.RestedBuff = reader.ReadString("Language", "RestedBuff", GameLanguage.RestedBuff); + + GameLanguage.ItemTypeWeapon = reader.ReadString("Language", "ItemTypeWeapon", GameLanguage.ItemTypeWeapon); + GameLanguage.ItemTypeArmour = reader.ReadString("Language", "ItemTypeArmour", GameLanguage.ItemTypeArmour); + GameLanguage.ItemTypeHelmet = reader.ReadString("Language", "ItemTypeHelmet", GameLanguage.ItemTypeHelmet); + GameLanguage.ItemTypeNecklace = reader.ReadString("Language", "ItemTypeNecklace", GameLanguage.ItemTypeNecklace); + GameLanguage.ItemTypeBracelet = reader.ReadString("Language", "ItemTypeBracelet", GameLanguage.ItemTypeBracelet); + GameLanguage.ItemTypeRing = reader.ReadString("Language", "ItemTypeRing", GameLanguage.ItemTypeRing); + GameLanguage.ItemTypePotion = reader.ReadString("Language", "ItemTypePotion", GameLanguage.ItemTypePotion); + GameLanguage.ItemTypeOre = reader.ReadString("Language", "ItemTypeOre", GameLanguage.ItemTypeOre); + GameLanguage.ItemTypeMeat = reader.ReadString("Language", "ItemTypeMeat", GameLanguage.ItemTypeMeat); + GameLanguage.ItemTypeMaterial = reader.ReadString("Language", "ItemTypeCraftingMaterial", GameLanguage.ItemTypeMaterial); + GameLanguage.ItemTypeScroll = reader.ReadString("Language", "ItemTypeScroll", GameLanguage.ItemTypeScroll); + GameLanguage.ItemTypeGem = reader.ReadString("Language", "ItemTypeGem", GameLanguage.ItemTypeGem); + GameLanguage.ItemTypeBook = reader.ReadString("Language", "ItemTypeBook", GameLanguage.ItemTypeBook); + GameLanguage.ItemTypeScript = reader.ReadString("Language", "ItemTypeScript", GameLanguage.ItemTypeScript); + GameLanguage.ItemTypeQuest = reader.ReadString("Language", "ItemTypeQuest", GameLanguage.ItemTypeQuest); + + GameLanguage.ItemGradeCommon = reader.ReadString("Language", "ItemGradeCommon", GameLanguage.ItemGradeCommon); + GameLanguage.ItemGradeYangWarrior = reader.ReadString("Language", "ItemGradeYangWarrior", GameLanguage.ItemGradeYangWarrior); + GameLanguage.ItemGradeNegativeWarrior = reader.ReadString("Language", "ItemGradeNegativeWarrior", GameLanguage.ItemGradeNegativeWarrior); + GameLanguage.ItemGradeFireWizard = reader.ReadString("Language", "ItemGradeFireWizard", GameLanguage.ItemGradeFireWizard); + GameLanguage.ItemGradeCelestialWizard = reader.ReadString("Language", "ItemGradeCelestialWizard", GameLanguage.ItemGradeCelestialWizard); + GameLanguage.ItemGradeMonkTaoist = reader.ReadString("Language", "ItemGradeMonkTaoist", GameLanguage.ItemGradeMonkTaoist); + GameLanguage.ItemGradeInstructorTaoist = reader.ReadString("Language", "ItemGradeInstructorTaoist", GameLanguage.ItemGradeInstructorTaoist); + + GameLanguage.NoAccountID = reader.ReadString("Language", "NoAccountID", GameLanguage.NoAccountID); + GameLanguage.IncorrectPasswordAccountID = reader.ReadString("Language", "IncorrectPasswordAccountID", GameLanguage.IncorrectPasswordAccountID); + GameLanguage.GroupSwitch = reader.ReadString("Language", "GroupSwitch", GameLanguage.GroupSwitch); + GameLanguage.GroupAdd = reader.ReadString("Language", "GroupAdd", GameLanguage.GroupAdd); + GameLanguage.GroupRemove = reader.ReadString("Language", "GroupRemove", GameLanguage.GroupRemove); + GameLanguage.GroupAddEnterName = reader.ReadString("Language", "GroupAddEnterName", GameLanguage.GroupAddEnterName); + GameLanguage.GroupRemoveEnterName = reader.ReadString("Language", "GroupRemoveEnterName", GameLanguage.GroupRemoveEnterName); + GameLanguage.TooHeavyToHold = reader.ReadString("Language", "TooHeavyToHold", GameLanguage.TooHeavyToHold); + GameLanguage.SwitchMarriage = reader.ReadString("Language", "SwitchMarriage", GameLanguage.SwitchMarriage); + GameLanguage.RequestMarriage = reader.ReadString("Language", "RequestMarriage", GameLanguage.RequestMarriage); + GameLanguage.RequestDivorce = reader.ReadString("Language", "RequestDivorce", GameLanguage.RequestDivorce); + GameLanguage.MailLover = reader.ReadString("Language", "MailLover", GameLanguage.MailLover); + GameLanguage.WhisperLover = reader.ReadString("Language", "WhisperLover", GameLanguage.WhisperLover); + } + + + public static void SaveClientLanguage(string languageIniPath) + { + File.Delete(languageIniPath); + InIReader reader = new InIReader(languageIniPath); + reader.Write("Language", "PetMode_Both", GameLanguage.PetMode_Both); + reader.Write("Language", "PetMode_MoveOnly", GameLanguage.PetMode_MoveOnly); + reader.Write("Language", "PetMode_AttackOnly", GameLanguage.PetMode_AttackOnly); + reader.Write("Language", "PetMode_None", GameLanguage.PetMode_None); + reader.Write("Language", "PetMode_FocusMasterTarget", GameLanguage.PetMode_FocusMasterTarget); + + reader.Write("Language", "AttackMode_Peace", GameLanguage.AttackMode_Peace); + reader.Write("Language", "AttackMode_Group", GameLanguage.AttackMode_Group); + reader.Write("Language", "AttackMode_Guild", GameLanguage.AttackMode_Guild); + reader.Write("Language", "AttackMode_EnemyGuild", GameLanguage.AttackMode_EnemyGuild); + reader.Write("Language", "AttackMode_RedBrown", GameLanguage.AttackMode_RedBrown); + reader.Write("Language", "AttackMode_All", GameLanguage.AttackMode_All); + + reader.Write("Language", "LogOutTip", GameLanguage.LogOutTip); + reader.Write("Language", "ExitTip", GameLanguage.ExitTip); + reader.Write("Language", "DiedTip", GameLanguage.DiedTip); + reader.Write("Language", "DropTip", GameLanguage.DropTip); + + reader.Write("Language", "Inventory", GameLanguage.Inventory); + reader.Write("Language", "Character", GameLanguage.Character); + reader.Write("Language", "Skills", GameLanguage.Skills); + reader.Write("Language", "Quests", GameLanguage.Quests); + reader.Write("Language", "Options", GameLanguage.Options); + reader.Write("Language", "Menu", GameLanguage.Menu); + reader.Write("Language", "GameShop", GameLanguage.GameShop); + reader.Write("Language", "BigMap", GameLanguage.BigMap); + reader.Write("Language", "DuraPanel", GameLanguage.DuraPanel); + reader.Write("Language", "Mail", GameLanguage.Mail); + reader.Write("Language", "Exit", GameLanguage.Exit); + reader.Write("Language", "LogOut", GameLanguage.LogOut); + reader.Write("Language", "Help", GameLanguage.Help); + reader.Write("Language", "Keybinds", GameLanguage.Keybinds); + reader.Write("Language", "Ranking", GameLanguage.Ranking); + reader.Write("Language", "Friends", GameLanguage.Friends); + reader.Write("Language", "Mentor", GameLanguage.Mentor); + reader.Write("Language", "Relationship", GameLanguage.Relationship); + reader.Write("Language", "Groups", GameLanguage.Groups); + reader.Write("Language", "Guild", GameLanguage.Guild); + reader.Write("Language", "Trade", GameLanguage.Trade); + reader.Write("Language", "Size", GameLanguage.Size); + reader.Write("Language", "ChatSettings", GameLanguage.ChatSettings); + reader.Write("Language", "Rotate", GameLanguage.Rotate); + reader.Write("Language", "Close", GameLanguage.Close); + reader.Write("Language", "GameMaster", GameLanguage.GameMaster); + + + reader.Write("Language", "Expire", GameLanguage.Expire); + reader.Write("Language", "ExpireNever", GameLanguage.ExpireNever); + reader.Write("Language", "ExpirePaused", GameLanguage.ExpirePaused); + reader.Write("Language", "Never", GameLanguage.Never); + reader.Write("Language", "PatchErr", GameLanguage.PatchErr); + reader.Write("Language", "LastOnline", GameLanguage.LastOnline); + + reader.Write("Language", "LowLevel", GameLanguage.LowLevel); + reader.Write("Language", "LowGold", GameLanguage.LowGold); + reader.Write("Language", "LowDC", GameLanguage.LowDC); + reader.Write("Language", "LowMC", GameLanguage.LowMC); + reader.Write("Language", "LowSC", GameLanguage.LowSC); + + reader.Write("Language", "Gold", GameLanguage.Gold); + reader.Write("Language", "Credit", GameLanguage.Credit); + + reader.Write("Language", "YouGained", GameLanguage.YouGained); + reader.Write("Language", "YouGained2", GameLanguage.YouGained2); + reader.Write("Language", "ExperienceGained", GameLanguage.ExperienceGained); + reader.Write("Language", "LevelUp", GameLanguage.LevelUp); + + reader.Write("Language", "ItemDescription", GameLanguage.ItemDescription); + reader.Write("Language", "RequiredLevel", GameLanguage.RequiredLevel); + reader.Write("Language", "RequiredDC", GameLanguage.RequiredDC); + reader.Write("Language", "RequiredMC", GameLanguage.RequiredMC); + reader.Write("Language", "RequiredSC", GameLanguage.RequiredSC); + reader.Write("Language", "ClassRequired", GameLanguage.ClassRequired); + reader.Write("Language", "Holy", GameLanguage.Holy); + reader.Write("Language", "Accuracy", GameLanguage.Accuracy); + reader.Write("Language", "Agility", GameLanguage.Agility); + reader.Write("Language", "DC", GameLanguage.DC); + reader.Write("Language", "MC", GameLanguage.MC); + reader.Write("Language", "SC", GameLanguage.SC); + reader.Write("Language", "Durability", GameLanguage.Durability); + reader.Write("Language", "Weight", GameLanguage.Weight); + reader.Write("Language", "AC", GameLanguage.AC); + reader.Write("Language", "MAC", GameLanguage.MAC); + reader.Write("Language", "Luck", GameLanguage.Luck); + + reader.Write("Language", "DeleteCharacter", GameLanguage.DeleteCharacter); + reader.Write("Language", "CharacterDeleted", GameLanguage.CharacterDeleted); + reader.Write("Language", "CharacterCreated", GameLanguage.CharacterCreated); + + reader.Write("Language", "Resolution", GameLanguage.Resolution); + reader.Write("Language", "Autostart", GameLanguage.Autostart); + reader.Write("Language", "Usrname", GameLanguage.Usrname); + reader.Write("Language", "Password", GameLanguage.Password); + + reader.Write("Language", "ShuttingDown", GameLanguage.ShuttingDown); + + reader.Write("Language", "MaxCombine", GameLanguage.MaxCombine); + reader.Write("Language", "Count", GameLanguage.Count); + reader.Write("Language", "ExtraSlots8", GameLanguage.ExtraSlots8); + reader.Write("Language", "ExtraSlots4", GameLanguage.ExtraSlots4); + + reader.Write("Language", "Chat_All", GameLanguage.Chat_All); + reader.Write("Language", "Chat_Short", GameLanguage.Chat_Short); + reader.Write("Language", "Chat_Whisper", GameLanguage.Chat_Whisper); + reader.Write("Language", "Chat_Lover", GameLanguage.Chat_Lover); + reader.Write("Language", "Chat_Mentor", GameLanguage.Chat_Mentor); + reader.Write("Language", "Chat_Group", GameLanguage.Chat_Group); + reader.Write("Language", "Chat_Guild", GameLanguage.Chat_Guild); + reader.Write("Language", "ExpandedStorageLocked", GameLanguage.ExpandedStorageLocked); + reader.Write("Language", "ExtraStorage", GameLanguage.ExtraStorage); + reader.Write("Language", "ExtendYourRentalPeriod", GameLanguage.ExtendYourRentalPeriod); + reader.Write("Language", "ExpandedStorageExpiresOn", GameLanguage.ExpandedStorageExpiresOn); + reader.Write("Language", "GameName", GameLanguage.GameName); + reader.Write("Language", "CannotLeaveGame", GameLanguage.CannotLeaveGame); + reader.Write("Language", "SelectKey", GameLanguage.SelectKey); + reader.Write("Language", "WeaponSpiritFire", GameLanguage.WeaponSpiritFire); + reader.Write("Language", "SpiritsFireDisappeared", GameLanguage.SpiritsFireDisappeared); + reader.Write("Language", "WeddingRing", GameLanguage.WeddingRing); + reader.Write("Language", "ItemTextFormat", GameLanguage.ItemTextFormat); + reader.Write("Language", "DropAmount", GameLanguage.DropAmount); + reader.Write("Language", "LowMana", GameLanguage.LowMana); + + reader.Write("Language", "NotFemale", GameLanguage.NotFemale); + reader.Write("Language", "NotMale", GameLanguage.NotMale); + reader.Write("Language", "NoCreatures", GameLanguage.NoCreatures); + reader.Write("Language", "NoMount", GameLanguage.NoMount); + reader.Write("Language", "NoFishingRod", GameLanguage.NoFishingRod); + reader.Write("Language", "NotInGuild", GameLanguage.NotInGuild); + reader.Write("Language", "AttemptingConnect", GameLanguage.AttemptingConnect); + reader.Write("Language", "NoBagSpace", GameLanguage.NoBagSpace); + + reader.Write("Language", "CreatingCharactersDisabled", GameLanguage.CreatingCharactersDisabled); + reader.Write("Language", "InvalidCharacterName", GameLanguage.InvalidCharacterName); + reader.Write("Language", "NoClass", GameLanguage.NoClass); + reader.Write("Language", "ToManyCharacters", GameLanguage.ToManyCharacters); + reader.Write("Language", "CharacterNameExists", GameLanguage.CharacterNameExists); + + reader.Write("Language", "WarriorsDes", GameLanguage.WarriorsDes); + reader.Write("Language", "WizardDes", GameLanguage.WizardDes); + reader.Write("Language", "TaoistDes", GameLanguage.TaoistDes); + reader.Write("Language", "AssassinDes", GameLanguage.AssassinDes); + reader.Write("Language", "ArcherDes", GameLanguage.ArcherDes); + + reader.Write("Language", "DateSent", GameLanguage.DateSent); + reader.Write("Language", "Send", GameLanguage.Send); + reader.Write("Language", "Reply", GameLanguage.Reply); + reader.Write("Language", "Read", GameLanguage.Read); + reader.Write("Language", "Delete", GameLanguage.Delete); + reader.Write("Language", "BlockList", GameLanguage.BlockList); + reader.Write("Language", "EnterMailToName", GameLanguage.EnterMailToName); + reader.Write("Language", "BeenPoisoned", GameLanguage.BeenPoisoned); + reader.Write("Language", "AddFriend", GameLanguage.AddFriend); + reader.Write("Language", "RemoveFriend", GameLanguage.RemoveFriend); + reader.Write("Language", "FriendMemo", GameLanguage.FriendMemo); + reader.Write("Language", "FriendMail", GameLanguage.FriendMail); + reader.Write("Language", "FriendWhisper", GameLanguage.FriendWhisper); + reader.Write("Language", "FriendEnterAddName", GameLanguage.FriendEnterAddName); + reader.Write("Language", "FriendEnterBlockName", GameLanguage.FriendEnterBlockName); + reader.Write("Language", "AddMentor", GameLanguage.AddMentor); + reader.Write("Language", "RemoveMentorMentee", GameLanguage.RemoveMentorMentee); + reader.Write("Language", "MentorRequests", GameLanguage.MentorRequests); + reader.Write("Language", "MentorEnterName", GameLanguage.MentorEnterName); + reader.Write("Language", "NoMentorship", GameLanguage.NoMentorship); + reader.Write("Language", "RestedBuff", GameLanguage.RestedBuff); + + reader.Write("Language", "ItemTypeWeapon", GameLanguage.ItemTypeWeapon); + reader.Write("Language", "ItemTypeArmour", GameLanguage.ItemTypeArmour); + reader.Write("Language", "ItemTypeHelmet", GameLanguage.ItemTypeHelmet); + reader.Write("Language", "ItemTypeNecklace", GameLanguage.ItemTypeNecklace); + reader.Write("Language", "ItemTypeBracelet", GameLanguage.ItemTypeBracelet); + reader.Write("Language", "ItemTypeRing", GameLanguage.ItemTypeRing); + reader.Write("Language", "ItemTypePotion", GameLanguage.ItemTypePotion); + reader.Write("Language", "ItemTypeOre", GameLanguage.ItemTypeOre); + reader.Write("Language", "ItemTypeMeat", GameLanguage.ItemTypeMeat); + reader.Write("Language", "ItemTypeCraftingMaterial", GameLanguage.ItemTypeMaterial); + reader.Write("Language", "ItemTypeScroll", GameLanguage.ItemTypeScroll); + reader.Write("Language", "ItemTypeGem", GameLanguage.ItemTypeGem); + reader.Write("Language", "ItemTypeBook", GameLanguage.ItemTypeBook); + reader.Write("Language", "ItemTypeScript", GameLanguage.ItemTypeScript); + reader.Write("Language", "ItemTypeQuest", GameLanguage.ItemTypeQuest); + + reader.Write("Language", "ItemGradeCommon", GameLanguage.ItemGradeCommon); + reader.Write("Language", "ItemGradeYangWarrior", GameLanguage.ItemGradeYangWarrior); + reader.Write("Language", "ItemGradeNegativeWarrior", GameLanguage.ItemGradeNegativeWarrior); + reader.Write("Language", "ItemGradeFireWizard", GameLanguage.ItemGradeFireWizard); + reader.Write("Language", "ItemGradeCelestialWizard", GameLanguage.ItemGradeCelestialWizard); + reader.Write("Language", "ItemGradeMonkTaoist", GameLanguage.ItemGradeMonkTaoist); + reader.Write("Language", "ItemGradeInstructorTaoist", GameLanguage.ItemGradeInstructorTaoist); + + reader.Write("Language", "NoAccountID", GameLanguage.NoAccountID); + reader.Write("Language", "IncorrectPasswordAccountID", GameLanguage.IncorrectPasswordAccountID); + reader.Write("Language", "GroupSwitch", GameLanguage.GroupSwitch); + reader.Write("Language", "GroupAdd", GameLanguage.GroupAdd); + reader.Write("Language", "GroupRemove", GameLanguage.GroupRemove); + reader.Write("Language", "GroupAddEnterName", GameLanguage.GroupAddEnterName); + reader.Write("Language", "GroupRemoveEnterName", GameLanguage.GroupRemoveEnterName); + reader.Write("Language", "TooHeavyToHold", GameLanguage.TooHeavyToHold); + reader.Write("Language", "SwitchMarriage", GameLanguage.SwitchMarriage); + reader.Write("Language", "RequestMarriage", GameLanguage.RequestMarriage); + reader.Write("Language", "RequestDivorce", GameLanguage.RequestDivorce); + reader.Write("Language", "MailLover", GameLanguage.MailLover); + reader.Write("Language", "WhisperLover", GameLanguage.WhisperLover); + } + + + public static void LoadServerLanguage(string languageIniPath) + { + if (!File.Exists(languageIniPath)) + { + SaveServerLanguage(languageIniPath); + return; + } + InIReader reader = new InIReader(languageIniPath); + GameLanguage.Welcome = reader.ReadString("Language", "Welcome", GameLanguage.Welcome); + GameLanguage.OnlinePlayers = reader.ReadString("Language", "OnlinePlayers", GameLanguage.OnlinePlayers); + GameLanguage.LowLevel = reader.ReadString("Language", "LowLevel", GameLanguage.LowLevel); + GameLanguage.LowGold = reader.ReadString("Language", "LowGold", GameLanguage.LowGold); + GameLanguage.LowDC = reader.ReadString("Language", "LowDC", GameLanguage.LowDC); + GameLanguage.LowMC = reader.ReadString("Language", "LowMC", GameLanguage.LowMC); + GameLanguage.LowSC = reader.ReadString("Language", "LowSC", GameLanguage.LowSC); + + GameLanguage.LevelUp = reader.ReadString("Language", "LevelUp", GameLanguage.LevelUp); + + GameLanguage.WeaponLuck = reader.ReadString("Language", "WeaponLuck", GameLanguage.WeaponLuck); + GameLanguage.WeaponCurse = reader.ReadString("Language", "WeaponCurse", GameLanguage.WeaponCurse); + GameLanguage.WeaponNoEffect = reader.ReadString("Language", "WeaponNoEffect", GameLanguage.WeaponNoEffect); + + GameLanguage.InventoryIncreased = reader.ReadString("Language", "InventoryIncreased", GameLanguage.InventoryIncreased); + GameLanguage.ExpandedStorageExpiresOn = reader.ReadString("Language", "ExpandedStorageExpiresOn", GameLanguage.ExpandedStorageExpiresOn); + GameLanguage.GameName = reader.ReadString("Language", "GameName", GameLanguage.GameName); + GameLanguage.FaceToTrade = reader.ReadString("Language", "FaceToTrade", GameLanguage.FaceToTrade); + GameLanguage.NoTownTeleport = reader.ReadString("Language", "NoTownTeleport", GameLanguage.NoTownTeleport); + GameLanguage.CanNotRandom = reader.ReadString("Language", "CanNotRandom", GameLanguage.CanNotRandom); + GameLanguage.CanNotDungeon = reader.ReadString("Language", "CanNotDungeon", GameLanguage.CanNotDungeon); + GameLanguage.CannotResurrection = reader.ReadString("Language", "CannotResurrection", GameLanguage.CannotResurrection); + GameLanguage.CanNotDrop = reader.ReadString("Language", "CanNotDrop", GameLanguage.CanNotDrop); + + GameLanguage.NotFemale = reader.ReadString("Language", "NotFemale", GameLanguage.NotFemale); + GameLanguage.NotMale = reader.ReadString("Language", "NotMale", GameLanguage.NotMale); + GameLanguage.NotInGuild = reader.ReadString("Language", "NotInGuild", GameLanguage.NotInGuild); + GameLanguage.NewMail = reader.ReadString("Language", "NewMail", GameLanguage.NewMail); + GameLanguage.CouldNotFindPlayer = reader.ReadString("Language", "CouldNotFindPlayer", GameLanguage.CouldNotFindPlayer); + GameLanguage.NoMentorship = reader.ReadString("Language", "NoMentorship", GameLanguage.NoMentorship); + GameLanguage.NoBagSpace = reader.ReadString("Language", "NoBagSpace", GameLanguage.NoBagSpace); + GameLanguage.AllowingMentorRequests = reader.ReadString("Language", "AllowingMentorRequests", GameLanguage.AllowingMentorRequests); + GameLanguage.BlockingMentorRequests = reader.ReadString("Language", "BlockingMentorRequests", GameLanguage.BlockingMentorRequests); + } + + public static void SaveServerLanguage(string languageIniPath) + { + File.Delete(languageIniPath); + InIReader reader = new InIReader(languageIniPath); + reader.Write("Language", "Welcome", GameLanguage.Welcome); + reader.Write("Language", "OnlinePlayers", GameLanguage.OnlinePlayers); + reader.Write("Language", "LowLevel", GameLanguage.LowLevel); + reader.Write("Language", "LowGold", GameLanguage.LowGold); + reader.Write("Language", "LowDC", GameLanguage.LowDC); + reader.Write("Language", "LowMC", GameLanguage.LowMC); + reader.Write("Language", "LowSC", GameLanguage.LowSC); + + reader.Write("Language", "LevelUp", GameLanguage.LevelUp); + + reader.Write("Language", "WeaponLuck", GameLanguage.WeaponLuck); + reader.Write("Language", "WeaponCurse", GameLanguage.WeaponCurse); + reader.Write("Language", "WeaponNoEffect", GameLanguage.WeaponNoEffect); + + reader.Write("Language", "InventoryIncreased", GameLanguage.InventoryIncreased); + reader.Write("Language", "ExpandedStorageExpiresOn", GameLanguage.ExpandedStorageExpiresOn); + reader.Write("Language", "GameName", GameLanguage.GameName); + reader.Write("Language", "FaceToTrade", GameLanguage.FaceToTrade); + reader.Write("Language", "NoTownTeleport", GameLanguage.NoTownTeleport); + reader.Write("Language", "CanNotRandom", GameLanguage.CanNotRandom); + reader.Write("Language", "CanNotDungeon", GameLanguage.CanNotDungeon); + reader.Write("Language", "CannotResurrection", GameLanguage.CannotResurrection); + reader.Write("Language", "CanNotDrop", GameLanguage.CanNotDrop); + + reader.Write("Language", "NotFemale", GameLanguage.NotFemale); + reader.Write("Language", "NotMale", GameLanguage.NotMale); + reader.Write("Language", "NotInGuild", GameLanguage.NotInGuild); + reader.Write("Language", "NewMail", GameLanguage.NewMail); + reader.Write("Language", "CouldNotFindPlayer", GameLanguage.CouldNotFindPlayer); + reader.Write("Language", "NoMentorship", GameLanguage.NoMentorship); + reader.Write("Language", "NoBagSpace", GameLanguage.NoBagSpace); + reader.Write("Language", "AllowingMentorRequests", GameLanguage.AllowingMentorRequests); + reader.Write("Language", "BlockingMentorRequests", GameLanguage.BlockingMentorRequests); + } +} diff --git a/Shared/MIR1.ICO b/Shared/MIR1.ICO new file mode 100644 index 0000000..f32c413 Binary files /dev/null and b/Shared/MIR1.ICO differ diff --git a/Shared/Packet.cs b/Shared/Packet.cs new file mode 100644 index 0000000..6e6cebd --- /dev/null +++ b/Shared/Packet.cs @@ -0,0 +1,700 @@ +using C = ClientPackets; +using S = ServerPackets; + +public abstract class Packet +{ + public static bool IsServer; + public virtual bool Observable => true; + public abstract short Index { get; } + + public static Packet ReceivePacket(byte[] rawBytes, out byte[] extra) + { + extra = rawBytes; + + Packet p; + + if (rawBytes.Length < 4) return null; //| 2Bytes: Packet Size | 2Bytes: Packet ID | + + int length = (rawBytes[1] << 8) + rawBytes[0]; + + if (length > rawBytes.Length || length < 2) return null; + + using (MemoryStream stream = new MemoryStream(rawBytes, 2, length - 2)) + using (BinaryReader reader = new BinaryReader(stream)) + { + try + { + short id = reader.ReadInt16(); + + p = IsServer ? GetClientPacket(id) : GetServerPacket(id); + if (p == null) return null; + + p.ReadPacket(reader); + } + catch + { + throw new InvalidDataException(); + } + } + + extra = new byte[rawBytes.Length - length]; + Buffer.BlockCopy(rawBytes, length, extra, 0, rawBytes.Length - length); + + return p; + } + + public IEnumerable GetPacketBytes() + { + if (Index < 0) return new byte[0]; + + byte[] data; + + using (MemoryStream stream = new MemoryStream()) + { + stream.SetLength(2); + stream.Seek(2, SeekOrigin.Begin); + using (BinaryWriter writer = new BinaryWriter(stream)) + { + writer.Write(Index); + WritePacket(writer); + stream.Seek(0, SeekOrigin.Begin); + writer.Write((short)stream.Length); + stream.Seek(0, SeekOrigin.Begin); + + data = new byte[stream.Length]; + stream.Read(data, 0, data.Length); + } + } + + return data; + } + + protected abstract void ReadPacket(BinaryReader reader); + protected abstract void WritePacket(BinaryWriter writer); + + private static Packet GetClientPacket(short index) + { + switch (index) + { + case (short)ClientPacketIds.ClientVersion: + return new C.ClientVersion(); + case (short)ClientPacketIds.Disconnect: + return new C.Disconnect(); + case (short)ClientPacketIds.KeepAlive: + return new C.KeepAlive(); + case (short)ClientPacketIds.NewAccount: + return new C.NewAccount(); + case (short)ClientPacketIds.ChangePassword: + return new C.ChangePassword(); + case (short)ClientPacketIds.Login: + return new C.Login(); + case (short)ClientPacketIds.NewCharacter: + return new C.NewCharacter(); + case (short)ClientPacketIds.DeleteCharacter: + return new C.DeleteCharacter(); + case (short)ClientPacketIds.StartGame: + return new C.StartGame(); + case (short)ClientPacketIds.LogOut: + return new C.LogOut(); + case (short)ClientPacketIds.Turn: + return new C.Turn(); + case (short)ClientPacketIds.Walk: + return new C.Walk(); + case (short)ClientPacketIds.Chat: + return new C.Chat(); + case (short)ClientPacketIds.MoveItem: + return new C.MoveItem(); + case (short)ClientPacketIds.StoreItem: + return new C.StoreItem(); + case (short)ClientPacketIds.TakeBackItem: + return new C.TakeBackItem(); + case (short)ClientPacketIds.MergeItem: + return new C.MergeItem(); + case (short)ClientPacketIds.EquipItem: + return new C.EquipItem(); + case (short)ClientPacketIds.RemoveItem: + return new C.RemoveItem(); + case (short)ClientPacketIds.SplitItem: + return new C.SplitItem(); + case (short)ClientPacketIds.UseItem: + return new C.UseItem(); + case (short)ClientPacketIds.DropItem: + return new C.DropItem(); + case (short)ClientPacketIds.DepositRefineItem: + return new C.DepositRefineItem(); + case (short)ClientPacketIds.RetrieveRefineItem: + return new C.RetrieveRefineItem(); + case (short)ClientPacketIds.RefineCancel: + return new C.RefineCancel(); + case (short)ClientPacketIds.RefineItem: + return new C.RefineItem(); + case (short)ClientPacketIds.CheckRefine: + return new C.CheckRefine(); + case (short)ClientPacketIds.ReplaceWedRing: + return new C.ReplaceWedRing(); + case (short)ClientPacketIds.DepositTradeItem: + return new C.DepositTradeItem(); + case (short)ClientPacketIds.RetrieveTradeItem: + return new C.RetrieveTradeItem(); + case (short)ClientPacketIds.DropGold: + return new C.DropGold(); + case (short)ClientPacketIds.PickUp: + return new C.PickUp(); + case (short)ClientPacketIds.Observe: + return new C.Observe(); + case (short)ClientPacketIds.ChangeAMode: + return new C.ChangeAMode(); + case (short)ClientPacketIds.ChangePMode: + return new C.ChangePMode(); + case (short)ClientPacketIds.ChangeTrade: + return new C.ChangeTrade(); + case (short)ClientPacketIds.Attack: + return new C.Attack(); + case (short)ClientPacketIds.RangeAttack: + return new C.RangeAttack(); + case (short)ClientPacketIds.Harvest: + return new C.Harvest(); + case (short)ClientPacketIds.CallNPC: + return new C.CallNPC(); + case (short)ClientPacketIds.BuyItem: + return new C.BuyItem(); + case (short)ClientPacketIds.SellItem: + return new C.SellItem(); + case (short)ClientPacketIds.RepairItem: + return new C.RepairItem(); + case (short)ClientPacketIds.BuyItemBack: + return new C.BuyItemBack(); + case (short)ClientPacketIds.SRepairItem: + return new C.SRepairItem(); + case (short)ClientPacketIds.MagicKey: + return new C.MagicKey(); + case (short)ClientPacketIds.Magic: + return new C.Magic(); + case (short)ClientPacketIds.SwitchGroup: + return new C.SwitchGroup(); + case (short)ClientPacketIds.AddMember: + return new C.AddMember(); + case (short)ClientPacketIds.DellMember: + return new C.DelMember(); + case (short)ClientPacketIds.GroupInvite: + return new C.GroupInvite(); + case (short)ClientPacketIds.TownRevive: + return new C.TownRevive(); + case (short)ClientPacketIds.SpellToggle: + return new C.SpellToggle(); + case (short)ClientPacketIds.ConsignItem: + return new C.ConsignItem(); + case (short)ClientPacketIds.MarketSearch: + return new C.MarketSearch(); + case (short)ClientPacketIds.MarketRefresh: + return new C.MarketRefresh(); + case (short)ClientPacketIds.MarketPage: + return new C.MarketPage(); + case (short)ClientPacketIds.MarketBuy: + return new C.MarketBuy(); + case (short)ClientPacketIds.MarketGetBack: + return new C.MarketGetBack(); + case (short)ClientPacketIds.MarketSellNow: + return new C.MarketSellNow(); + case (short)ClientPacketIds.RequestUserName: + return new C.RequestUserName(); + case (short)ClientPacketIds.RequestChatItem: + return new C.RequestChatItem(); + case (short)ClientPacketIds.EditGuildMember: + return new C.EditGuildMember(); + case (short)ClientPacketIds.EditGuildNotice: + return new C.EditGuildNotice(); + case (short)ClientPacketIds.GuildInvite: + return new C.GuildInvite(); + case (short)ClientPacketIds.GuildNameReturn: + return new C.GuildNameReturn(); + case (short)ClientPacketIds.RequestGuildInfo: + return new C.RequestGuildInfo(); + case (short)ClientPacketIds.GuildStorageGoldChange: + return new C.GuildStorageGoldChange(); + case (short)ClientPacketIds.GuildStorageItemChange: + return new C.GuildStorageItemChange(); + case (short)ClientPacketIds.GuildWarReturn: + return new C.GuildWarReturn(); + case (short)ClientPacketIds.MarriageRequest: + return new C.MarriageRequest(); + case (short)ClientPacketIds.MarriageReply: + return new C.MarriageReply(); + case (short)ClientPacketIds.ChangeMarriage: + return new C.ChangeMarriage(); + case (short)ClientPacketIds.DivorceRequest: + return new C.DivorceRequest(); + case (short)ClientPacketIds.DivorceReply: + return new C.DivorceReply(); + case (short)ClientPacketIds.TradeRequest: + return new C.TradeRequest(); + case (short)ClientPacketIds.TradeReply: + return new C.TradeReply(); + case (short)ClientPacketIds.TradeGold: + return new C.TradeGold(); + case (short)ClientPacketIds.TradeConfirm: + return new C.TradeConfirm(); + case (short)ClientPacketIds.TradeCancel: + return new C.TradeCancel(); + case (short)ClientPacketIds.AcceptQuest: + return new C.AcceptQuest(); + case (short)ClientPacketIds.FinishQuest: + return new C.FinishQuest(); + case (short)ClientPacketIds.AbandonQuest: + return new C.AbandonQuest(); + case (short)ClientPacketIds.ShareQuest: + return new C.ShareQuest(); + case (short)ClientPacketIds.CombineItem: + return new C.CombineItem(); + case (short)ClientPacketIds.SendMail: + return new C.SendMail(); + case (short)ClientPacketIds.ReadMail: + return new C.ReadMail(); + case (short)ClientPacketIds.CollectParcel: + return new C.CollectParcel(); + case (short)ClientPacketIds.DeleteMail: + return new C.DeleteMail(); + case (short)ClientPacketIds.LockMail: + return new C.LockMail(); + case (short)ClientPacketIds.MailLockedItem: + return new C.MailLockedItem(); + case (short)ClientPacketIds.MailCost: + return new C.MailCost(); + case (short)ClientPacketIds.AddFriend: + return new C.AddFriend(); + case (short)ClientPacketIds.RemoveFriend: + return new C.RemoveFriend(); + case (short)ClientPacketIds.RefreshFriends: + return new C.RefreshFriends(); + case (short)ClientPacketIds.AddMemo: + return new C.AddMemo(); + case (short)ClientPacketIds.GuildBuffUpdate: + return new C.GuildBuffUpdate(); + case (short)ClientPacketIds.GameshopBuy: + return new C.GameshopBuy(); + case (short)ClientPacketIds.NPCConfirmInput: + return new C.NPCConfirmInput(); + case (short)ClientPacketIds.ReportIssue: + return new C.ReportIssue(); + case (short)ClientPacketIds.GetRanking: + return new C.GetRanking(); + default: + return null; + } + + } + public static Packet GetServerPacket(short index) + { + switch (index) + { + case (short)ServerPacketIds.Connected: + return new S.Connected(); + case (short)ServerPacketIds.ClientVersion: + return new S.ClientVersion(); + case (short)ServerPacketIds.Disconnect: + return new S.Disconnect(); + case (short)ServerPacketIds.KeepAlive: + return new S.KeepAlive(); + case (short)ServerPacketIds.NewAccount: + return new S.NewAccount(); + case (short)ServerPacketIds.ChangePassword: + return new S.ChangePassword(); + case (short)ServerPacketIds.ChangePasswordBanned: + return new S.ChangePasswordBanned(); + case (short)ServerPacketIds.Login: + return new S.Login(); + case (short)ServerPacketIds.LoginBanned: + return new S.LoginBanned(); + case (short)ServerPacketIds.LoginSuccess: + return new S.LoginSuccess(); + case (short)ServerPacketIds.NewCharacter: + return new S.NewCharacter(); + case (short)ServerPacketIds.NewCharacterSuccess: + return new S.NewCharacterSuccess(); + case (short)ServerPacketIds.DeleteCharacter: + return new S.DeleteCharacter(); + case (short)ServerPacketIds.DeleteCharacterSuccess: + return new S.DeleteCharacterSuccess(); + case (short)ServerPacketIds.StartGame: + return new S.StartGame(); + case (short)ServerPacketIds.StartGameBanned: + return new S.StartGameBanned(); + case (short)ServerPacketIds.StartGameDelay: + return new S.StartGameDelay(); + case (short)ServerPacketIds.MapInformation: + return new S.MapInformation(); + case (short)ServerPacketIds.NewMapInfo: + return new S.NewMapInfo(); + case (short)ServerPacketIds.WorldMapSetup: + return new S.WorldMapSetupInfo(); + case (short)ServerPacketIds.SearchMapResult: + return new S.SearchMapResult(); + case (short)ServerPacketIds.UserInformation: + return new S.UserInformation(); + case (short)ServerPacketIds.UserLocation: + return new S.UserLocation(); + case (short)ServerPacketIds.ObjectPlayer: + return new S.ObjectPlayer(); + case (short)ServerPacketIds.ObjectRemove: + return new S.ObjectRemove(); + case (short)ServerPacketIds.ObjectTurn: + return new S.ObjectTurn(); + case (short)ServerPacketIds.ObjectWalk: + return new S.ObjectWalk(); + case (short)ServerPacketIds.Chat: + return new S.Chat(); + case (short)ServerPacketIds.ObjectChat: + return new S.ObjectChat(); + case (short)ServerPacketIds.NewItemInfo: + return new S.NewItemInfo(); + case (short)ServerPacketIds.NewChatItem: + return new S.NewChatItem(); + case (short)ServerPacketIds.MoveItem: + return new S.MoveItem(); + case (short)ServerPacketIds.EquipItem: + return new S.EquipItem(); + case (short)ServerPacketIds.MergeItem: + return new S.MergeItem(); + case (short)ServerPacketIds.RemoveItem: + return new S.RemoveItem(); + case (short)ServerPacketIds.TakeBackItem: + return new S.TakeBackItem(); + case (short)ServerPacketIds.StoreItem: + return new S.StoreItem(); + case (short)ServerPacketIds.DepositRefineItem: + return new S.DepositRefineItem(); + case (short)ServerPacketIds.RetrieveRefineItem: + return new S.RetrieveRefineItem(); + case (short)ServerPacketIds.RefineItem: + return new S.RefineItem(); + case (short)ServerPacketIds.DepositTradeItem: + return new S.DepositTradeItem(); + case (short)ServerPacketIds.RetrieveTradeItem: + return new S.RetrieveTradeItem(); + case (short)ServerPacketIds.SplitItem: + return new S.SplitItem(); + case (short)ServerPacketIds.SplitItem1: + return new S.SplitItem1(); + case (short)ServerPacketIds.UseItem: + return new S.UseItem(); + case (short)ServerPacketIds.DropItem: + return new S.DropItem(); + case (short)ServerPacketIds.PlayerUpdate: + return new S.PlayerUpdate(); + case (short)ServerPacketIds.LogOutSuccess: + return new S.LogOutSuccess(); + case (short)ServerPacketIds.LogOutFailed: + return new S.LogOutFailed(); + case (short)ServerPacketIds.ReturnToLogin: + return new S.ReturnToLogin(); + case (short)ServerPacketIds.TimeOfDay: + return new S.TimeOfDay(); + case (short)ServerPacketIds.ChangeAMode: + return new S.ChangeAMode(); + case (short)ServerPacketIds.ChangePMode: + return new S.ChangePMode(); + case (short)ServerPacketIds.ObjectItem: + return new S.ObjectItem(); + case (short)ServerPacketIds.ObjectGold: + return new S.ObjectGold(); + case (short)ServerPacketIds.GainedItem: + return new S.GainedItem(); + case (short)ServerPacketIds.GainedGold: + return new S.GainedGold(); + case (short)ServerPacketIds.LoseGold: + return new S.LoseGold(); + case (short)ServerPacketIds.GainedCredit: + return new S.GainedCredit(); + case (short)ServerPacketIds.LoseCredit: + return new S.LoseCredit(); + case (short)ServerPacketIds.ObjectMonster: + return new S.ObjectMonster(); + case (short)ServerPacketIds.ObjectAttack: + return new S.ObjectAttack(); + case (short)ServerPacketIds.Struck: + return new S.Struck(); + case (short)ServerPacketIds.DamageIndicator: + return new S.DamageIndicator(); + case (short)ServerPacketIds.ObjectStruck: + return new S.ObjectStruck(); + case (short)ServerPacketIds.DuraChanged: + return new S.DuraChanged(); + case (short)ServerPacketIds.HealthChanged: + return new S.HealthChanged(); + case (short)ServerPacketIds.DeleteItem: + return new S.DeleteItem(); + case (short)ServerPacketIds.Death: + return new S.Death(); + case (short)ServerPacketIds.ObjectDied: + return new S.ObjectDied(); + case (short)ServerPacketIds.ColourChanged: + return new S.ColourChanged(); + case (short)ServerPacketIds.ObjectColourChanged: + return new S.ObjectColourChanged(); + case (short)ServerPacketIds.ObjectGuildNameChanged: + return new S.ObjectGuildNameChanged(); + case (short)ServerPacketIds.GainExperience: + return new S.GainExperience(); + case (short)ServerPacketIds.LevelChanged: + return new S.LevelChanged(); + case (short)ServerPacketIds.ObjectLeveled: + return new S.ObjectLeveled(); + case (short)ServerPacketIds.ObjectHarvest: + return new S.ObjectHarvest(); + case (short)ServerPacketIds.ObjectHarvested: + return new S.ObjectHarvested(); + case (short)ServerPacketIds.ObjectNpc: + return new S.ObjectNPC(); + case (short)ServerPacketIds.NPCResponse: + return new S.NPCResponse(); + case (short)ServerPacketIds.ObjectHide: + return new S.ObjectHide(); + case (short)ServerPacketIds.ObjectShow: + return new S.ObjectShow(); + case (short)ServerPacketIds.Poisoned: + return new S.Poisoned(); + case (short)ServerPacketIds.ObjectPoisoned: + return new S.ObjectPoisoned(); + case (short)ServerPacketIds.MapChanged: + return new S.MapChanged(); + case (short)ServerPacketIds.ObjectTeleportOut: + return new S.ObjectTeleportOut(); + case (short)ServerPacketIds.ObjectTeleportIn: + return new S.ObjectTeleportIn(); + case (short)ServerPacketIds.TeleportIn: + return new S.TeleportIn(); + case (short)ServerPacketIds.NPCGoods: + return new S.NPCGoods(); + case (short)ServerPacketIds.NPCSell: + return new S.NPCSell(); + case (short)ServerPacketIds.NPCRepair: + return new S.NPCRepair(); + case (short)ServerPacketIds.NPCSRepair: + return new S.NPCSRepair(); + case (short)ServerPacketIds.NPCRefine: + return new S.NPCRefine(); + case (short)ServerPacketIds.NPCCheckRefine: + return new S.NPCCheckRefine(); + case (short)ServerPacketIds.NPCCollectRefine: + return new S.NPCCollectRefine(); + case (short)ServerPacketIds.NPCReplaceWedRing: + return new S.NPCReplaceWedRing(); + case (short)ServerPacketIds.NPCStorage: + return new S.NPCStorage(); + case (short)ServerPacketIds.SellItem: + return new S.SellItem(); + case (short)ServerPacketIds.RepairItem: + return new S.RepairItem(); + case (short)ServerPacketIds.ItemRepaired: + return new S.ItemRepaired(); + case (short)ServerPacketIds.ItemSlotSizeChanged: + return new S.ItemSlotSizeChanged(); + case (short)ServerPacketIds.ItemSealChanged: + return new S.ItemSealChanged(); + case (short)ServerPacketIds.NewMagic: + return new S.NewMagic(); + case (short)ServerPacketIds.MagicLeveled: + return new S.MagicLeveled(); + case (short)ServerPacketIds.Magic: + return new S.Magic(); + case (short)ServerPacketIds.MagicDelay: + return new S.MagicDelay(); + case (short)ServerPacketIds.MagicCast: + return new S.MagicCast(); + case (short)ServerPacketIds.ObjectMagic: + return new S.ObjectMagic(); + case (short)ServerPacketIds.ObjectProjectile: + return new S.ObjectProjectile(); + case (short)ServerPacketIds.ObjectEffect: + return new S.ObjectEffect(); + case (short)ServerPacketIds.RangeAttack: + return new S.RangeAttack(); + case (short)ServerPacketIds.Pushed: + return new S.Pushed(); + case (short)ServerPacketIds.ObjectPushed: + return new S.ObjectPushed(); + case (short)ServerPacketIds.ObjectName: + return new S.ObjectName(); + case (short)ServerPacketIds.UserStorage: + return new S.UserStorage(); + case (short)ServerPacketIds.SwitchGroup: + return new S.SwitchGroup(); + case (short)ServerPacketIds.DeleteGroup: + return new S.DeleteGroup(); + case (short)ServerPacketIds.DeleteMember: + return new S.DeleteMember(); + case (short)ServerPacketIds.GroupInvite: + return new S.GroupInvite(); + case (short)ServerPacketIds.AddMember: + return new S.AddMember(); + case (short)ServerPacketIds.GroupMembersMap: + return new S.GroupMembersMap(); + case (short)ServerPacketIds.SendMemberLocation: + return new S.SendMemberLocation(); + case (short)ServerPacketIds.Revived: + return new S.Revived(); + case (short)ServerPacketIds.ObjectRevived: + return new S.ObjectRevived(); + case (short)ServerPacketIds.SpellToggle: + return new S.SpellToggle(); + case (short)ServerPacketIds.ObjectHealth: + return new S.ObjectHealth(); + case (short)ServerPacketIds.ObjectMana: + return new S.ObjectMana(); + case (short)ServerPacketIds.MapEffect: + return new S.MapEffect(); + case (short)ServerPacketIds.AllowObserve: + return new S.AllowObserve(); + case (short)ServerPacketIds.ObjectRangeAttack: + return new S.ObjectRangeAttack(); + case (short)ServerPacketIds.AddBuff: + return new S.AddBuff(); + case (short)ServerPacketIds.RemoveBuff: + return new S.RemoveBuff(); + case (short)ServerPacketIds.PauseBuff: + return new S.PauseBuff(); + case (short)ServerPacketIds.ObjectHidden: + return new S.ObjectHidden(); + case (short)ServerPacketIds.RefreshItem: + return new S.RefreshItem(); + case (short)ServerPacketIds.ObjectSpell: + return new S.ObjectSpell(); + case (short)ServerPacketIds.UserDash: + return new S.UserDash(); + case (short)ServerPacketIds.ObjectDash: + return new S.ObjectDash(); + case (short)ServerPacketIds.UserDashFail: + return new S.UserDashFail(); + case (short)ServerPacketIds.ObjectDashFail: + return new S.ObjectDashFail(); + case (short)ServerPacketIds.NPCConsign: + return new S.NPCConsign(); + case (short)ServerPacketIds.NPCMarket: + return new S.NPCMarket(); + case (short)ServerPacketIds.NPCMarketPage: + return new S.NPCMarketPage(); + case (short)ServerPacketIds.ConsignItem: + return new S.ConsignItem(); + case (short)ServerPacketIds.MarketFail: + return new S.MarketFail(); + case (short)ServerPacketIds.MarketSuccess: + return new S.MarketSuccess(); + case (short)ServerPacketIds.RemoveMagic: + return new S.RemoveMagic(); + case (short)ServerPacketIds.BaseStatsInfo: + return new S.BaseStatsInfo(); + case (short)ServerPacketIds.UserName: + return new S.UserName(); + case (short)ServerPacketIds.ChatItemStats: + return new S.ChatItemStats(); + case (short)ServerPacketIds.GuildMemberChange: + return new S.GuildMemberChange(); + case (short)ServerPacketIds.GuildNoticeChange: + return new S.GuildNoticeChange(); + case (short)ServerPacketIds.GuildStatus: + return new S.GuildStatus(); + case (short)ServerPacketIds.GuildInvite: + return new S.GuildInvite(); + case (short)ServerPacketIds.GuildExpGain: + return new S.GuildExpGain(); + case (short)ServerPacketIds.GuildNameRequest: + return new S.GuildNameRequest(); + case (short)ServerPacketIds.GuildStorageGoldChange: + return new S.GuildStorageGoldChange(); + case (short)ServerPacketIds.GuildStorageItemChange: + return new S.GuildStorageItemChange(); + case (short)ServerPacketIds.GuildStorageList: + return new S.GuildStorageList(); + case (short)ServerPacketIds.GuildRequestWar: + return new S.GuildRequestWar(); + case (short)ServerPacketIds.DefaultNPC: + return new S.DefaultNPC(); + case (short)ServerPacketIds.NPCUpdate: + return new S.NPCUpdate(); + case (short)ServerPacketIds.NPCImageUpdate: + return new S.NPCImageUpdate(); + case (short)ServerPacketIds.MarriageRequest: + return new S.MarriageRequest(); + case (short)ServerPacketIds.DivorceRequest: + return new S.DivorceRequest(); + case (short)ServerPacketIds.TradeRequest: + return new S.TradeRequest(); + case (short)ServerPacketIds.TradeAccept: + return new S.TradeAccept(); + case (short)ServerPacketIds.TradeGold: + return new S.TradeGold(); + case (short)ServerPacketIds.TradeItem: + return new S.TradeItem(); + case (short)ServerPacketIds.TradeConfirm: + return new S.TradeConfirm(); + case (short)ServerPacketIds.TradeCancel: + return new S.TradeCancel(); + case (short)ServerPacketIds.ChangeQuest: + return new S.ChangeQuest(); + case (short)ServerPacketIds.CompleteQuest: + return new S.CompleteQuest(); + case (short)ServerPacketIds.ShareQuest: + return new S.ShareQuest(); + case (short)ServerPacketIds.NewQuestInfo: + return new S.NewQuestInfo(); + case (short)ServerPacketIds.GainedQuestItem: + return new S.GainedQuestItem(); + case (short)ServerPacketIds.DeleteQuestItem: + return new S.DeleteQuestItem(); + case (short)ServerPacketIds.CombineItem: + return new S.CombineItem(); + case (short)ServerPacketIds.ItemUpgraded: + return new S.ItemUpgraded(); + case (short)ServerPacketIds.ObjectLevelEffects: + return new S.ObjectLevelEffects(); + case (short)ServerPacketIds.SendOutputMessage: + return new S.SendOutputMessage(); + case (short)ServerPacketIds.ReceiveMail: + return new S.ReceiveMail(); + case (short)ServerPacketIds.MailLockedItem: + return new S.MailLockedItem(); + case (short)ServerPacketIds.MailSent: + return new S.MailSent(); + case (short)ServerPacketIds.MailSendRequest: + return new S.MailSendRequest(); + case (short)ServerPacketIds.ParcelCollected: + return new S.ParcelCollected(); + case (short)ServerPacketIds.MailCost: + return new S.MailCost(); + case (short)ServerPacketIds.ResizeInventory: + return new S.ResizeInventory(); + case (short)ServerPacketIds.ResizeStorage: + return new S.ResizeStorage(); + case (short)ServerPacketIds.FriendUpdate: + return new S.FriendUpdate(); + case (short)ServerPacketIds.LoverUpdate: + return new S.LoverUpdate(); + case (short)ServerPacketIds.GuildBuffList: + return new S.GuildBuffList(); + case (short)ServerPacketIds.GameShopInfo: + return new S.GameShopInfo(); + case (short)ServerPacketIds.GameShopStock: + return new S.GameShopStock(); + case (short)ServerPacketIds.NPCRequestInput: + return new S.NPCRequestInput(); + case (short)ServerPacketIds.Rankings: + return new S.Rankings(); + case (short)ServerPacketIds.OpenBrowser: + return new S.OpenBrowser(); + case (short)ServerPacketIds.PlaySound: + return new S.PlaySound(); + case (short)ServerPacketIds.SetTimer: + return new S.SetTimer(); + case (short)ServerPacketIds.ExpireTimer: + return new S.ExpireTimer(); + case (short)ServerPacketIds.UpdateNotice: + return new S.UpdateNotice(); + case (short)ServerPacketIds.Roll: + return new S.Roll(); + case (short)ServerPacketIds.SetCompass: + return new S.SetCompass(); + default: + return null; + } + } +} \ No newline at end of file diff --git a/Shared/ServerPackets.cs b/Shared/ServerPackets.cs new file mode 100644 index 0000000..fa9340d --- /dev/null +++ b/Shared/ServerPackets.cs @@ -0,0 +1,4883 @@ +using System.Drawing; + +namespace ServerPackets +{ + public sealed class KeepAlive : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.KeepAlive; } + } + public long Time; + + protected override void ReadPacket(BinaryReader reader) + { + Time = reader.ReadInt64(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Time); + } + } + public sealed class Connected : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.Connected; } + } + + protected override void ReadPacket(BinaryReader reader) + { + } + + protected override void WritePacket(BinaryWriter writer) + { + } + } + public sealed class ClientVersion : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.ClientVersion; } + } + + public byte Result; + /* + * 0: Wrong Version + * 1: Correct Version + */ + + protected override void ReadPacket(BinaryReader reader) + { + Result = reader.ReadByte(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Result); + } + } + public sealed class Disconnect : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.Disconnect; } + } + + public byte Reason; + + /* + * 0: Server Closing. + * 1: Another User. + * 2: Packet Error. + * 3: Server Crashed. + */ + + protected override void ReadPacket(BinaryReader reader) + { + Reason = reader.ReadByte(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Reason); + } + } + public sealed class NewAccount : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.NewAccount; } + } + + public byte Result; + /* + * 0: Disabled + * 1: Bad AccountID + * 2: Bad Password + * 3: Bad Email + * 4: Bad Name + * 5: Bad Question + * 6: Bad Answer + * 7: Account Exists. + * 8: Success + */ + + protected override void ReadPacket(BinaryReader reader) + { + Result = reader.ReadByte(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Result); + } + + } + public sealed class ChangePassword : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.ChangePassword; } + } + + public byte Result; + /* + * 0: Disabled + * 1: Bad AccountID + * 2: Bad Current Password + * 3: Bad New Password + * 4: Account Not Exist + * 5: Wrong Password + * 6: Success + */ + + protected override void ReadPacket(BinaryReader reader) + { + Result = reader.ReadByte(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Result); + } + } + public sealed class ChangePasswordBanned : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.ChangePasswordBanned; } + } + + public string Reason = string.Empty; + public DateTime ExpiryDate; + + protected override void ReadPacket(BinaryReader reader) + { + Reason = reader.ReadString(); + ExpiryDate = DateTime.FromBinary(reader.ReadInt64()); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Reason); + writer.Write(ExpiryDate.ToBinary()); + } + } + public sealed class Login : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.Login; } + } + + public byte Result; + /* + * 0: Disabled + * 1: Bad AccountID + * 2: Bad Password + * 3: Account Not Exist + * 4: Wrong Password + */ + + protected override void ReadPacket(BinaryReader reader) + { + Result = reader.ReadByte(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Result); + } + } + public sealed class LoginBanned : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.LoginBanned; } + } + + public string Reason = string.Empty; + public DateTime ExpiryDate; + + protected override void ReadPacket(BinaryReader reader) + { + Reason = reader.ReadString(); + ExpiryDate = DateTime.FromBinary(reader.ReadInt64()); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Reason); + writer.Write(ExpiryDate.ToBinary()); + } + } + + public sealed class LoginSuccess : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.LoginSuccess; } + } + + public List Characters = new List(); + + protected override void ReadPacket(BinaryReader reader) + { + int count = reader.ReadInt32(); + + for (int i = 0; i < count; i++) + Characters.Add(new SelectInfo(reader)); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Characters.Count); + + for (int i = 0; i < Characters.Count; i++) + Characters[i].Save(writer); + } + } + public sealed class NewCharacter : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.NewCharacter; } + } + + /* + * 0: Disabled. + * 1: Bad Character Name + * 2: Bad Gender + * 3: Bad Class + * 4: Max Characters + * 5: Character Exists. + * + * 10: Success + * */ + public byte Result; + + protected override void ReadPacket(BinaryReader reader) + { + Result = reader.ReadByte(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Result); + } + } + public sealed class NewCharacterSuccess : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.NewCharacterSuccess; } + } + + public SelectInfo CharInfo; + + protected override void ReadPacket(BinaryReader reader) + { + CharInfo = new SelectInfo(reader); + } + + protected override void WritePacket(BinaryWriter writer) + { + CharInfo.Save(writer); + } + } + public sealed class DeleteCharacter : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.DeleteCharacter; } + } + + public byte Result; + + /* + * 0: Disabled. + * 1: Character Not Found + * */ + + protected override void ReadPacket(BinaryReader reader) + { + Result = reader.ReadByte(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Result); + } + } + public sealed class DeleteCharacterSuccess : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.DeleteCharacterSuccess; } + } + + public int CharacterIndex; + + protected override void ReadPacket(BinaryReader reader) + { + CharacterIndex = reader.ReadInt32(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(CharacterIndex); + } + } + public sealed class StartGame : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.StartGame; } + } + + public byte Result; + public int Resolution; + + /* + * 0: Disabled. + * 1: Not logged in + * 2: Character not found. + * 3: Start Game Error + * */ + + protected override void ReadPacket(BinaryReader reader) + { + Result = reader.ReadByte(); + Resolution = reader.ReadInt32(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Result); + writer.Write(Resolution); + } + } + public sealed class StartGameBanned : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.StartGameBanned; } + } + + public string Reason = string.Empty; + public DateTime ExpiryDate; + + protected override void ReadPacket(BinaryReader reader) + { + Reason = reader.ReadString(); + ExpiryDate = DateTime.FromBinary(reader.ReadInt64()); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Reason); + writer.Write(ExpiryDate.ToBinary()); + } + } + public sealed class StartGameDelay : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.StartGameDelay; } + } + + public long Milliseconds; + + protected override void ReadPacket(BinaryReader reader) + { + Milliseconds = reader.ReadInt64(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Milliseconds); + } + + } + public sealed class MapInformation : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.MapInformation; } + } + + public int MapIndex; + public string FileName = string.Empty; + public string Title = string.Empty; + public ushort MiniMap, BigMap, Music; + public LightSetting Lights; + public bool Lightning, Fire; + public byte MapDarkLight; + + protected override void ReadPacket(BinaryReader reader) + { + MapIndex = reader.ReadInt32(); + FileName = reader.ReadString(); + Title = reader.ReadString(); + MiniMap = reader.ReadUInt16(); + BigMap = reader.ReadUInt16(); + Lights = (LightSetting)reader.ReadByte(); + byte bools = reader.ReadByte(); + if ((bools & 0x01) == 0x01) Lightning = true; + if ((bools & 0x02) == 0x02) Fire = true; + MapDarkLight = reader.ReadByte(); + Music = reader.ReadUInt16(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(MapIndex); + writer.Write(FileName); + writer.Write(Title); + writer.Write(MiniMap); + writer.Write(BigMap); + writer.Write((byte)Lights); + byte bools = 0; + bools |= (byte)(Lightning ? 0x01 : 0); + bools |= (byte)(Fire ? 0x02 : 0); + writer.Write(bools); + writer.Write(MapDarkLight); + writer.Write(Music); + } + } + + public sealed class NewMapInfo : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.NewMapInfo; } + } + + public int MapIndex; + public ClientMapInfo Info; + + protected override void ReadPacket(BinaryReader reader) + { + MapIndex = reader.ReadInt32(); + Info = new ClientMapInfo(reader); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(MapIndex); + Info.Save(writer); + } + } + + public sealed class WorldMapSetupInfo : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.WorldMapSetup; } + } + + public WorldMapSetup Setup; + public int TeleportToNPCCost; + + protected override void ReadPacket(BinaryReader reader) + { + Setup = new WorldMapSetup(reader); + TeleportToNPCCost = reader.ReadInt32(); + } + + protected override void WritePacket(BinaryWriter writer) + { + Setup.Save(writer); + writer.Write(TeleportToNPCCost); + } + } + + public sealed class SearchMapResult : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.SearchMapResult; } + } + + public int MapIndex = -1; + public uint NPCIndex; + + protected override void ReadPacket(BinaryReader reader) + { + MapIndex = reader.ReadInt32(); + NPCIndex = reader.ReadUInt32(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(MapIndex); + writer.Write(NPCIndex); + } + } + public class UserInformation : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.UserInformation; } + } + + public uint ObjectID; + public uint RealId; + public string Name = string.Empty; + public string GuildName = string.Empty; + public string GuildRank = string.Empty; + public Color NameColour; + public MirClass Class; + public MirGender Gender; + public ushort Level; + public Point Location; + public MirDirection Direction; + public byte Hair; + public int HP, MP; + public long Experience, MaxExperience; + + public LevelEffects LevelEffects; + + public UserItem[] Inventory, Equipment, QuestInventory; + public uint Gold, Credit; + + public bool HasExpandedStorage; + public DateTime ExpandedStorageExpiryTime; + + public List Magics = new List(); + + public bool AllowObserve; + public bool Observer; + + + + protected override void ReadPacket(BinaryReader reader) + { + ObjectID = reader.ReadUInt32(); + RealId = reader.ReadUInt32(); + Name = reader.ReadString(); + GuildName = reader.ReadString(); + GuildRank = reader.ReadString(); + NameColour = Color.FromArgb(reader.ReadInt32()); + Class = (MirClass)reader.ReadByte(); + Gender = (MirGender)reader.ReadByte(); + Level = reader.ReadUInt16(); + Location = new Point(reader.ReadInt32(), reader.ReadInt32()); + Direction = (MirDirection)reader.ReadByte(); + Hair = reader.ReadByte(); + HP = reader.ReadInt32(); + MP = reader.ReadInt32(); + + Experience = reader.ReadInt64(); + MaxExperience = reader.ReadInt64(); + + LevelEffects = (LevelEffects)reader.ReadUInt16(); + + if (reader.ReadBoolean()) + { + Inventory = new UserItem[reader.ReadInt32()]; + for (int i = 0; i < Inventory.Length; i++) + { + if (!reader.ReadBoolean()) continue; + Inventory[i] = new UserItem(reader); + } + } + + if (reader.ReadBoolean()) + { + Equipment = new UserItem[reader.ReadInt32()]; + for (int i = 0; i < Equipment.Length; i++) + { + if (!reader.ReadBoolean()) continue; + Equipment[i] = new UserItem(reader); + } + } + + if (reader.ReadBoolean()) + { + QuestInventory = new UserItem[reader.ReadInt32()]; + for (int i = 0; i < QuestInventory.Length; i++) + { + if (!reader.ReadBoolean()) continue; + QuestInventory[i] = new UserItem(reader); + } + } + + Gold = reader.ReadUInt32(); + Credit = reader.ReadUInt32(); + + HasExpandedStorage = reader.ReadBoolean(); + ExpandedStorageExpiryTime = DateTime.FromBinary(reader.ReadInt64()); + + int count = reader.ReadInt32(); + + for (int i = 0; i < count; i++) + { + Magics.Add(new ClientMagic(reader)); + } + + AllowObserve = reader.ReadBoolean(); + Observer = reader.ReadBoolean(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(ObjectID); + writer.Write(RealId); + writer.Write(Name); + writer.Write(GuildName); + writer.Write(GuildRank); + writer.Write(NameColour.ToArgb()); + writer.Write((byte)Class); + writer.Write((byte)Gender); + writer.Write(Level); + writer.Write(Location.X); + writer.Write(Location.Y); + writer.Write((byte)Direction); + writer.Write(Hair); + writer.Write(HP); + writer.Write(MP); + + writer.Write(Experience); + writer.Write(MaxExperience); + + writer.Write((ushort)LevelEffects); + + writer.Write(Inventory != null); + if (Inventory != null) + { + writer.Write(Inventory.Length); + for (int i = 0; i < Inventory.Length; i++) + { + writer.Write(Inventory[i] != null); + if (Inventory[i] == null) continue; + + Inventory[i].Save(writer); + } + + } + + writer.Write(Equipment != null); + if (Equipment != null) + { + writer.Write(Equipment.Length); + for (int i = 0; i < Equipment.Length; i++) + { + writer.Write(Equipment[i] != null); + if (Equipment[i] == null) continue; + + Equipment[i].Save(writer); + } + } + + writer.Write(QuestInventory != null); + if (QuestInventory != null) + { + writer.Write(QuestInventory.Length); + for (int i = 0; i < QuestInventory.Length; i++) + { + writer.Write(QuestInventory[i] != null); + if (QuestInventory[i] == null) continue; + + QuestInventory[i].Save(writer); + } + } + + writer.Write(Gold); + writer.Write(Credit); + + writer.Write(HasExpandedStorage); + writer.Write(ExpandedStorageExpiryTime.ToBinary()); + + writer.Write(Magics.Count); + for (int i = 0; i < Magics.Count; i++) + { + Magics[i].Save(writer); + } + + writer.Write(AllowObserve); + writer.Write(Observer); + } + } + + public sealed class UserLocation : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.UserLocation; } + } + + public override bool Observable + { + get { return false; } + } + + public Point Location; + public MirDirection Direction; + + + protected override void ReadPacket(BinaryReader reader) + { + Location = new Point(reader.ReadInt32(), reader.ReadInt32()); + Direction = (MirDirection)reader.ReadByte(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Location.X); + writer.Write(Location.Y); + writer.Write((byte)Direction); + } + } + public class ObjectPlayer : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.ObjectPlayer; } + } + + public uint ObjectID; + public string Name = string.Empty; + public string GuildName = string.Empty; + public string GuildRankName = string.Empty; + public Color NameColour; + public MirClass Class; + public MirGender Gender; + public ushort Level; + public Point Location; + public MirDirection Direction; + public byte Hair; + public byte Light; + public short Weapon, Armour; + public PoisonType Poison; + public bool Dead, Hidden; + public SpellEffect Effect; + public byte WingEffect; + public bool Extra; + + public LevelEffects LevelEffects; + + public List Buffs = new List(); + + protected override void ReadPacket(BinaryReader reader) + { + ObjectID = reader.ReadUInt32(); + Name = reader.ReadString(); + GuildName = reader.ReadString(); + GuildRankName = reader.ReadString(); + NameColour = Color.FromArgb(reader.ReadInt32()); + Class = (MirClass)reader.ReadByte(); + Gender = (MirGender)reader.ReadByte(); + Level = reader.ReadUInt16(); + Location = new Point(reader.ReadInt32(), reader.ReadInt32()); + Direction = (MirDirection)reader.ReadByte(); + Hair = reader.ReadByte(); + Light = reader.ReadByte(); + Weapon = reader.ReadInt16(); + Armour = reader.ReadInt16(); + Poison = (PoisonType)reader.ReadUInt16(); + Dead = reader.ReadBoolean(); + Hidden = reader.ReadBoolean(); + Effect = (SpellEffect)reader.ReadByte(); + WingEffect = reader.ReadByte(); + Extra = reader.ReadBoolean(); + + int count = reader.ReadInt32(); + for (int i = 0; i < count; i++) + { + Buffs.Add((BuffType)reader.ReadByte()); + } + + LevelEffects = (LevelEffects)reader.ReadUInt16(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(ObjectID); + writer.Write(Name); + writer.Write(GuildName); + writer.Write(GuildRankName); + writer.Write(NameColour.ToArgb()); + writer.Write((byte)Class); + writer.Write((byte)Gender); + writer.Write(Level); + writer.Write(Location.X); + writer.Write(Location.Y); + writer.Write((byte)Direction); + writer.Write(Hair); + writer.Write(Light); + writer.Write(Weapon); + writer.Write(Armour); + writer.Write((ushort)Poison); + writer.Write(Dead); + writer.Write(Hidden); + writer.Write((byte)Effect); + writer.Write(WingEffect); + writer.Write(Extra); + + writer.Write(Buffs.Count); + for (int i = 0; i < Buffs.Count; i++) + { + writer.Write((byte)Buffs[i]); + } + + writer.Write((ushort)LevelEffects); + } + } + public sealed class ObjectRemove : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.ObjectRemove; } + } + + public uint ObjectID; + + protected override void ReadPacket(BinaryReader reader) + { + ObjectID = reader.ReadUInt32(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(ObjectID); + } + + } + public sealed class ObjectTurn : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.ObjectTurn; } + } + + public uint ObjectID; + public Point Location; + public MirDirection Direction; + + protected override void ReadPacket(BinaryReader reader) + { + ObjectID = reader.ReadUInt32(); + Location = new Point(reader.ReadInt32(), reader.ReadInt32()); + Direction = (MirDirection)reader.ReadByte(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(ObjectID); + writer.Write(Location.X); + writer.Write(Location.Y); + writer.Write((byte)Direction); + } + } + public sealed class ObjectWalk : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.ObjectWalk; } + } + + public uint ObjectID; + public Point Location; + public MirDirection Direction; + + protected override void ReadPacket(BinaryReader reader) + { + ObjectID = reader.ReadUInt32(); + Location = new Point(reader.ReadInt32(), reader.ReadInt32()); + Direction = (MirDirection)reader.ReadByte(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(ObjectID); + writer.Write(Location.X); + writer.Write(Location.Y); + writer.Write((byte)Direction); + } + } + public sealed class Chat : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.Chat; } + } + + public override bool Observable + { + get { return Type != ChatType.WhisperIn && Type != ChatType.WhisperOut; } + } + + public string Message = string.Empty; + public ChatType Type; + + protected override void ReadPacket(BinaryReader reader) + { + Message = reader.ReadString(); + Type = (ChatType)reader.ReadByte(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Message); + writer.Write((byte)Type); + } + } + public sealed class ObjectChat : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.ObjectChat; } + } + + public uint ObjectID; + public string Text = string.Empty; + public ChatType Type; + + protected override void ReadPacket(BinaryReader reader) + { + ObjectID = reader.ReadUInt32(); + Text = reader.ReadString(); + Type = (ChatType)reader.ReadByte(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(ObjectID); + writer.Write(Text); + writer.Write((byte)Type); + } + } + public sealed class NewItemInfo : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.NewItemInfo; } + } + + public ItemInfo Info; + + protected override void ReadPacket(BinaryReader reader) + { + Info = new ItemInfo(reader); + } + + protected override void WritePacket(BinaryWriter writer) + { + Info.Save(writer); + } + } + public sealed class NewChatItem : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.NewChatItem; } + } + + public UserItem Item; + + protected override void ReadPacket(BinaryReader reader) + { + Item = new UserItem(reader); + } + + protected override void WritePacket(BinaryWriter writer) + { + Item.Save(writer); + } + } + public sealed class MoveItem : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.MoveItem; } + } + + public MirGridType Grid; + public int From, To; + public bool Success; + + protected override void ReadPacket(BinaryReader reader) + { + Grid = (MirGridType)reader.ReadByte(); + From = reader.ReadInt32(); + To = reader.ReadInt32(); + Success = reader.ReadBoolean(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write((byte)Grid); + writer.Write(From); + writer.Write(To); + writer.Write(Success); + } + } + public sealed class EquipItem : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.EquipItem; } + } + + public MirGridType Grid; + public ulong UniqueID; + public int To; + public bool Success; + + protected override void ReadPacket(BinaryReader reader) + { + Grid = (MirGridType)reader.ReadByte(); + UniqueID = reader.ReadUInt64(); + To = reader.ReadInt32(); + Success = reader.ReadBoolean(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write((byte)Grid); + writer.Write(UniqueID); + writer.Write(To); + writer.Write(Success); + } + } + public sealed class MergeItem : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.MergeItem; } + } + + public MirGridType GridFrom, GridTo; + public ulong IDFrom, IDTo; + public bool Success; + + protected override void ReadPacket(BinaryReader reader) + { + GridFrom = (MirGridType)reader.ReadByte(); + GridTo = (MirGridType)reader.ReadByte(); + IDFrom = reader.ReadUInt64(); + IDTo = reader.ReadUInt64(); + Success = reader.ReadBoolean(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write((byte)GridFrom); + writer.Write((byte)GridTo); + writer.Write(IDFrom); + writer.Write(IDTo); + writer.Write(Success); + } + } + public sealed class RemoveItem : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.RemoveItem; } + } + + public MirGridType Grid; + public ulong UniqueID; + public int To; + public bool Success; + + protected override void ReadPacket(BinaryReader reader) + { + Grid = (MirGridType)reader.ReadByte(); + UniqueID = reader.ReadUInt64(); + To = reader.ReadInt32(); + Success = reader.ReadBoolean(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write((byte)Grid); + writer.Write(UniqueID); + writer.Write(To); + writer.Write(Success); + } + } + public sealed class TakeBackItem : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.TakeBackItem; } + } + + public int From, To; + public bool Success; + + protected override void ReadPacket(BinaryReader reader) + { + From = reader.ReadInt32(); + To = reader.ReadInt32(); + Success = reader.ReadBoolean(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(From); + writer.Write(To); + writer.Write(Success); + } + } + public sealed class StoreItem : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.StoreItem; } + } + + public int From, To; + public bool Success; + + protected override void ReadPacket(BinaryReader reader) + { + From = reader.ReadInt32(); + To = reader.ReadInt32(); + Success = reader.ReadBoolean(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(From); + writer.Write(To); + writer.Write(Success); + } + } + + public sealed class DepositRefineItem : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.DepositRefineItem; } + } + + public int From, To; + public bool Success; + + protected override void ReadPacket(BinaryReader reader) + { + From = reader.ReadInt32(); + To = reader.ReadInt32(); + Success = reader.ReadBoolean(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(From); + writer.Write(To); + writer.Write(Success); + } + } + + public sealed class RetrieveRefineItem : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.RetrieveRefineItem; } + } + + public int From, To; + public bool Success; + + protected override void ReadPacket(BinaryReader reader) + { + From = reader.ReadInt32(); + To = reader.ReadInt32(); + Success = reader.ReadBoolean(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(From); + writer.Write(To); + writer.Write(Success); + } + } + + public sealed class RefineCancel : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.RefineCancel; } + } + + public bool Unlock; + protected override void ReadPacket(BinaryReader reader) + { + Unlock = reader.ReadBoolean(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Unlock); + } + } + + public sealed class RefineItem : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.RefineItem; } + } + + public ulong UniqueID; + + protected override void ReadPacket(BinaryReader reader) + { + UniqueID = reader.ReadUInt64(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(UniqueID); + } + } + + public sealed class DepositTradeItem : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.DepositTradeItem; } + } + + public int From, To; + public bool Success; + + protected override void ReadPacket(BinaryReader reader) + { + From = reader.ReadInt32(); + To = reader.ReadInt32(); + Success = reader.ReadBoolean(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(From); + writer.Write(To); + writer.Write(Success); + } + } + public sealed class RetrieveTradeItem : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.RetrieveTradeItem; } + } + + public int From, To; + public bool Success; + + protected override void ReadPacket(BinaryReader reader) + { + From = reader.ReadInt32(); + To = reader.ReadInt32(); + Success = reader.ReadBoolean(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(From); + writer.Write(To); + writer.Write(Success); + } + } + public sealed class SplitItem : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.SplitItem; } + } + + public UserItem Item; + public MirGridType Grid; + + protected override void ReadPacket(BinaryReader reader) + { + if (reader.ReadBoolean()) + Item = new UserItem(reader); + + Grid = (MirGridType)reader.ReadByte(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Item != null); + if (Item != null) Item.Save(writer); + writer.Write((byte)Grid); + } + } + public sealed class SplitItem1 : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.SplitItem1; } + } + + public MirGridType Grid; + public ulong UniqueID; + public ushort Count; + public bool Success; + + protected override void ReadPacket(BinaryReader reader) + { + Grid = (MirGridType)reader.ReadByte(); + UniqueID = reader.ReadUInt64(); + Count = reader.ReadUInt16(); + Success = reader.ReadBoolean(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write((byte)Grid); + writer.Write(UniqueID); + writer.Write(Count); + writer.Write(Success); + } + } + public sealed class UseItem : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.UseItem; } + } + + public ulong UniqueID; + public bool Success; + public MirGridType Grid; + + protected override void ReadPacket(BinaryReader reader) + { + UniqueID = reader.ReadUInt64(); + Success = reader.ReadBoolean(); + Grid = (MirGridType)reader.ReadByte(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(UniqueID); + writer.Write(Success); + writer.Write((byte)Grid); + } + } + public sealed class DropItem : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.DropItem; } + } + + public ulong UniqueID; + public ushort Count; + public bool Success; + + protected override void ReadPacket(BinaryReader reader) + { + UniqueID = reader.ReadUInt64(); + Count = reader.ReadUInt16(); + Success = reader.ReadBoolean(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(UniqueID); + writer.Write(Count); + writer.Write(Success); + } + } + public sealed class PlayerUpdate : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.PlayerUpdate; } + } + + public uint ObjectID; + public byte Light; + public short Weapon, WeaponEffect, Armour; + public byte WingEffect; + + protected override void ReadPacket(BinaryReader reader) + { + ObjectID = reader.ReadUInt32(); + + Light = reader.ReadByte(); + Weapon = reader.ReadInt16(); + WeaponEffect = reader.ReadInt16(); + Armour = reader.ReadInt16(); + WingEffect = reader.ReadByte(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(ObjectID); + + writer.Write(Light); + writer.Write(Weapon); + writer.Write(WeaponEffect); + writer.Write(Armour); + writer.Write(WingEffect); + } + } + + public sealed class MarriageRequest : Packet + { + public override short Index { get { return (short)ServerPacketIds.MarriageRequest; } } + + public string Name; + protected override void ReadPacket(BinaryReader reader) + { + Name = reader.ReadString(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Name); + } + } + + public sealed class DivorceRequest : Packet + { + public override short Index { get { return (short)ServerPacketIds.DivorceRequest; } } + + public string Name; + protected override void ReadPacket(BinaryReader reader) + { + Name = reader.ReadString(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Name); + } + } + + public sealed class TradeRequest : Packet + { + public override short Index { get { return (short)ServerPacketIds.TradeRequest; } } + + public string Name; + protected override void ReadPacket(BinaryReader reader) + { + Name = reader.ReadString(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Name); + } + } + public sealed class TradeAccept : Packet + { + public override short Index { get { return (short)ServerPacketIds.TradeAccept; } } + + public string Name; + + protected override void ReadPacket(BinaryReader reader) + { + Name = reader.ReadString(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Name); + } + } + public sealed class TradeGold : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.TradeGold; } + } + + public uint Amount; + + protected override void ReadPacket(BinaryReader reader) + { + Amount = reader.ReadUInt32(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Amount); + } + } + public sealed class TradeItem : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.TradeItem; } + } + + public UserItem[] TradeItems; + + protected override void ReadPacket(BinaryReader reader) + { + TradeItems = new UserItem[reader.ReadInt32()]; + for (int i = 0; i < TradeItems.Length; i++) + { + if (reader.ReadBoolean()) + TradeItems[i] = new UserItem(reader); + } + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(TradeItems.Length); + for (int i = 0; i < TradeItems.Length; i++) + { + UserItem T = TradeItems[i]; + writer.Write(T != null); + if (T != null) T.Save(writer); + } + } + } + public sealed class TradeConfirm : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.TradeConfirm; } + } + + protected override void ReadPacket(BinaryReader reader) + { + } + + protected override void WritePacket(BinaryWriter writer) + { + } + } + public sealed class TradeCancel : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.TradeCancel; } + } + + public bool Unlock; + protected override void ReadPacket(BinaryReader reader) + { + Unlock = reader.ReadBoolean(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Unlock); + } + } + + public sealed class LogOutSuccess : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.LogOutSuccess; } + } + + public override bool Observable => false; + + public List Characters = new List(); + + protected override void ReadPacket(BinaryReader reader) + { + int count = reader.ReadInt32(); + + for (int i = 0; i < count; i++) + Characters.Add(new SelectInfo(reader)); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Characters.Count); + + for (int i = 0; i < Characters.Count; i++) + Characters[i].Save(writer); + } + } + public sealed class LogOutFailed : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.LogOutFailed; } + } + + public override bool Observable => false; + + protected override void ReadPacket(BinaryReader reader) + { + } + + protected override void WritePacket(BinaryWriter writer) + { + } + } + + public sealed class ReturnToLogin : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.ReturnToLogin; } + } + + public override bool Observable => false; + + protected override void ReadPacket(BinaryReader reader) + { + } + + protected override void WritePacket(BinaryWriter writer) + { + } + } + + public sealed class TimeOfDay : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.TimeOfDay; } + } + + public LightSetting Lights; + + protected override void ReadPacket(BinaryReader reader) + { + Lights = (LightSetting)reader.ReadByte(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write((byte)Lights); + } + } + + public sealed class ChangeAMode : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.ChangeAMode; } + } + + public AttackMode Mode; + + protected override void ReadPacket(BinaryReader reader) + { + Mode = (AttackMode)reader.ReadByte(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write((byte)Mode); + } + } + public sealed class ChangePMode : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.ChangePMode; } + } + + public PetMode Mode; + + protected override void ReadPacket(BinaryReader reader) + { + Mode = (PetMode)reader.ReadByte(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write((byte)Mode); + } + } + public sealed class ObjectItem : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.ObjectItem; } + } + + public uint ObjectID; + public string Name = string.Empty; + public Color NameColour; + public Point Location; + public ushort Image; + public ItemGrade grade; + + + protected override void ReadPacket(BinaryReader reader) + { + ObjectID = reader.ReadUInt32(); + Name = reader.ReadString(); + NameColour = Color.FromArgb(reader.ReadInt32()); + Location = new Point(reader.ReadInt32(), reader.ReadInt32()); + Image = reader.ReadUInt16(); + grade = (ItemGrade)reader.ReadByte(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(ObjectID); + writer.Write(Name); + writer.Write(NameColour.ToArgb()); + writer.Write(Location.X); + writer.Write(Location.Y); + writer.Write(Image); + writer.Write((byte)grade); + } + } + public sealed class ObjectGold : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.ObjectGold; } + } + + public uint ObjectID; + public uint Gold; + public Point Location; + + + protected override void ReadPacket(BinaryReader reader) + { + ObjectID = reader.ReadUInt32(); + Gold = reader.ReadUInt32(); + Location = new Point(reader.ReadInt32(), reader.ReadInt32()); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(ObjectID); + writer.Write(Gold); + writer.Write(Location.X); + writer.Write(Location.Y); + } + } + public sealed class GainedItem : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.GainedItem; } + } + + public UserItem Item; + + protected override void ReadPacket(BinaryReader reader) + { + Item = new UserItem(reader); + } + + protected override void WritePacket(BinaryWriter writer) + { + Item.Save(writer); + } + } + public sealed class GainedGold : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.GainedGold; } + } + + public uint Gold; + + protected override void ReadPacket(BinaryReader reader) + { + Gold = reader.ReadUInt32(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Gold); + } + } + public sealed class LoseGold : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.LoseGold; } + } + + public uint Gold; + + protected override void ReadPacket(BinaryReader reader) + { + Gold = reader.ReadUInt32(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Gold); + } + } + public sealed class GainedCredit : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.GainedCredit; } + } + + public uint Credit; + + protected override void ReadPacket(BinaryReader reader) + { + Credit = reader.ReadUInt32(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Credit); + } + } + public sealed class LoseCredit : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.LoseCredit; } + } + + public uint Credit; + + protected override void ReadPacket(BinaryReader reader) + { + Credit = reader.ReadUInt32(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Credit); + } + } + + public sealed class ObjectMonster : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.ObjectMonster; } + } + + public uint ObjectID; + public string Name = string.Empty; + public Color NameColour; + public Point Location; + public Monster Image; + public MirDirection Direction; + public byte Effect, AI, Light; + public bool Dead, Skeleton; + public PoisonType Poison; + public bool Hidden, Extra; + public byte ExtraByte; + public long ShockTime; + public bool BindingShotCenter; + + public List Buffs = new List(); + + protected override void ReadPacket(BinaryReader reader) + { + ObjectID = reader.ReadUInt32(); + Name = reader.ReadString(); + NameColour = Color.FromArgb(reader.ReadInt32()); + Location = new Point(reader.ReadInt32(), reader.ReadInt32()); + Image = (Monster)reader.ReadUInt16(); + Direction = (MirDirection)reader.ReadByte(); + Effect = reader.ReadByte(); + AI = reader.ReadByte(); + Light = reader.ReadByte(); + Dead = reader.ReadBoolean(); + Skeleton = reader.ReadBoolean(); + Poison = (PoisonType)reader.ReadUInt16(); + Hidden = reader.ReadBoolean(); + ShockTime = reader.ReadInt64(); + BindingShotCenter = reader.ReadBoolean(); + Extra = reader.ReadBoolean(); + ExtraByte = reader.ReadByte(); + + int count = reader.ReadInt32(); + for (int i = 0; i < count; i++) + { + Buffs.Add((BuffType)reader.ReadByte()); + } + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(ObjectID); + writer.Write(Name); + writer.Write(NameColour.ToArgb()); + writer.Write(Location.X); + writer.Write(Location.Y); + writer.Write((ushort)Image); + writer.Write((byte)Direction); + writer.Write(Effect); + writer.Write(AI); + writer.Write(Light); + writer.Write(Dead); + writer.Write(Skeleton); + writer.Write((ushort)Poison); + writer.Write(Hidden); + writer.Write(ShockTime); + writer.Write(BindingShotCenter); + writer.Write(Extra); + writer.Write((byte)ExtraByte); + + writer.Write(Buffs.Count); + for (int i = 0; i < Buffs.Count; i++) + { + writer.Write((byte)Buffs[i]); + } + } + + } + public sealed class ObjectAttack : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.ObjectAttack; } + } + + public uint ObjectID; + public Point Location; + public MirDirection Direction; + public Spell Spell; + public byte Level; + public byte Type; + + protected override void ReadPacket(BinaryReader reader) + { + ObjectID = reader.ReadUInt32(); + Location = new Point(reader.ReadInt32(), reader.ReadInt32()); + Direction = (MirDirection)reader.ReadByte(); + Spell = (Spell)reader.ReadByte(); + Level = reader.ReadByte(); + Type = reader.ReadByte(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(ObjectID); + writer.Write(Location.X); + writer.Write(Location.Y); + writer.Write((byte)Direction); + writer.Write((byte)Spell); + writer.Write(Level); + writer.Write(Type); + } + } + public sealed class Struck : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.Struck; } + } + + public uint AttackerID; + + protected override void ReadPacket(BinaryReader reader) + { + AttackerID = reader.ReadUInt32(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(AttackerID); + } + } + public sealed class ObjectStruck : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.ObjectStruck; } + } + + public uint ObjectID; + public uint AttackerID; + public Point Location; + public MirDirection Direction; + + protected override void ReadPacket(BinaryReader reader) + { + ObjectID = reader.ReadUInt32(); + AttackerID = reader.ReadUInt32(); + Location = new Point(reader.ReadInt32(), reader.ReadInt32()); + Direction = (MirDirection)reader.ReadByte(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(ObjectID); + writer.Write(AttackerID); + writer.Write(Location.X); + writer.Write(Location.Y); + writer.Write((byte)Direction); + } + } + + public sealed class DamageIndicator : Packet + { + public int Damage; + public DamageType Type; + public uint ObjectID; + + public override short Index + { + get { return (short)ServerPacketIds.DamageIndicator; } + } + + protected override void ReadPacket(BinaryReader reader) + { + Damage = reader.ReadInt32(); + Type = (DamageType)reader.ReadByte(); + ObjectID = reader.ReadUInt32(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Damage); + writer.Write((byte)Type); + writer.Write(ObjectID); + } + } + + public sealed class DuraChanged : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.DuraChanged; } + } + + public ulong UniqueID; + public ushort CurrentDura; + + protected override void ReadPacket(BinaryReader reader) + { + UniqueID = reader.ReadUInt64(); + CurrentDura = reader.ReadUInt16(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(UniqueID); + writer.Write(CurrentDura); + } + } + public sealed class HealthChanged : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.HealthChanged; } + } + + public int HP, MP; + + protected override void ReadPacket(BinaryReader reader) + { + HP = reader.ReadInt32(); + MP = reader.ReadInt32(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(HP); + writer.Write(MP); + } + } + + public sealed class DeleteItem : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.DeleteItem; } + } + + public ulong UniqueID; + public ushort Count; + + protected override void ReadPacket(BinaryReader reader) + { + UniqueID = reader.ReadUInt64(); + Count = reader.ReadUInt16(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(UniqueID); + writer.Write(Count); + } + } + public sealed class Death : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.Death; } + } + + public Point Location; + public MirDirection Direction; + + protected override void ReadPacket(BinaryReader reader) + { + Location = new Point(reader.ReadInt32(), reader.ReadInt32()); + Direction = (MirDirection)reader.ReadByte(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Location.X); + writer.Write(Location.Y); + writer.Write((byte)Direction); + } + } + public sealed class ObjectDied : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.ObjectDied; } + } + + public uint ObjectID; + public Point Location; + public MirDirection Direction; + public byte Type; + + protected override void ReadPacket(BinaryReader reader) + { + ObjectID = reader.ReadUInt32(); + Location = new Point(reader.ReadInt32(), reader.ReadInt32()); + Direction = (MirDirection)reader.ReadByte(); + Type = reader.ReadByte(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(ObjectID); + writer.Write(Location.X); + writer.Write(Location.Y); + writer.Write((byte)Direction); + writer.Write(Type); + } + } + public sealed class ColourChanged : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.ColourChanged; } + } + + public Color NameColour; + + protected override void ReadPacket(BinaryReader reader) + { + NameColour = Color.FromArgb(reader.ReadInt32()); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(NameColour.ToArgb()); + } + } + public sealed class ObjectColourChanged : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.ObjectColourChanged; } + } + + public uint ObjectID; + public Color NameColour; + + protected override void ReadPacket(BinaryReader reader) + { + ObjectID = reader.ReadUInt32(); + NameColour = Color.FromArgb(reader.ReadInt32()); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(ObjectID); + writer.Write(NameColour.ToArgb()); + } + } + public sealed class ObjectGuildNameChanged : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.ObjectGuildNameChanged; } + } + + public uint ObjectID; + public string GuildName; + + protected override void ReadPacket(BinaryReader reader) + { + ObjectID = reader.ReadUInt32(); + GuildName = reader.ReadString(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(ObjectID); + writer.Write(GuildName); + } + } + public sealed class GainExperience : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.GainExperience; } + } + + public uint Amount; + + protected override void ReadPacket(BinaryReader reader) + { + Amount = reader.ReadUInt32(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Amount); + } + } + public sealed class LevelChanged : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.LevelChanged; } + } + + public ushort Level; + public long Experience, MaxExperience; + + protected override void ReadPacket(BinaryReader reader) + { + Level = reader.ReadUInt16(); + Experience = reader.ReadInt64(); + MaxExperience = reader.ReadInt64(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Level); + writer.Write(Experience); + writer.Write(MaxExperience); + } + } + public sealed class ObjectLeveled : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.ObjectLeveled; } + } + + public uint ObjectID; + + protected override void ReadPacket(BinaryReader reader) + { + ObjectID = reader.ReadUInt32(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(ObjectID); + } + } + public sealed class ObjectHarvest : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.ObjectHarvest; } + } + + public uint ObjectID; + public Point Location; + public MirDirection Direction; + + protected override void ReadPacket(BinaryReader reader) + { + ObjectID = reader.ReadUInt32(); + Location = new Point(reader.ReadInt32(), reader.ReadInt32()); + Direction = (MirDirection)reader.ReadByte(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(ObjectID); + writer.Write(Location.X); + writer.Write(Location.Y); + writer.Write((byte)Direction); + } + } + public sealed class ObjectHarvested : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.ObjectHarvested; } + } + + public uint ObjectID; + public Point Location; + public MirDirection Direction; + + protected override void ReadPacket(BinaryReader reader) + { + ObjectID = reader.ReadUInt32(); + Location = new Point(reader.ReadInt32(), reader.ReadInt32()); + Direction = (MirDirection)reader.ReadByte(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(ObjectID); + writer.Write(Location.X); + writer.Write(Location.Y); + writer.Write((byte)Direction); + } + + } + public sealed class ObjectNPC : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.ObjectNpc; } + } + + public uint ObjectID; + public string Name = string.Empty; + + public Color NameColour; + public ushort Image; + public MirGender Gender; + public byte Hair; + public Color Colour; + public Point Location; + public MirDirection Direction; + public List QuestIDs = new List(); + + protected override void ReadPacket(BinaryReader reader) + { + ObjectID = reader.ReadUInt32(); + Name = reader.ReadString(); + NameColour = Color.FromArgb(reader.ReadInt32()); + Image = reader.ReadUInt16(); + Gender = (MirGender)reader.ReadByte(); + Hair = reader.ReadByte(); + Colour = Color.FromArgb(reader.ReadInt32()); + Location = new Point(reader.ReadInt32(), reader.ReadInt32()); + Direction = (MirDirection)reader.ReadByte(); + + int count = reader.ReadInt32(); + + for (var i = 0; i < count; i++) + QuestIDs.Add(reader.ReadInt32()); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(ObjectID); + writer.Write(Name); + writer.Write(NameColour.ToArgb()); + writer.Write(Image); + writer.Write((byte)Gender); + writer.Write(Hair); + writer.Write(Colour.ToArgb()); + writer.Write(Location.X); + writer.Write(Location.Y); + writer.Write((byte)Direction); + + writer.Write(QuestIDs.Count); + + for (int i = 0; i < QuestIDs.Count; i++) + writer.Write(QuestIDs[i]); + } + } + public sealed class NPCResponse : Packet + { + public override short Index { get { return (short)ServerPacketIds.NPCResponse; } } + + public List Page; + + protected override void ReadPacket(BinaryReader reader) + { + Page = new List(); + + int count = reader.ReadInt32(); + + for (int i = 0; i < count; i++) + Page.Add(reader.ReadString()); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Page.Count); + + for (int i = 0; i < Page.Count; i++) + writer.Write(Page[i]); + } + } + public sealed class ObjectHide : Packet + { + public override short Index { get { return (short)ServerPacketIds.ObjectHide; } } + + public uint ObjectID; + + protected override void ReadPacket(BinaryReader reader) + { + ObjectID = reader.ReadUInt32(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(ObjectID); + } + } + public sealed class ObjectShow : Packet + { + public override short Index { get { return (short)ServerPacketIds.ObjectShow; } } + + public uint ObjectID; + + protected override void ReadPacket(BinaryReader reader) + { + ObjectID = reader.ReadUInt32(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(ObjectID); + } + } + public sealed class Poisoned : Packet + { + public override short Index { get { return (short)ServerPacketIds.Poisoned; } } + + public PoisonType Poison; + + protected override void ReadPacket(BinaryReader reader) + { + Poison = (PoisonType)reader.ReadUInt16(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write((ushort)Poison); + } + } + public sealed class ObjectPoisoned : Packet + { + public override short Index { get { return (short)ServerPacketIds.ObjectPoisoned; } } + + public uint ObjectID; + public PoisonType Poison; + + protected override void ReadPacket(BinaryReader reader) + { + ObjectID = reader.ReadUInt32(); + Poison = (PoisonType)reader.ReadUInt16(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(ObjectID); + writer.Write((ushort)Poison); + } + } + public sealed class MapChanged : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.MapChanged; } + } + + public int MapIndex; + public string FileName = string.Empty; + public string Title = string.Empty; + public ushort MiniMap, BigMap, Music; + public LightSetting Lights; + public Point Location; + public MirDirection Direction; + public byte MapDarkLight; + + + protected override void ReadPacket(BinaryReader reader) + { + MapIndex = reader.ReadInt32(); + FileName = reader.ReadString(); + Title = reader.ReadString(); + MiniMap = reader.ReadUInt16(); + BigMap = reader.ReadUInt16(); + Lights = (LightSetting)reader.ReadByte(); + Location = new Point(reader.ReadInt32(), reader.ReadInt32()); + Direction = (MirDirection)reader.ReadByte(); + MapDarkLight = reader.ReadByte(); + Music = reader.ReadUInt16(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(MapIndex); + writer.Write(FileName); + writer.Write(Title); + writer.Write(MiniMap); + writer.Write(BigMap); + writer.Write((byte)Lights); + writer.Write(Location.X); + writer.Write(Location.Y); + writer.Write((byte)Direction); + writer.Write(MapDarkLight); + writer.Write(Music); + } + } + public sealed class ObjectTeleportOut : Packet + { + public override short Index { get { return (short)ServerPacketIds.ObjectTeleportOut; } } + + public uint ObjectID; + public byte Type; + + protected override void ReadPacket(BinaryReader reader) + { + ObjectID = reader.ReadUInt32(); + Type = reader.ReadByte(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(ObjectID); + writer.Write(Type); + } + } + public sealed class ObjectTeleportIn : Packet + { + public override short Index { get { return (short)ServerPacketIds.ObjectTeleportIn; } } + + public uint ObjectID; + public byte Type; + + protected override void ReadPacket(BinaryReader reader) + { + ObjectID = reader.ReadUInt32(); + Type = reader.ReadByte(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(ObjectID); + writer.Write(Type); + } + } + public sealed class TeleportIn : Packet + { + public override short Index { get { return (short)ServerPacketIds.TeleportIn; } } + + protected override void ReadPacket(BinaryReader reader) + { + } + protected override void WritePacket(BinaryWriter writer) + { + } + } + public sealed class NPCGoods : Packet + { + public override short Index { get { return (short)ServerPacketIds.NPCGoods; } } + + public List List = new List(); + public float Rate; + public PanelType Type; + public bool HideAddedStats; + + protected override void ReadPacket(BinaryReader reader) + { + int count = reader.ReadInt32(); + + for (int i = 0; i < count; i++) + List.Add(new UserItem(reader)); + + Rate = reader.ReadSingle(); + Type = (PanelType)reader.ReadByte(); + + HideAddedStats = reader.ReadBoolean(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(List.Count); + + for (int i = 0; i < List.Count; i++) + List[i].Save(writer); + + writer.Write(Rate); + writer.Write((byte)Type); + + writer.Write(HideAddedStats); + } + } + public sealed class NPCSell : Packet + { + public override short Index { get { return (short)ServerPacketIds.NPCSell; } } + + protected override void ReadPacket(BinaryReader reader) + { + } + protected override void WritePacket(BinaryWriter writer) + { + } + } + public sealed class NPCRepair : Packet + { + public override short Index { get { return (short)ServerPacketIds.NPCRepair; } } + public float Rate; + + protected override void ReadPacket(BinaryReader reader) + { + Rate = reader.ReadSingle(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Rate); + } + } + public sealed class NPCSRepair : Packet + { + public override short Index { get { return (short)ServerPacketIds.NPCSRepair; } } + + public float Rate; + + protected override void ReadPacket(BinaryReader reader) + { + Rate = reader.ReadSingle(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Rate); + } + } + + public sealed class NPCRefine : Packet + { + public override short Index { get { return (short)ServerPacketIds.NPCRefine; } } + + public float Rate; + public bool Refining; + + protected override void ReadPacket(BinaryReader reader) + { + Rate = reader.ReadSingle(); + Refining = reader.ReadBoolean(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Rate); + writer.Write(Refining); + } + } + + public sealed class NPCCheckRefine : Packet + { + public override short Index { get { return (short)ServerPacketIds.NPCCheckRefine; } } + + + protected override void ReadPacket(BinaryReader reader) + { + } + protected override void WritePacket(BinaryWriter writer) + { + } + } + + public sealed class NPCCollectRefine : Packet + { + public override short Index { get { return (short)ServerPacketIds.NPCCollectRefine; } } + + public bool Success; + + protected override void ReadPacket(BinaryReader reader) + { + Success = reader.ReadBoolean(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Success); + } + } + + public sealed class NPCReplaceWedRing : Packet + { + public override short Index { get { return (short)ServerPacketIds.NPCReplaceWedRing; } } + + public float Rate; + + protected override void ReadPacket(BinaryReader reader) + { + Rate = reader.ReadSingle(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Rate); + } + } + + public sealed class NPCStorage : Packet + { + public override short Index { get { return (short)ServerPacketIds.NPCStorage; } } + + protected override void ReadPacket(BinaryReader reader) + { + } + protected override void WritePacket(BinaryWriter writer) + { + } + } + public sealed class SellItem : Packet + { + public override short Index { get { return (short)ServerPacketIds.SellItem; } } + + public ulong UniqueID; + public ushort Count; + public bool Success; + + protected override void ReadPacket(BinaryReader reader) + { + UniqueID = reader.ReadUInt64(); + Count = reader.ReadUInt16(); + Success = reader.ReadBoolean(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(UniqueID); + writer.Write(Count); + writer.Write(Success); + } + } + public sealed class RepairItem : Packet + { + public override short Index { get { return (short)ServerPacketIds.RepairItem; } } + + public ulong UniqueID; + + protected override void ReadPacket(BinaryReader reader) + { + UniqueID = reader.ReadUInt64(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(UniqueID); + } + } + public sealed class ItemRepaired : Packet + { + public override short Index { get { return (short)ServerPacketIds.ItemRepaired; } } + + public ulong UniqueID; + public ushort MaxDura, CurrentDura; + + protected override void ReadPacket(BinaryReader reader) + { + UniqueID = reader.ReadUInt64(); + MaxDura = reader.ReadUInt16(); + CurrentDura = reader.ReadUInt16(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(UniqueID); + writer.Write(MaxDura); + writer.Write(CurrentDura); + } + } + + public sealed class ItemSlotSizeChanged : Packet + { + public override short Index { get { return (short)ServerPacketIds.ItemSlotSizeChanged; } } + + public ulong UniqueID; + public int SlotSize; + + protected override void ReadPacket(BinaryReader reader) + { + UniqueID = reader.ReadUInt64(); + SlotSize = reader.ReadInt32(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(UniqueID); + writer.Write(SlotSize); + } + } + + public sealed class ItemSealChanged : Packet + { + public override short Index { get { return (short)ServerPacketIds.ItemSealChanged; } } + + public ulong UniqueID; + public DateTime ExpiryDate; + + protected override void ReadPacket(BinaryReader reader) + { + UniqueID = reader.ReadUInt64(); + ExpiryDate = DateTime.FromBinary(reader.ReadInt64()); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(UniqueID); + writer.Write(ExpiryDate.ToBinary()); + } + } + + + public sealed class NewMagic : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.NewMagic; } + } + + public ClientMagic Magic; + protected override void ReadPacket(BinaryReader reader) + { + Magic = new ClientMagic(reader); + } + + protected override void WritePacket(BinaryWriter writer) + { + Magic.Save(writer); + } + } + public sealed class RemoveMagic : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.RemoveMagic; } + } + + public int PlaceId; + protected override void ReadPacket(BinaryReader reader) + { + PlaceId = reader.ReadInt32(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(PlaceId); + } + + } + public sealed class MagicLeveled : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.MagicLeveled; } + } + + public uint ObjectID; + public Spell Spell; + public byte Level; + public ushort Experience; + + protected override void ReadPacket(BinaryReader reader) + { + ObjectID = reader.ReadUInt32(); + Spell = (Spell)reader.ReadByte(); + Level = reader.ReadByte(); + Experience = reader.ReadUInt16(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(ObjectID); + writer.Write((byte)Spell); + writer.Write(Level); + writer.Write(Experience); + } + } + + public sealed class Magic : Packet + { + public override short Index { get { return (short)ServerPacketIds.Magic; } } + + public Spell Spell; + public uint TargetID; + public Point Target; + public bool Cast; + public byte Level; + + public List SecondaryTargetIDs = new List(); + + protected override void ReadPacket(BinaryReader reader) + { + Spell = (Spell)reader.ReadByte(); + TargetID = reader.ReadUInt32(); + Target = new Point(reader.ReadInt32(), reader.ReadInt32()); + Cast = reader.ReadBoolean(); + Level = reader.ReadByte(); + + var count = reader.ReadInt32(); + SecondaryTargetIDs = new List(); + for (int i = 0; i < count; i++) + { + SecondaryTargetIDs.Add(reader.ReadUInt32()); + } + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write((byte)Spell); + writer.Write(TargetID); + writer.Write(Target.X); + writer.Write(Target.Y); + writer.Write(Cast); + writer.Write(Level); + + writer.Write(SecondaryTargetIDs.Count); + foreach (var targetID in SecondaryTargetIDs) + { + writer.Write(targetID); + } + + } + } + public sealed class MagicDelay : Packet + { + public override short Index { get { return (short)ServerPacketIds.MagicDelay; } } + + public uint ObjectID; + public Spell Spell; + public long Delay; + + protected override void ReadPacket(BinaryReader reader) + { + ObjectID = reader.ReadUInt32(); + Spell = (Spell)reader.ReadByte(); + Delay = reader.ReadInt64(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(ObjectID); + writer.Write((byte)Spell); + writer.Write(Delay); + } + } + public sealed class MagicCast : Packet + { + public override short Index { get { return (short)ServerPacketIds.MagicCast; } } + + public Spell Spell; + + protected override void ReadPacket(BinaryReader reader) + { + Spell = (Spell)reader.ReadByte(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write((byte)Spell); + } + } + + public sealed class ObjectMagic : Packet + { + public override short Index { get { return (short)ServerPacketIds.ObjectMagic; } } + + public uint ObjectID; + public Point Location; + public MirDirection Direction; + + public Spell Spell; + public uint TargetID; + public Point Target; + public bool Cast; + public byte Level; + public bool SelfBroadcast = false; + public List SecondaryTargetIDs = new List(); + + protected override void ReadPacket(BinaryReader reader) + { + ObjectID = reader.ReadUInt32(); + Location = new Point(reader.ReadInt32(), reader.ReadInt32()); + Direction = (MirDirection)reader.ReadByte(); + + Spell = (Spell)reader.ReadByte(); + TargetID = reader.ReadUInt32(); + + Target = new Point(reader.ReadInt32(), reader.ReadInt32()); + Cast = reader.ReadBoolean(); + Level = reader.ReadByte(); + SelfBroadcast = reader.ReadBoolean(); + + var count = reader.ReadInt32(); + SecondaryTargetIDs = new List(); + for (int i = 0; i < count; i++) + { + SecondaryTargetIDs.Add(reader.ReadUInt32()); + } + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(ObjectID); + writer.Write(Location.X); + writer.Write(Location.Y); + writer.Write((byte)Direction); + + writer.Write((byte)Spell); + writer.Write(TargetID); + + writer.Write(Target.X); + writer.Write(Target.Y); + writer.Write(Cast); + writer.Write(Level); + writer.Write(SelfBroadcast); + + writer.Write(SecondaryTargetIDs.Count); + foreach (var targetID in SecondaryTargetIDs) + { + writer.Write(targetID); + } + } + } + + + + public sealed class ObjectEffect : Packet + { + public override short Index { get { return (short)ServerPacketIds.ObjectEffect; } } + + public uint ObjectID; + public SpellEffect Effect; + public uint EffectType; + public uint DelayTime = 0; + public uint Time = 0; + + protected override void ReadPacket(BinaryReader reader) + { + ObjectID = reader.ReadUInt32(); + Effect = (SpellEffect)reader.ReadByte(); + EffectType = reader.ReadUInt32(); + DelayTime = reader.ReadUInt32(); + Time = reader.ReadUInt32(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(ObjectID); + writer.Write((byte)Effect); + writer.Write(EffectType); + writer.Write(DelayTime); + writer.Write(Time); + } + } + + public sealed class ObjectProjectile : Packet + { + public override short Index { get { return (short)ServerPacketIds.ObjectProjectile; } } + + public Spell Spell; + public uint Source; + public uint Destination; + + protected override void ReadPacket(BinaryReader reader) + { + Spell = (Spell)reader.ReadByte(); + Source = reader.ReadUInt32(); + Destination = reader.ReadUInt32(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write((byte)Spell); + writer.Write(Source); + writer.Write(Destination); + } + } + + public sealed class RangeAttack : Packet //ArcherTest + { + public override short Index { get { return (short)ServerPacketIds.RangeAttack; } } + + public uint TargetID; + public Point Target; + public Spell Spell; + + protected override void ReadPacket(BinaryReader reader) + { + TargetID = reader.ReadUInt32(); + Target = new Point(reader.ReadInt32(), reader.ReadInt32()); + Spell = (Spell)reader.ReadByte(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(TargetID); + writer.Write(Target.X); + writer.Write(Target.Y); + writer.Write((byte)Spell); + } + } + + public sealed class Pushed : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.Pushed; } + } + + public Point Location; + public MirDirection Direction; + + + protected override void ReadPacket(BinaryReader reader) + { + Location = new Point(reader.ReadInt32(), reader.ReadInt32()); + Direction = (MirDirection)reader.ReadByte(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Location.X); + writer.Write(Location.Y); + writer.Write((byte)Direction); + } + } + public sealed class ObjectPushed : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.ObjectPushed; } + } + + public uint ObjectID; + public Point Location; + public MirDirection Direction; + + protected override void ReadPacket(BinaryReader reader) + { + ObjectID = reader.ReadUInt32(); + Location = new Point(reader.ReadInt32(), reader.ReadInt32()); + Direction = (MirDirection)reader.ReadByte(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(ObjectID); + writer.Write(Location.X); + writer.Write(Location.Y); + writer.Write((byte)Direction); + } + } + public sealed class ObjectName : Packet + { + public override short Index { get { return (short)ServerPacketIds.ObjectName; } } + + public uint ObjectID; + public string Name = string.Empty; + + protected override void ReadPacket(BinaryReader reader) + { + ObjectID = reader.ReadUInt32(); + Name = reader.ReadString(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(ObjectID); + writer.Write(Name); + } + } + public sealed class UserStorage : Packet + { + public override short Index { get { return (short)ServerPacketIds.UserStorage; } } + + public UserItem[] Storage; + + protected override void ReadPacket(BinaryReader reader) + { + if (!reader.ReadBoolean()) return; + + Storage = new UserItem[reader.ReadInt32()]; + for (int i = 0; i < Storage.Length; i++) + { + if (!reader.ReadBoolean()) continue; + Storage[i] = new UserItem(reader); + } + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Storage != null); + if (Storage == null) return; + + writer.Write(Storage.Length); + for (int i = 0; i < Storage.Length; i++) + { + writer.Write(Storage[i] != null); + if (Storage[i] == null) continue; + + Storage[i].Save(writer); + } + } + } + public sealed class SwitchGroup : Packet + { + public override short Index { get { return (short)ServerPacketIds.SwitchGroup; } } + + public bool AllowGroup; + protected override void ReadPacket(BinaryReader reader) + { + AllowGroup = reader.ReadBoolean(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(AllowGroup); + } + } + public sealed class DeleteGroup : Packet + { + public override short Index { get { return (short)ServerPacketIds.DeleteGroup; } } + + protected override void ReadPacket(BinaryReader reader) + { + } + protected override void WritePacket(BinaryWriter writer) + { + } + } + public sealed class DeleteMember : Packet + { + public override short Index { get { return (short)ServerPacketIds.DeleteMember; } } + + public string Name = string.Empty; + protected override void ReadPacket(BinaryReader reader) + { + Name = reader.ReadString(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Name); + } + } + public sealed class GroupInvite : Packet + { + public override short Index { get { return (short)ServerPacketIds.GroupInvite; } } + + public string Name = string.Empty; + protected override void ReadPacket(BinaryReader reader) + { + Name = reader.ReadString(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Name); + } + } + public sealed class AddMember : Packet + { + public override short Index { get { return (short)ServerPacketIds.AddMember; } } + + public string Name = string.Empty; + protected override void ReadPacket(BinaryReader reader) + { + Name = reader.ReadString(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Name); + } + } + public sealed class GroupMembersMap : Packet + { + public override short Index { get { return (short)ServerPacketIds.GroupMembersMap; } } + + public string PlayerName = string.Empty; + public string PlayerMap = string.Empty; + + protected override void ReadPacket(BinaryReader reader) + { + PlayerName = reader.ReadString(); + PlayerMap = reader.ReadString(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(PlayerName); + writer.Write(PlayerMap); + } + } + public sealed class SendMemberLocation : Packet + { + public override short Index { get { return (short)ServerPacketIds.SendMemberLocation; } } + + public string MemberName; + public Point MemberLocation; + + protected override void ReadPacket(BinaryReader reader) + { + MemberName = reader.ReadString(); + MemberLocation = new Point(reader.ReadInt32(), reader.ReadInt32()); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(MemberName); + writer.Write(MemberLocation.X); + writer.Write(MemberLocation.Y); + } + } + public sealed class Revived : Packet + { + public override short Index { get { return (short)ServerPacketIds.Revived; } } + + protected override void ReadPacket(BinaryReader reader) + { + } + protected override void WritePacket(BinaryWriter writer) + { + } + } + public sealed class ObjectRevived : Packet + { + public override short Index { get { return (short)ServerPacketIds.ObjectRevived; } } + public uint ObjectID; + public bool Effect; + + protected override void ReadPacket(BinaryReader reader) + { + ObjectID = reader.ReadUInt32(); + Effect = reader.ReadBoolean(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(ObjectID); + writer.Write(Effect); + } + } + public sealed class SpellToggle : Packet + { + public override short Index { get { return (short)ServerPacketIds.SpellToggle; } } + public uint ObjectID; + public Spell Spell; + public bool CanUse; + + protected override void ReadPacket(BinaryReader reader) + { + ObjectID = reader.ReadUInt32(); + Spell = (Spell)reader.ReadByte(); + CanUse = reader.ReadBoolean(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(ObjectID); + writer.Write((byte)Spell); + writer.Write(CanUse); + } + } + public sealed class ObjectHealth : Packet + { + public override short Index { get { return (short)ServerPacketIds.ObjectHealth; } } + public uint ObjectID; + public byte Percent, Expire; + + protected override void ReadPacket(BinaryReader reader) + { + ObjectID = reader.ReadUInt32(); + Percent = reader.ReadByte(); + Expire = reader.ReadByte(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(ObjectID); + writer.Write(Percent); + writer.Write(Expire); + } + } + + public sealed class ObjectMana : Packet + { + public override short Index { get { return (short)ServerPacketIds.ObjectMana; } } + public uint ObjectID; + public byte Percent; + + protected override void ReadPacket(BinaryReader reader) + { + ObjectID = reader.ReadUInt32(); + Percent = reader.ReadByte(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(ObjectID); + writer.Write(Percent); + } + } + public sealed class MapEffect : Packet + { + public override short Index { get { return (short)ServerPacketIds.MapEffect; } } + + public Point Location; + public SpellEffect Effect; + public byte Value; + + protected override void ReadPacket(BinaryReader reader) + { + Location = new Point(reader.ReadInt32(), reader.ReadInt32()); + Effect = (SpellEffect)reader.ReadByte(); + Value = reader.ReadByte(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Location.X); + writer.Write(Location.Y); + writer.Write((byte)Effect); + writer.Write(Value); + } + } + public sealed class AllowObserve : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.AllowObserve; } + } + + public bool Allow; + + protected override void ReadPacket(BinaryReader reader) + { + Allow = reader.ReadBoolean(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Allow); + } + } + public sealed class ObjectRangeAttack : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.ObjectRangeAttack; } + } + + public uint ObjectID; + public Point Location; + public MirDirection Direction; + public uint TargetID; + public Point Target; + public byte Type; + public Spell Spell; + public byte Level; + + protected override void ReadPacket(BinaryReader reader) + { + ObjectID = reader.ReadUInt32(); + Location = new Point(reader.ReadInt32(), reader.ReadInt32()); + Direction = (MirDirection)reader.ReadByte(); + TargetID = reader.ReadUInt32(); + Target = new Point(reader.ReadInt32(), reader.ReadInt32()); + Type = reader.ReadByte(); + Spell = (Spell)reader.ReadByte(); + Level = reader.ReadByte(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(ObjectID); + writer.Write(Location.X); + writer.Write(Location.Y); + writer.Write((byte)Direction); + writer.Write(TargetID); + writer.Write(Target.X); + writer.Write(Target.Y); + writer.Write(Type); + writer.Write((byte)Spell); + writer.Write(Level); + } + } + public sealed class AddBuff : Packet + { + public override short Index { get { return (short)ServerPacketIds.AddBuff; } } + + public ClientBuff Buff; + + protected override void ReadPacket(BinaryReader reader) + { + Buff = new ClientBuff(reader); + } + protected override void WritePacket(BinaryWriter writer) + { + Buff.Save(writer); + } + } + public sealed class RemoveBuff : Packet + { + public override short Index { get { return (short)ServerPacketIds.RemoveBuff; } } + + public BuffType Type; + public uint ObjectID; + + protected override void ReadPacket(BinaryReader reader) + { + Type = (BuffType)reader.ReadByte(); + ObjectID = reader.ReadUInt32(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write((byte)Type); + writer.Write(ObjectID); + } + } + public sealed class PauseBuff : Packet + { + public override short Index { get { return (short)ServerPacketIds.PauseBuff; } } + + public BuffType Type; + public uint ObjectID; + public bool Paused; + + protected override void ReadPacket(BinaryReader reader) + { + Type = (BuffType)reader.ReadByte(); + ObjectID = reader.ReadUInt32(); + Paused = reader.ReadBoolean(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write((byte)Type); + writer.Write(ObjectID); + writer.Write(Paused); + } + } + + public sealed class ObjectHidden : Packet + { + public override short Index { get { return (short)ServerPacketIds.ObjectHidden; } } + public uint ObjectID; + public bool Hidden; + + protected override void ReadPacket(BinaryReader reader) + { + ObjectID = reader.ReadUInt32(); + Hidden = reader.ReadBoolean(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(ObjectID); + writer.Write(Hidden); + } + } + public sealed class RefreshItem : Packet + { + public override short Index { get { return (short)ServerPacketIds.RefreshItem; } } + public UserItem Item; + protected override void ReadPacket(BinaryReader reader) + { + Item = new UserItem(reader); + } + protected override void WritePacket(BinaryWriter writer) + { + Item.Save(writer); + } + } + public sealed class ObjectSpell : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.ObjectSpell; } + } + + public uint ObjectID; + public Point Location; + public Spell Spell; + public MirDirection Direction; + public bool Param; + + protected override void ReadPacket(BinaryReader reader) + { + ObjectID = reader.ReadUInt32(); + Location = new Point(reader.ReadInt32(), reader.ReadInt32()); + Spell = (Spell)reader.ReadByte(); + Direction = (MirDirection)reader.ReadByte(); + Param = reader.ReadBoolean(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(ObjectID); + writer.Write(Location.X); + writer.Write(Location.Y); + writer.Write((byte)Spell); + writer.Write((byte)Direction); + writer.Write(Param); + } + } + public sealed class UserDash : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.UserDash; } + } + + public Point Location; + public MirDirection Direction; + + + protected override void ReadPacket(BinaryReader reader) + { + Location = new Point(reader.ReadInt32(), reader.ReadInt32()); + Direction = (MirDirection)reader.ReadByte(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Location.X); + writer.Write(Location.Y); + writer.Write((byte)Direction); + } + } + public sealed class ObjectDash : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.ObjectDash; } + } + + public uint ObjectID; + public Point Location; + public MirDirection Direction; + + + protected override void ReadPacket(BinaryReader reader) + { + ObjectID = reader.ReadUInt32(); + Location = new Point(reader.ReadInt32(), reader.ReadInt32()); + Direction = (MirDirection)reader.ReadByte(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(ObjectID); + writer.Write(Location.X); + writer.Write(Location.Y); + writer.Write((byte)Direction); + } + } + public sealed class UserDashFail : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.UserDashFail; } + } + + public Point Location; + public MirDirection Direction; + + + protected override void ReadPacket(BinaryReader reader) + { + Location = new Point(reader.ReadInt32(), reader.ReadInt32()); + Direction = (MirDirection)reader.ReadByte(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Location.X); + writer.Write(Location.Y); + writer.Write((byte)Direction); + } + } + public sealed class ObjectDashFail : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.ObjectDashFail; } + } + + public uint ObjectID; + public Point Location; + public MirDirection Direction; + + + protected override void ReadPacket(BinaryReader reader) + { + ObjectID = reader.ReadUInt32(); + Location = new Point(reader.ReadInt32(), reader.ReadInt32()); + Direction = (MirDirection)reader.ReadByte(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(ObjectID); + writer.Write(Location.X); + writer.Write(Location.Y); + writer.Write((byte)Direction); + } + } + + public sealed class NPCConsign : Packet + { + public override short Index { get { return (short)ServerPacketIds.NPCConsign; } } + + protected override void ReadPacket(BinaryReader reader) + { + } + protected override void WritePacket(BinaryWriter writer) + { + } + } + public sealed class NPCMarket : Packet + { + public override short Index { get { return (short)ServerPacketIds.NPCMarket; } } + + public List Listings = new List(); + public int Pages; + public bool UserMode; + + protected override void ReadPacket(BinaryReader reader) + { + int count = reader.ReadInt32(); + + for (int i = 0; i < count; i++) + Listings.Add(new ClientAuction(reader)); + + Pages = reader.ReadInt32(); + UserMode = reader.ReadBoolean(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Listings.Count); + + for (int i = 0; i < Listings.Count; i++) + Listings[i].Save(writer); + + writer.Write(Pages); + writer.Write(UserMode); + } + } + public sealed class NPCMarketPage : Packet + { + public override short Index { get { return (short)ServerPacketIds.NPCMarketPage; } } + + public List Listings = new List(); + + protected override void ReadPacket(BinaryReader reader) + { + int count = reader.ReadInt32(); + + for (int i = 0; i < count; i++) + Listings.Add(new ClientAuction(reader)); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Listings.Count); + + for (int i = 0; i < Listings.Count; i++) + Listings[i].Save(writer); + } + } + public sealed class ConsignItem : Packet + { + public override short Index { get { return (short)ServerPacketIds.ConsignItem; } } + + public ulong UniqueID; + public bool Success; + + protected override void ReadPacket(BinaryReader reader) + { + UniqueID = reader.ReadUInt64(); + Success = reader.ReadBoolean(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(UniqueID); + writer.Write(Success); + } + } + public sealed class MarketFail : Packet + { + public override short Index { get { return (short)ServerPacketIds.MarketFail; } } + + public byte Reason; + + /* + * 0: Dead. + * 1: Not talking to TrustMerchant. + * 2: Already Sold. + * 3: Expired. + * 4: Not enough Gold. + * 5: Not enough bag space. + * 6: You cannot buy your own items. + * 7: Trust Merchant is too far. + * 8: Too much Gold. + */ + + protected override void ReadPacket(BinaryReader reader) + { + Reason = reader.ReadByte(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Reason); + } + } + public sealed class MarketSuccess : Packet + { + public override short Index { get { return (short)ServerPacketIds.MarketSuccess; } } + + public string Message = string.Empty; + + protected override void ReadPacket(BinaryReader reader) + { + Message = reader.ReadString(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Message); + } + } + public sealed class BaseStatsInfo : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.BaseStatsInfo; } + } + + public BaseStats Stats; + + protected override void ReadPacket(BinaryReader reader) + { + Stats = new BaseStats(reader); + } + + protected override void WritePacket(BinaryWriter writer) + { + Stats.Save(writer); + } + } + + public sealed class UserName : Packet + { + public override short Index { get { return (short)ServerPacketIds.UserName; } } + public uint Id; + public string Name; + protected override void ReadPacket(BinaryReader reader) + { + Id = reader.ReadUInt32(); + Name = reader.ReadString(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Id); + writer.Write(Name); + } + } + public sealed class ChatItemStats : Packet + { + public override short Index { get { return (short)ServerPacketIds.ChatItemStats; } } + public ulong ChatItemId; + public UserItem Stats; + protected override void ReadPacket(BinaryReader reader) + { + ChatItemId = reader.ReadUInt64(); + Stats = new UserItem(reader); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(ChatItemId); + if (Stats != null) Stats.Save(writer); + } + } + + public sealed class GuildNoticeChange : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.GuildNoticeChange; } + } + public int update = 0; + public List notice = new List(); + protected override void ReadPacket(BinaryReader reader) + { + update = reader.ReadInt32(); + for (int i = 0; i < update; i++) + notice.Add(reader.ReadString()); + } + protected override void WritePacket(BinaryWriter writer) + { + if (update < 0) + { + writer.Write(update); + return; + } + writer.Write(notice.Count); + for (int i = 0; i < notice.Count; i++) + writer.Write(notice[i]); + } + } + + public sealed class GuildMemberChange : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.GuildMemberChange; } + } + public string Name = string.Empty; + public byte Status = 0; + public byte RankIndex = 0; + public List Ranks = new List(); + protected override void ReadPacket(BinaryReader reader) + { + Name = reader.ReadString(); + RankIndex = reader.ReadByte(); + Status = reader.ReadByte(); + if (Status > 5) + { + int rankcount = reader.ReadInt32(); + for (int i = 0; i < rankcount; i++) + Ranks.Add(new GuildRank(reader)); + } + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Name); + writer.Write(RankIndex); + writer.Write(Status); + if (Status > 5) + { + writer.Write(Ranks.Count); + for (int i = 0; i < Ranks.Count; i++) + Ranks[i].Save(writer); + } + } + } + + public sealed class GuildStatus : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.GuildStatus; } + } + public string GuildName = string.Empty; + public string GuildRankName = string.Empty; + public byte Level; + public long Experience; + public long MaxExperience; + public uint Gold; + public byte SparePoints; + public int MemberCount; + public int MaxMembers; + public bool Voting; + public byte ItemCount; + public byte BuffCount; + public GuildRankOptions MyOptions; + public int MyRankId; + + protected override void ReadPacket(BinaryReader reader) + { + GuildName = reader.ReadString(); + GuildRankName = reader.ReadString(); + Level = reader.ReadByte(); + Experience = reader.ReadInt64(); + MaxExperience = reader.ReadInt64(); + Gold = reader.ReadUInt32(); + SparePoints = reader.ReadByte(); + MemberCount = reader.ReadInt32(); + MaxMembers = reader.ReadInt32(); + Voting = reader.ReadBoolean(); + ItemCount = reader.ReadByte(); + BuffCount = reader.ReadByte(); + MyOptions = (GuildRankOptions)reader.ReadByte(); + MyRankId = reader.ReadInt32(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(GuildName); + writer.Write(GuildRankName); + writer.Write(Level); + writer.Write(Experience); + writer.Write(MaxExperience); + writer.Write(Gold); + writer.Write(SparePoints); + writer.Write(MemberCount); + writer.Write(MaxMembers); + writer.Write(Voting); + writer.Write(ItemCount); + writer.Write(BuffCount); + writer.Write((byte)MyOptions); + writer.Write(MyRankId); + } + } + public sealed class GuildInvite : Packet + { + public override short Index { get { return (short)ServerPacketIds.GuildInvite; } } + + public string Name = string.Empty; + protected override void ReadPacket(BinaryReader reader) + { + Name = reader.ReadString(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Name); + } + } + public sealed class GuildExpGain : Packet + { + public override short Index { get { return (short)ServerPacketIds.GuildExpGain; } } + + public uint Amount = 0; + protected override void ReadPacket(BinaryReader reader) + { + Amount = reader.ReadUInt32(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Amount); + } + } + public sealed class GuildNameRequest : Packet + { + public override short Index { get { return (short)ServerPacketIds.GuildNameRequest; } } + protected override void ReadPacket(BinaryReader reader) + { + } + protected override void WritePacket(BinaryWriter writer) + { + } + } + + public sealed class GuildStorageGoldChange : Packet + { + public override short Index { get { return (short)ServerPacketIds.GuildStorageGoldChange; } } + public uint Amount = 0; + public byte Type = 0; + public string Name = string.Empty; + + protected override void ReadPacket(BinaryReader reader) + { + Amount = reader.ReadUInt32(); + Type = reader.ReadByte(); + Name = reader.ReadString(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Amount); + writer.Write(Type); + writer.Write(Name); + } + } + public sealed class GuildStorageItemChange : Packet + { + public override short Index { get { return (short)ServerPacketIds.GuildStorageItemChange; } } + public int User = 0; + public byte Type = 0; + public int To = 0; + public int From = 0; + public GuildStorageItem Item = null; + protected override void ReadPacket(BinaryReader reader) + { + Type = reader.ReadByte(); + To = reader.ReadInt32(); + From = reader.ReadInt32(); + User = reader.ReadInt32(); + if (!reader.ReadBoolean()) return; + Item = new GuildStorageItem + { + UserId = reader.ReadInt64(), + Item = new UserItem(reader) + }; + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Type); + writer.Write(To); + writer.Write(From); + writer.Write(User); + writer.Write(Item != null); + if (Item == null) return; + writer.Write(Item.UserId); + Item.Item.Save(writer); + } + } + public sealed class GuildStorageList : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.GuildStorageList; } + } + public GuildStorageItem[] Items; + protected override void ReadPacket(BinaryReader reader) + { + Items = new GuildStorageItem[reader.ReadInt32()]; + for (int i = 0; i < Items.Length; i++) + { + if (reader.ReadBoolean() == true) + Items[i] = new GuildStorageItem(reader); + } + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Items.Length); + for (int i = 0; i < Items.Length; i++) + { + writer.Write(Items[i] != null); + if (Items[i] != null) + Items[i].Save(writer); + } + } + + } + public sealed class GuildRequestWar : Packet + { + public override short Index { get { return (short)ServerPacketIds.GuildRequestWar; } } + protected override void ReadPacket(BinaryReader reader) + { + } + protected override void WritePacket(BinaryWriter writer) + { + } + } + + public sealed class DefaultNPC : Packet + { + public override short Index { get { return (short)ServerPacketIds.DefaultNPC; } } + + public uint ObjectID; + protected override void ReadPacket(BinaryReader reader) + { + ObjectID = reader.ReadUInt32(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(ObjectID); + } + } + + public sealed class NPCUpdate : Packet + { + public override short Index { get { return (short)ServerPacketIds.NPCUpdate; } } + + public uint NPCID; + + protected override void ReadPacket(BinaryReader reader) + { + NPCID = reader.ReadUInt32(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(NPCID); + } + } + + + public sealed class NPCImageUpdate : Packet + { + public override short Index { get { return (short)ServerPacketIds.NPCImageUpdate; } } + + public long ObjectID; + public ushort Image; + public Color Colour; + + protected override void ReadPacket(BinaryReader reader) + { + ObjectID = reader.ReadInt64(); + Image = reader.ReadUInt16(); + Colour = Color.FromArgb(reader.ReadInt32()); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(ObjectID); + writer.Write(Image); + writer.Write(Colour.ToArgb()); + } + } + + public sealed class ChangeQuest : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.ChangeQuest; } + } + + public ClientQuestProgress Quest = new ClientQuestProgress(); + public QuestState QuestState; + public bool TrackQuest; + + protected override void ReadPacket(BinaryReader reader) + { + Quest = new ClientQuestProgress(reader); + QuestState = (QuestState)reader.ReadByte(); + TrackQuest = reader.ReadBoolean(); + } + protected override void WritePacket(BinaryWriter writer) + { + Quest.Save(writer); + writer.Write((byte)QuestState); + writer.Write(TrackQuest); + } + } + + public sealed class CompleteQuest : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.CompleteQuest; } + } + + public List CompletedQuests = new List(); + + protected override void ReadPacket(BinaryReader reader) + { + int count = reader.ReadInt32(); + for (var i = 0; i < count; i++) + CompletedQuests.Add(reader.ReadInt32()); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(CompletedQuests.Count); + foreach (int q in CompletedQuests) + writer.Write(q); + } + } + + public sealed class ShareQuest : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.ShareQuest; } + } + + public int QuestIndex; + public string SharerName; + + protected override void ReadPacket(BinaryReader reader) + { + QuestIndex = reader.ReadInt32(); + SharerName = reader.ReadString(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(QuestIndex); + writer.Write(SharerName); + } + } + + + public sealed class NewQuestInfo : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.NewQuestInfo; } + } + + public ClientQuestInfo Info; + + protected override void ReadPacket(BinaryReader reader) + { + Info = new ClientQuestInfo(reader); + } + + protected override void WritePacket(BinaryWriter writer) + { + Info.Save(writer); + } + } + + public sealed class GainedQuestItem : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.GainedQuestItem; } + } + + public UserItem Item; + + protected override void ReadPacket(BinaryReader reader) + { + Item = new UserItem(reader); + } + + protected override void WritePacket(BinaryWriter writer) + { + Item.Save(writer); + } + } + + public sealed class DeleteQuestItem : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.DeleteQuestItem; } + } + + public ulong UniqueID; + public ushort Count; + + protected override void ReadPacket(BinaryReader reader) + { + UniqueID = reader.ReadUInt64(); + Count = reader.ReadUInt16(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(UniqueID); + writer.Write(Count); + } + } + + public sealed class GameShopInfo : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.GameShopInfo; } + } + + public GameShopItem Item; + public int StockLevel; + + protected override void ReadPacket(BinaryReader reader) + { + Item = new GameShopItem(reader, true); + StockLevel = reader.ReadInt32(); + } + + protected override void WritePacket(BinaryWriter writer) + { + Item.Save(writer, true); + writer.Write(StockLevel); + } + } + + public sealed class GameShopStock : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.GameShopStock; } + } + + public int GIndex; + public int StockLevel; + + protected override void ReadPacket(BinaryReader reader) + { + GIndex = reader.ReadInt32(); + StockLevel = reader.ReadInt32(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(GIndex); + writer.Write(StockLevel); + } + } + + + public sealed class CombineItem : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.CombineItem; } + } + + public MirGridType Grid; + public ulong IDFrom, IDTo; + public bool Success; + public bool Destroy; + + protected override void ReadPacket(BinaryReader reader) + { + Grid = (MirGridType)reader.ReadByte(); + IDFrom = reader.ReadUInt64(); + IDTo = reader.ReadUInt64(); + Success = reader.ReadBoolean(); + Destroy = reader.ReadBoolean(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write((byte)Grid); + writer.Write(IDFrom); + writer.Write(IDTo); + writer.Write(Success); + writer.Write(Destroy); + } + } + + public sealed class ItemUpgraded : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.ItemUpgraded; } + } + + public UserItem Item; + + protected override void ReadPacket(BinaryReader reader) + { + Item = new UserItem(reader); + } + + protected override void WritePacket(BinaryWriter writer) + { + Item.Save(writer); + } + } + + public sealed class ObjectLevelEffects : Packet + { + public override short Index { get { return (short)ServerPacketIds.ObjectLevelEffects; } } + + public uint ObjectID; + public LevelEffects LevelEffects; + + protected override void ReadPacket(BinaryReader reader) + { + ObjectID = reader.ReadUInt32(); + LevelEffects = (LevelEffects)reader.ReadUInt16(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(ObjectID); + writer.Write((ushort)LevelEffects); + } + } + + public sealed class SendOutputMessage : Packet + { + public override short Index { get { return (short)ServerPacketIds.SendOutputMessage; } } + + public string Message; + public OutputMessageType Type; + + protected override void ReadPacket(BinaryReader reader) + { + Message = reader.ReadString(); + Type = (OutputMessageType)reader.ReadByte(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Message); + writer.Write((byte)Type); + } + } + + public sealed class ReceiveMail : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.ReceiveMail; } + } + + public List Mail = new List(); + + protected override void ReadPacket(BinaryReader reader) + { + int count = reader.ReadInt32(); + + for (int i = 0; i < count; i++) + Mail.Add(new ClientMail(reader)); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Mail.Count); + + for (int i = 0; i < Mail.Count; i++) + Mail[i].Save(writer); + } + } + public sealed class MailLockedItem : Packet + { + public override short Index { get { return (short)ServerPacketIds.MailLockedItem; } } + + public ulong UniqueID; + public bool Locked; + + protected override void ReadPacket(BinaryReader reader) + { + UniqueID = reader.ReadUInt64(); + Locked = reader.ReadBoolean(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(UniqueID); + writer.Write(Locked); + } + } + + public sealed class MailSent : Packet + { + public sbyte Result; + + public override short Index + { + get { return (short)ServerPacketIds.MailSent; } + } + + protected override void ReadPacket(BinaryReader reader) + { + Result = reader.ReadSByte(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Result); + } + } + + public sealed class MailSendRequest : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.MailSendRequest; } + } + + protected override void ReadPacket(BinaryReader reader) + { + } + + protected override void WritePacket(BinaryWriter writer) + { + } + } + + public sealed class ParcelCollected : Packet + { + public sbyte Result; + + public override short Index + { + get { return (short)ServerPacketIds.ParcelCollected; } + } + + protected override void ReadPacket(BinaryReader reader) + { + Result = reader.ReadSByte(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Result); + } + } + + public sealed class MailCost : Packet + { + public uint Cost; + + public override short Index + { + get { return (short)ServerPacketIds.MailCost; } + } + + protected override void ReadPacket(BinaryReader reader) + { + Cost = reader.ReadUInt32(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Cost); + } + } + + public sealed class ResizeInventory : Packet + { + public override short Index { get { return (short)ServerPacketIds.ResizeInventory; } } + + public int Size; + + protected override void ReadPacket(BinaryReader reader) + { + Size = reader.ReadInt32(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Size); + } + } + + public sealed class ResizeStorage : Packet + { + public override short Index { get { return (short)ServerPacketIds.ResizeStorage; } } + + public int Size; + public bool HasExpandedStorage; + public DateTime ExpiryTime; + + protected override void ReadPacket(BinaryReader reader) + { + Size = reader.ReadInt32(); + HasExpandedStorage = reader.ReadBoolean(); + ExpiryTime = DateTime.FromBinary(reader.ReadInt64()); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Size); + writer.Write(HasExpandedStorage); + writer.Write(ExpiryTime.ToBinary()); + } + } + + public sealed class FriendUpdate : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.FriendUpdate; } + } + + public List Friends = new List(); + + protected override void ReadPacket(BinaryReader reader) + { + int count = reader.ReadInt32(); + + for (int i = 0; i < count; i++) + Friends.Add(new ClientFriend(reader)); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Friends.Count); + + for (int i = 0; i < Friends.Count; i++) + Friends[i].Save(writer); + } + } + + public sealed class GuildBuffList : Packet + { + public override short Index { get { return (short)ServerPacketIds.GuildBuffList; } } + + public byte Remove = 0; + public List ActiveBuffs = new List(); + public List GuildBuffs = new List(); + + protected override void ReadPacket(BinaryReader reader) + { + Remove = reader.ReadByte(); + int count = reader.ReadInt32(); + for (int i = 0; i < count; i++) + ActiveBuffs.Add(new GuildBuff(reader)); + count = reader.ReadInt32(); + for (int i = 0; i < count; i++) + GuildBuffs.Add(new GuildBuffInfo(reader)); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Remove); + writer.Write(ActiveBuffs.Count); + for (int i = 0; i < ActiveBuffs.Count; i++) + ActiveBuffs[i].Save(writer); + writer.Write(GuildBuffs.Count); + for (int i = 0; i < GuildBuffs.Count; i++) + GuildBuffs[i].Save(writer); + } + } + public sealed class LoverUpdate : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.LoverUpdate; } + } + + public string Name; + public DateTime Date; + public string MapName; + public short MarriedDays; + + protected override void ReadPacket(BinaryReader reader) + { + Name = reader.ReadString(); + Date = DateTime.FromBinary(reader.ReadInt64()); + MapName = reader.ReadString(); + MarriedDays = reader.ReadInt16(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Name); + writer.Write(Date.ToBinary()); + writer.Write(MapName); + writer.Write(MarriedDays); + } + } + + public sealed class NPCRequestInput : Packet + { + public override short Index { get { return (short)ServerPacketIds.NPCRequestInput; } } + + public uint NPCID; + public string PageName; + + protected override void ReadPacket(BinaryReader reader) + { + NPCID = reader.ReadUInt32(); + PageName = reader.ReadString(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(NPCID); + writer.Write(PageName); + } + } + + public sealed class Rankings : Packet + { + public override short Index { get { return (short)ServerPacketIds.Rankings; } } + public override bool Observable + { + get { return false; } + } + + public byte RankType = 0; + public int MyRank = 0; + public List ListingDetails = new List(); + public List Listings = new List(); + public int Count; + + protected override void ReadPacket(BinaryReader reader) + { + RankType = reader.ReadByte(); + MyRank = reader.ReadInt32(); + int count = reader.ReadInt32(); + for (int i = 0; i < count; i++) + { + ListingDetails.Add(new RankCharacterInfo(reader)); + } + count = reader.ReadInt32(); + for (int i = 0; i < count; i++) + { + Listings.Add(reader.ReadInt64()); + } + Count = reader.ReadInt32(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(RankType); + writer.Write(MyRank); + writer.Write(ListingDetails.Count); + for (int i = 0; i < ListingDetails.Count; i++) + ListingDetails[i].Save(writer); + writer.Write(Listings.Count); + for (int i = 0; i < Listings.Count; i++) + writer.Write(Listings[i]); + writer.Write(Count); + } + } + + public sealed class OpenBrowser : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.OpenBrowser; } + } + + public string Url; + + protected override void ReadPacket(BinaryReader reader) + { + Url = reader.ReadString(); + } + + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Url); + } + } + public sealed class PlaySound : Packet + { + public int Sound; + + public override short Index + { + get { return (short)ServerPacketIds.PlaySound; } + } + + protected override void ReadPacket(BinaryReader reader) + { + Sound = reader.ReadInt32(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Sound); + } + } + + public sealed class SetTimer : Packet + { + public override short Index { get { return (short)ServerPacketIds.SetTimer; } } + + public string Key; + public byte Type; + public int Seconds; + + protected override void ReadPacket(BinaryReader reader) + { + Key = reader.ReadString(); + Type = reader.ReadByte(); + Seconds = reader.ReadInt32(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Key); + writer.Write(Type); + writer.Write(Seconds); + } + } + + public sealed class ExpireTimer : Packet + { + public override short Index { get { return (short)ServerPacketIds.ExpireTimer; } } + + public string Key; + + protected override void ReadPacket(BinaryReader reader) + { + Key = reader.ReadString(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Key); + } + } + + public sealed class UpdateNotice : Packet + { + public override short Index + { + get { return (short)ServerPacketIds.UpdateNotice; } + } + + public Notice Notice = new Notice(); + + protected override void ReadPacket(BinaryReader reader) + { + Notice = new Notice(reader); + } + + protected override void WritePacket(BinaryWriter writer) + { + Notice.Save(writer); + } + } + + public sealed class Roll : Packet + { + public override short Index { get { return (short)ServerPacketIds.Roll; } } + + public int Type; + public string Page; + public int Result; + public bool AutoRoll; + + protected override void ReadPacket(BinaryReader reader) + { + Type = reader.ReadInt32(); + Page = reader.ReadString(); + Result = reader.ReadInt32(); + AutoRoll = reader.ReadBoolean(); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Type); + writer.Write(Page); + writer.Write(Result); + writer.Write(AutoRoll); + } + } + + + public sealed class SetCompass : Packet + { + public override short Index { get { return (short)ServerPacketIds.SetCompass; } } + + public Point Location; + + protected override void ReadPacket(BinaryReader reader) + { + var x = reader.ReadInt32(); + var y = reader.ReadInt32(); + + Location = new Point(x, y); + } + protected override void WritePacket(BinaryWriter writer) + { + writer.Write(Location.X); + writer.Write(Location.Y); + } + } +} \ No newline at end of file diff --git a/Shared/Shared.csproj b/Shared/Shared.csproj new file mode 100644 index 0000000..00f6966 --- /dev/null +++ b/Shared/Shared.csproj @@ -0,0 +1,30 @@ + + + + net8.0 + enable + disable + + + + false + false + MIR1.ICO + + + + + 1701;1702 + + + + 1701;1702 + + + + + Always + + + + diff --git a/SoundRules.txt b/SoundRules.txt new file mode 100644 index 0000000..ad3e5fa --- /dev/null +++ b/SoundRules.txt @@ -0,0 +1,25 @@ +Wemade Mir1 +---------- +Mon File * 10 + 1. + +1 = Appear +2 = Attack +4 = Flinch +5 = Die +6 = Attack2 + +Crystal +---------- +0 = Appear +1 = Attack +2 = Flinch +3 = Die +4 = Swing +5 = Dead (coded) +6 = Attack2 +7 = Attack3 +8 = Attack4 +8/9 = Walk (coded) +Range = Attack (coded if not) +Range2 = Attack2 (coded if not) +Range3 = Attack3 (coded if not) \ No newline at end of file